Файловый менеджер - Редактировать - /home/jogoso94/public_html/static/img/logo/c2runtime.js.tar
�азад
home/jogoso94/public_html/jogos/zumbie_buster/c2runtime.js 0000644 00004227112 15042521347 0017735 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com var cr = {}; cr.plugins_ = {}; cr.behaviors = {}; if (typeof Object.getPrototypeOf !== "function") { if (typeof "test".__proto__ === "object") { Object.getPrototypeOf = function(object) { return object.__proto__; }; } else { Object.getPrototypeOf = function(object) { return object.constructor.prototype; }; } } (function(){ cr.logexport = function (msg) { if (window.console && window.console.log) window.console.log(msg); }; cr.logerror = function (msg) { if (window.console && window.console.error) window.console.error(msg); }; cr.seal = function(x) { return x; }; cr.freeze = function(x) { return x; }; cr.is_undefined = function (x) { return typeof x === "undefined"; }; cr.is_number = function (x) { return typeof x === "number"; }; cr.is_string = function (x) { return typeof x === "string"; }; cr.isPOT = function (x) { return x > 0 && ((x - 1) & x) === 0; }; cr.nextHighestPowerOfTwo = function(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } cr.abs = function (x) { return (x < 0 ? -x : x); }; cr.max = function (a, b) { return (a > b ? a : b); }; cr.min = function (a, b) { return (a < b ? a : b); }; cr.PI = Math.PI; cr.round = function (x) { return (x + 0.5) | 0; }; cr.floor = function (x) { if (x >= 0) return x | 0; else return (x | 0) - 1; // correctly round down when negative }; cr.ceil = function (x) { var f = x | 0; return (f === x ? f : f + 1); }; function Vector2(x, y) { this.x = x; this.y = y; cr.seal(this); }; Vector2.prototype.offset = function (px, py) { this.x += px; this.y += py; return this; }; Vector2.prototype.mul = function (px, py) { this.x *= px; this.y *= py; return this; }; cr.vector2 = Vector2; cr.segments_intersect = function(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { var max_ax, min_ax, max_ay, min_ay, max_bx, min_bx, max_by, min_by; if (a1x < a2x) { min_ax = a1x; max_ax = a2x; } else { min_ax = a2x; max_ax = a1x; } if (b1x < b2x) { min_bx = b1x; max_bx = b2x; } else { min_bx = b2x; max_bx = b1x; } if (max_ax < min_bx || min_ax > max_bx) return false; if (a1y < a2y) { min_ay = a1y; max_ay = a2y; } else { min_ay = a2y; max_ay = a1y; } if (b1y < b2y) { min_by = b1y; max_by = b2y; } else { min_by = b2y; max_by = b1y; } if (max_ay < min_by || min_ay > max_by) return false; var dpx = b1x - a1x + b2x - a2x; var dpy = b1y - a1y + b2y - a2y; var qax = a2x - a1x; var qay = a2y - a1y; var qbx = b2x - b1x; var qby = b2y - b1y; var d = cr.abs(qay * qbx - qby * qax); var la = qbx * dpy - qby * dpx; if (cr.abs(la) > d) return false; var lb = qax * dpy - qay * dpx; return cr.abs(lb) <= d; }; function Rect(left, top, right, bottom) { this.set(left, top, right, bottom); cr.seal(this); }; Rect.prototype.set = function (left, top, right, bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; }; Rect.prototype.copy = function (r) { this.left = r.left; this.top = r.top; this.right = r.right; this.bottom = r.bottom; }; Rect.prototype.width = function () { return this.right - this.left; }; Rect.prototype.height = function () { return this.bottom - this.top; }; Rect.prototype.offset = function (px, py) { this.left += px; this.top += py; this.right += px; this.bottom += py; return this; }; Rect.prototype.normalize = function () { var temp = 0; if (this.left > this.right) { temp = this.left; this.left = this.right; this.right = temp; } if (this.top > this.bottom) { temp = this.top; this.top = this.bottom; this.bottom = temp; } }; Rect.prototype.intersects_rect = function (rc) { return !(rc.right < this.left || rc.bottom < this.top || rc.left > this.right || rc.top > this.bottom); }; Rect.prototype.intersects_rect_off = function (rc, ox, oy) { return !(rc.right + ox < this.left || rc.bottom + oy < this.top || rc.left + ox > this.right || rc.top + oy > this.bottom); }; Rect.prototype.contains_pt = function (x, y) { return (x >= this.left && x <= this.right) && (y >= this.top && y <= this.bottom); }; Rect.prototype.equals = function (r) { return this.left === r.left && this.top === r.top && this.right === r.right && this.bottom === r.bottom; }; cr.rect = Rect; function Quad() { this.tlx = 0; this.tly = 0; this.trx = 0; this.try_ = 0; // is a keyword otherwise! this.brx = 0; this.bry = 0; this.blx = 0; this.bly = 0; cr.seal(this); }; Quad.prototype.set_from_rect = function (rc) { this.tlx = rc.left; this.tly = rc.top; this.trx = rc.right; this.try_ = rc.top; this.brx = rc.right; this.bry = rc.bottom; this.blx = rc.left; this.bly = rc.bottom; }; Quad.prototype.set_from_rotated_rect = function (rc, a) { if (a === 0) { this.set_from_rect(rc); } else { var sin_a = Math.sin(a); var cos_a = Math.cos(a); var left_sin_a = rc.left * sin_a; var top_sin_a = rc.top * sin_a; var right_sin_a = rc.right * sin_a; var bottom_sin_a = rc.bottom * sin_a; var left_cos_a = rc.left * cos_a; var top_cos_a = rc.top * cos_a; var right_cos_a = rc.right * cos_a; var bottom_cos_a = rc.bottom * cos_a; this.tlx = left_cos_a - top_sin_a; this.tly = top_cos_a + left_sin_a; this.trx = right_cos_a - top_sin_a; this.try_ = top_cos_a + right_sin_a; this.brx = right_cos_a - bottom_sin_a; this.bry = bottom_cos_a + right_sin_a; this.blx = left_cos_a - bottom_sin_a; this.bly = bottom_cos_a + left_sin_a; } }; Quad.prototype.offset = function (px, py) { this.tlx += px; this.tly += py; this.trx += px; this.try_ += py; this.brx += px; this.bry += py; this.blx += px; this.bly += py; return this; }; var minresult = 0; var maxresult = 0; function minmax4(a, b, c, d) { if (a < b) { if (c < d) { if (a < c) minresult = a; else minresult = c; if (b > d) maxresult = b; else maxresult = d; } else { if (a < d) minresult = a; else minresult = d; if (b > c) maxresult = b; else maxresult = c; } } else { if (c < d) { if (b < c) minresult = b; else minresult = c; if (a > d) maxresult = a; else maxresult = d; } else { if (b < d) minresult = b; else minresult = d; if (a > c) maxresult = a; else maxresult = c; } } }; Quad.prototype.bounding_box = function (rc) { minmax4(this.tlx, this.trx, this.brx, this.blx); rc.left = minresult; rc.right = maxresult; minmax4(this.tly, this.try_, this.bry, this.bly); rc.top = minresult; rc.bottom = maxresult; }; Quad.prototype.contains_pt = function (x, y) { var tlx = this.tlx; var tly = this.tly; var v0x = this.trx - tlx; var v0y = this.try_ - tly; var v1x = this.brx - tlx; var v1y = this.bry - tly; var v2x = x - tlx; var v2y = y - tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y var dot11 = v1x * v1x + v1y * v1y var dot12 = v1x * v2x + v1y * v2y var invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); var u = (dot11 * dot02 - dot01 * dot12) * invDenom; var v = (dot00 * dot12 - dot01 * dot02) * invDenom; if ((u >= 0.0) && (v > 0.0) && (u + v < 1)) return true; v0x = this.blx - tlx; v0y = this.bly - tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); u = (dot11 * dot02 - dot01 * dot12) * invDenom; v = (dot00 * dot12 - dot01 * dot02) * invDenom; return (u >= 0.0) && (v > 0.0) && (u + v < 1); }; Quad.prototype.at = function (i, xory) { if (xory) { switch (i) { case 0: return this.tlx; case 1: return this.trx; case 2: return this.brx; case 3: return this.blx; case 4: return this.tlx; default: return this.tlx; } } else { switch (i) { case 0: return this.tly; case 1: return this.try_; case 2: return this.bry; case 3: return this.bly; case 4: return this.tly; default: return this.tly; } } }; Quad.prototype.midX = function () { return (this.tlx + this.trx + this.brx + this.blx) / 4; }; Quad.prototype.midY = function () { return (this.tly + this.try_ + this.bry + this.bly) / 4; }; Quad.prototype.intersects_segment = function (x1, y1, x2, y2) { if (this.contains_pt(x1, y1) || this.contains_pt(x2, y2)) return true; var a1x, a1y, a2x, a2y; var i; for (i = 0; i < 4; i++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; Quad.prototype.intersects_quad = function (rhs) { var midx = rhs.midX(); var midy = rhs.midY(); if (this.contains_pt(midx, midy)) return true; midx = this.midX(); midy = this.midY(); if (rhs.contains_pt(midx, midy)) return true; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; var i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); b1x = rhs.at(j, true); b1y = rhs.at(j, false); b2x = rhs.at(j + 1, true); b2y = rhs.at(j + 1, false); if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; cr.quad = Quad; cr.RGB = function (red, green, blue) { return Math.max(Math.min(red, 255), 0) | (Math.max(Math.min(green, 255), 0) << 8) | (Math.max(Math.min(blue, 255), 0) << 16); }; cr.GetRValue = function (rgb) { return rgb & 0xFF; }; cr.GetGValue = function (rgb) { return (rgb & 0xFF00) >> 8; }; cr.GetBValue = function (rgb) { return (rgb & 0xFF0000) >> 16; }; cr.shallowCopy = function (a, b, allowOverwrite) { var attr; for (attr in b) { if (b.hasOwnProperty(attr)) { ; a[attr] = b[attr]; } } return a; }; cr.arrayRemove = function (arr, index) { var i, len; index = cr.floor(index); if (index < 0 || index >= arr.length) return; // index out of bounds for (i = index, len = arr.length - 1; i < len; i++) arr[i] = arr[i + 1]; cr.truncateArray(arr, len); }; cr.truncateArray = function (arr, index) { arr.length = index; }; cr.clearArray = function (arr) { cr.truncateArray(arr, 0); }; cr.shallowAssignArray = function (dest, src) { cr.clearArray(dest); var i, len; for (i = 0, len = src.length; i < len; ++i) dest[i] = src[i]; }; cr.appendArray = function (a, b) { a.push.apply(a, b); }; cr.fastIndexOf = function (arr, item) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { if (arr[i] === item) return i; } return -1; }; cr.arrayFindRemove = function (arr, item) { var index = cr.fastIndexOf(arr, item); if (index !== -1) cr.arrayRemove(arr, index); }; cr.clamp = function(x, a, b) { if (x < a) return a; else if (x > b) return b; else return x; }; cr.to_radians = function(x) { return x / (180.0 / cr.PI); }; cr.to_degrees = function(x) { return x * (180.0 / cr.PI); }; cr.clamp_angle_degrees = function (a) { a %= 360; // now in (-360, 360) range if (a < 0) a += 360; // now in [0, 360) range return a; }; cr.clamp_angle = function (a) { a %= 2 * cr.PI; // now in (-2pi, 2pi) range if (a < 0) a += 2 * cr.PI; // now in [0, 2pi) range return a; }; cr.to_clamped_degrees = function (x) { return cr.clamp_angle_degrees(cr.to_degrees(x)); }; cr.to_clamped_radians = function (x) { return cr.clamp_angle(cr.to_radians(x)); }; cr.angleTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.atan2(dy, dx); }; cr.angleDiff = function (a1, a2) { if (a1 === a2) return 0; var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); var n = s1 * s2 + c1 * c2; if (n >= 1) return 0; if (n <= -1) return cr.PI; return Math.acos(n); }; cr.angleRotate = function (start, end, step) { var ss = Math.sin(start); var cs = Math.cos(start); var se = Math.sin(end); var ce = Math.cos(end); if (Math.acos(ss * se + cs * ce) > step) { if (cs * se - ss * ce > 0) return cr.clamp_angle(start + step); else return cr.clamp_angle(start - step); } else return cr.clamp_angle(end); }; cr.angleClockwise = function (a1, a2) { var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); return c1 * s2 - s1 * c2 <= 0; }; cr.rotatePtAround = function (px, py, a, ox, oy, getx) { if (a === 0) return getx ? px : py; var sin_a = Math.sin(a); var cos_a = Math.cos(a); px -= ox; py -= oy; var left_sin_a = px * sin_a; var top_sin_a = py * sin_a; var left_cos_a = px * cos_a; var top_cos_a = py * cos_a; px = left_cos_a - top_sin_a; py = top_cos_a + left_sin_a; px += ox; py += oy; return getx ? px : py; } cr.distanceTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.sqrt(dx*dx + dy*dy); }; cr.xor = function (x, y) { return !x !== !y; }; cr.lerp = function (a, b, x) { return a + (b - a) * x; }; cr.unlerp = function (a, b, c) { if (a === b) return 0; // avoid divide by 0 return (c - a) / (b - a); }; cr.anglelerp = function (a, b, x) { var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { return a + diff * x; } else { return a - diff * x; } }; cr.qarp = function (a, b, c, x) { return cr.lerp(cr.lerp(a, b, x), cr.lerp(b, c, x), x); }; cr.cubic = function (a, b, c, d, x) { return cr.lerp(cr.qarp(a, b, c, x), cr.qarp(b, c, d, x), x); }; cr.cosp = function (a, b, x) { return (a + b + (a - b) * Math.cos(x * Math.PI)) / 2; }; cr.hasAnyOwnProperty = function (o) { var p; for (p in o) { if (o.hasOwnProperty(p)) return true; } return false; }; cr.wipe = function (obj) { var p; for (p in obj) { if (obj.hasOwnProperty(p)) delete obj[p]; } }; var startup_time = +(new Date()); cr.performance_now = function() { if (typeof window["performance"] !== "undefined") { var winperf = window["performance"]; if (typeof winperf.now !== "undefined") return winperf.now(); else if (typeof winperf["webkitNow"] !== "undefined") return winperf["webkitNow"](); else if (typeof winperf["mozNow"] !== "undefined") return winperf["mozNow"](); else if (typeof winperf["msNow"] !== "undefined") return winperf["msNow"](); } return Date.now() - startup_time; }; var isChrome = false; var isSafari = false; var isiOS = false; var isEjecta = false; if (typeof window !== "undefined") // not c2 editor { isChrome = /chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent); isSafari = !isChrome && /safari/i.test(navigator.userAgent); isiOS = /(iphone|ipod|ipad)/i.test(navigator.userAgent); isEjecta = window["c2ejecta"]; } var supports_set = ((!isSafari && !isEjecta && !isiOS) && (typeof Set !== "undefined" && typeof Set.prototype["forEach"] !== "undefined")); function ObjectSet_() { this.s = null; this.items = null; // lazy allocated (hopefully results in better GC performance) this.item_count = 0; if (supports_set) { this.s = new Set(); } this.values_cache = []; this.cache_valid = true; cr.seal(this); }; ObjectSet_.prototype.contains = function (x) { if (this.isEmpty()) return false; if (supports_set) return this.s["has"](x); else return (this.items && this.items.hasOwnProperty(x)); }; ObjectSet_.prototype.add = function (x) { if (supports_set) { if (!this.s["has"](x)) { this.s["add"](x); this.cache_valid = false; } } else { var str = x.toString(); var items = this.items; if (!items) { this.items = {}; this.items[str] = x; this.item_count = 1; this.cache_valid = false; } else if (!items.hasOwnProperty(str)) { items[str] = x; this.item_count++; this.cache_valid = false; } } }; ObjectSet_.prototype.remove = function (x) { if (this.isEmpty()) return; if (supports_set) { if (this.s["has"](x)) { this.s["delete"](x); this.cache_valid = false; } } else if (this.items) { var str = x.toString(); var items = this.items; if (items.hasOwnProperty(str)) { delete items[str]; this.item_count--; this.cache_valid = false; } } }; ObjectSet_.prototype.clear = function (/*wipe_*/) { if (this.isEmpty()) return; if (supports_set) { this.s["clear"](); // best! } else { this.items = null; // creates garbage; will lazy allocate on next add() this.item_count = 0; } cr.clearArray(this.values_cache); this.cache_valid = true; }; ObjectSet_.prototype.isEmpty = function () { return this.count() === 0; }; ObjectSet_.prototype.count = function () { if (supports_set) return this.s["size"]; else return this.item_count; }; var current_arr = null; var current_index = 0; function set_append_to_arr(x) { current_arr[current_index++] = x; }; ObjectSet_.prototype.update_cache = function () { if (this.cache_valid) return; if (supports_set) { cr.clearArray(this.values_cache); current_arr = this.values_cache; current_index = 0; this.s["forEach"](set_append_to_arr); ; current_arr = null; current_index = 0; } else { var values_cache = this.values_cache; cr.clearArray(values_cache); var p, n = 0, items = this.items; if (items) { for (p in items) { if (items.hasOwnProperty(p)) values_cache[n++] = items[p]; } } ; } this.cache_valid = true; }; ObjectSet_.prototype.valuesRef = function () { this.update_cache(); return this.values_cache; }; cr.ObjectSet = ObjectSet_; var tmpSet = new cr.ObjectSet(); cr.removeArrayDuplicates = function (arr) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { tmpSet.add(arr[i]); } cr.shallowAssignArray(arr, tmpSet.valuesRef()); tmpSet.clear(); }; cr.arrayRemoveAllFromObjectSet = function (arr, remset) { if (supports_set) cr.arrayRemoveAll_set(arr, remset.s); else cr.arrayRemoveAll_arr(arr, remset.valuesRef()); }; cr.arrayRemoveAll_set = function (arr, s) { var i, j, len, item; for (i = 0, j = 0, len = arr.length; i < len; ++i) { item = arr[i]; if (!s["has"](item)) // not an item to remove arr[j++] = item; // keep it } cr.truncateArray(arr, j); }; cr.arrayRemoveAll_arr = function (arr, rem) { var i, j, len, item; for (i = 0, j = 0, len = arr.length; i < len; ++i) { item = arr[i]; if (cr.fastIndexOf(rem, item) === -1) // not an item to remove arr[j++] = item; // keep it } cr.truncateArray(arr, j); }; function KahanAdder_() { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; cr.seal(this); }; KahanAdder_.prototype.add = function (v) { this.y = v - this.c; this.t = this.sum + this.y; this.c = (this.t - this.sum) - this.y; this.sum = this.t; }; KahanAdder_.prototype.reset = function () { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; }; cr.KahanAdder = KahanAdder_; cr.regexp_escape = function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }; function CollisionPoly_(pts_array_) { this.pts_cache = []; this.bboxLeft = 0; this.bboxTop = 0; this.bboxRight = 0; this.bboxBottom = 0; this.convexpolys = null; // for physics behavior to cache separated polys this.set_pts(pts_array_); cr.seal(this); }; CollisionPoly_.prototype.set_pts = function(pts_array_) { this.pts_array = pts_array_; this.pts_count = pts_array_.length / 2; // x, y, x, y... in array this.pts_cache.length = pts_array_.length; this.cache_width = -1; this.cache_height = -1; this.cache_angle = 0; }; CollisionPoly_.prototype.is_empty = function() { return !this.pts_array.length; }; CollisionPoly_.prototype.update_bbox = function () { var myptscache = this.pts_cache; var bboxLeft_ = myptscache[0]; var bboxRight_ = bboxLeft_; var bboxTop_ = myptscache[1]; var bboxBottom_ = bboxTop_; var x, y, i = 1, i2, len = this.pts_count; for ( ; i < len; ++i) { i2 = i*2; x = myptscache[i2]; y = myptscache[i2+1]; if (x < bboxLeft_) bboxLeft_ = x; if (x > bboxRight_) bboxRight_ = x; if (y < bboxTop_) bboxTop_ = y; if (y > bboxBottom_) bboxBottom_ = y; } this.bboxLeft = bboxLeft_; this.bboxRight = bboxRight_; this.bboxTop = bboxTop_; this.bboxBottom = bboxBottom_; }; CollisionPoly_.prototype.set_from_rect = function(rc, offx, offy) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = rc.left - offx; myptscache[1] = rc.top - offy; myptscache[2] = rc.right - offx; myptscache[3] = rc.top - offy; myptscache[4] = rc.right - offx; myptscache[5] = rc.bottom - offy; myptscache[6] = rc.left - offx; myptscache[7] = rc.bottom - offy; this.cache_width = rc.right - rc.left; this.cache_height = rc.bottom - rc.top; this.update_bbox(); }; CollisionPoly_.prototype.set_from_quad = function(q, offx, offy, w, h) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = q.tlx - offx; myptscache[1] = q.tly - offy; myptscache[2] = q.trx - offx; myptscache[3] = q.try_ - offy; myptscache[4] = q.brx - offx; myptscache[5] = q.bry - offy; myptscache[6] = q.blx - offx; myptscache[7] = q.bly - offy; this.cache_width = w; this.cache_height = h; this.update_bbox(); }; CollisionPoly_.prototype.set_from_poly = function (r) { this.pts_count = r.pts_count; cr.shallowAssignArray(this.pts_cache, r.pts_cache); this.bboxLeft = r.bboxLeft; this.bboxTop - r.bboxTop; this.bboxRight = r.bboxRight; this.bboxBottom = r.bboxBottom; }; CollisionPoly_.prototype.cache_poly = function(w, h, a) { if (this.cache_width === w && this.cache_height === h && this.cache_angle === a) return; // cache up-to-date this.cache_width = w; this.cache_height = h; this.cache_angle = a; var i, i2, i21, len, x, y; var sina = 0; var cosa = 1; var myptsarray = this.pts_array; var myptscache = this.pts_cache; if (a !== 0) { sina = Math.sin(a); cosa = Math.cos(a); } for (i = 0, len = this.pts_count; i < len; i++) { i2 = i*2; i21 = i2+1; x = myptsarray[i2] * w; y = myptsarray[i21] * h; myptscache[i2] = (x * cosa) - (y * sina); myptscache[i21] = (y * cosa) + (x * sina); } this.update_bbox(); }; CollisionPoly_.prototype.contains_pt = function (a2x, a2y) { var myptscache = this.pts_cache; if (a2x === myptscache[0] && a2y === myptscache[1]) return true; var i, i2, imod, len = this.pts_count; var a1x = this.bboxLeft - 110; var a1y = this.bboxTop - 101; var a3x = this.bboxRight + 131 var a3y = this.bboxBottom + 120; var b1x, b1y, b2x, b2y; var count1 = 0, count2 = 0; for (i = 0; i < len; i++) { i2 = i*2; imod = ((i+1)%len)*2; b1x = myptscache[i2]; b1y = myptscache[i2+1]; b2x = myptscache[imod]; b2y = myptscache[imod+1]; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) count1++; if (cr.segments_intersect(a3x, a3y, a2x, a2y, b1x, b1y, b2x, b2y)) count2++; } return (count1 % 2 === 1) || (count2 % 2 === 1); }; CollisionPoly_.prototype.intersects_poly = function (rhs, offx, offy) { var rhspts = rhs.pts_cache; var mypts = this.pts_cache; if (this.contains_pt(rhspts[0] + offx, rhspts[1] + offy)) return true; if (rhs.contains_pt(mypts[0] - offx, mypts[1] - offy)) return true; var i, i2, imod, leni, j, j2, jmod, lenj; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i*2; imod = ((i+1)%leni)*2; a1x = mypts[i2]; a1y = mypts[i2+1]; a2x = mypts[imod]; a2y = mypts[imod+1]; for (j = 0, lenj = rhs.pts_count; j < lenj; j++) { j2 = j*2; jmod = ((j+1)%lenj)*2; b1x = rhspts[j2] + offx; b1y = rhspts[j2+1] + offy; b2x = rhspts[jmod] + offx; b2y = rhspts[jmod+1] + offy; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; CollisionPoly_.prototype.intersects_segment = function (offx, offy, x1, y1, x2, y2) { var mypts = this.pts_cache; if (this.contains_pt(x1 - offx, y1 - offy)) return true; var i, leni, i2, imod; var a1x, a1y, a2x, a2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i*2; imod = ((i+1)%leni)*2; a1x = mypts[i2] + offx; a1y = mypts[i2+1] + offy; a2x = mypts[imod] + offx; a2y = mypts[imod+1] + offy; if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; CollisionPoly_.prototype.mirror = function (px) { var i, leni, i2; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i*2; this.pts_cache[i2] = px * 2 - this.pts_cache[i2]; } }; CollisionPoly_.prototype.flip = function (py) { var i, leni, i21; for (i = 0, leni = this.pts_count; i < leni; ++i) { i21 = i*2+1; this.pts_cache[i21] = py * 2 - this.pts_cache[i21]; } }; CollisionPoly_.prototype.diag = function () { var i, leni, i2, i21, temp; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i*2; i21 = i2+1; temp = this.pts_cache[i2]; this.pts_cache[i2] = this.pts_cache[i21]; this.pts_cache[i21] = temp; } }; cr.CollisionPoly = CollisionPoly_; function SparseGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; SparseGrid_.prototype.totalCellCount = 0; SparseGrid_.prototype.getCell = function (x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; SparseGrid_.prototype.XToCell = function (x_) { return cr.floor(x_ / this.cellwidth); }; SparseGrid_.prototype.YToCell = function (y_) { return cr.floor(y_ / this.cellheight); }; SparseGrid_.prototype.update = function (inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeGridCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; SparseGrid_.prototype.queryRange = function (rc, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(rc.left); ystart = this.YToCell(rc.top); lenx = this.XToCell(rc.right); leny = this.YToCell(rc.bottom); for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; cr.SparseGrid = SparseGrid_; function RenderGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; RenderGrid_.prototype.totalCellCount = 0; RenderGrid_.prototype.getCell = function (x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocRenderCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocRenderCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; RenderGrid_.prototype.XToCell = function (x_) { return cr.floor(x_ / this.cellwidth); }; RenderGrid_.prototype.YToCell = function (y_) { return cr.floor(y_ / this.cellheight); }; RenderGrid_.prototype.update = function (inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeRenderCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; RenderGrid_.prototype.queryRange = function (left, top, right, bottom, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(left); ystart = this.YToCell(top); lenx = this.XToCell(right); leny = this.YToCell(bottom); for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; RenderGrid_.prototype.markRangeChanged = function (rc) { var x, lenx, ystart, y, leny, cell; x = rc.left; ystart = rc.top; lenx = rc.right; leny = rc.bottom; for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.is_sorted = false; } } }; cr.RenderGrid = RenderGrid_; var gridcellcache = []; function allocGridCell(grid_, x_, y_) { var ret; SparseGrid_.prototype.totalCellCount++; if (gridcellcache.length) { ret = gridcellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.GridCell(grid_, x_, y_); }; function freeGridCell(c) { SparseGrid_.prototype.totalCellCount--; c.objects.clear(); if (gridcellcache.length < 1000) gridcellcache.push(c); }; function GridCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = new cr.ObjectSet(); }; GridCell_.prototype.isEmpty = function () { return this.objects.isEmpty(); }; GridCell_.prototype.insert = function (inst) { this.objects.add(inst); }; GridCell_.prototype.remove = function (inst) { this.objects.remove(inst); }; GridCell_.prototype.dump = function (result) { cr.appendArray(result, this.objects.valuesRef()); }; cr.GridCell = GridCell_; var rendercellcache = []; function allocRenderCell(grid_, x_, y_) { var ret; RenderGrid_.prototype.totalCellCount++; if (rendercellcache.length) { ret = rendercellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.RenderCell(grid_, x_, y_); }; function freeRenderCell(c) { RenderGrid_.prototype.totalCellCount--; c.reset(); if (rendercellcache.length < 1000) rendercellcache.push(c); }; function RenderCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = []; // array which needs to be sorted by Z order this.is_sorted = true; // whether array is in correct sort order or not this.pending_removal = new cr.ObjectSet(); this.any_pending_removal = false; }; RenderCell_.prototype.isEmpty = function () { if (!this.objects.length) { ; ; return true; } if (this.objects.length > this.pending_removal.count()) return false; ; this.flush_pending(); // takes fast path and just resets state return true; }; RenderCell_.prototype.insert = function (inst) { if (this.pending_removal.contains(inst)) { this.pending_removal.remove(inst); if (this.pending_removal.isEmpty()) this.any_pending_removal = false; return; } if (this.objects.length) { var top = this.objects[this.objects.length - 1]; if (top.get_zindex() > inst.get_zindex()) this.is_sorted = false; // 'inst' should be somewhere beneath 'top' this.objects.push(inst); } else { this.objects.push(inst); this.is_sorted = true; } ; }; RenderCell_.prototype.remove = function (inst) { this.pending_removal.add(inst); this.any_pending_removal = true; if (this.pending_removal.count() >= 30) this.flush_pending(); }; RenderCell_.prototype.flush_pending = function () { ; if (!this.any_pending_removal) return; // not changed if (this.pending_removal.count() === this.objects.length) { this.reset(); return; } cr.arrayRemoveAllFromObjectSet(this.objects, this.pending_removal); this.pending_removal.clear(); this.any_pending_removal = false; }; function sortByInstanceZIndex(a, b) { return a.zindex - b.zindex; }; RenderCell_.prototype.ensure_sorted = function () { if (this.is_sorted) return; // already sorted this.objects.sort(sortByInstanceZIndex); this.is_sorted = true; }; RenderCell_.prototype.reset = function () { cr.clearArray(this.objects); this.is_sorted = true; this.pending_removal.clear(); this.any_pending_removal = false; }; RenderCell_.prototype.dump = function (result) { this.flush_pending(); this.ensure_sorted(); if (this.objects.length) result.push(this.objects); }; cr.RenderCell = RenderCell_; var fxNames = [ "lighter", "xor", "copy", "destination-over", "source-in", "destination-in", "source-out", "destination-out", "source-atop", "destination-atop"]; cr.effectToCompositeOp = function(effect) { if (effect <= 0 || effect >= 11) return "source-over"; return fxNames[effect - 1]; // not including "none" so offset by 1 }; cr.setGLBlend = function(this_, effect, gl) { if (!gl) return; this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; switch (effect) { case 1: // lighter (additive) this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE; break; case 2: // xor break; // todo case 3: // copy this_.srcBlend = gl.ONE; this_.destBlend = gl.ZERO; break; case 4: // destination-over this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ONE; break; case 5: // source-in this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ZERO; break; case 6: // destination-in this_.srcBlend = gl.ZERO; this_.destBlend = gl.SRC_ALPHA; break; case 7: // source-out this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ZERO; break; case 8: // destination-out this_.srcBlend = gl.ZERO; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 9: // source-atop this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 10: // destination-atop this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.SRC_ALPHA; break; } }; cr.round6dp = function (x) { return Math.round(x * 1000000) / 1000000; }; /* var localeCompare_options = { "usage": "search", "sensitivity": "accent" }; var has_localeCompare = !!"a".localeCompare; var localeCompare_works1 = (has_localeCompare && "a".localeCompare("A", undefined, localeCompare_options) === 0); var localeCompare_works2 = (has_localeCompare && "a".localeCompare("á", undefined, localeCompare_options) !== 0); var supports_localeCompare = (has_localeCompare && localeCompare_works1 && localeCompare_works2); */ cr.equals_nocase = function (a, b) { if (typeof a !== "string" || typeof b !== "string") return false; if (a.length !== b.length) return false; if (a === b) return true; /* if (supports_localeCompare) { return (a.localeCompare(b, undefined, localeCompare_options) === 0); } else { */ return a.toLowerCase() === b.toLowerCase(); }; cr.isCanvasInputEvent = function (e) { var target = e.target; if (!target) return true; if (target === document || target === window) return true; if (document && document.body && target === document.body) return true; if (cr.equals_nocase(target.tagName, "canvas")) return true; return false; }; }()); var MatrixArray=typeof Float32Array!=="undefined"?Float32Array:Array,glMatrixArrayType=MatrixArray,vec3={},mat3={},mat4={},quat4={};vec3.create=function(a){var b=new MatrixArray(3);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2]);return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a===c)return a[0]+=b[0],a[1]+=b[1],a[2]+=b[2],a;c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c}; vec3.subtract=function(a,b,c){if(!c||a===c)return a[0]-=b[0],a[1]-=b[1],a[2]-=b[2],a;c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a===c)return a[0]*=b,a[1]*=b,a[2]*=b,a;c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c}; vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g===1)return b[0]=c,b[1]=d,b[2]=e,b}else return b[0]=0,b[1]=0,b[2]=0,b;g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1],a=a[2],g=b[0],f=b[1],b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1],a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}; vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1],a=a[2]-b[2],b=Math.sqrt(d*d+e*e+a*a);if(!b)return c[0]=0,c[1]=0,c[2]=0,c;b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"}; mat3.create=function(a){var b=new MatrixArray(9);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8]);return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a}; mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[15]=1;b[14]=0;b[13]=0;b[12]=0;b[11]=0;b[10]=a[8];b[9]=a[7];b[8]=a[6];b[7]=0;b[6]=a[5];b[5]=a[4];b[4]=a[3];b[3]=0;b[2]=a[2];b[1]=a[1];b[0]=a[0];return b}; mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};mat4.create=function(a){var b=new MatrixArray(16);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]);return b}; mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a}; mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b}; mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],n=a[11],o=a[12],m=a[13],p=a[14],a=a[15];return o*k*h*e-j*m*h*e-o*f*l*e+g*m*l*e+j*f*p*e-g*k*p*e-o*k*d*i+j*m*d*i+o*c*l*i-b*m*l*i-j*c*p*i+b*k*p*i+o*f*d*n-g*m*d*n-o*c*h*n+b*m*h*n+g*c*p*n-b*f*p*n-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a}; mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],n=a[10],o=a[11],m=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*m,y=k*r-n*m,z=k*s-o*m,C=l*r-n*p,D=l*s-o*p,E=n*s-o*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+n*v-o*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-m*w+r*t-s*B)*q;b[7]=(k*w-n*t+o*B)*q;b[8]=(f*D-h*z+j*x)*q; b[9]=(-c*D+d*z-g*x)*q;b[10]=(m*v-p*t+s*A)*q;b[11]=(-k*v+l*t-o*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-m*u+p*B-r*A)*q;b[15]=(k*u-l*B+n*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,n=-k*g+h*i,o=j*g-f*i,m=c*l+d*n+e*o;if(!m)return null;m=1/m;b||(b=mat3.create());b[0]=l*m;b[1]=(-k*d+e*j)*m;b[2]=(h*d-e*f)*m;b[3]=n*m;b[4]=(k*c-e*i)*m;b[5]=(-h*c+e*g)*m;b[6]=o*m;b[7]=(-j*c+d*i)*m;b[8]=(f*c-d*g)*m;return b}; mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],n=a[9],o=a[10],m=a[11],p=a[12],r=a[13],s=a[14],a=a[15],A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14],b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*n+u*r;c[2]=A*g+B*j+t*o+u*s;c[3]=A*f+B*k+t*m+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*n+y*r;c[6]=v*g+w*j+x*o+y*s;c[7]=v*f+w*k+x*m+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*n+E*r;c[10]=z*g+C* j+D*o+E*s;c[11]=z*f+C*k+D*m+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*n+b*r;c[14]=q*g+F*j+G*o+b*s;c[15]=q*f+F*k+G*m+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c}; mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c}; mat4.translate=function(a,b,c){var d=b[0],e=b[1],b=b[2],g,f,h,i,j,k,l,n,o,m,p,r;if(!c||a===c)return a[12]=a[0]*d+a[4]*e+a[8]*b+a[12],a[13]=a[1]*d+a[5]*e+a[9]*b+a[13],a[14]=a[2]*d+a[6]*e+a[10]*b+a[14],a[15]=a[3]*d+a[7]*e+a[11]*b+a[15],a;g=a[0];f=a[1];h=a[2];i=a[3];j=a[4];k=a[5];l=a[6];n=a[7];o=a[8];m=a[9];p=a[10];r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=n;c[8]=o;c[9]=m;c[10]=p;c[11]=r;c[12]=g*d+j*e+o*b+a[12];c[13]=f*d+k*e+m*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+n*e+r*b+a[15]; return c};mat4.scale=function(a,b,c){var d=b[0],e=b[1],b=b[2];if(!c||a===c)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=b,a[9]*=b,a[10]*=b,a[11]*=b,a;c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c}; mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1],c=c[2],f=Math.sqrt(e*e+g*g+c*c),h,i,j,k,l,n,o,m,p,r,s,A,B,t,u,v,w,x,y,z;if(!f)return null;f!==1&&(f=1/f,e*=f,g*=f,c*=f);h=Math.sin(b);i=Math.cos(b);j=1-i;b=a[0];f=a[1];k=a[2];l=a[3];n=a[4];o=a[5];m=a[6];p=a[7];r=a[8];s=a[9];A=a[10];B=a[11];t=e*e*j+i;u=g*e*j+c*h;v=c*e*j-g*h;w=e*g*j-c*h;x=g*g*j+i;y=c*g*j+e*h;z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;d?a!==d&&(d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]):d=a;d[0]=b*t+n*u+r*v;d[1]=f*t+o*u+s*v;d[2]=k*t+m*u+A* v;d[3]=l*t+p*u+B*v;d[4]=b*w+n*x+r*y;d[5]=f*w+o*x+s*y;d[6]=k*w+m*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+n*e+r*g;d[9]=f*z+o*e+s*g;d[10]=k*z+m*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c}; mat4.rotateY=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[4]=a[4],c[5]=a[5],c[6]=a[6],c[7]=a[7],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c}; mat4.rotateZ=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];c?a!==c&&(c[8]=a[8],c[9]=a[9],c[10]=a[10],c[11]=a[11],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c}; mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b*=a;return mat4.frustum(-b,b,-a,a,c,d,e)}; mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f}; mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e,g,f,h,i,j,k,l,n=a[0],o=a[1],a=a[2];g=c[0];f=c[1];e=c[2];c=b[1];j=b[2];if(n===b[0]&&o===c&&a===j)return mat4.identity(d);c=n-b[0];j=o-b[1];k=a-b[2];l=1/Math.sqrt(c*c+j*j+k*k);c*=l;j*=l;k*=l;b=f*k-e*j;e=e*c-g*k;g=g*j-f*c;(l=Math.sqrt(b*b+e*e+g*g))?(l=1/l,b*=l,e*=l,g*=l):g=e=b=0;f=j*g-k*e;h=k*b-c*g;i=c*e-j*b;(l=Math.sqrt(f*f+h*h+i*i))?(l=1/l,f*=l,h*=l,i*=l):i=h=f=0;d[0]=b;d[1]=f;d[2]=c;d[3]=0;d[4]=e;d[5]=h;d[6]=j;d[7]=0;d[8]=g;d[9]=i;d[10]=k;d[11]= 0;d[12]=-(b*n+e*o+g*a);d[13]=-(f*n+h*o+i*a);d[14]=-(c*n+j*o+k*a);d[15]=1;return d};mat4.fromRotationTranslation=function(a,b,c){c||(c=mat4.create());var d=a[0],e=a[1],g=a[2],f=a[3],h=d+d,i=e+e,j=g+g,a=d*h,k=d*i;d*=j;var l=e*i;e*=j;g*=j;h*=f;i*=f;f*=j;c[0]=1-(l+g);c[1]=k+f;c[2]=d-i;c[3]=0;c[4]=k-f;c[5]=1-(a+g);c[6]=e+h;c[7]=0;c[8]=d+i;c[9]=e-h;c[10]=1-(a+l);c[11]=0;c[12]=b[0];c[13]=b[1];c[14]=b[2];c[15]=1;return c}; mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4.create=function(a){var b=new MatrixArray(4);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]);return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b}; quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a===b)return a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e)),a;b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a===b)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2],a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)}; quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f===0)return b[0]=0,b[1]=0,b[2]=0,b[3]=0,b;f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],a=a[3],f=b[0],h=b[1],i=b[2],b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c}; quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=a[0],f=a[1],h=a[2],a=a[3],i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d,d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=k-g;b[4]=1-(j+e);b[5]=d+f;b[6]=c+h;b[7]=d-f;b[8]=1-(j+l);return b}; quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=0;b[4]=k-g;b[5]=1-(j+e);b[6]=d+f;b[7]=0;b[8]=c+h;b[9]=d-f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; quat4.slerp=function(a,b,c,d){d||(d=a);var e=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],g,f;if(Math.abs(e)>=1)return d!==a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]),d;g=Math.acos(e);f=Math.sqrt(1-e*e);if(Math.abs(f)<0.001)return d[0]=a[0]*0.5+b[0]*0.5,d[1]=a[1]*0.5+b[1]*0.5,d[2]=a[2]*0.5+b[2]*0.5,d[3]=a[3]*0.5+b[3]*0.5,d;e=Math.sin((1-c)*g)/f;c=Math.sin(c*g)/f;d[0]=a[0]*e+b[0]*c;d[1]=a[1]*e+b[1]*c;d[2]=a[2]*e+b[2]*c;d[3]=a[3]*e+b[3]*c;return d}; quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}; (function() { var MAX_VERTICES = 8000; // equates to 2500 objects being drawn var MAX_INDICES = (MAX_VERTICES / 2) * 3; // 6 indices for every 4 vertices var MAX_POINTS = 8000; var MULTI_BUFFERS = 4; // cycle 4 buffers to try and avoid blocking var BATCH_NULL = 0; var BATCH_QUAD = 1; var BATCH_SETTEXTURE = 2; var BATCH_SETOPACITY = 3; var BATCH_SETBLEND = 4; var BATCH_UPDATEMODELVIEW = 5; var BATCH_RENDERTOTEXTURE = 6; var BATCH_CLEAR = 7; var BATCH_POINTS = 8; var BATCH_SETPROGRAM = 9; var BATCH_SETPROGRAMPARAMETERS = 10; var BATCH_SETTEXTURE1 = 11; var BATCH_SETCOLOR = 12; var BATCH_SETDEPTHTEST = 13; var BATCH_SETEARLYZMODE = 14; /* var lose_ext = null; window.lose_context = function () { if (!lose_ext) { console.log("WEBGL_lose_context not supported"); return; } lose_ext.loseContext(); }; window.restore_context = function () { if (!lose_ext) { console.log("WEBGL_lose_context not supported"); return; } lose_ext.restoreContext(); }; */ var tempMat4 = mat4.create(); function GLWrap_(gl, isMobile, enableFrontToBack) { this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent); this.width = 0; // not yet known, wait for call to setSize() this.height = 0; this.enableFrontToBack = !!enableFrontToBack; this.isEarlyZPass = false; this.isBatchInEarlyZPass = false; this.currentZ = 0; this.zNear = 1; this.zFar = 1000; this.zIncrement = ((this.zFar - this.zNear) / 32768); this.zA = this.zFar / (this.zFar - this.zNear); this.zB = this.zFar * this.zNear / (this.zNear - this.zFar); this.kzA = 65536 * this.zA; this.kzB = 65536 * this.zB; this.cam = vec3.create([0, 0, 100]); // camera position this.look = vec3.create([0, 0, 0]); // lookat position this.up = vec3.create([0, 1, 0]); // up vector this.worldScale = vec3.create([1, 1, 1]); // world scaling factor this.enable_mipmaps = true; this.matP = mat4.create(); // perspective matrix this.matMV = mat4.create(); // model view matrix this.lastMV = mat4.create(); this.currentMV = mat4.create(); this.gl = gl; this.initState(); }; GLWrap_.prototype.initState = function () { var gl = this.gl; var i, len; this.lastOpacity = 1; this.lastTexture0 = null; // last bound to TEXTURE0 this.lastTexture1 = null; // last bound to TEXTURE1 this.currentOpacity = 1; gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.disable(gl.CULL_FACE); gl.disable(gl.STENCIL_TEST); gl.disable(gl.DITHER); if (this.enableFrontToBack) { gl.enable(gl.DEPTH_TEST); gl.depthFunc(gl.LEQUAL); } else { gl.disable(gl.DEPTH_TEST); } this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); this.lastSrcBlend = gl.ONE; this.lastDestBlend = gl.ONE_MINUS_SRC_ALPHA; this.vertexData = new Float32Array(MAX_VERTICES * (this.enableFrontToBack ? 3 : 2)); this.texcoordData = new Float32Array(MAX_VERTICES * 2); this.pointData = new Float32Array(MAX_POINTS * 4); this.pointBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferData(gl.ARRAY_BUFFER, this.pointData.byteLength, gl.DYNAMIC_DRAW); this.vertexBuffers = new Array(MULTI_BUFFERS); this.texcoordBuffers = new Array(MULTI_BUFFERS); for (i = 0; i < MULTI_BUFFERS; i++) { this.vertexBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[i]); gl.bufferData(gl.ARRAY_BUFFER, this.vertexData.byteLength, gl.DYNAMIC_DRAW); this.texcoordBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[i]); gl.bufferData(gl.ARRAY_BUFFER, this.texcoordData.byteLength, gl.DYNAMIC_DRAW); } this.curBuffer = 0; this.indexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); var indexData = new Uint16Array(MAX_INDICES); i = 0, len = MAX_INDICES; var fv = 0; while (i < len) { indexData[i++] = fv; // top left indexData[i++] = fv + 1; // top right indexData[i++] = fv + 2; // bottom right (first tri) indexData[i++] = fv; // top left indexData[i++] = fv + 2; // bottom right indexData[i++] = fv + 3; // bottom left fv += 4; } gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW); this.vertexPtr = 0; this.texPtr = 0; this.pointPtr = 0; var fsSource, vsSource; this.shaderPrograms = []; fsSource = [ "varying mediump vec2 vTex;", "uniform lowp float opacity;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, vTex);", " gl_FragColor *= opacity;", "}" ].join("\n"); if (this.enableFrontToBack) { vsSource = [ "attribute highp vec3 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, aPos.z, 1.0);", " vTex = aTex;", "}" ].join("\n"); } else { vsSource = [ "attribute highp vec2 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " vTex = aTex;", "}" ].join("\n"); } var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<default>"); ; this.shaderPrograms.push(shaderProg); // Default shader is always shader 0 fsSource = [ "uniform mediump sampler2D samplerFront;", "varying lowp float opacity;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, gl_PointCoord);", " gl_FragColor *= opacity;", "}" ].join("\n"); var pointVsSource = [ "attribute vec4 aPos;", "varying float opacity;", "uniform mat4 matP;", "uniform mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " gl_PointSize = aPos.z;", " opacity = aPos.w;", "}" ].join("\n"); shaderProg = this.createShaderProgram({src: fsSource}, pointVsSource, "<point>"); ; this.shaderPrograms.push(shaderProg); // Point shader is always shader 1 fsSource = [ "varying mediump vec2 vTex;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " if (texture2D(samplerFront, vTex).a < 1.0)", " discard;", // discarding non-opaque fragments "}" ].join("\n"); var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<earlyz>"); ; this.shaderPrograms.push(shaderProg); // Early-Z shader is always shader 2 fsSource = [ "uniform lowp vec4 colorFill;", "void main(void) {", " gl_FragColor = colorFill;", "}" ].join("\n"); var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<fill>"); ; this.shaderPrograms.push(shaderProg); // Fill-color shader is always shader 3 for (var shader_name in cr.shaders) { if (cr.shaders.hasOwnProperty(shader_name)) this.shaderPrograms.push(this.createShaderProgram(cr.shaders[shader_name], vsSource, shader_name)); } gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, null); this.batch = []; this.batchPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.lastProgram = -1; // start -1 so first switchProgram can do work this.currentProgram = -1; // current program during batch execution this.currentShader = null; this.fbo = gl.createFramebuffer(); this.renderToTex = null; this.depthBuffer = null; this.attachedDepthBuffer = false; // wait until first size call to attach, otherwise it has no storage if (this.enableFrontToBack) { this.depthBuffer = gl.createRenderbuffer(); } this.tmpVec3 = vec3.create([0, 0, 0]); ; var pointsizes = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); this.minPointSize = pointsizes[0]; this.maxPointSize = pointsizes[1]; if (this.maxPointSize > 2048) this.maxPointSize = 2048; ; this.switchProgram(0); cr.seal(this); }; function GLShaderProgram(gl, shaderProgram, name) { this.gl = gl; this.shaderProgram = shaderProgram; this.name = name; this.locAPos = gl.getAttribLocation(shaderProgram, "aPos"); this.locATex = gl.getAttribLocation(shaderProgram, "aTex"); this.locMatP = gl.getUniformLocation(shaderProgram, "matP"); this.locMatMV = gl.getUniformLocation(shaderProgram, "matMV"); this.locOpacity = gl.getUniformLocation(shaderProgram, "opacity"); this.locColorFill = gl.getUniformLocation(shaderProgram, "colorFill"); this.locSamplerFront = gl.getUniformLocation(shaderProgram, "samplerFront"); this.locSamplerBack = gl.getUniformLocation(shaderProgram, "samplerBack"); this.locDestStart = gl.getUniformLocation(shaderProgram, "destStart"); this.locDestEnd = gl.getUniformLocation(shaderProgram, "destEnd"); this.locSeconds = gl.getUniformLocation(shaderProgram, "seconds"); this.locPixelWidth = gl.getUniformLocation(shaderProgram, "pixelWidth"); this.locPixelHeight = gl.getUniformLocation(shaderProgram, "pixelHeight"); this.locLayerScale = gl.getUniformLocation(shaderProgram, "layerScale"); this.locLayerAngle = gl.getUniformLocation(shaderProgram, "layerAngle"); this.locViewOrigin = gl.getUniformLocation(shaderProgram, "viewOrigin"); this.locScrollPos = gl.getUniformLocation(shaderProgram, "scrollPos"); this.hasAnyOptionalUniforms = !!(this.locPixelWidth || this.locPixelHeight || this.locSeconds || this.locSamplerBack || this.locDestStart || this.locDestEnd || this.locLayerScale || this.locLayerAngle || this.locViewOrigin || this.locScrollPos); this.lpPixelWidth = -999; // set to something unlikely so never counts as cached on first set this.lpPixelHeight = -999; this.lpOpacity = 1; this.lpDestStartX = 0.0; this.lpDestStartY = 0.0; this.lpDestEndX = 1.0; this.lpDestEndY = 1.0; this.lpLayerScale = 1.0; this.lpLayerAngle = 0.0; this.lpViewOriginX = 0.0; this.lpViewOriginY = 0.0; this.lpScrollPosX = 0.0; this.lpScrollPosY = 0.0; this.lpSeconds = 0.0; this.lastCustomParams = []; this.lpMatMV = mat4.create(); if (this.locOpacity) gl.uniform1f(this.locOpacity, 1); if (this.locColorFill) gl.uniform4f(this.locColorFill, 1.0, 1.0, 1.0, 1.0); if (this.locSamplerFront) gl.uniform1i(this.locSamplerFront, 0); if (this.locSamplerBack) gl.uniform1i(this.locSamplerBack, 1); if (this.locDestStart) gl.uniform2f(this.locDestStart, 0.0, 0.0); if (this.locDestEnd) gl.uniform2f(this.locDestEnd, 1.0, 1.0); if (this.locLayerScale) gl.uniform1f(this.locLayerScale, 1.0); if (this.locLayerAngle) gl.uniform1f(this.locLayerAngle, 0.0); if (this.locViewOrigin) gl.uniform2f(this.locViewOrigin, 0.0, 0.0); if (this.locScrollPos) gl.uniform2f(this.locScrollPos, 0.0, 0.0); if (this.locSeconds) gl.uniform1f(this.locSeconds, 0.0); this.hasCurrentMatMV = false; // matMV needs updating }; function areMat4sEqual(a, b) { return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&& a[4]===b[4]&&a[5]===b[5]&&a[6]===b[6]&&a[7]===b[7]&& a[8]===b[8]&&a[9]===b[9]&&a[10]===b[10]&&a[11]===b[11]&& a[12]===b[12]&&a[13]===b[13]&&a[14]===b[14]&&a[15]===b[15]; }; GLShaderProgram.prototype.updateMatMV = function (mv) { if (areMat4sEqual(this.lpMatMV, mv)) return; // no change, save the expensive GL call mat4.set(mv, this.lpMatMV); this.gl.uniformMatrix4fv(this.locMatMV, false, mv); }; GLWrap_.prototype.createShaderProgram = function(shaderEntry, vsSource, name) { var gl = this.gl; var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, shaderEntry.src); gl.compileShader(fragmentShader); if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { ; gl.deleteShader(fragmentShader); return null; } var vertexShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader, vsSource); gl.compileShader(vertexShader); if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); return null; } var shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, fragmentShader); gl.attachShader(shaderProgram, vertexShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); gl.deleteProgram(shaderProgram); return null; } gl.useProgram(shaderProgram); gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); var ret = new GLShaderProgram(gl, shaderProgram, name); ret.extendBoxHorizontal = shaderEntry.extendBoxHorizontal || 0; ret.extendBoxVertical = shaderEntry.extendBoxVertical || 0; ret.crossSampling = !!shaderEntry.crossSampling; ret.preservesOpaqueness = !!shaderEntry.preservesOpaqueness; ret.animated = !!shaderEntry.animated; ret.parameters = shaderEntry.parameters || []; var i, len; for (i = 0, len = ret.parameters.length; i < len; i++) { ret.parameters[i][1] = gl.getUniformLocation(shaderProgram, ret.parameters[i][0]); ret.lastCustomParams.push(0); gl.uniform1f(ret.parameters[i][1], 0); } cr.seal(ret); return ret; }; GLWrap_.prototype.getShaderIndex = function(name_) { var i, len; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { if (this.shaderPrograms[i].name === name_) return i; } return -1; }; GLWrap_.prototype.project = function (x, y, out) { var mv = this.matMV; var proj = this.matP; var fTempo = [0, 0, 0, 0, 0, 0, 0, 0]; fTempo[0] = mv[0]*x+mv[4]*y+mv[12]; fTempo[1] = mv[1]*x+mv[5]*y+mv[13]; fTempo[2] = mv[2]*x+mv[6]*y+mv[14]; fTempo[3] = mv[3]*x+mv[7]*y+mv[15]; fTempo[4] = proj[0]*fTempo[0]+proj[4]*fTempo[1]+proj[8]*fTempo[2]+proj[12]*fTempo[3]; fTempo[5] = proj[1]*fTempo[0]+proj[5]*fTempo[1]+proj[9]*fTempo[2]+proj[13]*fTempo[3]; fTempo[6] = proj[2]*fTempo[0]+proj[6]*fTempo[1]+proj[10]*fTempo[2]+proj[14]*fTempo[3]; fTempo[7] = -fTempo[2]; if(fTempo[7]===0.0) //The w value return; fTempo[7]=1.0/fTempo[7]; fTempo[4]*=fTempo[7]; fTempo[5]*=fTempo[7]; fTempo[6]*=fTempo[7]; out[0]=(fTempo[4]*0.5+0.5)*this.width; out[1]=(fTempo[5]*0.5+0.5)*this.height; }; GLWrap_.prototype.setSize = function(w, h, force) { if (this.width === w && this.height === h && !force) return; this.endBatch(); var gl = this.gl; this.width = w; this.height = h; gl.viewport(0, 0, w, h); mat4.lookAt(this.cam, this.look, this.up, this.matMV); if (this.enableFrontToBack) { mat4.ortho(-w/2, w/2, h/2, -h/2, this.zNear, this.zFar, this.matP); this.worldScale[0] = 1; this.worldScale[1] = 1; } else { mat4.perspective(45, w / h, this.zNear, this.zFar, this.matP); var tl = [0, 0]; var br = [0, 0]; this.project(0, 0, tl); this.project(1, 1, br); this.worldScale[0] = 1 / (br[0] - tl[0]); this.worldScale[1] = -1 / (br[1] - tl[1]); } var i, len, s; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { s = this.shaderPrograms[i]; s.hasCurrentMatMV = false; if (s.locMatP) { gl.useProgram(s.shaderProgram); gl.uniformMatrix4fv(s.locMatP, false, this.matP); } } gl.useProgram(this.shaderPrograms[this.lastProgram].shaderProgram); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE0); this.lastTexture0 = null; this.lastTexture1 = null; if (this.depthBuffer) { gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo); gl.bindRenderbuffer(gl.RENDERBUFFER, this.depthBuffer); gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, this.width, this.height); if (!this.attachedDepthBuffer) { gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.depthBuffer); this.attachedDepthBuffer = true; } gl.bindRenderbuffer(gl.RENDERBUFFER, null); gl.bindFramebuffer(gl.FRAMEBUFFER, null); this.renderToTex = null; } }; GLWrap_.prototype.resetModelView = function () { mat4.lookAt(this.cam, this.look, this.up, this.matMV); mat4.scale(this.matMV, this.worldScale); }; GLWrap_.prototype.translate = function (x, y) { if (x === 0 && y === 0) return; this.tmpVec3[0] = x;// * this.worldScale[0]; this.tmpVec3[1] = y;// * this.worldScale[1]; this.tmpVec3[2] = 0; mat4.translate(this.matMV, this.tmpVec3); }; GLWrap_.prototype.scale = function (x, y) { if (x === 1 && y === 1) return; this.tmpVec3[0] = x; this.tmpVec3[1] = y; this.tmpVec3[2] = 1; mat4.scale(this.matMV, this.tmpVec3); }; GLWrap_.prototype.rotateZ = function (a) { if (a === 0) return; mat4.rotateZ(this.matMV, a); }; GLWrap_.prototype.updateModelView = function() { if (areMat4sEqual(this.lastMV, this.matMV)) return; var b = this.pushBatch(); b.type = BATCH_UPDATEMODELVIEW; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(this.matMV); mat4.set(this.matMV, this.lastMV); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; /* var debugBatch = false; jQuery(document).mousedown( function(info) { if (info.which === 2) debugBatch = true; } ); */ GLWrap_.prototype.setEarlyZIndex = function (i) { if (!this.enableFrontToBack) return; if (i > 32760) i = 32760; this.currentZ = this.cam[2] - this.zNear - i * this.zIncrement; }; function GLBatchJob(type_, glwrap_) { this.type = type_; this.glwrap = glwrap_; this.gl = glwrap_.gl; this.opacityParam = 0; // for setOpacity() this.startIndex = 0; // for quad() this.indexCount = 0; // " this.texParam = null; // for setTexture() this.mat4param = null; // for updateModelView() this.shaderParams = []; // for user parameters cr.seal(this); }; GLBatchJob.prototype.doSetEarlyZPass = function () { var gl = this.gl; var glwrap = this.glwrap; if (this.startIndex !== 0) // enable { gl.depthMask(true); // enable depth writes gl.colorMask(false, false, false, false); // disable color writes gl.disable(gl.BLEND); // no color writes so disable blend gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); gl.clear(gl.DEPTH_BUFFER_BIT); // auto-clear depth buffer gl.bindFramebuffer(gl.FRAMEBUFFER, null); glwrap.isBatchInEarlyZPass = true; } else { gl.depthMask(false); // disable depth writes, only test existing depth values gl.colorMask(true, true, true, true); // enable color writes gl.enable(gl.BLEND); // turn blending back on glwrap.isBatchInEarlyZPass = false; } }; GLBatchJob.prototype.doSetTexture = function () { this.gl.bindTexture(this.gl.TEXTURE_2D, this.texParam); }; GLBatchJob.prototype.doSetTexture1 = function () { var gl = this.gl; gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); gl.activeTexture(gl.TEXTURE0); }; GLBatchJob.prototype.doSetOpacity = function () { var o = this.opacityParam; var glwrap = this.glwrap; glwrap.currentOpacity = o; var curProg = glwrap.currentShader; if (curProg.locOpacity && curProg.lpOpacity !== o) { curProg.lpOpacity = o; this.gl.uniform1f(curProg.locOpacity, o); } }; GLBatchJob.prototype.doQuad = function () { this.gl.drawElements(this.gl.TRIANGLES, this.indexCount, this.gl.UNSIGNED_SHORT, this.startIndex); }; GLBatchJob.prototype.doSetBlend = function () { this.gl.blendFunc(this.startIndex, this.indexCount); }; GLBatchJob.prototype.doUpdateModelView = function () { var i, len, s, shaderPrograms = this.glwrap.shaderPrograms, currentProgram = this.glwrap.currentProgram; for (i = 0, len = shaderPrograms.length; i < len; i++) { s = shaderPrograms[i]; if (i === currentProgram && s.locMatMV) { s.updateMatMV(this.mat4param); s.hasCurrentMatMV = true; } else s.hasCurrentMatMV = false; } mat4.set(this.mat4param, this.glwrap.currentMV); }; GLBatchJob.prototype.doRenderToTexture = function () { var gl = this.gl; var glwrap = this.glwrap; if (this.texParam) { if (glwrap.lastTexture1 === this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); glwrap.lastTexture1 = null; gl.activeTexture(gl.TEXTURE0); } gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); if (!glwrap.isBatchInEarlyZPass) { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texParam, 0); } } else { if (!glwrap.enableFrontToBack) { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); } gl.bindFramebuffer(gl.FRAMEBUFFER, null); } }; GLBatchJob.prototype.doClear = function () { var gl = this.gl; var mode = this.startIndex; if (mode === 0) // clear whole surface { gl.clearColor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clear(gl.COLOR_BUFFER_BIT); } else if (mode === 1) // clear rectangle { gl.enable(gl.SCISSOR_TEST); gl.scissor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.disable(gl.SCISSOR_TEST); } else // clear depth { gl.clear(gl.DEPTH_BUFFER_BIT); } }; GLBatchJob.prototype.doSetDepthTestEnabled = function () { var gl = this.gl; var enable = this.startIndex; if (enable !== 0) { gl.enable(gl.DEPTH_TEST); } else { gl.disable(gl.DEPTH_TEST); } }; GLBatchJob.prototype.doPoints = function () { var gl = this.gl; var glwrap = this.glwrap; if (glwrap.enableFrontToBack) gl.disable(gl.DEPTH_TEST); var s = glwrap.shaderPrograms[1]; gl.useProgram(s.shaderProgram); if (!s.hasCurrentMatMV && s.locMatMV) { s.updateMatMV(glwrap.currentMV); s.hasCurrentMatMV = true; } gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.pointBuffer); gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.POINTS, this.startIndex / 4, this.indexCount); s = glwrap.currentShader; gl.useProgram(s.shaderProgram); if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, glwrap.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } if (glwrap.enableFrontToBack) gl.enable(gl.DEPTH_TEST); }; GLBatchJob.prototype.doSetProgram = function () { var gl = this.gl; var glwrap = this.glwrap; var s = glwrap.shaderPrograms[this.startIndex]; // recycled param to save memory glwrap.currentProgram = this.startIndex; // current batch program glwrap.currentShader = s; gl.useProgram(s.shaderProgram); // switch to if (!s.hasCurrentMatMV && s.locMatMV) { s.updateMatMV(glwrap.currentMV); s.hasCurrentMatMV = true; } if (s.locOpacity && s.lpOpacity !== glwrap.currentOpacity) { s.lpOpacity = glwrap.currentOpacity; gl.uniform1f(s.locOpacity, glwrap.currentOpacity); } if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, glwrap.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } } GLBatchJob.prototype.doSetColor = function () { var s = this.glwrap.currentShader; var mat4param = this.mat4param; this.gl.uniform4f(s.locColorFill, mat4param[0], mat4param[1], mat4param[2], mat4param[3]); }; GLBatchJob.prototype.doSetProgramParameters = function () { var i, len, s = this.glwrap.currentShader; var gl = this.gl; var mat4param = this.mat4param; if (s.locSamplerBack && this.glwrap.lastTexture1 !== this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); this.glwrap.lastTexture1 = this.texParam; gl.activeTexture(gl.TEXTURE0); } var v = mat4param[0]; var v2; if (s.locPixelWidth && v !== s.lpPixelWidth) { s.lpPixelWidth = v; gl.uniform1f(s.locPixelWidth, v); } v = mat4param[1]; if (s.locPixelHeight && v !== s.lpPixelHeight) { s.lpPixelHeight = v; gl.uniform1f(s.locPixelHeight, v); } v = mat4param[2]; v2 = mat4param[3]; if (s.locDestStart && (v !== s.lpDestStartX || v2 !== s.lpDestStartY)) { s.lpDestStartX = v; s.lpDestStartY = v2; gl.uniform2f(s.locDestStart, v, v2); } v = mat4param[4]; v2 = mat4param[5]; if (s.locDestEnd && (v !== s.lpDestEndX || v2 !== s.lpDestEndY)) { s.lpDestEndX = v; s.lpDestEndY = v; gl.uniform2f(s.locDestEnd, v, v2); } v = mat4param[6]; if (s.locLayerScale && v !== s.lpLayerScale) { s.lpLayerScale = v; gl.uniform1f(s.locLayerScale, v); } v = mat4param[7]; if (s.locLayerAngle && v !== s.lpLayerAngle) { s.lpLayerAngle = v; gl.uniform1f(s.locLayerAngle, v); } v = mat4param[8]; v2 = mat4param[9]; if (s.locViewOrigin && (v !== s.lpViewOriginX || v2 !== s.lpViewOriginY)) { s.lpViewOriginX = v; s.lpViewOriginY = v2; gl.uniform2f(s.locViewOrigin, v, v2); } v = mat4param[10]; v2 = mat4param[11]; if (s.locScrollPos && (v !== s.lpScrollPosX || v2 !== s.lpScrollPosY)) { s.lpScrollPosX = v; s.lpScrollPosY = v2; gl.uniform2f(s.locScrollPos, v, v2); } v = mat4param[12]; if (s.locSeconds && v !== s.lpSeconds) { s.lpSeconds = v; gl.uniform1f(s.locSeconds, v); } if (s.parameters.length) { for (i = 0, len = s.parameters.length; i < len; i++) { v = this.shaderParams[i]; if (v !== s.lastCustomParams[i]) { s.lastCustomParams[i] = v; gl.uniform1f(s.parameters[i][1], v); } } } }; GLWrap_.prototype.pushBatch = function () { if (this.batchPtr === this.batch.length) this.batch.push(new GLBatchJob(BATCH_NULL, this)); return this.batch[this.batchPtr++]; }; GLWrap_.prototype.endBatch = function () { if (this.batchPtr === 0) return; if (this.gl.isContextLost()) return; var gl = this.gl; if (this.pointPtr > 0) { gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.pointData.subarray(0, this.pointPtr)); if (s && s.locAPos >= 0 && s.name === "<point>") gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); } if (this.vertexPtr > 0) { var s = this.currentShader; gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[this.curBuffer]); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexData.subarray(0, this.vertexPtr)); if (s && s.locAPos >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locAPos, this.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[this.curBuffer]); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.texcoordData.subarray(0, this.texPtr)); if (s && s.locATex >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } var i, len, b; for (i = 0, len = this.batchPtr; i < len; i++) { b = this.batch[i]; switch (b.type) { case 1: b.doQuad(); break; case 2: b.doSetTexture(); break; case 3: b.doSetOpacity(); break; case 4: b.doSetBlend(); break; case 5: b.doUpdateModelView(); break; case 6: b.doRenderToTexture(); break; case 7: b.doClear(); break; case 8: b.doPoints(); break; case 9: b.doSetProgram(); break; case 10: b.doSetProgramParameters(); break; case 11: b.doSetTexture1(); break; case 12: b.doSetColor(); break; case 13: b.doSetDepthTestEnabled(); break; case 14: b.doSetEarlyZPass(); break; } } this.batchPtr = 0; this.vertexPtr = 0; this.texPtr = 0; this.pointPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.isBatchInEarlyZPass = false; this.curBuffer++; if (this.curBuffer >= MULTI_BUFFERS) this.curBuffer = 0; }; GLWrap_.prototype.setOpacity = function (op) { if (op === this.lastOpacity) return; if (this.isEarlyZPass) return; // ignore var b = this.pushBatch(); b.type = BATCH_SETOPACITY; b.opacityParam = op; this.lastOpacity = op; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTexture = function (tex) { if (tex === this.lastTexture0) return; ; var b = this.pushBatch(); b.type = BATCH_SETTEXTURE; b.texParam = tex; this.lastTexture0 = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setBlend = function (s, d) { if (s === this.lastSrcBlend && d === this.lastDestBlend) return; if (this.isEarlyZPass) return; // ignore var b = this.pushBatch(); b.type = BATCH_SETBLEND; b.startIndex = s; // recycle params to save memory b.indexCount = d; this.lastSrcBlend = s; this.lastDestBlend = d; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.isPremultipliedAlphaBlend = function () { return (this.lastSrcBlend === this.gl.ONE && this.lastDestBlend === this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setAlphaBlend = function () { this.setBlend(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setNoPremultiplyAlphaBlend = function () { this.setBlend(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA); }; var LAST_VERTEX = MAX_VERTICES * 2 - 8; GLWrap_.prototype.quad = function(tlx, tly, trx, try_, brx, bry, blx, bly) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = 0; td[t++] = 0; td[t++] = 1; td[t++] = 0; td[t++] = 1; td[t++] = 1; td[t++] = 0; td[t++] = 1; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.quadTex = function(tlx, tly, trx, try_, brx, bry, blx, bly, rcTex) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } var rc_left = rcTex.left; var rc_top = rcTex.top; var rc_right = rcTex.right; var rc_bottom = rcTex.bottom; if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = rc_left; td[t++] = rc_top; td[t++] = rc_right; td[t++] = rc_top; td[t++] = rc_right; td[t++] = rc_bottom; td[t++] = rc_left; td[t++] = rc_bottom; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.quadTexUV = function(tlx, tly, trx, try_, brx, bry, blx, bly, tlu, tlv, tru, trv, bru, brv, blu, blv) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = tlu; td[t++] = tlv; td[t++] = tru; td[t++] = trv; td[t++] = bru; td[t++] = brv; td[t++] = blu; td[t++] = blv; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.convexPoly = function(pts) { var pts_count = pts.length / 2; ; var tris = pts_count - 2; // 3 points = 1 tri, 4 points = 2 tris, 5 points = 3 tris etc. var last_tri = tris - 1; var p0x = pts[0]; var p0y = pts[1]; var i, i2, p1x, p1y, p2x, p2y, p3x, p3y; for (i = 0; i < tris; i += 2) // draw 2 triangles at a time { i2 = i * 2; p1x = pts[i2 + 2]; p1y = pts[i2 + 3]; p2x = pts[i2 + 4]; p2y = pts[i2 + 5]; if (i === last_tri) { this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p2x, p2y); } else { p3x = pts[i2 + 6]; p3y = pts[i2 + 7]; this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y); } } }; var LAST_POINT = MAX_POINTS - 4; GLWrap_.prototype.point = function(x_, y_, size_, opacity_) { if (this.pointPtr >= LAST_POINT) this.endBatch(); var p = this.pointPtr; // point cursor var pd = this.pointData; // point data array if (this.hasPointBatchTop) { this.batch[this.batchPtr - 1].indexCount++; } else { var b = this.pushBatch(); b.type = BATCH_POINTS; b.startIndex = p; b.indexCount = 1; this.hasPointBatchTop = true; this.hasQuadBatchTop = false; } pd[p++] = x_; pd[p++] = y_; pd[p++] = size_; pd[p++] = opacity_; this.pointPtr = p; }; GLWrap_.prototype.switchProgram = function (progIndex) { if (this.lastProgram === progIndex) return; // no change var shaderProg = this.shaderPrograms[progIndex]; if (!shaderProg) { if (this.lastProgram === 0) return; // already on default shader progIndex = 0; shaderProg = this.shaderPrograms[0]; } var b = this.pushBatch(); b.type = BATCH_SETPROGRAM; b.startIndex = progIndex; this.lastProgram = progIndex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.programUsesDest = function (progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd); }; GLWrap_.prototype.programUsesCrossSampling = function (progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd || s.crossSampling); }; GLWrap_.prototype.programPreservesOpaqueness = function (progIndex) { return this.shaderPrograms[progIndex].preservesOpaqueness; }; GLWrap_.prototype.programExtendsBox = function (progIndex) { var s = this.shaderPrograms[progIndex]; return s.extendBoxHorizontal !== 0 || s.extendBoxVertical !== 0; }; GLWrap_.prototype.getProgramBoxExtendHorizontal = function (progIndex) { return this.shaderPrograms[progIndex].extendBoxHorizontal; }; GLWrap_.prototype.getProgramBoxExtendVertical = function (progIndex) { return this.shaderPrograms[progIndex].extendBoxVertical; }; GLWrap_.prototype.getProgramParameterType = function (progIndex, paramIndex) { return this.shaderPrograms[progIndex].parameters[paramIndex][2]; }; GLWrap_.prototype.programIsAnimated = function (progIndex) { return this.shaderPrograms[progIndex].animated; }; GLWrap_.prototype.setProgramParameters = function (backTex, pixelWidth, pixelHeight, destStartX, destStartY, destEndX, destEndY, layerScale, layerAngle, viewOriginLeft, viewOriginTop, scrollPosX, scrollPosY, seconds, params) { var i, len; var s = this.shaderPrograms[this.lastProgram]; var b, mat4param, shaderParams; if (s.hasAnyOptionalUniforms || params.length) { b = this.pushBatch(); b.type = BATCH_SETPROGRAMPARAMETERS; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(); mat4param = b.mat4param; mat4param[0] = pixelWidth; mat4param[1] = pixelHeight; mat4param[2] = destStartX; mat4param[3] = destStartY; mat4param[4] = destEndX; mat4param[5] = destEndY; mat4param[6] = layerScale; mat4param[7] = layerAngle; mat4param[8] = viewOriginLeft; mat4param[9] = viewOriginTop; mat4param[10] = scrollPosX; mat4param[11] = scrollPosY; mat4param[12] = seconds; if (s.locSamplerBack) { ; b.texParam = backTex; } else b.texParam = null; if (params.length) { shaderParams = b.shaderParams; shaderParams.length = params.length; for (i = 0, len = params.length; i < len; i++) shaderParams[i] = params[i]; } this.hasQuadBatchTop = false; this.hasPointBatchTop = false; } }; GLWrap_.prototype.clear = function (r, g, b_, a) { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 0; // clear all mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r; b.mat4param[1] = g; b.mat4param[2] = b_; b.mat4param[3] = a; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearRect = function (x, y, w, h) { if (w < 0 || h < 0) return; // invalid clear area var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 1; // clear rect mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = x; b.mat4param[1] = y; b.mat4param[2] = w; b.mat4param[3] = h; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearDepth = function () { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 2; // clear depth mode this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setEarlyZPass = function (e) { if (!this.enableFrontToBack) return; // no depth buffer in use e = !!e; if (this.isEarlyZPass === e) return; // no change var b = this.pushBatch(); b.type = BATCH_SETEARLYZMODE; b.startIndex = (e ? 1 : 0); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.isEarlyZPass = e; this.renderToTex = null; if (this.isEarlyZPass) { this.switchProgram(2); // early Z program } else { this.switchProgram(0); // normal rendering } }; GLWrap_.prototype.setDepthTestEnabled = function (e) { if (!this.enableFrontToBack) return; // no depth buffer in use var b = this.pushBatch(); b.type = BATCH_SETDEPTHTEST; b.startIndex = (e ? 1 : 0); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.fullscreenQuad = function () { mat4.set(this.lastMV, tempMat4); this.resetModelView(); this.updateModelView(); var halfw = this.width / 2; var halfh = this.height / 2; this.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); mat4.set(tempMat4, this.matMV); this.updateModelView(); }; GLWrap_.prototype.setColorFillMode = function (r_, g_, b_, a_) { this.switchProgram(3); var b = this.pushBatch(); b.type = BATCH_SETCOLOR; if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r_; b.mat4param[1] = g_; b.mat4param[2] = b_; b.mat4param[3] = a_; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTextureFillMode = function () { ; this.switchProgram(0); }; GLWrap_.prototype.restoreEarlyZMode = function () { ; this.switchProgram(2); }; GLWrap_.prototype.present = function () { this.endBatch(); this.gl.flush(); /* if (debugBatch) { ; debugBatch = false; } */ }; function nextHighestPowerOfTwo(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } var all_textures = []; var textures_by_src = {}; GLWrap_.prototype.contextLost = function () { cr.clearArray(all_textures); textures_by_src = {}; }; var BF_RGBA8 = 0; var BF_RGB8 = 1; var BF_RGBA4 = 2; var BF_RGB5_A1 = 3; var BF_RGB565 = 4; GLWrap_.prototype.loadTexture = function (img, tiling, linearsampling, pixelformat, tiletype, nomip) { tiling = !!tiling; linearsampling = !!linearsampling; var tex_key = img.src + "," + tiling + "," + linearsampling + (tiling ? ("," + tiletype) : ""); var webGL_texture = null; if (typeof img.src !== "undefined" && textures_by_src.hasOwnProperty(tex_key)) { webGL_texture = textures_by_src[tex_key]; webGL_texture.c2refcount++; return webGL_texture; } this.endBatch(); ; var gl = this.gl; var isPOT = (cr.isPOT(img.width) && cr.isPOT(img.height)); webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); var internalformat = gl.RGBA; var format = gl.RGBA; var type = gl.UNSIGNED_BYTE; if (pixelformat && !this.isIE) { switch (pixelformat) { case BF_RGB8: internalformat = gl.RGB; format = gl.RGB; break; case BF_RGBA4: type = gl.UNSIGNED_SHORT_4_4_4_4; break; case BF_RGB5_A1: type = gl.UNSIGNED_SHORT_5_5_5_1; break; case BF_RGB565: internalformat = gl.RGB; format = gl.RGB; type = gl.UNSIGNED_SHORT_5_6_5; break; } } if (!isPOT && tiling) { var canvas = document.createElement("canvas"); canvas.width = cr.nextHighestPowerOfTwo(img.width); canvas.height = cr.nextHighestPowerOfTwo(img.height); var ctx = canvas.getContext("2d"); ctx["webkitImageSmoothingEnabled"] = linearsampling; ctx["mozImageSmoothingEnabled"] = linearsampling; ctx["msImageSmoothingEnabled"] = linearsampling; ctx["imageSmoothingEnabled"] = linearsampling; ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, canvas); } else gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, img); if (tiling) { if (tiletype === "repeat-x") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } else if (tiletype === "repeat-y") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } if (linearsampling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); if (isPOT && this.enable_mipmaps && !nomip) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); gl.generateMipmap(gl.TEXTURE_2D); } else gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = img.width; webGL_texture.c2height = img.height; webGL_texture.c2refcount = 1; webGL_texture.c2texkey = tex_key; all_textures.push(webGL_texture); textures_by_src[tex_key] = webGL_texture; return webGL_texture; }; GLWrap_.prototype.createEmptyTexture = function (w, h, linearsampling, _16bit, tiling) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; var webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, null); if (tiling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = w; webGL_texture.c2height = h; all_textures.push(webGL_texture); return webGL_texture; }; GLWrap_.prototype.videoToTexture = function (video_, texture_, _16bit) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; gl.bindTexture(gl.TEXTURE_2D, texture_); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); try { gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, video_); } catch (e) { if (console && console.error) console.error("Error updating WebGL texture: ", e); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; }; GLWrap_.prototype.deleteTexture = function (tex) { if (!tex) return; if (typeof tex.c2refcount !== "undefined" && tex.c2refcount > 1) { tex.c2refcount--; return; } this.endBatch(); if (tex === this.lastTexture0) { this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.lastTexture0 = null; } if (tex === this.lastTexture1) { this.gl.activeTexture(this.gl.TEXTURE1); this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.gl.activeTexture(this.gl.TEXTURE0); this.lastTexture1 = null; } cr.arrayFindRemove(all_textures, tex); if (typeof tex.c2texkey !== "undefined") delete textures_by_src[tex.c2texkey]; this.gl.deleteTexture(tex); }; GLWrap_.prototype.estimateVRAM = function () { var total = this.width * this.height * 4 * 2; var i, len, t; for (i = 0, len = all_textures.length; i < len; i++) { t = all_textures[i]; total += (t.c2width * t.c2height * 4); } return total; }; GLWrap_.prototype.textureCount = function () { return all_textures.length; }; GLWrap_.prototype.setRenderingToTexture = function (tex) { if (tex === this.renderToTex) return; ; var b = this.pushBatch(); b.type = BATCH_RENDERTOTEXTURE; b.texParam = tex; this.renderToTex = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; cr.GLWrap = GLWrap_; }()); ; (function() { function window_innerWidth() { if (typeof jQuery !== "undefined") return jQuery(window).width(); else return window.innerWidth; }; function window_innerHeight() { if (typeof jQuery !== "undefined") return jQuery(window).height(); else return window.innerHeight; }; var raf = window["requestAnimationFrame"] || window["mozRequestAnimationFrame"] || window["webkitRequestAnimationFrame"] || window["msRequestAnimationFrame"] || window["oRequestAnimationFrame"]; function Runtime(canvas) { if (!canvas || (!canvas.getContext && !canvas["dc"])) return; if (canvas["c2runtime"]) return; else canvas["c2runtime"] = this; var self = this; this.isCrosswalk = /crosswalk/i.test(navigator.userAgent) || /xwalk/i.test(navigator.userAgent) || !!(typeof window["c2isCrosswalk"] !== "undefined" && window["c2isCrosswalk"]); this.isCordova = this.isCrosswalk || (typeof window["device"] !== "undefined" && (typeof window["device"]["cordova"] !== "undefined" || typeof window["device"]["phonegap"] !== "undefined")) || (typeof window["c2iscordova"] !== "undefined" && window["c2iscordova"]); this.isPhoneGap = this.isCordova; this.isDirectCanvas = !!canvas["dc"]; this.isAppMobi = (typeof window["AppMobi"] !== "undefined" || this.isDirectCanvas); this.isCocoonJs = !!window["c2cocoonjs"]; this.isEjecta = !!window["c2ejecta"]; if (this.isCocoonJs) { CocoonJS["App"]["onSuspended"].addEventListener(function() { self["setSuspended"](true); }); CocoonJS["App"]["onActivated"].addEventListener(function () { self["setSuspended"](false); }); } if (this.isEjecta) { document.addEventListener("pagehide", function() { self["setSuspended"](true); }); document.addEventListener("pageshow", function() { self["setSuspended"](false); }); document.addEventListener("resize", function () { self["setSize"](window.innerWidth, window.innerHeight); }); } this.isDomFree = (this.isDirectCanvas || this.isCocoonJs || this.isEjecta); this.isMicrosoftEdge = /edge\//i.test(navigator.userAgent); this.isIE = (/msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent) || /iemobile/i.test(navigator.userAgent)) && !this.isMicrosoftEdge; this.isTizen = /tizen/i.test(navigator.userAgent); this.isAndroid = /android/i.test(navigator.userAgent) && !this.isTizen && !this.isIE && !this.isMicrosoftEdge; // IE mobile and Tizen masquerade as Android this.isiPhone = (/iphone/i.test(navigator.userAgent) || /ipod/i.test(navigator.userAgent)) && !this.isIE && !this.isMicrosoftEdge; // treat ipod as an iphone; IE mobile masquerades as iPhone this.isiPad = /ipad/i.test(navigator.userAgent); this.isiOS = this.isiPhone || this.isiPad || this.isEjecta; this.isiPhoneiOS6 = (this.isiPhone && /os\s6/i.test(navigator.userAgent)); this.isChrome = (/chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent)) && !this.isIE && !this.isMicrosoftEdge; // note true on Chromium-based webview on Android 4.4+; IE 'Edge' mode also pretends to be Chrome this.isAmazonWebApp = /amazonwebappplatform/i.test(navigator.userAgent); this.isFirefox = /firefox/i.test(navigator.userAgent); this.isSafari = /safari/i.test(navigator.userAgent) && !this.isChrome && !this.isIE && !this.isMicrosoftEdge; // Chrome and IE Mobile masquerade as Safari this.isWindows = /windows/i.test(navigator.userAgent); this.isNWjs = (typeof window["c2nodewebkit"] !== "undefined" || typeof window["c2nwjs"] !== "undefined" || /nodewebkit/i.test(navigator.userAgent) || /nwjs/i.test(navigator.userAgent)); this.isNodeWebkit = this.isNWjs; // old name for backwards compat this.isArcade = (typeof window["is_scirra_arcade"] !== "undefined"); this.isWindows8App = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.isWindows8Capable = !!(typeof window["c2isWindows8Capable"] !== "undefined" && window["c2isWindows8Capable"]); this.isWindowsPhone8 = !!(typeof window["c2isWindowsPhone8"] !== "undefined" && window["c2isWindowsPhone8"]); this.isWindowsPhone81 = !!(typeof window["c2isWindowsPhone81"] !== "undefined" && window["c2isWindowsPhone81"]); this.isWindows10 = !!window["cr_windows10"]; this.isWinJS = (this.isWindows8App || this.isWindows8Capable || this.isWindowsPhone81 || this.isWindows10); // note not WP8.0 this.isBlackberry10 = !!(typeof window["c2isBlackberry10"] !== "undefined" && window["c2isBlackberry10"]); this.isAndroidStockBrowser = (this.isAndroid && !this.isChrome && !this.isCrosswalk && !this.isFirefox && !this.isAmazonWebApp && !this.isDomFree); this.devicePixelRatio = 1; this.isMobile = (this.isCordova || this.isCrosswalk || this.isAppMobi || this.isCocoonJs || this.isAndroid || this.isiOS || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isBlackberry10 || this.isTizen || this.isEjecta); if (!this.isMobile) { this.isMobile = /(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent); } if (typeof cr_is_preview !== "undefined" && !this.isNWjs && (window.location.search === "?nw" || /nodewebkit/i.test(navigator.userAgent) || /nwjs/i.test(navigator.userAgent))) { this.isNWjs = true; } this.isDebug = (typeof cr_is_preview !== "undefined" && window.location.search.indexOf("debug") > -1); this.canvas = canvas; this.canvasdiv = document.getElementById("c2canvasdiv"); this.gl = null; this.glwrap = null; this.glUnmaskedRenderer = "(unavailable)"; this.enableFrontToBack = false; this.earlyz_index = 0; this.ctx = null; this.fullscreenOldMarginCss = ""; this.firstInFullscreen = false; this.oldWidth = 0; // for restoring non-fullscreen canvas after fullscreen this.oldHeight = 0; this.canvas.oncontextmenu = function (e) { if (e.preventDefault) e.preventDefault(); return false; }; this.canvas.onselectstart = function (e) { if (e.preventDefault) e.preventDefault(); return false; }; if (this.isDirectCanvas) window["c2runtime"] = this; if (this.isNWjs) { window["ondragover"] = function(e) { e.preventDefault(); return false; }; window["ondrop"] = function(e) { e.preventDefault(); return false; }; require("nw.gui")["App"]["clearCache"](); } if (this.isAndroidStockBrowser && typeof jQuery !== "undefined") { jQuery("canvas").parents("*").css("overflow", "visible"); } this.width = canvas.width; this.height = canvas.height; this.draw_width = this.width; this.draw_height = this.height; this.cssWidth = this.width; this.cssHeight = this.height; this.lastWindowWidth = window.innerWidth; this.lastWindowHeight = window.innerHeight; this.forceCanvasAlpha = false; // allow plugins to force the canvas to display with alpha channel this.redraw = true; this.isSuspended = false; if (!Date.now) { Date.now = function now() { return +new Date(); }; } this.plugins = []; this.types = {}; this.types_by_index = []; this.behaviors = []; this.layouts = {}; this.layouts_by_index = []; this.eventsheets = {}; this.eventsheets_by_index = []; this.wait_for_textures = []; // for blocking until textures loaded this.triggers_to_postinit = []; this.all_global_vars = []; this.all_local_vars = []; this.solidBehavior = null; this.jumpthruBehavior = null; this.shadowcasterBehavior = null; this.deathRow = {}; this.hasPendingInstances = false; // true if anything exists in create row or death row this.isInClearDeathRow = false; this.isInOnDestroy = 0; // needs to support recursion so increments and decrements and is true if > 0 this.isRunningEvents = false; this.isEndingLayout = false; this.createRow = []; this.isLoadingState = false; this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = ""; this.lastSaveJson = ""; this.signalledContinuousPreview = false; this.suspendDrawing = false; // for hiding display until continuous preview loads this.dt = 0; this.dt1 = 0; this.minimumFramerate = 30; this.logictime = 0; // used to calculate CPUUtilisation this.cpuutilisation = 0; this.timescale = 1.0; this.kahanTime = new cr.KahanAdder(); this.wallTime = new cr.KahanAdder(); this.last_tick_time = 0; this.fps = 0; this.last_fps_time = 0; this.tickcount = 0; this.execcount = 0; this.framecount = 0; // for fps this.objectcount = 0; this.changelayout = null; this.destroycallbacks = []; this.event_stack = []; this.event_stack_index = -1; this.localvar_stack = [[]]; this.localvar_stack_index = 0; this.trigger_depth = 0; // recursion depth for triggers this.pushEventStack(null); this.loop_stack = []; this.loop_stack_index = -1; this.next_uid = 0; this.next_puid = 0; // permanent unique ids this.layout_first_tick = true; this.family_count = 0; this.suspend_events = []; this.raf_id = -1; this.timeout_id = -1; this.isloading = true; this.loadingprogress = 0; this.isNodeFullscreen = false; this.stackLocalCount = 0; // number of stack-based local vars for recursion this.audioInstance = null; this.had_a_click = false; this.isInUserInputEvent = false; this.objects_to_pretick = new cr.ObjectSet(); this.objects_to_tick = new cr.ObjectSet(); this.objects_to_tick2 = new cr.ObjectSet(); this.registered_collisions = []; this.temp_poly = new cr.CollisionPoly([]); this.temp_poly2 = new cr.CollisionPoly([]); this.allGroups = []; // array of all event groups this.groups_by_name = {}; this.cndsBySid = {}; this.actsBySid = {}; this.varsBySid = {}; this.blocksBySid = {}; this.running_layout = null; // currently running layout this.layer_canvas = null; // for layers "render-to-texture" this.layer_ctx = null; this.layer_tex = null; this.layout_tex = null; this.layout_canvas = null; this.layout_ctx = null; this.is_WebGL_context_lost = false; this.uses_background_blending = false; // if any shader uses background blending, so entire layout renders to texture this.fx_tex = [null, null]; this.fullscreen_scaling = 0; this.files_subfolder = ""; // path with project files this.objectsByUid = {}; // maps every in-use UID (as a string) to its instance this.loaderlogos = null; this.snapshotCanvas = null; this.snapshotData = ""; this.objectRefTable = []; this.requestProjectData(); }; Runtime.prototype.requestProjectData = function () { var self = this; var xhr; if (this.isWindowsPhone8) xhr = new ActiveXObject("Microsoft.XMLHTTP"); else xhr = new XMLHttpRequest(); var datajs_filename = "data.js"; if (this.isWindows8App || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isWindows10) datajs_filename = "data.json"; xhr.open("GET", datajs_filename, true); var supportsJsonResponse = false; if (!this.isDomFree && ("response" in xhr) && ("responseType" in xhr)) { try { xhr["responseType"] = "json"; supportsJsonResponse = (xhr["responseType"] === "json"); } catch (e) { supportsJsonResponse = false; } } if (!supportsJsonResponse && ("responseType" in xhr)) { try { xhr["responseType"] = "text"; } catch (e) {} } if ("overrideMimeType" in xhr) { try { xhr["overrideMimeType"]("application/json; charset=utf-8"); } catch (e) {} } if (this.isWindowsPhone8) { xhr.onreadystatechange = function () { if (xhr.readyState !== 4) return; self.loadProject(JSON.parse(xhr["responseText"])); }; } else { xhr.onload = function () { if (supportsJsonResponse) { self.loadProject(xhr["response"]); // already parsed by browser } else { if (self.isEjecta) { var str = xhr["responseText"]; str = str.substr(str.indexOf("{")); // trim any BOM self.loadProject(JSON.parse(str)); } else { self.loadProject(JSON.parse(xhr["responseText"])); // forced to sync parse JSON } } }; xhr.onerror = function (e) { cr.logerror("Error requesting " + datajs_filename + ":"); cr.logerror(e); }; } xhr.send(); }; Runtime.prototype.initRendererAndLoader = function () { var self = this; var i, len, j, lenj, k, lenk, t, s, l, y; this.isRetina = ((!this.isDomFree || this.isEjecta || this.isCordova) && this.useHighDpi && !this.isAndroidStockBrowser); if (this.fullscreen_mode === 0 && this.isiOS) this.isRetina = false; this.devicePixelRatio = (this.isRetina ? (window["devicePixelRatio"] || window["webkitDevicePixelRatio"] || window["mozDevicePixelRatio"] || window["msDevicePixelRatio"] || 1) : 1); this.ClearDeathRow(); var attribs; var alpha_canvas = !!(this.forceCanvasAlpha || (this.alphaBackground && !(this.isNWjs || this.isWinJS || this.isWindowsPhone8 || this.isCrosswalk || this.isCordova || this.isAmazonWebApp))); if (this.fullscreen_mode > 0) this["setSize"](window_innerWidth(), window_innerHeight(), true); try { if (this.enableWebGL && (this.isCocoonJs || this.isEjecta || !this.isDomFree)) { attribs = { "alpha": alpha_canvas, "depth": false, "antialias": false, "failIfMajorPerformanceCaveat": true }; this.gl = (this.canvas.getContext("webgl", attribs) || this.canvas.getContext("experimental-webgl", attribs)); } } catch (e) { } if (this.gl) { var debug_ext = this.gl.getExtension("WEBGL_debug_renderer_info"); if (debug_ext) { var unmasked_vendor = this.gl.getParameter(debug_ext.UNMASKED_VENDOR_WEBGL); var unmasked_renderer = this.gl.getParameter(debug_ext.UNMASKED_RENDERER_WEBGL); this.glUnmaskedRenderer = unmasked_renderer + " [" + unmasked_vendor + "]"; } if (this.enableFrontToBack) this.glUnmaskedRenderer += " [front-to-back enabled]"; ; if (!this.isDomFree) { this.overlay_canvas = document.createElement("canvas"); jQuery(this.overlay_canvas).appendTo(this.canvas.parentNode); this.overlay_canvas.oncontextmenu = function (e) { return false; }; this.overlay_canvas.onselectstart = function (e) { return false; }; this.overlay_canvas.width = Math.round(this.cssWidth * this.devicePixelRatio); this.overlay_canvas.height = Math.round(this.cssHeight * this.devicePixelRatio); jQuery(this.overlay_canvas).css({"width": this.cssWidth + "px", "height": this.cssHeight + "px"}); this.positionOverlayCanvas(); this.overlay_ctx = this.overlay_canvas.getContext("2d"); } this.glwrap = new cr.GLWrap(this.gl, this.isMobile, this.enableFrontToBack); this.glwrap.setSize(this.canvas.width, this.canvas.height); this.glwrap.enable_mipmaps = (this.downscalingQuality !== 0); this.ctx = null; this.canvas.addEventListener("webglcontextlost", function (ev) { ev.preventDefault(); self.onContextLost(); cr.logexport("[Construct 2] WebGL context lost"); window["cr_setSuspended"](true); // stop rendering }, false); this.canvas.addEventListener("webglcontextrestored", function (ev) { self.glwrap.initState(); self.glwrap.setSize(self.glwrap.width, self.glwrap.height, true); self.layer_tex = null; self.layout_tex = null; self.fx_tex[0] = null; self.fx_tex[1] = null; self.onContextRestored(); self.redraw = true; cr.logexport("[Construct 2] WebGL context restored"); window["cr_setSuspended"](false); // resume rendering }, false); for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; for (j = 0, lenj = t.effect_types.length; j < lenj; j++) { s = t.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { l = this.layouts_by_index[i]; for (j = 0, lenj = l.effect_types.length; j < lenj; j++) { s = l.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); } l.updateActiveEffects(); // update preserves opaqueness flag for (j = 0, lenj = l.layers.length; j < lenj; j++) { y = l.layers[j]; for (k = 0, lenk = y.effect_types.length; k < lenk; k++) { s = y.effect_types[k]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } y.updateActiveEffects(); // update preserves opaqueness flag } } } else { if (this.fullscreen_mode > 0 && this.isDirectCanvas) { ; this.canvas = null; document.oncontextmenu = function (e) { return false; }; document.onselectstart = function (e) { return false; }; this.ctx = AppMobi["canvas"]["getContext"]("2d"); try { this.ctx["samplingMode"] = this.linearSampling ? "smooth" : "sharp"; this.ctx["globalScale"] = 1; this.ctx["HTML5CompatibilityMode"] = true; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } catch(e){} if (this.width !== 0 && this.height !== 0) { this.ctx.width = this.width; this.ctx.height = this.height; } } if (!this.ctx) { ; if (this.isCocoonJs) { attribs = { "antialias": !!this.linearSampling, "alpha": alpha_canvas }; this.ctx = this.canvas.getContext("2d", attribs); } else { attribs = { "alpha": alpha_canvas }; this.ctx = this.canvas.getContext("2d", attribs); } this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling; this.ctx["mozImageSmoothingEnabled"] = this.linearSampling; this.ctx["msImageSmoothingEnabled"] = this.linearSampling; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } this.overlay_canvas = null; this.overlay_ctx = null; } this.tickFunc = function (timestamp) { self.tick(false, timestamp); }; if (window != window.top && !this.isDomFree && !this.isWinJS && !this.isWindowsPhone8) { document.addEventListener("mousedown", function () { window.focus(); }, true); document.addEventListener("touchstart", function () { window.focus(); }, true); } if (typeof cr_is_preview !== "undefined") { if (this.isCocoonJs) console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"); if (window.location.search.indexOf("continuous") > -1) { cr.logexport("Reloading for continuous preview"); this.loadFromSlot = "__c2_continuouspreview"; this.suspendDrawing = true; } if (this.pauseOnBlur && !this.isMobile) { jQuery(window).focus(function () { self["setSuspended"](false); }); jQuery(window).blur(function () { self["setSuspended"](true); }); } } window.addEventListener("blur", function () { self.onWindowBlur(); }); if (!this.isDomFree) { var unfocusFormControlFunc = function (e) { if (cr.isCanvasInputEvent(e) && document["activeElement"] && document["activeElement"] !== document.getElementsByTagName("body")[0] && document["activeElement"].blur) { try { document["activeElement"].blur(); } catch (e) {} } } if (window.navigator["pointerEnabled"]) { document.addEventListener("pointerdown", unfocusFormControlFunc); } else if (window.navigator["msPointerEnabled"]) { document.addEventListener("MSPointerDown", unfocusFormControlFunc); } else { document.addEventListener("touchstart", unfocusFormControlFunc); } document.addEventListener("mousedown", unfocusFormControlFunc); } if (this.fullscreen_mode === 0 && this.isRetina && this.devicePixelRatio > 1) { this["setSize"](this.original_width, this.original_height, true); } this.tryLockOrientation(); this.getready(); // determine things to preload this.go(); // run loading screen this.extra = {}; cr.seal(this); }; var webkitRepaintFlag = false; Runtime.prototype["setSize"] = function (w, h, force) { var offx = 0, offy = 0; var neww = 0, newh = 0, intscale = 0; var tryHideAddressBar = (this.isiPhoneiOS6 && this.isSafari && !navigator["standalone"] && !this.isDomFree && !this.isCordova); if (tryHideAddressBar) h += 60; // height of Safari iPhone iOS 6 address bar if (this.lastWindowWidth === w && this.lastWindowHeight === h && !force) return; this.lastWindowWidth = w; this.lastWindowHeight = h; var mode = this.fullscreen_mode; var orig_aspect, cur_aspect; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen) && !this.isCordova; if (!isfullscreen && this.fullscreen_mode === 0 && !force) return; // ignore size events when not fullscreen and not using a fullscreen-in-browser mode if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; var dpr = this.devicePixelRatio; if (mode >= 4) { orig_aspect = this.original_width / this.original_height; cur_aspect = w / h; if (cur_aspect > orig_aspect) { neww = h * orig_aspect; if (mode === 5) // integer scaling { intscale = (neww * dpr) / this.original_width; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offx = (w - neww) / 2; w = neww; } } else { newh = w / orig_aspect; if (mode === 5) // integer scaling { intscale = (newh * dpr) / this.original_height; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offy = (h - newh) / 2; h = newh; } } if (isfullscreen && !this.isNWjs) { offx = 0; offy = 0; } } else if (this.isNWjs && this.isNodeFullscreen && this.fullscreen_mode_set === 0) { offx = Math.floor((w - this.original_width) / 2); offy = Math.floor((h - this.original_height) / 2); w = this.original_width; h = this.original_height; } if (mode < 2) this.aspect_scale = dpr; if (this.isRetina && this.isiPad && dpr > 1) // don't apply to iPad 1-2 { if (w >= 1024) w = 1023; // 2046 retina pixels if (h >= 1024) h = 1023; } this.cssWidth = Math.round(w); this.cssHeight = Math.round(h); this.width = Math.round(w * dpr); this.height = Math.round(h * dpr); this.redraw = true; if (this.wantFullscreenScalingQuality) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { if ((this.width < this.original_width && this.height < this.original_height) || mode === 1) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { this.draw_width = this.original_width; this.draw_height = this.original_height; this.fullscreenScalingQuality = false; /*var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width;*/ if (mode === 2) // scale inner { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect < orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect > orig_aspect) this.draw_height = this.draw_width / cur_aspect; } else if (mode === 3) { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect > orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect < orig_aspect) this.draw_height = this.draw_width / cur_aspect; } } } if (this.canvasdiv && !this.isDomFree) { jQuery(this.canvasdiv).css({"width": Math.round(w) + "px", "height": Math.round(h) + "px", "margin-left": Math.floor(offx) + "px", "margin-top": Math.floor(offy) + "px"}); if (typeof cr_is_preview !== "undefined") { jQuery("#borderwrap").css({"width": Math.round(w) + "px", "height": Math.round(h) + "px"}); } } if (this.canvas) { this.canvas.width = Math.round(w * dpr); this.canvas.height = Math.round(h * dpr); if (this.isEjecta) { this.canvas.style.left = Math.floor(offx) + "px"; this.canvas.style.top = Math.floor(offy) + "px"; this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } else if (this.isRetina && !this.isDomFree) { this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } } if (this.overlay_canvas) { this.overlay_canvas.width = Math.round(w * dpr); this.overlay_canvas.height = Math.round(h * dpr); this.overlay_canvas.style.width = this.cssWidth + "px"; this.overlay_canvas.style.height = this.cssHeight + "px"; } if (this.glwrap) { this.glwrap.setSize(Math.round(w * dpr), Math.round(h * dpr)); } if (this.isDirectCanvas && this.ctx) { this.ctx.width = Math.round(w); this.ctx.height = Math.round(h); } if (this.ctx) { this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling; this.ctx["mozImageSmoothingEnabled"] = this.linearSampling; this.ctx["msImageSmoothingEnabled"] = this.linearSampling; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } this.tryLockOrientation(); if (!this.isDomFree && (tryHideAddressBar || this.isiPhone)) { window.setTimeout(function () { window.scrollTo(0, 1); }, 100); } }; Runtime.prototype.tryLockOrientation = function () { if (!this.autoLockOrientation || this.orientations === 0) return; var orientation = "portrait"; if (this.orientations === 2) orientation = "landscape"; try { if (screen["orientation"] && screen["orientation"]["lock"]) screen["orientation"]["lock"](orientation); else if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); } catch (e) { if (console && console.warn) console.warn("Failed to lock orientation: ", e); } }; Runtime.prototype.onContextLost = function () { this.glwrap.contextLost(); this.is_WebGL_context_lost = true; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onLostWebGLContext) t.onLostWebGLContext(); } }; Runtime.prototype.onContextRestored = function () { this.is_WebGL_context_lost = false; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onRestoreWebGLContext) t.onRestoreWebGLContext(); } }; Runtime.prototype.positionOverlayCanvas = function() { if (this.isDomFree) return; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isCordova; var overlay_position = isfullscreen ? jQuery(this.canvas).offset() : jQuery(this.canvas).position(); overlay_position.position = "absolute"; jQuery(this.overlay_canvas).css(overlay_position); }; var caf = window["cancelAnimationFrame"] || window["mozCancelAnimationFrame"] || window["webkitCancelAnimationFrame"] || window["msCancelAnimationFrame"] || window["oCancelAnimationFrame"]; Runtime.prototype["setSuspended"] = function (s) { var i, len; if (s && !this.isSuspended) { cr.logexport("[Construct 2] Suspending"); this.isSuspended = true; // next tick will be last if (this.raf_id !== -1 && caf) // note: CocoonJS does not implement cancelAnimationFrame caf(this.raf_id); if (this.timeout_id !== -1) clearTimeout(this.timeout_id); for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](true); } else if (!s && this.isSuspended) { cr.logexport("[Construct 2] Resuming"); this.isSuspended = false; this.last_tick_time = cr.performance_now(); // ensure first tick is a zero-dt one this.last_fps_time = cr.performance_now(); // reset FPS counter this.framecount = 0; this.logictime = 0; for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](false); this.tick(false); // kick off runtime again } }; Runtime.prototype.addSuspendCallback = function (f) { this.suspend_events.push(f); }; Runtime.prototype.GetObjectReference = function (i) { ; return this.objectRefTable[i]; }; Runtime.prototype.loadProject = function (data_response) { ; if (!data_response || !data_response["project"]) cr.logerror("Project model unavailable"); var pm = data_response["project"]; this.name = pm[0]; this.first_layout = pm[1]; this.fullscreen_mode = pm[12]; // 0 = off, 1 = crop, 2 = scale inner, 3 = scale outer, 4 = letterbox scale, 5 = integer letterbox scale this.fullscreen_mode_set = pm[12]; this.original_width = pm[10]; this.original_height = pm[11]; this.parallax_x_origin = this.original_width / 2; this.parallax_y_origin = this.original_height / 2; if (this.isDomFree && !this.isEjecta && (pm[12] >= 4 || pm[12] === 0)) { cr.logexport("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"); this.fullscreen_mode = 3; this.fullscreen_mode_set = 3; } this.uses_loader_layout = pm[18]; this.loaderstyle = pm[19]; if (this.loaderstyle === 0) { var loaderImage = new Image(); loaderImage.crossOrigin = "anonymous"; loaderImage.src = "loading-logo.png"; this.loaderlogos = { logo: loaderImage }; } else if (this.loaderstyle === 4) // c2 splash { var loaderC2logo_1024 = new Image(); loaderC2logo_1024.src = ""; var loaderC2logo_512 = new Image(); loaderC2logo_512.src = ""; var loaderC2logo_256 = new Image(); loaderC2logo_256.src = ""; var loaderC2logo_128 = new Image(); loaderC2logo_128.src = ""; var loaderPowered_1024 = new Image(); loaderPowered_1024.src = ""; var loaderPowered_512 = new Image(); loaderPowered_512.src = ""; var loaderPowered_256 = new Image(); loaderPowered_256.src = ""; var loaderPowered_128 = new Image(); loaderPowered_128.src = ""; var loaderWebsite_1024 = new Image(); loaderWebsite_1024.src = ""; var loaderWebsite_512 = new Image(); loaderWebsite_512.src = ""; var loaderWebsite_256 = new Image(); loaderWebsite_256.src = ""; var loaderWebsite_128 = new Image(); loaderWebsite_128.src = ""; this.loaderlogos = { logo: [loaderC2logo_1024, loaderC2logo_512, loaderC2logo_256, loaderC2logo_128], powered: [loaderPowered_1024, loaderPowered_512, loaderPowered_256, loaderPowered_128], website: [loaderWebsite_1024, loaderWebsite_512, loaderWebsite_256, loaderWebsite_128] }; } this.next_uid = pm[21]; this.objectRefTable = cr.getObjectRefTable(); this.system = new cr.system_object(this); var i, len, j, lenj, k, lenk, idstr, m, b, t, f, p; var plugin, plugin_ctor; for (i = 0, len = pm[2].length; i < len; i++) { m = pm[2][i]; p = this.GetObjectReference(m[0]); ; cr.add_common_aces(m, p.prototype); plugin = new p(this); plugin.singleglobal = m[1]; plugin.is_world = m[2]; plugin.must_predraw = m[9]; if (plugin.onCreate) plugin.onCreate(); // opportunity to override default ACEs cr.seal(plugin); this.plugins.push(plugin); } this.objectRefTable = cr.getObjectRefTable(); for (i = 0, len = pm[3].length; i < len; i++) { m = pm[3][i]; plugin_ctor = this.GetObjectReference(m[1]); ; plugin = null; for (j = 0, lenj = this.plugins.length; j < lenj; j++) { if (this.plugins[j] instanceof plugin_ctor) { plugin = this.plugins[j]; break; } } ; ; var type_inst = new plugin.Type(plugin); ; type_inst.name = m[0]; type_inst.is_family = m[2]; type_inst.instvar_sids = m[3].slice(0); type_inst.vars_count = m[3].length; type_inst.behs_count = m[4]; type_inst.fx_count = m[5]; type_inst.sid = m[11]; if (type_inst.is_family) { type_inst.members = []; // types in this family type_inst.family_index = this.family_count++; type_inst.families = null; } else { type_inst.members = null; type_inst.family_index = -1; type_inst.families = []; // families this type belongs to } type_inst.family_var_map = null; type_inst.family_beh_map = null; type_inst.family_fx_map = null; type_inst.is_contained = false; type_inst.container = null; if (m[6]) { type_inst.texture_file = m[6][0]; type_inst.texture_filesize = m[6][1]; type_inst.texture_pixelformat = m[6][2]; } else { type_inst.texture_file = null; type_inst.texture_filesize = 0; type_inst.texture_pixelformat = 0; // rgba8 } if (m[7]) { type_inst.animations = m[7]; } else { type_inst.animations = null; } type_inst.index = i; // save index in to types array in type type_inst.instances = []; // all instances of this type type_inst.deadCache = []; // destroyed instances to recycle next create type_inst.solstack = [new cr.selection(type_inst)]; // initialise SOL stack with one empty SOL type_inst.cur_sol = 0; type_inst.default_instance = null; type_inst.default_layerindex = 0; type_inst.stale_iids = true; type_inst.updateIIDs = cr.type_updateIIDs; type_inst.getFirstPicked = cr.type_getFirstPicked; type_inst.getPairedInstance = cr.type_getPairedInstance; type_inst.getCurrentSol = cr.type_getCurrentSol; type_inst.pushCleanSol = cr.type_pushCleanSol; type_inst.pushCopySol = cr.type_pushCopySol; type_inst.popSol = cr.type_popSol; type_inst.getBehaviorByName = cr.type_getBehaviorByName; type_inst.getBehaviorIndexByName = cr.type_getBehaviorIndexByName; type_inst.getEffectIndexByName = cr.type_getEffectIndexByName; type_inst.applySolToContainer = cr.type_applySolToContainer; type_inst.getInstanceByIID = cr.type_getInstanceByIID; type_inst.collision_grid = new cr.SparseGrid(this.original_width, this.original_height); type_inst.any_cell_changed = true; type_inst.any_instance_parallaxed = false; type_inst.extra = {}; type_inst.toString = cr.type_toString; type_inst.behaviors = []; for (j = 0, lenj = m[8].length; j < lenj; j++) { b = m[8][j]; var behavior_ctor = this.GetObjectReference(b[1]); var behavior_plugin = null; for (k = 0, lenk = this.behaviors.length; k < lenk; k++) { if (this.behaviors[k] instanceof behavior_ctor) { behavior_plugin = this.behaviors[k]; break; } } if (!behavior_plugin) { behavior_plugin = new behavior_ctor(this); behavior_plugin.my_types = []; // types using this behavior behavior_plugin.my_instances = new cr.ObjectSet(); // instances of this behavior if (behavior_plugin.onCreate) behavior_plugin.onCreate(); cr.seal(behavior_plugin); this.behaviors.push(behavior_plugin); if (cr.behaviors.solid && behavior_plugin instanceof cr.behaviors.solid) this.solidBehavior = behavior_plugin; if (cr.behaviors.jumpthru && behavior_plugin instanceof cr.behaviors.jumpthru) this.jumpthruBehavior = behavior_plugin; if (cr.behaviors.shadowcaster && behavior_plugin instanceof cr.behaviors.shadowcaster) this.shadowcasterBehavior = behavior_plugin; } if (behavior_plugin.my_types.indexOf(type_inst) === -1) behavior_plugin.my_types.push(type_inst); var behavior_type = new behavior_plugin.Type(behavior_plugin, type_inst); behavior_type.name = b[0]; behavior_type.sid = b[2]; behavior_type.onCreate(); cr.seal(behavior_type); type_inst.behaviors.push(behavior_type); } type_inst.global = m[9]; type_inst.isOnLoaderLayout = m[10]; type_inst.effect_types = []; for (j = 0, lenj = m[12].length; j < lenj; j++) { type_inst.effect_types.push({ id: m[12][j][0], name: m[12][j][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: j }); } type_inst.tile_poly_data = m[13]; if (!this.uses_loader_layout || type_inst.is_family || type_inst.isOnLoaderLayout || !plugin.is_world) { type_inst.onCreate(); cr.seal(type_inst); } if (type_inst.name) this.types[type_inst.name] = type_inst; this.types_by_index.push(type_inst); if (plugin.singleglobal) { var instance = new plugin.Instance(type_inst); instance.uid = this.next_uid++; instance.puid = this.next_puid++; instance.iid = 0; instance.get_iid = cr.inst_get_iid; instance.toString = cr.inst_toString; instance.properties = m[14]; instance.onCreate(); cr.seal(instance); type_inst.instances.push(instance); this.objectsByUid[instance.uid.toString()] = instance; } } for (i = 0, len = pm[4].length; i < len; i++) { var familydata = pm[4][i]; var familytype = this.types_by_index[familydata[0]]; var familymember; for (j = 1, lenj = familydata.length; j < lenj; j++) { familymember = this.types_by_index[familydata[j]]; familymember.families.push(familytype); familytype.members.push(familymember); } } for (i = 0, len = pm[28].length; i < len; i++) { var containerdata = pm[28][i]; var containertypes = []; for (j = 0, lenj = containerdata.length; j < lenj; j++) containertypes.push(this.types_by_index[containerdata[j]]); for (j = 0, lenj = containertypes.length; j < lenj; j++) { containertypes[j].is_contained = true; containertypes[j].container = containertypes; } } if (this.family_count > 0) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.is_family || !t.families.length) continue; t.family_var_map = new Array(this.family_count); t.family_beh_map = new Array(this.family_count); t.family_fx_map = new Array(this.family_count); var all_fx = []; var varsum = 0; var behsum = 0; var fxsum = 0; for (j = 0, lenj = t.families.length; j < lenj; j++) { f = t.families[j]; t.family_var_map[f.family_index] = varsum; varsum += f.vars_count; t.family_beh_map[f.family_index] = behsum; behsum += f.behs_count; t.family_fx_map[f.family_index] = fxsum; fxsum += f.fx_count; for (k = 0, lenk = f.effect_types.length; k < lenk; k++) all_fx.push(cr.shallowCopy({}, f.effect_types[k])); } t.effect_types = all_fx.concat(t.effect_types); for (j = 0, lenj = t.effect_types.length; j < lenj; j++) t.effect_types[j].index = j; } } for (i = 0, len = pm[5].length; i < len; i++) { m = pm[5][i]; var layout = new cr.layout(this, m); cr.seal(layout); this.layouts[layout.name] = layout; this.layouts_by_index.push(layout); } for (i = 0, len = pm[6].length; i < len; i++) { m = pm[6][i]; var sheet = new cr.eventsheet(this, m); cr.seal(sheet); this.eventsheets[sheet.name] = sheet; this.eventsheets_by_index.push(sheet); } for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].postInit(); for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].updateDeepIncludes(); for (i = 0, len = this.triggers_to_postinit.length; i < len; i++) this.triggers_to_postinit[i].postInit(); cr.clearArray(this.triggers_to_postinit) this.audio_to_preload = pm[7]; this.files_subfolder = pm[8]; this.pixel_rounding = pm[9]; this.aspect_scale = 1.0; this.enableWebGL = pm[13]; this.linearSampling = pm[14]; this.alphaBackground = pm[15]; this.versionstr = pm[16]; this.useHighDpi = pm[17]; this.orientations = pm[20]; // 0 = any, 1 = portrait, 2 = landscape this.autoLockOrientation = (this.orientations > 0); this.pauseOnBlur = pm[22]; this.wantFullscreenScalingQuality = pm[23]; // false = low quality, true = high quality this.fullscreenScalingQuality = this.wantFullscreenScalingQuality; this.downscalingQuality = pm[24]; // 0 = low (mips off), 1 = medium (mips on, dense spritesheet), 2 = high (mips on, sparse spritesheet) this.preloadSounds = pm[25]; // 0 = no, 1 = yes this.projectName = pm[26]; this.enableFrontToBack = pm[27] && !this.isIE; // front-to-back renderer disabled in IE (but not Edge) this.start_time = Date.now(); cr.clearArray(this.objectRefTable); this.initRendererAndLoader(); }; var anyImageHadError = false; Runtime.prototype.waitForImageLoad = function (img_, src_) { img_["cocoonLazyLoad"] = true; img_.onerror = function (e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error loading image '" + img_.src + "': ", e); }; if (this.isEjecta) { img_.src = src_; } else if (!img_.src) { if (typeof XAPKReader !== "undefined") { XAPKReader.get(src_, function (expanded_url) { img_.src = expanded_url; }, function (e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error extracting image '" + src_ + "' from expansion file: ", e); }); } else { img_.crossOrigin = "anonymous"; // required for Arcade sandbox compatibility img_.src = src_; } } this.wait_for_textures.push(img_); }; Runtime.prototype.findWaitingTexture = function (src_) { var i, len; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { if (this.wait_for_textures[i].cr_src === src_) return this.wait_for_textures[i]; } return null; }; var audio_preload_totalsize = 0; var audio_preload_started = false; Runtime.prototype.getready = function () { if (!this.audioInstance) return; audio_preload_totalsize = this.audioInstance.setPreloadList(this.audio_to_preload); }; Runtime.prototype.areAllTexturesAndSoundsLoaded = function () { var totalsize = audio_preload_totalsize; var completedsize = 0; var audiocompletedsize = 0; var ret = true; var i, len, img; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { img = this.wait_for_textures[i]; var filesize = img.cr_filesize; if (!filesize || filesize <= 0) filesize = 50000; totalsize += filesize; if (!!img.src && (img.complete || img["loaded"]) && !img.c2error) completedsize += filesize; else ret = false; // not all textures loaded } if (ret && this.preloadSounds && this.audioInstance) { if (!audio_preload_started) { this.audioInstance.startPreloads(); audio_preload_started = true; } audiocompletedsize = this.audioInstance.getPreloadedSize(); completedsize += audiocompletedsize; if (audiocompletedsize < audio_preload_totalsize) ret = false; // not done yet } if (totalsize == 0) this.progress = 1; // indicate to C2 splash loader that it can finish now else this.progress = (completedsize / totalsize); return ret; }; var isC2SplashDone = false; Runtime.prototype.go = function () { if (!this.ctx && !this.glwrap) return; var ctx = this.ctx || this.overlay_ctx; if (this.overlay_canvas) this.positionOverlayCanvas(); this.progress = 0; this.last_progress = -1; var self = this; if (this.areAllTexturesAndSoundsLoaded() && (this.loaderstyle !== 4 || isC2SplashDone)) { this.go_loading_finished(); } else { var ms_elapsed = Date.now() - this.start_time; if (ctx) { var overlay_width = this.width; var overlay_height = this.height; var dpr = this.devicePixelRatio; if (this.loaderstyle < 3 && (this.isCocoonJs || (ms_elapsed >= 500 && this.last_progress != this.progress))) { ctx.clearRect(0, 0, overlay_width, overlay_height); var mx = overlay_width / 2; var my = overlay_height / 2; var haslogo = (this.loaderstyle === 0 && this.loaderlogos.logo.complete); var hlw = 40 * dpr; var hlh = 0; var logowidth = 80 * dpr; var logoheight; if (haslogo) { var loaderLogoImage = this.loaderlogos.logo; logowidth = loaderLogoImage.width * dpr; logoheight = loaderLogoImage.height * dpr; hlw = logowidth / 2; hlh = logoheight / 2; ctx.drawImage(loaderLogoImage, cr.floor(mx - hlw), cr.floor(my - hlh), logowidth, logoheight); } if (this.loaderstyle <= 1) { my += hlh + (haslogo ? 12 * dpr : 0); mx -= hlw; mx = cr.floor(mx) + 0.5; my = cr.floor(my) + 0.5; ctx.fillStyle = anyImageHadError ? "red" : "DodgerBlue"; ctx.fillRect(mx, my, Math.floor(logowidth * this.progress), 6 * dpr); ctx.strokeStyle = "black"; ctx.strokeRect(mx, my, logowidth, 6 * dpr); ctx.strokeStyle = "white"; ctx.strokeRect(mx - 1 * dpr, my - 1 * dpr, logowidth + 2 * dpr, 8 * dpr); } else if (this.loaderstyle === 2) { ctx.font = (this.isEjecta ? "12pt ArialMT" : "12pt Arial"); ctx.fillStyle = anyImageHadError ? "#f00" : "#999"; ctx.textBaseLine = "middle"; var percent_text = Math.round(this.progress * 100) + "%"; var text_dim = ctx.measureText ? ctx.measureText(percent_text) : null; var text_width = text_dim ? text_dim.width : 0; ctx.fillText(percent_text, mx - (text_width / 2), my); } this.last_progress = this.progress; } else if (this.loaderstyle === 4) { this.draw_c2_splash_loader(ctx); if (raf) raf(function() { self.go(); }); else setTimeout(function() { self.go(); }, 16); return; } } setTimeout(function() { self.go(); }, (this.isCocoonJs ? 10 : 100)); } }; var splashStartTime = -1; var splashFadeInDuration = 300; var splashFadeOutDuration = 300; var splashAfterFadeOutWait = (typeof cr_is_preview === "undefined" ? 200 : 0); var splashIsFadeIn = true; var splashIsFadeOut = false; var splashFadeInFinish = 0; var splashFadeOutStart = 0; var splashMinDisplayTime = (typeof cr_is_preview === "undefined" ? 3000 : 0); var renderViaCanvas = null; var renderViaCtx = null; var splashFrameNumber = 0; function maybeCreateRenderViaCanvas(w, h) { if (!renderViaCanvas || renderViaCanvas.width !== w || renderViaCanvas.height !== h) { renderViaCanvas = document.createElement("canvas"); renderViaCanvas.width = w; renderViaCanvas.height = h; renderViaCtx = renderViaCanvas.getContext("2d"); } }; function mipImage(arr, size) { if (size <= 128) return arr[3]; else if (size <= 256) return arr[2]; else if (size <= 512) return arr[1]; else return arr[0]; }; Runtime.prototype.draw_c2_splash_loader = function(ctx) { if (isC2SplashDone) return; var w = Math.ceil(this.width); var h = Math.ceil(this.height); var dpr = this.devicePixelRatio; var logoimages = this.loaderlogos.logo; var poweredimages = this.loaderlogos.powered; var websiteimages = this.loaderlogos.website; for (var i = 0; i < 4; ++i) { if (!logoimages[i].complete || !poweredimages[i].complete || !websiteimages[i].complete) return; } if (splashFrameNumber === 0) splashStartTime = Date.now(); var nowTime = Date.now(); var isRenderingVia = false; var renderToCtx = ctx; var drawW, drawH; if (splashIsFadeIn || splashIsFadeOut) { ctx.clearRect(0, 0, w, h); maybeCreateRenderViaCanvas(w, h); renderToCtx = renderViaCtx; isRenderingVia = true; if (splashIsFadeIn && splashFrameNumber === 1) splashStartTime = Date.now(); } else { ctx.globalAlpha = 1; } renderToCtx.fillStyle = "#333333"; renderToCtx.fillRect(0, 0, w, h); if (this.cssHeight > 256) { drawW = cr.clamp(h * 0.22, 105, w * 0.6); drawH = drawW * 0.25; renderToCtx.drawImage(mipImage(poweredimages, drawW), w * 0.5 - drawW/2, h * 0.2 - drawH/2, drawW, drawH); drawW = Math.min(h * 0.395, w * 0.95); drawH = drawW; renderToCtx.drawImage(mipImage(logoimages, drawW), w * 0.5 - drawW/2, h * 0.485 - drawH/2, drawW, drawH); drawW = cr.clamp(h * 0.22, 105, w * 0.6); drawH = drawW * 0.25; renderToCtx.drawImage(mipImage(websiteimages, drawW), w * 0.5 - drawW/2, h * 0.868 - drawH/2, drawW, drawH); renderToCtx.fillStyle = "#3C3C3C"; drawW = w; drawH = Math.max(h * 0.005, 2); renderToCtx.fillRect(0, h * 0.8 - drawH/2, drawW, drawH); renderToCtx.fillStyle = anyImageHadError ? "red" : "#E0FF65"; drawW = w * this.progress; renderToCtx.fillRect(w * 0.5 - drawW/2, h * 0.8 - drawH/2, drawW, drawH); } else { drawW = h * 0.55; drawH = drawW; renderToCtx.drawImage(mipImage(logoimages, drawW), w * 0.5 - drawW/2, h * 0.45 - drawH/2, drawW, drawH); renderToCtx.fillStyle = "#3C3C3C"; drawW = w; drawH = Math.max(h * 0.005, 2); renderToCtx.fillRect(0, h * 0.85 - drawH/2, drawW, drawH); renderToCtx.fillStyle = anyImageHadError ? "red" : "#E0FF65"; drawW = w * this.progress; renderToCtx.fillRect(w * 0.5 - drawW/2, h * 0.85 - drawH/2, drawW, drawH); } if (isRenderingVia) { if (splashIsFadeIn) { if (splashFrameNumber === 0) ctx.globalAlpha = 0; else ctx.globalAlpha = Math.min((nowTime - splashStartTime) / splashFadeInDuration, 1); } else if (splashIsFadeOut) { ctx.globalAlpha = Math.max(1 - (nowTime - splashFadeOutStart) / splashFadeOutDuration, 0); } ctx.drawImage(renderViaCanvas, 0, 0, w, h); } if (splashIsFadeIn && nowTime - splashStartTime >= splashFadeInDuration && splashFrameNumber >= 2) { splashIsFadeIn = false; splashFadeInFinish = nowTime; } if (!splashIsFadeIn && nowTime - splashFadeInFinish >= splashMinDisplayTime && !splashIsFadeOut && this.progress >= 1) { splashIsFadeOut = true; splashFadeOutStart = nowTime; } if ((splashIsFadeOut && nowTime - splashFadeOutStart >= splashFadeOutDuration + splashAfterFadeOutWait) || (typeof cr_is_preview !== "undefined" && this.progress >= 1 && Date.now() - splashStartTime < 500)) { isC2SplashDone = true; splashIsFadeIn = false; splashIsFadeOut = false; renderViaCanvas = null; renderViaCtx = null; this.loaderlogos = null; } ++splashFrameNumber; }; Runtime.prototype.go_loading_finished = function () { if (this.overlay_canvas) { this.canvas.parentNode.removeChild(this.overlay_canvas); this.overlay_ctx = null; this.overlay_canvas = null; } this.start_time = Date.now(); this.last_fps_time = cr.performance_now(); // for counting framerate var i, len, t; if (this.uses_loader_layout) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (!t.is_family && !t.isOnLoaderLayout && t.plugin.is_world) { t.onCreate(); cr.seal(t); } } } else this.isloading = false; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { this.layouts_by_index[i].createGlobalNonWorlds(); } if (this.fullscreen_mode >= 2) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width; } if (this.first_layout) this.layouts[this.first_layout].startRunning(); else this.layouts_by_index[0].startRunning(); ; if (!this.uses_loader_layout) { this.loadingprogress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); } if (navigator["splashscreen"] && navigator["splashscreen"]["hide"]) navigator["splashscreen"]["hide"](); for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onAppBegin) t.onAppBegin(); } if (document["hidden"] || document["webkitHidden"] || document["mozHidden"] || document["msHidden"]) { window["cr_setSuspended"](true); // stop rendering } else { this.tick(false); } if (this.isDirectCanvas) AppMobi["webview"]["execute"]("onGameReady();"); }; Runtime.prototype.tick = function (background_wake, timestamp, debug_step) { if (!this.running_layout) return; var nowtime = cr.performance_now(); var logic_start = nowtime; if (!debug_step && this.isSuspended && !background_wake) return; if (!background_wake) { if (raf) this.raf_id = raf(this.tickFunc); else { this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16); } } var raf_time = timestamp || nowtime; var fsmode = this.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"]) && !this.isCordova; if ((isfullscreen || this.isNodeFullscreen) && this.fullscreen_scaling > 0) fsmode = this.fullscreen_scaling; if (fsmode > 0 && (!this.isiOS || window.self !== window.top)) { var curwidth = window.innerWidth; var curheight = window.innerHeight; if (this.lastWindowWidth !== curwidth || this.lastWindowHeight !== curheight) { this["setSize"](window_innerWidth(), window_innerHeight()); } } if (!this.isDomFree) { if (isfullscreen) { if (!this.firstInFullscreen) { this.fullscreenOldMarginCss = jQuery(this.canvas).css("margin") || "0"; this.firstInFullscreen = true; } if (!this.isChrome && !this.isNWjs) { jQuery(this.canvas).css({ "margin-left": "" + Math.floor((screen.width - (this.width / this.devicePixelRatio)) / 2) + "px", "margin-top": "" + Math.floor((screen.height - (this.height / this.devicePixelRatio)) / 2) + "px" }); } } else { if (this.firstInFullscreen) { if (!this.isChrome && !this.isNWjs) { jQuery(this.canvas).css("margin", this.fullscreenOldMarginCss); } this.fullscreenOldMarginCss = ""; this.firstInFullscreen = false; if (this.fullscreen_mode === 0) { this["setSize"](Math.round(this.oldWidth / this.devicePixelRatio), Math.round(this.oldHeight / this.devicePixelRatio), true); } } else { this.oldWidth = this.width; this.oldHeight = this.height; } } } if (this.isloading) { var done = this.areAllTexturesAndSoundsLoaded(); // updates this.progress this.loadingprogress = this.progress; if (done) { this.isloading = false; this.progress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); } } this.logic(raf_time); if ((this.redraw || this.isCocoonJs) && !this.is_WebGL_context_lost && !this.suspendDrawing && !background_wake) { this.redraw = false; if (this.glwrap) this.drawGL(); else this.draw(); if (this.snapshotCanvas) { if (this.canvas && this.canvas.toDataURL) { this.snapshotData = this.canvas.toDataURL(this.snapshotCanvas[0], this.snapshotCanvas[1]); if (window["cr_onSnapshot"]) window["cr_onSnapshot"](this.snapshotData); this.trigger(cr.system_object.prototype.cnds.OnCanvasSnapshot, null); } this.snapshotCanvas = null; } } if (!this.hit_breakpoint) { this.tickcount++; this.execcount++; this.framecount++; } this.logictime += cr.performance_now() - logic_start; }; Runtime.prototype.logic = function (cur_time) { var i, leni, j, lenj, k, lenk, type, inst, binst; if (cur_time - this.last_fps_time >= 1000) // every 1 second { this.last_fps_time += 1000; if (cur_time - this.last_fps_time >= 1000) this.last_fps_time = cur_time; this.fps = this.framecount; this.framecount = 0; this.cpuutilisation = this.logictime; this.logictime = 0; } if (this.last_tick_time !== 0) { var ms_diff = cur_time - this.last_tick_time; if (ms_diff < 0) ms_diff = 0; this.dt1 = ms_diff / 1000.0; // dt measured in seconds if (this.dt1 > 0.5) this.dt1 = 0; else if (this.dt1 > 1 / this.minimumFramerate) this.dt1 = 1 / this.minimumFramerate; } this.last_tick_time = cur_time; this.dt = this.dt1 * this.timescale; this.kahanTime.add(this.dt); this.wallTime.add(this.dt1); var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isCordova; if (this.fullscreen_mode >= 2 /* scale */ || (isfullscreen && this.fullscreen_scaling > 0)) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; var mode = this.fullscreen_mode; if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; if ((mode !== 2 && cur_aspect > orig_aspect) || (mode === 2 && cur_aspect < orig_aspect)) { this.aspect_scale = this.height / this.original_height; } else { this.aspect_scale = this.width / this.original_width; } if (this.running_layout) { this.running_layout.scrollToX(this.running_layout.scrollX); this.running_layout.scrollToY(this.running_layout.scrollY); } } else this.aspect_scale = (this.isRetina ? this.devicePixelRatio : 1); this.ClearDeathRow(); this.isInOnDestroy++; this.system.runWaits(); // prevent instance list changing this.isInOnDestroy--; this.ClearDeathRow(); // allow instance list changing this.isInOnDestroy++; var tickarr = this.objects_to_pretick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].pretick(); for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { inst.behavior_insts[k].tick(); } } } for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.posttick) binst.posttick(); } } } tickarr = this.objects_to_tick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick(); this.isInOnDestroy--; // end preventing instance lists from being changed this.handleSaveLoad(); // save/load now if queued i = 0; while (this.changelayout && i++ < 10) { this.doChangeLayout(this.changelayout); } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) this.eventsheets_by_index[i].hasRun = false; if (this.running_layout.event_sheet) this.running_layout.event_sheet.run(); cr.clearArray(this.registered_collisions); this.layout_first_tick = false; this.isInOnDestroy++; // prevent instance lists from being changed for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { var inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.tick2) binst.tick2(); } } } tickarr = this.objects_to_tick2.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick2(); this.isInOnDestroy--; // end preventing instance lists from being changed }; Runtime.prototype.onWindowBlur = function () { var i, leni, j, lenj, k, lenk, type, inst, binst; for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (inst.onWindowBlur) inst.onWindowBlur(); if (!inst.behavior_insts) continue; // single-globals don't have behavior_insts for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.onWindowBlur) binst.onWindowBlur(); } } } }; Runtime.prototype.doChangeLayout = function (changeToLayout) { var prev_layout = this.running_layout; this.running_layout.stopRunning(); var i, len, j, lenj, k, lenk, type, inst, binst; if (this.glwrap) { for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; if (type.unloadTextures && (!type.global || type.instances.length === 0) && changeToLayout.initial_types.indexOf(type) === -1) { type.unloadTextures(); } } } if (prev_layout == changeToLayout) cr.clearArray(this.system.waits); cr.clearArray(this.registered_collisions); changeToLayout.startRunning(); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (!type.global && !type.plugin.singleglobal) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (inst.onLayoutChange) inst.onLayoutChange(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.onLayoutChange) binst.onLayoutChange(); } } } } this.redraw = true; this.layout_first_tick = true; this.ClearDeathRow(); }; Runtime.prototype.pretickMe = function (inst) { this.objects_to_pretick.add(inst); }; Runtime.prototype.unpretickMe = function (inst) { this.objects_to_pretick.remove(inst); }; Runtime.prototype.tickMe = function (inst) { this.objects_to_tick.add(inst); }; Runtime.prototype.untickMe = function (inst) { this.objects_to_tick.remove(inst); }; Runtime.prototype.tick2Me = function (inst) { this.objects_to_tick2.add(inst); }; Runtime.prototype.untick2Me = function (inst) { this.objects_to_tick2.remove(inst); }; Runtime.prototype.getDt = function (inst) { if (!inst || inst.my_timescale === -1.0) return this.dt; return this.dt1 * inst.my_timescale; }; Runtime.prototype.draw = function () { this.running_layout.draw(this.ctx); if (this.isDirectCanvas) this.ctx["present"](); }; Runtime.prototype.drawGL = function () { if (this.enableFrontToBack) { this.earlyz_index = 1; // start from front, 1-based to avoid exactly equalling near plane Z value this.running_layout.drawGL_earlyZPass(this.glwrap); } this.running_layout.drawGL(this.glwrap); this.glwrap.present(); }; Runtime.prototype.addDestroyCallback = function (f) { if (f) this.destroycallbacks.push(f); }; Runtime.prototype.removeDestroyCallback = function (f) { cr.arrayFindRemove(this.destroycallbacks, f); }; Runtime.prototype.getObjectByUID = function (uid_) { ; var uidstr = uid_.toString(); if (this.objectsByUid.hasOwnProperty(uidstr)) return this.objectsByUid[uidstr]; else return null; }; var objectset_cache = []; function alloc_objectset() { if (objectset_cache.length) return objectset_cache.pop(); else return new cr.ObjectSet(); }; function free_objectset(s) { s.clear(); objectset_cache.push(s); }; Runtime.prototype.DestroyInstance = function (inst) { var i, len; var type = inst.type; var typename = type.name; var has_typename = this.deathRow.hasOwnProperty(typename); var obj_set = null; if (has_typename) { obj_set = this.deathRow[typename]; if (obj_set.contains(inst)) return; // already had DestroyInstance called } else { obj_set = alloc_objectset(); this.deathRow[typename] = obj_set; } obj_set.add(inst); this.hasPendingInstances = true; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { this.DestroyInstance(inst.siblings[i]); } } if (this.isInClearDeathRow) obj_set.values_cache.push(inst); if (!this.isEndingLayout) { this.isInOnDestroy++; // support recursion this.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnDestroyed, inst); this.isInOnDestroy--; } }; Runtime.prototype.ClearDeathRow = function () { if (!this.hasPendingInstances) return; var inst, type, instances; var i, j, leni, lenj, obj_set; this.isInClearDeathRow = true; for (i = 0, leni = this.createRow.length; i < leni; ++i) { inst = this.createRow[i]; type = inst.type; type.instances.push(inst); for (j = 0, lenj = type.families.length; j < lenj; ++j) { type.families[j].instances.push(inst); type.families[j].stale_iids = true; } } cr.clearArray(this.createRow); this.IterateDeathRow(); // moved to separate function so for-in performance doesn't hobble entire function cr.wipe(this.deathRow); // all objectsets have already been recycled this.isInClearDeathRow = false; this.hasPendingInstances = false; }; Runtime.prototype.IterateDeathRow = function () { for (var p in this.deathRow) { if (this.deathRow.hasOwnProperty(p)) { this.ClearDeathRowForType(this.deathRow[p]); } } }; Runtime.prototype.ClearDeathRowForType = function (obj_set) { var arr = obj_set.valuesRef(); // get array of items from set ; var type = arr[0].type; ; ; var i, len, j, lenj, w, f, layer_instances, inst; cr.arrayRemoveAllFromObjectSet(type.instances, obj_set); type.stale_iids = true; if (type.instances.length === 0) type.any_instance_parallaxed = false; for (i = 0, len = type.families.length; i < len; ++i) { f = type.families[i]; cr.arrayRemoveAllFromObjectSet(f.instances, obj_set); f.stale_iids = true; } for (i = 0, len = this.system.waits.length; i < len; ++i) { w = this.system.waits[i]; if (w.sols.hasOwnProperty(type.index)) cr.arrayRemoveAllFromObjectSet(w.sols[type.index].insts, obj_set); if (!type.is_family) { for (j = 0, lenj = type.families.length; j < lenj; ++j) { f = type.families[j]; if (w.sols.hasOwnProperty(f.index)) cr.arrayRemoveAllFromObjectSet(w.sols[f.index].insts, obj_set); } } } var first_layer = arr[0].layer; if (first_layer) { if (first_layer.useRenderCells) { layer_instances = first_layer.instances; for (i = 0, len = layer_instances.length; i < len; ++i) { inst = layer_instances[i]; if (!obj_set.contains(inst)) continue; // not destroying this instance inst.update_bbox(); first_layer.render_grid.update(inst, inst.rendercells, null); inst.rendercells.set(0, 0, -1, -1); } } cr.arrayRemoveAllFromObjectSet(first_layer.instances, obj_set); first_layer.setZIndicesStaleFrom(0); } for (i = 0; i < arr.length; ++i) // check array length every time in case it changes { this.ClearDeathRowForSingleInstance(arr[i], type); } free_objectset(obj_set); this.redraw = true; }; Runtime.prototype.ClearDeathRowForSingleInstance = function (inst, type) { var i, len, binst; for (i = 0, len = this.destroycallbacks.length; i < len; ++i) this.destroycallbacks[i](inst); if (inst.collcells) { type.collision_grid.update(inst, inst.collcells, null); } var layer = inst.layer; if (layer) { layer.removeFromInstanceList(inst, true); // remove from both instance list and render grid } if (inst.behavior_insts) { for (i = 0, len = inst.behavior_insts.length; i < len; ++i) { binst = inst.behavior_insts[i]; if (binst.onDestroy) binst.onDestroy(); binst.behavior.my_instances.remove(inst); } } this.objects_to_pretick.remove(inst); this.objects_to_tick.remove(inst); this.objects_to_tick2.remove(inst); if (inst.onDestroy) inst.onDestroy(); if (this.objectsByUid.hasOwnProperty(inst.uid.toString())) delete this.objectsByUid[inst.uid.toString()]; this.objectcount--; if (type.deadCache.length < 100) type.deadCache.push(inst); }; Runtime.prototype.createInstance = function (type, layer, sx, sy) { if (type.is_family) { var i = cr.floor(Math.random() * type.members.length); return this.createInstance(type.members[i], layer, sx, sy); } if (!type.default_instance) { return null; } return this.createInstanceFromInit(type.default_instance, layer, false, sx, sy, false); }; var all_behaviors = []; Runtime.prototype.createInstanceFromInit = function (initial_inst, layer, is_startup_instance, sx, sy, skip_siblings) { var i, len, j, lenj, p, effect_fallback, x, y; if (!initial_inst) return null; var type = this.types_by_index[initial_inst[1]]; ; ; var is_world = type.plugin.is_world; ; if (this.isloading && is_world && !type.isOnLoaderLayout) return null; if (is_world && !this.glwrap && initial_inst[0][11] === 11) return null; var original_layer = layer; if (!is_world) layer = null; var inst; if (type.deadCache.length) { inst = type.deadCache.pop(); inst.recycled = true; type.plugin.Instance.call(inst, type); } else { inst = new type.plugin.Instance(type); inst.recycled = false; } if (is_startup_instance && !skip_siblings && !this.objectsByUid.hasOwnProperty(initial_inst[2].toString())) inst.uid = initial_inst[2]; else inst.uid = this.next_uid++; this.objectsByUid[inst.uid.toString()] = inst; inst.puid = this.next_puid++; inst.iid = type.instances.length; for (i = 0, len = this.createRow.length; i < len; ++i) { if (this.createRow[i].type === type) inst.iid++; } inst.get_iid = cr.inst_get_iid; inst.toString = cr.inst_toString; var initial_vars = initial_inst[3]; if (inst.recycled) { cr.wipe(inst.extra); } else { inst.extra = {}; if (typeof cr_is_preview !== "undefined") { inst.instance_var_names = []; inst.instance_var_names.length = initial_vars.length; for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_var_names[i] = initial_vars[i][1]; } inst.instance_vars = []; inst.instance_vars.length = initial_vars.length; } for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_vars[i] = initial_vars[i][0]; if (is_world) { var wm = initial_inst[0]; ; inst.x = cr.is_undefined(sx) ? wm[0] : sx; inst.y = cr.is_undefined(sy) ? wm[1] : sy; inst.z = wm[2]; inst.width = wm[3]; inst.height = wm[4]; inst.depth = wm[5]; inst.angle = wm[6]; inst.opacity = wm[7]; inst.hotspotX = wm[8]; inst.hotspotY = wm[9]; inst.blend_mode = wm[10]; effect_fallback = wm[11]; if (!this.glwrap && type.effect_types.length) // no WebGL renderer and shaders used inst.blend_mode = effect_fallback; // use fallback blend mode - destroy mode was handled above inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); if (inst.recycled) { for (i = 0, len = wm[12].length; i < len; i++) { for (j = 0, lenj = wm[12][i].length; j < lenj; j++) inst.effect_params[i][j] = wm[12][i][j]; } inst.bbox.set(0, 0, 0, 0); inst.collcells.set(0, 0, -1, -1); inst.rendercells.set(0, 0, -1, -1); inst.bquad.set_from_rect(inst.bbox); cr.clearArray(inst.bbox_changed_callbacks); } else { inst.effect_params = wm[12].slice(0); for (i = 0, len = inst.effect_params.length; i < len; i++) inst.effect_params[i] = wm[12][i].slice(0); inst.active_effect_types = []; inst.active_effect_flags = []; inst.active_effect_flags.length = type.effect_types.length; inst.bbox = new cr.rect(0, 0, 0, 0); inst.collcells = new cr.rect(0, 0, -1, -1); inst.rendercells = new cr.rect(0, 0, -1, -1); inst.bquad = new cr.quad(); inst.bbox_changed_callbacks = []; inst.set_bbox_changed = cr.set_bbox_changed; inst.add_bbox_changed_callback = cr.add_bbox_changed_callback; inst.contains_pt = cr.inst_contains_pt; inst.update_bbox = cr.update_bbox; inst.update_render_cell = cr.update_render_cell; inst.update_collision_cell = cr.update_collision_cell; inst.get_zindex = cr.inst_get_zindex; } inst.tilemap_exists = false; inst.tilemap_width = 0; inst.tilemap_height = 0; inst.tilemap_data = null; if (wm.length === 14) { inst.tilemap_exists = true; inst.tilemap_width = wm[13][0]; inst.tilemap_height = wm[13][1]; inst.tilemap_data = wm[13][2]; } for (i = 0, len = type.effect_types.length; i < len; i++) inst.active_effect_flags[i] = true; inst.shaders_preserve_opaqueness = true; inst.updateActiveEffects = cr.inst_updateActiveEffects; inst.updateActiveEffects(); inst.uses_shaders = !!inst.active_effect_types.length; inst.bbox_changed = true; inst.cell_changed = true; type.any_cell_changed = true; inst.visible = true; inst.my_timescale = -1.0; inst.layer = layer; inst.zindex = layer.instances.length; // will be placed at top of current layer inst.earlyz_index = 0; if (typeof inst.collision_poly === "undefined") inst.collision_poly = null; inst.collisionsEnabled = true; this.redraw = true; } var initial_props, binst; cr.clearArray(all_behaviors); for (i = 0, len = type.families.length; i < len; i++) { all_behaviors.push.apply(all_behaviors, type.families[i].behaviors); } all_behaviors.push.apply(all_behaviors, type.behaviors); if (inst.recycled) { for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; binst = inst.behavior_insts[i]; binst.recycled = true; btype.behavior.Instance.call(binst, btype, inst); initial_props = initial_inst[4][i]; for (j = 0, lenj = initial_props.length; j < lenj; j++) binst.properties[j] = initial_props[j]; binst.onCreate(); btype.behavior.my_instances.add(inst); } } else { inst.behavior_insts = []; for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; var binst = new btype.behavior.Instance(btype, inst); binst.recycled = false; binst.properties = initial_inst[4][i].slice(0); binst.onCreate(); cr.seal(binst); inst.behavior_insts.push(binst); btype.behavior.my_instances.add(inst); } } initial_props = initial_inst[5]; if (inst.recycled) { for (i = 0, len = initial_props.length; i < len; i++) inst.properties[i] = initial_props[i]; } else inst.properties = initial_props.slice(0); this.createRow.push(inst); this.hasPendingInstances = true; if (layer) { ; layer.appendToInstanceList(inst, true); if (layer.parallaxX !== 1 || layer.parallaxY !== 1) type.any_instance_parallaxed = true; } this.objectcount++; if (type.is_contained) { inst.is_contained = true; if (inst.recycled) cr.clearArray(inst.siblings); else inst.siblings = []; // note: should not include self in siblings if (!is_startup_instance && !skip_siblings) // layout links initial instances { for (i = 0, len = type.container.length; i < len; i++) { if (type.container[i] === type) continue; if (!type.container[i].default_instance) { return null; } inst.siblings.push(this.createInstanceFromInit(type.container[i].default_instance, original_layer, false, is_world ? inst.x : sx, is_world ? inst.y : sy, true)); } for (i = 0, len = inst.siblings.length; i < len; i++) { inst.siblings[i].siblings.push(inst); for (j = 0; j < len; j++) { if (i !== j) inst.siblings[i].siblings.push(inst.siblings[j]); } } } } else { inst.is_contained = false; inst.siblings = null; } inst.onCreate(); if (!inst.recycled) cr.seal(inst); for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].postCreate) inst.behavior_insts[i].postCreate(); } return inst; }; Runtime.prototype.getLayerByName = function (layer_name) { var i, len; for (i = 0, len = this.running_layout.layers.length; i < len; i++) { var layer = this.running_layout.layers[i]; if (cr.equals_nocase(layer.name, layer_name)) return layer; } return null; }; Runtime.prototype.getLayerByNumber = function (index) { index = cr.floor(index); if (index < 0) index = 0; if (index >= this.running_layout.layers.length) index = this.running_layout.layers.length - 1; return this.running_layout.layers[index]; }; Runtime.prototype.getLayer = function (l) { if (cr.is_number(l)) return this.getLayerByNumber(l); else return this.getLayerByName(l.toString()); }; Runtime.prototype.clearSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].getCurrentSol().select_all = true; } }; Runtime.prototype.pushCleanSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCleanSol(); } }; Runtime.prototype.pushCopySol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCopySol(); } }; Runtime.prototype.popSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].popSol(); } }; Runtime.prototype.updateAllCells = function (type) { if (!type.any_cell_changed) return; // all instances must already be up-to-date var i, len, instances = type.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].update_collision_cell(); } var createRow = this.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === type) createRow[i].update_collision_cell(); } type.any_cell_changed = false; }; Runtime.prototype.getCollisionCandidates = function (layer, rtype, bbox, candidates) { var i, len, t; var is_parallaxed = (layer ? (layer.parallaxX !== 1 || layer.parallaxY !== 1) : false); if (rtype.is_family) { for (i = 0, len = rtype.members.length; i < len; ++i) { t = rtype.members[i]; if (is_parallaxed || t.any_instance_parallaxed) { cr.appendArray(candidates, t.instances); } else { this.updateAllCells(t); t.collision_grid.queryRange(bbox, candidates); } } } else { if (is_parallaxed || rtype.any_instance_parallaxed) { cr.appendArray(candidates, rtype.instances); } else { this.updateAllCells(rtype); rtype.collision_grid.queryRange(bbox, candidates); } } }; Runtime.prototype.getTypesCollisionCandidates = function (layer, types, bbox, candidates) { var i, len; for (i = 0, len = types.length; i < len; ++i) { this.getCollisionCandidates(layer, types[i], bbox, candidates); } }; Runtime.prototype.getSolidCollisionCandidates = function (layer, bbox, candidates) { var solid = this.getSolidBehavior(); if (!solid) return null; this.getTypesCollisionCandidates(layer, solid.my_types, bbox, candidates); }; Runtime.prototype.getJumpthruCollisionCandidates = function (layer, bbox, candidates) { var jumpthru = this.getJumpthruBehavior(); if (!jumpthru) return null; this.getTypesCollisionCandidates(layer, jumpthru.my_types, bbox, candidates); }; Runtime.prototype.testAndSelectCanvasPointOverlap = function (type, ptx, pty, inverted) { var sol = type.getCurrentSol(); var i, j, inst, len; var lx, ly; if (sol.select_all) { if (!inverted) { sol.select_all = false; cr.clearArray(sol.instances); // clear contents } for (i = 0, len = type.instances.length; i < len; i++) { inst = type.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else sol.instances.push(inst); } } } else { j = 0; for (i = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else { sol.instances[j] = sol.instances[i]; j++; } } } if (!inverted) sol.instances.length = j; } type.applySolToContainer(); if (inverted) return true; // did not find anything overlapping else return sol.hasObjects(); }; Runtime.prototype.testOverlap = function (a, b) { if (!a || !b || a === b || !a.collisionsEnabled || !b.collisionsEnabled) return false; a.update_bbox(); b.update_bbox(); var layera = a.layer; var layerb = b.layer; var different_layers = (layera !== layerb && (layera.parallaxX !== layerb.parallaxX || layerb.parallaxY !== layerb.parallaxY || layera.scale !== layerb.scale || layera.angle !== layerb.angle || layera.zoomRate !== layerb.zoomRate)); var i, len, i2, i21, x, y, haspolya, haspolyb, polya, polyb; if (!different_layers) // same layers: easy check { if (!a.bbox.intersects_rect(b.bbox)) return false; if (!a.bquad.intersects_quad(b.bquad)) return false; if (a.tilemap_exists && b.tilemap_exists) return false; if (a.tilemap_exists) return this.testTilemapOverlap(a, b); if (b.tilemap_exists) return this.testTilemapOverlap(b, a); haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolya && !haspolyb) return true; if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); polya = a.collision_poly; } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); polya = this.temp_poly; } if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); polyb = b.collision_poly; } else { this.temp_poly.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); polyb = this.temp_poly; } return polya.intersects_poly(polyb, b.x - a.x, b.y - a.y); } else // different layers: need to do full translated check { haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); this.temp_poly.set_from_poly(a.collision_poly); } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); } polya = this.temp_poly; if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); this.temp_poly2.set_from_poly(b.collision_poly); } else { this.temp_poly2.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); } polyb = this.temp_poly2; for (i = 0, len = polya.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polya.pts_cache[i2]; y = polya.pts_cache[i21]; polya.pts_cache[i2] = layera.layerToCanvas(x + a.x, y + a.y, true); polya.pts_cache[i21] = layera.layerToCanvas(x + a.x, y + a.y, false); } polya.update_bbox(); for (i = 0, len = polyb.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polyb.pts_cache[i2]; y = polyb.pts_cache[i21]; polyb.pts_cache[i2] = layerb.layerToCanvas(x + b.x, y + b.y, true); polyb.pts_cache[i21] = layerb.layerToCanvas(x + b.x, y + b.y, false); } polyb.update_bbox(); return polya.intersects_poly(polyb, 0, 0); } }; var tmpQuad = new cr.quad(); var tmpRect = new cr.rect(0, 0, 0, 0); var collrect_candidates = []; Runtime.prototype.testTilemapOverlap = function (tm, a) { var i, len, c, rc; var bbox = a.bbox; var tmx = tm.x; var tmy = tm.y; tm.getCollisionRectCandidates(bbox, collrect_candidates); var collrects = collrect_candidates; var haspolya = (a.collision_poly && !a.collision_poly.is_empty()); for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; rc = c.rc; if (bbox.intersects_rect_off(rc, tmx, tmy)) { tmpQuad.set_from_rect(rc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_quad(a.bquad)) { if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); if (c.poly) { if (c.poly.intersects_poly(a.collision_poly, a.x - (tmx + rc.left), a.y - (tmy + rc.top))) { cr.clearArray(collrect_candidates); return true; } } else { this.temp_poly.set_from_quad(tmpQuad, 0, 0, rc.right - rc.left, rc.bottom - rc.top); if (this.temp_poly.intersects_poly(a.collision_poly, a.x, a.y)) { cr.clearArray(collrect_candidates); return true; } } } else { if (c.poly) { this.temp_poly.set_from_quad(a.bquad, 0, 0, a.width, a.height); if (c.poly.intersects_poly(this.temp_poly, -(tmx + rc.left), -(tmy + rc.top))) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } } } cr.clearArray(collrect_candidates); return false; }; Runtime.prototype.testRectOverlap = function (r, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; if (!b.bbox.intersects_rect(r)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(r, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (r.intersects_rect_off(tilerc, tmx, tmy)) { if (c.poly) { this.temp_poly.set_from_rect(r, 0, 0); if (c.poly.intersects_poly(this.temp_poly, -(tmx + tilerc.left), -(tmy + tilerc.top))) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } cr.clearArray(collrect_candidates); return false; } else { tmpQuad.set_from_rect(r); if (!b.bquad.intersects_quad(tmpQuad)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); tmpQuad.offset(-r.left, -r.top); this.temp_poly.set_from_quad(tmpQuad, 0, 0, 1, 1); return b.collision_poly.intersects_poly(this.temp_poly, r.left - b.x, r.top - b.y); } }; Runtime.prototype.testSegmentOverlap = function (x1, y1, x2, y2, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; tmpRect.set(cr.min(x1, x2), cr.min(y1, y2), cr.max(x1, x2), cr.max(y1, y2)); if (!b.bbox.intersects_rect(tmpRect)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(tmpRect, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (tmpRect.intersects_rect_off(tilerc, tmx, tmy)) { tmpQuad.set_from_rect(tilerc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_segment(x1, y1, x2, y2)) { if (c.poly) { if (c.poly.intersects_segment(tmx + tilerc.left, tmy + tilerc.top, x1, y1, x2, y2)) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } } cr.clearArray(collrect_candidates); return false; } else { if (!b.bquad.intersects_segment(x1, y1, x2, y2)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); return b.collision_poly.intersects_segment(b.x, b.y, x1, y1, x2, y2); } }; Runtime.prototype.typeHasBehavior = function (t, b) { if (!b) return false; var i, len, j, lenj, f; for (i = 0, len = t.behaviors.length; i < len; i++) { if (t.behaviors[i].behavior instanceof b) return true; } if (!t.is_family) { for (i = 0, len = t.families.length; i < len; i++) { f = t.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (f.behaviors[j].behavior instanceof b) return true; } } } return false; }; Runtime.prototype.typeHasNoSaveBehavior = function (t) { return this.typeHasBehavior(t, cr.behaviors.NoSave); }; Runtime.prototype.typeHasPersistBehavior = function (t) { return this.typeHasBehavior(t, cr.behaviors.Persist); }; Runtime.prototype.getSolidBehavior = function () { return this.solidBehavior; }; Runtime.prototype.getJumpthruBehavior = function () { return this.jumpthruBehavior; }; var candidates = []; Runtime.prototype.testOverlapSolid = function (inst) { var i, len, s; inst.update_bbox(); this.getSolidCollisionCandidates(inst.layer, inst.bbox, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra["solidEnabled"]) continue; if (this.testOverlap(inst, s)) { cr.clearArray(candidates); return s; } } cr.clearArray(candidates); return null; }; Runtime.prototype.testRectOverlapSolid = function (r) { var i, len, s; this.getSolidCollisionCandidates(null, r, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra["solidEnabled"]) continue; if (this.testRectOverlap(r, s)) { cr.clearArray(candidates); return s; } } cr.clearArray(candidates); return null; }; var jumpthru_array_ret = []; Runtime.prototype.testOverlapJumpThru = function (inst, all) { var ret = null; if (all) { ret = jumpthru_array_ret; cr.clearArray(ret); } inst.update_bbox(); this.getJumpthruCollisionCandidates(inst.layer, inst.bbox, candidates); var i, len, j; for (i = 0, len = candidates.length; i < len; ++i) { j = candidates[i]; if (!j.extra["jumpthruEnabled"]) continue; if (this.testOverlap(inst, j)) { if (all) ret.push(j); else { cr.clearArray(candidates); return j; } } } cr.clearArray(candidates); return ret; }; Runtime.prototype.pushOutSolid = function (inst, xdir, ydir, dist, include_jumpthrus, specific_jumpthru) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; var last_overlapped = null, secondlast_overlapped = null; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; if (!last_overlapped) { if (include_jumpthrus) { if (specific_jumpthru) last_overlapped = (this.testOverlap(inst, specific_jumpthru) ? specific_jumpthru : null); else last_overlapped = this.testOverlapJumpThru(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; } if (!last_overlapped) { if (secondlast_overlapped) this.pushInFractional(inst, xdir, ydir, secondlast_overlapped, 16); return true; } } } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushOut = function (inst, xdir, ydir, dist, otherinst) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, otherinst)) return true; } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushInFractional = function (inst, xdir, ydir, obj, limit) { var divisor = 2; var frac; var forward = false; var overlapping = false; var bestx = inst.x; var besty = inst.y; while (divisor <= limit) { frac = 1 / divisor; divisor *= 2; inst.x += xdir * frac * (forward ? 1 : -1); inst.y += ydir * frac * (forward ? 1 : -1); inst.set_bbox_changed(); if (this.testOverlap(inst, obj)) { forward = true; overlapping = true; } else { forward = false; overlapping = false; bestx = inst.x; besty = inst.y; } } if (overlapping) { inst.x = bestx; inst.y = besty; inst.set_bbox_changed(); } }; Runtime.prototype.pushOutSolidNearest = function (inst, max_dist_) { var max_dist = (cr.is_undefined(max_dist_) ? 100 : max_dist_); var dist = 0; var oldx = inst.x var oldy = inst.y; var dir = 0; var dx = 0, dy = 0; var last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; // already clear of solids while (dist <= max_dist) { switch (dir) { case 0: dx = 0; dy = -1; dist++; break; case 1: dx = 1; dy = -1; break; case 2: dx = 1; dy = 0; break; case 3: dx = 1; dy = 1; break; case 4: dx = 0; dy = 1; break; case 5: dx = -1; dy = 1; break; case 6: dx = -1; dy = 0; break; case 7: dx = -1; dy = -1; break; } dir = (dir + 1) % 8; inst.x = cr.floor(oldx + (dx * dist)); inst.y = cr.floor(oldy + (dy * dist)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.registerCollision = function (a, b) { if (!a.collisionsEnabled || !b.collisionsEnabled) return; this.registered_collisions.push([a, b]); }; Runtime.prototype.checkRegisteredCollision = function (a, b) { var i, len, x; for (i = 0, len = this.registered_collisions.length; i < len; i++) { x = this.registered_collisions[i]; if ((x[0] == a && x[1] == b) || (x[0] == b && x[1] == a)) return true; } return false; }; Runtime.prototype.calculateSolidBounceAngle = function(inst, startx, starty, obj) { var objx = inst.x; var objy = inst.y; var radius = cr.max(10, cr.distanceTo(startx, starty, objx, objy)); var startangle = cr.angleTo(startx, starty, objx, objy); var firstsolid = obj || this.testOverlapSolid(inst); if (!firstsolid) return cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; var i, curangle, anticlockwise_free_angle, clockwise_free_angle; var increment = cr.to_radians(5); // 5 degree increments for (i = 1; i < 36; i++) { curangle = startangle - i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { anticlockwise_free_angle = curangle; break; } } } if (i === 36) anticlockwise_free_angle = cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; for (i = 1; i < 36; i++) { curangle = startangle + i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { clockwise_free_angle = curangle; break; } } } if (i === 36) clockwise_free_angle = cr.clamp_angle(startangle + cr.PI); inst.x = objx; inst.y = objy; inst.set_bbox_changed(); if (clockwise_free_angle === anticlockwise_free_angle) return clockwise_free_angle; var half_diff = cr.angleDiff(clockwise_free_angle, anticlockwise_free_angle) / 2; var normal; if (cr.angleClockwise(clockwise_free_angle, anticlockwise_free_angle)) { normal = cr.clamp_angle(anticlockwise_free_angle + half_diff + cr.PI); } else { normal = cr.clamp_angle(clockwise_free_angle + half_diff); } ; var vx = Math.cos(startangle); var vy = Math.sin(startangle); var nx = Math.cos(normal); var ny = Math.sin(normal); var v_dot_n = vx * nx + vy * ny; var rx = vx - 2 * v_dot_n * nx; var ry = vy - 2 * v_dot_n * ny; return cr.angleTo(0, 0, rx, ry); }; var triggerSheetIndex = -1; Runtime.prototype.trigger = function (method, inst, value /* for fast triggers */) { ; if (!this.running_layout) return false; var sheet = this.running_layout.event_sheet; if (!sheet) return false; // no event sheet active; nothing to trigger var ret = false; var r, i, len; triggerSheetIndex++; var deep_includes = sheet.deep_includes; for (i = 0, len = deep_includes.length; i < len; ++i) { r = this.triggerOnSheet(method, inst, deep_includes[i], value); ret = ret || r; } r = this.triggerOnSheet(method, inst, sheet, value); ret = ret || r; triggerSheetIndex--; return ret; }; Runtime.prototype.triggerOnSheet = function (method, inst, sheet, value) { var ret = false; var i, leni, r, families; if (!inst) { r = this.triggerOnSheetForTypeName(method, inst, "system", sheet, value); ret = ret || r; } else { r = this.triggerOnSheetForTypeName(method, inst, inst.type.name, sheet, value); ret = ret || r; families = inst.type.families; for (i = 0, leni = families.length; i < leni; ++i) { r = this.triggerOnSheetForTypeName(method, inst, families[i].name, sheet, value); ret = ret || r; } } return ret; // true if anything got triggered }; Runtime.prototype.triggerOnSheetForTypeName = function (method, inst, type_name, sheet, value) { var i, leni; var ret = false, ret2 = false; var trig, index; var fasttrigger = (typeof value !== "undefined"); var triggers = (fasttrigger ? sheet.fasttriggers : sheet.triggers); var obj_entry = triggers[type_name]; if (!obj_entry) return ret; var triggers_list = null; for (i = 0, leni = obj_entry.length; i < leni; ++i) { if (obj_entry[i].method == method) { triggers_list = obj_entry[i].evs; break; } } if (!triggers_list) return ret; var triggers_to_fire; if (fasttrigger) { triggers_to_fire = triggers_list[value]; } else { triggers_to_fire = triggers_list; } if (!triggers_to_fire) return null; for (i = 0, leni = triggers_to_fire.length; i < leni; i++) { trig = triggers_to_fire[i][0]; index = triggers_to_fire[i][1]; ret2 = this.executeSingleTrigger(inst, type_name, trig, index); ret = ret || ret2; } return ret; }; Runtime.prototype.executeSingleTrigger = function (inst, type_name, trig, index) { var i, leni; var ret = false; this.trigger_depth++; var current_event = this.getCurrentEventStack().current_event; if (current_event) this.pushCleanSol(current_event.solModifiersIncludingParents); var isrecursive = (this.trigger_depth > 1); // calling trigger from inside another trigger this.pushCleanSol(trig.solModifiersIncludingParents); if (isrecursive) this.pushLocalVarStack(); var event_stack = this.pushEventStack(trig); event_stack.current_event = trig; if (inst) { var sol = this.types[type_name].getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; this.types[type_name].applySolToContainer(); } var ok_to_run = true; if (trig.parent) { var temp_parents_arr = event_stack.temp_parents_arr; var cur_parent = trig.parent; while (cur_parent) { temp_parents_arr.push(cur_parent); cur_parent = cur_parent.parent; } temp_parents_arr.reverse(); for (i = 0, leni = temp_parents_arr.length; i < leni; i++) { if (!temp_parents_arr[i].run_pretrigger()) // parent event failed { ok_to_run = false; break; } } } if (ok_to_run) { this.execcount++; if (trig.orblock) trig.run_orblocktrigger(index); else trig.run(); ret = ret || event_stack.last_event_true; } this.popEventStack(); if (isrecursive) this.popLocalVarStack(); this.popSol(trig.solModifiersIncludingParents); if (current_event) this.popSol(current_event.solModifiersIncludingParents); if (this.hasPendingInstances && this.isInOnDestroy === 0 && triggerSheetIndex === 0 && !this.isRunningEvents) { this.ClearDeathRow(); } this.trigger_depth--; return ret; }; Runtime.prototype.getCurrentCondition = function () { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.conditions[evinfo.cndindex]; }; Runtime.prototype.getCurrentAction = function () { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.actions[evinfo.actindex]; }; Runtime.prototype.pushLocalVarStack = function () { this.localvar_stack_index++; if (this.localvar_stack_index >= this.localvar_stack.length) this.localvar_stack.push([]); }; Runtime.prototype.popLocalVarStack = function () { ; this.localvar_stack_index--; }; Runtime.prototype.getCurrentLocalVarStack = function () { return this.localvar_stack[this.localvar_stack_index]; }; Runtime.prototype.pushEventStack = function (cur_event) { this.event_stack_index++; if (this.event_stack_index >= this.event_stack.length) this.event_stack.push(new cr.eventStackFrame()); var ret = this.getCurrentEventStack(); ret.reset(cur_event); return ret; }; Runtime.prototype.popEventStack = function () { ; this.event_stack_index--; }; Runtime.prototype.getCurrentEventStack = function () { return this.event_stack[this.event_stack_index]; }; Runtime.prototype.pushLoopStack = function (name_) { this.loop_stack_index++; if (this.loop_stack_index >= this.loop_stack.length) { this.loop_stack.push(cr.seal({ name: name_, index: 0, stopped: false })); } var ret = this.getCurrentLoop(); ret.name = name_; ret.index = 0; ret.stopped = false; return ret; }; Runtime.prototype.popLoopStack = function () { ; this.loop_stack_index--; }; Runtime.prototype.getCurrentLoop = function () { return this.loop_stack[this.loop_stack_index]; }; Runtime.prototype.getEventVariableByName = function (name, scope) { var i, leni, j, lenj, sheet, e; while (scope) { for (i = 0, leni = scope.subevents.length; i < leni; i++) { e = scope.subevents[i]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } scope = scope.parent; } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) { sheet = this.eventsheets_by_index[i]; for (j = 0, lenj = sheet.events.length; j < lenj; j++) { e = sheet.events[j]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } } return null; }; Runtime.prototype.getLayoutBySid = function (sid_) { var i, len; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { if (this.layouts_by_index[i].sid === sid_) return this.layouts_by_index[i]; } return null; }; Runtime.prototype.getObjectTypeBySid = function (sid_) { var i, len; for (i = 0, len = this.types_by_index.length; i < len; i++) { if (this.types_by_index[i].sid === sid_) return this.types_by_index[i]; } return null; }; Runtime.prototype.getGroupBySid = function (sid_) { var i, len; for (i = 0, len = this.allGroups.length; i < len; i++) { if (this.allGroups[i].sid === sid_) return this.allGroups[i]; } return null; }; Runtime.prototype.doCanvasSnapshot = function (format_, quality_) { this.snapshotCanvas = [format_, quality_]; this.redraw = true; // force redraw so snapshot is always taken }; function makeSaveDb(e) { var db = e.target.result; db.createObjectStore("saves", { keyPath: "slot" }); }; function IndexedDB_WriteSlot(slot_, data_, oncomplete_, onerror_) { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function (e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"], "readwrite"); var objectStore = transaction.objectStore("saves"); var putReq = objectStore.put({"slot": slot_, "data": data_ }); putReq.onsuccess = oncomplete_; }; }; function IndexedDB_ReadSlot(slot_, oncomplete_, onerror_) { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function (e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"]); var objectStore = transaction.objectStore("saves"); var readReq = objectStore.get(slot_); readReq.onsuccess = function (e) { if (readReq.result) oncomplete_(readReq.result["data"]); else oncomplete_(null); }; }; }; Runtime.prototype.signalContinuousPreview = function () { this.signalledContinuousPreview = true; }; function doContinuousPreviewReload() { cr.logexport("Reloading for continuous preview"); if (!!window["c2cocoonjs"]) { CocoonJS["App"]["reload"](); } else { if (window.location.search.indexOf("continuous") > -1) window.location.reload(true); else window.location = window.location + "?continuous"; } }; Runtime.prototype.handleSaveLoad = function () { var self = this; var savingToSlot = this.saveToSlot; var savingJson = this.lastSaveJson; var loadingFromSlot = this.loadFromSlot; var continuous = false; if (this.signalledContinuousPreview) { continuous = true; savingToSlot = "__c2_continuouspreview"; this.signalledContinuousPreview = false; } if (savingToSlot.length) { this.ClearDeathRow(); savingJson = this.saveToJSONString(); if (window.indexedDB && !this.isCocoonJs) { IndexedDB_WriteSlot(savingToSlot, savingJson, function () { cr.logexport("Saved state to IndexedDB storage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); }, function (e) { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); } catch (f) { cr.logexport("Failed to save game state: " + e + "; " + f); } }); } else { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; this.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); } catch (e) { cr.logexport("Error saving to WebStorage: " + e); } } this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = ""; } if (loadingFromSlot.length) { if (window.indexedDB && !this.isCocoonJs) { IndexedDB_ReadSlot(loadingFromSlot, function (result_) { if (result_) { self.loadFromJson = result_; cr.logexport("Loaded state from IndexedDB storage (" + self.loadFromJson.length + " bytes)"); } else { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); } self.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); }, function (e) { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); self.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); }); } else { try { this.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + this.loadFromJson.length + " bytes)"); } catch (e) { this.loadFromJson = ""; } this.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } this.loadFromSlot = ""; this.saveToSlot = ""; } if (this.loadFromJson.length) { this.ClearDeathRow(); this.loadFromJSONString(this.loadFromJson); this.lastSaveJson = this.loadFromJson; this.trigger(cr.system_object.prototype.cnds.OnLoadComplete, null); this.lastSaveJson = ""; this.loadFromJson = ""; } }; function CopyExtraObject(extra) { var p, ret = {}; for (p in extra) { if (extra.hasOwnProperty(p)) { if (extra[p] instanceof cr.ObjectSet) continue; if (extra[p] && typeof extra[p].c2userdata !== "undefined") continue; if (p === "spriteCreatedDestroyCallback") continue; ret[p] = extra[p]; } } return ret; }; Runtime.prototype.saveToJSONString = function() { var i, len, j, lenj, type, layout, typeobj, g, c, a, v, p; var o = { "c2save": true, "version": 1, "rt": { "time": this.kahanTime.sum, "walltime": this.wallTime.sum, "timescale": this.timescale, "tickcount": this.tickcount, "execcount": this.execcount, "next_uid": this.next_uid, "running_layout": this.running_layout.sid, "start_time_offset": (Date.now() - this.start_time) }, "types": {}, "layouts": {}, "events": { "groups": {}, "cnds": {}, "acts": {}, "vars": {} } }; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; typeobj = { "instances": [] }; if (cr.hasAnyOwnProperty(type.extra)) typeobj["ex"] = CopyExtraObject(type.extra); for (j = 0, lenj = type.instances.length; j < lenj; j++) { typeobj["instances"].push(this.saveInstanceToJSON(type.instances[j])); } o["types"][type.sid.toString()] = typeobj; } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { layout = this.layouts_by_index[i]; o["layouts"][layout.sid.toString()] = layout.saveToJSON(); } var ogroups = o["events"]["groups"]; for (i = 0, len = this.allGroups.length; i < len; i++) { g = this.allGroups[i]; ogroups[g.sid.toString()] = this.groups_by_name[g.group_name].group_active; } var ocnds = o["events"]["cnds"]; for (p in this.cndsBySid) { if (this.cndsBySid.hasOwnProperty(p)) { c = this.cndsBySid[p]; if (cr.hasAnyOwnProperty(c.extra)) ocnds[p] = { "ex": CopyExtraObject(c.extra) }; } } var oacts = o["events"]["acts"]; for (p in this.actsBySid) { if (this.actsBySid.hasOwnProperty(p)) { a = this.actsBySid[p]; if (cr.hasAnyOwnProperty(a.extra)) oacts[p] = { "ex": a.extra }; } } var ovars = o["events"]["vars"]; for (p in this.varsBySid) { if (this.varsBySid.hasOwnProperty(p)) { v = this.varsBySid[p]; if (!v.is_constant && (!v.parent || v.is_static)) ovars[p] = v.data; } } o["system"] = this.system.saveToJSON(); return JSON.stringify(o); }; Runtime.prototype.refreshUidMap = function () { var i, len, type, j, lenj, inst; this.objectsByUid = {}; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; this.objectsByUid[inst.uid.toString()] = inst; } } }; Runtime.prototype.loadFromJSONString = function (str) { var o = JSON.parse(str); if (!o["c2save"]) return; // probably not a c2 save state if (o["version"] > 1) return; // from future version of c2; assume not compatible this.isLoadingState = true; var rt = o["rt"]; this.kahanTime.reset(); this.kahanTime.sum = rt["time"]; this.wallTime.reset(); this.wallTime.sum = rt["walltime"] || 0; this.timescale = rt["timescale"]; this.tickcount = rt["tickcount"]; this.execcount = rt["execcount"]; this.start_time = Date.now() - rt["start_time_offset"]; var layout_sid = rt["running_layout"]; if (layout_sid !== this.running_layout.sid) { var changeToLayout = this.getLayoutBySid(layout_sid); if (changeToLayout) this.doChangeLayout(changeToLayout); else return; // layout that was saved on has gone missing (deleted?) } var i, len, j, lenj, k, lenk, p, type, existing_insts, load_insts, inst, binst, layout, layer, g, iid, t; var otypes = o["types"]; for (p in otypes) { if (otypes.hasOwnProperty(p)) { type = this.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || this.typeHasNoSaveBehavior(type)) continue; if (otypes[p]["ex"]) type.extra = otypes[p]["ex"]; else cr.wipe(type.extra); existing_insts = type.instances; load_insts = otypes[p]["instances"]; for (i = 0, len = cr.min(existing_insts.length, load_insts.length); i < len; i++) { this.loadInstanceFromJSON(existing_insts[i], load_insts[i]); } for (i = load_insts.length, len = existing_insts.length; i < len; i++) this.DestroyInstance(existing_insts[i]); for (i = existing_insts.length, len = load_insts.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.running_layout.getLayerBySid(load_insts[i]["w"]["l"]); if (!layer) continue; } inst = this.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.loadInstanceFromJSON(inst, load_insts[i]); } type.stale_iids = true; } } this.ClearDeathRow(); this.refreshUidMap(); var olayouts = o["layouts"]; for (p in olayouts) { if (olayouts.hasOwnProperty(p)) { layout = this.getLayoutBySid(parseInt(p, 10)); if (!layout) continue; // must've gone missing layout.loadFromJSON(olayouts[p]); } } var ogroups = o["events"]["groups"]; for (p in ogroups) { if (ogroups.hasOwnProperty(p)) { g = this.getGroupBySid(parseInt(p, 10)); if (g && this.groups_by_name[g.group_name]) this.groups_by_name[g.group_name].setGroupActive(ogroups[p]); } } var ocnds = o["events"]["cnds"]; for (p in ocnds) { if (ocnds.hasOwnProperty(p) && this.cndsBySid.hasOwnProperty(p)) { this.cndsBySid[p].extra = ocnds[p]["ex"]; } } var oacts = o["events"]["acts"]; for (p in oacts) { if (oacts.hasOwnProperty(p) && this.actsBySid.hasOwnProperty(p)) { this.actsBySid[p].extra = oacts[p]["ex"]; } } var ovars = o["events"]["vars"]; for (p in ovars) { if (ovars.hasOwnProperty(p) && this.varsBySid.hasOwnProperty(p)) { this.varsBySid[p].data = ovars[p]; } } this.next_uid = rt["next_uid"]; this.isLoadingState = false; this.system.loadFromJSON(o["system"]); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (type.is_contained) { iid = inst.get_iid(); cr.clearArray(inst.siblings); for (k = 0, lenk = type.container.length; k < lenk; k++) { t = type.container[k]; if (type === t) continue; ; inst.siblings.push(t.instances[iid]); } } if (inst.afterLoad) inst.afterLoad(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.afterLoad) binst.afterLoad(); } } } } this.redraw = true; }; Runtime.prototype.saveInstanceToJSON = function(inst, state_only) { var i, len, world, behinst, et; var type = inst.type; var plugin = type.plugin; var o = {}; if (state_only) o["c2"] = true; // mark as known json data from Construct 2 else o["uid"] = inst.uid; if (cr.hasAnyOwnProperty(inst.extra)) o["ex"] = CopyExtraObject(inst.extra); if (inst.instance_vars && inst.instance_vars.length) { o["ivs"] = {}; for (i = 0, len = inst.instance_vars.length; i < len; i++) { o["ivs"][inst.type.instvar_sids[i].toString()] = inst.instance_vars[i]; } } if (plugin.is_world) { world = { "x": inst.x, "y": inst.y, "w": inst.width, "h": inst.height, "l": inst.layer.sid, "zi": inst.get_zindex() }; if (inst.angle !== 0) world["a"] = inst.angle; if (inst.opacity !== 1) world["o"] = inst.opacity; if (inst.hotspotX !== 0.5) world["hX"] = inst.hotspotX; if (inst.hotspotY !== 0.5) world["hY"] = inst.hotspotY; if (inst.blend_mode !== 0) world["bm"] = inst.blend_mode; if (!inst.visible) world["v"] = inst.visible; if (!inst.collisionsEnabled) world["ce"] = inst.collisionsEnabled; if (inst.my_timescale !== -1) world["mts"] = inst.my_timescale; if (type.effect_types.length) { world["fx"] = []; for (i = 0, len = type.effect_types.length; i < len; i++) { et = type.effect_types[i]; world["fx"].push({"name": et.name, "active": inst.active_effect_flags[et.index], "params": inst.effect_params[et.index] }); } } o["w"] = world; } if (inst.behavior_insts && inst.behavior_insts.length) { o["behs"] = {}; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { behinst = inst.behavior_insts[i]; if (behinst.saveToJSON) o["behs"][behinst.type.sid.toString()] = behinst.saveToJSON(); } } if (inst.saveToJSON) o["data"] = inst.saveToJSON(); return o; }; Runtime.prototype.getInstanceVarIndexBySid = function (type, sid_) { var i, len; for (i = 0, len = type.instvar_sids.length; i < len; i++) { if (type.instvar_sids[i] === sid_) return i; } return -1; }; Runtime.prototype.getBehaviorIndexBySid = function (inst, sid_) { var i, len; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].type.sid === sid_) return i; } return -1; }; Runtime.prototype.loadInstanceFromJSON = function(inst, o, state_only) { var p, i, len, iv, oivs, world, fxindex, obehs, behindex; var oldlayer; var type = inst.type; var plugin = type.plugin; if (state_only) { if (!o["c2"]) return; } else inst.uid = o["uid"]; if (o["ex"]) inst.extra = o["ex"]; else cr.wipe(inst.extra); oivs = o["ivs"]; if (oivs) { for (p in oivs) { if (oivs.hasOwnProperty(p)) { iv = this.getInstanceVarIndexBySid(type, parseInt(p, 10)); if (iv < 0 || iv >= inst.instance_vars.length) continue; // must've gone missing inst.instance_vars[iv] = oivs[p]; } } } if (plugin.is_world) { world = o["w"]; if (inst.layer.sid !== world["l"]) { oldlayer = inst.layer; inst.layer = this.running_layout.getLayerBySid(world["l"]); if (inst.layer) { oldlayer.removeFromInstanceList(inst, true); inst.layer.appendToInstanceList(inst, true); inst.set_bbox_changed(); inst.layer.setZIndicesStaleFrom(0); } else { inst.layer = oldlayer; if (!state_only) this.DestroyInstance(inst); } } inst.x = world["x"]; inst.y = world["y"]; inst.width = world["w"]; inst.height = world["h"]; inst.zindex = world["zi"]; inst.angle = world.hasOwnProperty("a") ? world["a"] : 0; inst.opacity = world.hasOwnProperty("o") ? world["o"] : 1; inst.hotspotX = world.hasOwnProperty("hX") ? world["hX"] : 0.5; inst.hotspotY = world.hasOwnProperty("hY") ? world["hY"] : 0.5; inst.visible = world.hasOwnProperty("v") ? world["v"] : true; inst.collisionsEnabled = world.hasOwnProperty("ce") ? world["ce"] : true; inst.my_timescale = world.hasOwnProperty("mts") ? world["mts"] : -1; inst.blend_mode = world.hasOwnProperty("bm") ? world["bm"] : 0;; inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); inst.set_bbox_changed(); if (world.hasOwnProperty("fx")) { for (i = 0, len = world["fx"].length; i < len; i++) { fxindex = type.getEffectIndexByName(world["fx"][i]["name"]); if (fxindex < 0) continue; // must've gone missing inst.active_effect_flags[fxindex] = world["fx"][i]["active"]; inst.effect_params[fxindex] = world["fx"][i]["params"]; } } inst.updateActiveEffects(); } obehs = o["behs"]; if (obehs) { for (p in obehs) { if (obehs.hasOwnProperty(p)) { behindex = this.getBehaviorIndexBySid(inst, parseInt(p, 10)); if (behindex < 0) continue; // must've gone missing inst.behavior_insts[behindex].loadFromJSON(obehs[p]); } } } if (o["data"]) inst.loadFromJSON(o["data"]); }; cr.runtime = Runtime; cr.createRuntime = function (canvasid) { return new Runtime(document.getElementById(canvasid)); }; cr.createDCRuntime = function (w, h) { return new Runtime({ "dc": true, "width": w, "height": h }); }; window["cr_createRuntime"] = cr.createRuntime; window["cr_createDCRuntime"] = cr.createDCRuntime; window["createCocoonJSRuntime"] = function () { window["c2cocoonjs"] = true; var canvas = document.createElement("screencanvas") || document.createElement("canvas"); canvas.screencanvas = true; document.body.appendChild(canvas); var rt = new Runtime(canvas); window["c2runtime"] = rt; window.addEventListener("orientationchange", function () { window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); }); window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; window["createEjectaRuntime"] = function () { var canvas = document.getElementById("canvas"); var rt = new Runtime(canvas); window["c2runtime"] = rt; window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; }()); window["cr_getC2Runtime"] = function() { var canvas = document.getElementById("c2canvas"); if (canvas) return canvas["c2runtime"]; else if (window["c2runtime"]) return window["c2runtime"]; else return null; } window["cr_getSnapshot"] = function (format_, quality_) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime.doCanvasSnapshot(format_, quality_); } window["cr_sizeCanvas"] = function(w, h) { if (w === 0 || h === 0) return; var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSize"](w, h); } window["cr_setSuspended"] = function(s) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSuspended"](s); } ; (function() { function Layout(runtime, m) { this.runtime = runtime; this.event_sheet = null; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); this.scale = 1.0; this.angle = 0; this.first_visit = true; this.name = m[0]; this.width = m[1]; this.height = m[2]; this.unbounded_scrolling = m[3]; this.sheetname = m[4]; this.sid = m[5]; var lm = m[6]; var i, len; this.layers = []; this.initial_types = []; for (i = 0, len = lm.length; i < len; i++) { var layer = new cr.layer(this, lm[i]); layer.number = i; cr.seal(layer); this.layers.push(layer); } var im = m[7]; this.initial_nonworld = []; for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]]; ; if (!type.default_instance) type.default_instance = inst; this.initial_nonworld.push(inst); if (this.initial_types.indexOf(type) === -1) this.initial_types.push(type); } this.effect_types = []; this.active_effect_types = []; this.shaders_preserve_opaqueness = true; this.effect_params = []; for (i = 0, len = m[8].length; i < len; i++) { this.effect_types.push({ id: m[8][i][0], name: m[8][i][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: i }); this.effect_params.push(m[8][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); this.persist_data = {}; }; Layout.prototype.saveObjectToPersist = function (inst) { var sidStr = inst.type.sid.toString(); if (!this.persist_data.hasOwnProperty(sidStr)) this.persist_data[sidStr] = []; var type_persist = this.persist_data[sidStr]; type_persist.push(this.runtime.saveInstanceToJSON(inst)); }; Layout.prototype.hasOpaqueBottomLayer = function () { var layer = this.layers[0]; return !layer.transparent && layer.opacity === 1.0 && !layer.forceOwnTexture && layer.visible; }; Layout.prototype.updateActiveEffects = function () { cr.clearArray(this.active_effect_types); this.shaders_preserve_opaqueness = true; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) { this.active_effect_types.push(et); if (!et.preservesOpaqueness) this.shaders_preserve_opaqueness = false; } } }; Layout.prototype.getEffectByName = function (name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; var created_instances = []; function sort_by_zindex(a, b) { return a.zindex - b.zindex; }; var first_layout = true; Layout.prototype.startRunning = function () { if (this.sheetname) { this.event_sheet = this.runtime.eventsheets[this.sheetname]; ; this.event_sheet.updateDeepIncludes(); } this.runtime.running_layout = this; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); var i, k, len, lenk, type, type_instances, inst, iid, t, s, p, q, type_data, layer; for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { type = this.runtime.types_by_index[i]; if (type.is_family) continue; // instances are only transferred for their real type type_instances = type.instances; for (k = 0, lenk = type_instances.length; k < lenk; k++) { inst = type_instances[k]; if (inst.layer) { var num = inst.layer.number; if (num >= this.layers.length) num = this.layers.length - 1; inst.layer = this.layers[num]; if (inst.layer.instances.indexOf(inst) === -1) inst.layer.instances.push(inst); inst.layer.zindices_stale = true; } } } if (!first_layout) { for (i = 0, len = this.layers.length; i < len; ++i) { this.layers[i].instances.sort(sort_by_zindex); } } var layer; cr.clearArray(created_instances); this.boundScrolling(); for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; layer.createInitialInstances(); // fills created_instances layer.updateViewport(null); } var uids_changed = false; if (!this.first_visit) { for (p in this.persist_data) { if (this.persist_data.hasOwnProperty(p)) { type = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || !this.runtime.typeHasPersistBehavior(type)) continue; type_data = this.persist_data[p]; for (i = 0, len = type_data.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.getLayerBySid(type_data[i]["w"]["l"]); if (!layer) continue; } inst = this.runtime.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.runtime.loadInstanceFromJSON(inst, type_data[i]); uids_changed = true; created_instances.push(inst); } cr.clearArray(type_data); } } for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].instances.sort(sort_by_zindex); this.layers[i].zindices_stale = true; // in case of duplicates/holes } } if (uids_changed) { this.runtime.ClearDeathRow(); this.runtime.refreshUidMap(); } for (i = 0; i < created_instances.length; i++) { inst = created_instances[i]; if (!inst.type.is_contained) continue; iid = inst.get_iid(); for (k = 0, lenk = inst.type.container.length; k < lenk; k++) { t = inst.type.container[k]; if (inst.type === t) continue; if (t.instances.length > iid) inst.siblings.push(t.instances[iid]); else { if (!t.default_instance) { } else { s = this.runtime.createInstanceFromInit(t.default_instance, inst.layer, true, inst.x, inst.y, true); this.runtime.ClearDeathRow(); t.updateIIDs(); inst.siblings.push(s); created_instances.push(s); // come back around and link up its own instances too } } } } for (i = 0, len = this.initial_nonworld.length; i < len; i++) { inst = this.runtime.createInstanceFromInit(this.initial_nonworld[i], null, true); ; } this.runtime.changelayout = null; this.runtime.ClearDeathRow(); if (this.runtime.ctx && !this.runtime.isDomFree) { for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; if (t.is_family || !t.instances.length || !t.preloadCanvas2D) continue; t.preloadCanvas2D(this.runtime.ctx); } } /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout start: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ for (i = 0, len = created_instances.length; i < len; i++) { inst = created_instances[i]; this.runtime.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnCreated, inst); } cr.clearArray(created_instances); if (!this.runtime.isLoadingState) { this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutStart, null); } this.first_visit = false; }; Layout.prototype.createGlobalNonWorlds = function () { var i, k, len, initial_inst, inst, type; for (i = 0, k = 0, len = this.initial_nonworld.length; i < len; i++) { initial_inst = this.initial_nonworld[i]; type = this.runtime.types_by_index[initial_inst[1]]; if (type.global) { if (!type.is_contained) { inst = this.runtime.createInstanceFromInit(initial_inst, null, true); } } else { this.initial_nonworld[k] = initial_inst; k++; } } cr.truncateArray(this.initial_nonworld, k); }; Layout.prototype.stopRunning = function () { ; /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout end: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ if (!this.runtime.isLoadingState) { this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutEnd, null); } this.runtime.isEndingLayout = true; cr.clearArray(this.runtime.system.waits); var i, leni, j, lenj; var layer_instances, inst, type; if (!this.first_visit) { for (i = 0, leni = this.layers.length; i < leni; i++) { this.layers[i].updateZIndices(); layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { if (this.runtime.typeHasPersistBehavior(inst.type)) this.saveObjectToPersist(inst); } } } } for (i = 0, leni = this.layers.length; i < leni; i++) { layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { this.runtime.DestroyInstance(inst); } } this.runtime.ClearDeathRow(); cr.clearArray(layer_instances); this.layers[i].zindices_stale = true; } for (i = 0, leni = this.runtime.types_by_index.length; i < leni; i++) { type = this.runtime.types_by_index[i]; if (type.global || type.plugin.is_world || type.plugin.singleglobal || type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) this.runtime.DestroyInstance(type.instances[j]); this.runtime.ClearDeathRow(); } first_layout = false; this.runtime.isEndingLayout = false; }; var temp_rect = new cr.rect(0, 0, 0, 0); Layout.prototype.recreateInitialObjects = function (type, x1, y1, x2, y2) { temp_rect.set(x1, y1, x2, y2); var i, len; for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].recreateInitialObjects(type, temp_rect); } }; Layout.prototype.draw = function (ctx) { var layout_canvas; var layout_ctx = ctx; var ctx_changed = false; var render_offscreen = !this.runtime.fullscreenScalingQuality; if (render_offscreen) { if (!this.runtime.layout_canvas) { this.runtime.layout_canvas = document.createElement("canvas"); layout_canvas = this.runtime.layout_canvas; layout_canvas.width = this.runtime.draw_width; layout_canvas.height = this.runtime.draw_height; this.runtime.layout_ctx = layout_canvas.getContext("2d"); ctx_changed = true; } layout_canvas = this.runtime.layout_canvas; layout_ctx = this.runtime.layout_ctx; if (layout_canvas.width !== this.runtime.draw_width) { layout_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layout_canvas.height !== this.runtime.draw_height) { layout_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { layout_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling; } } layout_ctx.globalAlpha = 1; layout_ctx.globalCompositeOperation = "source-over"; if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer()) layout_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && l.blend_mode !== 11 && (l.instances.length || !l.transparent)) l.draw(layout_ctx); else l.updateViewport(null); // even if not drawing, keep viewport up to date } if (render_offscreen) { ctx.drawImage(layout_canvas, 0, 0, this.runtime.width, this.runtime.height); } }; Layout.prototype.drawGL_earlyZPass = function (glw) { glw.setEarlyZPass(true); if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } var i, l; for (i = this.layers.length - 1; i >= 0; --i) { l = this.layers[i]; if (l.visible && l.opacity === 1 && l.shaders_preserve_opaqueness && l.blend_mode === 0 && (l.instances.length || !l.transparent)) { l.drawGL_earlyZPass(glw); } else { l.updateViewport(null); // even if not drawing, keep viewport up to date } } glw.setEarlyZPass(false); }; Layout.prototype.drawGL = function (glw) { var render_to_texture = (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality || this.runtime.enableFrontToBack); if (render_to_texture) { if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } } else { if (this.runtime.layout_tex) { glw.setRenderingToTexture(null); glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = null; } } if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer()) glw.clear(0, 0, 0, 0); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && (l.instances.length || !l.transparent)) l.drawGL(glw); else l.updateViewport(null); // even if not drawing, keep viewport up to date } if (render_to_texture) { if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && this.runtime.fullscreenScalingQuality)) { if (this.active_effect_types.length === 1) { var etindex = this.active_effect_types[0].index; glw.switchProgram(this.active_effect_types[0].shaderindex); glw.setProgramParameters(null, // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd this.scale, // layerScale this.angle, // layerAngle 0.0, 0.0, // viewOrigin this.runtime.draw_width / 2, this.runtime.draw_height / 2, // scrollPos this.runtime.kahanTime.sum, // seconds this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(this.active_effect_types[0].shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); } glw.setRenderingToTexture(null); // to backbuffer glw.setDepthTestEnabled(false); // ignore depth buffer, copy full texture glw.setOpacity(1); glw.setTexture(this.runtime.layout_tex); glw.setAlphaBlend(); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.width / 2; var halfh = this.runtime.height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); glw.setDepthTestEnabled(true); // turn depth test back on } else { this.renderEffectChain(glw, null, null, null); } } }; Layout.prototype.getRenderTarget = function() { if (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality || this.runtime.enableFrontToBack) { return this.runtime.layout_tex; } else { return null; } }; Layout.prototype.getMinLayerScale = function () { var m = this.layers[0].getScale(); var i, len, l; for (i = 1, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.parallaxX === 0 && l.parallaxY === 0) continue; if (l.getScale() < m) m = l.getScale(); } return m; }; Layout.prototype.scrollToX = function (x) { if (!this.unbounded_scrolling) { var widthBoundary = (this.runtime.draw_width * (1 / this.getMinLayerScale()) / 2); if (x > this.width - widthBoundary) x = this.width - widthBoundary; if (x < widthBoundary) x = widthBoundary; } if (this.scrollX !== x) { this.scrollX = x; this.runtime.redraw = true; } }; Layout.prototype.scrollToY = function (y) { if (!this.unbounded_scrolling) { var heightBoundary = (this.runtime.draw_height * (1 / this.getMinLayerScale()) / 2); if (y > this.height - heightBoundary) y = this.height - heightBoundary; if (y < heightBoundary) y = heightBoundary; } if (this.scrollY !== y) { this.scrollY = y; this.runtime.redraw = true; } }; Layout.prototype.boundScrolling = function () { this.scrollToX(this.scrollX); this.scrollToY(this.scrollY); }; Layout.prototype.renderEffectChain = function (glw, layer, inst, rendertarget) { var active_effect_types = inst ? inst.active_effect_types : layer ? layer.active_effect_types : this.active_effect_types; var layerScale = 1, layerAngle = 0, viewOriginLeft = 0, viewOriginTop = 0, viewOriginRight = this.runtime.draw_width, viewOriginBottom = this.runtime.draw_height; if (inst) { layerScale = inst.layer.getScale(); layerAngle = inst.layer.getAngle(); viewOriginLeft = inst.layer.viewLeft; viewOriginTop = inst.layer.viewTop; viewOriginRight = inst.layer.viewRight; viewOriginBottom = inst.layer.viewBottom; } else if (layer) { layerScale = layer.getScale(); layerAngle = layer.getAngle(); viewOriginLeft = layer.viewLeft; viewOriginTop = layer.viewTop; viewOriginRight = layer.viewRight; viewOriginBottom = layer.viewBottom; } var fx_tex = this.runtime.fx_tex; var i, len, last, temp, fx_index = 0, other_fx_index = 1; var y, h; var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var halfw = windowWidth / 2; var halfh = windowHeight / 2; var rcTex = layer ? layer.rcTex : this.rcTex; var rcTex2 = layer ? layer.rcTex2 : this.rcTex2; var screenleft = 0, clearleft = 0; var screentop = 0, cleartop = 0; var screenright = windowWidth, clearright = windowWidth; var screenbottom = windowHeight, clearbottom = windowHeight; var boxExtendHorizontal = 0; var boxExtendVertical = 0; var inst_layer_angle = inst ? inst.layer.getAngle() : 0; if (inst) { for (i = 0, len = active_effect_types.length; i < len; i++) { boxExtendHorizontal += glw.getProgramBoxExtendHorizontal(active_effect_types[i].shaderindex); boxExtendVertical += glw.getProgramBoxExtendVertical(active_effect_types[i].shaderindex); } var bbox = inst.bbox; screenleft = layer.layerToCanvas(bbox.left, bbox.top, true, true); screentop = layer.layerToCanvas(bbox.left, bbox.top, false, true); screenright = layer.layerToCanvas(bbox.right, bbox.bottom, true, true); screenbottom = layer.layerToCanvas(bbox.right, bbox.bottom, false, true); if (inst_layer_angle !== 0) { var screentrx = layer.layerToCanvas(bbox.right, bbox.top, true, true); var screentry = layer.layerToCanvas(bbox.right, bbox.top, false, true); var screenblx = layer.layerToCanvas(bbox.left, bbox.bottom, true, true); var screenbly = layer.layerToCanvas(bbox.left, bbox.bottom, false, true); temp = Math.min(screenleft, screenright, screentrx, screenblx); screenright = Math.max(screenleft, screenright, screentrx, screenblx); screenleft = temp; temp = Math.min(screentop, screenbottom, screentry, screenbly); screenbottom = Math.max(screentop, screenbottom, screentry, screenbly); screentop = temp; } screenleft -= boxExtendHorizontal; screentop -= boxExtendVertical; screenright += boxExtendHorizontal; screenbottom += boxExtendVertical; rcTex2.left = screenleft / windowWidth; rcTex2.top = 1 - screentop / windowHeight; rcTex2.right = screenright / windowWidth; rcTex2.bottom = 1 - screenbottom / windowHeight; clearleft = screenleft = cr.floor(screenleft); cleartop = screentop = cr.floor(screentop); clearright = screenright = cr.ceil(screenright); clearbottom = screenbottom = cr.ceil(screenbottom); clearleft -= boxExtendHorizontal; cleartop -= boxExtendVertical; clearright += boxExtendHorizontal; clearbottom += boxExtendVertical; if (screenleft < 0) screenleft = 0; if (screentop < 0) screentop = 0; if (screenright > windowWidth) screenright = windowWidth; if (screenbottom > windowHeight) screenbottom = windowHeight; if (clearleft < 0) clearleft = 0; if (cleartop < 0) cleartop = 0; if (clearright > windowWidth) clearright = windowWidth; if (clearbottom > windowHeight) clearbottom = windowHeight; rcTex.left = screenleft / windowWidth; rcTex.top = 1 - screentop / windowHeight; rcTex.right = screenright / windowWidth; rcTex.bottom = 1 - screenbottom / windowHeight; } else { rcTex.left = rcTex2.left = 0; rcTex.top = rcTex2.top = 0; rcTex.right = rcTex2.right = 1; rcTex.bottom = rcTex2.bottom = 1; } var pre_draw = (inst && (glw.programUsesDest(active_effect_types[0].shaderindex) || boxExtendHorizontal !== 0 || boxExtendVertical !== 0 || inst.opacity !== 1 || inst.type.plugin.must_predraw)) || (layer && !inst && layer.opacity !== 1); glw.setAlphaBlend(); if (pre_draw) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(0); glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { inst.drawGL(glw); } else { glw.setTexture(this.runtime.layer_tex); glw.setOpacity(layer.opacity); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst) { temp = rcTex.top; rcTex.top = rcTex.bottom; rcTex.bottom = temp; } fx_index = 1; other_fx_index = 0; } glw.setOpacity(1); var last = active_effect_types.length - 1; var post_draw = glw.programUsesCrossSampling(active_effect_types[last].shaderindex) || (!layer && !inst && !this.runtime.fullscreenScalingQuality); var etindex = 0; for (i = 0, len = active_effect_types.length; i < len; i++) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(active_effect_types[i].shaderindex); etindex = active_effect_types[i].index; if (glw.programIsAnimated(active_effect_types[i].shaderindex)) this.runtime.redraw = true; if (i == 0 && !pre_draw) { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { glw.setProgramParameters(rendertarget, // backTex 1.0 / inst.width, // pixelWidth 1.0 / inst.height, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, inst.effect_params[etindex]); // fx params inst.drawGL(glw); } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, layer ? // fx params layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(layer ? this.runtime.layer_tex : this.runtime.layout_tex); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst && !post_draw) { temp = screenbottom; screenbottom = screentop; screentop = temp; } } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, inst ? // fx params inst.effect_params[etindex] : layer ? layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(null); if (i === last && !post_draw) { if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); glw.setRenderingToTexture(rendertarget); } else { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); } glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); if (i === last && !post_draw) glw.setTexture(null); } fx_index = (fx_index === 0 ? 1 : 0); other_fx_index = (fx_index === 0 ? 1 : 0); // will be opposite to fx_index since it was just assigned } if (post_draw) { glw.switchProgram(0); if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); else { if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); halfw = this.runtime.width / 2; halfh = this.runtime.height / 2; screenleft = 0; screentop = 0; screenright = this.runtime.width; screenbottom = this.runtime.height; } } glw.setRenderingToTexture(rendertarget); glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); if (inst && active_effect_types.length === 1 && !pre_draw) glw.quadTex(screenleft, screentop, screenright, screentop, screenright, screenbottom, screenleft, screenbottom, rcTex); else glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); glw.setTexture(null); } }; Layout.prototype.getLayerBySid = function (sid_) { var i, len; for (i = 0, len = this.layers.length; i < len; i++) { if (this.layers[i].sid === sid_) return this.layers[i]; } return null; }; Layout.prototype.saveToJSON = function () { var i, len, layer, et; var o = { "sx": this.scrollX, "sy": this.scrollY, "s": this.scale, "a": this.angle, "w": this.width, "h": this.height, "fv": this.first_visit, // added r127 "persist": this.persist_data, "fx": [], "layers": {} }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; o["layers"][layer.sid.toString()] = layer.saveToJSON(); } return o; }; Layout.prototype.loadFromJSON = function (o) { var i, j, len, fx, p, layer; this.scrollX = o["sx"]; this.scrollY = o["sy"]; this.scale = o["s"]; this.angle = o["a"]; this.width = o["w"]; this.height = o["h"]; this.persist_data = o["persist"]; if (typeof o["fv"] !== "undefined") this.first_visit = o["fv"]; var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); var olayers = o["layers"]; for (p in olayers) { if (olayers.hasOwnProperty(p)) { layer = this.getLayerBySid(parseInt(p, 10)); if (!layer) continue; // must've gone missing layer.loadFromJSON(olayers[p]); } } }; cr.layout = Layout; function Layer(layout, m) { this.layout = layout; this.runtime = layout.runtime; this.instances = []; // running instances this.scale = 1.0; this.angle = 0; this.disableAngle = false; this.tmprect = new cr.rect(0, 0, 0, 0); this.tmpquad = new cr.quad(); this.viewLeft = 0; this.viewRight = 0; this.viewTop = 0; this.viewBottom = 0; this.zindices_stale = false; this.zindices_stale_from = -1; // first index that has changed, or -1 if no bound this.clear_earlyz_index = 0; this.name = m[0]; this.index = m[1]; this.sid = m[2]; this.visible = m[3]; // initially visible this.background_color = m[4]; this.transparent = m[5]; this.parallaxX = m[6]; this.parallaxY = m[7]; this.opacity = m[8]; this.forceOwnTexture = m[9]; this.useRenderCells = m[10]; this.zoomRate = m[11]; this.blend_mode = m[12]; this.effect_fallback = m[13]; this.compositeOp = "source-over"; this.srcBlend = 0; this.destBlend = 0; this.render_grid = null; this.last_render_list = alloc_arr(); this.render_list_stale = true; this.last_render_cells = new cr.rect(0, 0, -1, -1); this.cur_render_cells = new cr.rect(0, 0, -1, -1); if (this.useRenderCells) { this.render_grid = new cr.RenderGrid(this.runtime.original_width, this.runtime.original_height); } this.render_offscreen = false; var im = m[14]; var i, len; this.startup_initial_instances = []; // for restoring initial_instances after load this.initial_instances = []; this.created_globals = []; // global object UIDs already created - for save/load to avoid recreating for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]]; ; if (!type.default_instance) { type.default_instance = inst; type.default_layerindex = this.index; } this.initial_instances.push(inst); if (this.layout.initial_types.indexOf(type) === -1) this.layout.initial_types.push(type); } cr.shallowAssignArray(this.startup_initial_instances, this.initial_instances); this.effect_types = []; this.active_effect_types = []; this.shaders_preserve_opaqueness = true; this.effect_params = []; for (i = 0, len = m[15].length; i < len; i++) { this.effect_types.push({ id: m[15][i][0], name: m[15][i][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: i }); this.effect_params.push(m[15][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); }; Layer.prototype.updateActiveEffects = function () { cr.clearArray(this.active_effect_types); this.shaders_preserve_opaqueness = true; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) { this.active_effect_types.push(et); if (!et.preservesOpaqueness) this.shaders_preserve_opaqueness = false; } } }; Layer.prototype.getEffectByName = function (name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; Layer.prototype.createInitialInstances = function () { var i, k, len, inst, initial_inst, type, keep, hasPersistBehavior; for (i = 0, k = 0, len = this.initial_instances.length; i < len; i++) { initial_inst = this.initial_instances[i]; type = this.runtime.types_by_index[initial_inst[1]]; ; hasPersistBehavior = this.runtime.typeHasPersistBehavior(type); keep = true; if (!hasPersistBehavior || this.layout.first_visit) { inst = this.runtime.createInstanceFromInit(initial_inst, this, true); ; created_instances.push(inst); if (inst.type.global) { keep = false; this.created_globals.push(inst.uid); } } if (keep) { this.initial_instances[k] = this.initial_instances[i]; k++; } } this.initial_instances.length = k; this.runtime.ClearDeathRow(); // flushes creation row so IIDs will be correct if (!this.runtime.glwrap && this.effect_types.length) // no WebGL renderer and shaders used this.blend_mode = this.effect_fallback; // use fallback blend mode this.compositeOp = cr.effectToCompositeOp(this.blend_mode); if (this.runtime.gl) cr.setGLBlend(this, this.blend_mode, this.runtime.gl); this.render_list_stale = true; }; Layer.prototype.recreateInitialObjects = function (only_type, rc) { var i, len, initial_inst, type, wm, x, y, inst, j, lenj, s; var types_by_index = this.runtime.types_by_index; var only_type_is_family = only_type.is_family; var only_type_members = only_type.members; for (i = 0, len = this.initial_instances.length; i < len; ++i) { initial_inst = this.initial_instances[i]; wm = initial_inst[0]; x = wm[0]; y = wm[1]; if (!rc.contains_pt(x, y)) continue; // not in the given area type = types_by_index[initial_inst[1]]; if (type !== only_type) { if (only_type_is_family) { if (only_type_members.indexOf(type) < 0) continue; } else continue; // only_type is not a family, and the initial inst type does not match } inst = this.runtime.createInstanceFromInit(initial_inst, this, false); this.runtime.isInOnDestroy++; this.runtime.trigger(Object.getPrototypeOf(type.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; } }; Layer.prototype.removeFromInstanceList = function (inst, remove_from_grid) { var index = cr.fastIndexOf(this.instances, inst); if (index < 0) return; // not found if (remove_from_grid && this.useRenderCells && inst.rendercells && inst.rendercells.right >= inst.rendercells.left) { inst.update_bbox(); // make sure actually in its current rendercells this.render_grid.update(inst, inst.rendercells, null); // no new range provided - remove only inst.rendercells.set(0, 0, -1, -1); // set to invalid state to indicate not inserted } if (index === this.instances.length - 1) this.instances.pop(); else { cr.arrayRemove(this.instances, index); this.setZIndicesStaleFrom(index); } this.render_list_stale = true; }; Layer.prototype.appendToInstanceList = function (inst, add_to_grid) { ; inst.zindex = this.instances.length; this.instances.push(inst); if (add_to_grid && this.useRenderCells && inst.rendercells) { inst.set_bbox_changed(); // will cause immediate update and new insertion to grid } this.render_list_stale = true; }; Layer.prototype.prependToInstanceList = function (inst, add_to_grid) { ; this.instances.unshift(inst); this.setZIndicesStaleFrom(0); if (add_to_grid && this.useRenderCells && inst.rendercells) { inst.set_bbox_changed(); // will cause immediate update and new insertion to grid } }; Layer.prototype.moveInstanceAdjacent = function (inst, other, isafter) { ; var myZ = inst.get_zindex(); var insertZ = other.get_zindex(); cr.arrayRemove(this.instances, myZ); if (myZ < insertZ) insertZ--; if (isafter) insertZ++; if (insertZ === this.instances.length) this.instances.push(inst); else this.instances.splice(insertZ, 0, inst); this.setZIndicesStaleFrom(myZ < insertZ ? myZ : insertZ); }; Layer.prototype.setZIndicesStaleFrom = function (index) { if (this.zindices_stale_from === -1) // not yet set this.zindices_stale_from = index; else if (index < this.zindices_stale_from) // determine minimum z index affected this.zindices_stale_from = index; this.zindices_stale = true; this.render_list_stale = true; }; Layer.prototype.updateZIndices = function () { if (!this.zindices_stale) return; if (this.zindices_stale_from === -1) this.zindices_stale_from = 0; var i, len, inst; if (this.useRenderCells) { for (i = this.zindices_stale_from, len = this.instances.length; i < len; ++i) { inst = this.instances[i]; inst.zindex = i; this.render_grid.markRangeChanged(inst.rendercells); } } else { for (i = this.zindices_stale_from, len = this.instances.length; i < len; ++i) { this.instances[i].zindex = i; } } this.zindices_stale = false; this.zindices_stale_from = -1; }; Layer.prototype.getScale = function (include_aspect) { return this.getNormalScale() * (this.runtime.fullscreenScalingQuality || include_aspect ? this.runtime.aspect_scale : 1); }; Layer.prototype.getNormalScale = function () { return ((this.scale * this.layout.scale) - 1) * this.zoomRate + 1; }; Layer.prototype.getAngle = function () { if (this.disableAngle) return 0; return cr.clamp_angle(this.layout.angle + this.angle); }; var arr_cache = []; function alloc_arr() { if (arr_cache.length) return arr_cache.pop(); else return []; } function free_arr(a) { cr.clearArray(a); arr_cache.push(a); }; function mergeSortedZArrays(a, b, out) { var i = 0, j = 0, k = 0, lena = a.length, lenb = b.length, ai, bj; out.length = lena + lenb; for ( ; i < lena && j < lenb; ++k) { ai = a[i]; bj = b[j]; if (ai.zindex < bj.zindex) { out[k] = ai; ++i; } else { out[k] = bj; ++j; } } for ( ; i < lena; ++i, ++k) out[k] = a[i]; for ( ; j < lenb; ++j, ++k) out[k] = b[j]; }; var next_arr = []; function mergeAllSortedZArrays_pass(arr, first_pass) { var i, len, arr1, arr2, out; for (i = 0, len = arr.length; i < len - 1; i += 2) { arr1 = arr[i]; arr2 = arr[i+1]; out = alloc_arr(); mergeSortedZArrays(arr1, arr2, out); if (!first_pass) { free_arr(arr1); free_arr(arr2); } next_arr.push(out); } if (len % 2 === 1) { if (first_pass) { arr1 = alloc_arr(); cr.shallowAssignArray(arr1, arr[len - 1]); next_arr.push(arr1); } else { next_arr.push(arr[len - 1]); } } cr.shallowAssignArray(arr, next_arr); cr.clearArray(next_arr); }; function mergeAllSortedZArrays(arr) { var first_pass = true; while (arr.length > 1) { mergeAllSortedZArrays_pass(arr, first_pass); first_pass = false; } return arr[0]; }; var render_arr = []; Layer.prototype.getRenderCellInstancesToDraw = function () { ; this.updateZIndices(); this.render_grid.queryRange(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom, render_arr); if (!render_arr.length) return alloc_arr(); if (render_arr.length === 1) { var a = alloc_arr(); cr.shallowAssignArray(a, render_arr[0]); cr.clearArray(render_arr); return a; } var draw_list = mergeAllSortedZArrays(render_arr); cr.clearArray(render_arr); return draw_list; }; Layer.prototype.draw = function (ctx) { this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.blend_mode !== 0); var layer_canvas = this.runtime.canvas; var layer_ctx = ctx; var ctx_changed = false; if (this.render_offscreen) { if (!this.runtime.layer_canvas) { this.runtime.layer_canvas = document.createElement("canvas"); ; layer_canvas = this.runtime.layer_canvas; layer_canvas.width = this.runtime.draw_width; layer_canvas.height = this.runtime.draw_height; this.runtime.layer_ctx = layer_canvas.getContext("2d"); ; ctx_changed = true; } layer_canvas = this.runtime.layer_canvas; layer_ctx = this.runtime.layer_ctx; if (layer_canvas.width !== this.runtime.draw_width) { layer_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layer_canvas.height !== this.runtime.draw_height) { layer_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { layer_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling; } if (this.transparent) layer_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.globalAlpha = 1; layer_ctx.globalCompositeOperation = "source-over"; if (!this.transparent) { layer_ctx.fillStyle = "rgb(" + this.background_color[0] + "," + this.background_color[1] + "," + this.background_color[2] + ")"; layer_ctx.fillRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.save(); this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, layer_ctx); var myscale = this.getScale(); layer_ctx.scale(myscale, myscale); layer_ctx.translate(-px, -py); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, len, inst, last_inst = null; for (i = 0, len = instances_to_draw.length; i < len; ++i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstance(inst, layer_ctx); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; layer_ctx.restore(); if (this.render_offscreen) { ctx.globalCompositeOperation = this.compositeOp; ctx.globalAlpha = this.opacity; ctx.drawImage(layer_canvas, 0, 0); } }; Layer.prototype.drawInstance = function(inst, layer_ctx) { if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; layer_ctx.globalCompositeOperation = inst.compositeOp; inst.draw(layer_ctx); }; Layer.prototype.updateViewport = function (ctx) { this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, ctx); }; Layer.prototype.rotateViewport = function (px, py, ctx) { var myscale = this.getScale(); this.viewLeft = px; this.viewTop = py; this.viewRight = px + (this.runtime.draw_width * (1 / myscale)); this.viewBottom = py + (this.runtime.draw_height * (1 / myscale)); var myAngle = this.getAngle(); if (myAngle !== 0) { if (ctx) { ctx.translate(this.runtime.draw_width / 2, this.runtime.draw_height / 2); ctx.rotate(-myAngle); ctx.translate(this.runtime.draw_width / -2, this.runtime.draw_height / -2); } this.tmprect.set(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom); this.tmprect.offset((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); this.tmpquad.set_from_rotated_rect(this.tmprect, myAngle); this.tmpquad.bounding_box(this.tmprect); this.tmprect.offset((this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2); this.viewLeft = this.tmprect.left; this.viewTop = this.tmprect.top; this.viewRight = this.tmprect.right; this.viewBottom = this.tmprect.bottom; } } Layer.prototype.drawGL_earlyZPass = function (glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = this.forceOwnTexture; if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, inst, last_inst = null; for (i = instances_to_draw.length - 1; i >= 0; --i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstanceGL_earlyZPass(instances_to_draw[i], glw); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; if (!this.transparent) { this.clear_earlyz_index = this.runtime.earlyz_index++; glw.setEarlyZIndex(this.clear_earlyz_index); glw.setColorFillMode(1, 1, 1, 1); glw.fullscreenQuad(); // fill remaining space in depth buffer with current Z value glw.restoreEarlyZMode(); } }; Layer.prototype.drawGL = function (glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.active_effect_types.length > 0 || this.blend_mode !== 0); if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); if (this.transparent) glw.clear(0, 0, 0, 0); } if (!this.transparent) { if (this.runtime.enableFrontToBack) { glw.setEarlyZIndex(this.clear_earlyz_index); glw.setColorFillMode(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); glw.fullscreenQuad(); glw.setTextureFillMode(); } else { glw.clear(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); } } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, len, inst, last_inst = null; for (i = 0, len = instances_to_draw.length; i < len; ++i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstanceGL(instances_to_draw[i], glw); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; if (this.render_offscreen) { shaderindex = this.active_effect_types.length ? this.active_effect_types[0].shaderindex : 0; etindex = this.active_effect_types.length ? this.active_effect_types[0].index : 0; if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && this.opacity === 1)) { if (this.active_effect_types.length === 1) { glw.switchProgram(shaderindex); glw.setProgramParameters(this.layout.getRenderTarget(), // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd myscale, // layerScale this.getAngle(), this.viewLeft, this.viewTop, (this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2, this.runtime.kahanTime.sum, this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); glw.setRenderingToTexture(this.layout.getRenderTarget()); glw.setOpacity(this.opacity); glw.setTexture(this.runtime.layer_tex); glw.setBlend(this.srcBlend, this.destBlend); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.draw_width / 2; var halfh = this.runtime.draw_height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); } else { this.layout.renderEffectChain(glw, this, null, this.layout.getRenderTarget()); } } }; Layer.prototype.drawInstanceGL = function (inst, glw) { ; if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; glw.setEarlyZIndex(inst.earlyz_index); if (inst.uses_shaders) { this.drawInstanceWithShadersGL(inst, glw); } else { glw.switchProgram(0); // un-set any previously set shader glw.setBlend(inst.srcBlend, inst.destBlend); inst.drawGL(glw); } }; Layer.prototype.drawInstanceGL_earlyZPass = function (inst, glw) { ; if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; inst.earlyz_index = this.runtime.earlyz_index++; if (inst.blend_mode !== 0 || inst.opacity !== 1 || !inst.shaders_preserve_opaqueness || !inst.drawGL_earlyZPass) return; glw.setEarlyZIndex(inst.earlyz_index); inst.drawGL_earlyZPass(glw); }; Layer.prototype.drawInstanceWithShadersGL = function (inst, glw) { var shaderindex = inst.active_effect_types[0].shaderindex; var etindex = inst.active_effect_types[0].index; var myscale = this.getScale(); if (inst.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && !glw.programExtendsBox(shaderindex) && ((!inst.angle && !inst.layer.getAngle()) || !glw.programUsesDest(shaderindex)) && inst.opacity === 1 && !inst.type.plugin.must_predraw) { glw.switchProgram(shaderindex); glw.setBlend(inst.srcBlend, inst.destBlend); if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; var destStartX = 0, destStartY = 0, destEndX = 0, destEndY = 0; if (glw.programUsesDest(shaderindex)) { var bbox = inst.bbox; var screenleft = this.layerToCanvas(bbox.left, bbox.top, true, true); var screentop = this.layerToCanvas(bbox.left, bbox.top, false, true); var screenright = this.layerToCanvas(bbox.right, bbox.bottom, true, true); var screenbottom = this.layerToCanvas(bbox.right, bbox.bottom, false, true); destStartX = screenleft / windowWidth; destStartY = 1 - screentop / windowHeight; destEndX = screenright / windowWidth; destEndY = 1 - screenbottom / windowHeight; } glw.setProgramParameters(this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget(), // backTex 1.0 / inst.width, // pixelWidth 1.0 / inst.height, // pixelHeight destStartX, destStartY, destEndX, destEndY, myscale, this.getAngle(), this.viewLeft, this.viewTop, (this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2, this.runtime.kahanTime.sum, inst.effect_params[etindex]); inst.drawGL(glw); } else { this.layout.renderEffectChain(glw, this, inst, this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget()); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); } }; Layer.prototype.canvasToLayer = function (ptx, pty, getx, using_draw_area) { var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina) { ptx *= multiplier; pty *= multiplier; } var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var par_x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var par_y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var x = par_x; var y = par_y; var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x += ptx * invScale; y += pty * invScale; var a = this.getAngle(); if (a !== 0) { x -= par_x; y -= par_y; var cosa = Math.cos(a); var sina = Math.sin(a); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += par_x; y += par_y; } return getx ? x : y; }; Layer.prototype.layerToCanvas = function (ptx, pty, getx, using_draw_area) { var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var par_x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var par_y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var x = par_x; var y = par_y; var a = this.getAngle(); if (a !== 0) { ptx -= par_x; pty -= par_y; var cosa = Math.cos(-a); var sina = Math.sin(-a); var x_temp = (ptx * cosa) - (pty * sina); pty = (pty * cosa) + (ptx * sina); ptx = x_temp; ptx += par_x; pty += par_y; } var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x = (ptx - x) / invScale; y = (pty - y) / invScale; var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina && !using_draw_area) { x /= multiplier; y /= multiplier; } return getx ? x : y; }; Layer.prototype.rotatePt = function (x_, y_, getx) { if (this.getAngle() === 0) return getx ? x_ : y_; var nx = this.layerToCanvas(x_, y_, true); var ny = this.layerToCanvas(x_, y_, false); this.disableAngle = true; var px = this.canvasToLayer(nx, ny, true); var py = this.canvasToLayer(nx, ny, true); this.disableAngle = false; return getx ? px : py; }; Layer.prototype.saveToJSON = function () { var i, len, et; var o = { "s": this.scale, "a": this.angle, "vl": this.viewLeft, "vt": this.viewTop, "vr": this.viewRight, "vb": this.viewBottom, "v": this.visible, "bc": this.background_color, "t": this.transparent, "px": this.parallaxX, "py": this.parallaxY, "o": this.opacity, "zr": this.zoomRate, "fx": [], "cg": this.created_globals, // added r197; list of global UIDs already created "instances": [] }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } return o; }; Layer.prototype.loadFromJSON = function (o) { var i, j, len, p, inst, fx; this.scale = o["s"]; this.angle = o["a"]; this.viewLeft = o["vl"]; this.viewTop = o["vt"]; this.viewRight = o["vr"]; this.viewBottom = o["vb"]; this.visible = o["v"]; this.background_color = o["bc"]; this.transparent = o["t"]; this.parallaxX = o["px"]; this.parallaxY = o["py"]; this.opacity = o["o"]; this.zoomRate = o["zr"]; this.created_globals = o["cg"] || []; // added r197 cr.shallowAssignArray(this.initial_instances, this.startup_initial_instances); var temp_set = new cr.ObjectSet(); for (i = 0, len = this.created_globals.length; i < len; ++i) temp_set.add(this.created_globals[i]); for (i = 0, j = 0, len = this.initial_instances.length; i < len; ++i) { if (!temp_set.contains(this.initial_instances[i][2])) // UID in element 2 { this.initial_instances[j] = this.initial_instances[i]; ++j; } } cr.truncateArray(this.initial_instances, j); var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); this.instances.sort(sort_by_zindex); this.zindices_stale = true; }; cr.layer = Layer; }()); ; (function() { var allUniqueSolModifiers = []; function testSolsMatch(arr1, arr2) { var i, len = arr1.length; switch (len) { case 0: return true; case 1: return arr1[0] === arr2[0]; case 2: return arr1[0] === arr2[0] && arr1[1] === arr2[1]; default: for (i = 0; i < len; i++) { if (arr1[i] !== arr2[i]) return false; } return true; } }; function solArraySorter(t1, t2) { return t1.index - t2.index; }; function findMatchingSolModifier(arr) { var i, len, u, temp, subarr; if (arr.length === 2) { if (arr[0].index > arr[1].index) { temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } } else if (arr.length > 2) arr.sort(solArraySorter); // so testSolsMatch compares in same order if (arr.length >= allUniqueSolModifiers.length) allUniqueSolModifiers.length = arr.length + 1; if (!allUniqueSolModifiers[arr.length]) allUniqueSolModifiers[arr.length] = []; subarr = allUniqueSolModifiers[arr.length]; for (i = 0, len = subarr.length; i < len; i++) { u = subarr[i]; if (testSolsMatch(arr, u)) return u; } subarr.push(arr); return arr; }; function EventSheet(runtime, m) { this.runtime = runtime; this.triggers = {}; this.fasttriggers = {}; this.hasRun = false; this.includes = new cr.ObjectSet(); // all event sheets included by this sheet, at first-level indirection only this.deep_includes = []; // all includes from this sheet recursively, in trigger order this.already_included_sheets = []; // used while building deep_includes this.name = m[0]; var em = m[1]; // events model this.events = []; // triggers won't make it to this array var i, len; for (i = 0, len = em.length; i < len; i++) this.init_event(em[i], null, this.events); }; EventSheet.prototype.toString = function () { return this.name; }; EventSheet.prototype.init_event = function (m, parent, nontriggers) { switch (m[0]) { case 0: // event block { var block = new cr.eventblock(this, parent, m); cr.seal(block); if (block.orblock) { nontriggers.push(block); var i, len; for (i = 0, len = block.conditions.length; i < len; i++) { if (block.conditions[i].trigger) this.init_trigger(block, i); } } else { if (block.is_trigger()) this.init_trigger(block, 0); else nontriggers.push(block); } break; } case 1: // variable { var v = new cr.eventvariable(this, parent, m); cr.seal(v); nontriggers.push(v); break; } case 2: // include { var inc = new cr.eventinclude(this, parent, m); cr.seal(inc); nontriggers.push(inc); break; } default: ; } }; EventSheet.prototype.postInit = function () { var i, len; for (i = 0, len = this.events.length; i < len; i++) { this.events[i].postInit(i < len - 1 && this.events[i + 1].is_else_block); } }; EventSheet.prototype.updateDeepIncludes = function () { cr.clearArray(this.deep_includes); cr.clearArray(this.already_included_sheets); this.addDeepIncludes(this); cr.clearArray(this.already_included_sheets); }; EventSheet.prototype.addDeepIncludes = function (root_sheet) { var i, len, inc, sheet; var deep_includes = root_sheet.deep_includes; var already_included_sheets = root_sheet.already_included_sheets; var arr = this.includes.valuesRef(); for (i = 0, len = arr.length; i < len; ++i) { inc = arr[i]; sheet = inc.include_sheet; if (!inc.isActive() || root_sheet === sheet || already_included_sheets.indexOf(sheet) > -1) continue; already_included_sheets.push(sheet); sheet.addDeepIncludes(root_sheet); deep_includes.push(sheet); } }; EventSheet.prototype.run = function (from_include) { if (!this.runtime.resuming_breakpoint) { this.hasRun = true; if (!from_include) this.runtime.isRunningEvents = true; } var i, len; for (i = 0, len = this.events.length; i < len; i++) { var ev = this.events[i]; ev.run(); this.runtime.clearSol(ev.solModifiers); if (this.runtime.hasPendingInstances) this.runtime.ClearDeathRow(); } if (!from_include) this.runtime.isRunningEvents = false; }; function isPerformanceSensitiveTrigger(method) { if (cr.plugins_.Sprite && method === cr.plugins_.Sprite.prototype.cnds.OnFrameChanged) { return true; } return false; }; EventSheet.prototype.init_trigger = function (trig, index) { if (!trig.orblock) this.runtime.triggers_to_postinit.push(trig); // needs to be postInit'd later var i, len; var cnd = trig.conditions[index]; var type_name; if (cnd.type) type_name = cnd.type.name; else type_name = "system"; var fasttrigger = cnd.fasttrigger; var triggers = (fasttrigger ? this.fasttriggers : this.triggers); if (!triggers[type_name]) triggers[type_name] = []; var obj_entry = triggers[type_name]; var method = cnd.func; if (fasttrigger) { if (!cnd.parameters.length) // no parameters return; var firstparam = cnd.parameters[0]; if (firstparam.type !== 1 || // not a string param firstparam.expression.type !== 2) // not a string literal node { return; } var fastevs; var firstvalue = firstparam.expression.value.toLowerCase(); var i, len; for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { fastevs = obj_entry[i].evs; if (!fastevs[firstvalue]) fastevs[firstvalue] = [[trig, index]]; else fastevs[firstvalue].push([trig, index]); return; } } fastevs = {}; fastevs[firstvalue] = [[trig, index]]; obj_entry.push({ method: method, evs: fastevs }); } else { for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { obj_entry[i].evs.push([trig, index]); return; } } if (isPerformanceSensitiveTrigger(method)) obj_entry.unshift({ method: method, evs: [[trig, index]]}); else obj_entry.push({ method: method, evs: [[trig, index]]}); } }; cr.eventsheet = EventSheet; function Selection(type) { this.type = type; this.instances = []; // subset of picked instances this.else_instances = []; // subset of unpicked instances this.select_all = true; }; Selection.prototype.hasObjects = function () { if (this.select_all) return this.type.instances.length; else return this.instances.length; }; Selection.prototype.getObjects = function () { if (this.select_all) return this.type.instances; else return this.instances; }; /* Selection.prototype.ensure_picked = function (inst, skip_siblings) { var i, len; var orblock = inst.runtime.getCurrentEventStack().current_event.orblock; if (this.select_all) { this.select_all = false; if (orblock) { cr.shallowAssignArray(this.else_instances, inst.type.instances); cr.arrayFindRemove(this.else_instances, inst); } this.instances.length = 1; this.instances[0] = inst; } else { if (orblock) { i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { if (this.instances.indexOf(inst) === -1) this.instances.push(inst); } } if (!skip_siblings) { } }; */ Selection.prototype.pick_one = function (inst) { if (!inst) return; if (inst.runtime.getCurrentEventStack().current_event.orblock) { if (this.select_all) { cr.clearArray(this.instances); cr.shallowAssignArray(this.else_instances, inst.type.instances); this.select_all = false; } var i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { this.select_all = false; cr.clearArray(this.instances); this.instances[0] = inst; } }; cr.selection = Selection; function EventBlock(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.solModifiersIncludingParents = []; this.solWriterAfterCnds = false; // block does not change SOL after running its conditions this.group = false; // is group of events this.initially_activated = false; // if a group, is active on startup this.toplevelevent = false; // is an event block parented only by a top-level group this.toplevelgroup = false; // is parented only by other groups or is top-level (i.e. not in a subevent) this.has_else_block = false; // is followed by else ; this.conditions = []; this.actions = []; this.subevents = []; this.group_name = ""; this.group = false; this.initially_activated = false; this.group_active = false; this.contained_includes = null; if (m[1]) { this.group_name = m[1][1].toLowerCase(); this.group = true; this.initially_activated = !!m[1][0]; this.contained_includes = []; this.group_active = this.initially_activated; this.runtime.allGroups.push(this); this.runtime.groups_by_name[this.group_name] = this; } this.orblock = m[2]; this.sid = m[4]; if (!this.group) this.runtime.blocksBySid[this.sid.toString()] = this; var i, len; var cm = m[5]; for (i = 0, len = cm.length; i < len; i++) { var cnd = new cr.condition(this, cm[i]); cnd.index = i; cr.seal(cnd); this.conditions.push(cnd); /* if (cnd.is_logical()) this.is_logical = true; if (cnd.type && !cnd.type.plugin.singleglobal && this.cndReferences.indexOf(cnd.type) === -1) this.cndReferences.push(cnd.type); */ this.addSolModifier(cnd.type); } var am = m[6]; for (i = 0, len = am.length; i < len; i++) { var act = new cr.action(this, am[i]); act.index = i; cr.seal(act); this.actions.push(act); } if (m.length === 8) { var em = m[7]; for (i = 0, len = em.length; i < len; i++) this.sheet.init_event(em[i], this, this.subevents); } this.is_else_block = false; if (this.conditions.length) { this.is_else_block = (this.conditions[0].type == null && this.conditions[0].func == cr.system_object.prototype.cnds.Else); } }; window["_c2hh_"] = "F8BD88175F0B2F14B2CB797396461D31839036A8"; EventBlock.prototype.postInit = function (hasElse/*, prevBlock_*/) { var i, len; var p = this.parent; if (this.group) { this.toplevelgroup = true; while (p) { if (!p.group) { this.toplevelgroup = false; break; } p = p.parent; } } this.toplevelevent = !this.is_trigger() && (!this.parent || (this.parent.group && this.parent.toplevelgroup)); this.has_else_block = !!hasElse; this.solModifiersIncludingParents = this.solModifiers.slice(0); p = this.parent; while (p) { for (i = 0, len = p.solModifiers.length; i < len; i++) this.addParentSolModifier(p.solModifiers[i]); p = p.parent; } this.solModifiers = findMatchingSolModifier(this.solModifiers); this.solModifiersIncludingParents = findMatchingSolModifier(this.solModifiersIncludingParents); var i, len/*, s*/; for (i = 0, len = this.conditions.length; i < len; i++) this.conditions[i].postInit(); for (i = 0, len = this.actions.length; i < len; i++) this.actions[i].postInit(); for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].postInit(i < len - 1 && this.subevents[i + 1].is_else_block); } /* if (this.is_else_block && this.prev_block) { for (i = 0, len = this.prev_block.solModifiers.length; i < len; i++) { s = this.prev_block.solModifiers[i]; if (this.solModifiers.indexOf(s) === -1) this.solModifiers.push(s); } } */ }; EventBlock.prototype.setGroupActive = function (a) { if (this.group_active === !!a) return; // same state this.group_active = !!a; var i, len; for (i = 0, len = this.contained_includes.length; i < len; ++i) { this.contained_includes[i].updateActive(); } if (len > 0 && this.runtime.running_layout.event_sheet) this.runtime.running_layout.event_sheet.updateDeepIncludes(); }; function addSolModifierToList(type, arr) { var i, len, t; if (!type) return; if (arr.indexOf(type) === -1) arr.push(type); if (type.is_contained) { for (i = 0, len = type.container.length; i < len; i++) { t = type.container[i]; if (type === t) continue; // already handled if (arr.indexOf(t) === -1) arr.push(t); } } }; EventBlock.prototype.addSolModifier = function (type) { addSolModifierToList(type, this.solModifiers); }; EventBlock.prototype.addParentSolModifier = function (type) { addSolModifierToList(type, this.solModifiersIncludingParents); }; EventBlock.prototype.setSolWriterAfterCnds = function () { this.solWriterAfterCnds = true; if (this.parent) this.parent.setSolWriterAfterCnds(); }; EventBlock.prototype.is_trigger = function () { if (!this.conditions.length) // no conditions return false; else return this.conditions[0].trigger; }; EventBlock.prototype.run = function () { var i, len, c, any_true = false, cnd_result; var runtime = this.runtime; var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var conditions = this.conditions; if (!this.is_else_block) evinfo.else_branch_ran = false; if (this.orblock) { if (conditions.length === 0) any_true = true; // be sure to run if empty block evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { c = conditions[evinfo.cndindex]; if (c.trigger) // skip triggers when running OR block continue; cnd_result = c.run(); if (cnd_result) // make sure all conditions run and run if any were true any_true = true; } evinfo.last_event_true = any_true; if (any_true) this.run_actions_and_subevents(); } else { evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { cnd_result = conditions[evinfo.cndindex].run(); if (!cnd_result) // condition failed { evinfo.last_event_true = false; if (this.toplevelevent && runtime.hasPendingInstances) runtime.ClearDeathRow(); return; // bail out now } } evinfo.last_event_true = true; this.run_actions_and_subevents(); } this.end_run(evinfo); }; EventBlock.prototype.end_run = function (evinfo) { if (evinfo.last_event_true && this.has_else_block) evinfo.else_branch_ran = true; if (this.toplevelevent && this.runtime.hasPendingInstances) this.runtime.ClearDeathRow(); }; EventBlock.prototype.run_orblocktrigger = function (index) { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; if (this.conditions[index].run()) { this.run_actions_and_subevents(); this.runtime.getCurrentEventStack().last_event_true = true; } }; EventBlock.prototype.run_actions_and_subevents = function () { var evinfo = this.runtime.getCurrentEventStack(); var len; for (evinfo.actindex = 0, len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.resume_actions_and_subevents = function () { var evinfo = this.runtime.getCurrentEventStack(); var len; for (len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.run_subevents = function () { if (!this.subevents.length) return; var i, len, subev, pushpop/*, skipped_pop = false, pop_modifiers = null*/; var last = this.subevents.length - 1; this.runtime.pushEventStack(this); if (this.solWriterAfterCnds) { for (i = 0, len = this.subevents.length; i < len; i++) { subev = this.subevents[i]; pushpop = (!this.toplevelgroup || (!this.group && i < last)); if (pushpop) this.runtime.pushCopySol(subev.solModifiers); subev.run(); if (pushpop) this.runtime.popSol(subev.solModifiers); else this.runtime.clearSol(subev.solModifiers); } } else { for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].run(); } } this.runtime.popEventStack(); }; EventBlock.prototype.run_pretrigger = function () { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var any_true = false; var i, len; for (evinfo.cndindex = 0, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { ; if (this.conditions[evinfo.cndindex].run()) any_true = true; else if (!this.orblock) // condition failed (let OR blocks run all conditions anyway) return false; // bail out } return this.orblock ? any_true : true; }; EventBlock.prototype.retrigger = function () { this.runtime.execcount++; var prevcndindex = this.runtime.getCurrentEventStack().cndindex; var len; var evinfo = this.runtime.pushEventStack(this); if (!this.orblock) { for (evinfo.cndindex = prevcndindex + 1, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { if (!this.conditions[evinfo.cndindex].run()) // condition failed { this.runtime.popEventStack(); // moving up level of recursion return false; // bail out } } } this.run_actions_and_subevents(); this.runtime.popEventStack(); return true; // ran an iteration }; EventBlock.prototype.isFirstConditionOfType = function (cnd) { var cndindex = cnd.index; if (cndindex === 0) return true; --cndindex; for ( ; cndindex >= 0; --cndindex) { if (this.conditions[cndindex].type === cnd.type) return false; } return true; }; cr.eventblock = EventBlock; function Condition(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = this.runtime.GetObjectReference(m[1]); ; this.trigger = (m[3] > 0); this.fasttrigger = (m[3] === 2); this.looping = m[4]; this.inverted = m[5]; this.isstatic = m[6]; this.sid = m[7]; this.runtime.cndsBySid[this.sid.toString()] = this; if (m[0] === -1) // system object { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]]; ; if (this.isstatic) this.run = this.run_static; else this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]); ; this.beh_index = this.type.getBehaviorIndexByName(m[2]); ; } else { this.behaviortype = null; this.beh_index = -1; } if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); } if (this.fasttrigger) this.run = this.run_true; if (m.length === 10) { var i, len; var em = m[9]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Condition.prototype.postInit = function () { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; /* Condition.prototype.is_logical = function () { return !this.type || this.type.plugin.singleglobal; }; */ Condition.prototype.run_true = function () { return true; }; Condition.prototype.run_system = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); return cr.xor(this.func.apply(this.runtime.system, this.results), this.inverted); }; Condition.prototype.run_static = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); var ret = this.func.apply(this.behaviortype ? this.behaviortype : this.type, this.results); this.type.applySolToContainer(); return ret; }; Condition.prototype.run_object = function () { var i, j, k, leni, lenj, p, ret, met, inst, s, sol2; var type = this.type; var sol = type.getCurrentSol(); var is_orblock = this.block.orblock && !this.trigger; // triggers in OR blocks need to work normally var offset = 0; var is_contained = type.is_contained; var is_family = type.is_family; var family_index = type.family_index; var beh_index = this.beh_index; var is_beh = (beh_index > -1); var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var inverted = this.inverted; var func = this.func; var arr, container; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } if (sol.select_all) { cr.clearArray(sol.instances); // clear contents cr.clearArray(sol.else_instances); arr = type.instances; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i]; ; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); met = cr.xor(ret, inverted); if (met) sol.instances.push(inst); else if (is_orblock) // in OR blocks, keep the instances not meeting the condition for subsequent testing sol.else_instances.push(inst); } if (type.finish) type.finish(true); sol.select_all = false; type.applySolToContainer(); return sol.hasObjects(); } else { k = 0; var using_else_instances = (is_orblock && !this.block.isFirstConditionOfType(this)); arr = (using_else_instances ? sol.else_instances : sol.instances); var any_true = false; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i]; ; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; if (using_else_instances) { sol.instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances.push(s); } } } else { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances[k] = s; } } k++; } } else { if (using_else_instances) { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances[k] = s; } } k++; } else if (is_orblock) { sol.else_instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances.push(s); } } } } } cr.truncateArray(arr, k); if (is_contained) { container = type.container; for (i = 0, leni = container.length; i < leni; i++) { sol2 = container[i].getCurrentSol(); if (using_else_instances) cr.truncateArray(sol2.else_instances, k); else cr.truncateArray(sol2.instances, k); } } var pick_in_finish = any_true; // don't pick in finish() if we're only doing the logic test below if (using_else_instances && !any_true) { for (i = 0, leni = sol.instances.length; i < leni; i++) { inst = sol.instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; j++) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); } } if (is_beh) ret = func.apply(inst.behavior_insts[beh_index], results); else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; break; // got our flag, don't need to test any more } } } if (type.finish) type.finish(pick_in_finish || is_orblock); return is_orblock ? any_true : sol.hasObjects(); } }; cr.condition = Condition; function Action(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = this.runtime.GetObjectReference(m[1]); ; if (m[0] === -1) // system { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]]; ; this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]); ; this.beh_index = this.type.getBehaviorIndexByName(m[2]); ; } else { this.behaviortype = null; this.beh_index = -1; } } this.sid = m[3]; this.runtime.actsBySid[this.sid.toString()] = this; if (m.length === 6) { var i, len; var em = m[5]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Action.prototype.postInit = function () { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; Action.prototype.run_system = function () { var runtime = this.runtime; var i, len; var parameters = this.parameters; var results = this.results; for (i = 0, len = parameters.length; i < len; ++i) results[i] = parameters[i].get(); return this.func.apply(runtime.system, results); }; Action.prototype.run_object = function () { var type = this.type; var beh_index = this.beh_index; var family_index = type.family_index; var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var func = this.func; var instances = type.getCurrentSol().getObjects(); var is_family = type.is_family; var is_beh = (beh_index > -1); var i, j, leni, lenj, p, inst, offset; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } for (i = 0, leni = instances.length; i < leni; ++i) { inst = instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // pass i to use as default SOL index } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } func.apply(inst.behavior_insts[beh_index + offset], results); } else func.apply(inst, results); } return false; }; cr.action = Action; var tempValues = []; var tempValuesPtr = -1; function pushTempValue() { tempValuesPtr++; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; function popTempValue() { tempValuesPtr--; }; function Parameter(owner, m) { this.owner = owner; this.block = owner.block; this.sheet = owner.sheet; this.runtime = owner.runtime; this.type = m[0]; this.expression = null; this.solindex = 0; this.get = null; this.combosel = 0; this.layout = null; this.key = 0; this.object = null; this.index = 0; this.varname = null; this.eventvar = null; this.fileinfo = null; this.subparams = null; this.variadicret = null; this.subparams = null; this.variadicret = null; this.variesPerInstance = false; var i, len, param; switch (m[0]) { case 0: // number case 7: // any this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp; break; case 1: // string this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp_str; break; case 5: // layer this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_layer; break; case 3: // combo case 8: // cmp this.combosel = m[1]; this.get = this.get_combosel; break; case 6: // layout this.layout = this.runtime.layouts[m[1]]; ; this.get = this.get_layout; break; case 9: // keyb this.key = m[1]; this.get = this.get_key; break; case 4: // object this.object = this.runtime.types_by_index[m[1]]; ; this.get = this.get_object; this.block.addSolModifier(this.object); if (this.owner instanceof cr.action) this.block.setSolWriterAfterCnds(); else if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); break; case 10: // instvar this.index = m[1]; if (owner.type.is_family) { this.get = this.get_familyvar; this.variesPerInstance = true; } else this.get = this.get_instvar; break; case 11: // eventvar this.varname = m[1]; this.eventvar = null; this.get = this.get_eventvar; break; case 2: // audiofile ["name", ismusic] case 12: // fileinfo "name" this.fileinfo = m[1]; this.get = this.get_audiofile; break; case 13: // variadic this.get = this.get_variadic; this.subparams = []; this.variadicret = []; for (i = 1, len = m.length; i < len; i++) { param = new cr.parameter(this.owner, m[i]); cr.seal(param); this.subparams.push(param); this.variadicret.push(0); } break; default: ; } }; Parameter.prototype.postInit = function () { var i, len; if (this.type === 11) // eventvar { this.eventvar = this.runtime.getEventVariableByName(this.varname, this.block.parent); ; } else if (this.type === 13) // variadic, postInit all sub-params { for (i = 0, len = this.subparams.length; i < len; i++) this.subparams[i].postInit(); } if (this.expression) this.expression.postInit(); }; Parameter.prototype.maybeVaryForType = function (t) { if (this.variesPerInstance) return; // already varies per instance, no need to check again if (!t) return; // never vary for system type if (!t.plugin.singleglobal) { this.variesPerInstance = true; return; } }; Parameter.prototype.setVaries = function () { this.variesPerInstance = true; }; Parameter.prototype.get_exp = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); return temp.data; // return actual JS value, not expvalue }; Parameter.prototype.get_exp_str = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); if (cr.is_string(temp.data)) return temp.data; else return ""; }; Parameter.prototype.get_object = function () { return this.object; }; Parameter.prototype.get_combosel = function () { return this.combosel; }; Parameter.prototype.get_layer = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); if (temp.is_number()) return this.runtime.getLayerByNumber(temp.data); else return this.runtime.getLayerByName(temp.data); } Parameter.prototype.get_layout = function () { return this.layout; }; Parameter.prototype.get_key = function () { return this.key; }; Parameter.prototype.get_instvar = function () { return this.index; }; Parameter.prototype.get_familyvar = function (solindex_) { var solindex = solindex_ || 0; var familytype = this.owner.type; var realtype = null; var sol = familytype.getCurrentSol(); var objs = sol.getObjects(); if (objs.length) realtype = objs[solindex % objs.length].type; else if (sol.else_instances.length) realtype = sol.else_instances[solindex % sol.else_instances.length].type; else if (familytype.instances.length) realtype = familytype.instances[solindex % familytype.instances.length].type; else return 0; return this.index + realtype.family_var_map[familytype.family_index]; }; Parameter.prototype.get_eventvar = function () { return this.eventvar; }; Parameter.prototype.get_audiofile = function () { return this.fileinfo; }; Parameter.prototype.get_variadic = function () { var i, len; for (i = 0, len = this.subparams.length; i < len; i++) { this.variadicret[i] = this.subparams[i].get(); } return this.variadicret; }; cr.parameter = Parameter; function EventVariable(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.name = m[1]; this.vartype = m[2]; this.initial = m[3]; this.is_static = !!m[4]; this.is_constant = !!m[5]; this.sid = m[6]; this.runtime.varsBySid[this.sid.toString()] = this; this.data = this.initial; // note: also stored in event stack frame for local nonstatic nonconst vars if (this.parent) // local var { if (this.is_static || this.is_constant) this.localIndex = -1; else this.localIndex = this.runtime.stackLocalCount++; this.runtime.all_local_vars.push(this); } else // global var { this.localIndex = -1; this.runtime.all_global_vars.push(this); } }; EventVariable.prototype.postInit = function () { this.solModifiers = findMatchingSolModifier(this.solModifiers); }; EventVariable.prototype.setValue = function (x) { ; var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs) this.data = x; else // local nonstatic variable: use event stack to keep value at this level of recursion { if (this.localIndex >= lvs.length) lvs.length = this.localIndex + 1; lvs[this.localIndex] = x; } }; EventVariable.prototype.getValue = function () { var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs || this.is_constant) return this.data; else // local nonstatic variable { if (this.localIndex >= lvs.length) { ; return this.initial; } if (typeof lvs[this.localIndex] === "undefined") { ; return this.initial; } return lvs[this.localIndex]; } }; EventVariable.prototype.run = function () { if (this.parent && !this.is_static && !this.is_constant) this.setValue(this.initial); }; cr.eventvariable = EventVariable; function EventInclude(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.include_sheet = null; // determined in postInit this.include_sheet_name = m[1]; this.active = true; }; EventInclude.prototype.toString = function () { return "include:" + this.include_sheet.toString(); }; EventInclude.prototype.postInit = function () { this.include_sheet = this.runtime.eventsheets[this.include_sheet_name]; ; ; this.sheet.includes.add(this); this.solModifiers = findMatchingSolModifier(this.solModifiers); var p = this.parent; while (p) { if (p.group) p.contained_includes.push(this); p = p.parent; } this.updateActive(); }; EventInclude.prototype.run = function () { if (this.parent) this.runtime.pushCleanSol(this.runtime.types_by_index); if (!this.include_sheet.hasRun) this.include_sheet.run(true); // from include if (this.parent) this.runtime.popSol(this.runtime.types_by_index); }; EventInclude.prototype.updateActive = function () { var p = this.parent; while (p) { if (p.group && !p.group_active) { this.active = false; return; } p = p.parent; } this.active = true; }; EventInclude.prototype.isActive = function () { return this.active; }; cr.eventinclude = EventInclude; function EventStackFrame() { this.temp_parents_arr = []; this.reset(null); cr.seal(this); }; EventStackFrame.prototype.reset = function (cur_event) { this.current_event = cur_event; this.cndindex = 0; this.actindex = 0; cr.clearArray(this.temp_parents_arr); this.last_event_true = false; this.else_branch_ran = false; this.any_true_state = false; }; EventStackFrame.prototype.isModifierAfterCnds = function () { if (this.current_event.solWriterAfterCnds) return true; if (this.cndindex < this.current_event.conditions.length - 1) return !!this.current_event.solModifiers.length; return false; }; cr.eventStackFrame = EventStackFrame; }()); (function() { function ExpNode(owner_, m) { this.owner = owner_; this.runtime = owner_.runtime; this.type = m[0]; ; this.get = [this.eval_int, this.eval_float, this.eval_string, this.eval_unaryminus, this.eval_add, this.eval_subtract, this.eval_multiply, this.eval_divide, this.eval_mod, this.eval_power, this.eval_and, this.eval_or, this.eval_equal, this.eval_notequal, this.eval_less, this.eval_lessequal, this.eval_greater, this.eval_greaterequal, this.eval_conditional, this.eval_system_exp, this.eval_object_exp, this.eval_instvar_exp, this.eval_behavior_exp, this.eval_eventvar_exp][this.type]; var paramsModel = null; this.value = null; this.first = null; this.second = null; this.third = null; this.func = null; this.results = null; this.parameters = null; this.object_type = null; this.beh_index = -1; this.instance_expr = null; this.varindex = -1; this.behavior_type = null; this.varname = null; this.eventvar = null; this.return_string = false; switch (this.type) { case 0: // int case 1: // float case 2: // string this.value = m[1]; break; case 3: // unaryminus this.first = new cr.expNode(owner_, m[1]); break; case 18: // conditional this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); this.third = new cr.expNode(owner_, m[3]); break; case 19: // system_exp this.func = this.runtime.GetObjectReference(m[1]); ; if (this.func === cr.system_object.prototype.exps.random || this.func === cr.system_object.prototype.exps.choose) { this.owner.setVaries(); } this.results = []; this.parameters = []; if (m.length === 3) { paramsModel = m[2]; this.results.length = paramsModel.length + 1; // must also fit 'ret' } else this.results.length = 1; // to fit 'ret' break; case 20: // object_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.beh_index = -1; this.func = this.runtime.GetObjectReference(m[2]); this.return_string = m[3]; if (cr.plugins_.Function && this.func === cr.plugins_.Function.prototype.exps.Call) { this.owner.setVaries(); } if (m[4]) this.instance_expr = new cr.expNode(owner_, m[4]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 6) { paramsModel = m[5]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 21: // instvar_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.return_string = m[2]; if (m[3]) this.instance_expr = new cr.expNode(owner_, m[3]); else this.instance_expr = null; this.varindex = m[4]; break; case 22: // behavior_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.behavior_type = this.object_type.getBehaviorByName(m[2]); ; this.beh_index = this.object_type.getBehaviorIndexByName(m[2]); this.func = this.runtime.GetObjectReference(m[3]); this.return_string = m[4]; if (m[5]) this.instance_expr = new cr.expNode(owner_, m[5]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 7) { paramsModel = m[6]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 23: // eventvar_exp this.varname = m[1]; this.eventvar = null; // assigned in postInit break; } this.owner.maybeVaryForType(this.object_type); if (this.type >= 4 && this.type <= 17) { this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); } if (paramsModel) { var i, len; for (i = 0, len = paramsModel.length; i < len; i++) this.parameters.push(new cr.expNode(owner_, paramsModel[i])); } cr.seal(this); }; ExpNode.prototype.postInit = function () { if (this.type === 23) // eventvar_exp { this.eventvar = this.owner.runtime.getEventVariableByName(this.varname, this.owner.block.parent); ; } if (this.first) this.first.postInit(); if (this.second) this.second.postInit(); if (this.third) this.third.postInit(); if (this.instance_expr) this.instance_expr.postInit(); if (this.parameters) { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.parameters[i].postInit(); } }; var tempValues = []; var tempValuesPtr = -1; function pushTempValue() { ++tempValuesPtr; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; function popTempValue() { --tempValuesPtr; }; function eval_params(parameters, results, temp) { var i, len; for (i = 0, len = parameters.length; i < len; ++i) { parameters[i].get(temp); results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue } } ExpNode.prototype.eval_system_exp = function (ret) { var parameters = this.parameters; var results = this.results; results[0] = ret; var temp = pushTempValue(); eval_params(parameters, results, temp); popTempValue(); this.func.apply(this.runtime.system, results); }; ExpNode.prototype.eval_object_exp = function (ret) { var object_type = this.object_type; var results = this.results; var parameters = this.parameters; var instance_expr = this.instance_expr; var func = this.func; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } results[0] = ret; ret.object_class = object_type; // so expression can access family type if need be var temp = pushTempValue(); eval_params(parameters, results, temp); if (instance_expr) { instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = object_type.instances; // pick from all instances, not SOL } } popTempValue(); var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; var returned_val = func.apply(instances[index], results); ; }; ExpNode.prototype.eval_behavior_exp = function (ret) { var object_type = this.object_type; var results = this.results; var parameters = this.parameters; var instance_expr = this.instance_expr; var beh_index = this.beh_index; var func = this.func; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } results[0] = ret; ret.object_class = object_type; // so expression can access family type if need be var temp = pushTempValue(); eval_params(parameters, results, temp); if (instance_expr) { instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = object_type.instances; // pick from all instances, not SOL } } popTempValue(); var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; var inst = instances[index]; var offset = 0; if (object_type.is_family) { offset = inst.type.family_beh_map[object_type.family_index]; } var returned_val = func.apply(inst.behavior_insts[beh_index + offset], results); ; }; ExpNode.prototype.eval_instvar_exp = function (ret) { var instance_expr = this.instance_expr; var object_type = this.object_type; var varindex = this.varindex; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); var inst; if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } if (instance_expr) { var temp = pushTempValue(); instance_expr.get(temp); if (temp.is_number()) { index = temp.data; var type_instances = object_type.instances; if (type_instances.length !== 0) // avoid NaN result with % { index %= type_instances.length; // wraparound if (index < 0) // offset index += type_instances.length; } inst = object_type.getInstanceByIID(index); var to_ret = inst.instance_vars[varindex]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); popTempValue(); return; // done } popTempValue(); } var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; inst = instances[index]; var offset = 0; if (object_type.is_family) { offset = inst.type.family_var_map[object_type.family_index]; } var to_ret = inst.instance_vars[varindex + offset]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); }; ExpNode.prototype.eval_int = function (ret) { ret.type = cr.exptype.Integer; ret.data = this.value; }; ExpNode.prototype.eval_float = function (ret) { ret.type = cr.exptype.Float; ret.data = this.value; }; ExpNode.prototype.eval_string = function (ret) { ret.type = cr.exptype.String; ret.data = this.value; }; ExpNode.prototype.eval_unaryminus = function (ret) { this.first.get(ret); // retrieve operand if (ret.is_number()) ret.data = -ret.data; }; ExpNode.prototype.eval_add = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data += temp.data; // both operands numbers: add if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_subtract = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data -= temp.data; // both operands numbers: subtract if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_multiply = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data *= temp.data; // both operands numbers: multiply if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_divide = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data /= temp.data; // both operands numbers: divide ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_mod = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data %= temp.data; // both operands numbers: modulo if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_power = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data = Math.pow(ret.data, temp.data); // both operands numbers: raise to power if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_and = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (temp.is_string() || ret.is_string()) this.eval_and_stringconcat(ret, temp); else this.eval_and_logical(ret, temp); popTempValue(); }; ExpNode.prototype.eval_and_stringconcat = function (ret, temp) { if (ret.is_string() && temp.is_string()) this.eval_and_stringconcat_str_str(ret, temp); else this.eval_and_stringconcat_num(ret, temp); }; ExpNode.prototype.eval_and_stringconcat_str_str = function (ret, temp) { ret.data += temp.data; }; ExpNode.prototype.eval_and_stringconcat_num = function (ret, temp) { if (ret.is_string()) { ret.data += (Math.round(temp.data * 1e10) / 1e10).toString(); } else { ret.set_string(ret.data.toString() + temp.data); } }; ExpNode.prototype.eval_and_logical = function (ret, temp) { ret.set_int(ret.data && temp.data ? 1 : 0); }; ExpNode.prototype.eval_or = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { if (ret.data || temp.data) ret.set_int(1); else ret.set_int(0); } popTempValue(); }; ExpNode.prototype.eval_conditional = function (ret) { this.first.get(ret); // condition operand if (ret.data) // is true this.second.get(ret); // evaluate second operand to ret else this.third.get(ret); // evaluate third operand to ret }; ExpNode.prototype.eval_equal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data === temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_notequal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data !== temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_less = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data < temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_lessequal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data <= temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_greater = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data > temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_greaterequal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data >= temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_eventvar_exp = function (ret) { var val = this.eventvar.getValue(); if (cr.is_number(val)) ret.set_float(val); else ret.set_string(val); }; cr.expNode = ExpNode; function ExpValue(type, data) { this.type = type || cr.exptype.Integer; this.data = data || 0; this.object_class = null; ; ; ; if (this.type == cr.exptype.Integer) this.data = Math.floor(this.data); cr.seal(this); }; ExpValue.prototype.is_int = function () { return this.type === cr.exptype.Integer; }; ExpValue.prototype.is_float = function () { return this.type === cr.exptype.Float; }; ExpValue.prototype.is_number = function () { return this.type === cr.exptype.Integer || this.type === cr.exptype.Float; }; ExpValue.prototype.is_string = function () { return this.type === cr.exptype.String; }; ExpValue.prototype.make_int = function () { if (!this.is_int()) { if (this.is_float()) this.data = Math.floor(this.data); // truncate float else if (this.is_string()) this.data = parseInt(this.data, 10); this.type = cr.exptype.Integer; } }; ExpValue.prototype.make_float = function () { if (!this.is_float()) { if (this.is_string()) this.data = parseFloat(this.data); this.type = cr.exptype.Float; } }; ExpValue.prototype.make_string = function () { if (!this.is_string()) { this.data = this.data.toString(); this.type = cr.exptype.String; } }; ExpValue.prototype.set_int = function (val) { ; this.type = cr.exptype.Integer; this.data = Math.floor(val); }; ExpValue.prototype.set_float = function (val) { ; this.type = cr.exptype.Float; this.data = val; }; ExpValue.prototype.set_string = function (val) { ; this.type = cr.exptype.String; this.data = val; }; ExpValue.prototype.set_any = function (val) { if (cr.is_number(val)) { this.type = cr.exptype.Float; this.data = val; } else if (cr.is_string(val)) { this.type = cr.exptype.String; this.data = val.toString(); } else { this.type = cr.exptype.Integer; this.data = 0; } }; cr.expvalue = ExpValue; cr.exptype = { Integer: 0, // emulated; no native integer support in javascript Float: 1, String: 2 }; }()); ; cr.system_object = function (runtime) { this.runtime = runtime; this.waits = []; }; cr.system_object.prototype.saveToJSON = function () { var o = {}; var i, len, j, lenj, p, w, t, sobj; o["waits"] = []; var owaits = o["waits"]; var waitobj; for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; waitobj = { "t": w.time, "st": w.signaltag, "s": w.signalled, "ev": w.ev.sid, "sm": [], "sols": {} }; if (w.ev.actions[w.actindex]) waitobj["act"] = w.ev.actions[w.actindex].sid; for (j = 0, lenj = w.solModifiers.length; j < lenj; j++) waitobj["sm"].push(w.solModifiers[j].sid); for (p in w.sols) { if (w.sols.hasOwnProperty(p)) { t = this.runtime.types_by_index[parseInt(p, 10)]; ; sobj = { "sa": w.sols[p].sa, "insts": [] }; for (j = 0, lenj = w.sols[p].insts.length; j < lenj; j++) sobj["insts"].push(w.sols[p].insts[j].uid); waitobj["sols"][t.sid.toString()] = sobj; } } owaits.push(waitobj); } return o; }; cr.system_object.prototype.loadFromJSON = function (o) { var owaits = o["waits"]; var i, len, j, lenj, p, w, addWait, e, aindex, t, savedsol, nusol, inst; cr.clearArray(this.waits); for (i = 0, len = owaits.length; i < len; i++) { w = owaits[i]; e = this.runtime.blocksBySid[w["ev"].toString()]; if (!e) continue; // event must've gone missing aindex = -1; for (j = 0, lenj = e.actions.length; j < lenj; j++) { if (e.actions[j].sid === w["act"]) { aindex = j; break; } } if (aindex === -1) continue; // action must've gone missing addWait = {}; addWait.sols = {}; addWait.solModifiers = []; addWait.deleteme = false; addWait.time = w["t"]; addWait.signaltag = w["st"] || ""; addWait.signalled = !!w["s"]; addWait.ev = e; addWait.actindex = aindex; for (j = 0, lenj = w["sm"].length; j < lenj; j++) { t = this.runtime.getObjectTypeBySid(w["sm"][j]); if (t) addWait.solModifiers.push(t); } for (p in w["sols"]) { if (w["sols"].hasOwnProperty(p)) { t = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!t) continue; // type must've been deleted savedsol = w["sols"][p]; nusol = { sa: savedsol["sa"], insts: [] }; for (j = 0, lenj = savedsol["insts"].length; j < lenj; j++) { inst = this.runtime.getObjectByUID(savedsol["insts"][j]); if (inst) nusol.insts.push(inst); } addWait.sols[t.index.toString()] = nusol; } } this.waits.push(addWait); } }; (function () { var sysProto = cr.system_object.prototype; function SysCnds() {}; SysCnds.prototype.EveryTick = function() { return true; }; SysCnds.prototype.OnLayoutStart = function() { return true; }; SysCnds.prototype.OnLayoutEnd = function() { return true; }; SysCnds.prototype.Compare = function(x, cmp, y) { return cr.do_cmp(x, cmp, y); }; SysCnds.prototype.CompareTime = function (cmp, t) { var elapsed = this.runtime.kahanTime.sum; if (cmp === 0) { var cnd = this.runtime.getCurrentCondition(); if (!cnd.extra["CompareTime_executed"]) { if (elapsed >= t) { cnd.extra["CompareTime_executed"] = true; return true; } } return false; } return cr.do_cmp(elapsed, cmp, t); }; SysCnds.prototype.LayerVisible = function (layer) { if (!layer) return false; else return layer.visible; }; SysCnds.prototype.LayerEmpty = function (layer) { if (!layer) return false; else return !layer.instances.length; }; SysCnds.prototype.LayerCmpOpacity = function (layer, cmp, opacity_) { if (!layer) return false; return cr.do_cmp(layer.opacity * 100, cmp, opacity_); }; SysCnds.prototype.Repeat = function (count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; i < count && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; i < count && !current_loop.stopped; i++) { current_loop.index = i; current_event.retrigger(); } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.While = function (count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; if (!current_event.retrigger()) // one of the other conditions returned false current_loop.stopped = true; // break this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; !current_loop.stopped; i++) { current_loop.index = i; if (!current_event.retrigger()) current_loop.stopped = true; } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.For = function (name, start, end) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(name); var i; if (end < start) { if (solModifierAfterCnds) { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } else { if (solModifierAfterCnds) { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } this.runtime.popLoopStack(); return false; }; var foreach_instancestack = []; var foreach_instanceptr = -1; SysCnds.prototype.ForEach = function (obj) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } cr.clearArray(instances); this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; function foreach_sortinstances(a, b) { var va = a.extra["c2_feo_val"]; var vb = b.extra["c2_feo_val"]; if (cr.is_number(va) && cr.is_number(vb)) return va - vb; else { va = "" + va; vb = "" + vb; if (va < vb) return -1; else if (va > vb) return 1; else return 0; } }; SysCnds.prototype.ForEachOrdered = function (obj, exp, order) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var current_condition = this.runtime.getCurrentCondition(); var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; for (i = 0, len = instances.length; i < len; i++) { instances[i].extra["c2_feo_val"] = current_condition.parameters[1].get(i); } instances.sort(foreach_sortinstances); if (order === 1) instances.reverse(); var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } cr.clearArray(instances); this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; SysCnds.prototype.PickByComparison = function (obj_, exp_, cmp_, val_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) cr.clearArray(sol.else_instances); var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); val_ = current_condition.parameters[3].get(i); if (cr.do_cmp(exp_, cmp_, val_)) { k++; } else { sol.else_instances.push(inst); } } cr.truncateArray(tmp_instances, k); sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); cr.clearArray(tmp_instances); foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.PickByEvaluate = function (obj_, exp_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) cr.clearArray(sol.else_instances); var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); if (exp_) { k++; } else { sol.else_instances.push(inst); } } cr.truncateArray(tmp_instances, k); sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); cr.clearArray(tmp_instances); foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.TriggerOnce = function () { var cndextra = this.runtime.getCurrentCondition().extra; if (typeof cndextra["TriggerOnce_lastTick"] === "undefined") cndextra["TriggerOnce_lastTick"] = -1; var last_tick = cndextra["TriggerOnce_lastTick"]; var cur_tick = this.runtime.tickcount; cndextra["TriggerOnce_lastTick"] = cur_tick; return this.runtime.layout_first_tick || last_tick !== cur_tick - 1; }; SysCnds.prototype.Every = function (seconds) { var cnd = this.runtime.getCurrentCondition(); var last_time = cnd.extra["Every_lastTime"] || 0; var cur_time = this.runtime.kahanTime.sum; if (typeof cnd.extra["Every_seconds"] === "undefined") cnd.extra["Every_seconds"] = seconds; var this_seconds = cnd.extra["Every_seconds"]; if (cur_time >= last_time + this_seconds) { cnd.extra["Every_lastTime"] = last_time + this_seconds; if (cur_time >= cnd.extra["Every_lastTime"] + 0.04) { cnd.extra["Every_lastTime"] = cur_time; } cnd.extra["Every_seconds"] = seconds; return true; } else if (cur_time < last_time - 0.1) { cnd.extra["Every_lastTime"] = cur_time; } return false; }; SysCnds.prototype.PickNth = function (obj, index) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); index = cr.floor(index); if (index < 0 || index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.PickRandom = function (obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var index = cr.floor(Math.random() * instances.length); if (index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.CompareVar = function (v, cmp, val) { return cr.do_cmp(v.getValue(), cmp, val); }; SysCnds.prototype.IsGroupActive = function (group) { var g = this.runtime.groups_by_name[group.toLowerCase()]; return g && g.group_active; }; SysCnds.prototype.IsPreview = function () { return typeof cr_is_preview !== "undefined"; }; SysCnds.prototype.PickAll = function (obj) { if (!obj) return false; if (!obj.instances.length) return false; var sol = obj.getCurrentSol(); sol.select_all = true; obj.applySolToContainer(); return true; }; SysCnds.prototype.IsMobile = function () { return this.runtime.isMobile; }; SysCnds.prototype.CompareBetween = function (x, a, b) { return x >= a && x <= b; }; SysCnds.prototype.Else = function () { var current_frame = this.runtime.getCurrentEventStack(); if (current_frame.else_branch_ran) return false; // another event in this else-if chain has run else return !current_frame.last_event_true; /* var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var prev_event = current_event.prev_block; if (!prev_event) return false; if (prev_event.is_logical) return !this.runtime.last_event_true; var i, len, j, lenj, s, sol, temp, inst, any_picked = false; for (i = 0, len = prev_event.cndReferences.length; i < len; i++) { s = prev_event.cndReferences[i]; sol = s.getCurrentSol(); if (sol.select_all || sol.instances.length === s.instances.length) { sol.select_all = false; sol.instances.length = 0; } else { if (sol.instances.length === 1 && sol.else_instances.length === 0 && s.instances.length >= 2) { inst = sol.instances[0]; sol.instances.length = 0; for (j = 0, lenj = s.instances.length; j < lenj; j++) { if (s.instances[j] != inst) sol.instances.push(s.instances[j]); } any_picked = true; } else { temp = sol.instances; sol.instances = sol.else_instances; sol.else_instances = temp; any_picked = true; } } } return any_picked; */ }; SysCnds.prototype.OnLoadFinished = function () { return true; }; SysCnds.prototype.OnCanvasSnapshot = function () { return true; }; SysCnds.prototype.EffectsSupported = function () { return !!this.runtime.glwrap; }; SysCnds.prototype.OnSaveComplete = function () { return true; }; SysCnds.prototype.OnLoadComplete = function () { return true; }; SysCnds.prototype.OnLoadFailed = function () { return true; }; SysCnds.prototype.ObjectUIDExists = function (u) { return !!this.runtime.getObjectByUID(u); }; SysCnds.prototype.IsOnPlatform = function (p) { var rt = this.runtime; switch (p) { case 0: // HTML5 website return !rt.isDomFree && !rt.isNodeWebkit && !rt.isCordova && !rt.isWinJS && !rt.isWindowsPhone8 && !rt.isBlackberry10 && !rt.isAmazonWebApp; case 1: // iOS return rt.isiOS; case 2: // Android return rt.isAndroid; case 3: // Windows 8 return rt.isWindows8App; case 4: // Windows Phone 8 return rt.isWindowsPhone8; case 5: // Blackberry 10 return rt.isBlackberry10; case 6: // Tizen return rt.isTizen; case 7: // CocoonJS return rt.isCocoonJs; case 8: // Cordova return rt.isCordova; case 9: // Scirra Arcade return rt.isArcade; case 10: // node-webkit return rt.isNodeWebkit; case 11: // crosswalk return rt.isCrosswalk; case 12: // amazon webapp return rt.isAmazonWebApp; default: // should not be possible return false; } }; var cacheRegex = null; var lastRegex = ""; var lastFlags = ""; function getRegex(regex_, flags_) { if (!cacheRegex || regex_ !== lastRegex || flags_ !== lastFlags) { cacheRegex = new RegExp(regex_, flags_); lastRegex = regex_; lastFlags = flags_; } cacheRegex.lastIndex = 0; // reset return cacheRegex; }; SysCnds.prototype.RegexTest = function (str_, regex_, flags_) { var regex = getRegex(regex_, flags_); return regex.test(str_); }; var tmp_arr = []; SysCnds.prototype.PickOverlappingPoint = function (obj_, x_, y_) { if (!obj_) return false; var sol = obj_.getCurrentSol(); var instances = sol.getObjects(); var current_event = this.runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; var cnd = this.runtime.getCurrentCondition(); var i, len, inst, pick; if (sol.select_all) { cr.shallowAssignArray(tmp_arr, instances); cr.clearArray(sol.else_instances); sol.select_all = false; cr.clearArray(sol.instances); } else { if (orblock) { cr.shallowAssignArray(tmp_arr, sol.else_instances); cr.clearArray(sol.else_instances); } else { cr.shallowAssignArray(tmp_arr, instances); cr.clearArray(sol.instances); } } for (i = 0, len = tmp_arr.length; i < len; ++i) { inst = tmp_arr[i]; inst.update_bbox(); pick = cr.xor(inst.contains_pt(x_, y_), cnd.inverted); if (pick) sol.instances.push(inst); else sol.else_instances.push(inst); } obj_.applySolToContainer(); return cr.xor(!!sol.instances.length, cnd.inverted); }; SysCnds.prototype.IsNaN = function (n) { return !!isNaN(n); }; SysCnds.prototype.AngleWithin = function (a1, within, a2) { return cr.angleDiff(cr.to_radians(a1), cr.to_radians(a2)) <= cr.to_radians(within); }; SysCnds.prototype.IsClockwiseFrom = function (a1, a2) { return cr.angleClockwise(cr.to_radians(a1), cr.to_radians(a2)); }; SysCnds.prototype.IsBetweenAngles = function (a, la, ua) { var angle = cr.to_clamped_radians(a); var lower = cr.to_clamped_radians(la); var upper = cr.to_clamped_radians(ua); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; SysCnds.prototype.IsValueType = function (x, t) { if (typeof x === "number") return t === 0; else // string return t === 1; }; sysProto.cnds = new SysCnds(); function SysActs() {}; SysActs.prototype.GoToLayout = function (to) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout ; this.runtime.changelayout = to; }; SysActs.prototype.NextPrevLayout = function (prev) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout var index = this.runtime.layouts_by_index.indexOf(this.runtime.running_layout); if (prev && index === 0) return; // cannot go to previous layout from first layout if (!prev && index === this.runtime.layouts_by_index.length - 1) return; // cannot go to next layout from last layout var to = this.runtime.layouts_by_index[index + (prev ? -1 : 1)]; ; this.runtime.changelayout = to; }; SysActs.prototype.CreateObject = function (obj, layer, x, y) { if (!layer || !obj) return; var inst = this.runtime.createInstance(obj, layer, x, y); if (!inst) return; this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = s; } } }; SysActs.prototype.SetLayerVisible = function (layer, visible_) { if (!layer) return; if (layer.visible !== visible_) { layer.visible = visible_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerOpacity = function (layer, opacity_) { if (!layer) return; opacity_ = cr.clamp(opacity_ / 100, 0, 1); if (layer.opacity !== opacity_) { layer.opacity = opacity_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerScaleRate = function (layer, sr) { if (!layer) return; if (layer.zoomRate !== sr) { layer.zoomRate = sr; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerForceOwnTexture = function (layer, f) { if (!layer) return; f = !!f; if (layer.forceOwnTexture !== f) { layer.forceOwnTexture = f; this.runtime.redraw = true; } }; SysActs.prototype.SetLayoutScale = function (s) { if (!this.runtime.running_layout) return; if (this.runtime.running_layout.scale !== s) { this.runtime.running_layout.scale = s; this.runtime.running_layout.boundScrolling(); this.runtime.redraw = true; } }; SysActs.prototype.ScrollX = function(x) { this.runtime.running_layout.scrollToX(x); }; SysActs.prototype.ScrollY = function(y) { this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.Scroll = function(x, y) { this.runtime.running_layout.scrollToX(x); this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.ScrollToObject = function(obj) { var inst = obj.getFirstPicked(); if (inst) { this.runtime.running_layout.scrollToX(inst.x); this.runtime.running_layout.scrollToY(inst.y); } }; SysActs.prototype.SetVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(x); else v.setValue(parseFloat(x)); } else if (v.vartype === 1) v.setValue(x.toString()); }; SysActs.prototype.AddVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() + x); else v.setValue(v.getValue() + parseFloat(x)); } else if (v.vartype === 1) v.setValue(v.getValue() + x.toString()); }; SysActs.prototype.SubVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() - x); else v.setValue(v.getValue() - parseFloat(x)); } }; SysActs.prototype.SetGroupActive = function (group, active) { var g = this.runtime.groups_by_name[group.toLowerCase()]; if (!g) return; switch (active) { case 0: g.setGroupActive(false); break; case 1: g.setGroupActive(true); break; case 2: g.setGroupActive(!g.group_active); break; } }; SysActs.prototype.SetTimescale = function (ts_) { var ts = ts_; if (ts < 0) ts = 0; this.runtime.timescale = ts; }; SysActs.prototype.SetObjectTimescale = function (obj, ts_) { var ts = ts_; if (ts < 0) ts = 0; if (!obj) return; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = ts; } }; SysActs.prototype.RestoreObjectTimescale = function (obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = -1.0; } }; var waitobjrecycle = []; function allocWaitObject() { var w; if (waitobjrecycle.length) w = waitobjrecycle.pop(); else { w = {}; w.sols = {}; w.solModifiers = []; } w.deleteme = false; return w; }; function freeWaitObject(w) { cr.wipe(w.sols); cr.clearArray(w.solModifiers); waitobjrecycle.push(w); }; var solstateobjects = []; function allocSolStateObject() { var s; if (solstateobjects.length) s = solstateobjects.pop(); else { s = {}; s.insts = []; } s.sa = false; return s; }; function freeSolStateObject(s) { cr.clearArray(s.insts); solstateobjects.push(s); }; SysActs.prototype.Wait = function (seconds) { if (seconds < 0) return; var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = this.runtime.kahanTime.sum + seconds; waitobj.signaltag = ""; waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.WaitForSignal = function (tag) { var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = -1; waitobj.signaltag = tag.toLowerCase(); waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.Signal = function (tag) { var lowertag = tag.toLowerCase(); var i, len, w; for (i = 0, len = this.waits.length; i < len; ++i) { w = this.waits[i]; if (w.time !== -1) continue; // timer wait, ignore if (w.signaltag === lowertag) // waiting for this signal w.signalled = true; // will run on next check } }; SysActs.prototype.SetLayerScale = function (layer, scale) { if (!layer) return; if (layer.scale === scale) return; layer.scale = scale; this.runtime.redraw = true; }; SysActs.prototype.ResetGlobals = function () { var i, len, g; for (i = 0, len = this.runtime.all_global_vars.length; i < len; i++) { g = this.runtime.all_global_vars[i]; g.data = g.initial; } }; SysActs.prototype.SetLayoutAngle = function (a) { a = cr.to_radians(a); a = cr.clamp_angle(a); if (this.runtime.running_layout) { if (this.runtime.running_layout.angle !== a) { this.runtime.running_layout.angle = a; this.runtime.redraw = true; } } }; SysActs.prototype.SetLayerAngle = function (layer, a) { if (!layer) return; a = cr.to_radians(a); a = cr.clamp_angle(a); if (layer.angle === a) return; layer.angle = a; this.runtime.redraw = true; }; SysActs.prototype.SetLayerParallax = function (layer, px, py) { if (!layer) return; if (layer.parallaxX === px / 100 && layer.parallaxY === py / 100) return; layer.parallaxX = px / 100; layer.parallaxY = py / 100; if (layer.parallaxX !== 1 || layer.parallaxY !== 1) { var i, len, instances = layer.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].type.any_instance_parallaxed = true; } } this.runtime.redraw = true; }; SysActs.prototype.SetLayerBackground = function (layer, c) { if (!layer) return; var r = cr.GetRValue(c); var g = cr.GetGValue(c); var b = cr.GetBValue(c); if (layer.background_color[0] === r && layer.background_color[1] === g && layer.background_color[2] === b) return; layer.background_color[0] = r; layer.background_color[1] = g; layer.background_color[2] = b; this.runtime.redraw = true; }; SysActs.prototype.SetLayerTransparent = function (layer, t) { if (!layer) return; if (!!t === !!layer.transparent) return; layer.transparent = !!t; this.runtime.redraw = true; }; SysActs.prototype.SetLayerBlendMode = function (layer, bm) { if (!layer) return; if (layer.blend_mode === bm) return; layer.blend_mode = bm; layer.compositeOp = cr.effectToCompositeOp(layer.blend_mode); if (this.runtime.gl) cr.setGLBlend(layer, layer.blend_mode, this.runtime.gl); this.runtime.redraw = true; }; SysActs.prototype.StopLoop = function () { if (this.runtime.loop_stack_index < 0) return; // no loop currently running this.runtime.getCurrentLoop().stopped = true; }; SysActs.prototype.GoToLayoutByName = function (layoutname) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to different layout ; var l; for (l in this.runtime.layouts) { if (this.runtime.layouts.hasOwnProperty(l) && cr.equals_nocase(l, layoutname)) { this.runtime.changelayout = this.runtime.layouts[l]; return; } } }; SysActs.prototype.RestartLayout = function (layoutname) { if (this.runtime.isloading) return; // cannot restart loader layouts if (this.runtime.changelayout) return; // already changing to a different layout ; if (!this.runtime.running_layout) return; this.runtime.changelayout = this.runtime.running_layout; var i, len, g; for (i = 0, len = this.runtime.allGroups.length; i < len; i++) { g = this.runtime.allGroups[i]; g.setGroupActive(g.initially_activated); } }; SysActs.prototype.SnapshotCanvas = function (format_, quality_) { this.runtime.doCanvasSnapshot(format_ === 0 ? "image/png" : "image/jpeg", quality_ / 100); }; SysActs.prototype.SetCanvasSize = function (w, h) { if (w <= 0 || h <= 0) return; var mode = this.runtime.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.runtime.isNodeFullscreen); if (isfullscreen && this.runtime.fullscreen_scaling > 0) mode = this.runtime.fullscreen_scaling; if (mode === 0) { this.runtime["setSize"](w, h, true); } else { this.runtime.original_width = w; this.runtime.original_height = h; this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); } }; SysActs.prototype.SetLayoutEffectEnabled = function (enable_, effectname_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; this.runtime.running_layout.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectEnabled = function (layer, enable_, effectname_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; layer.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayoutEffectParam = function (effectname_, index_, value_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var params = this.runtime.running_layout.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectParam = function (layer, effectname_, index_, value_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var params = layer.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SaveState = function (slot_) { this.runtime.saveToSlot = slot_; }; SysActs.prototype.LoadState = function (slot_) { this.runtime.loadFromSlot = slot_; }; SysActs.prototype.LoadStateJSON = function (jsonstr_) { this.runtime.loadFromJson = jsonstr_; }; SysActs.prototype.SetHalfFramerateMode = function (set_) { this.runtime.halfFramerateMode = (set_ !== 0); }; SysActs.prototype.SetFullscreenQuality = function (q) { var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen); if (!isfullscreen && this.runtime.fullscreen_mode === 0) return; this.runtime.wantFullscreenScalingQuality = (q !== 0); this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); }; SysActs.prototype.ResetPersisted = function () { var i, len; for (i = 0, len = this.runtime.layouts_by_index.length; i < len; ++i) { this.runtime.layouts_by_index[i].persist_data = {}; this.runtime.layouts_by_index[i].first_visit = true; } }; SysActs.prototype.RecreateInitialObjects = function (obj, x1, y1, x2, y2) { if (!obj) return; this.runtime.running_layout.recreateInitialObjects(obj, x1, y1, x2, y2); }; SysActs.prototype.SetPixelRounding = function (m) { this.runtime.pixel_rounding = (m !== 0); this.runtime.redraw = true; }; SysActs.prototype.SetMinimumFramerate = function (f) { if (f < 1) f = 1; if (f > 120) f = 120; this.runtime.minimumFramerate = f; }; sysProto.acts = new SysActs(); function SysExps() {}; SysExps.prototype["int"] = function(ret, x) { if (cr.is_string(x)) { ret.set_int(parseInt(x, 10)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_int(x); }; SysExps.prototype["float"] = function(ret, x) { if (cr.is_string(x)) { ret.set_float(parseFloat(x)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_float(x); }; SysExps.prototype.str = function(ret, x) { if (cr.is_string(x)) ret.set_string(x); else ret.set_string(x.toString()); }; SysExps.prototype.len = function(ret, x) { ret.set_int(x.length || 0); }; SysExps.prototype.random = function (ret, a, b) { if (b === undefined) { ret.set_float(Math.random() * a); } else { ret.set_float(Math.random() * (b - a) + a); } }; SysExps.prototype.sqrt = function(ret, x) { ret.set_float(Math.sqrt(x)); }; SysExps.prototype.abs = function(ret, x) { ret.set_float(Math.abs(x)); }; SysExps.prototype.round = function(ret, x) { ret.set_int(Math.round(x)); }; SysExps.prototype.floor = function(ret, x) { ret.set_int(Math.floor(x)); }; SysExps.prototype.ceil = function(ret, x) { ret.set_int(Math.ceil(x)); }; SysExps.prototype.sin = function(ret, x) { ret.set_float(Math.sin(cr.to_radians(x))); }; SysExps.prototype.cos = function(ret, x) { ret.set_float(Math.cos(cr.to_radians(x))); }; SysExps.prototype.tan = function(ret, x) { ret.set_float(Math.tan(cr.to_radians(x))); }; SysExps.prototype.asin = function(ret, x) { ret.set_float(cr.to_degrees(Math.asin(x))); }; SysExps.prototype.acos = function(ret, x) { ret.set_float(cr.to_degrees(Math.acos(x))); }; SysExps.prototype.atan = function(ret, x) { ret.set_float(cr.to_degrees(Math.atan(x))); }; SysExps.prototype.exp = function(ret, x) { ret.set_float(Math.exp(x)); }; SysExps.prototype.ln = function(ret, x) { ret.set_float(Math.log(x)); }; SysExps.prototype.log10 = function(ret, x) { ret.set_float(Math.log(x) / Math.LN10); }; SysExps.prototype.max = function(ret) { var max_ = arguments[1]; if (typeof max_ !== "number") max_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (max_ < a) max_ = a; } ret.set_float(max_); }; SysExps.prototype.min = function(ret) { var min_ = arguments[1]; if (typeof min_ !== "number") min_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (min_ > a) min_ = a; } ret.set_float(min_); }; SysExps.prototype.dt = function(ret) { ret.set_float(this.runtime.dt); }; SysExps.prototype.timescale = function(ret) { ret.set_float(this.runtime.timescale); }; SysExps.prototype.wallclocktime = function(ret) { ret.set_float((Date.now() - this.runtime.start_time) / 1000.0); }; SysExps.prototype.time = function(ret) { ret.set_float(this.runtime.kahanTime.sum); }; SysExps.prototype.tickcount = function(ret) { ret.set_int(this.runtime.tickcount); }; SysExps.prototype.objectcount = function(ret) { ret.set_int(this.runtime.objectcount); }; SysExps.prototype.fps = function(ret) { ret.set_int(this.runtime.fps); }; SysExps.prototype.loopindex = function(ret, name_) { var loop, i, len; if (!this.runtime.loop_stack.length) { ret.set_int(0); return; } if (name_) { for (i = this.runtime.loop_stack_index; i >= 0; --i) { loop = this.runtime.loop_stack[i]; if (loop.name === name_) { ret.set_int(loop.index); return; } } ret.set_int(0); } else { loop = this.runtime.getCurrentLoop(); ret.set_int(loop ? loop.index : -1); } }; SysExps.prototype.distance = function(ret, x1, y1, x2, y2) { ret.set_float(cr.distanceTo(x1, y1, x2, y2)); }; SysExps.prototype.angle = function(ret, x1, y1, x2, y2) { ret.set_float(cr.to_degrees(cr.angleTo(x1, y1, x2, y2))); }; SysExps.prototype.scrollx = function(ret) { ret.set_float(this.runtime.running_layout.scrollX); }; SysExps.prototype.scrolly = function(ret) { ret.set_float(this.runtime.running_layout.scrollY); }; SysExps.prototype.newline = function(ret) { ret.set_string("\n"); }; SysExps.prototype.lerp = function(ret, a, b, x) { ret.set_float(cr.lerp(a, b, x)); }; SysExps.prototype.qarp = function(ret, a, b, c, x) { ret.set_float(cr.qarp(a, b, c, x)); }; SysExps.prototype.cubic = function(ret, a, b, c, d, x) { ret.set_float(cr.cubic(a, b, c, d, x)); }; SysExps.prototype.cosp = function(ret, a, b, x) { ret.set_float(cr.cosp(a, b, x)); }; SysExps.prototype.windowwidth = function(ret) { ret.set_int(this.runtime.width); }; SysExps.prototype.windowheight = function(ret) { ret.set_int(this.runtime.height); }; SysExps.prototype.uppercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toUpperCase() : ""); }; SysExps.prototype.lowercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toLowerCase() : ""); }; SysExps.prototype.clamp = function(ret, x, l, u) { if (x < l) ret.set_float(l); else if (x > u) ret.set_float(u); else ret.set_float(x); }; SysExps.prototype.layerscale = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.scale); }; SysExps.prototype.layeropacity = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.opacity * 100); }; SysExps.prototype.layerscalerate = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.zoomRate); }; SysExps.prototype.layerparallaxx = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxX * 100); }; SysExps.prototype.layerparallaxy = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxY * 100); }; SysExps.prototype.layerindex = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_int(-1); else ret.set_int(layer.index); }; SysExps.prototype.layoutscale = function (ret) { if (this.runtime.running_layout) ret.set_float(this.runtime.running_layout.scale); else ret.set_float(0); }; SysExps.prototype.layoutangle = function (ret) { ret.set_float(cr.to_degrees(this.runtime.running_layout.angle)); }; SysExps.prototype.layerangle = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(cr.to_degrees(layer.angle)); }; SysExps.prototype.layoutwidth = function (ret) { ret.set_int(this.runtime.running_layout.width); }; SysExps.prototype.layoutheight = function (ret) { ret.set_int(this.runtime.running_layout.height); }; SysExps.prototype.find = function (ret, text, searchstr) { if (cr.is_string(text) && cr.is_string(searchstr)) ret.set_int(text.search(new RegExp(cr.regexp_escape(searchstr), "i"))); else ret.set_int(-1); }; SysExps.prototype.left = function (ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(0, n) : ""); }; SysExps.prototype.right = function (ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(text.length - n) : ""); }; SysExps.prototype.mid = function (ret, text, index_, length_) { ret.set_string(cr.is_string(text) ? text.substr(index_, length_) : ""); }; SysExps.prototype.tokenat = function (ret, text, index_, sep) { if (cr.is_string(text) && cr.is_string(sep)) { var arr = text.split(sep); var i = cr.floor(index_); if (i < 0 || i >= arr.length) ret.set_string(""); else ret.set_string(arr[i]); } else ret.set_string(""); }; SysExps.prototype.tokencount = function (ret, text, sep) { if (cr.is_string(text) && text.length) ret.set_int(text.split(sep).length); else ret.set_int(0); }; SysExps.prototype.replace = function (ret, text, find_, replace_) { if (cr.is_string(text) && cr.is_string(find_) && cr.is_string(replace_)) ret.set_string(text.replace(new RegExp(cr.regexp_escape(find_), "gi"), replace_)); else ret.set_string(cr.is_string(text) ? text : ""); }; SysExps.prototype.trim = function (ret, text) { ret.set_string(cr.is_string(text) ? text.trim() : ""); }; SysExps.prototype.pi = function (ret) { ret.set_float(cr.PI); }; SysExps.prototype.layoutname = function (ret) { if (this.runtime.running_layout) ret.set_string(this.runtime.running_layout.name); else ret.set_string(""); }; SysExps.prototype.renderer = function (ret) { ret.set_string(this.runtime.gl ? "webgl" : "canvas2d"); }; SysExps.prototype.rendererdetail = function (ret) { ret.set_string(this.runtime.glUnmaskedRenderer); }; SysExps.prototype.anglediff = function (ret, a, b) { ret.set_float(cr.to_degrees(cr.angleDiff(cr.to_radians(a), cr.to_radians(b)))); }; SysExps.prototype.choose = function (ret) { var index = cr.floor(Math.random() * (arguments.length - 1)); ret.set_any(arguments[index + 1]); }; SysExps.prototype.rgb = function (ret, r, g, b) { ret.set_int(cr.RGB(r, g, b)); }; SysExps.prototype.projectversion = function (ret) { ret.set_string(this.runtime.versionstr); }; SysExps.prototype.projectname = function (ret) { ret.set_string(this.runtime.projectName); }; SysExps.prototype.anglelerp = function (ret, a, b, x) { a = cr.to_radians(a); b = cr.to_radians(b); var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { ret.set_float(cr.to_clamped_degrees(a + diff * x)); } else { ret.set_float(cr.to_clamped_degrees(a - diff * x)); } }; SysExps.prototype.anglerotate = function (ret, a, b, c) { a = cr.to_radians(a); b = cr.to_radians(b); c = cr.to_radians(c); ret.set_float(cr.to_clamped_degrees(cr.angleRotate(a, b, c))); }; SysExps.prototype.zeropad = function (ret, n, d) { var s = (n < 0 ? "-" : ""); if (n < 0) n = -n; var zeroes = d - n.toString().length; for (var i = 0; i < zeroes; i++) s += "0"; ret.set_string(s + n.toString()); }; SysExps.prototype.cpuutilisation = function (ret) { ret.set_float(this.runtime.cpuutilisation / 1000); }; SysExps.prototype.viewportleft = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewLeft : 0); }; SysExps.prototype.viewporttop = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewTop : 0); }; SysExps.prototype.viewportright = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewRight : 0); }; SysExps.prototype.viewportbottom = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewBottom : 0); }; SysExps.prototype.loadingprogress = function (ret) { ret.set_float(this.runtime.loadingprogress); }; SysExps.prototype.unlerp = function(ret, a, b, y) { ret.set_float(cr.unlerp(a, b, y)); }; SysExps.prototype.canvassnapshot = function (ret) { ret.set_string(this.runtime.snapshotData); }; SysExps.prototype.urlencode = function (ret, s) { ret.set_string(encodeURIComponent(s)); }; SysExps.prototype.urldecode = function (ret, s) { ret.set_string(decodeURIComponent(s)); }; SysExps.prototype.canvastolayerx = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, true) : 0); }; SysExps.prototype.canvastolayery = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, false) : 0); }; SysExps.prototype.layertocanvasx = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, true) : 0); }; SysExps.prototype.layertocanvasy = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, false) : 0); }; SysExps.prototype.savestatejson = function (ret) { ret.set_string(this.runtime.lastSaveJson); }; SysExps.prototype.imagememoryusage = function (ret) { if (this.runtime.glwrap) ret.set_float(Math.round(100 * this.runtime.glwrap.estimateVRAM() / (1024 * 1024)) / 100); else ret.set_float(0); }; SysExps.prototype.regexsearch = function (ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); ret.set_int(str_ ? str_.search(regex) : -1); }; SysExps.prototype.regexreplace = function (ret, str_, regex_, flags_, replace_) { var regex = getRegex(regex_, flags_); ret.set_string(str_ ? str_.replace(regex, replace_) : ""); }; var regexMatches = []; var lastMatchesStr = ""; var lastMatchesRegex = ""; var lastMatchesFlags = ""; function updateRegexMatches(str_, regex_, flags_) { if (str_ === lastMatchesStr && regex_ === lastMatchesRegex && flags_ === lastMatchesFlags) return; var regex = getRegex(regex_, flags_); regexMatches = str_.match(regex); lastMatchesStr = str_; lastMatchesRegex = regex_; lastMatchesFlags = flags_; }; SysExps.prototype.regexmatchcount = function (ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); updateRegexMatches(str_, regex_, flags_); ret.set_int(regexMatches ? regexMatches.length : 0); }; SysExps.prototype.regexmatchat = function (ret, str_, regex_, flags_, index_) { index_ = Math.floor(index_); var regex = getRegex(regex_, flags_); updateRegexMatches(str_, regex_, flags_); if (!regexMatches || index_ < 0 || index_ >= regexMatches.length) ret.set_string(""); else ret.set_string(regexMatches[index_]); }; SysExps.prototype.infinity = function (ret) { ret.set_float(Infinity); }; SysExps.prototype.setbit = function (ret, n, b, v) { n = n | 0; b = b | 0; v = (v !== 0 ? 1 : 0); ret.set_int((n & ~(1 << b)) | (v << b)); }; SysExps.prototype.togglebit = function (ret, n, b) { n = n | 0; b = b | 0; ret.set_int(n ^ (1 << b)); }; SysExps.prototype.getbit = function (ret, n, b) { n = n | 0; b = b | 0; ret.set_int((n & (1 << b)) ? 1 : 0); }; SysExps.prototype.originalwindowwidth = function (ret) { ret.set_int(this.runtime.original_width); }; SysExps.prototype.originalwindowheight = function (ret) { ret.set_int(this.runtime.original_height); }; sysProto.exps = new SysExps(); sysProto.runWaits = function () { var i, j, len, w, k, s, ss; var evinfo = this.runtime.getCurrentEventStack(); for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; if (w.time === -1) // signalled wait { if (!w.signalled) continue; // not yet signalled } else // timer wait { if (w.time > this.runtime.kahanTime.sum) continue; // timer not yet expired } evinfo.current_event = w.ev; evinfo.actindex = w.actindex; evinfo.cndindex = 0; for (k in w.sols) { if (w.sols.hasOwnProperty(k)) { s = this.runtime.types_by_index[parseInt(k, 10)].getCurrentSol(); ss = w.sols[k]; s.select_all = ss.sa; cr.shallowAssignArray(s.instances, ss.insts); freeSolStateObject(ss); } } w.ev.resume_actions_and_subevents(); this.runtime.clearSol(w.solModifiers); w.deleteme = true; } for (i = 0, j = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; this.waits[j] = w; if (w.deleteme) freeWaitObject(w); else j++; } cr.truncateArray(this.waits, j); }; }()); ; (function () { cr.add_common_aces = function (m, pluginProto) { var singleglobal_ = m[1]; var position_aces = m[3]; var size_aces = m[4]; var angle_aces = m[5]; var appearance_aces = m[6]; var zorder_aces = m[7]; var effects_aces = m[8]; if (!pluginProto.cnds) pluginProto.cnds = {}; if (!pluginProto.acts) pluginProto.acts = {}; if (!pluginProto.exps) pluginProto.exps = {}; var cnds = pluginProto.cnds; var acts = pluginProto.acts; var exps = pluginProto.exps; if (position_aces) { cnds.CompareX = function (cmp, x) { return cr.do_cmp(this.x, cmp, x); }; cnds.CompareY = function (cmp, y) { return cr.do_cmp(this.y, cmp, y); }; cnds.IsOnScreen = function () { var layer = this.layer; this.update_bbox(); var bbox = this.bbox; return !(bbox.right < layer.viewLeft || bbox.bottom < layer.viewTop || bbox.left > layer.viewRight || bbox.top > layer.viewBottom); }; cnds.IsOutsideLayout = function () { this.update_bbox(); var bbox = this.bbox; var layout = this.runtime.running_layout; return (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height); }; cnds.PickDistance = function (which, x, y) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var dist = cr.distanceTo(inst.x, inst.y, x, y); var i, len, d; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; d = cr.distanceTo(inst.x, inst.y, x, y); if ((which === 0 && d < dist) || (which === 1 && d > dist)) { dist = d; pickme = inst; } } sol.pick_one(pickme); return true; }; acts.SetX = function (x) { if (this.x !== x) { this.x = x; this.set_bbox_changed(); } }; acts.SetY = function (y) { if (this.y !== y) { this.y = y; this.set_bbox_changed(); } }; acts.SetPos = function (x, y) { if (this.x !== x || this.y !== y) { this.x = x; this.y = y; this.set_bbox_changed(); } }; acts.SetPosToObject = function (obj, imgpt) { var inst = obj.getPairedInstance(this); if (!inst) return; var newx, newy; if (inst.getImagePoint) { newx = inst.getImagePoint(imgpt, true); newy = inst.getImagePoint(imgpt, false); } else { newx = inst.x; newy = inst.y; } if (this.x !== newx || this.y !== newy) { this.x = newx; this.y = newy; this.set_bbox_changed(); } }; acts.MoveForward = function (dist) { if (dist !== 0) { this.x += Math.cos(this.angle) * dist; this.y += Math.sin(this.angle) * dist; this.set_bbox_changed(); } }; acts.MoveAtAngle = function (a, dist) { if (dist !== 0) { this.x += Math.cos(cr.to_radians(a)) * dist; this.y += Math.sin(cr.to_radians(a)) * dist; this.set_bbox_changed(); } }; exps.X = function (ret) { ret.set_float(this.x); }; exps.Y = function (ret) { ret.set_float(this.y); }; exps.dt = function (ret) { ret.set_float(this.runtime.getDt(this)); }; } if (size_aces) { cnds.CompareWidth = function (cmp, w) { return cr.do_cmp(this.width, cmp, w); }; cnds.CompareHeight = function (cmp, h) { return cr.do_cmp(this.height, cmp, h); }; acts.SetWidth = function (w) { if (this.width !== w) { this.width = w; this.set_bbox_changed(); } }; acts.SetHeight = function (h) { if (this.height !== h) { this.height = h; this.set_bbox_changed(); } }; acts.SetSize = function (w, h) { if (this.width !== w || this.height !== h) { this.width = w; this.height = h; this.set_bbox_changed(); } }; exps.Width = function (ret) { ret.set_float(this.width); }; exps.Height = function (ret) { ret.set_float(this.height); }; exps.BBoxLeft = function (ret) { this.update_bbox(); ret.set_float(this.bbox.left); }; exps.BBoxTop = function (ret) { this.update_bbox(); ret.set_float(this.bbox.top); }; exps.BBoxRight = function (ret) { this.update_bbox(); ret.set_float(this.bbox.right); }; exps.BBoxBottom = function (ret) { this.update_bbox(); ret.set_float(this.bbox.bottom); }; } if (angle_aces) { cnds.AngleWithin = function (within, a) { return cr.angleDiff(this.angle, cr.to_radians(a)) <= cr.to_radians(within); }; cnds.IsClockwiseFrom = function (a) { return cr.angleClockwise(this.angle, cr.to_radians(a)); }; cnds.IsBetweenAngles = function (a, b) { var lower = cr.to_clamped_radians(a); var upper = cr.to_clamped_radians(b); var angle = cr.clamp_angle(this.angle); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; acts.SetAngle = function (a) { var newangle = cr.to_radians(cr.clamp_angle_degrees(a)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateClockwise = function (a) { if (a !== 0 && !isNaN(a)) { this.angle += cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateCounterclockwise = function (a) { if (a !== 0 && !isNaN(a)) { this.angle -= cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateTowardAngle = function (amt, target) { var newangle = cr.angleRotate(this.angle, cr.to_radians(target), cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateTowardPosition = function (amt, x, y) { var dx = x - this.x; var dy = y - this.y; var target = Math.atan2(dy, dx); var newangle = cr.angleRotate(this.angle, target, cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.SetTowardPosition = function (x, y) { var dx = x - this.x; var dy = y - this.y; var newangle = Math.atan2(dy, dx); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; exps.Angle = function (ret) { ret.set_float(cr.to_clamped_degrees(this.angle)); }; } if (!singleglobal_) { cnds.CompareInstanceVar = function (iv, cmp, val) { return cr.do_cmp(this.instance_vars[iv], cmp, val); }; cnds.IsBoolInstanceVarSet = function (iv) { return this.instance_vars[iv]; }; cnds.PickInstVarHiLow = function (which, iv) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var val = inst.instance_vars[iv]; var i, len, v; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; v = inst.instance_vars[iv]; if ((which === 0 && v < val) || (which === 1 && v > val)) { val = v; pickme = inst; } } sol.pick_one(pickme); return true; }; cnds.PickByUID = function (u) { var i, len, j, inst, families, instances, sol; var cnd = this.runtime.getCurrentCondition(); if (cnd.inverted) { sol = this.getCurrentSol(); if (sol.select_all) { sol.select_all = false; cr.clearArray(sol.instances); cr.clearArray(sol.else_instances); instances = this.instances; for (i = 0, len = instances.length; i < len; i++) { inst = instances[i]; if (inst.uid === u) sol.else_instances.push(inst); else sol.instances.push(inst); } this.applySolToContainer(); return !!sol.instances.length; } else { for (i = 0, j = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; sol.instances[j] = inst; if (inst.uid === u) { sol.else_instances.push(inst); } else j++; } cr.truncateArray(sol.instances, j); this.applySolToContainer(); return !!sol.instances.length; } } else { inst = this.runtime.getObjectByUID(u); if (!inst) return false; sol = this.getCurrentSol(); if (!sol.select_all && sol.instances.indexOf(inst) === -1) return false; // not picked if (this.is_family) { families = inst.type.families; for (i = 0, len = families.length; i < len; i++) { if (families[i] === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } } } else if (inst.type === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } return false; } }; cnds.OnCreated = function () { return true; }; cnds.OnDestroyed = function () { return true; }; acts.SetInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] = val; else myinstvars[iv] = parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] = val; else myinstvars[iv] = val.toString(); } else ; }; acts.AddInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] += val; else myinstvars[iv] += parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] += val; else myinstvars[iv] += val.toString(); } else ; }; acts.SubInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] -= val; else myinstvars[iv] -= parseFloat(val); } else ; }; acts.SetBoolInstanceVar = function (iv, val) { this.instance_vars[iv] = val ? 1 : 0; }; acts.ToggleBoolInstanceVar = function (iv) { this.instance_vars[iv] = 1 - this.instance_vars[iv]; }; acts.Destroy = function () { this.runtime.DestroyInstance(this); }; if (!acts.LoadFromJsonString) { acts.LoadFromJsonString = function (str_) { var o, i, len, binst; try { o = JSON.parse(str_); } catch (e) { return; } this.runtime.loadInstanceFromJSON(this, o, true); if (this.afterLoad) this.afterLoad(); if (this.behavior_insts) { for (i = 0, len = this.behavior_insts.length; i < len; ++i) { binst = this.behavior_insts[i]; if (binst.afterLoad) binst.afterLoad(); } } }; } exps.Count = function (ret) { var count = ret.object_class.instances.length; var i, len, inst; for (i = 0, len = this.runtime.createRow.length; i < len; i++) { inst = this.runtime.createRow[i]; if (ret.object_class.is_family) { if (inst.type.families.indexOf(ret.object_class) >= 0) count++; } else { if (inst.type === ret.object_class) count++; } } ret.set_int(count); }; exps.PickedCount = function (ret) { ret.set_int(ret.object_class.getCurrentSol().getObjects().length); }; exps.UID = function (ret) { ret.set_int(this.uid); }; exps.IID = function (ret) { ret.set_int(this.get_iid()); }; if (!exps.AsJSON) { exps.AsJSON = function (ret) { ret.set_string(JSON.stringify(this.runtime.saveInstanceToJSON(this, true))); }; } } if (appearance_aces) { cnds.IsVisible = function () { return this.visible; }; acts.SetVisible = function (v) { if (!v !== !this.visible) { this.visible = !!v; this.runtime.redraw = true; } }; cnds.CompareOpacity = function (cmp, x) { return cr.do_cmp(cr.round6dp(this.opacity * 100), cmp, x); }; acts.SetOpacity = function (x) { var new_opacity = x / 100.0; if (new_opacity < 0) new_opacity = 0; else if (new_opacity > 1) new_opacity = 1; if (new_opacity !== this.opacity) { this.opacity = new_opacity; this.runtime.redraw = true; } }; exps.Opacity = function (ret) { ret.set_float(cr.round6dp(this.opacity * 100.0)); }; } if (zorder_aces) { cnds.IsOnLayer = function (layer_) { if (!layer_) return false; return this.layer === layer_; }; cnds.PickTopBottom = function (which_) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var i, len; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; if (which_ === 0) { if (inst.layer.index > pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() > pickme.get_zindex())) { pickme = inst; } } else { if (inst.layer.index < pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() < pickme.get_zindex())) { pickme = inst; } } } sol.pick_one(pickme); return true; }; acts.MoveToTop = function () { var layer = this.layer; var layer_instances = layer.instances; if (layer_instances.length && layer_instances[layer_instances.length - 1] === this) return; // is already at top layer.removeFromInstanceList(this, false); layer.appendToInstanceList(this, false); this.runtime.redraw = true; }; acts.MoveToBottom = function () { var layer = this.layer; var layer_instances = layer.instances; if (layer_instances.length && layer_instances[0] === this) return; // is already at bottom layer.removeFromInstanceList(this, false); layer.prependToInstanceList(this, false); this.runtime.redraw = true; }; acts.MoveToLayer = function (layerMove) { if (!layerMove || layerMove == this.layer) return; this.layer.removeFromInstanceList(this, true); this.layer = layerMove; layerMove.appendToInstanceList(this, true); this.runtime.redraw = true; }; acts.ZMoveToObject = function (where_, obj_) { var isafter = (where_ === 0); if (!obj_) return; var other = obj_.getFirstPicked(this); if (!other || other.uid === this.uid) return; if (this.layer.index !== other.layer.index) { this.layer.removeFromInstanceList(this, true); this.layer = other.layer; other.layer.appendToInstanceList(this, true); } this.layer.moveInstanceAdjacent(this, other, isafter); this.runtime.redraw = true; }; exps.LayerNumber = function (ret) { ret.set_int(this.layer.number); }; exps.LayerName = function (ret) { ret.set_string(this.layer.name); }; exps.ZIndex = function (ret) { ret.set_int(this.get_zindex()); }; } if (effects_aces) { acts.SetEffectEnabled = function (enable_, effectname_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var enable = (enable_ === 1); if (this.active_effect_flags[i] === enable) return; // no change this.active_effect_flags[i] = enable; this.updateActiveEffects(); this.runtime.redraw = true; }; acts.SetEffectParam = function (effectname_, index_, value_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var et = this.type.effect_types[i]; var params = this.effect_params[i]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; } }; cr.set_bbox_changed = function () { this.bbox_changed = true; // will recreate next time box requested this.cell_changed = true; this.type.any_cell_changed = true; // avoid unnecessary updateAllBBox() calls this.runtime.redraw = true; // assume runtime needs to redraw var i, len, callbacks = this.bbox_changed_callbacks; for (i = 0, len = callbacks.length; i < len; ++i) { callbacks[i](this); } if (this.layer.useRenderCells) this.update_bbox(); }; cr.add_bbox_changed_callback = function (f) { if (f) { this.bbox_changed_callbacks.push(f); } }; cr.update_bbox = function () { if (!this.bbox_changed) return; // bounding box not changed var bbox = this.bbox; var bquad = this.bquad; bbox.set(this.x, this.y, this.x + this.width, this.y + this.height); bbox.offset(-this.hotspotX * this.width, -this.hotspotY * this.height); if (!this.angle) { bquad.set_from_rect(bbox); // make bounding quad from box } else { bbox.offset(-this.x, -this.y); // translate to origin bquad.set_from_rotated_rect(bbox, this.angle); // rotate around origin bquad.offset(this.x, this.y); // translate back to original position bquad.bounding_box(bbox); } bbox.normalize(); this.bbox_changed = false; // bounding box up to date this.update_render_cell(); }; var tmprc = new cr.rect(0, 0, 0, 0); cr.update_render_cell = function () { if (!this.layer.useRenderCells) return; var mygrid = this.layer.render_grid; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (this.rendercells.equals(tmprc)) return; if (this.rendercells.right < this.rendercells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, this.rendercells, tmprc); this.rendercells.copy(tmprc); this.layer.render_list_stale = true; }; cr.update_collision_cell = function () { if (!this.cell_changed || !this.collisionsEnabled) return; this.update_bbox(); var mygrid = this.type.collision_grid; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (this.collcells.equals(tmprc)) return; if (this.collcells.right < this.collcells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, this.collcells, tmprc); this.collcells.copy(tmprc); this.cell_changed = false; }; cr.inst_contains_pt = function (x, y) { if (!this.bbox.contains_pt(x, y)) return false; if (!this.bquad.contains_pt(x, y)) return false; if (this.collision_poly && !this.collision_poly.is_empty()) { this.collision_poly.cache_poly(this.width, this.height, this.angle); return this.collision_poly.contains_pt(x - this.x, y - this.y); } else return true; }; cr.inst_get_iid = function () { this.type.updateIIDs(); return this.iid; }; cr.inst_get_zindex = function () { this.layer.updateZIndices(); return this.zindex; }; cr.inst_updateActiveEffects = function () { cr.clearArray(this.active_effect_types); var i, len, et; var preserves_opaqueness = true; for (i = 0, len = this.active_effect_flags.length; i < len; i++) { if (this.active_effect_flags[i]) { et = this.type.effect_types[i]; this.active_effect_types.push(et); if (!et.preservesOpaqueness) preserves_opaqueness = false; } } this.uses_shaders = !!this.active_effect_types.length; this.shaders_preserve_opaqueness = preserves_opaqueness; }; cr.inst_toString = function () { return "Inst" + this.puid; }; cr.type_getFirstPicked = function (frominst) { if (frominst && frominst.is_contained && frominst.type != this) { var i, len, s; for (i = 0, len = frominst.siblings.length; i < len; i++) { s = frominst.siblings[i]; if (s.type == this) return s; } } var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[0]; else return null; }; cr.type_getPairedInstance = function (inst) { var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[inst.get_iid() % instances.length]; else return null; }; cr.type_updateIIDs = function () { if (!this.stale_iids || this.is_family) return; // up to date or is family - don't want family to overwrite IIDs var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].iid = i; var next_iid = i; var createRow = this.runtime.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === this) createRow[i].iid = next_iid++; } this.stale_iids = false; }; cr.type_getInstanceByIID = function (i) { if (i < this.instances.length) return this.instances[i]; i -= this.instances.length; var createRow = this.runtime.createRow; var j, lenj; for (j = 0, lenj = createRow.length; j < lenj; ++j) { if (createRow[j].type === this) { if (i === 0) return createRow[j]; --i; } } ; return null; }; cr.type_getCurrentSol = function () { return this.solstack[this.cur_sol]; }; cr.type_pushCleanSol = function () { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); else this.solstack[this.cur_sol].select_all = true; // else clear next SOL }; cr.type_pushCopySol = function () { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); var clonesol = this.solstack[this.cur_sol]; var prevsol = this.solstack[this.cur_sol - 1]; if (prevsol.select_all) clonesol.select_all = true; else { clonesol.select_all = false; cr.shallowAssignArray(clonesol.instances, prevsol.instances); cr.shallowAssignArray(clonesol.else_instances, prevsol.else_instances); } }; cr.type_popSol = function () { ; this.cur_sol--; }; cr.type_getBehaviorByName = function (behname) { var i, len, j, lenj, f, index = 0; if (!this.is_family) { for (i = 0, len = this.families.length; i < len; i++) { f = this.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (behname === f.behaviors[j].name) { this.extra["lastBehIndex"] = index; return f.behaviors[j]; } index++; } } } for (i = 0, len = this.behaviors.length; i < len; i++) { if (behname === this.behaviors[i].name) { this.extra["lastBehIndex"] = index; return this.behaviors[i]; } index++; } return null; }; cr.type_getBehaviorIndexByName = function (behname) { var b = this.getBehaviorByName(behname); if (b) return this.extra["lastBehIndex"]; else return -1; }; cr.type_getEffectIndexByName = function (name_) { var i, len; for (i = 0, len = this.effect_types.length; i < len; i++) { if (this.effect_types[i].name === name_) return i; } return -1; }; cr.type_applySolToContainer = function () { if (!this.is_contained || this.is_family) return; var i, len, j, lenj, t, sol, sol2; this.updateIIDs(); sol = this.getCurrentSol(); var select_all = sol.select_all; var es = this.runtime.getCurrentEventStack(); var orblock = es && es.current_event && es.current_event.orblock; for (i = 0, len = this.container.length; i < len; i++) { t = this.container[i]; if (t === this) continue; t.updateIIDs(); sol2 = t.getCurrentSol(); sol2.select_all = select_all; if (!select_all) { cr.clearArray(sol2.instances); for (j = 0, lenj = sol.instances.length; j < lenj; ++j) sol2.instances[j] = t.getInstanceByIID(sol.instances[j].iid); if (orblock) { cr.clearArray(sol2.else_instances); for (j = 0, lenj = sol.else_instances.length; j < lenj; ++j) sol2.else_instances[j] = t.getInstanceByIID(sol.else_instances[j].iid); } } } }; cr.type_toString = function () { return "Type" + this.sid; }; cr.do_cmp = function (x, cmp, y) { if (typeof x === "undefined" || typeof y === "undefined") return false; switch (cmp) { case 0: // equal return x === y; case 1: // not equal return x !== y; case 2: // less return x < y; case 3: // less/equal return x <= y; case 4: // greater return x > y; case 5: // greater/equal return x >= y; default: ; return false; } }; })(); cr.shaders = {}; cr.shaders["exposure"] = {src: ["varying mediump vec2 vTex;", "uniform lowp sampler2D samplerFront;", "uniform mediump float exposure;", "void main(void)", "{", "lowp vec4 front = texture2D(samplerFront, vTex);", "gl_FragColor = vec4(front.rgb * pow(2.0, exposure), front.a);", "}" ].join("\n"), extendBoxHorizontal: 0, extendBoxVertical: 0, crossSampling: false, preservesOpaqueness: true, animated: false, parameters: [["exposure", 0, 1]] } ; ; cr.plugins_.Audio = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Audio.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; var audRuntime = null; var audInst = null; var audTag = ""; var appPath = ""; // for Cordova only var API_HTML5 = 0; var API_WEBAUDIO = 1; var API_CORDOVA = 2; var API_APPMOBI = 3; var api = API_HTML5; var context = null; var audioBuffers = []; // cache of buffers var audioInstances = []; // cache of instances var lastAudio = null; var useOgg = false; // determined at create time var timescale_mode = 0; var silent = false; var masterVolume = 1; var listenerX = 0; var listenerY = 0; var panningModel = 1; // HRTF var distanceModel = 1; // Inverse var refDistance = 10; var maxDistance = 10000; var rolloffFactor = 1; var micSource = null; var micTag = ""; var isMusicWorkaround = false; var musicPlayNextTouch = []; function dbToLinear(x) { var v = dbToLinear_nocap(x); if (!isFinite(v)) // accidentally passing a string can result in NaN; set volume to 0 if so v = 0; if (v < 0) v = 0; if (v > 1) v = 1; return v; }; function linearToDb(x) { if (x < 0) x = 0; if (x > 1) x = 1; return linearToDb_nocap(x); }; function dbToLinear_nocap(x) { return Math.pow(10, x / 20); }; function linearToDb_nocap(x) { return (Math.log(x) / Math.log(10)) * 20; }; var effects = {}; function getDestinationForTag(tag) { tag = tag.toLowerCase(); if (effects.hasOwnProperty(tag)) { if (effects[tag].length) return effects[tag][0].getInputNode(); } return context["destination"]; }; function createGain() { if (context["createGain"]) return context["createGain"](); else return context["createGainNode"](); }; function createDelay(d) { if (context["createDelay"]) return context["createDelay"](d); else return context["createDelayNode"](d); }; function startSource(s) { if (s["start"]) s["start"](0); else s["noteOn"](0); }; function startSourceAt(s, x, d) { if (s["start"]) s["start"](0, x); else s["noteGrainOn"](0, x, d - x); }; function stopSource(s) { try { if (s["stop"]) s["stop"](0); else s["noteOff"](0); } catch (e) {} }; function setAudioParam(ap, value, ramp, time) { if (!ap) return; // iOS is missing some parameters ap["cancelScheduledValues"](0); if (time === 0) { ap["value"] = value; return; } var curTime = context["currentTime"]; time += curTime; switch (ramp) { case 0: // step ap["setValueAtTime"](value, time); break; case 1: // linear ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["linearRampToValueAtTime"](value, time); break; case 2: // exponential ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["exponentialRampToValueAtTime"](value, time); break; } }; var filterTypes = ["lowpass", "highpass", "bandpass", "lowshelf", "highshelf", "peaking", "notch", "allpass"]; function FilterEffect(type, freq, detune, q, gain, mix) { this.type = "filter"; this.params = [type, freq, detune, q, gain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = type; else this.filterNode["type"] = filterTypes[type]; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.filterNode["gain"]["value"] = gain; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); }; FilterEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; FilterEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; FilterEffect.prototype.getInputNode = function () { return this.inputNode; }; FilterEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 1: // filter frequency this.params[1] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[2] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[3] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 4: // filter/delay gain (note value is in dB here) this.params[4] = value; setAudioParam(this.filterNode["gain"], value, ramp, time); break; } }; function DelayEffect(delayTime, delayGain, mix) { this.type = "delay"; this.params = [delayTime, delayGain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.mainNode = createGain(); this.delayNode = createDelay(delayTime); this.delayNode["delayTime"]["value"] = delayTime; this.delayGainNode = createGain(); this.delayGainNode["gain"]["value"] = delayGain; this.inputNode["connect"](this.mainNode); this.inputNode["connect"](this.dryNode); this.mainNode["connect"](this.wetNode); this.mainNode["connect"](this.delayNode); this.delayNode["connect"](this.delayGainNode); this.delayGainNode["connect"](this.mainNode); }; DelayEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DelayEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.mainNode["disconnect"](); this.delayNode["disconnect"](); this.delayGainNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DelayEffect.prototype.getInputNode = function () { return this.inputNode; }; DelayEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[2] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 4: // filter/delay gain (note value is passed in dB but needs to be linear here) this.params[1] = dbToLinear(value); setAudioParam(this.delayGainNode["gain"], dbToLinear(value), ramp, time); break; case 5: // delay time this.params[0] = value; setAudioParam(this.delayNode["delayTime"], value, ramp, time); break; } }; function ConvolveEffect(buffer, normalize, mix, src) { this.type = "convolve"; this.params = [normalize, mix, src]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.convolveNode = context["createConvolver"](); if (buffer) { this.convolveNode["normalize"] = normalize; this.convolveNode["buffer"] = buffer; } this.inputNode["connect"](this.convolveNode); this.inputNode["connect"](this.dryNode); this.convolveNode["connect"](this.wetNode); }; ConvolveEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; ConvolveEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.convolveNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; ConvolveEffect.prototype.getInputNode = function () { return this.inputNode; }; ConvolveEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function FlangerEffect(delay, modulation, freq, feedback, mix) { this.type = "flanger"; this.params = [delay, modulation, freq, feedback, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.feedbackNode = createGain(); this.feedbackNode["gain"]["value"] = feedback; this.delayNode = createDelay(delay + modulation); this.delayNode["delayTime"]["value"] = delay; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.delayNode); this.inputNode["connect"](this.dryNode); this.delayNode["connect"](this.wetNode); this.delayNode["connect"](this.feedbackNode); this.feedbackNode["connect"](this.delayNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.delayNode["delayTime"]); startSource(this.oscNode); }; FlangerEffect.prototype.connectTo = function (node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; FlangerEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.delayNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); this.feedbackNode["disconnect"](); }; FlangerEffect.prototype.getInputNode = function () { return this.inputNode; }; FlangerEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 6: // modulation this.params[1] = value / 1000; setAudioParam(this.oscGainNode["gain"], value / 1000, ramp, time); break; case 7: // modulation frequency this.params[2] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; case 8: // feedback this.params[3] = value / 100; setAudioParam(this.feedbackNode["gain"], value / 100, ramp, time); break; } }; function PhaserEffect(freq, detune, q, modulation, modfreq, mix) { this.type = "phaser"; this.params = [freq, detune, q, modulation, modfreq, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = 7; // all-pass else this.filterNode["type"] = "allpass"; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = modfreq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.filterNode["frequency"]); startSource(this.oscNode); }; PhaserEffect.prototype.connectTo = function (node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; PhaserEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); }; PhaserEffect.prototype.getInputNode = function () { return this.inputNode; }; PhaserEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 1: // filter frequency this.params[0] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[1] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[2] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 6: // modulation this.params[3] = value; setAudioParam(this.oscGainNode["gain"], value, ramp, time); break; case 7: // modulation frequency this.params[4] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function GainEffect(g) { this.type = "gain"; this.params = [g]; this.node = createGain(); this.node["gain"]["value"] = g; }; GainEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; GainEffect.prototype.remove = function () { this.node["disconnect"](); }; GainEffect.prototype.getInputNode = function () { return this.node; }; GainEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 4: // gain this.params[0] = dbToLinear(value); setAudioParam(this.node["gain"], dbToLinear(value), ramp, time); break; } }; function TremoloEffect(freq, mix) { this.type = "tremolo"; this.params = [freq, mix]; this.node = createGain(); this.node["gain"]["value"] = 1 - (mix / 2); this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = mix / 2; this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.node["gain"]); startSource(this.oscNode); }; TremoloEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; TremoloEffect.prototype.remove = function () { this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.node["disconnect"](); }; TremoloEffect.prototype.getInputNode = function () { return this.node; }; TremoloEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.node["gain"]["value"], 1 - (value / 2), ramp, time); setAudioParam(this.oscGainNode["gain"]["value"], value / 2, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function RingModulatorEffect(freq, mix) { this.type = "ringmod"; this.params = [freq, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.ringNode = createGain(); this.ringNode["gain"]["value"] = 0; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscNode["connect"](this.ringNode["gain"]); startSource(this.oscNode); this.inputNode["connect"](this.ringNode); this.inputNode["connect"](this.dryNode); this.ringNode["connect"](this.wetNode); }; RingModulatorEffect.prototype.connectTo = function (node_) { this.wetNode["disconnect"](); this.wetNode["connect"](node_); this.dryNode["disconnect"](); this.dryNode["connect"](node_); }; RingModulatorEffect.prototype.remove = function () { this.oscNode["disconnect"](); this.ringNode["disconnect"](); this.inputNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; RingModulatorEffect.prototype.getInputNode = function () { return this.inputNode; }; RingModulatorEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function DistortionEffect(threshold, headroom, drive, makeupgain, mix) { this.type = "distortion"; this.params = [threshold, headroom, drive, makeupgain, mix]; this.inputNode = createGain(); this.preGain = createGain(); this.postGain = createGain(); this.setDrive(drive, dbToLinear_nocap(makeupgain)); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.waveShaper = context["createWaveShaper"](); this.curve = new Float32Array(65536); this.generateColortouchCurve(threshold, headroom); this.waveShaper.curve = this.curve; this.inputNode["connect"](this.preGain); this.inputNode["connect"](this.dryNode); this.preGain["connect"](this.waveShaper); this.waveShaper["connect"](this.postGain); this.postGain["connect"](this.wetNode); }; DistortionEffect.prototype.setDrive = function (drive, makeupgain) { if (drive < 0.01) drive = 0.01; this.preGain["gain"]["value"] = drive; this.postGain["gain"]["value"] = Math.pow(1 / drive, 0.6) * makeupgain; }; function e4(x, k) { return 1.0 - Math.exp(-k * x); } DistortionEffect.prototype.shape = function (x, linearThreshold, linearHeadroom) { var maximum = 1.05 * linearHeadroom * linearThreshold; var kk = (maximum - linearThreshold); var sign = x < 0 ? -1 : +1; var absx = x < 0 ? -x : x; var shapedInput = absx < linearThreshold ? absx : linearThreshold + kk * e4(absx - linearThreshold, 1.0 / kk); shapedInput *= sign; return shapedInput; }; DistortionEffect.prototype.generateColortouchCurve = function (threshold, headroom) { var linearThreshold = dbToLinear_nocap(threshold); var linearHeadroom = dbToLinear_nocap(headroom); var n = 65536; var n2 = n / 2; var x = 0; for (var i = 0; i < n2; ++i) { x = i / n2; x = this.shape(x, linearThreshold, linearHeadroom); this.curve[n2 + i] = x; this.curve[n2 - i - 1] = -x; } }; DistortionEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DistortionEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.preGain["disconnect"](); this.waveShaper["disconnect"](); this.postGain["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DistortionEffect.prototype.getInputNode = function () { return this.inputNode; }; DistortionEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function CompressorEffect(threshold, knee, ratio, attack, release) { this.type = "compressor"; this.params = [threshold, knee, ratio, attack, release]; this.node = context["createDynamicsCompressor"](); try { this.node["threshold"]["value"] = threshold; this.node["knee"]["value"] = knee; this.node["ratio"]["value"] = ratio; this.node["attack"]["value"] = attack; this.node["release"]["value"] = release; } catch (e) {} }; CompressorEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; CompressorEffect.prototype.remove = function () { this.node["disconnect"](); }; CompressorEffect.prototype.getInputNode = function () { return this.node; }; CompressorEffect.prototype.setParam = function(param, value, ramp, time) { }; function AnalyserEffect(fftSize, smoothing) { this.type = "analyser"; this.params = [fftSize, smoothing]; this.node = context["createAnalyser"](); this.node["fftSize"] = fftSize; this.node["smoothingTimeConstant"] = smoothing; this.freqBins = new Float32Array(this.node["frequencyBinCount"]); this.signal = new Uint8Array(fftSize); this.peak = 0; this.rms = 0; }; AnalyserEffect.prototype.tick = function () { this.node["getFloatFrequencyData"](this.freqBins); this.node["getByteTimeDomainData"](this.signal); var fftSize = this.node["fftSize"]; var i = 0; this.peak = 0; var rmsSquaredSum = 0; var s = 0; for ( ; i < fftSize; i++) { s = (this.signal[i] - 128) / 128; if (s < 0) s = -s; if (this.peak < s) this.peak = s; rmsSquaredSum += s * s; } this.peak = linearToDb(this.peak); this.rms = linearToDb(Math.sqrt(rmsSquaredSum / fftSize)); }; AnalyserEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; AnalyserEffect.prototype.remove = function () { this.node["disconnect"](); }; AnalyserEffect.prototype.getInputNode = function () { return this.node; }; AnalyserEffect.prototype.setParam = function(param, value, ramp, time) { }; var OT_POS_SAMPLES = 4; function ObjectTracker() { this.obj = null; this.loadUid = 0; this.speeds = []; this.lastX = 0; this.lastY = 0; this.moveAngle = 0; }; ObjectTracker.prototype.setObject = function (obj_) { this.obj = obj_; if (this.obj) { this.lastX = this.obj.x; this.lastY = this.obj.y; } cr.clearArray(this.speeds); }; ObjectTracker.prototype.hasObject = function () { return !!this.obj; }; ObjectTracker.prototype.tick = function (dt) { if (!this.obj || dt === 0) return; this.moveAngle = cr.angleTo(this.lastX, this.lastY, this.obj.x, this.obj.y); var s = cr.distanceTo(this.lastX, this.lastY, this.obj.x, this.obj.y) / dt; if (this.speeds.length < OT_POS_SAMPLES) this.speeds.push(s); else { this.speeds.shift(); this.speeds.push(s); } this.lastX = this.obj.x; this.lastY = this.obj.y; }; ObjectTracker.prototype.getSpeed = function () { if (!this.speeds.length) return 0; var i, len, sum = 0; for (i = 0, len = this.speeds.length; i < len; i++) { sum += this.speeds[i]; } return sum / this.speeds.length; }; ObjectTracker.prototype.getVelocityX = function () { return Math.cos(this.moveAngle) * this.getSpeed(); }; ObjectTracker.prototype.getVelocityY = function () { return Math.sin(this.moveAngle) * this.getSpeed(); }; var iOShadtouchstart = false; // has had touch start input on iOS <=8 to work around web audio API muting var iOShadtouchend = false; // has had touch end input on iOS 9+ to work around web audio API muting function C2AudioBuffer(src_, is_music) { this.src = src_; this.myapi = api; this.is_music = is_music; this.added_end_listener = false; var self = this; this.outNode = null; this.mediaSourceNode = null; this.panWhenReady = []; // for web audio API positioned sounds this.seekWhenReady = 0; this.pauseWhenReady = false; this.supportWebAudioAPI = false; this.failedToLoad = false; this.wasEverReady = false; // if a buffer is ever marked as ready, it's permanently considered ready after then. if (api === API_WEBAUDIO && is_music) { this.myapi = API_HTML5; this.outNode = createGain(); } this.bufferObject = null; // actual audio object this.audioData = null; // web audio api: ajax request result (compressed audio that needs decoding) var request; switch (this.myapi) { case API_HTML5: this.bufferObject = new Audio(); this.bufferObject.crossOrigin = "anonymous"; this.bufferObject.addEventListener("canplaythrough", function () { self.wasEverReady = true; // update loaded state so preload is considered complete }); if (api === API_WEBAUDIO && context["createMediaElementSource"] && !/wiiu/i.test(navigator.userAgent)) { this.supportWebAudioAPI = true; // can be routed through web audio api this.bufferObject.addEventListener("canplay", function () { if (!self.mediaSourceNode) // protect against this event firing twice { self.mediaSourceNode = context["createMediaElementSource"](self.bufferObject); self.mediaSourceNode["connect"](self.outNode); } }); } this.bufferObject.autoplay = false; // this is only a source buffer, not an instance this.bufferObject.preload = "auto"; this.bufferObject.src = src_; break; case API_WEBAUDIO: request = new XMLHttpRequest(); request.open("GET", src_, true); request.responseType = "arraybuffer"; request.onload = function () { self.audioData = request.response; self.decodeAudioBuffer(); }; request.onerror = function () { self.failedToLoad = true; }; request.send(); break; case API_CORDOVA: this.bufferObject = true; break; case API_APPMOBI: this.bufferObject = true; break; } }; C2AudioBuffer.prototype.decodeAudioBuffer = function () { if (this.bufferObject || !this.audioData) return; // audio already decoded or AJAX request not yet complete var self = this; if (context["decodeAudioData"]) { context["decodeAudioData"](this.audioData, function (buffer) { self.bufferObject = buffer; self.audioData = null; // clear AJAX response to allow GC and save memory, only need the bufferObject now var p, i, len, a; if (!cr.is_undefined(self.playTagWhenReady) && !silent) { if (self.panWhenReady.length) { for (i = 0, len = self.panWhenReady.length; i < len; i++) { p = self.panWhenReady[i]; a = new C2AudioInstance(self, p.thistag); a.setPannerEnabled(true); if (typeof p.objUid !== "undefined") { p.obj = audRuntime.getObjectByUID(p.objUid); if (!p.obj) continue; } if (p.obj) { var px = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, false); a.setPan(px, py, cr.to_degrees(p.obj.angle - p.obj.layer.getAngle()), p.ia, p.oa, p.og); a.setObject(p.obj); } else { a.setPan(p.x, p.y, p.a, p.ia, p.oa, p.og); } a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } cr.clearArray(self.panWhenReady); } else { a = new C2AudioInstance(self, self.playTagWhenReady || ""); // sometimes playTagWhenReady is not set - TODO: why? a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } } else if (!cr.is_undefined(self.convolveWhenReady)) { var convolveNode = self.convolveWhenReady.convolveNode; convolveNode["normalize"] = self.normalizeWhenReady; convolveNode["buffer"] = buffer; } }, function (e) { self.failedToLoad = true; }); } else { this.bufferObject = context["createBuffer"](this.audioData, false); this.audioData = null; // clear AJAX response to allow GC and save memory, only need the bufferObject now if (!cr.is_undefined(this.playTagWhenReady) && !silent) { var a = new C2AudioInstance(this, this.playTagWhenReady); a.play(this.loopWhenReady, this.volumeWhenReady, this.seekWhenReady); if (this.pauseWhenReady) a.pause(); audioInstances.push(a); } else if (!cr.is_undefined(this.convolveWhenReady)) { var convolveNode = this.convolveWhenReady.convolveNode; convolveNode["normalize"] = this.normalizeWhenReady; convolveNode["buffer"] = this.bufferObject; } } }; C2AudioBuffer.prototype.isLoaded = function () { switch (this.myapi) { case API_HTML5: var ret = this.bufferObject["readyState"] >= 4; // HAVE_ENOUGH_DATA if (ret) this.wasEverReady = true; return ret || this.wasEverReady; case API_WEBAUDIO: return !!this.audioData || !!this.bufferObject; case API_CORDOVA: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.isLoadedAndDecoded = function () { switch (this.myapi) { case API_HTML5: return this.isLoaded(); // no distinction between loaded and decoded in HTML5 audio, just rely on ready state case API_WEBAUDIO: return !!this.bufferObject; case API_CORDOVA: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.hasFailedToLoad = function () { switch (this.myapi) { case API_HTML5: return !!this.bufferObject["error"]; case API_WEBAUDIO: return this.failedToLoad; } return false; }; function C2AudioInstance(buffer_, tag_) { var self = this; this.tag = tag_; this.fresh = true; this.stopped = true; this.src = buffer_.src; this.buffer = buffer_; this.myapi = api; this.is_music = buffer_.is_music; this.playbackRate = 1; this.hasPlaybackEnded = true; // ended flag this.resume_me = false; // make sure resumes when leaving suspend this.is_paused = false; this.resume_position = 0; // for web audio api to resume from correct playback position this.looping = false; this.is_muted = false; this.is_silent = false; this.volume = 1; this.onended_handler = function (e) { if (self.is_paused || self.resume_me) return; var bufferThatEnded = this; if (!bufferThatEnded) bufferThatEnded = e.target; if (bufferThatEnded !== self.active_buffer) return; self.hasPlaybackEnded = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }; this.active_buffer = null; this.isTimescaled = ((timescale_mode === 1 && !this.is_music) || timescale_mode === 2); this.mutevol = 1; this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum); this.gainNode = null; this.pannerNode = null; this.pannerEnabled = false; this.objectTracker = null; this.panX = 0; this.panY = 0; this.panAngle = 0; this.panConeInner = 0; this.panConeOuter = 0; this.panConeOuterGain = 0; this.instanceObject = null; var add_end_listener = false; if (this.myapi === API_WEBAUDIO && this.buffer.myapi === API_HTML5 && !this.buffer.supportWebAudioAPI) this.myapi = API_HTML5; switch (this.myapi) { case API_HTML5: if (this.is_music) { this.instanceObject = buffer_.bufferObject; add_end_listener = !buffer_.added_end_listener; buffer_.added_end_listener = true; } else { this.instanceObject = new Audio(); this.instanceObject.crossOrigin = "anonymous"; this.instanceObject.autoplay = false; this.instanceObject.src = buffer_.bufferObject.src; add_end_listener = true; } if (add_end_listener) { this.instanceObject.addEventListener('ended', function () { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } break; case API_WEBAUDIO: this.gainNode = createGain(); this.gainNode["connect"](getDestinationForTag(tag_)); if (this.buffer.myapi === API_WEBAUDIO) { if (buffer_.bufferObject) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = buffer_.bufferObject; this.instanceObject["connect"](this.gainNode); } } else { this.instanceObject = this.buffer.bufferObject; // reference the audio element this.buffer.outNode["connect"](this.gainNode); if (!this.buffer.added_end_listener) { this.buffer.added_end_listener = true; this.buffer.bufferObject.addEventListener('ended', function () { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } } break; case API_CORDOVA: this.instanceObject = new window["Media"](appPath + this.src, null, null, function (status) { if (status === window["Media"]["MEDIA_STOPPED"]) { self.hasPlaybackEnded = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); } }); break; case API_APPMOBI: this.instanceObject = true; break; } }; C2AudioInstance.prototype.hasEnded = function () { var time; switch (this.myapi) { case API_HTML5: return this.instanceObject.ended; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (!this.fresh && !this.stopped && this.instanceObject["loop"]) return false; if (this.is_paused) return false; return this.hasPlaybackEnded; } else return this.instanceObject.ended; case API_CORDOVA: return this.hasPlaybackEnded; case API_APPMOBI: true; // recycling an AppMobi sound does not matter because it will just do another throwaway playSound } return true; }; C2AudioInstance.prototype.canBeRecycled = function () { if (this.fresh || this.stopped) return true; // not yet used or is not playing return this.hasEnded(); }; C2AudioInstance.prototype.setPannerEnabled = function (enable_) { if (api !== API_WEBAUDIO) return; if (!this.pannerEnabled && enable_) { if (!this.gainNode) return; if (!this.pannerNode) { this.pannerNode = context["createPanner"](); if (typeof this.pannerNode["panningModel"] === "number") this.pannerNode["panningModel"] = panningModel; else this.pannerNode["panningModel"] = ["equalpower", "HRTF", "soundfield"][panningModel]; if (typeof this.pannerNode["distanceModel"] === "number") this.pannerNode["distanceModel"] = distanceModel; else this.pannerNode["distanceModel"] = ["linear", "inverse", "exponential"][distanceModel]; this.pannerNode["refDistance"] = refDistance; this.pannerNode["maxDistance"] = maxDistance; this.pannerNode["rolloffFactor"] = rolloffFactor; } this.gainNode["disconnect"](); this.gainNode["connect"](this.pannerNode); this.pannerNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = true; } else if (this.pannerEnabled && !enable_) { if (!this.gainNode) return; this.pannerNode["disconnect"](); this.gainNode["disconnect"](); this.gainNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = false; } }; C2AudioInstance.prototype.setPan = function (x, y, angle, innerangle, outerangle, outergain) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; this.pannerNode["setPosition"](x, y, 0); this.pannerNode["setOrientation"](Math.cos(cr.to_radians(angle)), Math.sin(cr.to_radians(angle)), 0); this.pannerNode["coneInnerAngle"] = innerangle; this.pannerNode["coneOuterAngle"] = outerangle; this.pannerNode["coneOuterGain"] = outergain; this.panX = x; this.panY = y; this.panAngle = angle; this.panConeInner = innerangle; this.panConeOuter = outerangle; this.panConeOuterGain = outergain; }; C2AudioInstance.prototype.setObject = function (o) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; if (!this.objectTracker) this.objectTracker = new ObjectTracker(); this.objectTracker.setObject(o); }; C2AudioInstance.prototype.tick = function (dt) { if (!this.pannerEnabled || api !== API_WEBAUDIO || !this.objectTracker || !this.objectTracker.hasObject() || !this.isPlaying()) { return; } this.objectTracker.tick(dt); var inst = this.objectTracker.obj; var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); this.pannerNode["setPosition"](px, py, 0); var a = 0; if (typeof this.objectTracker.obj.angle !== "undefined") { a = inst.angle - inst.layer.getAngle(); this.pannerNode["setOrientation"](Math.cos(a), Math.sin(a), 0); } px = cr.rotatePtAround(this.objectTracker.getVelocityX(), this.objectTracker.getVelocityY(), -inst.layer.getAngle(), 0, 0, true); py = cr.rotatePtAround(this.objectTracker.getVelocityX(), this.objectTracker.getVelocityY(), -inst.layer.getAngle(), 0, 0, false); this.pannerNode["setVelocity"](px, py, 0); }; C2AudioInstance.prototype.play = function (looping, vol, fromPosition) { var instobj = this.instanceObject; this.looping = looping; this.volume = vol; var seekPos = fromPosition || 0; switch (this.myapi) { case API_HTML5: if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.volume !== vol * masterVolume) instobj.volume = vol * masterVolume; if (instobj.loop !== looping) instobj.loop = looping; if (instobj.muted) instobj.muted = false; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) { ; } } if (this.is_music && isMusicWorkaround && !audRuntime.isInUserInputEvent) musicPlayNextTouch.push(this); else { try { this.instanceObject.play(); } catch (e) { // sometimes throws on WP8.1... try not to kill the app if (console && console.log) console.log("[C2] WARNING: exception trying to play audio '" + this.buffer.src + "': ", e); } } break; case API_WEBAUDIO: this.muted = false; this.mutevol = 1; if (this.buffer.myapi === API_WEBAUDIO) { this.gainNode["gain"]["value"] = vol * masterVolume; if (!this.fresh) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); } this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = looping; this.hasPlaybackEnded = false; if (seekPos === 0) startSource(this.instanceObject); else startSourceAt(this.instanceObject, seekPos, this.getDuration()); } else { if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.loop !== looping) instobj.loop = looping; instobj.volume = vol * masterVolume; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) { ; } } if (this.is_music && isMusicWorkaround && !audRuntime.isInUserInputEvent) musicPlayNextTouch.push(this); else instobj.play(); } break; case API_CORDOVA: if ((!this.fresh && this.stopped) || seekPos !== 0) instobj["seekTo"](seekPos); instobj["play"](); this.hasPlaybackEnded = false; break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["playSound"](this.src, looping); else AppMobi["player"]["playSound"](this.src, looping); break; } this.playbackRate = 1; this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - seekPos; this.fresh = false; this.stopped = false; this.is_paused = false; }; C2AudioInstance.prototype.stop = function () { switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) stopSource(this.instanceObject); else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_CORDOVA: this.instanceObject["stop"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.stopped = true; this.is_paused = false; }; C2AudioInstance.prototype.pause = function () { if (this.fresh || this.stopped || this.hasEnded() || this.is_paused) return; switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(true); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); this.is_paused = true; stopSource(this.instanceObject); } else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_CORDOVA: this.instanceObject["pause"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.is_paused = true; }; C2AudioInstance.prototype.resume = function () { if (this.fresh || this.stopped || this.hasEnded() || !this.is_paused) return; switch (this.myapi) { case API_HTML5: this.instanceObject.play(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.updatePlaybackRate(); this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - (this.resume_position / (this.playbackRate || 0.001)); startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject.play(); } break; case API_CORDOVA: this.instanceObject["play"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["resumeSound"](this.src); break; } this.is_paused = false; }; C2AudioInstance.prototype.seek = function (pos) { if (this.fresh || this.stopped || this.hasEnded()) return; switch (this.myapi) { case API_HTML5: try { this.instanceObject.currentTime = pos; } catch (e) {} break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) this.resume_position = pos; else { this.pause(); this.resume_position = pos; this.resume(); } } else { try { this.instanceObject.currentTime = pos; } catch (e) {} } break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["seekSound"](this.src, pos); break; } }; C2AudioInstance.prototype.reconnect = function (toNode) { if (this.myapi !== API_WEBAUDIO) return; if (this.pannerEnabled) { this.pannerNode["disconnect"](); this.pannerNode["connect"](toNode); } else { this.gainNode["disconnect"](); this.gainNode["connect"](toNode); } }; C2AudioInstance.prototype.getDuration = function (applyPlaybackRate) { var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.duration !== "undefined") ret = this.instanceObject.duration; break; case API_WEBAUDIO: ret = this.buffer.bufferObject["duration"]; break; case API_CORDOVA: ret = this.instanceObject["getDuration"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getDurationSound"](this.src); break; } if (applyPlaybackRate) ret /= (this.playbackRate || 0.001); // avoid divide-by-zero return ret; }; C2AudioInstance.prototype.getPlaybackTime = function (applyPlaybackRate) { var duration = this.getDuration(); var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) return this.resume_position; else ret = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - this.startTime; } else if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getPlaybackTimeSound"](this.src); break; } if (applyPlaybackRate) ret *= this.playbackRate; if (!this.looping && ret > duration) ret = duration; return ret; }; C2AudioInstance.prototype.isPlaying = function () { return !this.is_paused && !this.fresh && !this.stopped && !this.hasEnded(); }; C2AudioInstance.prototype.setVolume = function (v) { this.volume = v; this.updateVolume(); }; C2AudioInstance.prototype.updateVolume = function () { var volToSet = this.volume * masterVolume; if (!isFinite(volToSet)) volToSet = 0; // HTMLMediaElement throws if setting non-finite volume switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.volume !== "undefined" && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.gainNode["gain"]["value"] = volToSet * this.mutevol; } else { if (typeof this.instanceObject.volume !== "undefined" && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.getVolume = function () { return this.volume; }; C2AudioInstance.prototype.doSetMuted = function (m) { switch (this.myapi) { case API_HTML5: if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.mutevol = (m ? 0 : 1); this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; } else { if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setMuted = function (m) { this.is_muted = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setSilent = function (m) { this.is_silent = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setLooping = function (l) { this.looping = l; switch (this.myapi) { case API_HTML5: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_WEBAUDIO: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["setLoopingSound"](this.src, l); break; } }; C2AudioInstance.prototype.setPlaybackRate = function (r) { this.playbackRate = r; this.updatePlaybackRate(); }; C2AudioInstance.prototype.updatePlaybackRate = function () { var r = this.playbackRate; if (this.isTimescaled) r *= audRuntime.timescale; switch (this.myapi) { case API_HTML5: if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.instanceObject["playbackRate"]["value"] !== r) this.instanceObject["playbackRate"]["value"] = r; } else { if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setSuspended = function (s) { switch (this.myapi) { case API_HTML5: if (s) { if (this.isPlaying()) { this.resume_me = true; this.instanceObject["pause"](); } else this.resume_me = false; } else { if (this.resume_me) { this.instanceObject["play"](); this.resume_me = false; } } break; case API_WEBAUDIO: if (s) { if (this.isPlaying()) { this.resume_me = true; if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(true); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); stopSource(this.instanceObject); } else this.instanceObject["pause"](); } else this.resume_me = false; } else { if (this.resume_me) { if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.updatePlaybackRate(); this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - (this.resume_position / (this.playbackRate || 0.001)); startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject["play"](); } this.resume_me = false; } } break; case API_CORDOVA: if (s) { if (this.isPlaying()) { this.instanceObject["pause"](); this.resume_me = true; } else this.resume_me = false; } else { if (this.resume_me) { this.resume_me = false; this.instanceObject["play"](); } } break; case API_APPMOBI: break; } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; audRuntime = this.runtime; audInst = this; this.listenerTracker = null; this.listenerZ = -600; if ((this.runtime.isiOS || (this.runtime.isAndroid && (this.runtime.isChrome || this.runtime.isAndroidStockBrowser))) && !this.runtime.isCrosswalk && !this.runtime.isDomFree && !this.runtime.isAmazonWebApp) { isMusicWorkaround = true; } context = null; if (typeof AudioContext !== "undefined") { api = API_WEBAUDIO; context = new AudioContext(); } else if (typeof webkitAudioContext !== "undefined") { api = API_WEBAUDIO; context = new webkitAudioContext(); } if (isMusicWorkaround) { var unblockWebAudio = function () { var buffer = context["createBuffer"](1, 1, 22050); var source = context["createBufferSource"](); source["buffer"] = buffer; source["connect"](context["destination"]); startSource(source); }; var playQueuedMusic = function () { var i, len, m; if (isMusicWorkaround) { if (!silent) { for (i = 0, len = musicPlayNextTouch.length; i < len; ++i) { m = musicPlayNextTouch[i]; if (!m.stopped && !m.is_paused) m.instanceObject.play(); } } cr.clearArray(musicPlayNextTouch); } }; document.addEventListener("touchend", function () { if (!iOShadtouchend && context) { unblockWebAudio(); iOShadtouchend = true; } playQueuedMusic(); }, true); } if (api !== API_WEBAUDIO) { if (this.runtime.isCordova && typeof window["Media"] !== "undefined") api = API_CORDOVA; else if (this.runtime.isAppMobi) api = API_APPMOBI; } if (api === API_CORDOVA) { appPath = location.href; var i = appPath.lastIndexOf("/"); if (i > -1) appPath = appPath.substr(0, i + 1); appPath = appPath.replace("file://", ""); } if (this.runtime.isSafari && this.runtime.isWindows && typeof Audio === "undefined") { alert("It looks like you're using Safari for Windows without Quicktime. Audio cannot be played until Quicktime is installed."); this.runtime.DestroyInstance(this); } else { if (this.runtime.isDirectCanvas) useOgg = this.runtime.isAndroid; // AAC on iOS, OGG on Android else { try { useOgg = !!(new Audio().canPlayType('audio/ogg; codecs="vorbis"')); } catch (e) { useOgg = false; } } switch (api) { case API_HTML5: ; break; case API_WEBAUDIO: ; break; case API_CORDOVA: ; break; case API_APPMOBI: ; break; default: ; } this.runtime.tickMe(this); } }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function () { this.runtime.audioInstance = this; timescale_mode = this.properties[0]; // 0 = off, 1 = sounds only, 2 = all this.saveload = this.properties[1]; // 0 = all, 1 = sounds only, 2 = music only, 3 = none this.playinbackground = (this.properties[2] !== 0); panningModel = this.properties[3]; // 0 = equalpower, 1 = hrtf, 3 = soundfield distanceModel = this.properties[4]; // 0 = linear, 1 = inverse, 2 = exponential this.listenerZ = -this.properties[5]; refDistance = this.properties[6]; maxDistance = this.properties[7]; rolloffFactor = this.properties[8]; this.listenerTracker = new ObjectTracker(); var draw_width = (this.runtime.draw_width || this.runtime.width); var draw_height = (this.runtime.draw_height || this.runtime.height); if (api === API_WEBAUDIO) { if (typeof context["listener"]["dopplerFactor"] !== "undefined") context["listener"]["dopplerFactor"] = 0; context["listener"]["setPosition"](draw_width / 2, draw_height / 2, this.listenerZ); context["listener"]["setOrientation"](0, 0, 1, 0, -1, 0); window["c2OnAudioMicStream"] = function (localMediaStream, tag) { if (micSource) micSource["disconnect"](); micTag = tag.toLowerCase(); micSource = context["createMediaStreamSource"](localMediaStream); micSource["connect"](getDestinationForTag(micTag)); }; } this.runtime.addSuspendCallback(function(s) { audInst.onSuspend(s); }); var self = this; this.runtime.addDestroyCallback(function (inst) { self.onInstanceDestroyed(inst); }); }; instanceProto.onInstanceDestroyed = function (inst) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.objectTracker) { if (a.objectTracker.obj === inst) { a.objectTracker.obj = null; if (a.pannerEnabled && a.isPlaying() && a.looping) a.stop(); } } } if (this.listenerTracker.obj === inst) this.listenerTracker.obj = null; }; instanceProto.saveToJSON = function () { var o = { "silent": silent, "masterVolume": masterVolume, "listenerZ": this.listenerZ, "listenerUid": this.listenerTracker.hasObject() ? this.listenerTracker.obj.uid : -1, "playing": [], "effects": {} }; var playingarr = o["playing"]; var i, len, a, d, p, panobj, playbackTime; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (!a.isPlaying()) continue; // no need to save stopped sounds if (this.saveload === 3) // not saving/loading any sounds/music continue; if (a.is_music && this.saveload === 1) // not saving/loading music continue; if (!a.is_music && this.saveload === 2) // not saving/loading sound continue; playbackTime = a.getPlaybackTime(); if (a.looping) playbackTime = playbackTime % a.getDuration(); d = { "tag": a.tag, "buffersrc": a.buffer.src, "is_music": a.is_music, "playbackTime": playbackTime, "volume": a.volume, "looping": a.looping, "muted": a.is_muted, "playbackRate": a.playbackRate, "paused": a.is_paused, "resume_position": a.resume_position }; if (a.pannerEnabled) { d["pan"] = {}; panobj = d["pan"]; if (a.objectTracker && a.objectTracker.hasObject()) { panobj["objUid"] = a.objectTracker.obj.uid; } else { panobj["x"] = a.panX; panobj["y"] = a.panY; panobj["a"] = a.panAngle; } panobj["ia"] = a.panConeInner; panobj["oa"] = a.panConeOuter; panobj["og"] = a.panConeOuterGain; } playingarr.push(d); } var fxobj = o["effects"]; var fxarr; for (p in effects) { if (effects.hasOwnProperty(p)) { fxarr = []; for (i = 0, len = effects[p].length; i < len; i++) { fxarr.push({ "type": effects[p][i].type, "params": effects[p][i].params }); } fxobj[p] = fxarr; } } return o; }; var objectTrackerUidsToLoad = []; instanceProto.loadFromJSON = function (o) { var setSilent = o["silent"]; masterVolume = o["masterVolume"]; this.listenerZ = o["listenerZ"]; this.listenerTracker.setObject(null); var listenerUid = o["listenerUid"]; if (listenerUid !== -1) { this.listenerTracker.loadUid = listenerUid; objectTrackerUidsToLoad.push(this.listenerTracker); } var playingarr = o["playing"]; var i, len, d, src, is_music, tag, playbackTime, looping, vol, b, a, p, pan, panObjUid; if (this.saveload !== 3) { for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.is_music && this.saveload === 1) continue; // only saving/loading sound: leave music playing if (!a.is_music && this.saveload === 2) continue; // only saving/loading music: leave sound playing a.stop(); } } var fxarr, fxtype, fxparams, fx; for (p in effects) { if (effects.hasOwnProperty(p)) { for (i = 0, len = effects[p].length; i < len; i++) effects[p][i].remove(); } } cr.wipe(effects); for (p in o["effects"]) { if (o["effects"].hasOwnProperty(p)) { fxarr = o["effects"][p]; for (i = 0, len = fxarr.length; i < len; i++) { fxtype = fxarr[i]["type"]; fxparams = fxarr[i]["params"]; switch (fxtype) { case "filter": addEffectForTag(p, new FilterEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "delay": addEffectForTag(p, new DelayEffect(fxparams[0], fxparams[1], fxparams[2])); break; case "convolve": src = fxparams[2]; b = this.getAudioBuffer(src, false); if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, fxparams[0], fxparams[1], src); } else { fx = new ConvolveEffect(null, fxparams[0], fxparams[1], src); b.normalizeWhenReady = fxparams[0]; b.convolveWhenReady = fx; } addEffectForTag(p, fx); break; case "flanger": addEffectForTag(p, new FlangerEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "phaser": addEffectForTag(p, new PhaserEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "gain": addEffectForTag(p, new GainEffect(fxparams[0])); break; case "tremolo": addEffectForTag(p, new TremoloEffect(fxparams[0], fxparams[1])); break; case "ringmod": addEffectForTag(p, new RingModulatorEffect(fxparams[0], fxparams[1])); break; case "distortion": addEffectForTag(p, new DistortionEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "compressor": addEffectForTag(p, new CompressorEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "analyser": addEffectForTag(p, new AnalyserEffect(fxparams[0], fxparams[1])); break; } } } } for (i = 0, len = playingarr.length; i < len; i++) { if (this.saveload === 3) // not saving/loading any sounds/music continue; d = playingarr[i]; src = d["buffersrc"]; is_music = d["is_music"]; tag = d["tag"]; playbackTime = d["playbackTime"]; looping = d["looping"]; vol = d["volume"]; pan = d["pan"]; panObjUid = (pan && pan.hasOwnProperty("objUid")) ? pan["objUid"] : -1; if (is_music && this.saveload === 1) // not saving/loading music continue; if (!is_music && this.saveload === 2) // not saving/loading sound continue; a = this.getAudioInstance(src, tag, is_music, looping, vol); if (!a) { b = this.getAudioBuffer(src, is_music); b.seekWhenReady = playbackTime; b.pauseWhenReady = d["paused"]; if (pan) { if (panObjUid !== -1) { b.panWhenReady.push({ objUid: panObjUid, ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } else { b.panWhenReady.push({ x: pan["x"], y: pan["y"], a: pan["a"], ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } } continue; } a.resume_position = d["resume_position"]; a.setPannerEnabled(!!pan); a.play(looping, vol, playbackTime); a.updatePlaybackRate(); a.updateVolume(); a.doSetMuted(a.is_muted || a.is_silent); if (d["paused"]) a.pause(); if (d["muted"]) a.setMuted(true); a.doSetMuted(a.is_muted || a.is_silent); if (pan) { if (panObjUid !== -1) { a.objectTracker = a.objectTracker || new ObjectTracker(); a.objectTracker.loadUid = panObjUid; objectTrackerUidsToLoad.push(a.objectTracker); } else { a.setPan(pan["x"], pan["y"], pan["a"], pan["ia"], pan["oa"], pan["og"]); } } } if (setSilent && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (!setSilent && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; instanceProto.afterLoad = function () { var i, len, ot, inst; for (i = 0, len = objectTrackerUidsToLoad.length; i < len; i++) { ot = objectTrackerUidsToLoad[i]; inst = this.runtime.getObjectByUID(ot.loadUid); ot.setObject(inst); ot.loadUid = -1; if (inst) { listenerX = inst.x; listenerY = inst.y; } } cr.clearArray(objectTrackerUidsToLoad); }; instanceProto.onSuspend = function (s) { if (this.playinbackground) return; if (!s && context && context["resume"]) context["resume"](); var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSuspended(s); if (s && context && context["suspend"]) context["suspend"](); }; instanceProto.tick = function () { var dt = this.runtime.dt; var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; a.tick(dt); if (timescale_mode !== 0) a.updatePlaybackRate(); } var p, arr, f; for (p in effects) { if (effects.hasOwnProperty(p)) { arr = effects[p]; for (i = 0, len = arr.length; i < len; i++) { f = arr[i]; if (f.tick) f.tick(); } } } if (api === API_WEBAUDIO && this.listenerTracker.hasObject()) { this.listenerTracker.tick(dt); listenerX = this.listenerTracker.obj.x; listenerY = this.listenerTracker.obj.y; context["listener"]["setPosition"](this.listenerTracker.obj.x, this.listenerTracker.obj.y, this.listenerZ); context["listener"]["setVelocity"](this.listenerTracker.getVelocityX(), this.listenerTracker.getVelocityY(), 0); } }; var preload_list = []; instanceProto.setPreloadList = function (arr) { var i, len, p, filename, size, isOgg; var total_size = 0; for (i = 0, len = arr.length; i < len; ++i) { p = arr[i]; filename = p[0]; size = p[1] * 2; isOgg = (filename.length > 4 && filename.substr(filename.length - 4) === ".ogg"); if ((isOgg && useOgg) || (!isOgg && !useOgg)) { preload_list.push({ filename: filename, size: size, obj: null }); total_size += size; } } return total_size; }; instanceProto.startPreloads = function () { var i, len, p, src; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; src = this.runtime.files_subfolder + p.filename; p.obj = this.getAudioBuffer(src, false); } }; instanceProto.getPreloadedSize = function () { var completed = 0; var i, len, p; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; if (p.obj.isLoadedAndDecoded() || p.obj.hasFailedToLoad() || this.runtime.isDomFree || this.runtime.isAndroidStockBrowser) { completed += p.size; } else if (p.obj.isLoaded()) // downloaded but not decoded: only happens in Web Audio API, count as half-way progress { completed += Math.floor(p.size / 2); } }; return completed; }; instanceProto.getAudioBuffer = function (src_, is_music) { var i, len, a, ret = null, j, k, lenj, ai; for (i = 0, len = audioBuffers.length; i < len; i++) { a = audioBuffers[i]; if (a.src === src_) { ret = a; break; } } if (!ret) { ret = new C2AudioBuffer(src_, is_music); audioBuffers.push(ret); } return ret; }; instanceProto.getAudioInstance = function (src_, tag, is_music, looping, vol) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.src === src_ && (a.canBeRecycled() || is_music)) { a.tag = tag; return a; } } var b = this.getAudioBuffer(src_, is_music); if (!b.bufferObject) { if (tag !== "<preload>") { b.playTagWhenReady = tag; b.loopWhenReady = looping; b.volumeWhenReady = vol; } return null; } a = new C2AudioInstance(b, tag); audioInstances.push(a); return a; }; var taggedAudio = []; function SortByIsPlaying(a, b) { var an = a.isPlaying() ? 1 : 0; var bn = b.isPlaying() ? 1 : 0; if (an === bn) return 0; else if (an < bn) return 1; else return -1; }; function getAudioByTag(tag, sort_by_playing) { cr.clearArray(taggedAudio); if (!tag.length) { if (!lastAudio || lastAudio.hasEnded()) return; else { cr.clearArray(taggedAudio); taggedAudio[0] = lastAudio; return; } } var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (cr.equals_nocase(tag, a.tag)) taggedAudio.push(a); } if (sort_by_playing) taggedAudio.sort(SortByIsPlaying); }; function reconnectEffects(tag) { var i, len, arr, n, toNode = context["destination"]; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { toNode = arr[0].getInputNode(); for (i = 0, len = arr.length; i < len; i++) { n = arr[i]; if (i + 1 === len) n.connectTo(context["destination"]); else n.connectTo(arr[i + 1].getInputNode()); } } } getAudioByTag(tag); for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].reconnect(toNode); if (micSource && micTag === tag) { micSource["disconnect"](); micSource["connect"](toNode); } }; function addEffectForTag(tag, fx) { if (!effects.hasOwnProperty(tag)) effects[tag] = [fx]; else effects[tag].push(fx); reconnectEffects(tag); }; function Cnds() {}; Cnds.prototype.OnEnded = function (t) { return cr.equals_nocase(audTag, t); }; Cnds.prototype.PreloadsComplete = function () { var i, len; for (i = 0, len = audioBuffers.length; i < len; i++) { if (!audioBuffers[i].isLoadedAndDecoded() && !audioBuffers[i].hasFailedToLoad()) return false; } return true; }; Cnds.prototype.AdvancedAudioSupported = function () { return api === API_WEBAUDIO; }; Cnds.prototype.IsSilent = function () { return silent; }; Cnds.prototype.IsAnyPlaying = function () { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) { if (audioInstances[i].isPlaying()) return true; } return false; }; Cnds.prototype.IsTagPlaying = function (tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (taggedAudio[i].isPlaying()) return true; } return false; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Play = function (file, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtPosition = function (file, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtObject = function (file, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayByName = function (folder, filename, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtPositionByName = function (folder, filename, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtObjectByName = function (folder, filename, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping!==0, v); }; Acts.prototype.SetLooping = function (tag, looping) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setLooping(looping === 0); }; Acts.prototype.SetMuted = function (tag, muted) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setMuted(muted === 0); }; Acts.prototype.SetVolume = function (tag, vol) { getAudioByTag(tag); var v = dbToLinear(vol); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setVolume(v); }; Acts.prototype.Preload = function (file) { if (silent) return; var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_CORDOVA) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.PreloadByName = function (folder, filename) { if (silent) return; var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_CORDOVA) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.SetPlaybackRate = function (tag, rate) { getAudioByTag(tag); if (rate < 0.0) rate = 0; var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setPlaybackRate(rate); }; Acts.prototype.Stop = function (tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].stop(); }; Acts.prototype.StopAll = function () { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].stop(); }; Acts.prototype.SetPaused = function (tag, state) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (state === 0) taggedAudio[i].pause(); else taggedAudio[i].resume(); } }; Acts.prototype.Seek = function (tag, pos) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { taggedAudio[i].seek(pos); } }; Acts.prototype.SetSilent = function (s) { var i, len; if (s === 2) // toggling s = (silent ? 1 : 0); // choose opposite state if (s === 0 && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (s === 1 && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; Acts.prototype.SetMasterVolume = function (vol) { masterVolume = dbToLinear(vol); var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].updateVolume(); }; Acts.prototype.AddFilterEffect = function (tag, type, freq, detune, q, gain, mix) { if (api !== API_WEBAUDIO || type < 0 || type >= filterTypes.length || !context["createBiquadFilter"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FilterEffect(type, freq, detune, q, gain, mix)); }; Acts.prototype.AddDelayEffect = function (tag, delay, gain, mix) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DelayEffect(delay, dbToLinear(gain), mix)); }; Acts.prototype.AddFlangerEffect = function (tag, delay, modulation, freq, feedback, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FlangerEffect(delay / 1000, modulation / 1000, freq, feedback / 100, mix)); }; Acts.prototype.AddPhaserEffect = function (tag, freq, detune, q, mod, modfreq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new PhaserEffect(freq, detune, q, mod, modfreq, mix)); }; Acts.prototype.AddConvolutionEffect = function (tag, file, norm, mix) { if (api !== API_WEBAUDIO || !context["createConvolver"]) return; var doNormalize = (norm === 0); var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); var b = this.getAudioBuffer(src, false); tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; var fx; if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, doNormalize, mix, src); } else { fx = new ConvolveEffect(null, doNormalize, mix, src); b.normalizeWhenReady = doNormalize; b.convolveWhenReady = fx; } addEffectForTag(tag, fx); }; Acts.prototype.AddGainEffect = function (tag, g) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(dbToLinear(g))); }; Acts.prototype.AddMuteEffect = function (tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(0)); // re-use gain effect with 0 gain }; Acts.prototype.AddTremoloEffect = function (tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new TremoloEffect(freq, mix)); }; Acts.prototype.AddRingModEffect = function (tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new RingModulatorEffect(freq, mix)); }; Acts.prototype.AddDistortionEffect = function (tag, threshold, headroom, drive, makeupgain, mix) { if (api !== API_WEBAUDIO || !context["createWaveShaper"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DistortionEffect(threshold, headroom, drive, makeupgain, mix)); }; Acts.prototype.AddCompressorEffect = function (tag, threshold, knee, ratio, attack, release) { if (api !== API_WEBAUDIO || !context["createDynamicsCompressor"]) return; tag = tag.toLowerCase(); addEffectForTag(tag, new CompressorEffect(threshold, knee, ratio, attack / 1000, release / 1000)); }; Acts.prototype.AddAnalyserEffect = function (tag, fftSize, smoothing) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new AnalyserEffect(fftSize, smoothing)); }; Acts.prototype.RemoveEffects = function (tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); var i, len, arr; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { for (i = 0, len = arr.length; i < len; i++) arr[i].remove(); cr.clearArray(arr); reconnectEffects(tag); } } }; Acts.prototype.SetEffectParameter = function (tag, index, param, value, ramp, time) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); index = Math.floor(index); var arr; if (!effects.hasOwnProperty(tag)) return; arr = effects[tag]; if (index < 0 || index >= arr.length) return; arr[index].setParam(param, value, ramp, time); }; Acts.prototype.SetListenerObject = function (obj_) { if (!obj_ || api !== API_WEBAUDIO) return; var inst = obj_.getFirstPicked(); if (!inst) return; this.listenerTracker.setObject(inst); listenerX = inst.x; listenerY = inst.y; }; Acts.prototype.SetListenerZ = function (z) { this.listenerZ = z; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.Duration = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getDuration()); else ret.set_float(0); }; Exps.prototype.PlaybackTime = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getPlaybackTime(true)); else ret.set_float(0); }; Exps.prototype.Volume = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) { var v = taggedAudio[0].getVolume(); ret.set_float(linearToDb(v)); } else ret.set_float(0); }; Exps.prototype.MasterVolume = function (ret) { ret.set_float(linearToDb(masterVolume)); }; Exps.prototype.EffectCount = function (ret, tag) { tag = tag.toLowerCase(); var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; ret.set_int(arr ? arr.length : 0); }; function getAnalyser(tag, index) { var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; if (arr && index >= 0 && index < arr.length && arr[index].freqBins) return arr[index]; else return null; }; Exps.prototype.AnalyserFreqBinCount = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); ret.set_int(analyser ? analyser.node["frequencyBinCount"] : 0); }; Exps.prototype.AnalyserFreqBinAt = function (ret, tag, index, bin) { tag = tag.toLowerCase(); index = Math.floor(index); bin = Math.floor(bin); var analyser = getAnalyser(tag, index); if (!analyser) ret.set_float(0); else if (bin < 0 || bin >= analyser.node["frequencyBinCount"]) ret.set_float(0); else ret.set_float(analyser.freqBins[bin]); }; Exps.prototype.AnalyserPeakLevel = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.peak); else ret.set_float(0); }; Exps.prototype.AnalyserRMSLevel = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.rms); else ret.set_float(0); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Browser = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Browser.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; window.addEventListener("resize", function () { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnResize, self); }); if (typeof navigator.onLine !== "undefined") { window.addEventListener("online", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOnline, self); }); window.addEventListener("offline", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOffline, self); }); } if (typeof window.applicationCache !== "undefined") { window.applicationCache.addEventListener('updateready', function() { self.runtime.loadingprogress = 1; self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); window.applicationCache.addEventListener('progress', function(e) { self.runtime.loadingprogress = e["loaded"] / e["total"]; }); } if (!this.runtime.isDirectCanvas) { document.addEventListener("appMobi.device.update.available", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); document.addEventListener("backbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }); document.addEventListener("menubutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); }); document.addEventListener("searchbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnSearchButton, self); }); document.addEventListener("tizenhwkey", function (e) { var ret; switch (e["keyName"]) { case "back": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); if (!ret) { if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); } break; case "menu": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); if (!ret) e.preventDefault(); break; } }); } if (this.runtime.isWinJS && WinJS["Application"]) { WinJS["Application"]["onbackclick"] = function (e) { return !!self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }; } this.runtime.addSuspendCallback(function(s) { if (s) { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageHidden, self); } else { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageVisible, self); } }); this.is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); }; var batteryManager = null; var loadedBatteryManager = false; function maybeLoadBatteryManager() { if (loadedBatteryManager) return; if (!navigator["getBattery"]) return; var promise = navigator["getBattery"](); loadedBatteryManager = true; if (promise) { promise.then(function (manager) { batteryManager = manager; }); } }; function Cnds() {}; Cnds.prototype.CookiesEnabled = function() { return navigator ? navigator.cookieEnabled : false; }; Cnds.prototype.IsOnline = function() { return navigator ? navigator.onLine : false; }; Cnds.prototype.HasJava = function() { return navigator ? navigator.javaEnabled() : false; }; Cnds.prototype.OnOnline = function() { return true; }; Cnds.prototype.OnOffline = function() { return true; }; Cnds.prototype.IsDownloadingUpdate = function () { if (typeof window["applicationCache"] === "undefined") return false; else return window["applicationCache"]["status"] === window["applicationCache"]["DOWNLOADING"]; }; Cnds.prototype.OnUpdateReady = function () { return true; }; Cnds.prototype.PageVisible = function () { return !this.runtime.isSuspended; }; Cnds.prototype.OnPageVisible = function () { return true; }; Cnds.prototype.OnPageHidden = function () { return true; }; Cnds.prototype.OnResize = function () { return true; }; Cnds.prototype.IsFullscreen = function () { return !!(document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || this.runtime.isNodeFullscreen); }; Cnds.prototype.OnBackButton = function () { return true; }; Cnds.prototype.OnMenuButton = function () { return true; }; Cnds.prototype.OnSearchButton = function () { return true; }; Cnds.prototype.IsMetered = function () { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) return false; return !!connection["metered"]; }; Cnds.prototype.IsCharging = function () { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { return !!battery["charging"] } else { maybeLoadBatteryManager(); if (batteryManager) { return !!batteryManager["charging"]; } else { return true; // if unknown, default to charging (powered) } } }; Cnds.prototype.IsPortraitLandscape = function (p) { var current = (window.innerWidth <= window.innerHeight ? 0 : 1); return current === p; }; Cnds.prototype.SupportsFullscreen = function () { if (this.runtime.isNodeWebkit) return true; var elem = this.runtime.canvasdiv || this.runtime.canvas; return !!(elem["requestFullscreen"] || elem["mozRequestFullScreen"] || elem["msRequestFullscreen"] || elem["webkitRequestFullScreen"]); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Alert = function (msg) { if (!this.runtime.isDomFree) alert(msg.toString()); }; Acts.prototype.Close = function () { if (this.runtime.isCocoonJs) CocoonJS["App"]["forceToFinish"](); else if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); else if (navigator["app"] && navigator["app"]["exitApp"]) navigator["app"]["exitApp"](); else if (navigator["device"] && navigator["device"]["exitApp"]) navigator["device"]["exitApp"](); else if (!this.is_arcade && !this.runtime.isDomFree) window.close(); }; Acts.prototype.Focus = function () { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["focus"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.focus(); }; Acts.prototype.Blur = function () { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["blur"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.blur(); }; Acts.prototype.GoBack = function () { if (navigator["app"] && navigator["app"]["backHistory"]) navigator["app"]["backHistory"](); else if (!this.is_arcade && !this.runtime.isDomFree && window.back) window.back(); }; Acts.prototype.GoForward = function () { if (!this.is_arcade && !this.runtime.isDomFree && window.forward) window.forward(); }; Acts.prototype.GoHome = function () { if (!this.is_arcade && !this.runtime.isDomFree && window.home) window.home(); }; Acts.prototype.GoToURL = function (url, target) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (this.runtime.isCordova) window.open(url, "_system"); else if (!this.is_arcade && !this.runtime.isDomFree) { if (target === 2 && !this.is_arcade) // top window.top.location = url; else if (target === 1 && !this.is_arcade) // parent window.parent.location = url; else // self window.location = url; } }; Acts.prototype.GoToURLWindow = function (url, tag) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (this.runtime.isCordova) window.open(url, "_system"); else if (!this.is_arcade && !this.runtime.isDomFree) window.open(url, tag); }; Acts.prototype.Reload = function () { if (!this.is_arcade && !this.runtime.isDomFree) window.location.reload(); }; var firstRequestFullscreen = true; var crruntime = null; function onFullscreenError(e) { if (console && console.warn) console.warn("Fullscreen request failed: ", e); crruntime["setSize"](window.innerWidth, window.innerHeight); }; Acts.prototype.RequestFullScreen = function (stretchmode) { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Requesting fullscreen is not supported on this platform - the request has been ignored"); return; } if (stretchmode >= 2) stretchmode += 1; if (stretchmode === 6) stretchmode = 2; if (this.runtime.isNodeWebkit) { if (this.runtime.isDebug) { debuggerFullscreen(true); } else if (!this.runtime.isNodeFullscreen && window["nwgui"]) { window["nwgui"]["Window"]["get"]()["enterFullscreen"](); this.runtime.isNodeFullscreen = true; this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); } } else { if (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || document["fullScreenElement"]) { return; } this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); var elem = this.runtime.canvasdiv || this.runtime.canvas; if (firstRequestFullscreen) { firstRequestFullscreen = false; crruntime = this.runtime; elem.addEventListener("mozfullscreenerror", onFullscreenError); elem.addEventListener("webkitfullscreenerror", onFullscreenError); elem.addEventListener("MSFullscreenError", onFullscreenError); elem.addEventListener("fullscreenerror", onFullscreenError); } if (elem["requestFullscreen"]) elem["requestFullscreen"](); else if (elem["mozRequestFullScreen"]) elem["mozRequestFullScreen"](); else if (elem["msRequestFullscreen"]) elem["msRequestFullscreen"](); else if (elem["webkitRequestFullScreen"]) { if (typeof Element !== "undefined" && typeof Element["ALLOW_KEYBOARD_INPUT"] !== "undefined") elem["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]); else elem["webkitRequestFullScreen"](); } } }; Acts.prototype.CancelFullScreen = function () { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Exiting fullscreen is not supported on this platform - the request has been ignored"); return; } if (this.runtime.isNodeWebkit) { if (this.runtime.isDebug) { debuggerFullscreen(false); } else if (this.runtime.isNodeFullscreen && window["nwgui"]) { window["nwgui"]["Window"]["get"]()["leaveFullscreen"](); this.runtime.isNodeFullscreen = false; } } else { if (document["exitFullscreen"]) document["exitFullscreen"](); else if (document["mozCancelFullScreen"]) document["mozCancelFullScreen"](); else if (document["msExitFullscreen"]) document["msExitFullscreen"](); else if (document["webkitCancelFullScreen"]) document["webkitCancelFullScreen"](); } }; Acts.prototype.Vibrate = function (pattern_) { try { var arr = pattern_.split(","); var i, len; for (i = 0, len = arr.length; i < len; i++) { arr[i] = parseInt(arr[i], 10); } if (navigator["vibrate"]) navigator["vibrate"](arr); else if (navigator["mozVibrate"]) navigator["mozVibrate"](arr); else if (navigator["webkitVibrate"]) navigator["webkitVibrate"](arr); else if (navigator["msVibrate"]) navigator["msVibrate"](arr); } catch (e) {} }; Acts.prototype.InvokeDownload = function (url_, filename_) { var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(url_); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = url_; a["download"] = filename_; body.appendChild(a); var clickEvent = document.createEvent("MouseEvent"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.InvokeDownloadString = function (str_, mimetype_, filename_) { var datauri = "data:" + mimetype_ + "," + encodeURIComponent(str_); var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(datauri); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = datauri; a["download"] = filename_; body.appendChild(a); var clickEvent = document.createEvent("MouseEvent"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.ConsoleLog = function (type_, msg_) { if (typeof console === "undefined") return; if (type_ === 0 && console.log) console.log(msg_.toString()); if (type_ === 1 && console.warn) console.warn(msg_.toString()); if (type_ === 2 && console.error) console.error(msg_.toString()); }; Acts.prototype.ConsoleGroup = function (name_) { if (console && console.group) console.group(name_); }; Acts.prototype.ConsoleGroupEnd = function () { if (console && console.groupEnd) console.groupEnd(); }; Acts.prototype.ExecJs = function (js_) { try { if (eval) eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } }; var orientations = [ "portrait", "landscape", "portrait-primary", "portrait-secondary", "landscape-primary", "landscape-secondary" ]; Acts.prototype.LockOrientation = function (o) { o = Math.floor(o); if (o < 0 || o >= orientations.length) return; this.runtime.autoLockOrientation = false; var orientation = orientations[o]; if (screen["orientation"] && screen["orientation"]["lock"]) screen["orientation"]["lock"](orientation); else if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); }; Acts.prototype.UnlockOrientation = function () { this.runtime.autoLockOrientation = false; if (screen["orientation"] && screen["orientation"]["unlock"]) screen["orientation"]["unlock"](); else if (screen["unlockOrientation"]) screen["unlockOrientation"](); else if (screen["webkitUnlockOrientation"]) screen["webkitUnlockOrientation"](); else if (screen["mozUnlockOrientation"]) screen["mozUnlockOrientation"](); else if (screen["msUnlockOrientation"]) screen["msUnlockOrientation"](); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.URL = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.toString()); }; Exps.prototype.Protocol = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.protocol); }; Exps.prototype.Domain = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hostname); }; Exps.prototype.PathName = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.pathname); }; Exps.prototype.Hash = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hash); }; Exps.prototype.Referrer = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : document.referrer); }; Exps.prototype.Title = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : document.title); }; Exps.prototype.Name = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appName); }; Exps.prototype.Version = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appVersion); }; Exps.prototype.Language = function (ret) { if (navigator && navigator.language) ret.set_string(navigator.language); else ret.set_string(""); }; Exps.prototype.Platform = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.platform); }; Exps.prototype.Product = function (ret) { if (navigator && navigator.product) ret.set_string(navigator.product); else ret.set_string(""); }; Exps.prototype.Vendor = function (ret) { if (navigator && navigator.vendor) ret.set_string(navigator.vendor); else ret.set_string(""); }; Exps.prototype.UserAgent = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.userAgent); }; Exps.prototype.QueryString = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.search); }; Exps.prototype.QueryParam = function (ret, paramname) { if (this.runtime.isDomFree) { ret.set_string(""); return; } var match = RegExp('[?&]' + paramname + '=([^&]*)').exec(window.location.search); if (match) ret.set_string(decodeURIComponent(match[1].replace(/\+/g, ' '))); else ret.set_string(""); }; Exps.prototype.Bandwidth = function (ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_float(Number.POSITIVE_INFINITY); else { if (typeof connection["bandwidth"] !== "undefined") ret.set_float(connection["bandwidth"]); else if (typeof connection["downlinkMax"] !== "undefined") ret.set_float(connection["downlinkMax"]); else ret.set_float(Number.POSITIVE_INFINITY); } }; Exps.prototype.ConnectionType = function (ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_string("unknown"); else { ret.set_string(connection["type"] || "unknown"); } }; Exps.prototype.BatteryLevel = function (ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { ret.set_float(battery["level"]); } else { maybeLoadBatteryManager(); if (batteryManager) { ret.set_float(batteryManager["level"]); } else { ret.set_float(1); // not supported/unknown: assume charged } } }; Exps.prototype.BatteryTimeLeft = function (ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { ret.set_float(battery["dischargingTime"]); } else { maybeLoadBatteryManager(); if (batteryManager) { ret.set_float(batteryManager["dischargingTime"]); } else { ret.set_float(Number.POSITIVE_INFINITY); // not supported/unknown: assume infinite time left } } }; Exps.prototype.ExecJS = function (ret, js_) { if (!eval) { ret.set_any(0); return; } var result = 0; try { result = eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } if (typeof result === "number") ret.set_any(result); else if (typeof result === "string") ret.set_any(result); else if (typeof result === "boolean") ret.set_any(result ? 1 : 0); else ret.set_any(0); }; Exps.prototype.ScreenWidth = function (ret) { ret.set_int(screen.width); }; Exps.prototype.ScreenHeight = function (ret) { ret.set_int(screen.height); }; Exps.prototype.DevicePixelRatio = function (ret) { ret.set_float(this.runtime.devicePixelRatio); }; Exps.prototype.WindowInnerWidth = function (ret) { ret.set_int(window.innerWidth); }; Exps.prototype.WindowInnerHeight = function (ret) { ret.set_int(window.innerHeight); }; Exps.prototype.WindowOuterWidth = function (ret) { ret.set_int(window.outerWidth); }; Exps.prototype.WindowOuterHeight = function (ret) { ret.set_int(window.outerHeight); }; pluginProto.exps = new Exps(); }()); /** * Object holder for the plugin */ cr.plugins_.Cocoon_Canvasplus = function(runtime) { this.runtime = runtime; }; /** * C2 plugin */ (function() { var dialog = ""; var input_text = ""; var capture_screen_sync = ""; var capture_screen_async = ""; var device_info = ""; var pluginProto = cr.plugins_.Cocoon_Canvasplus.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; /** * C2 specific behaviour */ pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var self; instanceProto.onCreate = function() { if (!(this.runtime.isAndroid || this.runtime.isiOS)) return; if (typeof Cocoon == 'undefined') return; self = this; }; function Cnds() {}; /** * Cocoon Basic conditions */ Cnds.prototype.isCanvasPlus = function() { return this.runtime.isCocoonJs; }; Cnds.prototype.onKeyboardCancel = function() { return true; }; Cnds.prototype.onKeyboardSuccess = function() { return true; }; Cnds.prototype.onConfirmCancel = function() { return true; }; Cnds.prototype.onConfirmSuccess = function() { return true; }; pluginProto.cnds = new Cnds(); /** * Plugin actions */ function Acts() {}; Acts.prototype.promptKeyboard = function(title_, message_, initial_, type_, canceltext_, oktext_) { if (!this.runtime.isCocoonJs) return; var typestr = ["text", "num", "phone", "email", "url"][type_]; Cocoon.Dialog.prompt({ title: title_, message: message_, text: initial_, type: typestr, cancelText: canceltext_, confirmText: oktext_ }, { success: function(text) { input_text = text; self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onKeyboardSuccess, self); }, cancel: function() { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onKeyboardCancel, self); } }); }; Acts.prototype.confirmDialog = function(title_, message_, canceltext_, oktext_) { if (!this.runtime.isCocoonJs) return; Cocoon.Dialog.confirm({ title: title_, message: message_, cancelText: canceltext_, confirmText: oktext_ }, function(accepted) { if (accepted) { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onConfirmSuccess, self); } else { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onConfirmCancel, self); } }); }; Acts.prototype.openURL = function(url_) { Cocoon.App.openURL(url_); }; Acts.prototype.exitApp = function() { Cocoon.App.exit(); }; Acts.prototype.pauseApp = function() { Cocoon.App.pause(); }; Acts.prototype.resumeApp = function() { Cocoon.App.resume(); }; Acts.prototype.captureScreenSync = function(filename_, storage_, capture_) { if (!this.runtime.isCocoonJs) return; var storage_type = ["APP_STORAGE", "INTERNAL_STORAGE", "EXTERNAL_STORAGE", "TEMPORARY_STORAGE"][storage_]; var gallery = false; capture_screen_sync = Cocoon.Utils.captureScreen(filename_, storage_type, capture_, gallery); }; Acts.prototype.captureScreenAsync = function(filename_, storage_, capture_) { if (!this.runtime.isCocoonJs) return; var storage_type = ["APP_STORAGE", "INTERNAL_STORAGE", "EXTERNAL_STORAGE", "TEMPORARY_STORAGE"][storage_]; var gallery = false; Cocoon.Utils.captureScreenAsync(filename_, storage_type, capture_, gallery, function(url, error) { if (error) { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onCaptureScreenAsyncFail, self); } else { capture_screen_async = url; self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onCaptureScreenAsyncSuccess, self); } }); }; Acts.prototype.captureScreenSyncShare = function(filename_, storage_, capture_, text_) { if (!this.runtime.isCocoonJs) return; var storage_type = ["APP_STORAGE", "INTERNAL_STORAGE", "EXTERNAL_STORAGE", "TEMPORARY_STORAGE"][storage_]; var gallery = false; url = Cocoon.Utils.captureScreen(filename_, storage_type, capture_, gallery); Cocoon.Share.share({ message: text_, image: url }, function(activity, completed, error) { if (completed) { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onShareSyncComplete, self); } else { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onShareSyncFail, self); console.log(error); } }); }; Acts.prototype.showWebdialog = function(url_){ dialog = new Cocoon.Widget.WebDialog(); dialog.show(url_, function(){ console.log("The user has closed the dialog!"); self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onWebdialogUserClose, self); }); }; Acts.prototype.closeWebdialog = function(){ dialog.close(); }; Acts.prototype.getDeviceInfo = function(){ device_info = Cocoon.Device.getDeviceInfo(); }; pluginProto.acts = new Acts(); /** * Expressions */ function Exps() {}; Exps.prototype.InputText = function(ret) { ret.set_string(input_text); }; Exps.prototype.CaptureScreenSync = function(ret) { ret.set_string(capture_screen_sync); }; Exps.prototype.CaptureScreenAsync = function(ret) { ret.set_string(capture_screen_async); }; Exps.prototype.DeviceOS = function(ret) { ret.set_string(device_info.os); }; Exps.prototype.DeviceVersion = function(ret) { ret.set_string(device_info.version); }; Exps.prototype.DeviceDPI = function(ret) { ret.set_string(device_info.dpi); }; Exps.prototype.DeviceBrand = function(ret) { ret.set_string(device_info.brand); }; Exps.prototype.DeviceModel = function(ret) { ret.set_string(device_info.model); }; Exps.prototype.DevicePlatformId = function(ret) { ret.set_string(device_info.platformId); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Function = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Function.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var funcStack = []; var funcStackPtr = -1; var isInPreview = false; // set in onCreate function FuncStackEntry() { this.name = ""; this.retVal = 0; this.params = []; }; function pushFuncStack() { funcStackPtr++; if (funcStackPtr === funcStack.length) funcStack.push(new FuncStackEntry()); return funcStack[funcStackPtr]; }; function getCurrentFuncStack() { if (funcStackPtr < 0) return null; return funcStack[funcStackPtr]; }; function getOneAboveFuncStack() { if (!funcStack.length) return null; var i = funcStackPtr + 1; if (i >= funcStack.length) i = funcStack.length - 1; return funcStack[i]; }; function popFuncStack() { ; funcStackPtr--; }; instanceProto.onCreate = function() { isInPreview = (typeof cr_is_preview !== "undefined"); var self = this; window["c2_callFunction"] = function (name_, params_) { var i, len, v; var fs = pushFuncStack(); fs.name = name_.toLowerCase(); fs.retVal = 0; if (params_) { fs.params.length = params_.length; for (i = 0, len = params_.length; i < len; ++i) { v = params_[i]; if (typeof v === "number" || typeof v === "string") fs.params[i] = v; else if (typeof v === "boolean") fs.params[i] = (v ? 1 : 0); else fs.params[i] = 0; } } else { cr.clearArray(fs.params); } self.runtime.trigger(cr.plugins_.Function.prototype.cnds.OnFunction, self, fs.name); popFuncStack(); return fs.retVal; }; }; function Cnds() {}; Cnds.prototype.OnFunction = function (name_) { var fs = getCurrentFuncStack(); if (!fs) return false; return cr.equals_nocase(name_, fs.name); }; Cnds.prototype.CompareParam = function (index_, cmp_, value_) { var fs = getCurrentFuncStack(); if (!fs) return false; index_ = cr.floor(index_); if (index_ < 0 || index_ >= fs.params.length) return false; return cr.do_cmp(fs.params[index_], cmp_, value_); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.CallFunction = function (name_, params_) { var fs = pushFuncStack(); fs.name = name_.toLowerCase(); fs.retVal = 0; cr.shallowAssignArray(fs.params, params_); var ran = this.runtime.trigger(cr.plugins_.Function.prototype.cnds.OnFunction, this, fs.name); if (isInPreview && !ran) { ; } popFuncStack(); }; Acts.prototype.SetReturnValue = function (value_) { var fs = getCurrentFuncStack(); if (fs) fs.retVal = value_; else ; }; Acts.prototype.CallExpression = function (unused) { }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.ReturnValue = function (ret) { var fs = getOneAboveFuncStack(); if (fs) ret.set_any(fs.retVal); else ret.set_int(0); }; Exps.prototype.ParamCount = function (ret) { var fs = getCurrentFuncStack(); if (fs) ret.set_int(fs.params.length); else { ; ret.set_int(0); } }; Exps.prototype.Param = function (ret, index_) { index_ = cr.floor(index_); var fs = getCurrentFuncStack(); if (fs) { if (index_ >= 0 && index_ < fs.params.length) { ret.set_any(fs.params[index_]); } else { ; ret.set_int(0); } } else { ; ret.set_int(0); } }; Exps.prototype.Call = function (ret, name_) { var fs = pushFuncStack(); fs.name = name_.toLowerCase(); fs.retVal = 0; cr.clearArray(fs.params); var i, len; for (i = 2, len = arguments.length; i < len; i++) fs.params.push(arguments[i]); var ran = this.runtime.trigger(cr.plugins_.Function.prototype.cnds.OnFunction, this, fs.name); if (isInPreview && !ran) { ; } popFuncStack(); ret.set_any(fs.retVal); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Keyboard = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Keyboard.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.keyMap = new Array(256); // stores key up/down state this.usedKeys = new Array(256); this.triggerKey = 0; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; if (!this.runtime.isDomFree) { jQuery(document).keydown( function(info) { self.onKeyDown(info); } ); jQuery(document).keyup( function(info) { self.onKeyUp(info); } ); } }; var keysToBlockWhenFramed = [32, 33, 34, 35, 36, 37, 38, 39, 40, 44]; instanceProto.onKeyDown = function (info) { var alreadyPreventedDefault = false; if (window != window.top && keysToBlockWhenFramed.indexOf(info.which) > -1) { info.preventDefault(); alreadyPreventedDefault = true; info.stopPropagation(); } if (this.keyMap[info.which]) { if (this.usedKeys[info.which] && !alreadyPreventedDefault) info.preventDefault(); return; } this.keyMap[info.which] = true; this.triggerKey = info.which; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKey, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKey, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCode, this); this.runtime.isInUserInputEvent = false; if (eventRan || eventRan2) { this.usedKeys[info.which] = true; if (!alreadyPreventedDefault) info.preventDefault(); } }; instanceProto.onKeyUp = function (info) { this.keyMap[info.which] = false; this.triggerKey = info.which; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKeyReleased, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyReleased, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCodeReleased, this); this.runtime.isInUserInputEvent = false; if (eventRan || eventRan2 || this.usedKeys[info.which]) { this.usedKeys[info.which] = true; info.preventDefault(); } }; instanceProto.onWindowBlur = function () { var i; for (i = 0; i < 256; ++i) { if (!this.keyMap[i]) continue; // key already up this.keyMap[i] = false; this.triggerKey = i; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKeyReleased, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyReleased, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCodeReleased, this); if (eventRan || eventRan2) this.usedKeys[i] = true; } }; instanceProto.saveToJSON = function () { return { "triggerKey": this.triggerKey }; }; instanceProto.loadFromJSON = function (o) { this.triggerKey = o["triggerKey"]; }; function Cnds() {}; Cnds.prototype.IsKeyDown = function(key) { return this.keyMap[key]; }; Cnds.prototype.OnKey = function(key) { return (key === this.triggerKey); }; Cnds.prototype.OnAnyKey = function(key) { return true; }; Cnds.prototype.OnAnyKeyReleased = function(key) { return true; }; Cnds.prototype.OnKeyReleased = function(key) { return (key === this.triggerKey); }; Cnds.prototype.IsKeyCodeDown = function(key) { key = Math.floor(key); if (key < 0 || key >= this.keyMap.length) return false; return this.keyMap[key]; }; Cnds.prototype.OnKeyCode = function(key) { return (key === this.triggerKey); }; Cnds.prototype.OnKeyCodeReleased = function(key) { return (key === this.triggerKey); }; pluginProto.cnds = new Cnds(); function Acts() {}; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.LastKeyCode = function (ret) { ret.set_int(this.triggerKey); }; function fixedStringFromCharCode(kc) { kc = Math.floor(kc); switch (kc) { case 8: return "backspace"; case 9: return "tab"; case 13: return "enter"; case 16: return "shift"; case 17: return "control"; case 18: return "alt"; case 19: return "pause"; case 20: return "capslock"; case 27: return "esc"; case 33: return "pageup"; case 34: return "pagedown"; case 35: return "end"; case 36: return "home"; case 37: return "←"; case 38: return "↑"; case 39: return "→"; case 40: return "↓"; case 45: return "insert"; case 46: return "del"; case 91: return "left window key"; case 92: return "right window key"; case 93: return "select"; case 96: return "numpad 0"; case 97: return "numpad 1"; case 98: return "numpad 2"; case 99: return "numpad 3"; case 100: return "numpad 4"; case 101: return "numpad 5"; case 102: return "numpad 6"; case 103: return "numpad 7"; case 104: return "numpad 8"; case 105: return "numpad 9"; case 106: return "numpad *"; case 107: return "numpad +"; case 109: return "numpad -"; case 110: return "numpad ."; case 111: return "numpad /"; case 112: return "F1"; case 113: return "F2"; case 114: return "F3"; case 115: return "F4"; case 116: return "F5"; case 117: return "F6"; case 118: return "F7"; case 119: return "F8"; case 120: return "F9"; case 121: return "F10"; case 122: return "F11"; case 123: return "F12"; case 144: return "numlock"; case 145: return "scroll lock"; case 186: return ";"; case 187: return "="; case 188: return ","; case 189: return "-"; case 190: return "."; case 191: return "/"; case 192: return "'"; case 219: return "["; case 220: return "\\"; case 221: return "]"; case 222: return "#"; case 223: return "`"; default: return String.fromCharCode(kc); } }; Exps.prototype.StringFromKeyCode = function (ret, kc) { ret.set_string(fixedStringFromCharCode(kc)); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Mouse = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Mouse.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.buttonMap = new Array(4); // mouse down states this.mouseXcanvas = 0; // mouse position relative to canvas this.mouseYcanvas = 0; this.triggerButton = 0; this.triggerType = 0; this.triggerDir = 0; this.handled = false; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; if (!this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); jQuery(document).dblclick( function(info) { self.onDoubleClick(info); } ); var wheelevent = function(info) { self.onWheel(info); }; document.addEventListener("mousewheel", wheelevent, false); document.addEventListener("DOMMouseScroll", wheelevent, false); } }; var dummyoffset = {left: 0, top: 0}; instanceProto.onMouseMove = function(info) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); this.mouseXcanvas = info.pageX - offset.left; this.mouseYcanvas = info.pageY - offset.top; }; instanceProto.mouseInGame = function () { if (this.runtime.fullscreen_mode > 0) return true; return this.mouseXcanvas >= 0 && this.mouseYcanvas >= 0 && this.mouseXcanvas < this.runtime.width && this.mouseYcanvas < this.runtime.height; }; instanceProto.onMouseDown = function(info) { if (!this.mouseInGame()) return; this.buttonMap[info.which] = true; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnAnyClick, this); this.triggerButton = info.which - 1; // 1-based this.triggerType = 0; // single click this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnClick, this); this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onMouseUp = function(info) { if (!this.buttonMap[info.which]) return; if (this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; this.buttonMap[info.which] = false; this.runtime.isInUserInputEvent = true; this.triggerButton = info.which - 1; // 1-based this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnRelease, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onDoubleClick = function(info) { if (!this.mouseInGame()) return; info.preventDefault(); this.runtime.isInUserInputEvent = true; this.triggerButton = info.which - 1; // 1-based this.triggerType = 1; // double click this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnClick, this); this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onWheel = function (info) { var delta = info.wheelDelta ? info.wheelDelta : info.detail ? -info.detail : 0; this.triggerDir = (delta < 0 ? 0 : 1); this.handled = false; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnWheel, this); this.runtime.isInUserInputEvent = false; if (this.handled && cr.isCanvasInputEvent(info)) info.preventDefault(); }; function Cnds() {}; Cnds.prototype.OnClick = function (button, type) { return button === this.triggerButton && type === this.triggerType; }; Cnds.prototype.OnAnyClick = function () { return true; }; Cnds.prototype.IsButtonDown = function (button) { return this.buttonMap[button + 1]; // jQuery uses 1-based buttons for some reason }; Cnds.prototype.OnRelease = function (button) { return button === this.triggerButton; }; Cnds.prototype.IsOverObject = function (obj) { var cnd = this.runtime.getCurrentCondition(); var mx = this.mouseXcanvas; var my = this.mouseYcanvas; return cr.xor(this.runtime.testAndSelectCanvasPointOverlap(obj, mx, my, cnd.inverted), cnd.inverted); }; Cnds.prototype.OnObjectClicked = function (button, type, obj) { if (button !== this.triggerButton || type !== this.triggerType) return false; // wrong click type return this.runtime.testAndSelectCanvasPointOverlap(obj, this.mouseXcanvas, this.mouseYcanvas, false); }; Cnds.prototype.OnWheel = function (dir) { this.handled = true; return dir === this.triggerDir; }; pluginProto.cnds = new Cnds(); function Acts() {}; var lastSetCursor = null; Acts.prototype.SetCursor = function (c) { if (this.runtime.isDomFree) return; var cursor_style = ["auto", "pointer", "text", "crosshair", "move", "help", "wait", "none"][c]; if (lastSetCursor === cursor_style) return; // redundant lastSetCursor = cursor_style; document.body.style.cursor = cursor_style; }; Acts.prototype.SetCursorSprite = function (obj) { if (this.runtime.isDomFree || this.runtime.isMobile || !obj) return; var inst = obj.getFirstPicked(); if (!inst || !inst.curFrame) return; var frame = inst.curFrame; if (lastSetCursor === frame) return; // already set this frame lastSetCursor = frame; var datauri = frame.getDataUri(); var cursor_style = "url(" + datauri + ") " + Math.round(frame.hotspotX * frame.width) + " " + Math.round(frame.hotspotY * frame.height) + ", auto"; document.body.style.cursor = ""; document.body.style.cursor = cursor_style; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.X = function (ret, layerparam) { var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, true)); else ret.set_float(0); } }; Exps.prototype.Y = function (ret, layerparam) { var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function (ret) { ret.set_float(this.mouseXcanvas); }; Exps.prototype.AbsoluteY = function (ret) { ret.set_float(this.mouseYcanvas); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Sprite = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Sprite.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; function frame_getDataUri() { if (this.datauri.length === 0) { var tmpcanvas = document.createElement("canvas"); tmpcanvas.width = this.width; tmpcanvas.height = this.height; var tmpctx = tmpcanvas.getContext("2d"); if (this.spritesheeted) { tmpctx.drawImage(this.texture_img, this.offx, this.offy, this.width, this.height, 0, 0, this.width, this.height); } else { tmpctx.drawImage(this.texture_img, 0, 0, this.width, this.height); } this.datauri = tmpcanvas.toDataURL("image/png"); } return this.datauri; }; typeProto.onCreate = function() { if (this.is_family) return; var i, leni, j, lenj; var anim, frame, animobj, frameobj, wt, uv; this.all_frames = []; this.has_loaded_textures = false; for (i = 0, leni = this.animations.length; i < leni; i++) { anim = this.animations[i]; animobj = {}; animobj.name = anim[0]; animobj.speed = anim[1]; animobj.loop = anim[2]; animobj.repeatcount = anim[3]; animobj.repeatto = anim[4]; animobj.pingpong = anim[5]; animobj.sid = anim[6]; animobj.frames = []; for (j = 0, lenj = anim[7].length; j < lenj; j++) { frame = anim[7][j]; frameobj = {}; frameobj.texture_file = frame[0]; frameobj.texture_filesize = frame[1]; frameobj.offx = frame[2]; frameobj.offy = frame[3]; frameobj.width = frame[4]; frameobj.height = frame[5]; frameobj.duration = frame[6]; frameobj.hotspotX = frame[7]; frameobj.hotspotY = frame[8]; frameobj.image_points = frame[9]; frameobj.poly_pts = frame[10]; frameobj.pixelformat = frame[11]; frameobj.spritesheeted = (frameobj.width !== 0); frameobj.datauri = ""; // generated on demand and cached frameobj.getDataUri = frame_getDataUri; uv = {}; uv.left = 0; uv.top = 0; uv.right = 1; uv.bottom = 1; frameobj.sheetTex = uv; frameobj.webGL_texture = null; wt = this.runtime.findWaitingTexture(frame[0]); if (wt) { frameobj.texture_img = wt; } else { frameobj.texture_img = new Image(); frameobj.texture_img.cr_src = frame[0]; frameobj.texture_img.cr_filesize = frame[1]; frameobj.texture_img.c2webGL_texture = null; this.runtime.waitForImageLoad(frameobj.texture_img, frame[0]); } cr.seal(frameobj); animobj.frames.push(frameobj); this.all_frames.push(frameobj); } cr.seal(animobj); this.animations[i] = animobj; // swap array data for object } }; typeProto.updateAllCurrentTexture = function () { var i, len, inst; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; inst.curWebGLTexture = inst.curFrame.webGL_texture; } }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.texture_img.c2webGL_texture = null; frame.webGL_texture = null; } this.has_loaded_textures = false; this.updateAllCurrentTexture(); }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.updateAllCurrentTexture(); }; typeProto.loadTextures = function () { if (this.is_family || this.has_loaded_textures || !this.runtime.glwrap) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.has_loaded_textures = true; }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.has_loaded_textures) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; this.runtime.glwrap.deleteTexture(frame.webGL_texture); frame.webGL_texture = null; } this.has_loaded_textures = false; }; var already_drawn_images = []; typeProto.preloadCanvas2D = function (ctx) { var i, len, frameimg; cr.clearArray(already_drawn_images); for (i = 0, len = this.all_frames.length; i < len; ++i) { frameimg = this.all_frames[i].texture_img; if (already_drawn_images.indexOf(frameimg) !== -1) continue; ctx.drawImage(frameimg, 0, 0); already_drawn_images.push(frameimg); } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; var poly_pts = this.type.animations[0].frames[0].poly_pts; if (this.recycled) this.collision_poly.set_pts(poly_pts); else this.collision_poly = new cr.CollisionPoly(poly_pts); }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.isTicking = false; this.inAnimTrigger = false; this.collisionsEnabled = (this.properties[3] !== 0); if (!(this.type.animations.length === 1 && this.type.animations[0].frames.length === 1) && this.type.animations[0].speed !== 0) { this.runtime.tickMe(this); this.isTicking = true; } this.cur_animation = this.getAnimationByName(this.properties[1]) || this.type.animations[0]; this.cur_frame = this.properties[2]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; var curanimframe = this.cur_animation.frames[this.cur_frame]; this.collision_poly.set_pts(curanimframe.poly_pts); this.hotspotX = curanimframe.hotspotX; this.hotspotY = curanimframe.hotspotY; this.cur_anim_speed = this.cur_animation.speed; if (this.recycled) this.animTimer.reset(); else this.animTimer = new cr.KahanAdder(); this.frameStart = this.getNowTime(); this.animPlaying = true; this.animRepeats = 0; this.animForwards = true; this.animTriggerName = ""; this.changeAnimName = ""; this.changeAnimFrom = 0; this.changeAnimFrame = -1; this.type.loadTextures(); var i, leni, j, lenj; var anim, frame, uv, maintex; for (i = 0, leni = this.type.animations.length; i < leni; i++) { anim = this.type.animations[i]; for (j = 0, lenj = anim.frames.length; j < lenj; j++) { frame = anim.frames[j]; if (frame.width === 0) { frame.width = frame.texture_img.width; frame.height = frame.texture_img.height; } if (frame.spritesheeted) { maintex = frame.texture_img; uv = frame.sheetTex; uv.left = frame.offx / maintex.width; uv.top = frame.offy / maintex.height; uv.right = (frame.offx + frame.width) / maintex.width; uv.bottom = (frame.offy + frame.height) / maintex.height; if (frame.offx === 0 && frame.offy === 0 && frame.width === maintex.width && frame.height === maintex.height) { frame.spritesheeted = false; } } } } this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; }; instanceProto.saveToJSON = function () { var o = { "a": this.cur_animation.sid, "f": this.cur_frame, "cas": this.cur_anim_speed, "fs": this.frameStart, "ar": this.animRepeats, "at": this.animTimer.sum }; if (!this.animPlaying) o["ap"] = this.animPlaying; if (!this.animForwards) o["af"] = this.animForwards; return o; }; instanceProto.loadFromJSON = function (o) { var anim = this.getAnimationBySid(o["a"]); if (anim) this.cur_animation = anim; this.cur_frame = o["f"]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; this.cur_anim_speed = o["cas"]; this.frameStart = o["fs"]; this.animRepeats = o["ar"]; this.animTimer.reset(); this.animTimer.sum = o["at"]; this.animPlaying = o.hasOwnProperty("ap") ? o["ap"] : true; this.animForwards = o.hasOwnProperty("af") ? o["af"] : true; this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; this.collision_poly.set_pts(this.curFrame.poly_pts); this.hotspotX = this.curFrame.hotspotX; this.hotspotY = this.curFrame.hotspotY; }; instanceProto.animationFinish = function (reverse) { this.cur_frame = reverse ? 0 : this.cur_animation.frames.length - 1; this.animPlaying = false; this.animTriggerName = this.cur_animation.name; this.inAnimTrigger = true; this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnyAnimFinished, this); this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnimFinished, this); this.inAnimTrigger = false; this.animRepeats = 0; }; instanceProto.getNowTime = function() { return this.animTimer.sum; }; instanceProto.tick = function() { this.animTimer.add(this.runtime.getDt(this)); if (this.changeAnimName.length) this.doChangeAnim(); if (this.changeAnimFrame >= 0) this.doChangeAnimFrame(); var now = this.getNowTime(); var cur_animation = this.cur_animation; var prev_frame = cur_animation.frames[this.cur_frame]; var next_frame; var cur_frame_time = prev_frame.duration / this.cur_anim_speed; if (this.animPlaying && now >= this.frameStart + cur_frame_time) { if (this.animForwards) { this.cur_frame++; } else { this.cur_frame--; } this.frameStart += cur_frame_time; if (this.cur_frame >= cur_animation.frames.length) { if (cur_animation.pingpong) { this.animForwards = false; this.cur_frame = cur_animation.frames.length - 2; } else if (cur_animation.loop) { this.cur_frame = cur_animation.repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(false); } else { this.cur_frame = cur_animation.repeatto; } } } if (this.cur_frame < 0) { if (cur_animation.pingpong) { this.cur_frame = 1; this.animForwards = true; if (!cur_animation.loop) { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } } } else { if (cur_animation.loop) { this.cur_frame = cur_animation.repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } else { this.cur_frame = cur_animation.repeatto; } } } } if (this.cur_frame < 0) this.cur_frame = 0; else if (this.cur_frame >= cur_animation.frames.length) this.cur_frame = cur_animation.frames.length - 1; if (now > this.frameStart + (cur_animation.frames[this.cur_frame].duration / this.cur_anim_speed)) { this.frameStart = now; } next_frame = cur_animation.frames[this.cur_frame]; this.OnFrameChanged(prev_frame, next_frame); this.runtime.redraw = true; } }; instanceProto.getAnimationByName = function (name_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (cr.equals_nocase(a.name, name_)) return a; } return null; }; instanceProto.getAnimationBySid = function (sid_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (a.sid === sid_) return a; } return null; }; instanceProto.doChangeAnim = function () { var prev_frame = this.cur_animation.frames[this.cur_frame]; var anim = this.getAnimationByName(this.changeAnimName); this.changeAnimName = ""; if (!anim) return; if (cr.equals_nocase(anim.name, this.cur_animation.name) && this.animPlaying) return; this.cur_animation = anim; this.cur_anim_speed = anim.speed; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (this.changeAnimFrom === 1) this.cur_frame = 0; this.animPlaying = true; this.frameStart = this.getNowTime(); this.animForwards = true; this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.runtime.redraw = true; }; instanceProto.doChangeAnimFrame = function () { var prev_frame = this.cur_animation.frames[this.cur_frame]; var prev_frame_number = this.cur_frame; this.cur_frame = cr.floor(this.changeAnimFrame); if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (prev_frame_number !== this.cur_frame) { this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.frameStart = this.getNowTime(); this.runtime.redraw = true; } this.changeAnimFrame = -1; }; instanceProto.OnFrameChanged = function (prev_frame, next_frame) { var oldw = prev_frame.width; var oldh = prev_frame.height; var neww = next_frame.width; var newh = next_frame.height; if (oldw != neww) this.width *= (neww / oldw); if (oldh != newh) this.height *= (newh / oldh); this.hotspotX = next_frame.hotspotX; this.hotspotY = next_frame.hotspotY; this.collision_poly.set_pts(next_frame.poly_pts); this.set_bbox_changed(); this.curFrame = next_frame; this.curWebGLTexture = next_frame.webGL_texture; var i, len, b; for (i = 0, len = this.behavior_insts.length; i < len; i++) { b = this.behavior_insts[i]; if (b.onSpriteFrameChanged) b.onSpriteFrameChanged(prev_frame, next_frame); } this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnFrameChanged, this); }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; var cur_frame = this.curFrame; var spritesheeted = cur_frame.spritesheeted; var cur_image = cur_frame.texture_img; var myx = this.x; var myy = this.y; var w = this.width; var h = this.height; if (this.angle === 0 && w >= 0 && h >= 0) { myx -= this.hotspotX * w; myy -= this.hotspotY * h; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, myx, myy, w, h); } else { ctx.drawImage(cur_image, myx, myy, w, h); } } else { if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } ctx.save(); var widthfactor = w > 0 ? 1 : -1; var heightfactor = h > 0 ? 1 : -1; ctx.translate(myx, myy); if (widthfactor !== 1 || heightfactor !== 1) ctx.scale(widthfactor, heightfactor); ctx.rotate(this.angle * widthfactor * heightfactor); var drawx = 0 - (this.hotspotX * cr.abs(w)) var drawy = 0 - (this.hotspotY * cr.abs(h)); if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, drawx, drawy, cr.abs(w), cr.abs(h)); } else { ctx.drawImage(cur_image, drawx, drawy, cr.abs(w), cr.abs(h)); } ctx.restore(); } /* ctx.strokeStyle = "#f00"; ctx.lineWidth = 3; ctx.beginPath(); this.collision_poly.cache_poly(this.width, this.height, this.angle); var i, len, ax, ay, bx, by; for (i = 0, len = this.collision_poly.pts_count; i < len; i++) { ax = this.collision_poly.pts_cache[i*2] + this.x; ay = this.collision_poly.pts_cache[i*2+1] + this.y; bx = this.collision_poly.pts_cache[((i+1)%len)*2] + this.x; by = this.collision_poly.pts_cache[((i+1)%len)*2+1] + this.y; ctx.moveTo(ax, ay); ctx.lineTo(bx, by); } ctx.stroke(); ctx.closePath(); */ /* if (this.behavior_insts.length >= 1 && this.behavior_insts[0].draw) { this.behavior_insts[0].draw(ctx); } */ }; instanceProto.drawGL_earlyZPass = function(glw) { this.drawGL(glw); }; instanceProto.drawGL = function(glw) { glw.setTexture(this.curWebGLTexture); glw.setOpacity(this.opacity); var cur_frame = this.curFrame; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = Math.round(this.x) - this.x; var oy = Math.round(this.y) - this.y; if (cur_frame.spritesheeted) glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, cur_frame.sheetTex); else glw.quad(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy); } else { if (cur_frame.spritesheeted) glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, cur_frame.sheetTex); else glw.quad(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly); } }; instanceProto.getImagePointIndexByName = function(name_) { var cur_frame = this.curFrame; var i, len; for (i = 0, len = cur_frame.image_points.length; i < len; i++) { if (cr.equals_nocase(name_, cur_frame.image_points[i][0])) return i; } return -1; }; instanceProto.getImagePoint = function(imgpt, getX) { var cur_frame = this.curFrame; var image_points = cur_frame.image_points; var index; if (cr.is_string(imgpt)) index = this.getImagePointIndexByName(imgpt); else index = imgpt - 1; // 0 is origin index = cr.floor(index); if (index < 0 || index >= image_points.length) return getX ? this.x : this.y; // return origin var x = (image_points[index][1] - cur_frame.hotspotX) * this.width; var y = image_points[index][2]; y = (y - cur_frame.hotspotY) * this.height; var cosa = Math.cos(this.angle); var sina = Math.sin(this.angle); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += this.x; y += this.y; return getX ? x : y; }; function Cnds() {}; var arrCache = []; function allocArr() { if (arrCache.length) return arrCache.pop(); else return [0, 0, 0]; }; function freeArr(a) { a[0] = 0; a[1] = 0; a[2] = 0; arrCache.push(a); }; function makeCollKey(a, b) { if (a < b) return "" + a + "," + b; else return "" + b + "," + a; }; function collmemory_add(collmemory, a, b, tickcount) { var a_uid = a.uid; var b_uid = b.uid; var key = makeCollKey(a_uid, b_uid); if (collmemory.hasOwnProperty(key)) { collmemory[key][2] = tickcount; return; } var arr = allocArr(); arr[0] = a_uid; arr[1] = b_uid; arr[2] = tickcount; collmemory[key] = arr; }; function collmemory_remove(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { freeArr(collmemory[key]); delete collmemory[key]; } }; function collmemory_removeInstance(collmemory, inst) { var uid = inst.uid; var p, entry; for (p in collmemory) { if (collmemory.hasOwnProperty(p)) { entry = collmemory[p]; if (entry[0] === uid || entry[1] === uid) { freeArr(collmemory[p]); delete collmemory[p]; } } } }; var last_coll_tickcount = -2; function collmemory_has(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { last_coll_tickcount = collmemory[key][2]; return true; } else { last_coll_tickcount = -2; return false; } }; var candidates1 = []; Cnds.prototype.OnCollision = function (rtype) { if (!rtype) return false; var runtime = this.runtime; var cnd = runtime.getCurrentCondition(); var ltype = cnd.type; var collmemory = null; if (cnd.extra["collmemory"]) { collmemory = cnd.extra["collmemory"]; } else { collmemory = {}; cnd.extra["collmemory"] = collmemory; } if (!cnd.extra["spriteCreatedDestroyCallback"]) { cnd.extra["spriteCreatedDestroyCallback"] = true; runtime.addDestroyCallback(function(inst) { collmemory_removeInstance(cnd.extra["collmemory"], inst); }); } var lsol = ltype.getCurrentSol(); var rsol = rtype.getCurrentSol(); var linstances = lsol.getObjects(); var rinstances; var l, linst, r, rinst; var curlsol, currsol; var tickcount = this.runtime.tickcount; var lasttickcount = tickcount - 1; var exists, run; var current_event = runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; for (l = 0; l < linstances.length; l++) { linst = linstances[l]; if (rsol.select_all) { linst.update_bbox(); this.runtime.getCollisionCandidates(linst.layer, rtype, linst.bbox, candidates1); rinstances = candidates1; } else rinstances = rsol.getObjects(); for (r = 0; r < rinstances.length; r++) { rinst = rinstances[r]; if (runtime.testOverlap(linst, rinst) || runtime.checkRegisteredCollision(linst, rinst)) { exists = collmemory_has(collmemory, linst, rinst); run = (!exists || (last_coll_tickcount < lasttickcount)); collmemory_add(collmemory, linst, rinst, tickcount); if (run) { runtime.pushCopySol(current_event.solModifiers); curlsol = ltype.getCurrentSol(); currsol = rtype.getCurrentSol(); curlsol.select_all = false; currsol.select_all = false; if (ltype === rtype) { curlsol.instances.length = 2; // just use lsol, is same reference as rsol curlsol.instances[0] = linst; curlsol.instances[1] = rinst; ltype.applySolToContainer(); } else { curlsol.instances.length = 1; currsol.instances.length = 1; curlsol.instances[0] = linst; currsol.instances[0] = rinst; ltype.applySolToContainer(); rtype.applySolToContainer(); } current_event.retrigger(); runtime.popSol(current_event.solModifiers); } } else { collmemory_remove(collmemory, linst, rinst); } } cr.clearArray(candidates1); } return false; }; var rpicktype = null; var rtopick = new cr.ObjectSet(); var needscollisionfinish = false; var candidates2 = []; var temp_bbox = new cr.rect(0, 0, 0, 0); function DoOverlapCondition(rtype, offx, offy) { if (!rtype) return false; var do_offset = (offx !== 0 || offy !== 0); var oldx, oldy, ret = false, r, lenr, rinst; var cnd = this.runtime.getCurrentCondition(); var ltype = cnd.type; var inverted = cnd.inverted; var rsol = rtype.getCurrentSol(); var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var rinstances; if (rsol.select_all) { this.update_bbox(); temp_bbox.copy(this.bbox); temp_bbox.offset(offx, offy); this.runtime.getCollisionCandidates(this.layer, rtype, temp_bbox, candidates2); rinstances = candidates2; } else if (orblock) rinstances = rsol.else_instances; else rinstances = rsol.instances; rpicktype = rtype; needscollisionfinish = (ltype !== rtype && !inverted); if (do_offset) { oldx = this.x; oldy = this.y; this.x += offx; this.y += offy; this.set_bbox_changed(); } for (r = 0, lenr = rinstances.length; r < lenr; r++) { rinst = rinstances[r]; if (this.runtime.testOverlap(this, rinst)) { ret = true; if (inverted) break; if (ltype !== rtype) rtopick.add(rinst); } } if (do_offset) { this.x = oldx; this.y = oldy; this.set_bbox_changed(); } cr.clearArray(candidates2); return ret; }; typeProto.finish = function (do_pick) { if (!needscollisionfinish) return; if (do_pick) { var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var sol = rpicktype.getCurrentSol(); var topick = rtopick.valuesRef(); var i, len, inst; if (sol.select_all) { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = topick.length; i < len; ++i) { sol.instances[i] = topick[i]; } if (orblock) { cr.clearArray(sol.else_instances); for (i = 0, len = rpicktype.instances.length; i < len; ++i) { inst = rpicktype.instances[i]; if (!rtopick.contains(inst)) sol.else_instances.push(inst); } } } else { if (orblock) { var initsize = sol.instances.length; for (i = 0, len = topick.length; i < len; ++i) { sol.instances[initsize + i] = topick[i]; cr.arrayFindRemove(sol.else_instances, topick[i]); } } else { cr.shallowAssignArray(sol.instances, topick); } } rpicktype.applySolToContainer(); } rtopick.clear(); needscollisionfinish = false; }; Cnds.prototype.IsOverlapping = function (rtype) { return DoOverlapCondition.call(this, rtype, 0, 0); }; Cnds.prototype.IsOverlappingOffset = function (rtype, offx, offy) { return DoOverlapCondition.call(this, rtype, offx, offy); }; Cnds.prototype.IsAnimPlaying = function (animname) { if (this.changeAnimName.length) return cr.equals_nocase(this.changeAnimName, animname); else return cr.equals_nocase(this.cur_animation.name, animname); }; Cnds.prototype.CompareFrame = function (cmp, framenum) { return cr.do_cmp(this.cur_frame, cmp, framenum); }; Cnds.prototype.CompareAnimSpeed = function (cmp, x) { var s = (this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); return cr.do_cmp(s, cmp, x); }; Cnds.prototype.OnAnimFinished = function (animname) { return cr.equals_nocase(this.animTriggerName, animname); }; Cnds.prototype.OnAnyAnimFinished = function () { return true; }; Cnds.prototype.OnFrameChanged = function () { return true; }; Cnds.prototype.IsMirrored = function () { return this.width < 0; }; Cnds.prototype.IsFlipped = function () { return this.height < 0; }; Cnds.prototype.OnURLLoaded = function () { return true; }; Cnds.prototype.IsCollisionEnabled = function () { return this.collisionsEnabled; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Spawn = function (obj, layer, imgpt) { if (!obj || !layer) return; var inst = this.runtime.createInstance(obj, layer, this.getImagePoint(imgpt, true), this.getImagePoint(imgpt, false)); if (!inst) return; if (typeof inst.angle !== "undefined") { inst.angle = this.angle; inst.set_bbox_changed(); } this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var cur_act = this.runtime.getCurrentAction(); var reset_sol = false; if (cr.is_undefined(cur_act.extra["Spawn_LastExec"]) || cur_act.extra["Spawn_LastExec"] < this.runtime.execcount) { reset_sol = true; cur_act.extra["Spawn_LastExec"] = this.runtime.execcount; } var sol; if (obj != this.type) { sol = obj.getCurrentSol(); sol.select_all = false; if (reset_sol) { cr.clearArray(sol.instances); sol.instances[0] = inst; } else sol.instances.push(inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; if (reset_sol) { cr.clearArray(sol.instances); sol.instances[0] = s; } else sol.instances.push(s); } } } }; Acts.prototype.SetEffect = function (effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.StopAnim = function () { this.animPlaying = false; }; Acts.prototype.StartAnim = function (from) { this.animPlaying = true; this.frameStart = this.getNowTime(); if (from === 1 && this.cur_frame !== 0) { this.changeAnimFrame = 0; if (!this.inAnimTrigger) this.doChangeAnimFrame(); } if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetAnim = function (animname, from) { this.changeAnimName = animname; this.changeAnimFrom = from; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnim(); }; Acts.prototype.SetAnimFrame = function (framenumber) { this.changeAnimFrame = framenumber; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnimFrame(); }; Acts.prototype.SetAnimSpeed = function (s) { this.cur_anim_speed = cr.abs(s); this.animForwards = (s >= 0); if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetMirrored = function (m) { var neww = cr.abs(this.width) * (m === 0 ? -1 : 1); if (this.width === neww) return; this.width = neww; this.set_bbox_changed(); }; Acts.prototype.SetFlipped = function (f) { var newh = cr.abs(this.height) * (f === 0 ? -1 : 1); if (this.height === newh) return; this.height = newh; this.set_bbox_changed(); }; Acts.prototype.SetScale = function (s) { var cur_frame = this.curFrame; var mirror_factor = (this.width < 0 ? -1 : 1); var flip_factor = (this.height < 0 ? -1 : 1); var new_width = cur_frame.width * s * mirror_factor; var new_height = cur_frame.height * s * flip_factor; if (this.width !== new_width || this.height !== new_height) { this.width = new_width; this.height = new_height; this.set_bbox_changed(); } }; Acts.prototype.LoadURL = function (url_, resize_) { var img = new Image(); var self = this; var curFrame_ = this.curFrame; img.onload = function () { if (curFrame_.texture_img.src === img.src) { if (self.runtime.glwrap && self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); return; } curFrame_.texture_img = img; curFrame_.offx = 0; curFrame_.offy = 0; curFrame_.width = img.width; curFrame_.height = img.height; curFrame_.spritesheeted = false; curFrame_.datauri = ""; curFrame_.pixelformat = 0; // reset to RGBA, since we don't know what type of image will have come in if (self.runtime.glwrap) { if (curFrame_.webGL_texture) self.runtime.glwrap.deleteTexture(curFrame_.webGL_texture); curFrame_.webGL_texture = self.runtime.glwrap.loadTexture(img, false, self.runtime.linearSampling); if (self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; self.type.updateAllCurrentTexture(); } if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:") img["crossOrigin"] = "anonymous"; img.src = url_; }; Acts.prototype.SetCollisions = function (set_) { if (this.collisionsEnabled === (set_ !== 0)) return; // no change this.collisionsEnabled = (set_ !== 0); if (this.collisionsEnabled) this.set_bbox_changed(); // needs to be added back to cells else { if (this.collcells.right >= this.collcells.left) this.type.collision_grid.update(this, this.collcells, null); this.collcells.set(0, 0, -1, -1); } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.AnimationFrame = function (ret) { ret.set_int(this.cur_frame); }; Exps.prototype.AnimationFrameCount = function (ret) { ret.set_int(this.cur_animation.frames.length); }; Exps.prototype.AnimationName = function (ret) { ret.set_string(this.cur_animation.name); }; Exps.prototype.AnimationSpeed = function (ret) { ret.set_float(this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); }; Exps.prototype.ImagePointX = function (ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, true)); }; Exps.prototype.ImagePointY = function (ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, false)); }; Exps.prototype.ImagePointCount = function (ret) { ret.set_int(this.curFrame.image_points.length); }; Exps.prototype.ImageWidth = function (ret) { ret.set_float(this.curFrame.width); }; Exps.prototype.ImageHeight = function (ret) { ret.set_float(this.curFrame.height); }; pluginProto.exps = new Exps(); }()); /* global cr,log,assert2 */ /* jshint globalstrict: true */ /* jshint strict: true */ ; ; cr.plugins_.Spritefont2 = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Spritefont2.prototype; pluginProto.onCreate = function () { }; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.runtime.waitForImageLoad(this.texture_img, this.texture_file); this.webGL_texture = null; }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, false, this.runtime.linearSampling, this.texture_pixelformat); } var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].webGL_texture = this.webGL_texture; }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function (ctx) { ctx.drawImage(this.texture_img, 0, 0); }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onDestroy = function() { freeAllLines (this.lines); freeAllClip (this.clipList); freeAllClipUV(this.clipUV); cr.wipe(this.characterWidthList); }; instanceProto.onCreate = function() { this.texture_img = this.type.texture_img; this.characterWidth = this.properties[0]; this.characterHeight = this.properties[1]; this.characterSet = this.properties[2]; this.text = this.properties[3]; this.characterScale = this.properties[4]; this.visible = (this.properties[5] === 0); // 0=visible, 1=invisible this.halign = this.properties[6]/2.0; // 0=left, 1=center, 2=right this.valign = this.properties[7]/2.0; // 0=top, 1=center, 2=bottom this.wrapbyword = (this.properties[9] === 0); // 0=word, 1=character this.characterSpacing = this.properties[10]; this.lineHeight = this.properties[11]; this.textWidth = 0; this.textHeight = 0; if (this.recycled) { cr.clearArray(this.lines); cr.wipe(this.clipList); cr.wipe(this.clipUV); cr.wipe(this.characterWidthList); } else { this.lines = []; this.clipList = {}; this.clipUV = {}; this.characterWidthList = {}; } this.text_changed = true; this.lastwrapwidth = this.width; if (this.runtime.glwrap) { if (!this.type.webGL_texture) { this.type.webGL_texture = this.runtime.glwrap.loadTexture(this.type.texture_img, false, this.runtime.linearSampling, this.type.texture_pixelformat); } this.webGL_texture = this.type.webGL_texture; } this.SplitSheet(); }; instanceProto.saveToJSON = function () { var save = { "t": this.text, "csc": this.characterScale, "csp": this.characterSpacing, "lh": this.lineHeight, "tw": this.textWidth, "th": this.textHeight, "lrt": this.last_render_tick, "ha": this.halign, "va": this.valign, "cw": {} }; for (var ch in this.characterWidthList) save["cw"][ch] = this.characterWidthList[ch]; return save; }; instanceProto.loadFromJSON = function (o) { this.text = o["t"]; this.characterScale = o["csc"]; this.characterSpacing = o["csp"]; this.lineHeight = o["lh"]; this.textWidth = o["tw"]; this.textHeight = o["th"]; this.last_render_tick = o["lrt"]; if (o.hasOwnProperty("ha")) this.halign = o["ha"]; if (o.hasOwnProperty("va")) this.valign = o["va"]; for(var ch in o["cw"]) this.characterWidthList[ch] = o["cw"][ch]; this.text_changed = true; this.lastwrapwidth = this.width; }; function trimRight(text) { return text.replace(/\s\s*$/, ''); } var MAX_CACHE_SIZE = 1000; function alloc(cache,Constructor) { if (cache.length) return cache.pop(); else return new Constructor(); } function free(cache,data) { if (cache.length < MAX_CACHE_SIZE) { cache.push(data); } } function freeAll(cache,dataList,isArray) { if (isArray) { var i, len; for (i = 0, len = dataList.length; i < len; i++) { free(cache,dataList[i]); } cr.clearArray(dataList); } else { var prop; for(prop in dataList) { if(Object.prototype.hasOwnProperty.call(dataList,prop)) { free(cache,dataList[prop]); delete dataList[prop]; } } } } function addLine(inst,lineIndex,cur_line) { var lines = inst.lines; var line; cur_line = trimRight(cur_line); if (lineIndex >= lines.length) lines.push(allocLine()); line = lines[lineIndex]; line.text = cur_line; line.width = inst.measureWidth(cur_line); inst.textWidth = cr.max(inst.textWidth,line.width); } var linesCache = []; function allocLine() { return alloc(linesCache,Object); } function freeLine(l) { free(linesCache,l); } function freeAllLines(arr) { freeAll(linesCache,arr,true); } function addClip(obj,property,x,y,w,h) { if (obj[property] === undefined) { obj[property] = alloc(clipCache,Object); } obj[property].x = x; obj[property].y = y; obj[property].w = w; obj[property].h = h; } var clipCache = []; function allocClip() { return alloc(clipCache,Object); } function freeAllClip(obj) { freeAll(clipCache,obj,false);} function addClipUV(obj,property,left,top,right,bottom) { if (obj[property] === undefined) { obj[property] = alloc(clipUVCache,cr.rect); } obj[property].left = left; obj[property].top = top; obj[property].right = right; obj[property].bottom = bottom; } var clipUVCache = []; function allocClipUV() { return alloc(clipUVCache,cr.rect);} function freeAllClipUV(obj) { freeAll(clipUVCache,obj,false);} instanceProto.SplitSheet = function() { var texture = this.texture_img; var texWidth = texture.width; var texHeight = texture.height; var charWidth = this.characterWidth; var charHeight = this.characterHeight; var charU = charWidth /texWidth; var charV = charHeight/texHeight; var charSet = this.characterSet ; var cols = Math.floor(texWidth/charWidth); var rows = Math.floor(texHeight/charHeight); for ( var c = 0; c < charSet.length; c++) { if (c >= cols * rows) break; var x = c%cols; var y = Math.floor(c/cols); var letter = charSet.charAt(c); if (this.runtime.glwrap) { addClipUV( this.clipUV, letter, x * charU , y * charV , (x+1) * charU , (y+1) * charV ); } else { addClip( this.clipList, letter, x * charWidth, y * charHeight, charWidth, charHeight ); } } }; /* * Word-Wrapping */ var wordsCache = []; pluginProto.TokeniseWords = function (text) { cr.clearArray(wordsCache); var cur_word = ""; var ch; var i = 0; while (i < text.length) { ch = text.charAt(i); if (ch === "\n") { if (cur_word.length) { wordsCache.push(cur_word); cur_word = ""; } wordsCache.push("\n"); ++i; } else if (ch === " " || ch === "\t" || ch === "-") { do { cur_word += text.charAt(i); i++; } while (i < text.length && (text.charAt(i) === " " || text.charAt(i) === "\t")); wordsCache.push(cur_word); cur_word = ""; } else if (i < text.length) { cur_word += ch; i++; } } if (cur_word.length) wordsCache.push(cur_word); }; pluginProto.WordWrap = function (inst) { var text = inst.text; var lines = inst.lines; if (!text || !text.length) { freeAllLines(lines); return; } var width = inst.width; if (width <= 2.0) { freeAllLines(lines); return; } var charWidth = inst.characterWidth; var charScale = inst.characterScale; var charSpacing = inst.characterSpacing; if ( (text.length * (charWidth * charScale + charSpacing) - charSpacing) <= width && text.indexOf("\n") === -1) { var all_width = inst.measureWidth(text); if (all_width <= width) { freeAllLines(lines); lines.push(allocLine()); lines[0].text = text; lines[0].width = all_width; inst.textWidth = all_width; inst.textHeight = inst.characterHeight * charScale + inst.lineHeight; return; } } var wrapbyword = inst.wrapbyword; this.WrapText(inst); inst.textHeight = lines.length * (inst.characterHeight * charScale + inst.lineHeight); }; pluginProto.WrapText = function (inst) { var wrapbyword = inst.wrapbyword; var text = inst.text; var lines = inst.lines; var width = inst.width; var wordArray; if (wrapbyword) { this.TokeniseWords(text); // writes to wordsCache wordArray = wordsCache; } else { wordArray = text; } var cur_line = ""; var prev_line; var line_width; var i; var lineIndex = 0; var line; var ignore_newline = false; for (i = 0; i < wordArray.length; i++) { if (wordArray[i] === "\n") { if (ignore_newline === true) { ignore_newline = false; } else { addLine(inst,lineIndex,cur_line); lineIndex++; } cur_line = ""; continue; } ignore_newline = false; prev_line = cur_line; cur_line += wordArray[i]; line_width = inst.measureWidth(trimRight(cur_line)); if (line_width > width) { if (prev_line === "") { addLine(inst,lineIndex,cur_line); cur_line = ""; ignore_newline = true; } else { addLine(inst,lineIndex,prev_line); cur_line = wordArray[i]; } lineIndex++; if (!wrapbyword && cur_line === " ") cur_line = ""; } } if (trimRight(cur_line).length) { addLine(inst,lineIndex,cur_line); lineIndex++; } for (i = lineIndex; i < lines.length; i++) freeLine(lines[i]); lines.length = lineIndex; }; instanceProto.measureWidth = function(text) { var spacing = this.characterSpacing; var len = text.length; var width = 0; for (var i = 0; i < len; i++) { width += this.getCharacterWidth(text.charAt(i)) * this.characterScale + spacing; } width -= (width > 0) ? spacing : 0; return width; }; /***/ instanceProto.getCharacterWidth = function(character) { var widthList = this.characterWidthList; if (widthList[character] !== undefined) { return widthList[character]; } else { return this.characterWidth; } }; instanceProto.rebuildText = function() { if (this.text_changed || this.width !== this.lastwrapwidth) { this.textWidth = 0; this.textHeight = 0; this.type.plugin.WordWrap(this); this.text_changed = false; this.lastwrapwidth = this.width; } }; var EPSILON = 0.00001; instanceProto.draw = function(ctx, glmode) { var texture = this.texture_img; if (this.text !== "" && texture != null) { this.rebuildText(); if (this.height < this.characterHeight*this.characterScale + this.lineHeight) { return; } ctx.globalAlpha = this.opacity; var myx = this.x; var myy = this.y; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } var viewLeft = this.layer.viewLeft; var viewTop = this.layer.viewTop; var viewRight = this.layer.viewRight; var viewBottom = this.layer.viewBottom; ctx.save(); ctx.translate(myx, myy); ctx.rotate(this.angle); var ha = this.halign; var va = this.valign; var scale = this.characterScale; var charHeight = this.characterHeight * scale; var lineHeight = this.lineHeight; var charSpace = this.characterSpacing; var lines = this.lines; var textHeight = this.textHeight; var letterWidth; var halign; var valign = va * cr.max(0,(this.height - textHeight)); var offx = -(this.hotspotX * this.width); var offy = -(this.hotspotY * this.height); offy += valign; var drawX ; var drawY = offy; var roundX, roundY; for(var i = 0; i < lines.length; i++) { var line = lines[i].text; var len = lines[i].width; halign = ha * cr.max(0,this.width - len); drawX = offx + halign; drawY += lineHeight; if (myy + drawY + charHeight < viewTop) { drawY += charHeight; continue; } for(var j = 0; j < line.length; j++) { var letter = line.charAt(j); letterWidth = this.getCharacterWidth(letter); var clip = this.clipList[letter]; if (myx + drawX + letterWidth * scale + charSpace < viewLeft) { drawX += letterWidth * scale + charSpace; continue; } if ( drawX + letterWidth * scale > this.width + EPSILON ) { break; } if (clip !== undefined) { roundX = drawX; roundY = drawY; if (this.angle === 0) { roundX = Math.round(roundX); roundY = Math.round(roundY); } ctx.drawImage( this.texture_img, clip.x, clip.y, clip.w, clip.h, roundX,roundY,clip.w*scale,clip.h*scale); } drawX += letterWidth * scale + charSpace; if (myx + drawX > viewRight) break; } drawY += charHeight; if (drawY + charHeight + lineHeight > this.height || myy + drawY > viewBottom) { break; } } ctx.restore(); } }; var dQuad = new cr.quad(); function rotateQuad(quad,cosa,sina) { var x_temp; x_temp = (quad.tlx * cosa) - (quad.tly * sina); quad.tly = (quad.tly * cosa) + (quad.tlx * sina); quad.tlx = x_temp; x_temp = (quad.trx * cosa) - (quad.try_ * sina); quad.try_ = (quad.try_ * cosa) + (quad.trx * sina); quad.trx = x_temp; x_temp = (quad.blx * cosa) - (quad.bly * sina); quad.bly = (quad.bly * cosa) + (quad.blx * sina); quad.blx = x_temp; x_temp = (quad.brx * cosa) - (quad.bry * sina); quad.bry = (quad.bry * cosa) + (quad.brx * sina); quad.brx = x_temp; } instanceProto.drawGL = function(glw) { glw.setTexture(this.webGL_texture); glw.setOpacity(this.opacity); if (!this.text) return; this.rebuildText(); if (this.height < this.characterHeight*this.characterScale + this.lineHeight) { return; } this.update_bbox(); var q = this.bquad; var ox = 0; var oy = 0; if (this.runtime.pixel_rounding) { ox = Math.round(this.x) - this.x; oy = Math.round(this.y) - this.y; } var viewLeft = this.layer.viewLeft; var viewTop = this.layer.viewTop; var viewRight = this.layer.viewRight; var viewBottom = this.layer.viewBottom; var angle = this.angle; var ha = this.halign; var va = this.valign; var scale = this.characterScale; var charHeight = this.characterHeight * scale; // to precalculate in onCreate or on change var lineHeight = this.lineHeight; var charSpace = this.characterSpacing; var lines = this.lines; var textHeight = this.textHeight; var letterWidth; var cosa,sina; if (angle !== 0) { cosa = Math.cos(angle); sina = Math.sin(angle); } var halign; var valign = va * cr.max(0,(this.height - textHeight)); var offx = q.tlx + ox; var offy = q.tly + oy; var drawX ; var drawY = valign; var roundX, roundY; for(var i = 0; i < lines.length; i++) { var line = lines[i].text; var lineWidth = lines[i].width; halign = ha * cr.max(0,this.width - lineWidth); drawX = halign; drawY += lineHeight; if (angle === 0 && offy + drawY + charHeight < viewTop) { drawY += charHeight; continue; } for(var j = 0; j < line.length; j++) { var letter = line.charAt(j); letterWidth = this.getCharacterWidth(letter); var clipUV = this.clipUV[letter]; if (offx + drawX + letterWidth * scale + charSpace < viewLeft) { drawX += letterWidth * scale + charSpace; continue; } if (drawX + letterWidth * scale > this.width + EPSILON) { break; } if (clipUV !== undefined) { var clipWidth = this.characterWidth*scale; var clipHeight = this.characterHeight*scale; roundX = drawX; roundY = drawY; if (angle === 0) { roundX = Math.round(roundX); roundY = Math.round(roundY); } dQuad.tlx = roundX; dQuad.tly = roundY; dQuad.trx = roundX + clipWidth; dQuad.try_ = roundY ; dQuad.blx = roundX; dQuad.bly = roundY + clipHeight; dQuad.brx = roundX + clipWidth; dQuad.bry = roundY + clipHeight; if(angle !== 0) { rotateQuad(dQuad,cosa,sina); } dQuad.offset(offx,offy); glw.quadTex( dQuad.tlx, dQuad.tly, dQuad.trx, dQuad.try_, dQuad.brx, dQuad.bry, dQuad.blx, dQuad.bly, clipUV ); } drawX += letterWidth * scale + charSpace; if (angle === 0 && offx + drawX > viewRight) break; } drawY += charHeight; if (drawY + charHeight + lineHeight > this.height || offy + drawY > viewBottom) { break; } } }; function Cnds() {} Cnds.prototype.CompareText = function(text_to_compare, case_sensitive) { if (case_sensitive) return this.text == text_to_compare; else return cr.equals_nocase(this.text, text_to_compare); }; pluginProto.cnds = new Cnds(); function Acts() {} Acts.prototype.SetText = function(param) { if (cr.is_number(param) && param < 1e9) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_set = param.toString(); if (this.text !== text_to_set) { this.text = text_to_set; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.AppendText = function(param) { if (cr.is_number(param)) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_append = param.toString(); if (text_to_append) // not empty { this.text += text_to_append; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetScale = function(param) { if (param !== this.characterScale) { this.characterScale = param; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetCharacterSpacing = function(param) { if (param !== this.CharacterSpacing) { this.characterSpacing = param; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetLineHeight = function(param) { if (param !== this.lineHeight) { this.lineHeight = param; this.text_changed = true; this.runtime.redraw = true; } }; instanceProto.SetCharWidth = function(character,width) { var w = parseInt(width,10); if (this.characterWidthList[character] !== w) { this.characterWidthList[character] = w; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetCharacterWidth = function(characterSet,width) { if (characterSet !== "") { for(var c = 0; c < characterSet.length; c++) { this.SetCharWidth(characterSet.charAt(c),width); } } }; Acts.prototype.SetEffect = function (effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.SetHAlign = function (a) { this.halign = a / 2.0; this.text_changed = true; this.runtime.redraw = true; }; Acts.prototype.SetVAlign = function (a) { this.valign = a / 2.0; this.text_changed = true; this.runtime.redraw = true; }; pluginProto.acts = new Acts(); function Exps() {} Exps.prototype.CharacterWidth = function(ret,character) { ret.set_int(this.getCharacterWidth(character)); }; Exps.prototype.CharacterHeight = function(ret) { ret.set_int(this.characterHeight); }; Exps.prototype.CharacterScale = function(ret) { ret.set_float(this.characterScale); }; Exps.prototype.CharacterSpacing = function(ret) { ret.set_int(this.characterSpacing); }; Exps.prototype.LineHeight = function(ret) { ret.set_int(this.lineHeight); }; Exps.prototype.Text = function(ret) { ret.set_string(this.text); }; Exps.prototype.TextWidth = function (ret) { this.rebuildText(); ret.set_float(this.textWidth); }; Exps.prototype.TextHeight = function (ret) { this.rebuildText(); ret.set_float(this.textHeight); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.TiledBg = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.TiledBg.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.texture_img.cr_filesize = this.texture_filesize; this.runtime.waitForImageLoad(this.texture_img, this.texture_file); this.pattern = null; this.webGL_texture = null; }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); } var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].webGL_texture = this.webGL_texture; }; typeProto.loadTextures = function () { if (this.is_family || this.webGL_texture || !this.runtime.glwrap) return; this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function (ctx) { ctx.drawImage(this.texture_img, 0, 0); }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.rcTex = new cr.rect(0, 0, 0, 0); this.has_own_texture = false; // true if a texture loaded in from URL this.texture_img = this.type.texture_img; if (this.runtime.glwrap) { this.type.loadTextures(); this.webGL_texture = this.type.webGL_texture; } else { if (!this.type.pattern) this.type.pattern = this.runtime.ctx.createPattern(this.type.texture_img, "repeat"); this.pattern = this.type.pattern; } }; instanceProto.afterLoad = function () { this.has_own_texture = false; this.texture_img = this.type.texture_img; }; instanceProto.onDestroy = function () { if (this.runtime.glwrap && this.has_own_texture && this.webGL_texture) { this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; } }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; ctx.save(); ctx.fillStyle = this.pattern; var myx = this.x; var myy = this.y; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } var drawX = -(this.hotspotX * this.width); var drawY = -(this.hotspotY * this.height); var offX = drawX % this.texture_img.width; var offY = drawY % this.texture_img.height; if (offX < 0) offX += this.texture_img.width; if (offY < 0) offY += this.texture_img.height; ctx.translate(myx, myy); ctx.rotate(this.angle); ctx.translate(offX, offY); ctx.fillRect(drawX - offX, drawY - offY, this.width, this.height); ctx.restore(); }; instanceProto.drawGL_earlyZPass = function(glw) { this.drawGL(glw); }; instanceProto.drawGL = function(glw) { glw.setTexture(this.webGL_texture); glw.setOpacity(this.opacity); var rcTex = this.rcTex; rcTex.right = this.width / this.texture_img.width; rcTex.bottom = this.height / this.texture_img.height; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = Math.round(this.x) - this.x; var oy = Math.round(this.y) - this.y; glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, rcTex); } else glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, rcTex); }; function Cnds() {}; Cnds.prototype.OnURLLoaded = function () { return true; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetEffect = function (effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.LoadURL = function (url_) { var img = new Image(); var self = this; img.onload = function () { self.texture_img = img; if (self.runtime.glwrap) { if (self.has_own_texture && self.webGL_texture) self.runtime.glwrap.deleteTexture(self.webGL_texture); self.webGL_texture = self.runtime.glwrap.loadTexture(img, true, self.runtime.linearSampling); } else { self.pattern = self.runtime.ctx.createPattern(img, "repeat"); } self.has_own_texture = true; self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.TiledBg.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:") img.crossOrigin = "anonymous"; img.src = url_; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.ImageWidth = function (ret) { ret.set_float(this.texture_img.width); }; Exps.prototype.ImageHeight = function (ret) { ret.set_float(this.texture_img.height); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Touch = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Touch.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.touches = []; this.mouseDown = false; }; var instanceProto = pluginProto.Instance.prototype; var dummyoffset = {left: 0, top: 0}; instanceProto.findTouch = function (id) { var i, len; for (i = 0, len = this.touches.length; i < len; i++) { if (this.touches[i]["id"] === id) return i; } return -1; }; var appmobi_accx = 0; var appmobi_accy = 0; var appmobi_accz = 0; function AppMobiGetAcceleration(evt) { appmobi_accx = evt.x; appmobi_accy = evt.y; appmobi_accz = evt.z; }; var pg_accx = 0; var pg_accy = 0; var pg_accz = 0; function PhoneGapGetAcceleration(evt) { pg_accx = evt.x; pg_accy = evt.y; pg_accz = evt.z; }; var theInstance = null; var touchinfo_cache = []; function AllocTouchInfo(x, y, id, index) { var ret; if (touchinfo_cache.length) ret = touchinfo_cache.pop(); else ret = new TouchInfo(); ret.init(x, y, id, index); return ret; }; function ReleaseTouchInfo(ti) { if (touchinfo_cache.length < 100) touchinfo_cache.push(ti); }; var GESTURE_HOLD_THRESHOLD = 15; // max px motion for hold gesture to register var GESTURE_HOLD_TIMEOUT = 500; // time for hold gesture to register var GESTURE_TAP_TIMEOUT = 333; // time for tap gesture to register var GESTURE_DOUBLETAP_THRESHOLD = 25; // max distance apart for taps to be function TouchInfo() { this.starttime = 0; this.time = 0; this.lasttime = 0; this.startx = 0; this.starty = 0; this.x = 0; this.y = 0; this.lastx = 0; this.lasty = 0; this["id"] = 0; this.startindex = 0; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.init = function (x, y, id, index) { var nowtime = cr.performance_now(); this.time = nowtime; this.lasttime = nowtime; this.starttime = nowtime; this.startx = x; this.starty = y; this.x = x; this.y = y; this.lastx = x; this.lasty = y; this["id"] = id; this.startindex = index; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.update = function (nowtime, x, y) { this.lasttime = this.time; this.time = nowtime; this.lastx = this.x; this.lasty = this.y; this.x = x; this.y = y; if (!this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) >= GESTURE_HOLD_THRESHOLD) { this.tooFarForHold = true; } }; TouchInfo.prototype.maybeTriggerHold = function (inst, index) { if (this.triggeredHold) return; // already triggered this gesture var nowtime = cr.performance_now(); if (nowtime - this.starttime >= GESTURE_HOLD_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { this.triggeredHold = true; inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGestureObject, inst); inst.getTouchIndex = 0; } }; var lastTapX = -1000; var lastTapY = -1000; var lastTapTime = -10000; TouchInfo.prototype.maybeTriggerTap = function (inst, index) { if (this.triggeredHold) return; var nowtime = cr.performance_now(); if (nowtime - this.starttime <= GESTURE_TAP_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; if ((nowtime - lastTapTime <= GESTURE_TAP_TIMEOUT * 2) && cr.distanceTo(lastTapX, lastTapY, this.x, this.y) < GESTURE_DOUBLETAP_THRESHOLD) { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGestureObject, inst); lastTapX = -1000; lastTapY = -1000; lastTapTime = -10000; } else { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGestureObject, inst); lastTapX = this.x; lastTapY = this.y; lastTapTime = nowtime; } inst.getTouchIndex = 0; } }; instanceProto.onCreate = function() { theInstance = this; this.isWindows8 = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.orient_alpha = 0; this.orient_beta = 0; this.orient_gamma = 0; this.acc_g_x = 0; this.acc_g_y = 0; this.acc_g_z = 0; this.acc_x = 0; this.acc_y = 0; this.acc_z = 0; this.curTouchX = 0; this.curTouchY = 0; this.trigger_index = 0; this.trigger_id = 0; this.getTouchIndex = 0; this.useMouseInput = (this.properties[0] !== 0); var elem = (this.runtime.fullscreen_mode > 0) ? document : this.runtime.canvas; var elem2 = document; if (this.runtime.isDirectCanvas) elem2 = elem = window["Canvas"]; else if (this.runtime.isCocoonJs) elem2 = elem = window; var self = this; if (window.navigator["pointerEnabled"]) { elem.addEventListener("pointerdown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("pointermove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("pointerup", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("pointercancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); this.runtime.canvas.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); document.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); } } else if (window.navigator["msPointerEnabled"]) { elem.addEventListener("MSPointerDown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("MSPointerMove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("MSPointerUp", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("MSPointerCancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); } } else { elem.addEventListener("touchstart", function(info) { self.onTouchStart(info); }, false ); elem.addEventListener("touchmove", function(info) { self.onTouchMove(info); }, false ); elem2.addEventListener("touchend", function(info) { self.onTouchEnd(info, false); }, false ); elem2.addEventListener("touchcancel", function(info) { self.onTouchEnd(info, true); }, false ); } if (this.isWindows8) { var win8accelerometerFn = function(e) { var reading = e["reading"]; self.acc_x = reading["accelerationX"]; self.acc_y = reading["accelerationY"]; self.acc_z = reading["accelerationZ"]; }; var win8inclinometerFn = function(e) { var reading = e["reading"]; self.orient_alpha = reading["yawDegrees"]; self.orient_beta = reading["pitchDegrees"]; self.orient_gamma = reading["rollDegrees"]; }; var accelerometer = Windows["Devices"]["Sensors"]["Accelerometer"]["getDefault"](); if (accelerometer) { accelerometer["reportInterval"] = Math.max(accelerometer["minimumReportInterval"], 16); accelerometer.addEventListener("readingchanged", win8accelerometerFn); } var inclinometer = Windows["Devices"]["Sensors"]["Inclinometer"]["getDefault"](); if (inclinometer) { inclinometer["reportInterval"] = Math.max(inclinometer["minimumReportInterval"], 16); inclinometer.addEventListener("readingchanged", win8inclinometerFn); } document.addEventListener("visibilitychange", function(e) { if (document["hidden"] || document["msHidden"]) { if (accelerometer) accelerometer.removeEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.removeEventListener("readingchanged", win8inclinometerFn); } else { if (accelerometer) accelerometer.addEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.addEventListener("readingchanged", win8inclinometerFn); } }, false); } else { window.addEventListener("deviceorientation", function (eventData) { self.orient_alpha = eventData["alpha"] || 0; self.orient_beta = eventData["beta"] || 0; self.orient_gamma = eventData["gamma"] || 0; }, false); window.addEventListener("devicemotion", function (eventData) { if (eventData["accelerationIncludingGravity"]) { self.acc_g_x = eventData["accelerationIncludingGravity"]["x"] || 0; self.acc_g_y = eventData["accelerationIncludingGravity"]["y"] || 0; self.acc_g_z = eventData["accelerationIncludingGravity"]["z"] || 0; } if (eventData["acceleration"]) { self.acc_x = eventData["acceleration"]["x"] || 0; self.acc_y = eventData["acceleration"]["y"] || 0; self.acc_z = eventData["acceleration"]["z"] || 0; } }, false); } if (this.useMouseInput && !this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); } if (!this.runtime.isiOS && this.runtime.isCordova && navigator["accelerometer"] && navigator["accelerometer"]["watchAcceleration"]) { navigator["accelerometer"]["watchAcceleration"](PhoneGapGetAcceleration, null, { "frequency": 40 }); } this.runtime.tick2Me(this); }; instanceProto.onPointerMove = function (info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault) info.preventDefault(); var i = this.findTouch(info["pointerId"]); var nowtime = cr.performance_now(); if (i >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var t = this.touches[i]; if (nowtime - t.time < 2) return; t.update(nowtime, info.pageX - offset.left, info.pageY - offset.top); } }; instanceProto.onPointerStart = function (info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var touchx = info.pageX - offset.left; var touchy = info.pageY - offset.top; var nowtime = cr.performance_now(); this.trigger_index = this.touches.length; this.trigger_id = info["pointerId"]; this.touches.push(AllocTouchInfo(touchx, touchy, info["pointerId"], this.trigger_index)); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onPointerEnd = function (info, isCancel) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var i = this.findTouch(info["pointerId"]); this.trigger_index = (i >= 0 ? this.touches[i].startindex : -1); this.trigger_id = (i >= 0 ? this.touches[i]["id"] : -1); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (i >= 0) { if (!isCancel) this.touches[i].maybeTriggerTap(this, i); ReleaseTouchInfo(this.touches[i]); this.touches.splice(i, 1); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchMove = function (info) { if (info.preventDefault) info.preventDefault(); var nowtime = cr.performance_now(); var i, len, t, u; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; var j = this.findTouch(t["identifier"]); if (j >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); u = this.touches[j]; if (nowtime - u.time < 2) continue; u.update(nowtime, t.pageX - offset.left, t.pageY - offset.top); } } }; instanceProto.onTouchStart = function (info) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var nowtime = cr.performance_now(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j !== -1) continue; var touchx = t.pageX - offset.left; var touchy = t.pageY - offset.top; this.trigger_index = this.touches.length; this.trigger_id = t["identifier"]; this.touches.push(AllocTouchInfo(touchx, touchy, t["identifier"], this.trigger_index)); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchEnd = function (info, isCancel) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j >= 0) { this.trigger_index = this.touches[j].startindex; this.trigger_id = this.touches[j]["id"]; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (!isCancel) this.touches[j].maybeTriggerTap(this, j); ReleaseTouchInfo(this.touches[j]); this.touches.splice(j, 1); } } this.runtime.isInUserInputEvent = false; }; instanceProto.getAlpha = function () { if (this.runtime.isCordova && this.orient_alpha === 0 && pg_accz !== 0) return pg_accz * 90; else return this.orient_alpha; }; instanceProto.getBeta = function () { if (this.runtime.isCordova && this.orient_beta === 0 && pg_accy !== 0) return pg_accy * 90; else return this.orient_beta; }; instanceProto.getGamma = function () { if (this.runtime.isCordova && this.orient_gamma === 0 && pg_accx !== 0) return pg_accx * 90; else return this.orient_gamma; }; var noop_func = function(){}; instanceProto.onMouseDown = function(info) { var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchStart(fakeinfo); this.mouseDown = true; }; instanceProto.onMouseMove = function(info) { if (!this.mouseDown) return; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchMove(fakeinfo); }; instanceProto.onMouseUp = function(info) { if (info.preventDefault && this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchEnd(fakeinfo); this.mouseDown = false; }; instanceProto.tick2 = function() { var i, len, t; var nowtime = cr.performance_now(); for (i = 0, len = this.touches.length; i < len; ++i) { t = this.touches[i]; if (t.time <= nowtime - 50) t.lasttime = nowtime; t.maybeTriggerHold(this, i); } }; function Cnds() {}; Cnds.prototype.OnTouchStart = function () { return true; }; Cnds.prototype.OnTouchEnd = function () { return true; }; Cnds.prototype.IsInTouch = function () { return this.touches.length; }; Cnds.prototype.OnTouchObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; var touching = []; Cnds.prototype.IsTouchingObject = function (type) { if (!type) return false; var sol = type.getCurrentSol(); var instances = sol.getObjects(); var px, py; var i, leni, j, lenj; for (i = 0, leni = instances.length; i < leni; i++) { var inst = instances[i]; inst.update_bbox(); for (j = 0, lenj = this.touches.length; j < lenj; j++) { var touch = this.touches[j]; px = inst.layer.canvasToLayer(touch.x, touch.y, true); py = inst.layer.canvasToLayer(touch.x, touch.y, false); if (inst.contains_pt(px, py)) { touching.push(inst); break; } } } if (touching.length) { sol.select_all = false; cr.shallowAssignArray(sol.instances, touching); type.applySolToContainer(); cr.clearArray(touching); return true; } else return false; }; Cnds.prototype.CompareTouchSpeed = function (index, cmp, s) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) return false; var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; var speed = 0; if (timediff > 0) speed = dist / timediff; return cr.do_cmp(speed, cmp, s); }; Cnds.prototype.OrientationSupported = function () { return typeof window["DeviceOrientationEvent"] !== "undefined"; }; Cnds.prototype.MotionSupported = function () { return typeof window["DeviceMotionEvent"] !== "undefined"; }; Cnds.prototype.CompareOrientation = function (orientation_, cmp_, angle_) { var v = 0; if (orientation_ === 0) v = this.getAlpha(); else if (orientation_ === 1) v = this.getBeta(); else v = this.getGamma(); return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.CompareAcceleration = function (acceleration_, cmp_, angle_) { var v = 0; if (acceleration_ === 0) v = this.acc_g_x; else if (acceleration_ === 1) v = this.acc_g_y; else if (acceleration_ === 2) v = this.acc_g_z; else if (acceleration_ === 3) v = this.acc_x; else if (acceleration_ === 4) v = this.acc_y; else if (acceleration_ === 5) v = this.acc_z; return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.OnNthTouchStart = function (touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.OnNthTouchEnd = function (touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.HasNthTouch = function (touch_) { touch_ = Math.floor(touch_); return this.touches.length >= touch_ + 1; }; Cnds.prototype.OnHoldGesture = function () { return true; }; Cnds.prototype.OnTapGesture = function () { return true; }; Cnds.prototype.OnDoubleTapGesture = function () { return true; }; Cnds.prototype.OnHoldGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnTapGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnDoubleTapGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; pluginProto.cnds = new Cnds(); function Exps() {}; Exps.prototype.TouchCount = function (ret) { ret.set_int(this.touches.length); }; Exps.prototype.X = function (ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XAt = function (ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XForID = function (ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); else ret.set_float(0); } }; Exps.prototype.Y = function (ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YAt = function (ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YForID = function (ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function (ret) { if (this.touches.length) ret.set_float(this.touches[0].x); else ret.set_float(0); }; Exps.prototype.AbsoluteXAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].x); }; Exps.prototype.AbsoluteXForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.x); }; Exps.prototype.AbsoluteY = function (ret) { if (this.touches.length) ret.set_float(this.touches[0].y); else ret.set_float(0); }; Exps.prototype.AbsoluteYAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].y); }; Exps.prototype.AbsoluteYForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.y); }; Exps.prototype.SpeedAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; if (timediff === 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.SpeedForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var dist = cr.distanceTo(touch.x, touch.y, touch.lastx, touch.lasty); var timediff = (touch.time - touch.lasttime) / 1000; if (timediff === 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.AngleAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(t.lastx, t.lasty, t.x, t.y))); }; Exps.prototype.AngleForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(touch.lastx, touch.lasty, touch.x, touch.y))); }; Exps.prototype.Alpha = function (ret) { ret.set_float(this.getAlpha()); }; Exps.prototype.Beta = function (ret) { ret.set_float(this.getBeta()); }; Exps.prototype.Gamma = function (ret) { ret.set_float(this.getGamma()); }; Exps.prototype.AccelerationXWithG = function (ret) { ret.set_float(this.acc_g_x); }; Exps.prototype.AccelerationYWithG = function (ret) { ret.set_float(this.acc_g_y); }; Exps.prototype.AccelerationZWithG = function (ret) { ret.set_float(this.acc_g_z); }; Exps.prototype.AccelerationX = function (ret) { ret.set_float(this.acc_x); }; Exps.prototype.AccelerationY = function (ret) { ret.set_float(this.acc_y); }; Exps.prototype.AccelerationZ = function (ret) { ret.set_float(this.acc_z); }; Exps.prototype.TouchIndex = function (ret) { ret.set_int(this.trigger_index); }; Exps.prototype.TouchID = function (ret) { ret.set_float(this.trigger_id); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.WebStorage = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.WebStorage.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var prefix = ""; var is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); if (is_arcade) prefix = "arcade" + window["scirra_arcade_id"]; var isSupported = false; try { localStorage.getItem("test"); isSupported = true; } catch (e) { isSupported = false; } instanceProto.onCreate = function() { if (!isSupported) { cr.logexport("[Construct 2] Webstorage plugin: local storage is not supported on this platform."); } }; function Cnds() {}; Cnds.prototype.LocalStorageEnabled = function() { return isSupported; }; Cnds.prototype.SessionStorageEnabled = function() { return isSupported; }; Cnds.prototype.LocalStorageExists = function(key) { if (!isSupported) return false; return localStorage.getItem(prefix + key) != null; }; Cnds.prototype.SessionStorageExists = function(key) { if (!isSupported) return false; return sessionStorage.getItem(prefix + key) != null; }; Cnds.prototype.OnQuotaExceeded = function () { return true; }; Cnds.prototype.CompareKeyText = function (key, text_to_compare, case_sensitive) { if (!isSupported) return false; var value = localStorage.getItem(prefix + key) || ""; if (case_sensitive) return value == text_to_compare; else return cr.equals_nocase(value, text_to_compare); }; Cnds.prototype.CompareKeyNumber = function (key, cmp, x) { if (!isSupported) return false; var value = localStorage.getItem(prefix + key) || ""; return cr.do_cmp(parseFloat(value), cmp, x); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StoreLocal = function(key, data) { if (!isSupported) return; try { localStorage.setItem(prefix + key, data); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); } }; Acts.prototype.StoreSession = function(key,data) { if (!isSupported) return; try { sessionStorage.setItem(prefix + key, data); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); } }; Acts.prototype.RemoveLocal = function(key) { if (!isSupported) return; localStorage.removeItem(prefix + key); }; Acts.prototype.RemoveSession = function(key) { if (!isSupported) return; sessionStorage.removeItem(prefix + key); }; Acts.prototype.ClearLocal = function() { if (!isSupported) return; if (!is_arcade) localStorage.clear(); }; Acts.prototype.ClearSession = function() { if (!isSupported) return; if (!is_arcade) sessionStorage.clear(); }; Acts.prototype.JSONLoad = function (json_, mode_) { if (!isSupported) return; var d; try { d = JSON.parse(json_); } catch(e) { return; } if (!d["c2dictionary"]) // presumably not a c2dictionary object return; var o = d["data"]; if (mode_ === 0 && !is_arcade) // 'set' mode: must clear webstorage first localStorage.clear(); var p; for (p in o) { if (o.hasOwnProperty(p)) { try { localStorage.setItem(prefix + p, o[p]); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); return; } } } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.LocalValue = function(ret,key) { if (!isSupported) { ret.set_string(""); return; } ret.set_string(localStorage.getItem(prefix + key) || ""); }; Exps.prototype.SessionValue = function(ret,key) { if (!isSupported) { ret.set_string(""); return; } ret.set_string(sessionStorage.getItem(prefix + key) || ""); }; Exps.prototype.LocalCount = function(ret) { if (!isSupported) { ret.set_int(0); return; } ret.set_int(is_arcade ? 0 : localStorage.length); }; Exps.prototype.SessionCount = function(ret) { if (!isSupported) { ret.set_int(0); return; } ret.set_int(is_arcade ? 0 : sessionStorage.length); }; Exps.prototype.LocalAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(localStorage.getItem(localStorage.key(n)) || ""); }; Exps.prototype.SessionAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(sessionStorage.getItem(sessionStorage.key(n)) || ""); }; Exps.prototype.LocalKeyAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(localStorage.key(n) || ""); }; Exps.prototype.SessionKeyAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(sessionStorage.key(n) || ""); }; Exps.prototype.AsJSON = function (ret) { if (!isSupported) { ret.set_string(""); return; } var o = {}, i, len, k; for (i = 0, len = localStorage.length; i < len; i++) { k = localStorage.key(i); if (is_arcade) { if (k.substr(0, prefix.length) === prefix) { o[k.substr(prefix.length)] = localStorage.getItem(k); } } else o[k] = localStorage.getItem(k); } ret.set_string(JSON.stringify({ "c2dictionary": true, "data": o })); }; pluginProto.exps = new Exps(); }()); ; ; cr.behaviors.Bullet = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Bullet.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { var speed = this.properties[0]; this.acc = this.properties[1]; this.g = this.properties[2]; this.bounceOffSolid = (this.properties[3] !== 0); this.setAngle = (this.properties[4] !== 0); this.dx = Math.cos(this.inst.angle) * speed; this.dy = Math.sin(this.inst.angle) * speed; this.lastx = this.inst.x; this.lasty = this.inst.y; this.lastKnownAngle = this.inst.angle; this.travelled = 0; this.enabled = (this.properties[5] !== 0); }; behinstProto.saveToJSON = function () { return { "acc": this.acc, "g": this.g, "dx": this.dx, "dy": this.dy, "lx": this.lastx, "ly": this.lasty, "lka": this.lastKnownAngle, "t": this.travelled, "e": this.enabled }; }; behinstProto.loadFromJSON = function (o) { this.acc = o["acc"]; this.g = o["g"]; this.dx = o["dx"]; this.dy = o["dy"]; this.lastx = o["lx"]; this.lasty = o["ly"]; this.lastKnownAngle = o["lka"]; this.travelled = o["t"]; this.enabled = o["e"]; }; behinstProto.tick = function () { if (!this.enabled) return; var dt = this.runtime.getDt(this.inst); var s, a; var bounceSolid, bounceAngle; if (this.inst.angle !== this.lastKnownAngle) { if (this.setAngle) { s = cr.distanceTo(0, 0, this.dx, this.dy); this.dx = Math.cos(this.inst.angle) * s; this.dy = Math.sin(this.inst.angle) * s; } this.lastKnownAngle = this.inst.angle; } if (this.acc !== 0) { s = cr.distanceTo(0, 0, this.dx, this.dy); if (this.dx === 0 && this.dy === 0) a = this.inst.angle; else a = cr.angleTo(0, 0, this.dx, this.dy); s += this.acc * dt; if (s < 0) s = 0; this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; } if (this.g !== 0) this.dy += this.g * dt; this.lastx = this.inst.x; this.lasty = this.inst.y; if (this.dx !== 0 || this.dy !== 0) { this.inst.x += this.dx * dt; this.inst.y += this.dy * dt; this.travelled += cr.distanceTo(0, 0, this.dx * dt, this.dy * dt) if (this.setAngle) { this.inst.angle = cr.angleTo(0, 0, this.dx, this.dy); this.inst.set_bbox_changed(); this.lastKnownAngle = this.inst.angle; } this.inst.set_bbox_changed(); if (this.bounceOffSolid) { bounceSolid = this.runtime.testOverlapSolid(this.inst); if (bounceSolid) { this.runtime.registerCollision(this.inst, bounceSolid); s = cr.distanceTo(0, 0, this.dx, this.dy); bounceAngle = this.runtime.calculateSolidBounceAngle(this.inst, this.lastx, this.lasty); this.dx = Math.cos(bounceAngle) * s; this.dy = Math.sin(bounceAngle) * s; this.inst.x += this.dx * dt; // move out for one tick since the object can't have spent a tick in the solid this.inst.y += this.dy * dt; this.inst.set_bbox_changed(); if (this.setAngle) { this.inst.angle = bounceAngle; this.lastKnownAngle = bounceAngle; this.inst.set_bbox_changed(); } if (!this.runtime.pushOutSolid(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30))) this.runtime.pushOutSolidNearest(this.inst, 100); } } } }; function Cnds() {}; Cnds.prototype.CompareSpeed = function (cmp, s) { return cr.do_cmp(cr.distanceTo(0, 0, this.dx, this.dy), cmp, s); }; Cnds.prototype.CompareTravelled = function (cmp, d) { return cr.do_cmp(this.travelled, cmp, d); }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function (s) { var a = cr.angleTo(0, 0, this.dx, this.dy); this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; }; Acts.prototype.SetAcceleration = function (a) { this.acc = a; }; Acts.prototype.SetGravity = function (g) { this.g = g; }; Acts.prototype.SetAngleOfMotion = function (a) { a = cr.to_radians(a); var s = cr.distanceTo(0, 0, this.dx, this.dy) this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; }; Acts.prototype.Bounce = function (objtype) { if (!objtype) return; var otherinst = objtype.getFirstPicked(this.inst); if (!otherinst) return; var dt = this.runtime.getDt(this.inst); var s = cr.distanceTo(0, 0, this.dx, this.dy); var bounceAngle = this.runtime.calculateSolidBounceAngle(this.inst, this.lastx, this.lasty, otherinst); this.dx = Math.cos(bounceAngle) * s; this.dy = Math.sin(bounceAngle) * s; this.inst.x += this.dx * dt; // move out for one tick since the object can't have spent a tick in the solid this.inst.y += this.dy * dt; this.inst.set_bbox_changed(); if (this.setAngle) { this.inst.angle = bounceAngle; this.lastKnownAngle = bounceAngle; this.inst.set_bbox_changed(); } if (this.bounceOffSolid) { if (!this.runtime.pushOutSolid(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30))) this.runtime.pushOutSolidNearest(this.inst, 100); } else { this.runtime.pushOut(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30), otherinst) } }; Acts.prototype.SetDistanceTravelled = function (d) { this.travelled = d; }; Acts.prototype.SetEnabled = function (en) { this.enabled = (en === 1); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function (ret) { var s = cr.distanceTo(0, 0, this.dx, this.dy); s = cr.round6dp(s); ret.set_float(s); }; Exps.prototype.Acceleration = function (ret) { ret.set_float(this.acc); }; Exps.prototype.AngleOfMotion = function (ret) { ret.set_float(cr.to_degrees(cr.angleTo(0, 0, this.dx, this.dy))); }; Exps.prototype.DistanceTravelled = function (ret) { ret.set_float(this.travelled); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Fade = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Fade.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.activeAtStart = this.properties[0] === 1; this.setMaxOpacity = false; // used to retrieve maxOpacity once in first 'Start fade' action if initially inactive this.fadeInTime = this.properties[1]; this.waitTime = this.properties[2]; this.fadeOutTime = this.properties[3]; this.destroy = this.properties[4]; // 0 = no, 1 = after fade out this.stage = this.activeAtStart ? 0 : 3; // 0 = fade in, 1 = wait, 2 = fade out, 3 = done if (this.recycled) this.stageTime.reset(); else this.stageTime = new cr.KahanAdder(); this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); if (this.activeAtStart) { if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } } }; behinstProto.saveToJSON = function () { return { "fit": this.fadeInTime, "wt": this.waitTime, "fot": this.fadeOutTime, "s": this.stage, "st": this.stageTime.sum, "mo": this.maxOpacity, }; }; behinstProto.loadFromJSON = function (o) { this.fadeInTime = o["fit"]; this.waitTime = o["wt"]; this.fadeOutTime = o["fot"]; this.stage = o["s"]; this.stageTime.reset(); this.stageTime.sum = o["st"]; this.maxOpacity = o["mo"]; }; behinstProto.tick = function () { this.stageTime.add(this.runtime.getDt(this.inst)); if (this.stage === 0) { this.inst.opacity = (this.stageTime.sum / this.fadeInTime) * this.maxOpacity; this.runtime.redraw = true; if (this.inst.opacity >= this.maxOpacity) { this.inst.opacity = this.maxOpacity; this.stage = 1; // wait stage this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeInEnd, this.inst); } } if (this.stage === 1) { if (this.stageTime.sum >= this.waitTime) { this.stage = 2; // fade out stage this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnWaitEnd, this.inst); } } if (this.stage === 2) { if (this.fadeOutTime !== 0) { this.inst.opacity = this.maxOpacity - ((this.stageTime.sum / this.fadeOutTime) * this.maxOpacity); this.runtime.redraw = true; if (this.inst.opacity < 0) { this.inst.opacity = 0; this.stage = 3; // done this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeOutEnd, this.inst); if (this.destroy === 1) this.runtime.DestroyInstance(this.inst); } } } }; behinstProto.doStart = function () { this.stage = 0; this.stageTime.reset(); if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } }; function Cnds() {}; Cnds.prototype.OnFadeOutEnd = function () { return true; }; Cnds.prototype.OnFadeInEnd = function () { return true; }; Cnds.prototype.OnWaitEnd = function () { return true; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StartFade = function () { if (!this.activeAtStart && !this.setMaxOpacity) { this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); this.setMaxOpacity = true; } if (this.stage === 3) this.doStart(); }; Acts.prototype.RestartFade = function () { this.doStart(); }; Acts.prototype.SetFadeInTime = function (t) { if (t < 0) t = 0; this.fadeInTime = t; }; Acts.prototype.SetWaitTime = function (t) { if (t < 0) t = 0; this.waitTime = t; }; Acts.prototype.SetFadeOutTime = function (t) { if (t < 0) t = 0; this.fadeOutTime = t; }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.FadeInTime = function (ret) { ret.set_float(this.fadeInTime); }; Exps.prototype.WaitTime = function (ret) { ret.set_float(this.waitTime); }; Exps.prototype.FadeOutTime = function (ret) { ret.set_float(this.fadeOutTime); }; behaviorProto.exps = new Exps(); }()); var Box2D = {}; Box2D.Dynamics = {}; Box2D.Dynamics.Joints = {}; Box2D.Common = {}; Box2D.Common.Math = {}; Box2D.Collision = {}; Box2D.Collision.Shapes = {}; function c2inherit(derived, base) { for (var i in base.prototype) { if (base.prototype.hasOwnProperty(i)) derived.prototype[i] = base.prototype[i]; } }; Box2D.Collision.b2Collision = {}; Box2D.Collision.b2Distance = {}; Box2D.Common.b2Settings = {}; Box2D.Common.Math.b2Math = {}; Box2D.Consts = {}; Box2D.Dynamics.Contacts = {}; Box2D.Dynamics.Controllers = {}; /** * Creates a callback function * @param {!Object} context The context ('this' variable) of the callback function * @param {function(...[*])} fn The function to execute with the given context for the returned callback * @return {function()} The callback function */ Box2D.generateCallback = function(context, fn) { return function() { fn.apply(context, arguments); }; }; /** * @type {number} * @const */ Box2D.Consts.MIN_VALUE_SQUARED = Number.MIN_VALUE * Number.MIN_VALUE; /** * @param {number} friction1 * @param {number} friction2 */ Box2D.Common.b2Settings.b2MixFriction = function (friction1, friction2) { return Math.sqrt(friction1 * friction2); }; /** * @param {number} restitution1 * @param {number} restitution2 */ Box2D.Common.b2Settings.b2MixRestitution = function (restitution1, restitution2) { return restitution1 > restitution2 ? restitution1 : restitution2; }; Box2D.Common.b2Settings.VERSION = "2.1alpha-illandril"; Box2D.Common.b2Settings.USHRT_MAX = 0x0000ffff; Box2D.Common.b2Settings.b2_maxManifoldPoints = 2; Box2D.Common.b2Settings.b2_aabbExtension = 0.1; Box2D.Common.b2Settings.b2_aabbMultiplier = 2.0; Box2D.Common.b2Settings.b2_polygonRadius = 2.0 * Box2D.Common.b2Settings.b2_linearSlop; Box2D.Common.b2Settings.b2_linearSlop = 0.005; Box2D.Common.b2Settings.b2_angularSlop = 2.0 / 180.0 * Math.PI; Box2D.Common.b2Settings.b2_toiSlop = 8.0 * Box2D.Common.b2Settings.b2_linearSlop; Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland = 32; Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland = 32; Box2D.Common.b2Settings.b2_velocityThreshold = 1.0; Box2D.Common.b2Settings.b2_maxLinearCorrection = 0.2; Box2D.Common.b2Settings.b2_maxAngularCorrection = 8.0 / 180.0 * Math.PI; Box2D.Common.b2Settings.b2_maxTranslation = 2.0; Box2D.Common.b2Settings.b2_maxTranslationSquared = Box2D.Common.b2Settings.b2_maxTranslation * Box2D.Common.b2Settings.b2_maxTranslation; Box2D.Common.b2Settings.b2_maxRotation = 0.5 * Math.PI; Box2D.Common.b2Settings.b2_maxRotationSquared = Box2D.Common.b2Settings.b2_maxRotation * Box2D.Common.b2Settings.b2_maxRotation; Box2D.Common.b2Settings.b2_contactBaumgarte = 0.2; Box2D.Common.b2Settings.b2_timeToSleep = 0.5; Box2D.Common.b2Settings.b2_linearSleepTolerance = 0.01; Box2D.Common.b2Settings.b2_linearSleepToleranceSquared = Box2D.Common.b2Settings.b2_linearSleepTolerance * Box2D.Common.b2Settings.b2_linearSleepTolerance; Box2D.Common.b2Settings.b2_angularSleepTolerance = 2.0 / 180.0 * Math.PI; Box2D.Common.b2Settings.b2_angularSleepToleranceSquared = Box2D.Common.b2Settings.b2_angularSleepTolerance * Box2D.Common.b2Settings.b2_angularSleepTolerance; Box2D.Common.b2Settings.MIN_VALUE_SQUARED = Number.MIN_VALUE * Number.MIN_VALUE; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.Dot = function (a, b) { return a.x * b.x + a.y * b.y; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.CrossVV = function (a, b) { return a.x * b.y - a.y * b.x; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {number} s * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.CrossVF = function (a, s) { return Box2D.Common.Math.b2Vec2.Get(s * a.y, (-s * a.x)); }; /** * @param {number} s * @param {!Box2D.Common.Math.b2Vec2} a * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.CrossFV = function (s, a) { return Box2D.Common.Math.b2Vec2.Get((-s * a.y), s * a.x); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulMV = function (A, v) { return Box2D.Common.Math.b2Vec2.Get(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulTMV = function (A, v) { return Box2D.Common.Math.b2Vec2.Get(Box2D.Common.Math.b2Math.Dot(v, A.col1), Box2D.Common.Math.b2Math.Dot(v, A.col2)); }; /** * @param {!Box2D.Common.Math.b2Transform} T * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulX = function (T, v) { var a = Box2D.Common.Math.b2Math.MulMV(T.R, v); a.x += T.position.x; a.y += T.position.y; return a; }; /** * @param {!Box2D.Common.Math.b2Transform} T * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulXT = function (T, v) { var a = Box2D.Common.Math.b2Math.SubtractVV(v, T.position); var tX = (a.x * T.R.col1.x + a.y * T.R.col1.y); a.y = (a.x * T.R.col2.x + a.y * T.R.col2.y); a.x = tX; return a; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.AddVV = function (a, b) { return Box2D.Common.Math.b2Vec2.Get(a.x + b.x, a.y + b.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.SubtractVV = function (a, b) { return Box2D.Common.Math.b2Vec2.Get(a.x - b.x, a.y - b.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.Distance = function (a, b) { var cX = a.x - b.x; var cY = a.y - b.y; return Math.sqrt(Box2D.Common.Math.b2Math.DistanceSquared(a,b)); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.DistanceSquared = function (a, b) { var cX = a.x - b.x; var cY = a.y - b.y; return (cX * cX + cY * cY); }; /** * @param {number} s * @param {!Box2D.Common.Math.b2Vec2} a * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulFV = function (s, a) { return Box2D.Common.Math.b2Vec2.Get(s * a.x, s * a.y); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Mat22} B * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.AddMM = function (A, B) { return Box2D.Common.Math.b2Mat22.FromVV(Box2D.Common.Math.b2Math.AddVV(A.col1, B.col1), Box2D.Common.Math.b2Math.AddVV(A.col2, B.col2)); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Mat22} B * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.MulMM = function (A, B) { return Box2D.Common.Math.b2Mat22.FromVV(Box2D.Common.Math.b2Math.MulMV(A, B.col1), Box2D.Common.Math.b2Math.MulMV(A, B.col2)); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Mat22} B * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.MulTMM = function (A, B) { var c1 = Box2D.Common.Math.b2Vec2.Get(Box2D.Common.Math.b2Math.Dot(A.col1, B.col1), Box2D.Common.Math.b2Math.Dot(A.col2, B.col1)); var c2 = Box2D.Common.Math.b2Vec2.Get(Box2D.Common.Math.b2Math.Dot(A.col1, B.col2), Box2D.Common.Math.b2Math.Dot(A.col2, B.col2)); return Box2D.Common.Math.b2Mat22.FromVV(c1, c2); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.AbsV = function (a) { return Box2D.Common.Math.b2Vec2.Get(Math.abs(a.x), Math.abs(a.y)); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.AbsM = function (A) { return Box2D.Common.Math.b2Mat22.FromVV(Box2D.Common.Math.b2Math.AbsV(A.col1), Box2D.Common.Math.b2Math.AbsV(A.col2)); }; /** * @param {number} a * @param {number} low * @param {number} high * @return {number} */ Box2D.Common.Math.b2Math.Clamp = function (a, low, high) { return a < low ? low : a > high ? high : a; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} low * @param {!Box2D.Common.Math.b2Vec2} high * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.ClampV = function (a, low, high) { var x = Box2D.Common.Math.b2Math.Clamp(a.x, low.x, high.x); var y = Box2D.Common.Math.b2Math.Clamp(a.y, low.y, high.y); return Box2D.Common.Math.b2Vec2.Get(x, y); }; /** * @constructor */ Box2D.Common.Math.b2Mat22 = function() { this.col1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.col2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.SetIdentity(); }; /** * @param {number} angle * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.FromAngle = function(angle) { var mat = new Box2D.Common.Math.b2Mat22(); mat.Set(angle); return mat; }; /** * @param {!Box2D.Common.Math.b2Vec2} c1 * @param {!Box2D.Common.Math.b2Vec2} c2 * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.FromVV = function(c1, c2) { var mat = new Box2D.Common.Math.b2Mat22(); mat.SetVV(c1, c2); return mat; }; /** * @param {number} angle */ Box2D.Common.Math.b2Mat22.prototype.Set = function(angle) { var c = Math.cos(angle); var s = Math.sin(angle); this.col1.Set(c, s); this.col2.Set(-s, c); }; /** * @param {!Box2D.Common.Math.b2Vec2} c1 * @param {!Box2D.Common.Math.b2Vec2} c2 */ Box2D.Common.Math.b2Mat22.prototype.SetVV = function(c1, c2) { this.col1.SetV(c1); this.col2.SetV(c2); }; /** * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.prototype.Copy = function() { var mat = new Box2D.Common.Math.b2Mat22(); mat.SetM(this); return mat; }; /** * @param {!Box2D.Common.Math.b2Mat22} m */ Box2D.Common.Math.b2Mat22.prototype.SetM = function(m) { this.col1.SetV(m.col1); this.col2.SetV(m.col2); }; /** * @param {!Box2D.Common.Math.b2Mat22} m */ Box2D.Common.Math.b2Mat22.prototype.AddM = function(m) { this.col1.Add(m.col1); this.col2.Add(m.col2); }; Box2D.Common.Math.b2Mat22.prototype.SetIdentity = function() { this.col1.Set(1, 0); this.col2.Set(0, 1); }; Box2D.Common.Math.b2Mat22.prototype.SetZero = function() { this.col1.Set(0, 0); this.col2.Set(0, 0); }; /** * @return {number} */ Box2D.Common.Math.b2Mat22.prototype.GetAngle = function() { return Math.atan2(this.col1.y, this.col1.x); }; /** * @param {!Box2D.Common.Math.b2Mat22} out * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.prototype.GetInverse = function(out) { var det = this.col1.x * this.col2.y - this.col2.x * this.col1.y; if (det !== 0) { det = 1 / det; } out.col1.x = det * this.col2.y; out.col2.x = -det * this.col2.x; out.col1.y = -det * this.col1.y; out.col2.y = det * this.col1.x; return out; }; /** * @param {!Box2D.Common.Math.b2Vec2} out * @param {number} bX * @param {number} bY * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Mat22.prototype.Solve = function(out, bX, bY) { var det = this.col1.x * this.col2.y - this.col2.x * this.col1.y; if (det !== 0) { det = 1 / det; } out.x = det * (this.col2.y * bX - this.col2.x * bY); out.y = det * (this.col1.x * bY - this.col1.y * bX); return out; }; Box2D.Common.Math.b2Mat22.prototype.Abs = function() { this.col1.Abs(); this.col2.Abs(); }; /** * @param {!Box2D.Common.Math.b2Vec3=} c1 * @param {!Box2D.Common.Math.b2Vec3=} c2 * @param {!Box2D.Common.Math.b2Vec3=} c3 * @constructor */ Box2D.Common.Math.b2Mat33 = function(c1, c2, c3) { this.col1 = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.col2 = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.col3 = new Box2D.Common.Math.b2Vec3(0, 0, 0); if (c1) { this.col1.SetV(c1); } if (c2) { this.col2.SetV(c2); } if (c3) { this.col3.SetV(c3); } }; /** * @param {!Box2D.Common.Math.b2Vec3} c1 * @param {!Box2D.Common.Math.b2Vec3} c2 * @param {!Box2D.Common.Math.b2Vec3} c3 */ Box2D.Common.Math.b2Mat33.prototype.SetVVV = function(c1, c2, c3) { this.col1.SetV(c1); this.col2.SetV(c2); this.col3.SetV(c3); }; /** * @return {!Box2D.Common.Math.b2Mat33} */ Box2D.Common.Math.b2Mat33.prototype.Copy = function() { return new Box2D.Common.Math.b2Mat33(this.col1, this.col2, this.col3); }; /** * @param {!Box2D.Common.Math.b2Mat33} m */ Box2D.Common.Math.b2Mat33.prototype.SetM = function(m) { this.col1.SetV(m.col1); this.col2.SetV(m.col2); this.col3.SetV(m.col3); }; /** * @param {!Box2D.Common.Math.b2Mat33} m */ Box2D.Common.Math.b2Mat33.prototype.AddM = function(m) { this.col1.x += m.col1.x; this.col1.y += m.col1.y; this.col1.z += m.col1.z; this.col2.x += m.col2.x; this.col2.y += m.col2.y; this.col2.z += m.col2.z; this.col3.x += m.col3.x; this.col3.y += m.col3.y; this.col3.z += m.col3.z; }; Box2D.Common.Math.b2Mat33.prototype.SetIdentity = function() { this.col1.Set(1,0,0); this.col2.Set(0,1,0); this.col3.Set(0,0,1); }; Box2D.Common.Math.b2Mat33.prototype.SetZero = function() { this.col1.Set(0,0,0); this.col2.Set(0,0,0); this.col3.Set(0,0,0); }; /** * @param {!Box2D.Common.Math.b2Vec2} out * @param {number} bX * @param {number} bY * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Mat33.prototype.Solve22 = function(out, bX, bY) { var a11 = this.col1.x; var a12 = this.col2.x; var a21 = this.col1.y; var a22 = this.col2.y; var det = a11 * a22 - a12 * a21; if (det != 0.0) { det = 1.0 / det; } out.x = det * (a22 * bX - a12 * bY); out.y = det * (a11 * bY - a21 * bX); return out; }; /** * @param {!Box2D.Common.Math.b2Vec3} out * @param {number} bX * @param {number} bY * @param {number} bZ * @return {!Box2D.Common.Math.b2Vec3} */ Box2D.Common.Math.b2Mat33.prototype.Solve33 = function(out, bX, bY, bZ) { var a11 = this.col1.x; var a21 = this.col1.y; var a31 = this.col1.z; var a12 = this.col2.x; var a22 = this.col2.y; var a32 = this.col2.z; var a13 = this.col3.x; var a23 = this.col3.y; var a33 = this.col3.z; var det = a11 * (a22 * a33 - a32 * a23) + a21 * (a32 * a13 - a12 * a33) + a31 * (a12 * a23 - a22 * a13); if (det != 0.0) { det = 1.0 / det; } out.x = det * (bX * (a22 * a33 - a32 * a23) + bY * (a32 * a13 - a12 * a33) + bZ * (a12 * a23 - a22 * a13)); out.y = det * (a11 * (bY * a33 - bZ * a23) + a21 * (bZ * a13 - bX * a33) + a31 * (bX * a23 - bY * a13)); out.z = det * (a11 * (a22 * bZ - a32 * bY) + a21 * (a32 * bX - a12 * bZ) + a31 * (a12 * bY - a22 * bX)); return out; } /** * @constructor */ Box2D.Common.Math.b2Sweep = function() { this.localCenter = Box2D.Common.Math.b2Vec2.Get(0, 0); this.c0 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.c = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Common.Math.b2Sweep.prototype.Set = function(other) { this.localCenter.SetV(other.localCenter); this.c0.SetV(other.c0); this.c.SetV(other.c); this.a0 = other.a0; this.a = other.a; this.t0 = other.t0; }; Box2D.Common.Math.b2Sweep.prototype.Copy = function() { var copy = new Box2D.Common.Math.b2Sweep(); copy.localCenter.SetV(this.localCenter); copy.c0.SetV(this.c0); copy.c.SetV(this.c); copy.a0 = this.a0; copy.a = this.a; copy.t0 = this.t0; return copy; }; Box2D.Common.Math.b2Sweep.prototype.GetTransform = function(xf, alpha) { if (alpha === undefined) alpha = 0; xf.position.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x; xf.position.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y; var angle = (1.0 - alpha) * this.a0 + alpha * this.a; xf.R.Set(angle); var tMat = xf.R; xf.position.x -= (tMat.col1.x * this.localCenter.x + tMat.col2.x * this.localCenter.y); xf.position.y -= (tMat.col1.y * this.localCenter.x + tMat.col2.y * this.localCenter.y); }; Box2D.Common.Math.b2Sweep.prototype.Advance = function(t) { if (t === undefined) t = 0; if (this.t0 < t && 1.0 - this.t0 > Number.MIN_VALUE) { var alpha = (t - this.t0) / (1.0 - this.t0); this.c0.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x; this.c0.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y; this.a0 = (1.0 - alpha) * this.a0 + alpha * this.a; this.t0 = t; } }; /** * @param {!Box2D.Common.Math.b2Vec2=} pos * @param {!Box2D.Common.Math.b2Mat22=} r * @constructor */ Box2D.Common.Math.b2Transform = function(pos, r) { this.position = Box2D.Common.Math.b2Vec2.Get(0, 0); this.R = new Box2D.Common.Math.b2Mat22(); if (pos) { this.position.SetV(pos); } if (r) { this.R.SetM(r); } }; Box2D.Common.Math.b2Transform.prototype.Initialize = function(pos, r) { this.position.SetV(pos); this.R.SetM(r); }; Box2D.Common.Math.b2Transform.prototype.SetIdentity = function() { this.position.SetZero(); this.R.SetIdentity(); }; Box2D.Common.Math.b2Transform.prototype.Set = function(x) { this.position.SetV(x.position); this.R.SetM(x.R); }; Box2D.Common.Math.b2Transform.prototype.GetAngle = function() { return Math.atan2(this.R.col1.y, this.R.col1.x); }; /** * @private * @param {number} x * @param {number} y * @constructor */ Box2D.Common.Math.b2Vec2 = function(x, y) { this.x = x; this.y = y; }; /** * @private * @type {Array.<!Box2D.Common.Math.b2Vec2>} */ Box2D.Common.Math.b2Vec2._freeCache = []; /** * @param {number} x * @param {number} y * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Vec2.Get = function(x, y) { if (Box2D.Common.Math.b2Vec2._freeCache.length > 0) { var vec = Box2D.Common.Math.b2Vec2._freeCache.pop(); vec.Set(x, y); return vec; } return new Box2D.Common.Math.b2Vec2(x, y); }; /** * @param {!Box2D.Common.Math.b2Vec2} vec */ Box2D.Common.Math.b2Vec2.Free = function(vec) { Box2D.Common.Math.b2Vec2._freeCache.push(vec); }; Box2D.Common.Math.b2Vec2.prototype.SetZero = function() { this.x = 0.0; this.y = 0.0; }; /** * @param {number} x * @param {number} y */ Box2D.Common.Math.b2Vec2.prototype.Set = function(x, y) { this.x = x; this.y = y; }; /** * @param {!Box2D.Common.Math.b2Vec2} v */ Box2D.Common.Math.b2Vec2.prototype.SetV = function(v) { this.x = v.x; this.y = v.y; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Vec2.prototype.GetNegative = function() { return Box2D.Common.Math.b2Vec2.Get((-this.x), (-this.y)); }; Box2D.Common.Math.b2Vec2.prototype.NegativeSelf = function() { this.x = (-this.x); this.y = (-this.y); }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Vec2.prototype.Copy = function() { return Box2D.Common.Math.b2Vec2.Get(this.x, this.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} v */ Box2D.Common.Math.b2Vec2.prototype.Add = function(v) { this.x += v.x; this.y += v.y; }; /** * @param {!Box2D.Common.Math.b2Vec2} v */ Box2D.Common.Math.b2Vec2.prototype.Subtract = function(v) { this.x -= v.x; this.y -= v.y; }; /** * @param {number} a */ Box2D.Common.Math.b2Vec2.prototype.Multiply = function(a) { this.x *= a; this.y *= a; }; /** * @param {Box2D.Common.Math.b2Mat22} A */ Box2D.Common.Math.b2Vec2.prototype.MulM = function(A) { var tX = this.x; this.x = A.col1.x * tX + A.col2.x * this.y; this.y = A.col1.y * tX + A.col2.y * this.y; }; /** * @param {Box2D.Common.Math.b2Mat22} A */ Box2D.Common.Math.b2Vec2.prototype.MulTM = function(A) { var tX = this.x * A.col1.x + this.y * A.col1.y; this.y = this.x * A.col2.x + this.y * A.col2.y; this.x = tX; }; /** * @param {number} s */ Box2D.Common.Math.b2Vec2.prototype.CrossVF = function(s) { var tX = this.x; this.x = s * this.y; this.y = (-s * tX); }; /** * @param {number} s */ Box2D.Common.Math.b2Vec2.prototype.CrossFV = function(s) { var tX = this.x; this.x = (-s * this.y); this.y = s * tX; }; /** * @param {!Box2D.Common.Math.b2Vec2} b */ Box2D.Common.Math.b2Vec2.prototype.MinV = function(b) { this.x = Math.min(this.x, b.x); this.y = Math.min(this.y, b.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} b */ Box2D.Common.Math.b2Vec2.prototype.MaxV = function(b) { this.x = Math.max(this.x, b.x); this.y = Math.max(this.y, b.y); }; Box2D.Common.Math.b2Vec2.prototype.Abs = function() { this.x = Math.abs(this.x); this.y = Math.abs(this.y); }; /** * @return {number} */ Box2D.Common.Math.b2Vec2.prototype.Length = function() { return Math.sqrt(this.LengthSquared()); }; /** * @return {number} */ Box2D.Common.Math.b2Vec2.prototype.LengthSquared = function() { return (this.x * this.x + this.y * this.y); }; /** * @return {number} */ Box2D.Common.Math.b2Vec2.prototype.Normalize = function() { var length = this.Length(); if (length < Number.MIN_VALUE) { return 0.0; } var invLength = 1.0 / length; this.x *= invLength; this.y *= invLength; return length; }; /** * @return {boolean} */ Box2D.Common.Math.b2Vec2.prototype.IsValid = function () { return isFinite(this.x) && isFinite(this.y); }; /** * @param {number} x * @param {number} y * @param {number} z * @constructor */ Box2D.Common.Math.b2Vec3 = function(x, y, z) { this.x = x; this.y = y; this.z = z; }; Box2D.Common.Math.b2Vec3.prototype.SetZero = function() { this.x = 0; this.y = 0; this.z = 0; }; /** * @param {number} x * @param {number} y * @param {number} z */ Box2D.Common.Math.b2Vec3.prototype.Set = function(x, y, z) { this.x = x; this.y = y; this.z = z; } /** * @param {!Box2D.Common.Math.b2Vec3} v */ Box2D.Common.Math.b2Vec3.prototype.SetV = function(v) { this.x = v.x; this.y = v.y; this.z = v.z; }; /** * @return {!Box2D.Common.Math.b2Vec3} */ Box2D.Common.Math.b2Vec3.prototype.GetNegative = function() { return new Box2D.Common.Math.b2Vec3((-this.x), (-this.y), (-this.z)); }; Box2D.Common.Math.b2Vec3.prototype.NegativeSelf = function() { this.x = (-this.x); this.y = (-this.y); this.z = (-this.z); }; /** * @return {!Box2D.Common.Math.b2Vec3} */ Box2D.Common.Math.b2Vec3.prototype.Copy = function() { return new Box2D.Common.Math.b2Vec3(this.x, this.y, this.z); }; /** * @param {!Box2D.Common.Math.b2Vec3} v */ Box2D.Common.Math.b2Vec3.prototype.Add = function(v) { this.x += v.x; this.y += v.y; this.z += v.z; }; /** * @param {!Box2D.Common.Math.b2Vec3} v */ Box2D.Common.Math.b2Vec3.prototype.Subtract = function(v) { this.x -= v.x; this.y -= v.y; this.z -= v.z; }; /** * @param {number} a */ Box2D.Common.Math.b2Vec3.prototype.Multiply = function(a) { this.x *= a; this.y *= a; this.z *= a; }; /** * @constructor */ Box2D.Collision.Shapes.b2Shape = function() { this.m_radius = Box2D.Common.b2Settings.b2_linearSlop; }; /** * @return {string} */ Box2D.Collision.Shapes.b2Shape.prototype.GetTypeName = function(){}; /** * @return {!Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2Shape.prototype.Copy = function(){}; /** * @param {!Box2D.Collision.Shapes.b2Shape} other */ Box2D.Collision.Shapes.b2Shape.prototype.Set = function(other) { this.m_radius = other.m_radius; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2Shape.prototype.TestPoint = function(){}; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2Shape.prototype.RayCast = function(){}; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} transform */ Box2D.Collision.Shapes.b2Shape.prototype.ComputeAABB = function(){}; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2Shape.prototype.ComputeMass = function(){}; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2Shape.prototype.ComputeSubmergedArea = function(){}; /** * @param {!Box2D.Collision.b2DistanceProxy} proxy */ Box2D.Collision.Shapes.b2Shape.prototype.SetDistanceProxy = function(){}; /** * @param {!Box2D.Collision.Shapes.b2Shape} shape1 * @param {!Box2D.Common.Math.b2Transform} transform1 * @param {!Box2D.Collision.Shapes.b2Shape} shape2 * @param {!Box2D.Common.Math.b2Transform} transform2 * @return {boolean} */ Box2D.Collision.Shapes.b2Shape.TestOverlap = function(shape1, transform1, shape2, transform2) { var input = new Box2D.Collision.b2DistanceInput(); input.proxyA = new Box2D.Collision.b2DistanceProxy(); input.proxyA.Set(shape1); input.proxyB = new Box2D.Collision.b2DistanceProxy(); input.proxyB.Set(shape2); input.transformA = transform1; input.transformB = transform2; input.useRadii = true; var simplexCache = new Box2D.Collision.b2SimplexCache(); simplexCache.count = 0; var output = new Box2D.Collision.b2DistanceOutput(); Box2D.Collision.b2Distance.Distance(output, simplexCache, input); return output.distance < 10.0 * Number.MIN_VALUE; }; /** * @const * @type {number} */ Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide = -1; /** * @const * @type {number} */ Box2D.Collision.Shapes.b2Shape.e_missCollide = 0; /** * @const * @type {number} */ Box2D.Collision.Shapes.b2Shape.e_hitCollide = 1; /** * @param {number} radius * @constructor * @extends {Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2CircleShape = function(radius) { Box2D.Collision.Shapes.b2Shape.call(this); /** @type {number} */ this.m_radius = radius; /** @type {number} */ this.m_radiusSquared = radius * radius; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_p = Box2D.Common.Math.b2Vec2.Get(0, 0); }; c2inherit(Box2D.Collision.Shapes.b2CircleShape, Box2D.Collision.Shapes.b2Shape); /** * @return {string} */ Box2D.Collision.Shapes.b2CircleShape.prototype.GetTypeName = function() { return Box2D.Collision.Shapes.b2CircleShape.NAME; }; /** * @return {!Box2D.Collision.Shapes.b2CircleShape} */ Box2D.Collision.Shapes.b2CircleShape.prototype.Copy = function() { var s = new Box2D.Collision.Shapes.b2CircleShape(this.m_radius); s.Set(this); return s; }; /** * @param {!Box2D.Collision.Shapes.b2Shape} other */ Box2D.Collision.Shapes.b2CircleShape.prototype.Set = function(other) { Box2D.Collision.Shapes.b2Shape.prototype.Set.call(this, other); if (other instanceof Box2D.Collision.Shapes.b2CircleShape) { this.m_p.SetV(other.m_p); } }; /** * @param {!Box2D.Common.Math.b2Transform} transform * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2CircleShape.prototype.TestPoint = function(transform, p) { var tMat = transform.R; var dX = p.x - (transform.position.x + (transform.R.col1.x * this.m_p.x + transform.R.col2.x * this.m_p.y)); var dY = p.y - (transform.position.y + (transform.R.col1.y * this.m_p.x + transform.R.col2.y * this.m_p.y)); return (dX * dX + dY * dY) <= this.m_radiusSquared; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2CircleShape.prototype.RayCast = function(output, input, transform) { var tMat = transform.R; var positionX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y); var positionY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y); var sX = input.p1.x - positionX; var sY = input.p1.y - positionY; var b = (sX * sX + sY * sY) - this.m_radiusSquared; var rX = input.p2.x - input.p1.x; var rY = input.p2.y - input.p1.y; var c = (sX * rX + sY * rY); var rr = (rX * rX + rY * rY); var sigma = c * c - rr * b; if (sigma < 0.0 || rr < Number.MIN_VALUE) { return false; } var a = (-(c + Math.sqrt(sigma))); if (0.0 <= a && a <= input.maxFraction * rr) { a /= rr; output.fraction = a; output.normal.x = sX + a * rX; output.normal.y = sY + a * rY; output.normal.Normalize(); return true; } return false; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} transform */ Box2D.Collision.Shapes.b2CircleShape.prototype.ComputeAABB = function(aabb, transform) { var tMat = transform.R; var pX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y); var pY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y); aabb.lowerBound_.Set(pX - this.m_radius, pY - this.m_radius); aabb.upperBound_.Set(pX + this.m_radius, pY + this.m_radius); }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2CircleShape.prototype.ComputeMass = function(massData, density) { massData.mass = density * Math.PI * this.m_radiusSquared; massData.center.SetV(this.m_p); massData.I = massData.mass * (0.5 * this.m_radiusSquared + (this.m_p.x * this.m_p.x + this.m_p.y * this.m_p.y)); }; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2CircleShape.prototype.ComputeSubmergedArea = function(normal, offset, xf, c) { var p = Box2D.Common.Math.b2Math.MulX(xf, this.m_p); var l = (-(Box2D.Common.Math.b2Math.Dot(normal, p) - offset)); if (l < (-this.m_radius) + Number.MIN_VALUE) { return 0; } if (l > this.m_radius) { c.SetV(p); return Math.PI * this.m_radiusSquared; } var l2 = l * l; var area = this.m_radiusSquared * (Math.asin(l / this.m_radius) + Math.PI / 2) + l * Math.sqrt(this.m_radiusSquared - l2); var com = (-2 / 3 * Math.pow(this.m_radiusSquared - l2, 1.5) / area); c.x = p.x + normal.x * com; c.y = p.y + normal.y * com; return area; }; /** * @param {!Box2D.Collision.b2DistanceProxy} proxy */ Box2D.Collision.Shapes.b2CircleShape.prototype.SetDistanceProxy = function(proxy) { proxy.m_vertices = [this.m_p]; proxy.m_count = 1; proxy.m_radius = this.m_radius; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2CircleShape.prototype.GetLocalPosition = function() { return this.m_p; }; /** * @param {!Box2D.Common.Math.b2Vec2} position */ Box2D.Collision.Shapes.b2CircleShape.prototype.SetLocalPosition = function(position) { this.m_p.SetV(position); }; /** * @return {number} */ Box2D.Collision.Shapes.b2CircleShape.prototype.GetRadius = function() { return this.m_radius; }; /** * @param {number} radius */ Box2D.Collision.Shapes.b2CircleShape.prototype.SetRadius = function(radius) { this.m_radius = radius; this.m_radiusSquared = radius * radius; }; /** * @const * @type {string} */ Box2D.Collision.Shapes.b2CircleShape.NAME = 'b2CircleShape'; /** * @constructor */ Box2D.Collision.Shapes.b2EdgeChainDef = function() { /** @type {number} */ this.vertexCount = 0; /** @type {boolean} */ this.isALoop = true; /** @type {Array.<Box2D.Common.Math.b2Vec2} */ this.vertices = []; }; /** * @param {!Box2D.Common.Math.b2Vec2} v1 * @param {!Box2D.Common.Math.b2Vec2} v2 * @constructor * @extends {Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2EdgeShape = function(v1, v2) { Box2D.Collision.Shapes.b2Shape.call(this); /** @type {Box2D.Collision.Shapes.b2EdgeShape} */ this.m_prevEdge = null; /** @type {Box2D.Collision.Shapes.b2EdgeShape} */ this.m_nextEdge = null; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_v1 = v1; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_v2 = v2; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_direction = Box2D.Common.Math.b2Vec2.Get(this.m_v2.x - this.m_v1.x, this.m_v2.y - this.m_v1.y); /** @type {number} */ this.m_length = this.m_direction.Normalize(); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_normal = Box2D.Common.Math.b2Vec2.Get(this.m_direction.y, -this.m_direction.x); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_coreV1 = Box2D.Common.Math.b2Vec2.Get((-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.x - this.m_direction.x)) + this.m_v1.x, (-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.y - this.m_direction.y)) + this.m_v1.y); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_coreV2 = Box2D.Common.Math.b2Vec2.Get((-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.x + this.m_direction.x)) + this.m_v2.x, (-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.y + this.m_direction.y)) + this.m_v2.y); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_cornerDir1 = this.m_normal; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_cornerDir2 = Box2D.Common.Math.b2Vec2.Get(-this.m_normal.x, -this.m_normal.y); /** @type {boolean} */ this.m_cornerConvex1 = false; /** @type {boolean} */ this.m_cornerConvex2 = false; }; c2inherit(Box2D.Collision.Shapes.b2EdgeShape, Box2D.Collision.Shapes.b2Shape); /** * @return {string} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetTypeName = function() { return Box2D.Collision.Shapes.b2EdgeShape.NAME; }; /** * @param {!Box2D.Common.Math.b2Transform} transform * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.TestPoint = function(transform, p) { return false; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.RayCast = function(output, input, transform) { var rX = input.p2.x - input.p1.x; var rY = input.p2.y - input.p1.y; var tMat = transform.R; var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y); var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y); var nX = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y) - v1Y; var nY = (-(transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y) - v1X)); var k_slop = 100.0 * Number.MIN_VALUE; var denom = (-(rX * nX + rY * nY)); if (denom > k_slop) { var bX = input.p1.x - v1X; var bY = input.p1.y - v1Y; var a = (bX * nX + bY * nY); if (0.0 <= a && a <= input.maxFraction * denom) { var mu2 = (-rX * bY) + rY * bX; if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) { a /= denom; output.fraction = a; var nLen = Math.sqrt(nX * nX + nY * nY); output.normal.x = nX / nLen; output.normal.y = nY / nLen; return true; } } } return false; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} transform */ Box2D.Collision.Shapes.b2EdgeShape.prototype.ComputeAABB = function(aabb, transform) { var tMat = transform.R; var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y); var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y); var v2X = transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y); var v2Y = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y); if (v1X < v2X) { aabb.lowerBound_.x = v1X; aabb.upperBound_.x = v2X; } else { aabb.lowerBound_.x = v2X; aabb.upperBound_.x = v1X; } if (v1Y < v2Y) { aabb.lowerBound_.y = v1Y; aabb.upperBound_.y = v2Y; } else { aabb.lowerBound_.y = v2Y; aabb.upperBound_.y = v1Y; } }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2EdgeShape.prototype.ComputeMass = function(massData, density) { massData.mass = 0; massData.center.SetV(this.m_v1); massData.I = 0; }; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.ComputeSubmergedArea = function(normal, offset, xf, c) { if (offset === undefined) offset = 0; var v0 = Box2D.Common.Math.b2Vec2.Get(normal.x * offset, normal.y * offset); var v1 = Box2D.Common.Math.b2Math.MulX(xf, this.m_v1); var v2 = Box2D.Common.Math.b2Math.MulX(xf, this.m_v2); var d1 = Box2D.Common.Math.b2Math.Dot(normal, v1) - offset; var d2 = Box2D.Common.Math.b2Math.Dot(normal, v2) - offset; if (d1 > 0) { if (d2 > 0) { return 0; } else { v1.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x; v1.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y; } } else { if (d2 > 0) { v2.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x; v2.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y; } } c.x = (v0.x + v1.x + v2.x) / 3; c.y = (v0.y + v1.y + v2.y) / 3; return 0.5 * ((v1.x - v0.x) * (v2.y - v0.y) - (v1.y - v0.y) * (v2.x - v0.x)); }; /** * @return {number} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetLength = function() { return this.m_length; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetVertex1 = function() { return this.m_v1; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetVertex2 = function() { return this.m_v2; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCoreVertex1 = function() { return this.m_coreV1; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCoreVertex2 = function() { return this.m_coreV2; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetNormalVector = function() { return this.m_normal; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetDirectionVector = function() { return this.m_direction; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCorner1Vector = function() { return this.m_cornerDir1; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCorner2Vector = function() { return this.m_cornerDir2; }; /** * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.Corner1IsConvex = function() { return this.m_cornerConvex1; }; /** * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.Corner2IsConvex = function() { return this.m_cornerConvex2; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetFirstVertex = function(xf) { var tMat = xf.R; return Box2D.Common.Math.b2Vec2.Get(xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y), xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y)); }; /** * @return {Box2D.Collision.Shapes.b2EdgeShape} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetNextEdge = function() { return this.m_nextEdge; }; /** * @return {Box2D.Collision.Shapes.b2EdgeShape} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetPrevEdge = function() { return this.m_prevEdge; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @param {number} dX * @param {number} dY * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.Support = function(xf, dX, dY) { var tMat = xf.R; var v1X = xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y); var v1Y = xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y); var v2X = xf.position.x + (tMat.col1.x * this.m_coreV2.x + tMat.col2.x * this.m_coreV2.y); var v2Y = xf.position.y + (tMat.col1.y * this.m_coreV2.x + tMat.col2.y * this.m_coreV2.y); if ((v1X * dX + v1Y * dY) > (v2X * dX + v2Y * dY)) { return Box2D.Common.Math.b2Vec2.Get(v1X, v1Y); } else { return Box2D.Common.Math.b2Vec2.Get(v2X, v2Y); } }; /** * @param {Box2D.Collision.Shapes.b2EdgeShape} edge * @param {!Box2D.Common.Math.b2Vec2} core * @param {!Box2D.Common.Math.b2Vec2} cornerDir * @param {boolean} convex */ Box2D.Collision.Shapes.b2EdgeShape.prototype.SetPrevEdge = function(edge, core, cornerDir, convex) { this.m_prevEdge = edge; this.m_coreV1 = core; this.m_cornerDir1 = cornerDir; this.m_cornerConvex1 = convex; }; /** * @param {Box2D.Collision.Shapes.b2EdgeShape} edge * @param {!Box2D.Common.Math.b2Vec2} core * @param {!Box2D.Common.Math.b2Vec2} cornerDir * @param {boolean} convex */ Box2D.Collision.Shapes.b2EdgeShape.prototype.SetNextEdge = function(edge, core, cornerDir, convex) { this.m_nextEdge = edge; this.m_coreV2 = core; this.m_cornerDir2 = cornerDir; this.m_cornerConvex2 = convex; }; /** * @const * @type {string} */ Box2D.Collision.Shapes.b2EdgeShape.NAME = 'b2EdgeShape'; /** * @constructor */ Box2D.Collision.Shapes.b2MassData = function() { /** @type {number} */ this.mass = 0; /** @type {!Box2D.Common.Math.b2Vec2} */ this.center = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {number} */ this.I = 0; }; /** * @constructor * @extends {Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2PolygonShape = function() { Box2D.Collision.Shapes.b2Shape.call(this); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_centroid = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {Array.<!Box2D.Common.Math.b2Vec2>} */ this.m_vertices = []; /** @type {Array.<!Box2D.Common.Math.b2Vec2>} */ this.m_normals = []; }; c2inherit(Box2D.Collision.Shapes.b2PolygonShape, Box2D.Collision.Shapes.b2Shape); /** * @return {string} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetTypeName = function() { return Box2D.Collision.Shapes.b2PolygonShape.NAME; }; /** * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.Copy = function() { var s = new Box2D.Collision.Shapes.b2PolygonShape(); s.Set(this); return s; }; /** * @param {!Box2D.Collision.Shapes.b2Shape} other */ Box2D.Collision.Shapes.b2PolygonShape.prototype.Set = function(other) { Box2D.Collision.Shapes.b2Shape.prototype.Set.call(this, other); if (other instanceof Box2D.Collision.Shapes.b2PolygonShape) { this.m_centroid.SetV(other.m_centroid); this.m_vertexCount = other.m_vertexCount; this.Reserve(this.m_vertexCount); for (var i = 0; i < this.m_vertexCount; i++) { this.m_vertices[i].SetV(other.m_vertices[i]); this.m_normals[i].SetV(other.m_normals[i]); } } }; /** * @param {Array.<Box2D.Common.Math.b2Vec2>} vertices */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsArray = function(vertices) { this.SetAsVector(vertices); }; /** * @param {Array.<Box2D.Common.Math.b2Vec2>} vertices * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsArray = function(vertices) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsArray(vertices); return polygonShape; }; /** * @param {Array.<!Box2D.Common.Math.b2Vec2>} vertices */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsVector = function(vertices) { var vertexCount = vertices.length; ; this.m_vertexCount = vertexCount; this.Reserve(vertexCount); var i = 0; for (i = 0; i < this.m_vertexCount; i++) { this.m_vertices[i].SetV(vertices[i]); } for (i = 0; i < this.m_vertexCount; ++i) { var i1 = i; var i2 = i + 1 < this.m_vertexCount ? i + 1 : 0; var edge = Box2D.Common.Math.b2Math.SubtractVV(this.m_vertices[i2], this.m_vertices[i1]); ; this.m_normals[i].SetV(Box2D.Common.Math.b2Math.CrossVF(edge, 1.0)); this.m_normals[i].Normalize(); } this.m_centroid = Box2D.Collision.Shapes.b2PolygonShape.ComputeCentroid(this.m_vertices, this.m_vertexCount); }; /** * @param {Array.<Box2D.Common.Math.b2Vec2>} vertices * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsVector = function(vertices) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsVector(vertices); return polygonShape; }; /** * @param {number} hx * @param {number} hy */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsBox = function(hx, hy) { this.m_vertexCount = 4; this.Reserve(4); this.m_vertices[0].Set((-hx), (-hy)); this.m_vertices[1].Set(hx, (-hy)); this.m_vertices[2].Set(hx, hy); this.m_vertices[3].Set((-hx), hy); this.m_normals[0].Set(0.0, (-1.0)); this.m_normals[1].Set(1.0, 0.0); this.m_normals[2].Set(0.0, 1.0); this.m_normals[3].Set((-1.0), 0.0); this.m_centroid.SetZero(); }; /** * @param {number} hx * @param {number} hy * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsBox = function(hx, hy) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsBox(hx, hy); return polygonShape; }; /** * @param {number} hx * @param {number} hy * @param {!Box2D.Common.Math.b2Vec2} center * @param {number} angle */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsOrientedBox = function(hx, hy, center, angle) { this.m_vertexCount = 4; this.Reserve(4); this.m_vertices[0].Set((-hx), (-hy)); this.m_vertices[1].Set(hx, (-hy)); this.m_vertices[2].Set(hx, hy); this.m_vertices[3].Set((-hx), hy); this.m_normals[0].Set(0.0, (-1.0)); this.m_normals[1].Set(1.0, 0.0); this.m_normals[2].Set(0.0, 1.0); this.m_normals[3].Set((-1.0), 0.0); this.m_centroid = center; var mat = new Box2D.Common.Math.b2Mat22(); mat.Set(angle); var xf = new Box2D.Common.Math.b2Transform(center, mat); for (var i = 0; i < this.m_vertexCount; ++i) { this.m_vertices[i] = Box2D.Common.Math.b2Math.MulX(xf, this.m_vertices[i]); this.m_normals[i] = Box2D.Common.Math.b2Math.MulMV(xf.R, this.m_normals[i]); } }; /** * @param {number} hx * @param {number} hy * @param {!Box2D.Common.Math.b2Vec2} center * @param {number} angle * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsOrientedBox = function(hx, hy, center, angle) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsOrientedBox(hx, hy, center, angle); return polygonShape; }; /** * @param {!Box2D.Common.Math.b2Vec2} v1 * @param {!Box2D.Common.Math.b2Vec2} v2 */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsEdge = function(v1, v2) { this.m_vertexCount = 2; this.Reserve(2); this.m_vertices[0].SetV(v1); this.m_vertices[1].SetV(v2); this.m_centroid.x = 0.5 * (v1.x + v2.x); this.m_centroid.y = 0.5 * (v1.y + v2.y); this.m_normals[0] = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(v2, v1), 1.0); this.m_normals[0].Normalize(); this.m_normals[1].x = (-this.m_normals[0].x); this.m_normals[1].y = (-this.m_normals[0].y); }; /** * @param {!Box2D.Common.Math.b2Vec2} v1 * @param {!Box2D.Common.Math.b2Vec2} v2 * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsEdge = function(v1, v2) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsEdge(v1, v2); return polygonShape; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.TestPoint = function(xf, p) { var tVec; var tMat = xf.R; var tX = p.x - xf.position.x; var tY = p.y - xf.position.y; var pLocalX = (tX * tMat.col1.x + tY * tMat.col1.y); var pLocalY = (tX * tMat.col2.x + tY * tMat.col2.y); for (var i = 0; i < this.m_vertexCount; ++i) { tVec = this.m_vertices[i]; tX = pLocalX - tVec.x; tY = pLocalY - tVec.y; tVec = this.m_normals[i]; var dot = (tVec.x * tX + tVec.y * tY); if (dot > 0.0) { return false; } } return true; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.RayCast = function(output, input, transform) { var lower = 0.0; var upper = input.maxFraction; var tX = 0; var tY = 0; var tMat; var tVec; tX = input.p1.x - transform.position.x; tY = input.p1.y - transform.position.y; tMat = transform.R; var p1X = (tX * tMat.col1.x + tY * tMat.col1.y); var p1Y = (tX * tMat.col2.x + tY * tMat.col2.y); tX = input.p2.x - transform.position.x; tY = input.p2.y - transform.position.y; tMat = transform.R; var p2X = (tX * tMat.col1.x + tY * tMat.col1.y); var p2Y = (tX * tMat.col2.x + tY * tMat.col2.y); var dX = p2X - p1X; var dY = p2Y - p1Y; var index = -1; for (var i = 0; i < this.m_vertexCount; ++i) { tVec = this.m_vertices[i]; tX = tVec.x - p1X; tY = tVec.y - p1Y; tVec = this.m_normals[i]; var numerator = (tVec.x * tX + tVec.y * tY); var denominator = (tVec.x * dX + tVec.y * dY); if (denominator == 0.0) { if (numerator < 0.0) { return false; } } else { if (denominator < 0.0 && numerator < lower * denominator) { lower = numerator / denominator; index = i; } else if (denominator > 0.0 && numerator < upper * denominator) { upper = numerator / denominator; } } if (upper < lower - Number.MIN_VALUE) { return false; } } if (index >= 0) { output.fraction = lower; tMat = transform.R; tVec = this.m_normals[index]; output.normal.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); output.normal.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); return true; } return false; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} xf */ Box2D.Collision.Shapes.b2PolygonShape.prototype.ComputeAABB = function(aabb, xf) { var tMat = xf.R; var tVec = this.m_vertices[0]; var lowerX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var lowerY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); var upperX = lowerX; var upperY = lowerY; for (var i = 1; i < this.m_vertexCount; ++i) { tVec = this.m_vertices[i]; var vX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var vY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); lowerX = lowerX < vX ? lowerX : vX; lowerY = lowerY < vY ? lowerY : vY; upperX = upperX > vX ? upperX : vX; upperY = upperY > vY ? upperY : vY; } aabb.lowerBound_.x = lowerX - this.m_radius; aabb.lowerBound_.y = lowerY - this.m_radius; aabb.upperBound_.x = upperX + this.m_radius; aabb.upperBound_.y = upperY + this.m_radius; }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2PolygonShape.prototype.ComputeMass = function(massData, density) { if (this.m_vertexCount == 2) { massData.center.x = 0.5 * (this.m_vertices[0].x + this.m_vertices[1].x); massData.center.y = 0.5 * (this.m_vertices[0].y + this.m_vertices[1].y); massData.mass = 0.0; massData.I = 0.0; return; } var centerX = 0.0; var centerY = 0.0; var area = 0.0; var I = 0.0; var p1X = 0.0; var p1Y = 0.0; var k_inv3 = 1.0 / 3.0; for (var i = 0; i < this.m_vertexCount; ++i) { var p2 = this.m_vertices[i]; var p3 = i + 1 < this.m_vertexCount ? this.m_vertices[i + 1] : this.m_vertices[0]; var e1X = p2.x - p1X; var e1Y = p2.y - p1Y; var e2X = p3.x - p1X; var e2Y = p3.y - p1Y; var D = e1X * e2Y - e1Y * e2X; var triangleArea = 0.5 * D; area += triangleArea; centerX += triangleArea * k_inv3 * (p1X + p2.x + p3.x); centerY += triangleArea * k_inv3 * (p1Y + p2.y + p3.y); var px = p1X; var py = p1Y; var ex1 = e1X; var ey1 = e1Y; var ex2 = e2X; var ey2 = e2Y; var intx2 = k_inv3 * (0.25 * (ex1 * ex1 + ex2 * ex1 + ex2 * ex2) + (px * ex1 + px * ex2)) + 0.5 * px * px; var inty2 = k_inv3 * (0.25 * (ey1 * ey1 + ey2 * ey1 + ey2 * ey2) + (py * ey1 + py * ey2)) + 0.5 * py * py; I += D * (intx2 + inty2); } massData.mass = density * area; centerX *= 1.0 / area; centerY *= 1.0 / area; massData.center.Set(centerX, centerY); massData.I = density * I; }; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.ComputeSubmergedArea = function(normal, offset, xf, c) { var normalL = Box2D.Common.Math.b2Math.MulTMV(xf.R, normal); var offsetL = offset - Box2D.Common.Math.b2Math.Dot(normal, xf.position); var depths = []; var diveCount = 0; var intoIndex = -1; var outoIndex = -1; var lastSubmerged = false; var i = 0; for (i = 0; i < this.m_vertexCount; ++i) { depths[i] = Box2D.Common.Math.b2Math.Dot(normalL, this.m_vertices[i]) - offsetL; var isSubmerged = depths[i] < (-Number.MIN_VALUE); if (i > 0) { if (isSubmerged) { if (!lastSubmerged) { intoIndex = i - 1; diveCount++; } } else { if (lastSubmerged) { outoIndex = i - 1; diveCount++; } } } lastSubmerged = isSubmerged; } switch (diveCount) { case 0: if (lastSubmerged) { var md = new Box2D.Collision.Shapes.b2MassData(); this.ComputeMass(md, 1); c.SetV(Box2D.Common.Math.b2Math.MulX(xf, md.center)); return md.mass; } else { return 0; } break; case 1: if (intoIndex == (-1)) { intoIndex = this.m_vertexCount - 1; } else { outoIndex = this.m_vertexCount - 1; } break; } var intoIndex2 = ((intoIndex + 1) % this.m_vertexCount); var outoIndex2 = ((outoIndex + 1) % this.m_vertexCount); var intoLamdda = (0 - depths[intoIndex]) / (depths[intoIndex2] - depths[intoIndex]); var outoLamdda = (0 - depths[outoIndex]) / (depths[outoIndex2] - depths[outoIndex]); var intoVec = Box2D.Common.Math.b2Vec2.Get(this.m_vertices[intoIndex].x * (1 - intoLamdda) + this.m_vertices[intoIndex2].x * intoLamdda, this.m_vertices[intoIndex].y * (1 - intoLamdda) + this.m_vertices[intoIndex2].y * intoLamdda); var outoVec = Box2D.Common.Math.b2Vec2.Get(this.m_vertices[outoIndex].x * (1 - outoLamdda) + this.m_vertices[outoIndex2].x * outoLamdda, this.m_vertices[outoIndex].y * (1 - outoLamdda) + this.m_vertices[outoIndex2].y * outoLamdda); var area = 0; var center = Box2D.Common.Math.b2Vec2.Get(0, 0); var p2 = this.m_vertices[intoIndex2]; var p3; i = intoIndex2; while (i != outoIndex2) { i = (i + 1) % this.m_vertexCount; if (i == outoIndex2) p3 = outoVec; else p3 = this.m_vertices[i]; var triangleArea = 0.5 * ((p2.x - intoVec.x) * (p3.y - intoVec.y) - (p2.y - intoVec.y) * (p3.x - intoVec.x)); area += triangleArea; center.x += triangleArea * (intoVec.x + p2.x + p3.x) / 3; center.y += triangleArea * (intoVec.y + p2.y + p3.y) / 3; p2 = p3; } center.Multiply(1 / area); c.SetV(Box2D.Common.Math.b2Math.MulX(xf, center)); return area; }; /** * @param {!Box2D.Collision.b2DistanceProxy} proxy */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetDistanceProxy = function(proxy) { proxy.m_vertices = this.m_vertices; proxy.m_count = this.m_vertexCount; proxy.m_radius = this.m_radius; }; /** * @return {number} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetVertexCount = function() { return this.m_vertexCount; }; /** * @return {Array.<!Box2D.Common.Math.b2Vec2>} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetVertices = function() { return this.m_vertices; }; /** * @return {Array.<!Box2D.Common.Math.b2Vec2>} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetNormals = function() { return this.m_normals; }; /** * @param {!Box2D.Common.Math.b2Vec2} d * return {number} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetSupport = function(d) { var bestIndex = 0; var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y; for (var i = 1; i < this.m_vertexCount; ++i) { var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y; if (value > bestValue) { bestIndex = i; bestValue = value; } } return bestIndex; }; /** * @param {!Box2D.Common.Math.b2Vec2} d * return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetSupportVertex = function(d) { var bestIndex = 0; var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y; for (var i = 1; i < this.m_vertexCount; ++i) { var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y; if (value > bestValue) { bestIndex = i; bestValue = value; } } return this.m_vertices[bestIndex]; }; /** * @param {number} count */ Box2D.Collision.Shapes.b2PolygonShape.prototype.Reserve = function(count) { this.m_vertices = []; this.m_normals = []; for (var i = this.m_vertices.length; i < count; i++) { this.m_vertices[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_normals[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); } }; /** * @param {Array.<!Box2D.Common.Math.b2Vec2>} vs * @param {number} count * return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2PolygonShape.ComputeCentroid = function(vs, count) { var c = Box2D.Common.Math.b2Vec2.Get(0, 0); var area = 0.0; var p1X = 0.0; var p1Y = 0.0; var inv3 = 1.0 / 3.0; for (var i = 0; i < count; ++i) { var p2 = vs[i]; var p3 = i + 1 < count ? vs[i + 1] : vs[0]; var e1X = p2.x - p1X; var e1Y = p2.y - p1Y; var e2X = p3.x - p1X; var e2Y = p3.y - p1Y; var D = (e1X * e2Y - e1Y * e2X); var triangleArea = 0.5 * D; area += triangleArea; c.x += triangleArea * inv3 * (p1X + p2.x + p3.x); c.y += triangleArea * inv3 * (p1Y + p2.y + p3.y); } c.x *= 1.0 / area; c.y *= 1.0 / area; return c; }; /** @type {!Box2D.Common.Math.b2Mat22} */ Box2D.Collision.Shapes.b2PolygonShape.s_mat = new Box2D.Common.Math.b2Mat22(); /** * @const * @type {string} */ Box2D.Collision.Shapes.b2PolygonShape.NAME = 'b2PolygonShape'; /** * @constructor */ Box2D.Collision.b2ContactID = function() { /** @type {number} */ this._key = 0; /** @type {number} */ this._referenceEdge = 0; /** @type {number} */ this._incidentEdge = 0; /** @type {number} */ this._incidentVertex = 0; }; /** * @return {number} */ Box2D.Collision.b2ContactID.prototype.GetKey = function () { return this._key; }; /** * @param {number} key */ Box2D.Collision.b2ContactID.prototype.SetKey = function (key) { this._key = key; this._referenceEdge = this._key & 0x000000ff; this._incidentEdge = ((this._key & 0x0000ff00) >> 8) & 0x000000ff; this._incidentVertex = ((this._key & 0x00ff0000) >> 16) & 0x000000ff; this._flip = ((this._key & 0xff000000) >> 24) & 0x000000ff; }; /** * @param {!Box2D.Collision.b2ContactID} id */ Box2D.Collision.b2ContactID.prototype.Set = function (id) { this.SetKey(id._key); }; /** * @param {number} edge */ Box2D.Collision.b2ContactID.prototype.SetReferenceEdge = function(edge) { this._referenceEdge = edge; this._key = (this._key & 0xffffff00) | (this._referenceEdge & 0x000000ff); }; /** * @param {number} edge */ Box2D.Collision.b2ContactID.prototype.SetIncidentEdge = function(edge) { this._incidentEdge = edge; this._key = (this._key & 0xffff00ff) | ((this._incidentEdge << 8) & 0x0000ff00); }; /** * @param {number} vertex */ Box2D.Collision.b2ContactID.prototype.SetIncidentVertex = function(vertex) { this._incidentVertex = vertex; this._key = (this._key & 0xff00ffff) | ((this._incidentVertex << 16) & 0x00ff0000); }; /** * @param {number} flip */ Box2D.Collision.b2ContactID.prototype.SetFlip = function(flip) { this._flip = flip; this._key = (this._key & 0x00ffffff) | ((this._flip << 24) & 0xff000000); }; Box2D.Collision.b2ContactID.prototype.Copy = function () { var id = new Box2D.Collision.b2ContactID(); id.Set(this); return id; }; /** * @constructor */ Box2D.Collision.ClipVertex = function() { this.v = Box2D.Common.Math.b2Vec2.Get(0, 0); this.id = new Box2D.Collision.b2ContactID(); }; Box2D.Collision.ClipVertex.prototype.Set = function(other) { this.v.SetV(other.v); this.id.Set(other.id); }; /** * @const * @type {string} */ Box2D.Collision.IBroadPhase = 'Box2D.Collision.IBroadPhase'; /** * @private * @constructor */ Box2D.Collision.b2AABB = function() { this.lowerBound_ = Box2D.Common.Math.b2Vec2.Get(0, 0); this.upperBound_ = Box2D.Common.Math.b2Vec2.Get(0, 0); }; /** * @private * @type {Array.<!Box2D.Collision.b2AABB>} */ Box2D.Collision.b2AABB._freeCache = []; /** * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2AABB.Get = function() { if (Box2D.Collision.b2AABB._freeCache.length > 0) { var aabb = Box2D.Collision.b2AABB._freeCache.pop(); aabb.SetZero(); return aabb; } return new Box2D.Collision.b2AABB(); }; /** * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Collision.b2AABB.Free = function(aabb) { Box2D.Collision.b2AABB._freeCache.push(aabb); }; Box2D.Collision.b2AABB.prototype.SetZero = function() { this.lowerBound_.Set(0, 0); this.upperBound_.Set(0, 0); }; /** * @return {boolean} */ Box2D.Collision.b2AABB.prototype.IsValid = function() { var dX = this.upperBound_.x - this.lowerBound_.x; if (dX < 0) { return false; } var dY = this.upperBound_.y - this.lowerBound_.y; if (dY < 0) { return false; } return this.lowerBound_.IsValid() && this.upperBound_.IsValid(); }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.b2AABB.prototype.GetCenter = function() { return Box2D.Common.Math.b2Vec2.Get((this.lowerBound_.x + this.upperBound_.x) / 2, (this.lowerBound_.y + this.upperBound_.y) / 2); }; /** * @param {!Box2D.Common.Math.b2Vec2} newCenter */ Box2D.Collision.b2AABB.prototype.SetCenter = function(newCenter) { var oldCenter = this.GetCenter(); this.lowerBound_.Subtract(oldCenter); this.upperBound_.Subtract(oldCenter); this.lowerBound_.Add(newCenter); this.upperBound_.Add(newCenter); Box2D.Common.Math.b2Vec2.Free(oldCenter); }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.b2AABB.prototype.GetExtents = function() { return Box2D.Common.Math.b2Vec2.Get((this.upperBound_.x - this.lowerBound_.x) / 2, (this.upperBound_.y - this.lowerBound_.y) / 2); }; /** * @param {!Box2D.Collision.b2AABB} aabb * @return {boolean} */ Box2D.Collision.b2AABB.prototype.Contains = function(aabb) { var result = true; result = result && this.lowerBound_.x <= aabb.lowerBound_.x; result = result && this.lowerBound_.y <= aabb.lowerBound_.y; result = result && aabb.upperBound_.x <= this.upperBound_.x; result = result && aabb.upperBound_.y <= this.upperBound_.y; return result; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @return {boolean} */ Box2D.Collision.b2AABB.prototype.RayCast = function(output, input) { var tmin = (-Number.MAX_VALUE); var tmax = Number.MAX_VALUE; var dX = input.p2.x - input.p1.x; var absDX = Math.abs(dX); if (absDX < Number.MIN_VALUE) { if (input.p1.x < this.lowerBound_.x || this.upperBound_.x < input.p1.x) { return false; } } else { var inv_d = 1.0 / dX; var t1 = (this.lowerBound_.x - input.p1.x) * inv_d; var t2 = (this.upperBound_.x - input.p1.x) * inv_d; var s = (-1.0); if (t1 > t2) { var t3 = t1; t1 = t2; t2 = t3; s = 1.0; } if (t1 > tmin) { output.normal.x = s; output.normal.y = 0; tmin = t1; } tmax = Math.min(tmax, t2); if (tmin > tmax) return false; } var dY = input.p2.y - input.p1.y; var absDY = Math.abs(dY); if (absDY < Number.MIN_VALUE) { if (input.p1.y < this.lowerBound_.y || this.upperBound_.y < input.p1.y) { return false; } } else { var inv_d = 1.0 / dY; var t1 = (this.lowerBound_.y - input.p1.y) * inv_d; var t2 = (this.upperBound_.y - input.p1.y) * inv_d; var s = (-1.0); if (t1 > t2) { var t3 = t1; t1 = t2; t2 = t3; s = 1.0; } if (t1 > tmin) { output.normal.y = s; output.normal.x = 0; tmin = t1; } tmax = Math.min(tmax, t2); if (tmin > tmax) { return false; } } output.fraction = tmin; return true; }; /** * @param {!Box2D.Collision.b2AABB} other * @return {boolean} */ Box2D.Collision.b2AABB.prototype.TestOverlap = function(other) { if ( other.lowerBound_.x - this.upperBound_.x > 0 ) { return false; } if ( other.lowerBound_.y - this.upperBound_.y > 0 ) { return false; } if ( this.lowerBound_.x - other.upperBound_.x > 0 ) { return false; } if ( this.lowerBound_.y - other.upperBound_.y > 0 ) { return false; } return true; }; /** * @param {!Box2D.Collision.b2AABB} aabb1 * @param {!Box2D.Collision.b2AABB} aabb2 * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2AABB.Combine = function(aabb1, aabb2) { var aabb = Box2D.Collision.b2AABB.Get(); aabb.Combine(aabb1, aabb2); return aabb; }; /** * @param {!Box2D.Collision.b2AABB} aabb1 * @param {!Box2D.Collision.b2AABB} aabb2 */ Box2D.Collision.b2AABB.prototype.Combine = function(aabb1, aabb2) { this.lowerBound_.x = Math.min(aabb1.lowerBound_.x, aabb2.lowerBound_.x); this.lowerBound_.y = Math.min(aabb1.lowerBound_.y, aabb2.lowerBound_.y); this.upperBound_.x = Math.max(aabb1.upperBound_.x, aabb2.upperBound_.x); this.upperBound_.y = Math.max(aabb1.upperBound_.y, aabb2.upperBound_.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} vOut * @param {!Box2D.Common.Math.b2Vec2} vIn * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset */ Box2D.Collision.b2Collision.ClipSegmentToLine = function(vOut, vIn, normal, offset) { var numOut = 0; var vIn0 = vIn[0].v; var vIn1 = vIn[1].v; var distance0 = normal.x * vIn0.x + normal.y * vIn0.y - offset; var distance1 = normal.x * vIn1.x + normal.y * vIn1.y - offset; if (distance0 <= 0.0) { vOut[numOut++].Set(vIn[0]); } if (distance1 <= 0.0) { vOut[numOut++].Set(vIn[1]); } if (distance0 * distance1 < 0.0) { var interp = distance0 / (distance0 - distance1); var tVec = vOut[numOut].v; tVec.x = vIn0.x + interp * (vIn1.x - vIn0.x); tVec.y = vIn0.y + interp * (vIn1.y - vIn0.y); if (distance0 > 0.0) { vOut[numOut].id = vIn[0].id; } else { vOut[numOut].id = vIn[1].id; } numOut++; } return numOut; }; /** * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly1 * @param {!Box2D.Common.Math.b2Transform} xf1 * @param {number} edge1 * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly2 * @param {!Box2D.Common.Math.b2Transform} xf1 * @return {number} */ Box2D.Collision.b2Collision.EdgeSeparation = function(poly1, xf1, edge1, poly2, xf2) { var normal1WorldX = (xf1.R.col1.x * poly1.m_normals[edge1].x + xf1.R.col2.x * poly1.m_normals[edge1].y); var normal1WorldY = (xf1.R.col1.y * poly1.m_normals[edge1].x + xf1.R.col2.y * poly1.m_normals[edge1].y); var normal1X = (xf2.R.col1.x * normal1WorldX + xf2.R.col1.y * normal1WorldY); var normal1Y = (xf2.R.col2.x * normal1WorldX + xf2.R.col2.y * normal1WorldY); var index = 0; var minDot = Number.MAX_VALUE; for (var i = 0; i < poly2.m_vertexCount; i++) { var dot = poly2.m_vertices[i].x * normal1X + poly2.m_vertices[i].y * normal1Y; if (dot < minDot) { minDot = dot; index = i; } } var v1X = xf1.position.x + (xf1.R.col1.x * poly1.m_vertices[edge1].x + xf1.R.col2.x * poly1.m_vertices[edge1].y); var v1Y = xf1.position.y + (xf1.R.col1.y * poly1.m_vertices[edge1].x + xf1.R.col2.y * poly1.m_vertices[edge1].y); var v2X = xf2.position.x + (xf2.R.col1.x * poly2.m_vertices[index].x + xf2.R.col2.x * poly2.m_vertices[index].y); var v2Y = xf2.position.y + (xf2.R.col1.y * poly2.m_vertices[index].x + xf2.R.col2.y * poly2.m_vertices[index].y); var separation = (v2X - v1X) * normal1WorldX + (v2Y - v1Y) * normal1WorldY; return separation; }; /** * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly1 * @param {!Box2D.Common.Math.b2Transform} xf1 * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly2 * @param {!Box2D.Common.Math.b2Transform} xf1 * @return {{bestEdge: number, separation: number}} */ Box2D.Collision.b2Collision.FindMaxSeparation = function(poly1, xf1, poly2, xf2) { var dX = xf2.position.x + (xf2.R.col1.x * poly2.m_centroid.x + xf2.R.col2.x * poly2.m_centroid.y); var dY = xf2.position.y + (xf2.R.col1.y * poly2.m_centroid.x + xf2.R.col2.y * poly2.m_centroid.y); dX -= xf1.position.x + (xf1.R.col1.x * poly1.m_centroid.x + xf1.R.col2.x * poly1.m_centroid.y); dY -= xf1.position.y + (xf1.R.col1.y * poly1.m_centroid.x + xf1.R.col2.y * poly1.m_centroid.y); var dLocal1X = (dX * xf1.R.col1.x + dY * xf1.R.col1.y); var dLocal1Y = (dX * xf1.R.col2.x + dY * xf1.R.col2.y); var edge = 0; var maxDot = (-Number.MAX_VALUE); for (var i = 0; i < poly1.m_vertexCount; ++i) { var dot = (poly1.m_normals[i].x * dLocal1X + poly1.m_normals[i].y * dLocal1Y); if (dot > maxDot) { maxDot = dot; edge = i; } } var s = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2); var prevEdge = edge - 1; if (prevEdge < 0) { prevEdge = poly1.m_vertexCount - 1; } var sPrev = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2); var nextEdge = edge + 1; if (nextEdge >= poly1.m_vertexCount) { nextEdge = 0; } var sNext = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2); var bestEdge = 0; var bestSeparation = 0; if (sPrev > s && sPrev > sNext) { bestEdge = prevEdge; bestSeparation = sPrev; while (true) { edge = bestEdge - 1; if (edge < 0) { edge = poly1.m_vertexCount - 1; } s = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > bestSeparation) { bestEdge = edge; bestSeparation = s; } else { break; } } } else if (sNext > s) { bestEdge = nextEdge; bestSeparation = sNext; while (true) { edge = bestEdge + 1; if (edge >= poly1.m_vertexCount) { edge = 0; } s = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > bestSeparation) { bestEdge = edge; bestSeparation = s; } else { break; } } } else { bestEdge = edge; bestSeparation = s; } return {bestEdge: bestEdge, separation: bestSeparation}; }; Box2D.Collision.b2Collision.FindIncidentEdge = function(c, poly1, xf1, edge1, poly2, xf2) { if (edge1 === undefined) edge1 = 0; var normal1X = (xf1.R.col1.x * poly1.m_normals[edge1].x + xf1.R.col2.x * poly1.m_normals[edge1].y); var normal1Y = (xf1.R.col1.y * poly1.m_normals[edge1].x + xf1.R.col2.y * poly1.m_normals[edge1].y); var tX = (xf2.R.col1.x * normal1X + xf2.R.col1.y * normal1Y); normal1Y = (xf2.R.col2.x * normal1X + xf2.R.col2.y * normal1Y); normal1X = tX; var i1 = 0; var minDot = Number.MAX_VALUE; for (var i = 0; i < poly2.m_vertexCount; i++) { var dot = (normal1X * poly2.m_normals[i].x + normal1Y * poly2.m_normals[i].y); if (dot < minDot) { minDot = dot; i1 = i; } } var i2 = i1 + 1; if (i2 >= poly2.m_vertexCount) { i2 = 0; } c[0].v.x = xf2.position.x + (xf2.R.col1.x * poly2.m_vertices[i1].x + xf2.R.col2.x * poly2.m_vertices[i1].y); c[0].v.y = xf2.position.y + (xf2.R.col1.y * poly2.m_vertices[i1].x + xf2.R.col2.y * poly2.m_vertices[i1].y); c[0].id.SetReferenceEdge(edge1); c[0].id.SetIncidentEdge(i1); c[0].id.SetIncidentVertex(0); c[1].v.x = xf2.position.x + (xf2.R.col1.x * poly2.m_vertices[i2].x + xf2.R.col2.x * poly2.m_vertices[i2].y); c[1].v.y = xf2.position.y + (xf2.R.col1.y * poly2.m_vertices[i2].x + xf2.R.col2.y * poly2.m_vertices[i2].y); c[1].id.SetReferenceEdge(edge1); c[1].id.SetIncidentEdge(i2); c[1].id.SetIncidentVertex(1); }; Box2D.Collision.b2Collision.MakeClipPointVector = function() { return [new Box2D.Collision.ClipVertex(), new Box2D.Collision.ClipVertex()]; }; Box2D.Collision.b2Collision.CollidePolygons = function(manifold, polyA, xfA, polyB, xfB) { manifold.m_pointCount = 0; var totalRadius = polyA.m_radius + polyB.m_radius; var separationEdgeA = Box2D.Collision.b2Collision.FindMaxSeparation(polyA, xfA, polyB, xfB); var edge1 = separationEdgeA.bestEdge; if (separationEdgeA.separation > totalRadius) { return; } var separationEdgeB = Box2D.Collision.b2Collision.FindMaxSeparation(polyB, xfB, polyA, xfA); if (separationEdgeB.separation > totalRadius) { return; } var poly1 = polyA; var poly2 = polyB; var xf1 = xfA; var xf2 = xfB; var flip = 0; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; if (separationEdgeB.separation > 0.98 /* k_relativeTol */ * separationEdgeA.separation + 0.001 /* k_absoluteTol */ ) { poly1 = polyB; poly2 = polyA; xf1 = xfB; xf2 = xfA; edge1 = separationEdgeB.bestEdge; manifold.m_type = Box2D.Collision.b2Manifold.e_faceB; flip = 1; } var incidentEdge = Box2D.Collision.b2Collision.s_incidentEdge; Box2D.Collision.b2Collision.FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); var local_v11 = poly1.m_vertices[edge1]; var local_v12; if (edge1 + 1 < poly1.m_vertexCount) { local_v12 = poly1.m_vertices[edge1 + 1]; } else { local_v12 = poly1.m_vertices[0]; } Box2D.Collision.b2Collision.s_localTangent.Set(local_v12.x - local_v11.x, local_v12.y - local_v11.y); Box2D.Collision.b2Collision.s_localTangent.Normalize(); Box2D.Collision.b2Collision.s_localNormal.x = Box2D.Collision.b2Collision.s_localTangent.y; Box2D.Collision.b2Collision.s_localNormal.y = (-Box2D.Collision.b2Collision.s_localTangent.x); Box2D.Collision.b2Collision.s_planePoint.Set(0.5 * (local_v11.x + local_v12.x), 0.5 * (local_v11.y + local_v12.y)); Box2D.Collision.b2Collision.s_tangent.x = (xf1.R.col1.x * Box2D.Collision.b2Collision.s_localTangent.x + xf1.R.col2.x * Box2D.Collision.b2Collision.s_localTangent.y); Box2D.Collision.b2Collision.s_tangent.y = (xf1.R.col1.y * Box2D.Collision.b2Collision.s_localTangent.x + xf1.R.col2.y * Box2D.Collision.b2Collision.s_localTangent.y); Box2D.Collision.b2Collision.s_tangent2.x = (-Box2D.Collision.b2Collision.s_tangent.x); Box2D.Collision.b2Collision.s_tangent2.y = (-Box2D.Collision.b2Collision.s_tangent.y); Box2D.Collision.b2Collision.s_normal.x = Box2D.Collision.b2Collision.s_tangent.y; Box2D.Collision.b2Collision.s_normal.y = (-Box2D.Collision.b2Collision.s_tangent.x); Box2D.Collision.b2Collision.s_v11.x = xf1.position.x + (xf1.R.col1.x * local_v11.x + xf1.R.col2.x * local_v11.y); Box2D.Collision.b2Collision.s_v11.y = xf1.position.y + (xf1.R.col1.y * local_v11.x + xf1.R.col2.y * local_v11.y); Box2D.Collision.b2Collision.s_v12.x = xf1.position.x + (xf1.R.col1.x * local_v12.x + xf1.R.col2.x * local_v12.y); Box2D.Collision.b2Collision.s_v12.y = xf1.position.y + (xf1.R.col1.y * local_v12.x + xf1.R.col2.y * local_v12.y); var sideOffset1 = (-Box2D.Collision.b2Collision.s_tangent.x * Box2D.Collision.b2Collision.s_v11.x) - Box2D.Collision.b2Collision.s_tangent.y * Box2D.Collision.b2Collision.s_v11.y + totalRadius; if (Box2D.Collision.b2Collision.ClipSegmentToLine(Box2D.Collision.b2Collision.s_clipPoints1, incidentEdge, Box2D.Collision.b2Collision.s_tangent2, sideOffset1) < 2) { return; } var sideOffset2 = Box2D.Collision.b2Collision.s_tangent.x * Box2D.Collision.b2Collision.s_v12.x + Box2D.Collision.b2Collision.s_tangent.y * Box2D.Collision.b2Collision.s_v12.y + totalRadius; if (Box2D.Collision.b2Collision.ClipSegmentToLine(Box2D.Collision.b2Collision.s_clipPoints2, Box2D.Collision.b2Collision.s_clipPoints1, Box2D.Collision.b2Collision.s_tangent, sideOffset2) < 2) { return; } manifold.m_localPlaneNormal.SetV(Box2D.Collision.b2Collision.s_localNormal); manifold.m_localPoint.SetV(Box2D.Collision.b2Collision.s_planePoint); var frontOffset = Box2D.Collision.b2Collision.s_normal.x * Box2D.Collision.b2Collision.s_v11.x + Box2D.Collision.b2Collision.s_normal.y * Box2D.Collision.b2Collision.s_v11.y; var pointCount = 0; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; ++i) { var separation = Box2D.Collision.b2Collision.s_normal.x * Box2D.Collision.b2Collision.s_clipPoints2[i].v.x + Box2D.Collision.b2Collision.s_normal.y * Box2D.Collision.b2Collision.s_clipPoints2[i].v.y - frontOffset; if (separation <= totalRadius) { var tX = Box2D.Collision.b2Collision.s_clipPoints2[i].v.x - xf2.position.x; var tY = Box2D.Collision.b2Collision.s_clipPoints2[i].v.y - xf2.position.y; manifold.m_points[pointCount].m_localPoint.x = (tX * xf2.R.col1.x + tY * xf2.R.col1.y); manifold.m_points[pointCount].m_localPoint.y = (tX * xf2.R.col2.x + tY * xf2.R.col2.y); manifold.m_points[pointCount].m_id.Set(Box2D.Collision.b2Collision.s_clipPoints2[i].id); manifold.m_points[pointCount].m_id.SetFlip(flip); pointCount++; } } manifold.m_pointCount = pointCount; }; Box2D.Collision.b2Collision.CollideCircles = function(manifold, circle1, xf1, circle2, xf2) { manifold.m_pointCount = 0; var p1X = xf1.position.x + (xf1.R.col1.x * circle1.m_p.x + xf1.R.col2.x * circle1.m_p.y); var p1Y = xf1.position.y + (xf1.R.col1.y * circle1.m_p.x + xf1.R.col2.y * circle1.m_p.y); var p2X = xf2.position.x + (xf2.R.col1.x * circle2.m_p.x + xf2.R.col2.x * circle2.m_p.y); var p2Y = xf2.position.y + (xf2.R.col1.y * circle2.m_p.x + xf2.R.col2.y * circle2.m_p.y); var dX = p2X - p1X; var dY = p2Y - p1Y; var distSqr = dX * dX + dY * dY; var radius = circle1.m_radius + circle2.m_radius; if (distSqr > radius * radius) { return; } manifold.m_type = Box2D.Collision.b2Manifold.e_circles; manifold.m_localPoint.SetV(circle1.m_p); manifold.m_localPlaneNormal.SetZero(); manifold.m_pointCount = 1; manifold.m_points[0].m_localPoint.SetV(circle2.m_p); manifold.m_points[0].m_id.SetKey(0); }; Box2D.Collision.b2Collision.CollidePolygonAndCircle = function(manifold, polygon, xf1, circle, xf2) { manifold.m_pointCount = 0; var dX = xf2.position.x + (xf2.R.col1.x * circle.m_p.x + xf2.R.col2.x * circle.m_p.y) - xf1.position.x; var dY = xf2.position.y + (xf2.R.col1.y * circle.m_p.x + xf2.R.col2.y * circle.m_p.y) - xf1.position.y; var cLocalX = (dX * xf1.R.col1.x + dY * xf1.R.col1.y); var cLocalY = (dX * xf1.R.col2.x + dY * xf1.R.col2.y); var normalIndex = 0; var separation = (-Number.MAX_VALUE); var radius = polygon.m_radius + circle.m_radius; for (var i = 0; i < polygon.m_vertexCount; ++i) { var s = polygon.m_normals[i].x * (cLocalX - polygon.m_vertices[i].x) + polygon.m_normals[i].y * (cLocalY - polygon.m_vertices[i].y); if (s > radius) { return; } if (s > separation) { separation = s; normalIndex = i; } } var vertIndex2 = normalIndex + 1; if (vertIndex2 >= polygon.m_vertexCount) { vertIndex2 = 0; } var v1 = polygon.m_vertices[normalIndex]; var v2 = polygon.m_vertices[vertIndex2]; if (separation < Number.MIN_VALUE) { manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.SetV(polygon.m_normals[normalIndex]); manifold.m_localPoint.x = 0.5 * (v1.x + v2.x); manifold.m_localPoint.y = 0.5 * (v1.y + v2.y); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } else { var u1 = (cLocalX - v1.x) * (v2.x - v1.x) + (cLocalY - v1.y) * (v2.y - v1.y); if (u1 <= 0.0) { if ((cLocalX - v1.x) * (cLocalX - v1.x) + (cLocalY - v1.y) * (cLocalY - v1.y) > radius * radius) return; manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.x = cLocalX - v1.x; manifold.m_localPlaneNormal.y = cLocalY - v1.y; manifold.m_localPlaneNormal.Normalize(); manifold.m_localPoint.SetV(v1); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } else { var u2 = (cLocalX - v2.x) * (v1.x - v2.x) + (cLocalY - v2.y) * (v1.y - v2.y); if (u2 <= 0) { if ((cLocalX - v2.x) * (cLocalX - v2.x) + (cLocalY - v2.y) * (cLocalY - v2.y) > radius * radius) return; manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.x = cLocalX - v2.x; manifold.m_localPlaneNormal.y = cLocalY - v2.y; manifold.m_localPlaneNormal.Normalize(); manifold.m_localPoint.SetV(v2); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } else { var faceCenterX = 0.5 * (v1.x + v2.x); var faceCenterY = 0.5 * (v1.y + v2.y); separation = (cLocalX - faceCenterX) * polygon.m_normals[normalIndex].x + (cLocalY - faceCenterY) * polygon.m_normals[normalIndex].y; if (separation > radius) return; manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.x = polygon.m_normals[normalIndex].x; manifold.m_localPlaneNormal.y = polygon.m_normals[normalIndex].y; manifold.m_localPlaneNormal.Normalize(); manifold.m_localPoint.Set(faceCenterX, faceCenterY); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } } } }; Box2D.Collision.b2Collision.TestOverlap = function(a, b) { if (b.lowerBound_.x - a.upperBound_.x > 0) { return false; } if (b.lowerBound_.y - a.upperBound_.y > 0) { return false; } if (a.lowerBound_.x - b.upperBound_.x > 0) { return false; } if (a.lowerBound_.y - b.upperBound_.y > 0) { return false; } return true; }; /** * @constructor */ Box2D.Collision.b2ContactPoint = function() { this.position = Box2D.Common.Math.b2Vec2.Get(0, 0); this.velocity = Box2D.Common.Math.b2Vec2.Get(0, 0); this.normal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.id = new Box2D.Collision.b2ContactID(); }; /** * @param {!Box2D.Collision.b2DistanceOutput} output * @param {!Box2D.Collision.b2SimplexCache} cache * @param {!Box2D.Collision.b2DistanceInput} input */ Box2D.Collision.b2Distance.Distance = function(output, cache, input) { var s_simplex = new Box2D.Collision.b2Simplex(); s_simplex.ReadCache(cache, input.proxyA, input.transformA, input.proxyB, input.transformB); if (s_simplex.m_count < 1 || s_simplex.m_count > 3) { ; } var iter = 0; while (iter < 20) { var save = []; for (var i = 0; i < s_simplex.m_count; i++) { save[i] = {}; save[i].indexA = s_simplex.m_vertices[i].indexA; save[i].indexB = s_simplex.m_vertices[i].indexB; } if (s_simplex.m_count == 2) { s_simplex.Solve2(); } else if (s_simplex.m_count == 3) { s_simplex.Solve3(); } if (s_simplex.m_count == 3) { break; } var d = s_simplex.GetSearchDirection(); if (d.LengthSquared() < Box2D.Common.b2Settings.MIN_VALUE_SQUARED) { break; } var negD = d.GetNegative(); s_simplex.m_vertices[s_simplex.m_count].indexA = input.proxyA.GetSupport(Box2D.Common.Math.b2Math.MulTMV(input.transformA.R, negD)); s_simplex.m_vertices[s_simplex.m_count].wA = Box2D.Common.Math.b2Math.MulX(input.transformA, input.proxyA.GetVertex(s_simplex.m_vertices[s_simplex.m_count].indexA)); s_simplex.m_vertices[s_simplex.m_count].indexB = input.proxyB.GetSupport(Box2D.Common.Math.b2Math.MulTMV(input.transformB.R, d)); s_simplex.m_vertices[s_simplex.m_count].wB = Box2D.Common.Math.b2Math.MulX(input.transformB, input.proxyB.GetVertex(s_simplex.m_vertices[s_simplex.m_count].indexB)); s_simplex.m_vertices[s_simplex.m_count].w = Box2D.Common.Math.b2Math.SubtractVV(s_simplex.m_vertices[s_simplex.m_count].wB, s_simplex.m_vertices[s_simplex.m_count].wA); Box2D.Common.Math.b2Vec2.Free(d); Box2D.Common.Math.b2Vec2.Free(negD); iter++; var duplicate = false; for (var i = 0; i < save.length; i++) { if (s_simplex.m_vertices[s_simplex.m_count].indexA == save[i].indexA && s_simplex.m_vertices[s_simplex.m_count].indexB == save[i].indexB) { duplicate = true; break; } } if (duplicate) { break; } s_simplex.m_count++; } s_simplex.GetWitnessPoints(output.pointA, output.pointB); output.distance = Box2D.Common.Math.b2Math.SubtractVV(output.pointA, output.pointB).Length(); s_simplex.WriteCache(cache); if (input.useRadii) { var rA = input.proxyA.m_radius; var rB = input.proxyB.m_radius; if (output.distance > rA + rB && output.distance > Number.MIN_VALUE) { output.distance -= rA + rB; var normal = Box2D.Common.Math.b2Math.SubtractVV(output.pointB, output.pointA); normal.Normalize(); output.pointA.x += rA * normal.x; output.pointA.y += rA * normal.y; output.pointB.x -= rB * normal.x; output.pointB.y -= rB * normal.y; Box2D.Common.Math.b2Vec2.Free(normal); } else { var p = Box2D.Common.Math.b2Vec2.Get(0, 0); p.x = 0.5 * (output.pointA.x + output.pointB.x); p.y = 0.5 * (output.pointA.y + output.pointB.y); output.pointA.x = output.pointB.x = p.x; output.pointA.y = output.pointB.y = p.y; output.distance = 0.0; Box2D.Common.Math.b2Vec2.Free(p); } } }; /** * @constructor */ Box2D.Collision.b2DistanceInput = function () {}; /** * @constructor */ Box2D.Collision.b2DistanceOutput = function () { /** @type {!Box2D.Common.Math.b2Vec2} */ this.pointA = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {!Box2D.Common.Math.b2Vec2} */ this.pointB = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {number} */ this.distance = 0; }; /** * @constructor */ Box2D.Collision.b2DistanceProxy = function() {}; Box2D.Collision.b2DistanceProxy.prototype.Set = function (shape) { shape.SetDistanceProxy(this); }; Box2D.Collision.b2DistanceProxy.prototype.GetSupport = function (d) { var bestIndex = 0; var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y; for (var i = 1; i < this.m_count; i++) { var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y; if (value > bestValue) { bestIndex = i; bestValue = value; } } return bestIndex; }; Box2D.Collision.b2DistanceProxy.prototype.GetSupportVertex = function (d) { return this.m_vertices[this.GetSupport(d)]; }; Box2D.Collision.b2DistanceProxy.prototype.GetVertexCount = function () { return this.m_count; }; Box2D.Collision.b2DistanceProxy.prototype.GetVertex = function (index) { if (index === undefined) index = 0; ; return this.m_vertices[index]; }; /** * @constructor */ Box2D.Collision.b2DynamicTree = function() { /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.m_root = null; /** @type {number} */ this.m_path = 0; /** @type {number} */ this.m_insertionCount = 0; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {Box2D.Dynamics.b2Fixture} fixture * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTree.prototype.CreateProxy = function(aabb, fixture) { var node = Box2D.Collision.b2DynamicTreeNode.Get(fixture); var extendX = Box2D.Common.b2Settings.b2_aabbExtension; var extendY = Box2D.Common.b2Settings.b2_aabbExtension; node.aabb.lowerBound_.x = aabb.lowerBound_.x - extendX; node.aabb.lowerBound_.y = aabb.lowerBound_.y - extendY; node.aabb.upperBound_.x = aabb.upperBound_.x + extendX; node.aabb.upperBound_.y = aabb.upperBound_.y + extendY; this.InsertLeaf(node); return node; }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy */ Box2D.Collision.b2DynamicTree.prototype.DestroyProxy = function(proxy) { this.RemoveLeaf(proxy); proxy.Destroy(); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Vec2} displacement * @return {boolean} */ Box2D.Collision.b2DynamicTree.prototype.MoveProxy = function(proxy, aabb, displacement) { ; if (proxy.aabb.Contains(aabb)) { return false; } this.RemoveLeaf(proxy); var extendX = Box2D.Common.b2Settings.b2_aabbExtension + Box2D.Common.b2Settings.b2_aabbMultiplier * Math.abs(displacement.x); var extendY = Box2D.Common.b2Settings.b2_aabbExtension + Box2D.Common.b2Settings.b2_aabbMultiplier * Math.abs(displacement.y); proxy.aabb.lowerBound_.x = aabb.lowerBound_.x - extendX; proxy.aabb.lowerBound_.y = aabb.lowerBound_.y - extendY; proxy.aabb.upperBound_.x = aabb.upperBound_.x + extendX; proxy.aabb.upperBound_.y = aabb.upperBound_.y + extendY; this.InsertLeaf(proxy); return true; }; /** * @param {number} iterations */ Box2D.Collision.b2DynamicTree.prototype.Rebalance = function(iterations) { if (this.m_root !== null) { for (var i = 0; i < iterations; i++) { var node = this.m_root; var bit = 0; while (!node.IsLeaf()) { node = (this.m_path >> bit) & 1 ? node.child2 : node.child1; bit = (bit + 1) & 31; } this.m_path++; this.RemoveLeaf(node); this.InsertLeaf(node); } } }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2DynamicTree.prototype.GetFatAABB = function(proxy) { return proxy.aabb; }; /** * @param {function(!Box2D.Dynamics.b2Fixture): boolean} callback * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Collision.b2DynamicTree.prototype.Query = function(callback, aabb) { if (this.m_root !== null) { var stack = []; stack.push(this.m_root); while (stack.length > 0) { var node = stack.pop(); if (node.aabb.TestOverlap(aabb)) { if (node.IsLeaf()) { if (!callback(node.fixture)) { return; } } else { stack.push(node.child1); stack.push(node.child2); } } } } }; /** * @param {function(!Box2D.Collision.b2RayCastInput, !Box2D.Dynamics.b2Fixture): number} callback * @param {!Box2D.Collision.b2RayCastInput} input */ Box2D.Collision.b2DynamicTree.prototype.RayCast = function(callback, input) { if (this.m_root === null) { return; } var r = Box2D.Common.Math.b2Math.SubtractVV(input.p1, input.p2); r.Normalize(); var v = Box2D.Common.Math.b2Math.CrossFV(1.0, r); var abs_v = Box2D.Common.Math.b2Math.AbsV(v); var maxFraction = input.maxFraction; var tX = input.p1.x + maxFraction * (input.p2.x - input.p1.x); var tY = input.p1.y + maxFraction * (input.p2.y - input.p1.y); var segmentAABB = Box2D.Collision.b2AABB.Get(); segmentAABB.lowerBound_.x = Math.min(input.p1.x, tX); segmentAABB.lowerBound_.y = Math.min(input.p1.y, tY); segmentAABB.upperBound_.x = Math.max(input.p1.x, tX); segmentAABB.upperBound_.y = Math.max(input.p1.y, tY); var stack = []; stack.push(this.m_root); while (stack.length > 0) { var node = stack.pop(); if (!node.aabb.TestOverlap(segmentAABB)) { continue; } var c = node.aabb.GetCenter(); var h = node.aabb.GetExtents(); var separation = Math.abs(v.x * (input.p1.x - c.x) + v.y * (input.p1.y - c.y)) - abs_v.x * h.x - abs_v.y * h.y; if (separation > 0.0) { continue; } if (node.IsLeaf()) { var subInput = new Box2D.Collision.b2RayCastInput(input.p1, input.p2, input.maxFraction); maxFraction = callback(input, node.fixture); if (maxFraction == 0.0) { break; } if (maxFraction > 0.0) { tX = input.p1.x + maxFraction * (input.p2.x - input.p1.x); tY = input.p1.y + maxFraction * (input.p2.y - input.p1.y); segmentAABB.lowerBound_.x = Math.min(input.p1.x, tX); segmentAABB.lowerBound_.y = Math.min(input.p1.y, tY); segmentAABB.upperBound_.x = Math.max(input.p1.x, tX); segmentAABB.upperBound_.y = Math.max(input.p1.y, tY); } } else { stack.push(node.child1); stack.push(node.child2); } } Box2D.Collision.b2AABB.Free(segmentAABB); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} leaf */ Box2D.Collision.b2DynamicTree.prototype.InsertLeaf = function(leaf) { this.m_insertionCount++; if (this.m_root === null) { this.m_root = leaf; this.m_root.parent = null; return; } var sibling = this.GetBestSibling(leaf); var parent = sibling.parent; var node2 = Box2D.Collision.b2DynamicTreeNode.Get(); node2.parent = parent; node2.aabb.Combine(leaf.aabb, sibling.aabb); if (parent) { if (sibling.parent.child1 == sibling) { parent.child1 = node2; } else { parent.child2 = node2; } node2.child1 = sibling; node2.child2 = leaf; sibling.parent = node2; leaf.parent = node2; while (parent) { if (parent.aabb.Contains(node2.aabb)) { break; } parent.aabb.Combine(parent.child1.aabb, parent.child2.aabb); node2 = parent; parent = parent.parent; } } else { node2.child1 = sibling; node2.child2 = leaf; sibling.parent = node2; leaf.parent = node2; this.m_root = node2; } }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} leaf * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTree.prototype.GetBestSibling = function(leaf) { var center = leaf.aabb.GetCenter(); var sibling = this.m_root; while(!sibling.IsLeaf()) { var child1 = sibling.child1; var child2 = sibling.child2; var norm1 = Math.abs((child1.aabb.lowerBound_.x + child1.aabb.upperBound_.x) / 2 - center.x) + Math.abs((child1.aabb.lowerBound_.y + child1.aabb.upperBound_.y) / 2 - center.y); var norm2 = Math.abs((child2.aabb.lowerBound_.x + child2.aabb.upperBound_.x) / 2 - center.x) + Math.abs((child2.aabb.lowerBound_.y + child2.aabb.upperBound_.y) / 2 - center.y); if (norm1 < norm2) { sibling = child1; } else { sibling = child2; } } Box2D.Common.Math.b2Vec2.Free(center); return sibling; }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} leaf */ Box2D.Collision.b2DynamicTree.prototype.RemoveLeaf = function(leaf) { if (leaf == this.m_root) { this.m_root = null; return; } var node2 = leaf.parent; var node1 = node2.parent; var sibling; if (node2.child1 == leaf) { sibling = node2.child2; } else { sibling = node2.child1; } if (node1) { if (node1.child1 == node2) { node1.child1 = sibling; } else { node1.child2 = sibling; } sibling.parent = node1; while (node1) { var oldAABB = node1.aabb; node1.aabb.Combine(node1.child1.aabb, node1.child2.aabb); if (oldAABB.Contains(node1.aabb)) { break; } node1 = node1.parent; } } else { this.m_root = sibling; sibling.parent = null; } node2.Destroy(); }; /** * @constructor */ Box2D.Collision.b2DynamicTreeBroadPhase = function() { /** * @private * @type {!Box2D.Collision.b2DynamicTree} */ this.m_tree = new Box2D.Collision.b2DynamicTree(); /** * @private * @type {Array.<!Box2D.Collision.b2DynamicTreeNode>} */ this.m_moveBuffer = []; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {Box2D.Dynamics.b2Fixture} fixture * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.CreateProxy = function(aabb, fixture) { var proxy = this.m_tree.CreateProxy(aabb, fixture); this.BufferMove(proxy); return proxy; }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.DestroyProxy = function(proxy) { this.UnBufferMove(proxy); this.m_tree.DestroyProxy(proxy); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Vec2} displacement */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.MoveProxy = function(proxy, aabb, displacement) { var buffer = this.m_tree.MoveProxy(proxy, aabb, displacement); if (buffer) { this.BufferMove(proxy); } }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxyA * @param {!Box2D.Collision.b2DynamicTreeNode} proxyB * @return {boolean} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.TestOverlap = function(proxyA, proxyB) { var aabbA = this.m_tree.GetFatAABB(proxyA); var aabbB = this.m_tree.GetFatAABB(proxyB); return aabbA.TestOverlap(aabbB); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.GetFatAABB = function(proxy) { return this.m_tree.GetFatAABB(proxy); }; /** * @return {number} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.GetProxyCount = function() { return this.m_tree.length; }; /** * @param {function(!Box2D.Dynamics.b2Fixture, !Box2D.Dynamics.b2Fixture)} callback */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.UpdatePairs = function(callback) { var __this = this; var pairs = []; while (this.m_moveBuffer.length > 0) { var queryProxy = this.m_moveBuffer.pop(); var QueryCallback = function(fixture) { if (fixture != queryProxy.fixture) { pairs.push(new Box2D.Collision.b2DynamicTreePair(queryProxy.fixture, fixture)); } return true; }; var fatAABB = this.m_tree.GetFatAABB(queryProxy); this.m_tree.Query(QueryCallback, fatAABB); } var i = 0; while(i < pairs.length) { var primaryPair = pairs[i]; callback(primaryPair.fixtureA, primaryPair.fixtureB); i++; while(i < pairs.length) { var pair = pairs[i]; if (!(pair.fixtureA == primaryPair.fixtureA && pair.fixtureB == primaryPair.fixtureB) && !(pair.fixtureA == primaryPair.fixtureB && pair.fixtureB == primaryPair.fixtureA)) { break; } i++; } } }; /** * @param {function(!Box2D.Dynamics.b2Fixture): boolean} callback * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.Query = function(callback, aabb) { this.m_tree.Query(callback, aabb); }; /** * @param {function(!Box2D.Collision.b2RayCastInput, !Box2D.Dynamics.b2Fixture): number} callback * @param {!Box2D.Collision.b2RayCastInput} input */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.RayCast = function(callback, input) { this.m_tree.RayCast(callback, input); }; /** * @param {number} iterations */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.Rebalance = function(iterations) { this.m_tree.Rebalance(iterations); }; Box2D.Collision.b2DynamicTreeBroadPhase.prototype.BufferMove = function(proxy) { this.m_moveBuffer.push(proxy); }; Box2D.Collision.b2DynamicTreeBroadPhase.prototype.UnBufferMove = function(proxy) { cr.arrayFindRemove(this.m_moveBuffer, proxy); }; Box2D.Collision.b2DynamicTreeBroadPhase.__implements = {}; Box2D.Collision.b2DynamicTreeBroadPhase.__implements[Box2D.Collision.IBroadPhase] = true; /** * @private * @param {Box2D.Dynamics.b2Fixture=} fixture * @constructor */ Box2D.Collision.b2DynamicTreeNode = function(fixture) { /** @type {!Box2D.Collision.b2AABB} */ this.aabb = Box2D.Collision.b2AABB.Get(); /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.child1 = null; /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.child2 = null; /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.parent = null; /** @type {Box2D.Dynamics.b2Fixture} */ this.fixture = null; if (typeof(fixture) != "undefined") { this.fixture = fixture; } }; /** * @private * @type {Array.<!Box2D.Collision.b2DynamicTreeNode>} */ Box2D.Collision.b2DynamicTreeNode._freeCache = []; /** * @param {Box2D.Dynamics.b2Fixture=} fixture * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTreeNode.Get = function(fixture) { if (Box2D.Collision.b2DynamicTreeNode._freeCache.length > 0) { var node = Box2D.Collision.b2DynamicTreeNode._freeCache.pop(); if (typeof(fixture) != "undefined") { node.fixture = fixture; } node.aabb.SetZero(); return node; } return new Box2D.Collision.b2DynamicTreeNode(fixture); }; Box2D.Collision.b2DynamicTreeNode.prototype.Destroy = function() { this.child1 = null; this.child2 = null; this.parent = null; this.fixture = null; Box2D.Collision.b2DynamicTreeNode._freeCache.push(this); }; /** * @return boolean */ Box2D.Collision.b2DynamicTreeNode.prototype.IsLeaf = function () { return this.child1 === null; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor */ Box2D.Collision.b2DynamicTreePair = function(fixtureA, fixtureB) { /** @type {!Box2D.Dynamics.b2Fixture} */ this.fixtureA = fixtureA; /** @type {!Box2D.Dynamics.b2Fixture} */ this.fixtureB = fixtureB; }; /** * @constructor */ Box2D.Collision.b2Manifold = function() { this.m_pointCount = 0; this.m_type = 0; this.m_points = []; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i] = new Box2D.Collision.b2ManifoldPoint(); } this.m_localPlaneNormal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Collision.b2Manifold.prototype.Reset = function() { for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i].Reset(); } this.m_localPlaneNormal.SetZero(); this.m_localPoint.SetZero(); this.m_type = 0; this.m_pointCount = 0; }; Box2D.Collision.b2Manifold.prototype.Set = function(m) { this.m_pointCount = m.m_pointCount; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i].Set(m.m_points[i]); } this.m_localPlaneNormal.SetV(m.m_localPlaneNormal); this.m_localPoint.SetV(m.m_localPoint); this.m_type = m.m_type; }; Box2D.Collision.b2Manifold.prototype.Copy = function() { var copy = new Box2D.Collision.b2Manifold(); copy.Set(this); return copy; }; Box2D.Collision.b2Manifold.e_circles = 0x0001; Box2D.Collision.b2Manifold.e_faceA = 0x0002; Box2D.Collision.b2Manifold.e_faceB = 0x0004; /** * @constructor */ Box2D.Collision.b2ManifoldPoint = function() { this.m_localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_id = new Box2D.Collision.b2ContactID(); this.Reset(); }; Box2D.Collision.b2ManifoldPoint.prototype.Reset = function() { this.m_localPoint.SetZero(); this.m_normalImpulse = 0.0; this.m_tangentImpulse = 0.0; this.m_id.SetKey(0); }; Box2D.Collision.b2ManifoldPoint.prototype.Set = function(m) { this.m_localPoint.SetV(m.m_localPoint); this.m_normalImpulse = m.m_normalImpulse; this.m_tangentImpulse = m.m_tangentImpulse; this.m_id.Set(m.m_id); }; /** * @param {!Box2D.Common.Math.b2Vec2} p1 * @param {!Box2D.Common.Math.b2Vec2} p2 * @param {number} maxFraction * @constructor */ Box2D.Collision.b2RayCastInput = function(p1, p2, maxFraction) { this.p1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.p2 = Box2D.Common.Math.b2Vec2.Get(0, 0); if (maxFraction === undefined) maxFraction = 1; if (p1) this.p1.SetV(p1); if (p2) this.p2.SetV(p2); this.maxFraction = maxFraction; }; /** * @constructor */ Box2D.Collision.b2RayCastOutput = function() { this.normal = Box2D.Common.Math.b2Vec2.Get(0, 0); }; /** * @constructor */ Box2D.Collision.b2Segment = function() { this.p1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.p2 = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Collision.b2Segment.prototype.TestSegment = function(lambda, normal, segment, maxLambda) { if (maxLambda === undefined) maxLambda = 0; var s = segment.p1; var rX = segment.p2.x - s.x; var rY = segment.p2.y - s.y; var dX = this.p2.x - this.p1.x; var dY = this.p2.y - this.p1.y; var nX = dY; var nY = (-dX); var k_slop = 100.0 * Number.MIN_VALUE; var denom = (-(rX * nX + rY * nY)); if (denom > k_slop) { var bX = s.x - this.p1.x; var bY = s.y - this.p1.y; var a = (bX * nX + bY * nY); if (0.0 <= a && a <= maxLambda * denom) { var mu2 = (-rX * bY) + rY * bX; if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) { a /= denom; var nLen = Math.sqrt(nX * nX + nY * nY); nX /= nLen; nY /= nLen; lambda[0] = a; normal.Set(nX, nY); return true; } } } return false; }; Box2D.Collision.b2Segment.prototype.Extend = function(aabb) { this.ExtendForward(aabb); this.ExtendBackward(aabb); }; Box2D.Collision.b2Segment.prototype.ExtendForward = function(aabb) { var dX = this.p2.x - this.p1.x; var dY = this.p2.y - this.p1.y; var lambda = Math.min(dX > 0 ? (aabb.upperBound_.x - this.p1.x) / dX : dX < 0 ? (aabb.lowerBound_.x - this.p1.x) / dX : Number.POSITIVE_INFINITY, dY > 0 ? (aabb.upperBound_.y - this.p1.y) / dY : dY < 0 ? (aabb.lowerBound_.y - this.p1.y) / dY : Number.POSITIVE_INFINITY); this.p2.x = this.p1.x + dX * lambda; this.p2.y = this.p1.y + dY * lambda; }; Box2D.Collision.b2Segment.prototype.ExtendBackward = function(aabb) { var dX = (-this.p2.x) + this.p1.x; var dY = (-this.p2.y) + this.p1.y; var lambda = Math.min(dX > 0 ? (aabb.upperBound_.x - this.p2.x) / dX : dX < 0 ? (aabb.lowerBound_.x - this.p2.x) / dX : Number.POSITIVE_INFINITY, dY > 0 ? (aabb.upperBound_.y - this.p2.y) / dY : dY < 0 ? (aabb.lowerBound_.y - this.p2.y) / dY : Number.POSITIVE_INFINITY); this.p1.x = this.p2.x + dX * lambda; this.p1.y = this.p2.y + dY * lambda; }; /** * @constructor */ Box2D.Collision.b2SeparationFunction = function() { this.m_localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_axis = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Collision.b2SeparationFunction.prototype.Initialize = function(cache, proxyA, transformA, proxyB, transformB) { this.m_proxyA = proxyA; this.m_proxyB = proxyB; var count = cache.count; ; var localPointA; var localPointA1; var localPointA2; var localPointB; var localPointB1; var localPointB2; var pointAX = 0; var pointAY = 0; var pointBX = 0; var pointBY = 0; var normalX = 0; var normalY = 0; var tMat; var tVec; var s = 0; var sgn = 0; if (count == 1) { this.m_type = Box2D.Collision.b2SeparationFunction.e_points; localPointA = this.m_proxyA.GetVertex(cache.indexA[0]); localPointB = this.m_proxyB.GetVertex(cache.indexB[0]); tVec = localPointA; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointB; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); this.m_axis.x = pointBX - pointAX; this.m_axis.y = pointBY - pointAY; this.m_axis.Normalize(); } else if (cache.indexB[0] == cache.indexB[1]) { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceA; localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]); localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]); localPointB = this.m_proxyB.GetVertex(cache.indexB[0]); this.m_localPoint.x = 0.5 * (localPointA1.x + localPointA2.x); this.m_localPoint.y = 0.5 * (localPointA1.y + localPointA2.y); this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointA2, localPointA1), 1.0); this.m_axis.Normalize(); tVec = this.m_axis; tMat = transformA.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointB; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); s = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } else if (cache.indexA[0] == cache.indexA[0]) { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceB; localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]); localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]); localPointA = this.m_proxyA.GetVertex(cache.indexA[0]); this.m_localPoint.x = 0.5 * (localPointB1.x + localPointB2.x); this.m_localPoint.y = 0.5 * (localPointB1.y + localPointB2.y); this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointB2, localPointB1), 1.0); this.m_axis.Normalize(); tVec = this.m_axis; tMat = transformB.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointA; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); s = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } else { localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]); localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]); localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]); localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]); var dA = Box2D.Common.Math.b2Math.MulMV(transformA.R, Box2D.Common.Math.b2Math.SubtractVV(localPointA2, localPointA1)); var dB = Box2D.Common.Math.b2Math.MulMV(transformB.R, Box2D.Common.Math.b2Math.SubtractVV(localPointB2, localPointB1)); var a = dA.x * dA.x + dA.y * dA.y; var e = dB.x * dB.x + dB.y * dB.y; var r = Box2D.Common.Math.b2Math.SubtractVV(dB, dA); var c = dA.x * r.x + dA.y * r.y; var f = dB.x * r.x + dB.y * r.y; var b = dA.x * dB.x + dA.y * dB.y; var denom = a * e - b * b; s = 0.0; if (denom != 0.0) { s = Box2D.Common.Math.b2Math.Clamp((b * f - c * e) / denom, 0.0, 1.0); } var t = (b * s + f) / e; if (t < 0.0) { t = 0.0; s = Box2D.Common.Math.b2Math.Clamp((b - c) / a, 0.0, 1.0); } localPointA = Box2D.Common.Math.b2Vec2.Get(0, 0); localPointA.x = localPointA1.x + s * (localPointA2.x - localPointA1.x); localPointA.y = localPointA1.y + s * (localPointA2.y - localPointA1.y); localPointB = Box2D.Common.Math.b2Vec2.Get(0, 0); localPointB.x = localPointB1.x + s * (localPointB2.x - localPointB1.x); localPointB.y = localPointB1.y + s * (localPointB2.y - localPointB1.y); if (s == 0.0 || s == 1.0) { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceB; this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointB2, localPointB1), 1.0); this.m_axis.Normalize(); this.m_localPoint = localPointB; tVec = this.m_axis; tMat = transformB.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointA; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); sgn = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } else { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceA; this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointA2, localPointA1), 1.0); this.m_localPoint = localPointA; tVec = this.m_axis; tMat = transformA.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointB; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); sgn = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } } }; Box2D.Collision.b2SeparationFunction.prototype.Evaluate = function(transformA, transformB) { var axisA; var axisB; var localPointA; var localPointB; var pointA; var pointB; var seperation = 0; var normal; switch (this.m_type) { case Box2D.Collision.b2SeparationFunction.e_points: axisA = Box2D.Common.Math.b2Math.MulTMV(transformA.R, this.m_axis); axisB = Box2D.Common.Math.b2Math.MulTMV(transformB.R, this.m_axis.GetNegative()); localPointA = this.m_proxyA.GetSupportVertex(axisA); localPointB = this.m_proxyB.GetSupportVertex(axisB); pointA = Box2D.Common.Math.b2Math.MulX(transformA, localPointA); pointB = Box2D.Common.Math.b2Math.MulX(transformB, localPointB); seperation = (pointB.x - pointA.x) * this.m_axis.x + (pointB.y - pointA.y) * this.m_axis.y; break; case Box2D.Collision.b2SeparationFunction.e_faceA: normal = Box2D.Common.Math.b2Math.MulMV(transformA.R, this.m_axis); pointA = Box2D.Common.Math.b2Math.MulX(transformA, this.m_localPoint); axisB = Box2D.Common.Math.b2Math.MulTMV(transformB.R, normal.GetNegative()); localPointB = this.m_proxyB.GetSupportVertex(axisB); pointB = Box2D.Common.Math.b2Math.MulX(transformB, localPointB); seperation = (pointB.x - pointA.x) * normal.x + (pointB.y - pointA.y) * normal.y; break; case Box2D.Collision.b2SeparationFunction.e_faceB: normal = Box2D.Common.Math.b2Math.MulMV(transformB.R, this.m_axis); pointB = Box2D.Common.Math.b2Math.MulX(transformB, this.m_localPoint); axisA = Box2D.Common.Math.b2Math.MulTMV(transformA.R, normal.GetNegative()); localPointA = this.m_proxyA.GetSupportVertex(axisA); pointA = Box2D.Common.Math.b2Math.MulX(transformA, localPointA); seperation = (pointA.x - pointB.x) * normal.x + (pointA.y - pointB.y) * normal.y; break; default: ; break; } return seperation; }; Box2D.Collision.b2SeparationFunction.e_points = 0x01; Box2D.Collision.b2SeparationFunction.e_faceA = 0x02; Box2D.Collision.b2SeparationFunction.e_faceB = 0x04; /** * @constructor */ Box2D.Collision.b2Simplex = function() { this.m_v1 = new Box2D.Collision.b2SimplexVertex(); this.m_v2 = new Box2D.Collision.b2SimplexVertex(); this.m_v3 = new Box2D.Collision.b2SimplexVertex(); this.m_vertices = [this.m_v1, this.m_v2, this.m_v3]; }; Box2D.Collision.b2Simplex.prototype.ReadCache = function(cache, proxyA, transformA, proxyB, transformB) { ; var wALocal; var wBLocal; this.m_count = cache.count; var vertices = this.m_vertices; for (var i = 0; i < this.m_count; i++) { var v = vertices[i]; v.indexA = cache.indexA[i]; v.indexB = cache.indexB[i]; wALocal = proxyA.GetVertex(v.indexA); wBLocal = proxyB.GetVertex(v.indexB); v.wA = Box2D.Common.Math.b2Math.MulX(transformA, wALocal); v.wB = Box2D.Common.Math.b2Math.MulX(transformB, wBLocal); v.w = Box2D.Common.Math.b2Math.SubtractVV(v.wB, v.wA); v.a = 0; } if (this.m_count > 1) { var metric1 = cache.metric; var metric2 = this.GetMetric(); if (metric2 < .5 * metric1 || 2.0 * metric1 < metric2 || metric2 < Number.MIN_VALUE) { this.m_count = 0; } } if (this.m_count == 0) { v = vertices[0]; v.indexA = 0; v.indexB = 0; wALocal = proxyA.GetVertex(0); wBLocal = proxyB.GetVertex(0); v.wA = Box2D.Common.Math.b2Math.MulX(transformA, wALocal); v.wB = Box2D.Common.Math.b2Math.MulX(transformB, wBLocal); v.w = Box2D.Common.Math.b2Math.SubtractVV(v.wB, v.wA); this.m_count = 1; } }; Box2D.Collision.b2Simplex.prototype.WriteCache = function(cache) { cache.metric = this.GetMetric(); cache.count = this.m_count; var vertices = this.m_vertices; for (var i = 0; i < this.m_count; i++) { cache.indexA[i] = vertices[i].indexA; cache.indexB[i] = vertices[i].indexB; } }; Box2D.Collision.b2Simplex.prototype.GetSearchDirection = function() { if (this.m_count == 1) { return this.m_v1.w.GetNegative(); } else if (this.m_count == 2) { var e12 = Box2D.Common.Math.b2Math.SubtractVV(this.m_v2.w, this.m_v1.w); var sgn = Box2D.Common.Math.b2Math.CrossVV(e12, this.m_v1.w.GetNegative()); if (sgn > 0.0) { return Box2D.Common.Math.b2Math.CrossFV(1.0, e12); } else { return Box2D.Common.Math.b2Math.CrossVF(e12, 1.0); } } else { ; return Box2D.Common.Math.b2Vec2.Get(0, 0); } }; Box2D.Collision.b2Simplex.prototype.GetClosestPoint = function() { if (this.m_count == 1) { return this.m_v1.w; } else if (this.m_count == 2) { return Box2D.Common.Math.b2Vec2.Get(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); } else { ; return Box2D.Common.Math.b2Vec2.Get(0, 0); } }; Box2D.Collision.b2Simplex.prototype.GetWitnessPoints = function(pA, pB) { if (this.m_count == 1) { pA.SetV(this.m_v1.wA); pB.SetV(this.m_v1.wB); } else if (this.m_count == 2) { pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x; pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y; pB.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x; pB.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y; } else if (this.m_count == 3) { pB.x = pA.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; pB.y = pA.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; } else { ; } }; Box2D.Collision.b2Simplex.prototype.GetMetric = function() { if (this.m_count == 1) { return 0.0; } else if (this.m_count == 2) { return Box2D.Common.Math.b2Math.SubtractVV(this.m_v1.w, this.m_v2.w).Length(); } else if (this.m_count == 3) { return Box2D.Common.Math.b2Math.CrossVV(Box2D.Common.Math.b2Math.SubtractVV(this.m_v2.w, this.m_v1.w), Box2D.Common.Math.b2Math.SubtractVV(this.m_v3.w, this.m_v1.w)); } else { ; return 0.0; } }; Box2D.Collision.b2Simplex.prototype.Solve2 = function() { var w1 = this.m_v1.w; var w2 = this.m_v2.w; var e12 = Box2D.Common.Math.b2Math.SubtractVV(w2, w1); var d12_2 = (-(w1.x * e12.x + w1.y * e12.y)); if (d12_2 <= 0.0) { this.m_v1.a = 1.0; this.m_count = 1; return; } var d12_1 = (w2.x * e12.x + w2.y * e12.y); if (d12_1 <= 0.0) { this.m_v2.a = 1.0; this.m_count = 1; this.m_v1.Set(this.m_v2); return; } var inv_d12 = 1.0 / (d12_1 + d12_2); this.m_v1.a = d12_1 * inv_d12; this.m_v2.a = d12_2 * inv_d12; this.m_count = 2; }; Box2D.Collision.b2Simplex.prototype.Solve3 = function() { var w1 = this.m_v1.w; var w2 = this.m_v2.w; var w3 = this.m_v3.w; var e12 = Box2D.Common.Math.b2Math.SubtractVV(w2, w1); var w1e12 = Box2D.Common.Math.b2Math.Dot(w1, e12); var w2e12 = Box2D.Common.Math.b2Math.Dot(w2, e12); var d12_1 = w2e12; var d12_2 = (-w1e12); var e13 = Box2D.Common.Math.b2Math.SubtractVV(w3, w1); var w1e13 = Box2D.Common.Math.b2Math.Dot(w1, e13); var w3e13 = Box2D.Common.Math.b2Math.Dot(w3, e13); var d13_1 = w3e13; var d13_2 = (-w1e13); var e23 = Box2D.Common.Math.b2Math.SubtractVV(w3, w2); var w2e23 = Box2D.Common.Math.b2Math.Dot(w2, e23); var w3e23 = Box2D.Common.Math.b2Math.Dot(w3, e23); var d23_1 = w3e23; var d23_2 = (-w2e23); var n123 = Box2D.Common.Math.b2Math.CrossVV(e12, e13); var d123_1 = n123 * Box2D.Common.Math.b2Math.CrossVV(w2, w3); var d123_2 = n123 * Box2D.Common.Math.b2Math.CrossVV(w3, w1); var d123_3 = n123 * Box2D.Common.Math.b2Math.CrossVV(w1, w2); if (d12_2 <= 0.0 && d13_2 <= 0.0) { this.m_v1.a = 1.0; this.m_count = 1; return; } if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) { var inv_d12 = 1.0 / (d12_1 + d12_2); this.m_v1.a = d12_1 * inv_d12; this.m_v2.a = d12_2 * inv_d12; this.m_count = 2; return; } if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) { var inv_d13 = 1.0 / (d13_1 + d13_2); this.m_v1.a = d13_1 * inv_d13; this.m_v3.a = d13_2 * inv_d13; this.m_count = 2; this.m_v2.Set(this.m_v3); return; } if (d12_1 <= 0.0 && d23_2 <= 0.0) { this.m_v2.a = 1.0; this.m_count = 1; this.m_v1.Set(this.m_v2); return; } if (d13_1 <= 0.0 && d23_1 <= 0.0) { this.m_v3.a = 1.0; this.m_count = 1; this.m_v1.Set(this.m_v3); return; } if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) { var inv_d23 = 1.0 / (d23_1 + d23_2); this.m_v2.a = d23_1 * inv_d23; this.m_v3.a = d23_2 * inv_d23; this.m_count = 2; this.m_v1.Set(this.m_v3); return; } var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3); this.m_v1.a = d123_1 * inv_d123; this.m_v2.a = d123_2 * inv_d123; this.m_v3.a = d123_3 * inv_d123; this.m_count = 3; }; /** * @constructor */ Box2D.Collision.b2SimplexCache = function() { this.indexA = [0, 0, 0]; this.indexB = [0, 0, 0]; }; /** * @constructor */ Box2D.Collision.b2SimplexVertex = function() {}; Box2D.Collision.b2SimplexVertex.prototype.Set = function(other) { this.wA.SetV(other.wA); this.wB.SetV(other.wB); this.w.SetV(other.w); this.a = other.a; this.indexA = other.indexA; this.indexB = other.indexB; }; /** * @constructor */ Box2D.Collision.b2TOIInput = function() { this.proxyA = new Box2D.Collision.b2DistanceProxy(); this.proxyB = new Box2D.Collision.b2DistanceProxy(); this.sweepA = new Box2D.Common.Math.b2Sweep(); this.sweepB = new Box2D.Common.Math.b2Sweep(); }; Box2D.Collision.b2TimeOfImpact = {}; Box2D.Collision.b2TimeOfImpact.TimeOfImpact = function(input) { Box2D.Collision.b2TimeOfImpact.b2_toiCalls++; var proxyA = input.proxyA; var proxyB = input.proxyB; var sweepA = input.sweepA; var sweepB = input.sweepB; ; ; var radius = proxyA.m_radius + proxyB.m_radius; var tolerance = input.tolerance; var alpha = 0.0; var k_maxIterations = 1000; var iter = 0; var target = 0.0; Box2D.Collision.b2TimeOfImpact.s_cache.count = 0; Box2D.Collision.b2TimeOfImpact.s_distanceInput.useRadii = false; for (;;) { sweepA.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfA, alpha); sweepB.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfB, alpha); Box2D.Collision.b2TimeOfImpact.s_distanceInput.proxyA = proxyA; Box2D.Collision.b2TimeOfImpact.s_distanceInput.proxyB = proxyB; Box2D.Collision.b2TimeOfImpact.s_distanceInput.transformA = Box2D.Collision.b2TimeOfImpact.s_xfA; Box2D.Collision.b2TimeOfImpact.s_distanceInput.transformB = Box2D.Collision.b2TimeOfImpact.s_xfB; Box2D.Collision.b2Distance.Distance(Box2D.Collision.b2TimeOfImpact.s_distanceOutput, Box2D.Collision.b2TimeOfImpact.s_cache, Box2D.Collision.b2TimeOfImpact.s_distanceInput); if (Box2D.Collision.b2TimeOfImpact.s_distanceOutput.distance <= 0.0) { alpha = 1.0; break; } Box2D.Collision.b2TimeOfImpact.s_fcn.Initialize(Box2D.Collision.b2TimeOfImpact.s_cache, proxyA, Box2D.Collision.b2TimeOfImpact.s_xfA, proxyB, Box2D.Collision.b2TimeOfImpact.s_xfB); var separation = Box2D.Collision.b2TimeOfImpact.s_fcn.Evaluate(Box2D.Collision.b2TimeOfImpact.s_xfA, Box2D.Collision.b2TimeOfImpact.s_xfB); if (separation <= 0.0) { alpha = 1.0; break; } if (iter == 0) { if (separation > radius) { target = Math.max(radius - tolerance, 0.75 * radius); } else { target = Math.max(separation - tolerance, 0.02 * radius); } } if (separation - target < 0.5 * tolerance) { if (iter == 0) { alpha = 1.0; break; } break; } var newAlpha = alpha; { var x1 = alpha; var x2 = 1.0; var f1 = separation; sweepA.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfA, x2); sweepB.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfB, x2); var f2 = Box2D.Collision.b2TimeOfImpact.s_fcn.Evaluate(Box2D.Collision.b2TimeOfImpact.s_xfA, Box2D.Collision.b2TimeOfImpact.s_xfB); if (f2 >= target) { alpha = 1.0; break; } var rootIterCount = 0; for (;;) { var x = 0; if (rootIterCount & 1) { x = x1 + (target - f1) * (x2 - x1) / (f2 - f1); } else { x = 0.5 * (x1 + x2); } sweepA.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfA, x); sweepB.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfB, x); var f = Box2D.Collision.b2TimeOfImpact.s_fcn.Evaluate(Box2D.Collision.b2TimeOfImpact.s_xfA, Box2D.Collision.b2TimeOfImpact.s_xfB); if (Math.abs(f - target) < 0.025 * tolerance) { newAlpha = x; break; } if (f > target) { x1 = x; f1 = f; } else { x2 = x; f2 = f; } rootIterCount++; Box2D.Collision.b2TimeOfImpact.b2_toiRootIters++; if (rootIterCount == 50) { break; } } Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = Math.max(Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters, rootIterCount); } if (newAlpha < (1.0 + 100.0 * Number.MIN_VALUE) * alpha) { break; } alpha = newAlpha; iter++; Box2D.Collision.b2TimeOfImpact.b2_toiIters++; if (iter == k_maxIterations) { break; } } Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = Math.max(Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters, iter); return alpha; }; /** * @constructor */ Box2D.Collision.b2WorldManifold = function() { /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_normal = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {Array.<!Box2D.Common.Math.b2Vec2>} */ this.m_points = []; /** @type {number} */ this.m_pointCount = 0; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); } }; /** * @param {!Box2D.Collision.b2Manifold} manifold * @param {!Box2D.Common.Math.b2Transform} xfA * @param {number} radiusA * @param {!Box2D.Common.Math.b2Transform} xfB * @param {number} radiusB */ Box2D.Collision.b2WorldManifold.prototype.Initialize = function(manifold, xfA, radiusA, xfB, radiusB) { if (manifold.m_pointCount == 0) { return; } var i = 0; var tVec; var tMat; var normalX = 0; var normalY = 0; var planePointX = 0; var planePointY = 0; var clipPointX = 0; var clipPointY = 0; switch (manifold.m_type) { case Box2D.Collision.b2Manifold.e_circles: tMat = xfA.R; tVec = manifold.m_localPoint; var pointAX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; var pointAY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = xfB.R; tVec = manifold.m_points[0].m_localPoint; var pointBX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; var pointBY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; var dX = pointBX - pointAX; var dY = pointBY - pointAY; var d2 = dX * dX + dY * dY; if (d2 > Box2D.Common.b2Settings.MIN_VALUE_SQUARED) { var d = Math.sqrt(d2); this.m_normal.x = dX / d; this.m_normal.y = dY / d; } else { this.m_normal.x = 1; this.m_normal.y = 0; } var cAX = pointAX + radiusA * this.m_normal.x; var cAY = pointAY + radiusA * this.m_normal.y; var cBX = pointBX - radiusB * this.m_normal.x; var cBY = pointBY - radiusB * this.m_normal.y; this.m_points[0].x = 0.5 * (cAX + cBX); this.m_points[0].y = 0.5 * (cAY + cBY); break; case Box2D.Collision.b2Manifold.e_faceA: tMat = xfA.R; tVec = manifold.m_localPlaneNormal; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = xfA.R; tVec = manifold.m_localPoint; planePointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; planePointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_normal.x = normalX; this.m_normal.y = normalY; for (i = 0; i < manifold.m_pointCount; i++) { tMat = xfB.R; tVec = manifold.m_points[i].m_localPoint; clipPointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; clipPointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_points[i].x = clipPointX + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalX; this.m_points[i].y = clipPointY + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalY; } break; case Box2D.Collision.b2Manifold.e_faceB: tMat = xfB.R; tVec = manifold.m_localPlaneNormal; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = xfB.R; tVec = manifold.m_localPoint; planePointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; planePointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_normal.x = (-normalX); this.m_normal.y = (-normalY); for (i = 0; i < manifold.m_pointCount; i++) { tMat = xfA.R; tVec = manifold.m_points[i].m_localPoint; clipPointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; clipPointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_points[i].x = clipPointX + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalX; this.m_points[i].y = clipPointY + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalY; } break; } }; /** * @param {!Box2D.Dynamics.b2BodyDef} bd * @param {!Box2D.Dynamics.b2World} world * @constructor */ Box2D.Dynamics.b2Body = function(bd, world) { /** * @const * @private * @type {string} */ this.ID = "Body" + Box2D.Dynamics.b2Body.NEXT_ID++; /** * @private * @type {!Box2D.Common.Math.b2Transform} */ this.m_xf = new Box2D.Common.Math.b2Transform(); this.m_xf.position.SetV(bd.position); this.m_xf.R.Set(bd.angle); /** * @private * @type {!Box2D.Common.Math.b2Sweep} */ this.m_sweep = new Box2D.Common.Math.b2Sweep(); this.m_sweep.localCenter.SetZero(); this.m_sweep.t0 = 1.0; this.m_sweep.a0 = this.m_sweep.a = bd.angle; this.m_sweep.c.x = (this.m_xf.R.col1.x * this.m_sweep.localCenter.x + this.m_xf.R.col2.x * this.m_sweep.localCenter.y); this.m_sweep.c.y = (this.m_xf.R.col1.y * this.m_sweep.localCenter.x + this.m_xf.R.col2.y * this.m_sweep.localCenter.y); this.m_sweep.c.x += this.m_xf.position.x; this.m_sweep.c.y += this.m_xf.position.y; this.m_sweep.c0.SetV(this.m_sweep.c); /** * @private * @type {!Box2D.Common.Math.b2Vec2} */ this.m_linearVelocity = bd.linearVelocity.Copy(); /** * @private * @type {!Box2D.Common.Math.b2Vec2} */ this.m_force = Box2D.Common.Math.b2Vec2.Get(0, 0); /** * @private * @type {boolean} */ this.m_bullet = bd.bullet; /** * @private * @type {boolean} */ this.m_fixedRotation = bd.fixedRotation; /** * @private * @type {boolean} */ this.m_allowSleep = bd.allowSleep; /** * @private * @type {boolean} */ this.m_awake = bd.awake; /** * @private * @type {boolean} */ this.m_active = bd.active; /** * @private * @type {!Box2D.Dynamics.b2World} */ this.m_world = world; /** * @private * @type {Box2D.Dynamics.Joints.b2Joint} */ this.m_jointList = null; /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.contactList = new Box2D.Dynamics.Contacts.b2ContactList(); /** * @private * @type {!Box2D.Dynamics.Controllers.b2ControllerList} */ this.controllerList = new Box2D.Dynamics.Controllers.b2ControllerList(); /** * @private * @type {number} */ this.m_controllerCount = 0; /** * @private * @type {number} */ this.m_angularVelocity = bd.angularVelocity; /** * @private * @type {number} */ this.m_linearDamping = bd.linearDamping; /** * @private * @type {number} */ this.m_angularDamping = bd.angularDamping; /** * @private * @type {number} */ this.m_torque = 0; /** * @private * @type {number} */ this.m_sleepTime = 0; /** * @private * @type {number} */ this.m_type = bd.type; /** * @private * @type {number} */ this.m_mass = this.m_type == Box2D.Dynamics.b2BodyDef.b2_dynamicBody ? 1 : 0; /** * @private * @type {number} */ this.m_invMass = this.m_type == Box2D.Dynamics.b2BodyDef.b2_dynamicBody ? 1 : 0; /** * @private * @type {number} */ this.m_I = 0; /** * @private * @type {number} */ this.m_invI = 0; /** * @private * @type {number} */ this.m_inertiaScale = bd.inertiaScale; /** * @private * @type {!Box2D.Dynamics.b2FixtureList} */ this.fixtureList = new Box2D.Dynamics.b2FixtureList(); /** * @private * @type {Array.<!Box2D.Dynamics.b2BodyList>} */ this.m_lists = []; }; /** * @param {!Box2D.Dynamics.b2FixtureDef} def */ Box2D.Dynamics.b2Body.prototype.CreateFixture = function(def) { ; var fixture = new Box2D.Dynamics.b2Fixture(this, this.m_xf, def); if (this.m_active) { var broadPhase = this.m_world.m_contactManager.m_broadPhase; fixture.CreateProxy(broadPhase, this.m_xf); } this.fixtureList.AddFixture(fixture); fixture.m_body = this; if (fixture.m_density > 0.0) { this.ResetMassData(); } this.m_world.m_newFixture = true; return fixture; }; Box2D.Dynamics.b2Body.prototype.CreateFixture2 = function(shape, density) { if (density === undefined) density = 0.0; var def = new Box2D.Dynamics.b2FixtureDef(); def.shape = shape; def.density = density; return this.CreateFixture(def); }; Box2D.Dynamics.b2Body.prototype.Destroy = function() { Box2D.Common.Math.b2Vec2.Free(this.m_linearVelocity); Box2D.Common.Math.b2Vec2.Free(this.m_force); }; Box2D.Dynamics.b2Body.prototype.DestroyFixture = function(fixture) { ; this.fixtureList.RemoveFixture(fixture); for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (fixture == contactNode.contact.m_fixtureA || fixture == contactNode.contact.m_fixtureB) { this.m_world.m_contactManager.Destroy(contactNode.contact); } } if (this.m_active) { var broadPhase = this.m_world.m_contactManager.m_broadPhase; fixture.DestroyProxy(broadPhase); } fixture.Destroy(); fixture.m_body = null; this.ResetMassData(); }; /** * @param {!Box2D.Common.Math.b2Vec2} position * @param {number} angle */ Box2D.Dynamics.b2Body.prototype.SetPositionAndAngle = function(position, angle) { ; this.m_xf.R.Set(angle); this.m_xf.position.SetV(position); var tMat = this.m_xf.R; var tVec = this.m_sweep.localCenter; this.m_sweep.c.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); this.m_sweep.c.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); this.m_sweep.c.x += this.m_xf.position.x; this.m_sweep.c.y += this.m_xf.position.y; this.m_sweep.c0.SetV(this.m_sweep.c); this.m_sweep.a0 = this.m_sweep.a = angle; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.Synchronize(broadPhase, this.m_xf, this.m_xf); } this.m_world.m_contactManager.FindNewContacts(); }; /** * @param {!Box2D.Common.Math.b2Transform} xf */ Box2D.Dynamics.b2Body.prototype.SetTransform = function(xf) { this.SetPositionAndAngle(xf.position, xf.GetAngle()); }; /** * @return {!Box2D.Common.Math.b2Transform} */ Box2D.Dynamics.b2Body.prototype.GetTransform = function() { return this.m_xf; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Dynamics.b2Body.prototype.GetPosition = function() { return this.m_xf.position; }; /** * @param {!Box2D.Common.Math.b2Vec2} position */ Box2D.Dynamics.b2Body.prototype.SetPosition = function(position) { this.SetPositionAndAngle(position, this.GetAngle()); }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetAngle = function() { return this.m_sweep.a; }; /** * @param {number} angle */ Box2D.Dynamics.b2Body.prototype.SetAngle = function(angle) { this.SetPositionAndAngle(this.GetPosition(), angle); }; Box2D.Dynamics.b2Body.prototype.GetWorldCenter = function() { return this.m_sweep.c; }; Box2D.Dynamics.b2Body.prototype.GetLocalCenter = function() { return this.m_sweep.localCenter; }; Box2D.Dynamics.b2Body.prototype.SetLinearVelocity = function(v) { if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody) { return; } this.m_linearVelocity.SetV(v); }; Box2D.Dynamics.b2Body.prototype.GetLinearVelocity = function() { return this.m_linearVelocity; }; Box2D.Dynamics.b2Body.prototype.SetAngularVelocity = function(omega) { if (omega === undefined) omega = 0; if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody) { return; } this.m_angularVelocity = omega; }; Box2D.Dynamics.b2Body.prototype.GetAngularVelocity = function() { return this.m_angularVelocity; }; Box2D.Dynamics.b2Body.prototype.GetDefinition = function() { var bd = new Box2D.Dynamics.b2BodyDef(); bd.type = this.GetType(); bd.allowSleep = this.m_allowSleep; bd.angle = this.GetAngle(); bd.angularDamping = this.m_angularDamping; bd.angularVelocity = this.m_angularVelocity; bd.fixedRotation = this.m_fixedRotation; bd.bullet = this.m_bullet; bd.active = this.m_active; bd.awake = this.m_awake; bd.linearDamping = this.m_linearDamping; bd.linearVelocity.SetV(this.GetLinearVelocity()); bd.position = this.GetPosition(); return bd; }; Box2D.Dynamics.b2Body.prototype.ApplyForce = function(force, point) { if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.SetAwake(true); this.m_force.x += force.x; this.m_force.y += force.y; this.m_torque += ((point.x - this.m_sweep.c.x) * force.y - (point.y - this.m_sweep.c.y) * force.x); }; Box2D.Dynamics.b2Body.prototype.ApplyTorque = function(torque) { if (torque === undefined) torque = 0; if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.SetAwake(true); this.m_torque += torque; }; Box2D.Dynamics.b2Body.prototype.ApplyImpulse = function(impulse, point) { if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.SetAwake(true); this.m_linearVelocity.x += this.m_invMass * impulse.x; this.m_linearVelocity.y += this.m_invMass * impulse.y; this.m_angularVelocity += this.m_invI * ((point.x - this.m_sweep.c.x) * impulse.y - (point.y - this.m_sweep.c.y) * impulse.x); }; Box2D.Dynamics.b2Body.prototype.Split = function(callback) { var linearVelocity = this.GetLinearVelocity().Copy(); var angularVelocity = this.GetAngularVelocity(); var center = this.GetWorldCenter(); var body1 = this; var body2 = this.m_world.CreateBody(this.GetDefinition()); var prev; for (var node = body1.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { var f = node.fixture; if (callback(f)) { body1.fixtureList.RemoveFixture(f); body2.fixtureList.AddFixture(f); } } body1.ResetMassData(); body2.ResetMassData(); var center1 = body1.GetWorldCenter(); var center2 = body2.GetWorldCenter(); var velocity1 = Box2D.Common.Math.b2Math.AddVV(linearVelocity, Box2D.Common.Math.b2Math.CrossFV(angularVelocity, Box2D.Common.Math.b2Math.SubtractVV(center1, center))); var velocity2 = Box2D.Common.Math.b2Math.AddVV(linearVelocity, Box2D.Common.Math.b2Math.CrossFV(angularVelocity, Box2D.Common.Math.b2Math.SubtractVV(center2, center))); body1.SetLinearVelocity(velocity1); body2.SetLinearVelocity(velocity2); body1.SetAngularVelocity(angularVelocity); body2.SetAngularVelocity(angularVelocity); body1.SynchronizeFixtures(); body2.SynchronizeFixtures(); return body2; }; Box2D.Dynamics.b2Body.prototype.Merge = function(other) { for (var node = other.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { this.fixtureList.AddFixture(node.fixture); other.fixtureList.RemoveFixture(node.fixture); } other.ResetMassData(); this.ResetMassData(); this.SynchronizeFixtures(); }; Box2D.Dynamics.b2Body.prototype.GetMass = function() { return this.m_mass; }; Box2D.Dynamics.b2Body.prototype.GetInertia = function() { return this.m_I; }; /** * @param {Box2D.Collision.Shapes.b2MassData=} massData * @return {!Box2D.Collision.Shapes.b2MassData} */ Box2D.Dynamics.b2Body.prototype.GetMassData = function(massData) { if (!massData) { massData = new Box2D.Collision.Shapes.b2MassData(); } massData.mass = this.m_mass; massData.I = this.m_I; massData.center.SetV(this.m_sweep.localCenter); return massData; }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData */ Box2D.Dynamics.b2Body.prototype.SetMassData = function(massData) { ; if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.m_invMass = 0.0; this.m_I = 0.0; this.m_invI = 0.0; this.m_mass = massData.mass; if (this.m_mass <= 0.0) { this.m_mass = 1.0; } this.m_invMass = 1.0 / this.m_mass; if (massData.I > 0.0 && !this.m_fixedRotation) { this.m_I = massData.I - this.m_mass * (massData.center.x * massData.center.x + massData.center.y * massData.center.y); this.m_invI = 1.0 / this.m_I; } var oldCenter = this.m_sweep.c.Copy(); this.m_sweep.localCenter.SetV(massData.center); this.m_sweep.c0.SetV(Box2D.Common.Math.b2Math.MulX(this.m_xf, this.m_sweep.localCenter)); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y)); this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x)); }; Box2D.Dynamics.b2Body.prototype.ResetMassData = function() { this.m_mass = 0.0; this.m_invMass = 0.0; this.m_I = 0.0; this.m_invI = 0.0; this.m_sweep.localCenter.SetZero(); if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody || this.m_type == Box2D.Dynamics.b2BodyDef.b2_kinematicBody) { return; } var center = Box2D.Common.Math.b2Vec2.Get(0, 0); for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { var f = node.fixture; if (f.m_density == 0.0) { continue; } var massData = f.GetMassData(); this.m_mass += massData.mass; center.x += massData.center.x * massData.mass; center.y += massData.center.y * massData.mass; this.m_I += massData.I; } if (this.m_mass > 0.0) { this.m_invMass = 1.0 / this.m_mass; center.x *= this.m_invMass; center.y *= this.m_invMass; } else { this.m_mass = 1.0; this.m_invMass = 1.0; } if (this.m_I > 0.0 && !this.m_fixedRotation) { this.m_I -= this.m_mass * (center.x * center.x + center.y * center.y); this.m_I *= this.m_inertiaScale; ; this.m_invI = 1.0 / this.m_I; } else { this.m_I = 0.0; this.m_invI = 0.0; } var oldCenter = this.m_sweep.c.Copy(); this.m_sweep.localCenter.SetV(center); this.m_sweep.c0.SetV(Box2D.Common.Math.b2Math.MulX(this.m_xf, this.m_sweep.localCenter)); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y)); this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x)); Box2D.Common.Math.b2Vec2.Free(center); Box2D.Common.Math.b2Vec2.Free(oldCenter); }; Box2D.Dynamics.b2Body.prototype.GetWorldPoint = function(localPoint) { var A = this.m_xf.R; var u = Box2D.Common.Math.b2Vec2.Get(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y); u.x += this.m_xf.position.x; u.y += this.m_xf.position.y; return u; }; Box2D.Dynamics.b2Body.prototype.GetWorldVector = function(localVector) { return Box2D.Common.Math.b2Math.MulMV(this.m_xf.R, localVector); }; Box2D.Dynamics.b2Body.prototype.GetLocalPoint = function(worldPoint) { return Box2D.Common.Math.b2Math.MulXT(this.m_xf, worldPoint); }; Box2D.Dynamics.b2Body.prototype.GetLocalVector = function(worldVector) { return Box2D.Common.Math.b2Math.MulTMV(this.m_xf.R, worldVector); }; Box2D.Dynamics.b2Body.prototype.GetLinearVelocityFromWorldPoint = function(worldPoint) { return Box2D.Common.Math.b2Vec2.Get(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x)); }; Box2D.Dynamics.b2Body.prototype.GetLinearVelocityFromLocalPoint = function(localPoint) { var A = this.m_xf.R; var worldPoint = Box2D.Common.Math.b2Vec2.Get(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y); worldPoint.x += this.m_xf.position.x; worldPoint.y += this.m_xf.position.y; var velocity = Box2D.Common.Math.b2Vec2.Get(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x)); Box2D.Common.Math.b2Vec2.Free(worldPoint); return velocity; }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetLinearDamping = function() { return this.m_linearDamping; }; /** * @param {number} linearDamping */ Box2D.Dynamics.b2Body.prototype.SetLinearDamping = function(linearDamping) { this.m_linearDamping = linearDamping; }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetAngularDamping = function() { return this.m_angularDamping; }; /** * @param {number} angularDamping */ Box2D.Dynamics.b2Body.prototype.SetAngularDamping = function(angularDamping) { this.m_angularDamping = angularDamping; }; /** * @param {number} type */ Box2D.Dynamics.b2Body.prototype.SetType = function(type) { if (this.m_type == type) { return; } this.m_type = type; this.ResetMassData(); if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody) { this.m_linearVelocity.SetZero(); this.m_angularVelocity = 0.0; } this.SetAwake(true); this.m_force.SetZero(); this.m_torque = 0.0; for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.FlagForFiltering(); } for (var i = 0; i < this.m_lists.length; i++) { this.m_lists[i].UpdateBody(this); } }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetType = function() { return this.m_type; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetBullet = function(flag) { this.m_bullet = flag; }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsBullet = function() { return this.m_bullet; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetSleepingAllowed = function(flag) { this.m_allowSleep = flag; if (!flag) { this.SetAwake(true); } }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetAwake = function(flag) { if (this.m_awake != flag) { this.m_awake = flag; this.m_sleepTime = 0; if (!flag) { this.m_linearVelocity.SetZero(); this.m_angularVelocity = 0.0; this.m_force.SetZero(); this.m_torque = 0.0; } for (var i = 0; i < this.m_lists.length; i++) { this.m_lists[i].UpdateBody(this); } } }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsAwake = function() { return this.m_awake; }; /** * @param {boolean} fixed */ Box2D.Dynamics.b2Body.prototype.SetFixedRotation = function(fixed) { this.m_fixedRotation = fixed; this.ResetMassData(); }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsFixedRotation = function() { return this.m_fixedRotation; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetActive = function(flag) { if (flag == this.m_active) { return; } if (flag) { this.m_active = true; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.CreateProxy(broadPhase, this.m_xf); } } else { this.m_active = false; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.DestroyProxy(broadPhase); } for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { this.m_world.m_contactManager.Destroy(contactNode.contact); } } for (var i = 0; i < this.m_lists.length; i++) { this.m_lists[i].UpdateBody(this); } }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsActive = function() { return this.m_active; }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsSleepingAllowed = function() { return this.m_allowSleep; }; Box2D.Dynamics.b2Body.prototype.GetFixtureList = function() { return this.fixtureList; }; Box2D.Dynamics.b2Body.prototype.GetJointList = function() { return this.m_jointList; }; Box2D.Dynamics.b2Body.prototype.GetControllerList = function() { return this.controllerList; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.b2Body.prototype.AddController = function(controller) { this.controllerList.AddController(controller); }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.b2Body.prototype.RemoveController = function(controller) { this.controllerList.RemoveController(controller); }; Box2D.Dynamics.b2Body.prototype.GetContactList = function() { return this.contactList; }; Box2D.Dynamics.b2Body.prototype.GetWorld = function() { return this.m_world; }; Box2D.Dynamics.b2Body.prototype.SynchronizeFixtures = function() { var xf1 = Box2D.Dynamics.b2Body.s_xf1; xf1.R.Set(this.m_sweep.a0); var tMat = xf1.R; var tVec = this.m_sweep.localCenter; xf1.position.x = this.m_sweep.c0.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); xf1.position.y = this.m_sweep.c0.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); var f; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.Synchronize(broadPhase, xf1, this.m_xf); } }; Box2D.Dynamics.b2Body.prototype.SynchronizeTransform = function() { this.m_xf.R.Set(this.m_sweep.a); var tMat = this.m_xf.R; var tVec = this.m_sweep.localCenter; this.m_xf.position.x = this.m_sweep.c.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); this.m_xf.position.y = this.m_sweep.c.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); }; Box2D.Dynamics.b2Body.prototype.ShouldCollide = function(other) { if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody && other.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return false; } for (var jn = this.m_jointList; jn; jn = jn.next) { if (jn.other == other) if (jn.joint.m_collideConnected == false) { return false; } } return true; }; /** * @param {number} t */ Box2D.Dynamics.b2Body.prototype.Advance = function(t) { this.m_sweep.Advance(t); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_sweep.a = this.m_sweep.a0; this.SynchronizeTransform(); }; /** * @type {number} * @private */ Box2D.Dynamics.b2Body.NEXT_ID = 0; /** * @constructor */ Box2D.Dynamics.b2BodyDef = function() { /** @type {!Box2D.Common.Math.b2Vec2} */ this.position = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {!Box2D.Common.Math.b2Vec2} */ this.linearVelocity = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {number} */ this.angle = 0.0; /** @type {number} */ this.angularVelocity = 0.0; /** @type {number} */ this.linearDamping = 0.0; /** @type {number} */ this.angularDamping = 0.0; /** @type {boolean} */ this.allowSleep = true; /** @type {boolean} */ this.awake = true; /** @type {boolean} */ this.fixedRotation = false; /** @type {boolean} */ this.bullet = false; /** @type {number} */ this.type = Box2D.Dynamics.b2BodyDef.b2_staticBody; /** @type {boolean} */ this.active = true; /** @type {number} */ this.inertiaScale = 1.0; }; /** * @const * @type {number} */ Box2D.Dynamics.b2BodyDef.b2_staticBody = 0; /** * @const * @type {number} */ Box2D.Dynamics.b2BodyDef.b2_kinematicBody = 1; /** * @const * @type {number} */ Box2D.Dynamics.b2BodyDef.b2_dynamicBody = 2; /** * @constructor */ Box2D.Dynamics.b2BodyList = function() { /** * @private * @type {Array.<Box2D.Dynamics.b2BodyListNode>} */ this.bodyFirstNodes = []; for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { this.bodyFirstNodes[i] = null; } /** * @private * @type {Array.<Box2D.Dynamics.b2BodyListNode>} */ this.bodyLastNodes = []; for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { this.bodyLastNodes[i] = null; } /** * @private * @type {Object.<Array.<Box2D.Dynamics.b2BodyListNode>>} */ this.bodyNodeLookup = {}; /** * @private * @type {number} */ this.bodyCount = 0; }; /** * @param {number} type * @return {Box2D.Dynamics.b2BodyListNode} */ Box2D.Dynamics.b2BodyList.prototype.GetFirstNode = function(type) { return this.bodyFirstNodes[type]; }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2BodyList.prototype.AddBody = function(body) { var bodyID = body.ID; if (this.bodyNodeLookup[bodyID] == null) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.allBodies); this.UpdateBody(body); body.m_lists.push(this); this.bodyCount++; } }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2BodyList.prototype.UpdateBody = function(body) { var type = body.GetType(); var bodyID = body.ID; var awake = body.IsAwake(); var active = body.IsActive(); if (type == Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.dynamicBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.dynamicBodies); } if (type != Box2D.Dynamics.b2BodyDef.b2_staticBody) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticBodies); } if (type != Box2D.Dynamics.b2BodyDef.b2_staticBody && active && awake) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); } if (awake) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); } if (active) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.activeBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.activeBodies); } }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2BodyList.prototype.RemoveBody = function(body) { var bodyID = body.ID; if (this.bodyNodeLookup[bodyID] != null) { cr.arrayFindRemove(body.m_lists, this); for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { this.RemoveNode(bodyID, i); } delete this.bodyNodeLookup[bodyID]; this.bodyCount--; } }; /** * @param {string} bodyID * @param {number} type */ Box2D.Dynamics.b2BodyList.prototype.RemoveNode = function(bodyID, type) { var nodeList = this.bodyNodeLookup[bodyID]; if (nodeList == null) { return; } var node = nodeList[type]; if (node == null) { return; } nodeList[type] = null; var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.bodyFirstNodes[type] = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.bodyLastNodes[type] = prevNode; } else { nextNode.SetPreviousNode(prevNode); } }; /** * @param {!Box2D.Dynamics.b2Body} body * @param {string} bodyID * @param {number} type */ Box2D.Dynamics.b2BodyList.prototype.CreateNode = function(body, bodyID, type) { var nodeList = this.bodyNodeLookup[bodyID]; if (nodeList == null) { nodeList = []; for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { nodeList[i] = null; } this.bodyNodeLookup[bodyID] = nodeList; } if (nodeList[type] == null) { nodeList[type] = new Box2D.Dynamics.b2BodyListNode(body); var prevNode = this.bodyLastNodes[type]; if (prevNode != null) { prevNode.SetNextNode(nodeList[type]); } else { this.bodyFirstNodes[type] = nodeList[type]; } nodeList[type].SetPreviousNode(prevNode); this.bodyLastNodes[type] = nodeList[type]; } }; /** * @return {number} */ Box2D.Dynamics.b2BodyList.prototype.GetBodyCount = function() { return this.bodyCount; }; /** * @enum {number} */ Box2D.Dynamics.b2BodyList.TYPES = { dynamicBodies: 0, nonStaticBodies: 1, activeBodies: 2, nonStaticActiveAwakeBodies: 3, awakeBodies: 4, allBodies: 5 // Assumed to be last by above code }; /** * @param {!Box2D.Dynamics.b2Body} body * @constructor */ Box2D.Dynamics.b2BodyListNode = function(body) { /** * @const * @type {!Box2D.Dynamics.b2Body} */ this.body = body; /** * @private * @type {Box2D.Dynamics.b2BodyListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.b2BodyListNode} */ this.previous = null; }; /** * @param {Box2D.Dynamics.b2BodyListNode} node */ Box2D.Dynamics.b2BodyListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.b2BodyListNode} node */ Box2D.Dynamics.b2BodyListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2BodyListNode.prototype.GetBody = function() { return this.body; }; /** * @return {Box2D.Dynamics.b2BodyListNode} */ Box2D.Dynamics.b2BodyListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.b2BodyListNode} */ Box2D.Dynamics.b2BodyListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @constructor */ Box2D.Dynamics.b2ContactFilter = function() {}; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @return {boolean} */ Box2D.Dynamics.b2ContactFilter.prototype.ShouldCollide = function(fixtureA, fixtureB) { var filter1 = fixtureA.GetFilterData(); var filter2 = fixtureB.GetFilterData(); if (filter1.groupIndex == filter2.groupIndex && filter1.groupIndex != 0) { return filter1.groupIndex > 0; } return (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0; }; /** @type {!Box2D.Dynamics.b2ContactFilter} */ Box2D.Dynamics.b2ContactFilter.b2_defaultFilter = new Box2D.Dynamics.b2ContactFilter(); /** * @constructor */ Box2D.Dynamics.b2ContactImpulse = function () { this.normalImpulses = []; this.tangentImpulses = []; }; /** * @constructor */ Box2D.Dynamics.b2ContactListener = function () {}; Box2D.Dynamics.b2ContactListener.prototype.BeginContact = function (contact) {}; Box2D.Dynamics.b2ContactListener.prototype.EndContact = function (contact) {}; Box2D.Dynamics.b2ContactListener.prototype.PreSolve = function (contact, oldManifold) {}; Box2D.Dynamics.b2ContactListener.prototype.PostSolve = function (contact, impulse) {}; /** * @param {!Box2D.Dynamics.b2World} world * @constructor */ Box2D.Dynamics.b2ContactManager = function(world) { /** * @private * @const * @type {!Box2D.Dynamics.b2World} */ this.m_world = world; /** * @private * @type {!Box2D.Dynamics.b2ContactFilter} */ this.m_contactFilter = Box2D.Dynamics.b2ContactFilter.b2_defaultFilter; /** * @private * @type {!Box2D.Dynamics.b2ContactListener} */ this.m_contactListener = Box2D.Dynamics.b2ContactListener.b2_defaultListener; /** * @private * @const * @type {!Box2D.Dynamics.Contacts.b2ContactFactory} */ this.m_contactFactory = new Box2D.Dynamics.Contacts.b2ContactFactory(); /** * @private * @type {!Box2D.Collision.b2DynamicTreeBroadPhase} */ this.m_broadPhase = new Box2D.Collision.b2DynamicTreeBroadPhase(); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.b2ContactManager.prototype.AddPair = function (fixtureA, fixtureB) { var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); if (bodyA == bodyB) { return; } if (!bodyB.ShouldCollide(bodyA)) { return; } if (!this.m_contactFilter.ShouldCollide(fixtureA, fixtureB)) { return; } for (var contactNode = bodyB.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { var fA = contactNode.contact.m_fixtureA; if (fA == fixtureA) { var fB = contactNode.contact.m_fixtureB; if (fB == fixtureB) { return; } } else if (fA == fixtureB) { var fB = contactNode.contact.m_fixtureB; if (fB == fixtureA) { return; } } } var c = this.m_contactFactory.Create(fixtureA, fixtureB); }; Box2D.Dynamics.b2ContactManager.prototype.FindNewContacts = function () { var self = this; /** @type {function(!Box2D.Dynamics.b2Fixture, !Box2D.Dynamics.b2Fixture)} */ var addPairCallback = function(fixtureA, fixtureB) { self.AddPair(fixtureA, fixtureB) }; this.m_broadPhase.UpdatePairs(addPairCallback); }; Box2D.Dynamics.b2ContactManager.prototype.Destroy = function (c) { var fixtureA = c.m_fixtureA; var fixtureB = c.m_fixtureB; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); if (c.touching) { this.m_contactListener.EndContact(c); } if (c.m_manifold.m_pointCount > 0) { c.m_fixtureA.GetBody().SetAwake(true); c.m_fixtureB.GetBody().SetAwake(true); } c.RemoveFromLists(); this.m_contactFactory.Destroy(c); }; Box2D.Dynamics.b2ContactManager.prototype.Collide = function() { for (var contactNode = this.m_world.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { var c = contactNode.contact; var fixtureA = c.m_fixtureA; var fixtureB = c.m_fixtureB; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); if (bodyA.IsAwake() == false && bodyB.IsAwake() == false) { continue; } if (c.IsFiltering()) { if (bodyB.ShouldCollide(bodyA) == false) { this.Destroy(c); continue; } if (this.m_contactFilter.ShouldCollide(fixtureA, fixtureB) == false) { this.Destroy(c); continue; } c.ClearFiltering(); } var proxyA = fixtureA.m_proxy; var proxyB = fixtureB.m_proxy; var overlap = this.m_broadPhase.TestOverlap(proxyA, proxyB); if (overlap == false) { this.Destroy(c); continue; } c.Update(this.m_contactListener); } }; /** * @constructor */ Box2D.Dynamics.b2DestructionListener = function () {}; Box2D.Dynamics.b2DestructionListener.prototype.SayGoodbyeJoint = function (joint) {}; Box2D.Dynamics.b2DestructionListener.prototype.SayGoodbyeFixture = function (fixture) {}; /** * @constructor */ Box2D.Dynamics.b2FilterData = function () { this.categoryBits = 0x0001; this.maskBits = 0xFFFF; this.groupIndex = 0; }; /** * @return {!Box2D.Dynamics.b2FilterData} */ Box2D.Dynamics.b2FilterData.prototype.Copy = function () { var copy = new Box2D.Dynamics.b2FilterData(); copy.categoryBits = this.categoryBits; copy.maskBits = this.maskBits; copy.groupIndex = this.groupIndex; return copy; }; /** * @param {!Box2D.Dynamics.b2Body} body * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Dynamics.b2FixtureDef} def * @constructor */ Box2D.Dynamics.b2Fixture = function(body, xf, def) { /** * @const * @private * @type {string} */ this.ID = "Fixture" + Box2D.Dynamics.b2Fixture.NEXT_ID++; /** * @private * @type {!Box2D.Dynamics.b2FilterData} */ this.m_filter = def.filter.Copy(); /** * @private * @type {!Box2D.Collision.b2AABB} */ this.m_aabb = Box2D.Collision.b2AABB.Get(); /** * @private * @type {!Box2D.Dynamics.b2Body} */ this.m_body = body; /** * @private * @type {!Box2D.Collision.Shapes.b2Shape} */ this.m_shape = def.shape.Copy(); /** * @private * @type {number} */ this.m_density = def.density; /** * @private * @type {number} */ this.m_friction = def.friction; /** * @private * @type {number} */ this.m_restitution = def.restitution; /** * @private * @type {boolean} */ this.m_isSensor = def.isSensor; }; /** * @return {!Box2D.Collision.Shapes.b2Shape} */ Box2D.Dynamics.b2Fixture.prototype.GetShape = function() { return this.m_shape; }; /** * @param {boolean} sensor */ Box2D.Dynamics.b2Fixture.prototype.SetSensor = function(sensor) { if (this.m_isSensor == sensor) { return; } this.m_isSensor = sensor; if (this.m_body == null) { return; } for (var contactNode = this.m_body.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { var fixtureA = contactNode.contact.m_fixtureA; var fixtureB = contactNode.contact.m_fixtureB; if (fixtureA == this || fixtureB == this) { contactNode.contact.SetSensor(fixtureA.sensor || fixtureB.sensor); } } }; /** * @return {boolean} */ Box2D.Dynamics.b2Fixture.prototype.IsSensor = function() { return this.m_isSensor; }; /** * @param {!Box2D.Dynamics.b2FilterData} filter */ Box2D.Dynamics.b2Fixture.prototype.SetFilterData = function(filter) { this.m_filter = filter.Copy(); if (this.m_body == null) { return; } for (var contactNode = this.m_body.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (contactNode.contact.m_fixtureA == this || contactNode.contact.m_fixtureB == this) { contactNode.contact.FlagForFiltering(); } } }; /** * @return {!Box2D.Dynamics.b2FilterData} */ Box2D.Dynamics.b2Fixture.prototype.GetFilterData = function() { return this.m_filter.Copy(); }; /** * @return {Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2Fixture.prototype.GetBody = function() { return this.m_body; }; /** * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Dynamics.b2Fixture.prototype.TestPoint = function(p) { return this.m_shape.TestPoint(this.m_body.GetTransform(), p); }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @return {boolean} */ Box2D.Dynamics.b2Fixture.prototype.RayCast = function(output, input) { return this.m_shape.RayCast(output, input, this.m_body.GetTransform()); }; /** * @param {Box2D.Collision.Shapes.b2MassData=} massData * @return {!Box2D.Collision.Shapes.b2MassData} */ Box2D.Dynamics.b2Fixture.prototype.GetMassData = function(massData) { if (!massData) { massData = new Box2D.Collision.Shapes.b2MassData(); } this.m_shape.ComputeMass(massData, this.m_density); return massData; }; /** * @param {number} density */ Box2D.Dynamics.b2Fixture.prototype.SetDensity = function(density) { this.m_density = density; }; /** * @return {number} */ Box2D.Dynamics.b2Fixture.prototype.GetDensity = function() { return this.m_density; }; /** * @return {number} */ Box2D.Dynamics.b2Fixture.prototype.GetFriction = function() { return this.m_friction; }; /** * @param {number} friction */ Box2D.Dynamics.b2Fixture.prototype.SetFriction = function(friction) { this.m_friction = friction; }; /** * @return {number} */ Box2D.Dynamics.b2Fixture.prototype.GetRestitution = function() { return this.m_restitution; }; /** * @param {number} restitution */ Box2D.Dynamics.b2Fixture.prototype.SetRestitution = function(restitution) { this.m_restitution = restitution; }; /** * @return {!Box2D.Collision.b2AABB} */ Box2D.Dynamics.b2Fixture.prototype.GetAABB = function() { return this.m_aabb; }; Box2D.Dynamics.b2Fixture.prototype.Destroy = function() { Box2D.Collision.b2AABB.Free(this.m_aabb); }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase * @param {!Box2D.Common.Math.b2Transform} xf */ Box2D.Dynamics.b2Fixture.prototype.CreateProxy = function(broadPhase, xf) { this.m_shape.ComputeAABB(this.m_aabb, xf); this.m_proxy = broadPhase.CreateProxy(this.m_aabb, this); }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase */ Box2D.Dynamics.b2Fixture.prototype.DestroyProxy = function(broadPhase) { if (this.m_proxy == null) { return; } broadPhase.DestroyProxy(this.m_proxy); this.m_proxy = null; }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase * @param {!Box2D.Common.Math.b2Transform} transform1 * @param {!Box2D.Common.Math.b2Transform} transform2 */ Box2D.Dynamics.b2Fixture.prototype.Synchronize = function(broadPhase, transform1, transform2) { if (!this.m_proxy) return; var aabb1 = Box2D.Collision.b2AABB.Get(); var aabb2 = Box2D.Collision.b2AABB.Get(); this.m_shape.ComputeAABB(aabb1, transform1); this.m_shape.ComputeAABB(aabb2, transform2); this.m_aabb.Combine(aabb1, aabb2); Box2D.Collision.b2AABB.Free(aabb1); Box2D.Collision.b2AABB.Free(aabb2); var displacement = Box2D.Common.Math.b2Math.SubtractVV(transform2.position, transform1.position); broadPhase.MoveProxy(this.m_proxy, this.m_aabb, displacement); Box2D.Common.Math.b2Vec2.Free(displacement); }; /** * @type {number} * @private */ Box2D.Dynamics.b2Fixture.NEXT_ID = 0; /** * @constructor */ Box2D.Dynamics.b2FixtureDef = function () { /** * @type {!Box2D.Dynamics.b2FilterData} */ this.filter = new Box2D.Dynamics.b2FilterData(); this.filter.categoryBits = 0x0001; this.filter.maskBits = 0xFFFF; this.filter.groupIndex = 0; /** * @type {Box2D.Collision.Shapes.b2Shape} */ this.shape = null; /** * @type {number} */ this.friction = 0.2; /** * @type {number} */ this.restitution = 0.0; /** * @type {number} */ this.density = 0.0; /** * @type {boolean} */ this.isSensor = false; }; /** * @constructor */ Box2D.Dynamics.b2FixtureList = function() { /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.fixtureFirstNode = null; /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.fixtureLastNode = null; /** * @private * @type {Object.<Box2D.Dynamics.b2FixtureListNode>} */ this.fixtureNodeLookup = {}; /** * @private * @type {number} */ this.fixtureCount = 0; }; /** * @return {Box2D.Dynamics.b2FixtureListNode} */ Box2D.Dynamics.b2FixtureList.prototype.GetFirstNode = function() { return this.fixtureFirstNode; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixture */ Box2D.Dynamics.b2FixtureList.prototype.AddFixture = function(fixture) { var fixtureID = fixture.ID; if (this.fixtureNodeLookup[fixtureID] == null) { var node = new Box2D.Dynamics.b2FixtureListNode(fixture); var prevNode = this.fixtureLastNode; if (prevNode != null) { prevNode.SetNextNode(node); } else { this.fixtureFirstNode = node; } node.SetPreviousNode(prevNode); this.fixtureLastNode = node; this.fixtureNodeLookup[fixtureID] = node; this.fixtureCount++; } }; /** * @param {!Box2D.Dynamics.b2Fixture} fixture */ Box2D.Dynamics.b2FixtureList.prototype.RemoveFixture = function(fixture) { var fixtureID = fixture.ID; var node = this.fixtureNodeLookup[fixtureID]; if (node == null) { return; } var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.fixtureFirstNode = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.fixtureLastNode = prevNode; } else { nextNode.SetPreviousNode(prevNode); } delete this.fixtureNodeLookup[fixtureID]; this.fixtureCount--; }; /** * @return {number} */ Box2D.Dynamics.b2FixtureList.prototype.GetFixtureCount = function() { return this.fixtureCount; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixture * @constructor */ Box2D.Dynamics.b2FixtureListNode = function(fixture) { /** * @const * @type {!Box2D.Dynamics.b2Fixture} */ this.fixture = fixture; /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.previous = null; }; /** * @param {Box2D.Dynamics.b2FixtureListNode} node */ Box2D.Dynamics.b2FixtureListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.b2FixtureListNode} node */ Box2D.Dynamics.b2FixtureListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {Box2D.Dynamics.b2FixtureListNode} */ Box2D.Dynamics.b2FixtureListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.b2FixtureListNode} */ Box2D.Dynamics.b2FixtureListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @param {!Box2D.Dynamics.b2ContactListener} listener * @param {!Box2D.Dynamics.Contacts.b2ContactSolver} contactSolver * @constructor */ Box2D.Dynamics.b2Island = function(listener, contactSolver) { /** * @private * @type {!Box2D.Dynamics.b2ContactListener} */ this.m_listener = listener; /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactSolver} */ this.m_contactSolver = contactSolver; /** * @private * @type {Array.<!Box2D.Dynamics.b2Body>} */ this.m_bodies = []; /** * @private * @type {Array.<!Box2D.Dynamics.b2Body>} */ this.m_dynamicBodies = []; /** * @private * @type {Array.<!Box2D.Dynamics.b2Body>} */ this.m_nonStaticBodies = []; /** * @private * @type {Array.<!Box2D.Dynamics.Contacts.b2Contact>} */ this.m_contacts = []; /** * @private * @type {Array.<!Box2D.Dynamics.Joints.b2Joint>} */ this.m_joints = []; }; Box2D.Dynamics.b2Island.prototype.Clear = function() { this.m_bodies = []; this.m_dynamicBodies = []; this.m_nonStaticBodies = []; this.m_contacts = []; this.m_joints = []; }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {!Box2D.Common.Math.b2Vec2} gravity * @param {boolean} allowSleep */ Box2D.Dynamics.b2Island.prototype.Solve = function(step, gravity, allowSleep) { this._InitializeVelocities(step, gravity); this.m_contactSolver.Initialize(step, this.m_contacts, this.m_contacts.length); this._SolveVelocityConstraints(step); this._SolveBodies(step); this._SolvePositionConstraints(step); this.Report(this.m_contactSolver.m_constraints); if (allowSleep) { this._SleepIfTired(step); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {!Box2D.Common.Math.b2Vec2} gravity * @private */ Box2D.Dynamics.b2Island.prototype._InitializeVelocities = function(step, gravity) { for (var i = 0; i < this.m_dynamicBodies.length; i++) { var b = this.m_dynamicBodies[i]; b.m_linearVelocity.x += step.dt * (gravity.x + b.m_invMass * b.m_force.x); b.m_linearVelocity.y += step.dt * (gravity.y + b.m_invMass * b.m_force.y); b.m_angularVelocity += step.dt * b.m_invI * b.m_torque; b.m_linearVelocity.Multiply(Box2D.Common.Math.b2Math.Clamp(1.0 - step.dt * b.m_linearDamping, 0.0, 1.0)); b.m_angularVelocity *= Box2D.Common.Math.b2Math.Clamp(1.0 - step.dt * b.m_angularDamping, 0.0, 1.0); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SolveVelocityConstraints = function(step) { this.m_contactSolver.InitVelocityConstraints(step); for (var jointInitIdx = 0; jointInitIdx < this.m_joints.length; jointInitIdx++) { this.m_joints[jointInitIdx].InitVelocityConstraints(step); } for (var velocityIterationCnt = 0; velocityIterationCnt < step.velocityIterations; velocityIterationCnt++) { for (var jointSolveIdx = 0; jointSolveIdx < this.m_joints.length; jointSolveIdx++) { this.m_joints[jointSolveIdx].SolveVelocityConstraints(step); } this.m_contactSolver.SolveVelocityConstraints(); } for (var jointFinalizeIdx = 0; jointFinalizeIdx < this.m_joints.length; jointFinalizeIdx++) { this.m_joints[jointFinalizeIdx].FinalizeVelocityConstraints(); } this.m_contactSolver.FinalizeVelocityConstraints(); }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SolveBodies = function(step) { for (var i = 0; i < this.m_nonStaticBodies.length; ++i) { var b = this.m_nonStaticBodies[i]; var translationX = step.dt * b.m_linearVelocity.x; var translationY = step.dt * b.m_linearVelocity.y; if ((translationX * translationX + translationY * translationY) > Box2D.Common.b2Settings.b2_maxTranslationSquared) { b.m_linearVelocity.Normalize(); b.m_linearVelocity.x *= Box2D.Common.b2Settings.b2_maxTranslation * step.inv_dt; b.m_linearVelocity.y *= Box2D.Common.b2Settings.b2_maxTranslation * step.inv_dt; } var rotation = step.dt * b.m_angularVelocity; if (rotation * rotation > Box2D.Common.b2Settings.b2_maxRotationSquared) { if (b.m_angularVelocity < 0.0) { b.m_angularVelocity = -Box2D.Common.b2Settings.b2_maxRotation * step.inv_dt; } else { b.m_angularVelocity = Box2D.Common.b2Settings.b2_maxRotation * step.inv_dt; } } b.m_sweep.c0.SetV(b.m_sweep.c); b.m_sweep.a0 = b.m_sweep.a; b.m_sweep.c.x += step.dt * b.m_linearVelocity.x; b.m_sweep.c.y += step.dt * b.m_linearVelocity.y; b.m_sweep.a += step.dt * b.m_angularVelocity; b.SynchronizeTransform(); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SolvePositionConstraints = function(step) { for (var i = 0; i < step.positionIterations; i++) { var contactsOkay = this.m_contactSolver.SolvePositionConstraints(Box2D.Common.b2Settings.b2_contactBaumgarte); var jointsOkay = true; for (var j = 0; j < this.m_joints.length; j++) { var jointOkay = this.m_joints[j].SolvePositionConstraints(Box2D.Common.b2Settings.b2_contactBaumgarte); jointsOkay = jointsOkay && jointOkay; } if (contactsOkay && jointsOkay) { break; } } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SleepIfTired = function(step) { var minSleepTime = Number.MAX_VALUE; for (var nonstaticBodyIdx = 0; nonstaticBodyIdx < this.m_nonStaticBodies.length; nonstaticBodyIdx++) { var b = this.m_nonStaticBodies[nonstaticBodyIdx]; if (!b.m_allowSleep || Math.abs(b.m_angularVelocity) > Box2D.Common.b2Settings.b2_angularSleepTolerance || Box2D.Common.Math.b2Math.Dot(b.m_linearVelocity, b.m_linearVelocity) > Box2D.Common.b2Settings.b2_linearSleepToleranceSquared) { b.m_sleepTime = 0.0; minSleepTime = 0.0; } else { b.m_sleepTime += step.dt; minSleepTime = Math.min(minSleepTime, b.m_sleepTime); } } if (minSleepTime >= Box2D.Common.b2Settings.b2_timeToSleep) { for (var bodyIdx = 0; bodyIdx < this.m_bodies.length; bodyIdx++) { this.m_bodies[bodyIdx].SetAwake(false); } } }; /** * @param {!Box2D.Dynamics.b2TimeStep} subStep */ Box2D.Dynamics.b2Island.prototype.SolveTOI = function(subStep) { var i = 0; var j = 0; this.m_contactSolver.Initialize(subStep, this.m_contacts, this.m_contacts.length); var contactSolver = this.m_contactSolver; for (i = 0; i < this.m_joints.length; ++i) { this.m_joints[i].InitVelocityConstraints(subStep); } for (i = 0; i < subStep.velocityIterations; ++i) { contactSolver.SolveVelocityConstraints(); for (j = 0; j < this.m_joints.length; ++j) { this.m_joints[j].SolveVelocityConstraints(subStep); } } for (i = 0; i < this.m_nonStaticBodies.length; ++i) { var b = this.m_nonStaticBodies[i]; var translationX = subStep.dt * b.m_linearVelocity.x; var translationY = subStep.dt * b.m_linearVelocity.y; if ((translationX * translationX + translationY * translationY) > Box2D.Common.b2Settings.b2_maxTranslationSquared) { b.m_linearVelocity.Normalize(); b.m_linearVelocity.x *= Box2D.Common.b2Settings.b2_maxTranslation * subStep.inv_dt; b.m_linearVelocity.y *= Box2D.Common.b2Settings.b2_maxTranslation * subStep.inv_dt; } var rotation = subStep.dt * b.m_angularVelocity; if (rotation * rotation > Box2D.Common.b2Settings.b2_maxRotationSquared) { if (b.m_angularVelocity < 0.0) { b.m_angularVelocity = (-Box2D.Common.b2Settings.b2_maxRotation * subStep.inv_dt); } else { b.m_angularVelocity = Box2D.Common.b2Settings.b2_maxRotation * subStep.inv_dt; } } b.m_sweep.c0.SetV(b.m_sweep.c); b.m_sweep.a0 = b.m_sweep.a; b.m_sweep.c.x += subStep.dt * b.m_linearVelocity.x; b.m_sweep.c.y += subStep.dt * b.m_linearVelocity.y; b.m_sweep.a += subStep.dt * b.m_angularVelocity; b.SynchronizeTransform(); } var k_toiBaumgarte = 0.75; for (i = 0; i < subStep.positionIterations; ++i) { var contactsOkay = contactSolver.SolvePositionConstraints(k_toiBaumgarte); var jointsOkay = true; for (j = 0; j < this.m_joints.length; ++j) { var jointOkay = this.m_joints[j].SolvePositionConstraints(Box2D.Common.b2Settings.b2_contactBaumgarte); jointsOkay = jointsOkay && jointOkay; } if (contactsOkay && jointsOkay) { break; } } this.Report(contactSolver.m_constraints); }; /** * @param {Array.<!Box2D.Dynamics.Contacts.b2ContactConstraint>} constraints */ Box2D.Dynamics.b2Island.prototype.Report = function(constraints) { if (this.m_listener == null) { return; } for (var i = 0; i < this.m_contacts.length; ++i) { var c = this.m_contacts[i]; var cc = constraints[i]; var impulse = new Box2D.Dynamics.b2ContactImpulse(); for (var j = 0; j < cc.pointCount; ++j) { impulse.normalImpulses[j] = cc.points[j].normalImpulse; impulse.tangentImpulses[j] = cc.points[j].tangentImpulse; } this.m_listener.PostSolve(c, impulse); } }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2Island.prototype.AddBody = function(body) { this.m_bodies.push(body); if (body.GetType() != Box2D.Dynamics.b2BodyDef.b2_staticBody) { this.m_nonStaticBodies.push(body); if (body.GetType() == Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { this.m_dynamicBodies.push(body); } } }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.b2Island.prototype.AddContact = function(contact) { this.m_contacts.push(contact); }; /** * @param {!Box2D.Dynamics.Joints.b2Joint} joint */ Box2D.Dynamics.b2Island.prototype.AddJoint = function(joint) { this.m_joints.push(joint); }; /** * @param {number} dt * @param {number} dtRatio * @param {number} positionIterations * @param {number} velocityIterations * @param {boolean} warmStarting * @constructor */ Box2D.Dynamics.b2TimeStep = function(dt, dtRatio, positionIterations, velocityIterations, warmStarting) { /** * @const * @type {number} */ this.dt = dt; var invDT = 0; if (dt > 0) { invDT = 1 / dt; } /** * @const * @type {number} */ this.inv_dt = invDT; /** * @const * @type {number} */ this.dtRatio = dtRatio; /** * @const * @type {number} */ this.positionIterations = positionIterations; /** * @const * @type {number} */ this.velocityIterations = velocityIterations; /** * @const * @type {boolean} */ this.warmStarting = warmStarting; }; /** * @param {!Box2D.Common.Math.b2Vec2} gravity * @param {boolean} doSleep * @constructor */ Box2D.Dynamics.b2World = function(gravity, doSleep) { /** * @private * @type {!Box2D.Dynamics.b2ContactManager} */ this.m_contactManager = new Box2D.Dynamics.b2ContactManager(this); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactSolver} */ this.m_contactSolver = new Box2D.Dynamics.Contacts.b2ContactSolver(); /** * @private * @type {boolean} */ this.m_isLocked = false; /** * @private * @type {boolean} */ this.m_newFixture = false; /** * @private * @type {Box2D.Dynamics.b2DestructionListener} */ this.m_destructionListener = null; /** * @private * @type {!Box2D.Dynamics.b2BodyList} */ this.bodyList = new Box2D.Dynamics.b2BodyList(); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.contactList = new Box2D.Dynamics.Contacts.b2ContactList(); /** * @private * @type {Box2D.Dynamics.Joints.b2Joint} */ this.m_jointList = null; /** * @private * @type {!Box2D.Dynamics.Controllers.b2ControllerList} */ this.controllerList = new Box2D.Dynamics.Controllers.b2ControllerList(); /** * @private * @type {number} */ this.m_jointCount = 0; /** * @private * @type {boolean} */ this.m_warmStarting = true; /** * @private * @type {boolean} */ this.m_continuousPhysics = true; /** * @private * @type {boolean} */ this.m_allowSleep = doSleep; /** * @private * @type {!Box2D.Common.Math.b2Vec2} */ this.m_gravity = gravity; /** * @private * @type {number} */ this.m_inv_dt0 = 0.0; /** * @private * @type {!Box2D.Dynamics.b2Body} */ this.m_groundBody = this.CreateBody(new Box2D.Dynamics.b2BodyDef()); }; /** * @const * @type {number} */ Box2D.Dynamics.b2World.MAX_TOI = 1.0 - 100.0 * Number.MIN_VALUE; /** * @param {!Box2D.Dynamics.b2DestructionListener} listener */ Box2D.Dynamics.b2World.prototype.SetDestructionListener = function(listener) { this.m_destructionListener = listener; }; /** * @param {!Box2D.Dynamics.b2ContactFilter} filter */ Box2D.Dynamics.b2World.prototype.SetContactFilter = function(filter) { this.m_contactManager.m_contactFilter = filter; }; /** * @param {!Box2D.Dynamics.b2ContactListener} listener */ Box2D.Dynamics.b2World.prototype.SetContactListener = function(listener) { this.m_contactManager.m_contactListener = listener; }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase */ Box2D.Dynamics.b2World.prototype.SetBroadPhase = function(broadPhase) { var oldBroadPhase = this.m_contactManager.m_broadPhase; this.m_contactManager.m_broadPhase = broadPhase; for (var node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); node; node = node.GetNextNode()) { for (var fixtureNode = node.body.GetFixtureList().GetFirstNode(); fixtureNode; fixtureNode = fixtureNode.GetNextNode()) { var f = fixtureNode.fixture; f.m_proxy = broadPhase.CreateProxy(oldBroadPhase.GetFatAABB(f.m_proxy), f); } } }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetProxyCount = function() { return this.m_contactManager.m_broadPhase.GetProxyCount(); }; /** * @param {!Box2D.Dynamics.b2BodyDef} def * @return {!Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2World.prototype.CreateBody = function(def) { ; var b = new Box2D.Dynamics.b2Body(def, this); this.bodyList.AddBody(b); return b; }; /** * @param {!Box2D.Dynamics.b2Body} b */ Box2D.Dynamics.b2World.prototype.DestroyBody = function(b) { ; var jn = b.m_jointList; while (jn) { var jn0 = jn; jn = jn.next; if (this.m_destructionListener) { this.m_destructionListener.SayGoodbyeJoint(jn0.joint); } this.DestroyJoint(jn0.joint); } for (var node = b.GetControllerList().GetFirstNode(); node; node = node.GetNextNode()) { node.controller.RemoveBody(b); } for (var contactNode = b.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { this.m_contactManager.Destroy(contactNode.contact); } for (var fixtureNode = b.GetFixtureList().GetFirstNode(); fixtureNode; fixtureNode = fixtureNode.GetNextNode()) { if (this.m_destructionListener) { this.m_destructionListener.SayGoodbyeFixture(fixtureNode.fixture); } b.DestroyFixture(fixtureNode.fixture); } b.Destroy(); this.bodyList.RemoveBody(b); }; /** * @param {!Box2D.Dynamics.Joints.b2JointDef} def * @return {!Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.b2World.prototype.CreateJoint = function(def) { var j = Box2D.Dynamics.Joints.b2Joint.Create(def); j.m_prev = null; j.m_next = this.m_jointList; if (this.m_jointList) { this.m_jointList.m_prev = j; } this.m_jointList = j; this.m_jointCount++; j.m_edgeA.joint = j; j.m_edgeA.other = j.m_bodyB; j.m_edgeA.prev = null; j.m_edgeA.next = j.m_bodyA.m_jointList; if (j.m_bodyA.m_jointList) { j.m_bodyA.m_jointList.prev = j.m_edgeA; } j.m_bodyA.m_jointList = j.m_edgeA; j.m_edgeB.joint = j; j.m_edgeB.other = j.m_bodyA; j.m_edgeB.prev = null; j.m_edgeB.next = j.m_bodyB.m_jointList; if (j.m_bodyB.m_jointList) { j.m_bodyB.m_jointList.prev = j.m_edgeB; } j.m_bodyB.m_jointList = j.m_edgeB; var bodyA = def.bodyA; var bodyB = def.bodyB; if (!def.collideConnected) { for (var contactNode = bodyB.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (contactNode.contact.GetOther(bodyB) == bodyA) { contactNode.contact.FlagForFiltering(); } } } return j; }; /** * @param {!Box2D.Dynamics.Joints.b2Joint} j */ Box2D.Dynamics.b2World.prototype.DestroyJoint = function(j) { var collideConnected = j.m_collideConnected; if (j.m_prev) { j.m_prev.m_next = j.m_next; } if (j.m_next) { j.m_next.m_prev = j.m_prev; } if (j == this.m_jointList) { this.m_jointList = j.m_next; } var bodyA = j.m_bodyA; var bodyB = j.m_bodyB; bodyA.SetAwake(true); bodyB.SetAwake(true); if (j.m_edgeA.prev) { j.m_edgeA.prev.next = j.m_edgeA.next; } if (j.m_edgeA.next) { j.m_edgeA.next.prev = j.m_edgeA.prev; } if (j.m_edgeA == bodyA.m_jointList) { bodyA.m_jointList = j.m_edgeA.next; } j.m_edgeA.prev = null; j.m_edgeA.next = null; if (j.m_edgeB.prev) { j.m_edgeB.prev.next = j.m_edgeB.next; } if (j.m_edgeB.next) { j.m_edgeB.next.prev = j.m_edgeB.prev; } if (j.m_edgeB == bodyB.m_jointList) { bodyB.m_jointList = j.m_edgeB.next; } j.m_edgeB.prev = null; j.m_edgeB.next = null; this.m_jointCount--; if (!collideConnected) { for (var contactNode = bodyB.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (contactNode.contact.GetOther(bodyB) == bodyA) { contactNode.contact.FlagForFiltering(); } } } }; /** * @return {!Box2D.Dynamics.Controllers.b2ControllerList} */ Box2D.Dynamics.b2World.prototype.GetControllerList = function() { return this.controllerList; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} c * @return {!Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.b2World.prototype.AddController = function(c) { if (c.m_world !== null && c.m_world != this) { throw new Error("Controller can only be a member of one world"); } this.controllerList.AddController(c); c.m_world = this; return c; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} c */ Box2D.Dynamics.b2World.prototype.RemoveController = function(c) { this.controllerList.RemoveController(c); c.m_world = null; c.Clear(); }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller * @return {!Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.b2World.prototype.CreateController = function(controller) { return this.AddController(controller); }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.b2World.prototype.DestroyController = function(controller) { this.RemoveController(controller); }; /** * @param {boolean} flag */ Box2D.Dynamics.b2World.prototype.SetWarmStarting = function(flag) { this.m_warmStarting = flag; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2World.prototype.SetContinuousPhysics = function(flag) { this.m_continuousPhysics = flag; }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetBodyCount = function() { return this.bodyList.GetBodyCount(); }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetJointCount = function() { return this.m_jointCount; }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetContactCount = function() { return this.contactList.GetContactCount(); }; /** * @param {!Box2D.Common.Math.b2Vec2} gravity */ Box2D.Dynamics.b2World.prototype.SetGravity = function(gravity) { this.m_gravity = gravity; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Dynamics.b2World.prototype.GetGravity = function() { return this.m_gravity; }; /** * @return {!Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2World.prototype.GetGroundBody = function() { return this.m_groundBody; }; /** * @param {number} dt * @param {number} velocityIterations * @param {number} positionIterations */ Box2D.Dynamics.b2World.prototype.Step = function(dt, velocityIterations, positionIterations) { if (this.m_newFixture) { this.m_contactManager.FindNewContacts(); this.m_newFixture = false; } this.m_isLocked = true; var step = new Box2D.Dynamics.b2TimeStep(dt, this.m_inv_dt0 * dt /* dtRatio */, velocityIterations, positionIterations, this.m_warmStarting); this.m_contactManager.Collide(); if (step.dt > 0.0) { this.Solve(step); if (this.m_continuousPhysics) { this.SolveTOI(step); } this.m_inv_dt0 = step.inv_dt; } this.m_isLocked = false; }; Box2D.Dynamics.b2World.prototype.ClearForces = function() { for (var node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.dynamicBodies); node; node = node.GetNextNode()) { node.body.m_force.SetZero(); node.body.m_torque = 0.0; } }; /** * @param {function(!Box2D.Dynamics.b2Fixture):boolean} callback * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Dynamics.b2World.prototype.QueryAABB = function(callback, aabb) { this.m_contactManager.m_broadPhase.Query(callback, aabb); }; /** * @param {function(!Box2D.Dynamics.b2Fixture): boolean} callback * @param {!Box2D.Common.Math.b2Vec2} p */ Box2D.Dynamics.b2World.prototype.QueryPoint = function(callback, p) { /** @type {function(!Box2D.Dynamics.b2Fixture): boolean} */ var WorldQueryWrapper = function(fixture) { if (fixture.TestPoint(p)) { return callback(fixture); } else { return true; } }; var aabb = Box2D.Collision.b2AABB.Get(); aabb.lowerBound_.Set(p.x - Box2D.Common.b2Settings.b2_linearSlop, p.y - Box2D.Common.b2Settings.b2_linearSlop); aabb.upperBound_.Set(p.x + Box2D.Common.b2Settings.b2_linearSlop, p.y + Box2D.Common.b2Settings.b2_linearSlop); this.m_contactManager.m_broadPhase.Query(WorldQueryWrapper, aabb); Box2D.Collision.b2AABB.Free(aabb); }; /** * @param {function(!Box2D.Dynamics.b2Fixture, !Box2D.Common.Math.b2Vec2, !Box2D.Common.Math.b2Vec2, number): number} callback * @param {!Box2D.Common.Math.b2Vec2} point1 * @param {!Box2D.Common.Math.b2Vec2} point2 */ Box2D.Dynamics.b2World.prototype.RayCast = function(callback, point1, point2) { var broadPhase = this.m_contactManager.m_broadPhase; var output = new Box2D.Collision.b2RayCastOutput(); /** * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Dynamics.b2Fixture} fixture */ var RayCastWrapper = function(input, fixture) { var hit = fixture.RayCast(output, input); if (hit) { var flipFrac = 1 - output.fraction; var point = Box2D.Common.Math.b2Vec2.Get(flipFrac * point1.x + output.fraction * point2.x, flipFrac * point1.y + output.fraction * point2.y); var retVal = callback(fixture, point, output.normal, output.fraction); Box2D.Common.Math.b2Vec2.Free(point); return retVal; } else { return input.maxFraction; } }; var input = new Box2D.Collision.b2RayCastInput(point1, point2, 1 /* maxFraction */ ); broadPhase.RayCast(RayCastWrapper, input); }; /** * @param {!Box2D.Common.Math.b2Vec2} point1 * @param {!Box2D.Common.Math.b2Vec2} point2 * @return {Box2D.Dynamics.b2Fixture} */ Box2D.Dynamics.b2World.prototype.RayCastOne = function(point1, point2) { var result = null; /** * @param {!Box2D.Dynamics.b2Fixture} fixture * @param {!Box2D.Common.Math.b2Vec2} point * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} fraction * @return {number} */ var RayCastOneWrapper = function(fixture, point, normal, fraction) { result = fixture; return fraction; }; this.RayCast(RayCastOneWrapper, point1, point2); return result; }; /** * @param {!Box2D.Common.Math.b2Vec2} point1 * @param {!Box2D.Common.Math.b2Vec2} point2 * @return {Array.<Box2D.Dynamics.b2Fixture>} */ Box2D.Dynamics.b2World.prototype.RayCastAll = function(point1, point2) { var result = []; /** * @param {!Box2D.Dynamics.b2Fixture} fixture * @param {!Box2D.Common.Math.b2Vec2} point * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} fraction * @return {number} */ var RayCastAllWrapper = function(fixture, point, normal, fraction) { result.push(fixture); return 1; }; this.RayCast(RayCastAllWrapper, point1, point2); return result; }; /** * @return {!Box2D.Dynamics.b2BodyList} */ Box2D.Dynamics.b2World.prototype.GetBodyList = function() { return this.bodyList; }; /** * @return {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.b2World.prototype.GetJointList = function() { return this.m_jointList; }; /** * @return {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.b2World.prototype.GetContactList = function() { return this.contactList; }; /** * @return {boolean} */ Box2D.Dynamics.b2World.prototype.IsLocked = function() { return this.m_isLocked; }; var b2solvearray = []; /** * @param {!Box2D.Dynamics.b2TimeStep} step */ Box2D.Dynamics.b2World.prototype.Solve = function(step) { for (var controllerNode = this.controllerList.GetFirstNode(); controllerNode; controllerNode = controllerNode.GetNextNode()) { controllerNode.controller.Step(step); } var m_island = new Box2D.Dynamics.b2Island(this.m_contactManager.m_contactListener, this.m_contactSolver); for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { bodyNode.body.m_islandFlag = false; } for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.m_islandFlag = false; } for (var j = this.m_jointList; j; j = j.m_next) { j.m_islandFlag = false; } for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var seed = bodyNode.body; if (seed.m_islandFlag) { continue; } m_island.Clear(); b2solvearray.length = 0; var stack = b2solvearray; stack.push(seed); seed.m_islandFlag = true; while (stack.length > 0) { var b = stack.pop(); m_island.AddBody(b); if (!b.IsAwake()) { b.SetAwake(true); } if (b.GetType() == Box2D.Dynamics.b2BodyDef.b2_staticBody) { continue; } for (var contactNode = b.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); contactNode; contactNode = contactNode.GetNextNode()) { var contact = contactNode.contact; if (contact.m_islandFlag) { continue; } m_island.AddContact(contact); contact.m_islandFlag = true; var other = contact.GetOther(b); if (other.m_islandFlag) { continue; } stack.push(other); other.m_islandFlag = true; } for (var jn = b.m_jointList; jn; jn = jn.next) { if (jn.joint.m_islandFlag || !jn.other.IsActive()) { continue; } m_island.AddJoint(jn.joint); jn.joint.m_islandFlag = true; if (jn.other.m_islandFlag) { continue; } stack.push(jn.other); jn.other.m_islandFlag = true; } } m_island.Solve(step, this.m_gravity, this.m_allowSleep); } for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { bodyNode.body.SynchronizeFixtures(); } this.m_contactManager.FindNewContacts(); }; /** * @param {!Box2D.Dynamics.b2TimeStep} step */ Box2D.Dynamics.b2World.prototype.SolveTOI = function(step) { var m_island = new Box2D.Dynamics.b2Island(this.m_contactManager.m_contactListener, this.m_contactSolver); for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var b = bodyNode.body; b.m_islandFlag = false; b.m_sweep.t0 = 0.0; } for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.m_islandFlag = false; contactNode.contact.m_toi = null; } for (var j = this.m_jointList; j; j = j.m_next) { j.m_islandFlag = false; } while (true) { var toi2 = this._SolveTOI2(step); var minContact = toi2.minContact; var minTOI = toi2.minTOI; if (minContact === null || Box2D.Dynamics.b2World.MAX_TOI < minTOI) { break; } var fixtureABody = minContact.m_fixtureA.GetBody(); var fixtureBBody = minContact.m_fixtureB.GetBody(); Box2D.Dynamics.b2World.s_backupA.Set(fixtureABody.m_sweep); Box2D.Dynamics.b2World.s_backupB.Set(fixtureBBody.m_sweep); fixtureABody.Advance(minTOI); fixtureBBody.Advance(minTOI); minContact.Update(this.m_contactManager.m_contactListener); minContact.m_toi = null; if (minContact.sensor || !minContact.enabled) { fixtureABody.m_sweep.Set(Box2D.Dynamics.b2World.s_backupA); fixtureBBody.m_sweep.Set(Box2D.Dynamics.b2World.s_backupB); fixtureABody.SynchronizeTransform(); fixtureBBody.SynchronizeTransform(); continue; } if (!minContact.touching) { continue; } var seed = fixtureABody; if (seed.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { seed = fixtureBBody; } m_island.Clear(); b2solvearray.length = 0; var queue = b2solvearray; queue.push(seed); seed.m_islandFlag = true; while (queue.length > 0) { var b = queue.pop(); m_island.AddBody(b); if (!b.IsAwake()) { b.SetAwake(true); } if (b.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { continue; } for (var contactNode = b.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (m_island.m_contactCount == Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland) { break; } var contact = contactNode.contact; if (contact.m_islandFlag) { continue; } m_island.AddContact(contact); contact.m_islandFlag = true; var other = contact.GetOther(b); if (other.m_islandFlag) { continue; } if (other.GetType() != Box2D.Dynamics.b2BodyDef.b2_staticBody) { other.Advance(minTOI); other.SetAwake(true); queue.push(other); } other.m_islandFlag = true; } for (var jEdge = b.m_jointList; jEdge; jEdge = jEdge.next) { if (m_island.m_jointCount == Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland) { continue; } if (jEdge.joint.m_islandFlag || !jEdge.other.IsActive()) { continue; } m_island.AddJoint(jEdge.joint); jEdge.joint.m_islandFlag = true; if (jEdge.other.m_islandFlag) { continue; } if (jEdge.other.GetType() != Box2D.Dynamics.b2BodyDef.b2_staticBody) { jEdge.other.Advance(minTOI); jEdge.other.SetAwake(true); queue.push(jEdge.other); } jEdge.other.m_islandFlag = true; } } m_island.SolveTOI(new Box2D.Dynamics.b2TimeStep((1.0 - minTOI) * step.dt /* dt */, 0 /* dtRatio */, step.velocityIterations, step.positionIterations, false /* warmStarting */)); for (var i = 0; i < m_island.m_bodies.length; i++) { m_island.m_bodies[i].m_islandFlag = false; if (!m_island.m_bodies[i].IsAwake() || m_island.m_bodies[i].GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { continue; } m_island.m_bodies[i].SynchronizeFixtures(); for (var contactNode = m_island.m_bodies[i].contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.m_toi = null; } } for (var i = 0; i < m_island.m_contactCount; i++) { m_island.m_contacts[i].m_islandFlag = false; m_island.m_contacts[i].m_toi = null; } for (var i = 0; i < m_island.m_jointCount; i++) { m_island.m_joints[i].m_islandFlag = false; } this.m_contactManager.FindNewContacts(); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @return {{minContact: Box2D.Dynamics.Contacts.b2Contact, minTOI: number}} */ Box2D.Dynamics.b2World.prototype._SolveTOI2 = function(step) { var minContact = null; var minTOI = 1.0; var contacts = 0; for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledContinuousContacts); contactNode; contactNode = contactNode.GetNextNode()) { var c = contactNode.contact; if (this._SolveTOI2SkipContact(step, c)) { continue; } var toi = 1.0; if (c.m_toi != null) { toi = c.m_toi; } else if (c.touching) { toi = 1; c.m_toi = toi; } else { var fixtureABody = c.m_fixtureA.GetBody(); var fixtureBBody = c.m_fixtureB.GetBody(); var t0 = fixtureABody.m_sweep.t0; if (fixtureABody.m_sweep.t0 < fixtureBBody.m_sweep.t0) { t0 = fixtureBBody.m_sweep.t0; fixtureABody.m_sweep.Advance(t0); } else if (fixtureBBody.m_sweep.t0 < fixtureABody.m_sweep.t0) { t0 = fixtureABody.m_sweep.t0; fixtureBBody.m_sweep.Advance(t0); } toi = c.ComputeTOI(fixtureABody.m_sweep, fixtureBBody.m_sweep); ; if (toi > 0.0 && toi < 1.0) { toi = (1.0 - toi) * t0 + toi; } c.m_toi = toi; } if (Number.MIN_VALUE < toi && toi < minTOI) { minContact = c; minTOI = toi; } } return { minContact: minContact, minTOI: minTOI }; }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {!Box2D.Dynamics.Contacts.b2Contact} c * @return {boolean} */ Box2D.Dynamics.b2World.prototype._SolveTOI2SkipContact = function(step, c) { var fixtureABody = c.m_fixtureA.GetBody(); var fixtureBBody = c.m_fixtureB.GetBody(); if ((fixtureABody.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || !fixtureABody.IsAwake()) && (fixtureBBody.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || !fixtureBBody.IsAwake())) { return true; } return false; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor */ Box2D.Dynamics.Contacts.b2Contact = function(fixtureA, fixtureB) { /** * @const * @private * @type {string} */ this.ID = "Contact" + Box2D.Dynamics.Contacts.b2Contact.NEXT_ID++; /** * @private * @type {!Box2D.Collision.b2Manifold} */ this.m_manifold = new Box2D.Collision.b2Manifold(); /** * @private * @type {!Box2D.Collision.b2Manifold} */ this.m_oldManifold = new Box2D.Collision.b2Manifold(); /** * @private * @type {boolean} */ this.touching = false; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); /** * @private * @type {boolean} */ this.continuous = (bodyA.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyA.IsBullet() || (bodyB.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyB.IsBullet(); /** * @private * @type {boolean} */ this.sensor = fixtureA.IsSensor() || fixtureB.IsSensor(); /** * @private * @type {boolean} */ this.filtering = false; /** * @private * @type {!Box2D.Dynamics.b2Fixture} */ this.m_fixtureA = fixtureA; /** * @private * @type {!Box2D.Dynamics.b2Fixture} */ this.m_fixtureB = fixtureB; /** * @private * @type {boolean} */ this.enabled = true; /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.bodyAList = bodyA.GetContactList(); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.bodyBList = bodyB.GetContactList(); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.worldList = bodyB.GetWorld().GetContactList(); this.AddToLists(); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2Contact.prototype.Reset = function(fixtureA, fixtureB) { this.m_manifold.Reset(); this.m_oldManifold.Reset(); this.touching = false; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); this.continuous = (bodyA.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyA.IsBullet() || (bodyB.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyB.IsBullet(); this.sensor = fixtureA.IsSensor() || fixtureB.IsSensor(); this.filtering = false; this.m_fixtureA = fixtureA; this.m_fixtureB = fixtureB; this.enabled = true; this.bodyAList = bodyA.GetContactList(); this.bodyBList = bodyB.GetContactList(); this.worldList = bodyB.GetWorld().GetContactList(); this.AddToLists(); }; Box2D.Dynamics.Contacts.b2Contact.prototype.AddToLists = function () { this.bodyAList.AddContact(this); this.bodyBList.AddContact(this); this.worldList.AddContact(this); this.UpdateLists(); }; Box2D.Dynamics.Contacts.b2Contact.prototype.UpdateLists = function () { var nonSensorEnabledTouching = false; var nonSensorEnabledContinuous = false; if (!this.IsSensor() && this.IsEnabled()) { if (this.IsTouching()) { nonSensorEnabledTouching = true; } if (this.IsContinuous()) { nonSensorEnabledContinuous = true; } } this.bodyAList.UpdateContact(this, nonSensorEnabledTouching, nonSensorEnabledContinuous); this.bodyBList.UpdateContact(this, nonSensorEnabledTouching, nonSensorEnabledContinuous); this.worldList.UpdateContact(this, nonSensorEnabledTouching, nonSensorEnabledContinuous); }; Box2D.Dynamics.Contacts.b2Contact.prototype.RemoveFromLists = function () { this.bodyAList.RemoveContact(this); this.bodyBList.RemoveContact(this); this.worldList.RemoveContact(this); }; /** * @return {!Box2D.Collision.b2Manifold} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetManifold = function () { return this.m_manifold; }; /** * @param {!Box2D.Collision.b2WorldManifold} worldManifold */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetWorldManifold = function (worldManifold) { var bodyA = this.m_fixtureA.GetBody(); var bodyB = this.m_fixtureB.GetBody(); var shapeA = this.m_fixtureA.GetShape(); var shapeB = this.m_fixtureB.GetShape(); worldManifold.Initialize(this.m_manifold, bodyA.GetTransform(), shapeA.m_radius, bodyB.GetTransform(), shapeB.m_radius); }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsTouching = function () { return this.touching; }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsContinuous = function () { return this.continuous; }; /** * @param {boolean} sensor */ Box2D.Dynamics.Contacts.b2Contact.prototype.SetSensor = function (sensor) { this.sensor = sensor; this.UpdateLists(); }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsSensor = function () { return this.sensor; }; /** * @param {boolean} flag */ Box2D.Dynamics.Contacts.b2Contact.prototype.SetEnabled = function (flag) { this.enabled = flag; this.UpdateLists(); }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsEnabled = function () { return this.enabled; }; /** * @return {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetNext = function () { return this.m_next; }; /** * @return {!Box2D.Dynamics.b2Fixture} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetFixtureA = function () { return this.m_fixtureA; }; /** * @return {!Box2D.Dynamics.b2Fixture} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetFixtureB = function () { return this.m_fixtureB; }; /** * @param {!Box2D.Dynamics.b2Body} body * @return {!Box2D.Dynamics.b2Body} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetOther = function (body) { var bodyA = this.m_fixtureA.GetBody(); if (bodyA != body) { return bodyA; } else { return this.m_fixtureB.GetBody(); } }; Box2D.Dynamics.Contacts.b2Contact.prototype.FlagForFiltering = function () { this.filtering = true; }; Box2D.Dynamics.Contacts.b2Contact.prototype.ClearFiltering = function () { this.filtering = false; }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsFiltering = function () { return this.filtering; }; Box2D.Dynamics.Contacts.b2Contact.prototype.Update = function (listener) { var tManifold = this.m_oldManifold; this.m_oldManifold = this.m_manifold; this.m_manifold = tManifold; this.enabled = true; var touching = false; var wasTouching = this.IsTouching(); var bodyA = this.m_fixtureA.GetBody(); var bodyB = this.m_fixtureB.GetBody(); var aabbOverlap = this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb); if (this.sensor) { if (aabbOverlap) { touching = Box2D.Collision.Shapes.b2Shape.TestOverlap(this.m_fixtureA.GetShape(), bodyA.GetTransform(), this.m_fixtureB.GetShape(), bodyB.GetTransform()); } this.m_manifold.m_pointCount = 0; } else { if (bodyA.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || bodyA.IsBullet() || bodyB.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || bodyB.IsBullet()) { this.continuous = true; } else { this.continuous = false; } if (aabbOverlap) { this.Evaluate(); touching = this.m_manifold.m_pointCount > 0; for (var i = 0; i < this.m_manifold.m_pointCount; i++) { var mp2 = this.m_manifold.m_points[i]; mp2.m_normalImpulse = 0.0; mp2.m_tangentImpulse = 0.0; for (var j = 0; j < this.m_oldManifold.m_pointCount; j++) { var mp1 = this.m_oldManifold.m_points[j]; if (mp1.m_id.GetKey() == mp2.m_id.GetKey()) { mp2.m_normalImpulse = mp1.m_normalImpulse; mp2.m_tangentImpulse = mp1.m_tangentImpulse; break; } } } } else { this.m_manifold.m_pointCount = 0; } if (touching != wasTouching) { bodyA.SetAwake(true); bodyB.SetAwake(true); } } this.touching = touching; if (touching != wasTouching) { this.UpdateLists(); } if (!wasTouching && touching) { listener.BeginContact(this); } if (wasTouching && !touching) { listener.EndContact(this); } if (!this.sensor) { listener.PreSolve(this, this.m_oldManifold); } }; Box2D.Dynamics.Contacts.b2Contact.prototype.Evaluate = function () {}; Box2D.Dynamics.Contacts.b2Contact.prototype.ComputeTOI = function (sweepA, sweepB) { Box2D.Dynamics.Contacts.b2Contact.s_input.proxyA.Set(this.m_fixtureA.GetShape()); Box2D.Dynamics.Contacts.b2Contact.s_input.proxyB.Set(this.m_fixtureB.GetShape()); Box2D.Dynamics.Contacts.b2Contact.s_input.sweepA = sweepA; Box2D.Dynamics.Contacts.b2Contact.s_input.sweepB = sweepB; Box2D.Dynamics.Contacts.b2Contact.s_input.tolerance = Box2D.Common.b2Settings.b2_linearSlop; return Box2D.Collision.b2TimeOfImpact.TimeOfImpact(Box2D.Dynamics.Contacts.b2Contact.s_input); }; Box2D.Dynamics.Contacts.b2Contact.s_input = new Box2D.Collision.b2TOIInput(); /** * @type {number} * @private */ Box2D.Dynamics.Contacts.b2Contact.NEXT_ID = 0; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2CircleContact = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2CircleContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2CircleContact.prototype.Reset = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2CircleContact.prototype.Evaluate = function() { Box2D.Collision.b2Collision.CollideCircles(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactConstraint = function() { this.localPlaneNormal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.normal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.normalMass = new Box2D.Common.Math.b2Mat22(); this.K = new Box2D.Common.Math.b2Mat22(); this.points = []; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.points[i] = new Box2D.Dynamics.Contacts.b2ContactConstraintPoint(); } }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactConstraintPoint = function() { this.localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.rA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.rB = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Dynamics.Contacts.b2ContactConstraintPoint.prototype.Reset = function() { this.localPoint.Set(0, 0); this.rA.Set(0, 0); this.rB.Set(0, 0); }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactFactory = function() { /** * @private */ this.m_registers = {}; /** * @private * @type {Object.<Object.<Array.<!Box2D.Dynamics.b2Contact>>>} */ this.m_freeContacts = {}; this.AddType(Box2D.Dynamics.Contacts.b2CircleContact, Box2D.Collision.Shapes.b2CircleShape.NAME, Box2D.Collision.Shapes.b2CircleShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2PolyAndCircleContact, Box2D.Collision.Shapes.b2PolygonShape.NAME, Box2D.Collision.Shapes.b2CircleShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2PolygonContact, Box2D.Collision.Shapes.b2PolygonShape.NAME, Box2D.Collision.Shapes.b2PolygonShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2EdgeAndCircleContact, Box2D.Collision.Shapes.b2EdgeShape.NAME, Box2D.Collision.Shapes.b2CircleShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2PolyAndEdgeContact, Box2D.Collision.Shapes.b2PolygonShape.NAME, Box2D.Collision.Shapes.b2EdgeShape.NAME); }; Box2D.Dynamics.Contacts.b2ContactFactory.prototype.AddType = function(ctor, type1, type2) { this.m_freeContacts[type1] = this.m_freeContacts[type1] || {}; this.m_freeContacts[type1][type2] = this.m_freeContacts[type1][type2] || []; this.m_registers[type1] = this.m_registers[type1] || {}; this.m_registers[type1][type2] = new Box2D.Dynamics.Contacts.b2ContactRegister(); this.m_registers[type1][type2].ctor = ctor; this.m_registers[type1][type2].primary = true; if (type1 != type2) { this.m_registers[type2] = this.m_registers[type2] || {}; this.m_registers[type2][type1] = new Box2D.Dynamics.Contacts.b2ContactRegister(); this.m_registers[type2][type1].ctor = ctor; this.m_registers[type2][type1].primary = false; } }; Box2D.Dynamics.Contacts.b2ContactFactory.prototype.Create = function(fixtureA, fixtureB) { var type1 = fixtureA.GetShape().GetTypeName(); var type2 = fixtureB.GetShape().GetTypeName(); var reg = this.m_registers[type1][type2]; var ctor = reg.ctor; if (ctor != null) { if (reg.primary) { if (this.m_freeContacts[type1][type2].length > 0) { var c = this.m_freeContacts[type1][type2].pop(); c.Reset(fixtureA, fixtureB); return c; } return new ctor(fixtureA, fixtureB); } else { if (this.m_freeContacts[type2][type1].length > 0) { var c = this.m_freeContacts[type2][type1].pop(); c.Reset(fixtureB, fixtureA); return c; } return new ctor(fixtureB, fixtureA); } } else { return null; } }; Box2D.Dynamics.Contacts.b2ContactFactory.prototype.Destroy = function(contact) { var type1 = contact.m_fixtureA.GetShape().GetTypeName(); var type2 = contact.m_fixtureB.GetShape().GetTypeName(); this.m_freeContacts[type1][type2].push(contact); }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactList = function() { /** * @private * @type {Array.<Box2D.Dynamics.Contacts.b2ContactListNode>} */ this.contactFirstNodes = []; for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.contactFirstNodes[i] = null; } /** * @private * @type {Array.<Box2D.Dynamics.Contacts.b2ContactListNode>} */ this.contactLastNodes = []; for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.contactLastNodes[i] = null; } /** * @private * @type {Object.<Array.<Box2D.Dynamics.Contacts.b2ContactListNode>>} */ this.contactNodeLookup = {}; /** * @private * @type {number} */ this.contactCount = 0; }; /** * @param {number} type * @return {Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactList.prototype.GetFirstNode = function(type) { return this.contactFirstNodes[type]; }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.Contacts.b2ContactList.prototype.AddContact = function(contact) { var contactID = contact.ID; if (this.contactNodeLookup[contactID] == null) { this.contactNodeLookup[contactID] = []; for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.contactNodeLookup[contactID][i] = null; } this.CreateNode(contact, contactID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); this.contactCount++; } }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.Contacts.b2ContactList.prototype.UpdateContact = function(contact, nonSensorEnabledTouching, nonSensorEnabledContinuous) { if (nonSensorEnabledTouching) { this.CreateNode(contact, contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); } else { this.RemoveNode(contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); } if (nonSensorEnabledContinuous) { this.CreateNode(contact, contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledContinuousContacts); } else { this.RemoveNode(contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledContinuousContacts); } }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.Contacts.b2ContactList.prototype.RemoveContact = function(contact) { var contactID = contact.ID; if (this.contactNodeLookup[contactID] != null) { for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.RemoveNode(contactID, i); } delete this.contactNodeLookup[contactID]; this.contactCount--; } }; /** * @param {string} contactID * @param {number} type */ Box2D.Dynamics.Contacts.b2ContactList.prototype.RemoveNode = function(contactID, type) { var nodeList = this.contactNodeLookup[contactID]; if (nodeList == null) { return; } var node = nodeList[type]; if (node == null) { return; } nodeList[type] = null; var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.contactFirstNodes[type] = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.contactLastNodes[type] = prevNode; } else { nextNode.SetPreviousNode(prevNode); } Box2D.Dynamics.Contacts.b2ContactListNode.FreeNode(node); }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact * @param {string} contactID * @param {number} type */ Box2D.Dynamics.Contacts.b2ContactList.prototype.CreateNode = function(contact, contactID, type) { var nodeList = this.contactNodeLookup[contactID]; if (nodeList[type] == null) { nodeList[type] = Box2D.Dynamics.Contacts.b2ContactListNode.GetNode(contact); var prevNode = this.contactLastNodes[type]; if (prevNode != null) { prevNode.SetNextNode(nodeList[type]); nodeList[type].SetPreviousNode(prevNode); } else { this.contactFirstNodes[type] = nodeList[type]; } this.contactLastNodes[type] = nodeList[type]; } }; /** * @return {number} */ Box2D.Dynamics.Contacts.b2ContactList.prototype.GetContactCount = function() { return this.contactCount; }; /** * @enum {number} */ Box2D.Dynamics.Contacts.b2ContactList.TYPES = { nonSensorEnabledTouchingContacts: 0, nonSensorEnabledContinuousContacts: 1, allContacts: 2 // Assumed to be last by above code }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact * @constructor */ Box2D.Dynamics.Contacts.b2ContactListNode = function(contact) { /** * @private * @type {!Box2D.Dynamics.Contacts.b2Contact} */ this.contact = contact; /** * @private * @type {Box2D.Dynamics.Contacts.b2ContactListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.Contacts.b2ContactListNode} */ this.previous = null; }; /** * @private * @type {Array.<!Box2D.Dynamics.Contacts.b2ContactListNode> */ Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes = []; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact * @return {!Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactListNode.GetNode = function(contact) { if (Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes.length > 0) { var node = Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes.pop(); node.next = null; node.previous = null; node.contact = contact; return node; } else { return new Box2D.Dynamics.Contacts.b2ContactListNode(contact); } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactListNode} node */ Box2D.Dynamics.Contacts.b2ContactListNode.FreeNode = function(node) { Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes.push(node); }; /** * @param {Box2D.Dynamics.Contacts.b2ContactListNode} node */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.Contacts.b2ContactListNode} node */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {!Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.GetContact = function() { return this.contact; }; /** * @return {Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactRegister = function () { this.pool = null; this.poolCount = 0; }; /** * @constructor */ Box2D.Dynamics.Contacts.b2PositionSolverManifold = function() { this.m_normal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_separations = []; this.m_points = []; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype.Initialize = function(cc) { ; switch (cc.type) { case Box2D.Collision.b2Manifold.e_circles: this._InitializeCircles(cc); break; case Box2D.Collision.b2Manifold.e_faceA: this._InitializeFaceA(cc); break; case Box2D.Collision.b2Manifold.e_faceB: this._InitializeFaceB(cc); break; } }; /** * @private * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype._InitializeCircles = function(cc) { var tMat = cc.bodyA.m_xf.R; var tVec = cc.localPoint; var pointAX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var pointAY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tMat = cc.bodyB.m_xf.R; tVec = cc.points[0].localPoint; var pointBX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var pointBY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); var dX = pointBX - pointAX; var dY = pointBY - pointAY; var d2 = dX * dX + dY * dY; if (d2 > Box2D.Common.b2Settings.MIN_VALUE_SQUARED) { var d = Math.sqrt(d2); this.m_normal.x = dX / d; this.m_normal.y = dY / d; } else { this.m_normal.x = 1.0; this.m_normal.y = 0.0; } this.m_points[0].x = 0.5 * (pointAX + pointBX); this.m_points[0].y = 0.5 * (pointAY + pointBY); this.m_separations[0] = dX * this.m_normal.x + dY * this.m_normal.y - cc.radius; }; /** * @private * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype._InitializeFaceA = function(cc) { this.m_normal.x = cc.bodyA.m_xf.R.col1.x * cc.localPlaneNormal.x + cc.bodyA.m_xf.R.col2.x * cc.localPlaneNormal.y; this.m_normal.y = cc.bodyA.m_xf.R.col1.y * cc.localPlaneNormal.x + cc.bodyA.m_xf.R.col2.y * cc.localPlaneNormal.y; var planePointX = cc.bodyA.m_xf.position.x + (cc.bodyA.m_xf.R.col1.x * cc.localPoint.x + cc.bodyA.m_xf.R.col2.x * cc.localPoint.y); var planePointY = cc.bodyA.m_xf.position.y + (cc.bodyA.m_xf.R.col1.y * cc.localPoint.x + cc.bodyA.m_xf.R.col2.y * cc.localPoint.y); for (var i = 0; i < cc.pointCount; i++) { var clipPointX = cc.bodyB.m_xf.position.x + (cc.bodyB.m_xf.R.col1.x * cc.points[i].localPoint.x + cc.bodyB.m_xf.R.col2.x * cc.points[i].localPoint.y); var clipPointY = cc.bodyB.m_xf.position.y + (cc.bodyB.m_xf.R.col1.y * cc.points[i].localPoint.x + cc.bodyB.m_xf.R.col2.y * cc.points[i].localPoint.y); this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius; this.m_points[i].x = clipPointX; this.m_points[i].y = clipPointY; } }; /** * @private * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype._InitializeFaceB = function(cc) { this.m_normal.x = cc.bodyB.m_xf.R.col1.x * cc.localPlaneNormal.x + cc.bodyB.m_xf.R.col2.x * cc.localPlaneNormal.y; this.m_normal.y = cc.bodyB.m_xf.R.col1.y * cc.localPlaneNormal.x + cc.bodyB.m_xf.R.col2.y * cc.localPlaneNormal.y; var planePointX = cc.bodyB.m_xf.position.x + (cc.bodyB.m_xf.R.col1.x * cc.localPoint.x + cc.bodyB.m_xf.R.col2.x * cc.localPoint.y); var planePointY = cc.bodyB.m_xf.position.y + (cc.bodyB.m_xf.R.col1.y * cc.localPoint.x + cc.bodyB.m_xf.R.col2.y * cc.localPoint.y); for (var i = 0; i < cc.pointCount; i++) { var clipPointX = cc.bodyA.m_xf.position.x + (cc.bodyA.m_xf.R.col1.x * cc.points[i].localPoint.x + cc.bodyA.m_xf.R.col2.x * cc.points[i].localPoint.y); var clipPointY = cc.bodyA.m_xf.position.y + (cc.bodyA.m_xf.R.col1.y * cc.points[i].localPoint.x + cc.bodyA.m_xf.R.col2.y * cc.points[i].localPoint.y); this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius; this.m_points[i].Set(clipPointX, clipPointY); } this.m_normal.x *= -1; this.m_normal.y *= -1; }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactSolver = function() { /** * @private * @type {Array.<!Box2D.Dynamics.Contacts.b2ContactConstraint>} */ this.m_constraints = []; }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {Array.<!Box2D.Dynamics.Contacts.b2Contact>} contacts * @param {number} contactCount */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.Initialize = function(step, contacts, contactCount) { this.m_constraintCount = contactCount; while (this.m_constraints.length < this.m_constraintCount) { this.m_constraints[this.m_constraints.length] = new Box2D.Dynamics.Contacts.b2ContactConstraint(); } for (var i = 0; i < contactCount; i++) { var contact = contacts[i]; var fixtureA = contact.m_fixtureA; var fixtureB = contact.m_fixtureB; var shapeA = fixtureA.m_shape; var shapeB = fixtureB.m_shape; var radiusA = shapeA.m_radius; var radiusB = shapeB.m_radius; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); var manifold = contact.GetManifold(); var friction = Box2D.Common.b2Settings.b2MixFriction(fixtureA.GetFriction(), fixtureB.GetFriction()); var restitution = Box2D.Common.b2Settings.b2MixRestitution(fixtureA.GetRestitution(), fixtureB.GetRestitution()); var vAX = bodyA.m_linearVelocity.x; var vAY = bodyA.m_linearVelocity.y; var vBX = bodyB.m_linearVelocity.x; var vBY = bodyB.m_linearVelocity.y; var wA = bodyA.m_angularVelocity; var wB = bodyB.m_angularVelocity; ; Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.Initialize(manifold, bodyA.m_xf, radiusA, bodyB.m_xf, radiusB); var normalX = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_normal.x; var normalY = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_normal.y; var cc = this.m_constraints[i]; cc.bodyA = bodyA; cc.bodyB = bodyB; cc.manifold = manifold; cc.normal.x = normalX; cc.normal.y = normalY; cc.pointCount = manifold.m_pointCount; cc.friction = friction; cc.restitution = restitution; cc.localPlaneNormal.x = manifold.m_localPlaneNormal.x; cc.localPlaneNormal.y = manifold.m_localPlaneNormal.y; cc.localPoint.x = manifold.m_localPoint.x; cc.localPoint.y = manifold.m_localPoint.y; cc.radius = radiusA + radiusB; cc.type = manifold.m_type; for (var k = 0; k < cc.pointCount; ++k) { var cp = manifold.m_points[k]; var ccp = cc.points[k]; ccp.normalImpulse = cp.m_normalImpulse; ccp.tangentImpulse = cp.m_tangentImpulse; ccp.localPoint.SetV(cp.m_localPoint); var rAX = ccp.rA.x = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].x - bodyA.m_sweep.c.x; var rAY = ccp.rA.y = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].y - bodyA.m_sweep.c.y; var rBX = ccp.rB.x = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].x - bodyB.m_sweep.c.x; var rBY = ccp.rB.y = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].y - bodyB.m_sweep.c.y; var rnA = rAX * normalY - rAY * normalX; var rnB = rBX * normalY - rBY * normalX; rnA *= rnA; rnB *= rnB; var kNormal = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rnA + bodyB.m_invI * rnB; ccp.normalMass = 1.0 / kNormal; var kEqualized = bodyA.m_mass * bodyA.m_invMass + bodyB.m_mass * bodyB.m_invMass; kEqualized += bodyA.m_mass * bodyA.m_invI * rnA + bodyB.m_mass * bodyB.m_invI * rnB; ccp.equalizedMass = 1.0 / kEqualized; var tangentX = normalY; var tangentY = (-normalX); var rtA = rAX * tangentY - rAY * tangentX; var rtB = rBX * tangentY - rBY * tangentX; rtA *= rtA; rtB *= rtB; var kTangent = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rtA + bodyB.m_invI * rtB; ccp.tangentMass = 1.0 / kTangent; ccp.velocityBias = 0.0; var tX = vBX + ((-wB * rBY)) - vAX - ((-wA * rAY)); var tY = vBY + (wB * rBX) - vAY - (wA * rAX); var vRel = cc.normal.x * tX + cc.normal.y * tY; if (vRel < (-Box2D.Common.b2Settings.b2_velocityThreshold)) { ccp.velocityBias += (-cc.restitution * vRel); } } if (cc.pointCount == 2) { var ccp1 = cc.points[0]; var ccp2 = cc.points[1]; var invMassA = bodyA.m_invMass; var invIA = bodyA.m_invI; var invMassB = bodyB.m_invMass; var invIB = bodyB.m_invI; var rn1A = ccp1.rA.x * normalY - ccp1.rA.y * normalX; var rn1B = ccp1.rB.x * normalY - ccp1.rB.y * normalX; var rn2A = ccp2.rA.x * normalY - ccp2.rA.y * normalX; var rn2B = ccp2.rB.x * normalY - ccp2.rB.y * normalX; var k11 = invMassA + invMassB + invIA * rn1A * rn1A + invIB * rn1B * rn1B; var k22 = invMassA + invMassB + invIA * rn2A * rn2A + invIB * rn2B * rn2B; var k12 = invMassA + invMassB + invIA * rn1A * rn2A + invIB * rn1B * rn2B; var k_maxConditionNumber = 100.0; if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { cc.K.col1.Set(k11, k12); cc.K.col2.Set(k12, k22); cc.K.GetInverse(cc.normalMass); } else { cc.pointCount = 1; } } } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.InitVelocityConstraints = function(step) { for (var i = 0; i < this.m_constraintCount; ++i) { var c = this.m_constraints[i]; var bodyA = c.bodyA; var bodyB = c.bodyB; var invMassA = bodyA.m_invMass; var invIA = bodyA.m_invI; var invMassB = bodyB.m_invMass; var invIB = bodyB.m_invI; var normalX = c.normal.x; var normalY = c.normal.y; var tangentX = normalY; var tangentY = (-normalX); var tX = 0; var j = 0; var tCount = 0; if (step.warmStarting) { tCount = c.pointCount; for (j = 0; j < tCount; ++j) { var ccp = c.points[j]; ccp.normalImpulse *= step.dtRatio; ccp.tangentImpulse *= step.dtRatio; var PX = ccp.normalImpulse * normalX + ccp.tangentImpulse * tangentX; var PY = ccp.normalImpulse * normalY + ccp.tangentImpulse * tangentY; bodyA.m_angularVelocity -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX); bodyA.m_linearVelocity.x -= invMassA * PX; bodyA.m_linearVelocity.y -= invMassA * PY; bodyB.m_angularVelocity += invIB * (ccp.rB.x * PY - ccp.rB.y * PX); bodyB.m_linearVelocity.x += invMassB * PX; bodyB.m_linearVelocity.y += invMassB * PY; } } else { tCount = c.pointCount; for (j = 0; j < tCount; ++j) { var ccp2 = c.points[j]; ccp2.normalImpulse = 0.0; ccp2.tangentImpulse = 0.0; } } } }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints = function() { for (var i = 0; i < this.m_constraintCount; i++) { this.SolveVelocityConstraints_Constraint(this.m_constraints[i]); } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} c */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_Constraint = function(c) { var normalX = c.normal.x; var normalY = c.normal.y; for (var j = 0; j < c.pointCount; j++) { Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_ConstraintPoint(c, c.points[j]); } if (c.pointCount == 1) { var ccp = c.points[0]; var dvX = c.bodyB.m_linearVelocity.x - (c.bodyB.m_angularVelocity * ccp.rB.y) - c.bodyA.m_linearVelocity.x + (c.bodyA.m_angularVelocity * ccp.rA.y); var dvY = c.bodyB.m_linearVelocity.y + (c.bodyB.m_angularVelocity * ccp.rB.x) - c.bodyA.m_linearVelocity.y - (c.bodyA.m_angularVelocity * ccp.rA.x); var vn = dvX * normalX + dvY * normalY; var newImpulse = ccp.normalImpulse - (ccp.normalMass * (vn - ccp.velocityBias)); newImpulse = newImpulse > 0 ? newImpulse : 0.0; var impulseLambda = newImpulse - ccp.normalImpulse; var PX = impulseLambda * normalX; var PY = impulseLambda * normalY; c.bodyA.m_linearVelocity.x -= c.bodyA.m_invMass * PX; c.bodyA.m_linearVelocity.y -= c.bodyA.m_invMass * PY; c.bodyA.m_angularVelocity -= c.bodyA.m_invI * (ccp.rA.x * PY - ccp.rA.y * PX); c.bodyB.m_linearVelocity.x += c.bodyB.m_invMass * PX; c.bodyB.m_linearVelocity.y += c.bodyB.m_invMass * PY; c.bodyB.m_angularVelocity += c.bodyB.m_invI * (ccp.rB.x * PY - ccp.rB.y * PX); ccp.normalImpulse = newImpulse; } else { var cp1 = c.points[0]; var cp2 = c.points[1]; var aX = cp1.normalImpulse; var aY = cp2.normalImpulse; var dv1X = c.bodyB.m_linearVelocity.x - c.bodyB.m_angularVelocity * cp1.rB.y - c.bodyA.m_linearVelocity.x + c.bodyA.m_angularVelocity * cp1.rA.y; var dv1Y = c.bodyB.m_linearVelocity.y + c.bodyB.m_angularVelocity * cp1.rB.x - c.bodyA.m_linearVelocity.y - c.bodyA.m_angularVelocity * cp1.rA.x; var dv2X = c.bodyB.m_linearVelocity.x - c.bodyB.m_angularVelocity * cp2.rB.y - c.bodyA.m_linearVelocity.x + c.bodyA.m_angularVelocity * cp2.rA.y; var dv2Y = c.bodyB.m_linearVelocity.y + c.bodyB.m_angularVelocity * cp2.rB.x - c.bodyA.m_linearVelocity.y - c.bodyA.m_angularVelocity * cp2.rA.x; var bX = (dv1X * normalX + dv1Y * normalY) - cp1.velocityBias; var bY = (dv2X * normalX + dv2Y * normalY) - cp2.velocityBias; bX -= c.K.col1.x * aX + c.K.col2.x * aY; bY -= c.K.col1.y * aX + c.K.col2.y * aY; for (;;) { var firstX = (-(c.normalMass.col1.x * bX + c.normalMass.col2.x * bY)); if (firstX >= 0) { var firstY = (-(c.normalMass.col1.y * bX + c.normalMass.col2.y * bY)); if(firstY >= 0) { var dX = firstX - aX; var dY = firstY - aY; this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, firstX - aX, firstY - aY); cp1.normalImpulse = firstX; cp2.normalImpulse = firstY; break; } } var secondX = (-cp1.normalMass * bX); if (secondX >= 0) { if ((c.K.col1.y * secondX + bY) >= 0) { var dX = secondX - aX; var dY = -aY; this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, secondX - aX, -aY); cp1.normalImpulse = secondX; cp2.normalImpulse = 0; break; } } var secondY = (-cp2.normalMass * bY); if (secondY >= 0) { if ((c.K.col2.x * secondY + bX) >= 0) { this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, -aX, secondY - aY); cp1.normalImpulse = 0; cp2.normalImpulse = secondY; break; } } if (bX >= 0 && bY >= 0) { this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, -aX, -aY); cp1.normalImpulse = 0; cp2.normalImpulse = 0; break; } break; } } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} c * @param {!Box2D.Dynamics.Contacts.b2ContactConstraintPoint} ccp */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_ConstraintPoint = function(c, ccp) { var tangentX = c.normal.y; var tangentY = -c.normal.x; var dvX = c.bodyB.m_linearVelocity.x - c.bodyB.m_angularVelocity * ccp.rB.y - c.bodyA.m_linearVelocity.x + c.bodyA.m_angularVelocity * ccp.rA.y; var dvY = c.bodyB.m_linearVelocity.y + c.bodyB.m_angularVelocity * ccp.rB.x - c.bodyA.m_linearVelocity.y - c.bodyA.m_angularVelocity * ccp.rA.x; var vt = dvX * tangentX + dvY * tangentY; var maxFriction = c.friction * ccp.normalImpulse; var newImpulse = Box2D.Common.Math.b2Math.Clamp(ccp.tangentImpulse - ccp.tangentMass * vt, -maxFriction, maxFriction); var impulseLambda = newImpulse - ccp.tangentImpulse; var PX = impulseLambda * tangentX; var PY = impulseLambda * tangentY; c.bodyA.m_linearVelocity.x -= c.bodyA.m_invMass * PX; c.bodyA.m_linearVelocity.y -= c.bodyA.m_invMass * PY; c.bodyA.m_angularVelocity -= c.bodyA.m_invI * (ccp.rA.x * PY - ccp.rA.y * PX); c.bodyB.m_linearVelocity.x += c.bodyB.m_invMass * PX; c.bodyB.m_linearVelocity.y += c.bodyB.m_invMass * PY; c.bodyB.m_angularVelocity += c.bodyB.m_invI * (ccp.rB.x * PY - ccp.rB.y * PX); ccp.tangentImpulse = newImpulse; }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} c * @param {!Box2D.Dynamics.Contacts.b2ContactConstraintPoint} cp1 * @param {!Box2D.Dynamics.Contacts.b2ContactConstraintPoint} cp2 * @param {number} dX * @param {number} dY */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_ConstraintPointUpdate = function(c, cp1, cp2, dX, dY) { var P1X = dX * c.normal.x; var P1Y = dX * c.normal.y; var P2X = dY * c.normal.x; var P2Y = dY * c.normal.y; c.bodyA.m_linearVelocity.x -= c.bodyA.m_invMass * (P1X + P2X); c.bodyA.m_linearVelocity.y -= c.bodyA.m_invMass * (P1Y + P2Y); c.bodyA.m_angularVelocity -= c.bodyA.m_invI * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X); c.bodyB.m_linearVelocity.x += c.bodyB.m_invMass * (P1X + P2X); c.bodyB.m_linearVelocity.y += c.bodyB.m_invMass * (P1Y + P2Y); c.bodyB.m_angularVelocity += c.bodyB.m_invI * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X); cp1.normalImpulse = 0; cp2.normalImpulse = 0; }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.FinalizeVelocityConstraints = function() { for (var i = 0; i < this.m_constraintCount; ++i) { var c = this.m_constraints[i]; var m = c.manifold; for (var j = 0; j < c.pointCount; ++j) { var point1 = m.m_points[j]; var point2 = c.points[j]; point1.m_normalImpulse = point2.normalImpulse; point1.m_tangentImpulse = point2.tangentImpulse; } } }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var minSeparation = 0.0; for (var i = 0; i < this.m_constraintCount; i++) { var c = this.m_constraints[i]; var bodyA = c.bodyA; var bodyB = c.bodyB; var invMassA = bodyA.m_mass * bodyA.m_invMass; var invIA = bodyA.m_mass * bodyA.m_invI; var invMassB = bodyB.m_mass * bodyB.m_invMass; var invIB = bodyB.m_mass * bodyB.m_invI; Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.Initialize(c); var normal = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_normal; for (var j = 0; j < c.pointCount; j++) { var ccp = c.points[j]; var point = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_points[j]; var separation = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_separations[j]; var rAX = point.x - bodyA.m_sweep.c.x; var rAY = point.y - bodyA.m_sweep.c.y; var rBX = point.x - bodyB.m_sweep.c.x; var rBY = point.y - bodyB.m_sweep.c.y; minSeparation = minSeparation < separation ? minSeparation : separation; var C = Box2D.Common.Math.b2Math.Clamp(baumgarte * (separation + Box2D.Common.b2Settings.b2_linearSlop), (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); var impulse = (-ccp.equalizedMass * C); var PX = impulse * normal.x; var PY = impulse * normal.y; bodyA.m_sweep.c.x -= invMassA * PX; bodyA.m_sweep.c.y -= invMassA * PY; bodyA.m_sweep.a -= invIA * (rAX * PY - rAY * PX); bodyA.SynchronizeTransform(); bodyB.m_sweep.c.x += invMassB * PX; bodyB.m_sweep.c.y += invMassB * PY; bodyB.m_sweep.a += invIB * (rBX * PY - rBY * PX); bodyB.SynchronizeTransform(); } } return minSeparation > (-1.5 * Box2D.Common.b2Settings.b2_linearSlop); }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolvePositionConstraints_NEW = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var minSeparation = 0.0; for (var i = 0; i < this.m_constraintCount; i++) { var c = this.m_constraints[i]; var bodyA = c.bodyA; var bodyB = c.bodyB; var invMassA = bodyA.m_mass * bodyA.m_invMass; var invIA = bodyA.m_mass * bodyA.m_invI; var invMassB = bodyB.m_mass * bodyB.m_invMass; var invIB = bodyB.m_mass * bodyB.m_invI; Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.Initialize(c); var normal = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_normal; for (var j = 0; j < c.pointCount; j++) { var ccp = c.points[j]; var point = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_points[j]; var separation = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_separations[j]; var rAX = point.x - bodyA.m_sweep.c.x; var rAY = point.y - bodyA.m_sweep.c.y; var rBX = point.x - bodyB.m_sweep.c.x; var rBY = point.y - bodyB.m_sweep.c.y; if (separation < minSeparation) { minSeparation = separation; } var C = 0; if (baumgarte != 0) { Box2D.Common.Math.b2Math.Clamp(baumgarte * (separation + Box2D.Common.b2Settings.b2_linearSlop), (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); } var impulse = (-ccp.equalizedMass * C); var PX = impulse * normal.x; var PY = impulse * normal.y; bodyA.m_sweep.c.x -= invMassA * PX; bodyA.m_sweep.c.y -= invMassA * PY; bodyA.m_sweep.a -= invIA * (rAX * PY - rAY * PX); bodyA.SynchronizeTransform(); bodyB.m_sweep.c.x += invMassB * PX; bodyB.m_sweep.c.y += invMassB * PY; bodyB.m_sweep.a += invIB * (rBX * PY - rBY * PX); bodyB.SynchronizeTransform(); } } return minSeparation > (-1.5 * Box2D.Common.b2Settings.b2_linearSlop); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2EdgeAndCircleContact = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2EdgeAndCircleContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2EdgeAndCircleContact.prototype.Reset = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2EdgeAndCircleContact.prototype.Evaluate = function() { var bA = this.m_fixtureA.GetBody(); var bB = this.m_fixtureB.GetBody(); this.b2CollideEdgeAndCircle(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; Box2D.Dynamics.Contacts.b2EdgeAndCircleContact.prototype.b2CollideEdgeAndCircle = function(manifold, edge, xf1, circle, xf2) {}; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2PolyAndCircleContact = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2PolyAndCircleContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2PolyAndCircleContact.prototype.Reset = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2PolyAndCircleContact.prototype.Evaluate = function() { Box2D.Collision.b2Collision.CollidePolygonAndCircle(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2PolyAndEdgeContact = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2PolyAndEdgeContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2PolyAndEdgeContact.prototype.Reset = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2PolyAndEdgeContact.prototype.Evaluate = function() { this.b2CollidePolyAndEdge(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; Box2D.Dynamics.Contacts.b2PolyAndEdgeContact.prototype.b2CollidePolyAndEdge = function (manifold, polygon, xf1, edge, xf2) {}; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2PolygonContact = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2PolygonContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2PolygonContact.prototype.Reset = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2PolygonContact.prototype.Evaluate = function() { Box2D.Collision.b2Collision.CollidePolygons(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; /** * @constructor */ Box2D.Dynamics.Controllers.b2Controller = function() { /** * @const * @private * @type {string} */ this.ID = "Controller" + Box2D.Dynamics.Controllers.b2Controller.NEXT_ID++; /** * @type {Box2D.Dynamics.b2World} */ this.m_world = null; /** * @private * @type {!Box2D.Dynamics.b2BodyList} */ this.bodyList = new Box2D.Dynamics.b2BodyList(); }; Box2D.Dynamics.Controllers.b2Controller.prototype.Step = function(step) {}; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.Controllers.b2Controller.prototype.AddBody = function(body) { this.bodyList.AddBody(body); body.AddController(this); }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.Controllers.b2Controller.prototype.RemoveBody = function(body) { this.bodyList.RemoveBody(body); body.RemoveController(this); }; Box2D.Dynamics.Controllers.b2Controller.prototype.Clear = function() { for (var node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); node; node = node.GetNextNode()) { this.RemoveBody(node.body); } }; /** * @return {!Box2D.Dynamics.b2BodyList} */ Box2D.Dynamics.Controllers.b2Controller.prototype.GetBodyList = function() { return this.bodyList; }; /** * @type {number} * @private */ Box2D.Dynamics.Controllers.b2Controller.NEXT_ID = 0; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2BuoyancyController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.normal = Box2D.Common.Math.b2Vec2.Get(0, -1); this.offset = 0; this.density = 0; this.velocity = Box2D.Common.Math.b2Vec2.Get(0, 0); this.linearDrag = 2; this.angularDrag = 1; this.useDensity = false; this.useWorldGravity = true; this.gravity = null; }; c2inherit(Box2D.Dynamics.Controllers.b2BuoyancyController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2BuoyancyController.prototype.Step = function(step) { if (this.useWorldGravity) { this.gravity = this.m_world.GetGravity().Copy(); } for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; var areac = Box2D.Common.Math.b2Vec2.Get(0, 0); var massc = Box2D.Common.Math.b2Vec2.Get(0, 0); var area = 0.0; var mass = 0.0; for (var fixtureNode = body.GetFixtureList().GetFirstNode(); fixtureNode; fixtureNode = fixtureNode.GetNextNode()) { var sc = Box2D.Common.Math.b2Vec2.Get(0, 0); var sarea = fixtureNode.fixture.GetShape().ComputeSubmergedArea(this.normal, this.offset, body.GetTransform(), sc); area += sarea; areac.x += sarea * sc.x; areac.y += sarea * sc.y; var shapeDensity = 0; if (this.useDensity) { shapeDensity = 1; } else { shapeDensity = 1; } mass += sarea * shapeDensity; massc.x += sarea * sc.x * shapeDensity; massc.y += sarea * sc.y * shapeDensity; } if (area < Number.MIN_VALUE) { continue; } areac.x /= area; areac.y /= area; massc.x /= mass; massc.y /= mass; var buoyancyForce = this.gravity.GetNegative(); buoyancyForce.Multiply(this.density * area); body.ApplyForce(buoyancyForce, massc); var dragForce = body.GetLinearVelocityFromWorldPoint(areac); dragForce.Subtract(this.velocity); dragForce.Multiply((-this.linearDrag * area)); body.ApplyForce(dragForce, areac); body.ApplyTorque((-body.GetInertia() / body.GetMass() * area * body.GetAngularVelocity() * this.angularDrag)); Box2D.Common.Math.b2Vec2.Free(areac); Box2D.Common.Math.b2Vec2.Free(massc); } }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2ConstantAccelController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.A = Box2D.Common.Math.b2Vec2.Get(0, 0); }; c2inherit(Box2D.Dynamics.Controllers.b2ConstantAccelController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2ConstantAccelController.prototype.Step = function(step) { var smallA = Box2D.Common.Math.b2Vec2.Get(this.A.x * step.dt, this.A.y * step.dt); for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; var oldVelocity = body.GetLinearVelocity(); body.SetLinearVelocity(Box2D.Common.Math.b2Vec2.Get(oldVelocity.x + smallA.x, oldVelocity.y + smallA.y)); } Box2D.Common.Math.b2Vec2.Free(smallA); }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2ConstantForceController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.F = Box2D.Common.Math.b2Vec2.Get(0, 0); }; c2inherit(Box2D.Dynamics.Controllers.b2ConstantForceController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2ConstantForceController.prototype.Step = function(step) { for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; body.ApplyForce(this.F, body.GetWorldCenter()); } }; /** * @constructor */ Box2D.Dynamics.Controllers.b2ControllerList = function() { /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.controllerFirstNode = null; /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.controllerLastNode = null; /** * @private * @type {Object.<Box2D.Dynamics.Controllers.b2ControllerListNode>} */ this.controllerNodeLookup = {}; /** * @private * @type {number} */ this.controllerCount = 0; }; /** * @return {Box2D.Dynamics.Controllers.b2ControllerListNode} */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.GetFirstNode = function() { return this.controllerFirstNode; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.AddController = function(controller) { var controllerID = controller.ID; if (this.controllerNodeLookup[controllerID] == null) { var node = new Box2D.Dynamics.Controllers.b2ControllerListNode(controller); var prevNode = this.controllerLastNode; if (prevNode != null) { prevNode.SetNextNode(node); } else { this.controllerFirstNode = node; } node.SetPreviousNode(prevNode); this.controllerLastNode = node; this.controllerNodeLookup[controllerID] = node; this.controllerCount++; } }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.RemoveController = function(controller) { var controllerID = controller.ID; var node = this.controllerNodeLookup[controllerID]; if (node == null) { return; } var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.controllerFirstNode = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.controllerLastNode = prevNode; } else { nextNode.SetPreviousNode(prevNode); } delete this.controllerNodeLookup[controllerID]; this.controllerCount--; }; /** * @return {number} */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.GetControllerCount = function() { return this.controllerCount; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller * @constructor */ Box2D.Dynamics.Controllers.b2ControllerListNode = function(controller) { /** * @const * @type {!Box2D.Dynamics.Controllers.b2Controller} */ this.controller = controller; /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.previous = null; }; /** * @param {Box2D.Dynamics.Controllers.b2ControllerListNode} node */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.Controllers.b2ControllerListNode} node */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {Box2D.Dynamics.Controllers.b2ControllerListNode} */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.Controllers.b2ControllerListNode} */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2GravityController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.G = 1; this.invSqr = true; }; c2inherit(Box2D.Dynamics.Controllers.b2GravityController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2GravityController.prototype.Step = function(step) { var i = null; var body1 = null; var p1 = null; var mass1 = 0; var j = null; var body2 = null; var p2 = null; var dx = 0; var dy = 0; var r2 = 0; var f = null; if (this.invSqr) { for (var body1Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body1Node; body1Node = body1Node.GetNextNode()) { var body1 = body1Node.body; var p1 = body1.GetWorldCenter(); var mass1 = body1.GetMass(); for (var body2Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body2Node; body2Node = body2Node.GetNextNode()) { var body2 = body2Node.body; if ( !body1.IsAwake() && !body2.IsAwake() ) { continue; } var p2 = body2.GetWorldCenter(); var dx = p2.x - p1.x; var dy = p2.y - p1.y; var r2 = dx * dx + dy * dy; if (r2 < Number.MIN_VALUE) { continue; } var f = Box2D.Common.Math.b2Vec2.Get(dx, dy); f.Multiply(this.G / r2 / Math.sqrt(r2) * mass1 * body2.GetMass()); if (body1.IsAwake()) { body1.ApplyForce(f, p1); } f.Multiply(-1); if (body2.IsAwake()) { body2.ApplyForce(f, p2); } Box2D.Common.Math.b2Vec2.Free(f); } } } else { for (var body1Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body1Node; body1Node = body1Node.GetNextNode()) { var body1 = bodyNode.body; var p1 = body1.GetWorldCenter(); var mass1 = body1.GetMass(); for (var body2Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body2Node; body2Node = body2Node.GetNextNode()) { var body2 = bodyNode.body; if ( !body1.IsAwake() && !body2.IsAwake() ) { continue; } var p2 = body2.GetWorldCenter(); var dx = p2.x - p1.x; var dy = p2.y - p1.y; var r2 = dx * dx + dy * dy; if (r2 < Number.MIN_VALUE) { continue; } var f = Box2D.Common.Math.b2Vec2.Get(dx, dy); f.Multiply(this.G / r2 * mass1 * body2.GetMass()); if (body1.IsAwake()) { body1.ApplyForce(f, p1); } f.Multiply(-1); if (body2.IsAwake()) { body2.ApplyForce(f, p2); } Box2D.Common.Math.b2Vec2.Free(f); } } } }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2TensorDampingController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.T = new Box2D.Common.Math.b2Mat22(); this.maxTimestep = 0; }; c2inherit(Box2D.Dynamics.Controllers.b2TensorDampingController, Box2D.Dynamics.Controllers.b2Controller); /** * @param {number} xDamping * @param {number} yDamping */ Box2D.Dynamics.Controllers.b2TensorDampingController.prototype.SetAxisAligned = function(xDamping, yDamping) { this.T.col1.x = (-xDamping); this.T.col1.y = 0; this.T.col2.x = 0; this.T.col2.y = (-yDamping); if (xDamping > 0 || yDamping > 0) { this.maxTimestep = 1 / Math.max(xDamping, yDamping); } else { this.maxTimestep = 0; } }; Box2D.Dynamics.Controllers.b2TensorDampingController.prototype.Step = function(step) { var timestep = step.dt; if (timestep <= Number.MIN_VALUE) return; if (timestep > this.maxTimestep && this.maxTimestep > 0) timestep = this.maxTimestep; for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; var damping = body.GetWorldVector(Box2D.Common.Math.b2Math.MulMV(this.T, body.GetLocalVector(body.GetLinearVelocity()))); body.SetLinearVelocity(Box2D.Common.Math.b2Vec2.Get(body.GetLinearVelocity().x + damping.x * timestep, body.GetLinearVelocity().y + damping.y * timestep)); } }; /** * @param {!Box2D.Dynamics.Joints.b2JointDef} def * @constructor */ Box2D.Dynamics.Joints.b2Joint = function(def) { this.m_edgeA = new Box2D.Dynamics.Joints.b2JointEdge(); this.m_edgeB = new Box2D.Dynamics.Joints.b2JointEdge(); this.m_localCenterA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localCenterB = Box2D.Common.Math.b2Vec2.Get(0, 0); ; this.m_type = def.type; this.m_prev = null; this.m_next = null; this.m_bodyA = def.bodyA; this.m_bodyB = def.bodyB; this.m_collideConnected = def.collideConnected; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetType = function() { return this.m_type; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetAnchorA = function() { return null; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetAnchorB = function() { return null; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return null; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return 0.0; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetBodyA = function() { return this.m_bodyA; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetBodyB = function() { return this.m_bodyB; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetNext = function() { return this.m_next; }; Box2D.Dynamics.Joints.b2Joint.prototype.IsActive = function() { return this.m_bodyA.IsActive() && this.m_bodyB.IsActive(); }; Box2D.Dynamics.Joints.b2Joint.Create = function(def) { return def.Create(); }; Box2D.Dynamics.Joints.b2Joint.prototype.InitVelocityConstraints = function(step) {}; Box2D.Dynamics.Joints.b2Joint.prototype.SolveVelocityConstraints = function(step) {}; Box2D.Dynamics.Joints.b2Joint.prototype.FinalizeVelocityConstraints = function() {}; Box2D.Dynamics.Joints.b2Joint.prototype.SolvePositionConstraints = function(baumgarte) { return false; }; Box2D.Dynamics.Joints.b2Joint.e_unknownJoint = 0; Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint = 1; Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint = 2; Box2D.Dynamics.Joints.b2Joint.e_distanceJoint = 3; Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint = 4; Box2D.Dynamics.Joints.b2Joint.e_mouseJoint = 5; Box2D.Dynamics.Joints.b2Joint.e_gearJoint = 6; Box2D.Dynamics.Joints.b2Joint.e_lineJoint = 7; Box2D.Dynamics.Joints.b2Joint.e_weldJoint = 8; Box2D.Dynamics.Joints.b2Joint.e_frictionJoint = 9; Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit = 0; Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit = 1; Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit = 2; Box2D.Dynamics.Joints.b2Joint.e_equalLimits = 3; /** * @constructor */ Box2D.Dynamics.Joints.b2JointDef = function () { this.type = Box2D.Dynamics.Joints.b2Joint.e_unknownJoint; this.bodyA = null; this.bodyB = null; this.collideConnected = false; }; /** * @constructor */ Box2D.Dynamics.Joints.b2JointEdge = function () {}; /** * @param {!Box2D.Dynamics.Joints.b2DistanceJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2DistanceJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_u = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_length = def.length; this.m_frequencyHz = def.frequencyHz; this.m_dampingRatio = def.dampingRatio; this.m_impulse = 0.0; this.m_gamma = 0.0; this.m_bias = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2DistanceJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; /** * @param {number} inv_dt */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetReactionForce = function(inv_dt) { return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse * this.m_u.x, inv_dt * this.m_impulse * this.m_u.y); }; /** * @param {number} inv_dt */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetReactionTorque = function(inv_dt) { return 0.0; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetLength = function() { return this.m_length; }; /** * @param {number} length */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SetLength = function(length) { this.m_length = length; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetFrequency = function() { return this.m_frequencyHz; }; /** * @param {number} hz */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SetFrequency = function(hz) { this.m_frequencyHz = hz; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetDampingRatio = function() { return this.m_dampingRatio; }; /** * @param {number} ratio */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SetDampingRatio = function(ratio) { this.m_dampingRatio = ratio; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.InitVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; this.m_u.x = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; this.m_u.y = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; var length = Math.sqrt(this.m_u.x * this.m_u.x + this.m_u.y * this.m_u.y); if (length > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u.Multiply(1.0 / length); } else { this.m_u.SetZero(); } var cr1u = (r1X * this.m_u.y - r1Y * this.m_u.x); var cr2u = (r2X * this.m_u.y - r2Y * this.m_u.x); var invMass = bA.m_invMass + bA.m_invI * cr1u * cr1u + bB.m_invMass + bB.m_invI * cr2u * cr2u; this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; if (this.m_frequencyHz > 0.0) { var C = length - this.m_length; var omega = 2.0 * Math.PI * this.m_frequencyHz; var d = 2.0 * this.m_mass * this.m_dampingRatio * omega; var k = this.m_mass * omega * omega; this.m_gamma = step.dt * (d + step.dt * k); this.m_gamma = this.m_gamma != 0.0 ? 1 / this.m_gamma : 0.0; this.m_bias = C * step.dt * k * this.m_gamma; this.m_mass = invMass + this.m_gamma; this.m_mass = this.m_mass != 0.0 ? 1.0 / this.m_mass : 0.0; } if (step.warmStarting) { this.m_impulse *= step.dtRatio; var PX = this.m_impulse * this.m_u.x; var PY = this.m_impulse * this.m_u.y; bA.m_linearVelocity.x -= bA.m_invMass * PX; bA.m_linearVelocity.y -= bA.m_invMass * PY; bA.m_angularVelocity -= bA.m_invI * (r1X * PY - r1Y * PX); bB.m_linearVelocity.x += bB.m_invMass * PX; bB.m_linearVelocity.y += bB.m_invMass * PY; bB.m_angularVelocity += bB.m_invI * (r2X * PY - r2Y * PX); } else { this.m_impulse = 0.0; } }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SolveVelocityConstraints = function(step) { var r1X = this.m_localAnchor1.x - this.m_bodyA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - this.m_bodyA.m_sweep.localCenter.y; var tX = (this.m_bodyA.m_xf.R.col1.x * r1X + this.m_bodyA.m_xf.R.col2.x * r1Y); r1Y = (this.m_bodyA.m_xf.R.col1.y * r1X + this.m_bodyA.m_xf.R.col2.y * r1Y); r1X = tX; var r2X = this.m_localAnchor2.x - this.m_bodyB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - this.m_bodyB.m_sweep.localCenter.y; tX = (this.m_bodyB.m_xf.R.col1.x * r2X + this.m_bodyB.m_xf.R.col2.x * r2Y); r2Y = (this.m_bodyB.m_xf.R.col1.y * r2X + this.m_bodyB.m_xf.R.col2.y * r2Y); r2X = tX; var v1X = this.m_bodyA.m_linearVelocity.x - this.m_bodyA.m_angularVelocity * r1Y; var v1Y = this.m_bodyA.m_linearVelocity.y + this.m_bodyA.m_angularVelocity * r1X; var v2X = this.m_bodyB.m_linearVelocity.x - this.m_bodyB.m_angularVelocity * r2Y; var v2Y = this.m_bodyB.m_linearVelocity.y + this.m_bodyB.m_angularVelocity * r2X; var Cdot = (this.m_u.x * (v2X - v1X) + this.m_u.y * (v2Y - v1Y)); var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); this.m_impulse += impulse; var PX = impulse * this.m_u.x; var PY = impulse * this.m_u.y; this.m_bodyA.m_linearVelocity.x -= this.m_bodyA.m_invMass * PX; this.m_bodyA.m_linearVelocity.y -= this.m_bodyA.m_invMass * PY; this.m_bodyA.m_angularVelocity -= this.m_bodyA.m_invI * (r1X * PY - r1Y * PX); this.m_bodyB.m_linearVelocity.x += this.m_bodyB.m_invMass * PX; this.m_bodyB.m_linearVelocity.y += this.m_bodyB.m_invMass * PY; this.m_bodyB.m_angularVelocity += this.m_bodyB.m_invI * (r2X * PY - r2Y * PX); }; /** * @param {number} baumgarte */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (this.m_frequencyHz > 0.0) { return true; } var r1X = this.m_localAnchor1.x - this.m_bodyA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - this.m_bodyA.m_sweep.localCenter.y; var tX = (this.m_bodyA.m_xf.R.col1.x * r1X + this.m_bodyA.m_xf.R.col2.x * r1Y); r1Y = (this.m_bodyA.m_xf.R.col1.y * r1X + this.m_bodyA.m_xf.R.col2.y * r1Y); r1X = tX; var r2X = this.m_localAnchor2.x - this.m_bodyB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - this.m_bodyB.m_sweep.localCenter.y; tX = (this.m_bodyB.m_xf.R.col1.x * r2X + this.m_bodyB.m_xf.R.col2.x * r2Y); r2Y = (this.m_bodyB.m_xf.R.col1.y * r2X + this.m_bodyB.m_xf.R.col2.y * r2Y); r2X = tX; var dX = this.m_bodyB.m_sweep.c.x + r2X - this.m_bodyA.m_sweep.c.x - r1X; var dY = this.m_bodyB.m_sweep.c.y + r2Y - this.m_bodyA.m_sweep.c.y - r1Y; var length = Math.sqrt(dX * dX + dY * dY); dX /= length; dY /= length; var C = Box2D.Common.Math.b2Math.Clamp(length - this.m_length, -Box2D.Common.b2Settings.b2_maxLinearCorrection, Box2D.Common.b2Settings.b2_maxLinearCorrection); var impulse = -this.m_mass * C; this.m_u.Set(dX, dY); var PX = impulse * this.m_u.x; var PY = impulse * this.m_u.y; this.m_bodyA.m_sweep.c.x -= this.m_bodyA.m_invMass * PX; this.m_bodyA.m_sweep.c.y -= this.m_bodyA.m_invMass * PY; this.m_bodyA.m_sweep.a -= this.m_bodyA.m_invI * (r1X * PY - r1Y * PX); this.m_bodyB.m_sweep.c.x += this.m_bodyB.m_invMass * PX; this.m_bodyB.m_sweep.c.y += this.m_bodyB.m_invMass * PY; this.m_bodyB.m_sweep.a += this.m_bodyB.m_invI * (r2X * PY - r2Y * PX); this.m_bodyA.SynchronizeTransform(); this.m_bodyB.SynchronizeTransform(); return Math.abs(C) < Box2D.Common.b2Settings.b2_linearSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2DistanceJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_distanceJoint; this.length = 1.0; this.frequencyHz = 0.0; this.dampingRatio = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2DistanceJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2DistanceJointDef.prototype.Initialize = function(bA, bB, anchorA, anchorB) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchorA)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchorB)); var dX = anchorB.x - anchorA.x; var dY = anchorB.y - anchorA.y; this.length = Math.sqrt(dX * dX + dY * dY); this.frequencyHz = 0.0; this.dampingRatio = 0.0; }; Box2D.Dynamics.Joints.b2DistanceJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2DistanceJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2FrictionJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2FrictionJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_linearMass = new Box2D.Common.Math.b2Mat22(); this.m_linearImpulse = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchorA.SetV(def.localAnchorA); this.m_localAnchorB.SetV(def.localAnchorB); this.m_linearMass.SetZero(); this.m_angularMass = 0.0; this.m_linearImpulse.SetZero(); this.m_angularImpulse = 0.0; this.m_maxForce = def.maxForce; this.m_maxTorque = def.maxTorque; }; c2inherit(Box2D.Dynamics.Joints.b2FrictionJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA); }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB); }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return new b2Vec2(inv_dt * this.m_linearImpulse.x, inv_dt * this.m_linearImpulse.y); }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_angularImpulse; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SetMaxForce = function(force) { if (force === undefined) force = 0; this.m_maxForce = force; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetMaxForce = function() { return this.m_maxForce; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SetMaxTorque = function(torque) { if (torque === undefined) torque = 0; this.m_maxTorque = torque; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetMaxTorque = function() { return this.m_maxTorque; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.InitVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; var K = new Box2D.Common.Math.b2Mat22(); K.col1.x = mA + mB; K.col2.x = 0.0; K.col1.y = 0.0; K.col2.y = mA + mB; K.col1.x += iA * rAY * rAY; K.col2.x += (-iA * rAX * rAY); K.col1.y += (-iA * rAX * rAY); K.col2.y += iA * rAX * rAX; K.col1.x += iB * rBY * rBY; K.col2.x += (-iB * rBX * rBY); K.col1.y += (-iB * rBX * rBY); K.col2.y += iB * rBX * rBX; K.GetInverse(this.m_linearMass); this.m_angularMass = iA + iB; if (this.m_angularMass > 0.0) { this.m_angularMass = 1.0 / this.m_angularMass; } if (step.warmStarting) { this.m_linearImpulse.x *= step.dtRatio; this.m_linearImpulse.y *= step.dtRatio; this.m_angularImpulse *= step.dtRatio; var P = this.m_linearImpulse; bA.m_linearVelocity.x -= mA * P.x; bA.m_linearVelocity.y -= mA * P.y; bA.m_angularVelocity -= iA * (rAX * P.y - rAY * P.x + this.m_angularImpulse); bB.m_linearVelocity.x += mB * P.x; bB.m_linearVelocity.y += mB * P.y; bB.m_angularVelocity += iB * (rBX * P.y - rBY * P.x + this.m_angularImpulse); } else { this.m_linearImpulse.SetZero(); this.m_angularImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SolveVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var vA = bA.m_linearVelocity; var wA = bA.m_angularVelocity; var vB = bB.m_linearVelocity; var wB = bB.m_angularVelocity; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var maxImpulse = 0; var Cdot = wB - wA; var impulse = (-this.m_angularMass * Cdot); var oldImpulse = this.m_angularImpulse; maxImpulse = step.dt * this.m_maxTorque; this.m_angularImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_angularImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_angularImpulse - oldImpulse; wA -= iA * impulse; wB += iB * impulse; var CdotX = vB.x - wB * rBY - vA.x + wA * rAY; var CdotY = vB.y + wB * rBX - vA.y - wA * rAX; var impulseV = Box2D.Common.Math.b2Math.MulMV(this.m_linearMass, Box2D.Common.Math.b2Vec2.Get((-CdotX), (-CdotY))); var oldImpulseV = this.m_linearImpulse.Copy(); this.m_linearImpulse.Add(impulseV); maxImpulse = step.dt * this.m_maxForce; if (this.m_linearImpulse.LengthSquared() > maxImpulse * maxImpulse) { this.m_linearImpulse.Normalize(); this.m_linearImpulse.Multiply(maxImpulse); } impulseV = Box2D.Common.Math.b2Math.SubtractVV(this.m_linearImpulse, oldImpulseV); vA.x -= mA * impulseV.x; vA.y -= mA * impulseV.y; wA -= iA * (rAX * impulseV.y - rAY * impulseV.x); vB.x += mB * impulseV.x; vB.y += mB * impulseV.y; wB += iB * (rBX * impulseV.y - rBY * impulseV.x); bA.m_angularVelocity = wA; bB.m_angularVelocity = wB; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SolvePositionConstraints = function(baumgarte) { return true; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2FrictionJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_frictionJoint; this.maxForce = 0.0; this.maxTorque = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2FrictionJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2FrictionJointDef.prototype.Initialize = function (bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor)); }; Box2D.Dynamics.Joints.b2FrictionJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2FrictionJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2GearJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2GearJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_groundAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_groundAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_J = new Box2D.Dynamics.Joints.b2Jacobian(); var type1 = def.joint1.m_type; var type2 = def.joint2.m_type; this.m_revolute1 = null; this.m_prismatic1 = null; this.m_revolute2 = null; this.m_prismatic2 = null; var coordinate1 = 0; var coordinate2 = 0; this.m_ground1 = def.joint1.GetBodyA(); this.m_bodyA = def.joint1.GetBodyB(); if (type1 == Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint) { this.m_revolute1 = def.joint1; this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1); this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2); coordinate1 = this.m_revolute1.GetJointAngle(); } else { this.m_prismatic1 = def.joint1; this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1); this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2); coordinate1 = this.m_prismatic1.GetJointTranslation(); } this.m_ground2 = def.joint2.GetBodyA(); this.m_bodyB = def.joint2.GetBodyB(); if (type2 == Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint) { this.m_revolute2 = def.joint2; this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1); this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2); coordinate2 = this.m_revolute2.GetJointAngle(); } else { this.m_prismatic2 = def.joint2; this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1); this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2); coordinate2 = this.m_prismatic2.GetJointTranslation(); } this.m_ratio = def.ratio; this.m_constant = coordinate1 + this.m_ratio * coordinate2; this.m_impulse = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2GearJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2GearJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse * this.m_J.linearB.x, inv_dt * this.m_impulse * this.m_J.linearB.y); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; var tMat = this.m_bodyB.m_xf.R; var rX = this.m_localAnchor1.x - this.m_bodyB.m_sweep.localCenter.x; var rY = this.m_localAnchor1.y - this.m_bodyB.m_sweep.localCenter.y; var tX = tMat.col1.x * rX + tMat.col2.x * rY; rY = tMat.col1.y * rX + tMat.col2.y * rY; rX = tX; var PX = this.m_impulse * this.m_J.linearB.x; var PY = this.m_impulse * this.m_J.linearB.y; return inv_dt * (this.m_impulse * this.m_J.angularB - rX * PY + rY * PX); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetRatio = function() { return this.m_ratio; }; Box2D.Dynamics.Joints.b2GearJoint.prototype.SetRatio = function(ratio) { if (ratio === undefined) ratio = 0; this.m_ratio = ratio; }; Box2D.Dynamics.Joints.b2GearJoint.prototype.InitVelocityConstraints = function(step) { var g1 = this.m_ground1; var g2 = this.m_ground2; var bA = this.m_bodyA; var bB = this.m_bodyB; var ugX = 0; var ugY = 0; var rX = 0; var rY = 0; var tMat; var tVec; var crug = 0; var tX = 0; var K = 0.0; this.m_J.SetZero(); if (this.m_revolute1) { this.m_J.angularA = (-1.0); K += bA.m_invI; } else { tMat = g1.m_xf.R; tVec = this.m_prismatic1.m_localXAxis1; ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = bA.m_xf.R; rX = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; rY = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = tMat.col1.x * rX + tMat.col2.x * rY; rY = tMat.col1.y * rX + tMat.col2.y * rY; rX = tX; crug = rX * ugY - rY * ugX; this.m_J.linearA.Set((-ugX), (-ugY)); this.m_J.angularA = (-crug); K += bA.m_invMass + bA.m_invI * crug * crug; } if (this.m_revolute2) { this.m_J.angularB = (-this.m_ratio); K += this.m_ratio * this.m_ratio * bB.m_invI; } else { tMat = g2.m_xf.R; tVec = this.m_prismatic2.m_localXAxis1; ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = bB.m_xf.R; rX = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; rY = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = tMat.col1.x * rX + tMat.col2.x * rY; rY = tMat.col1.y * rX + tMat.col2.y * rY; rX = tX; crug = rX * ugY - rY * ugX; this.m_J.linearB.Set((-this.m_ratio * ugX), (-this.m_ratio * ugY)); this.m_J.angularB = (-this.m_ratio * crug); K += this.m_ratio * this.m_ratio * (bB.m_invMass + bB.m_invI * crug * crug); } this.m_mass = K > 0.0 ? 1.0 / K : 0.0; if (step.warmStarting) { bA.m_linearVelocity.x += bA.m_invMass * this.m_impulse * this.m_J.linearA.x; bA.m_linearVelocity.y += bA.m_invMass * this.m_impulse * this.m_J.linearA.y; bA.m_angularVelocity += bA.m_invI * this.m_impulse * this.m_J.angularA; bB.m_linearVelocity.x += bB.m_invMass * this.m_impulse * this.m_J.linearB.x; bB.m_linearVelocity.y += bB.m_invMass * this.m_impulse * this.m_J.linearB.y; bB.m_angularVelocity += bB.m_invI * this.m_impulse * this.m_J.angularB; } else { this.m_impulse = 0.0; } }; Box2D.Dynamics.Joints.b2GearJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var Cdot = this.m_J.Compute(bA.m_linearVelocity, bA.m_angularVelocity, bB.m_linearVelocity, bB.m_angularVelocity); var impulse = (-this.m_mass * Cdot); this.m_impulse += impulse; bA.m_linearVelocity.x += bA.m_invMass * impulse * this.m_J.linearA.x; bA.m_linearVelocity.y += bA.m_invMass * impulse * this.m_J.linearA.y; bA.m_angularVelocity += bA.m_invI * impulse * this.m_J.angularA; bB.m_linearVelocity.x += bB.m_invMass * impulse * this.m_J.linearB.x; bB.m_linearVelocity.y += bB.m_invMass * impulse * this.m_J.linearB.y; bB.m_angularVelocity += bB.m_invI * impulse * this.m_J.angularB; }; Box2D.Dynamics.Joints.b2GearJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var linearError = 0.0; var bA = this.m_bodyA; var bB = this.m_bodyB; var coordinate1 = 0; var coordinate2 = 0; if (this.m_revolute1) { coordinate1 = this.m_revolute1.GetJointAngle(); } else { coordinate1 = this.m_prismatic1.GetJointTranslation(); } if (this.m_revolute2) { coordinate2 = this.m_revolute2.GetJointAngle(); } else { coordinate2 = this.m_prismatic2.GetJointTranslation(); } var C = this.m_constant - (coordinate1 + this.m_ratio * coordinate2); var impulse = (-this.m_mass * C); bA.m_sweep.c.x += bA.m_invMass * impulse * this.m_J.linearA.x; bA.m_sweep.c.y += bA.m_invMass * impulse * this.m_J.linearA.y; bA.m_sweep.a += bA.m_invI * impulse * this.m_J.angularA; bB.m_sweep.c.x += bB.m_invMass * impulse * this.m_J.linearB.x; bB.m_sweep.c.y += bB.m_invMass * impulse * this.m_J.linearB.y; bB.m_sweep.a += bB.m_invI * impulse * this.m_J.angularB; bA.SynchronizeTransform(); bB.SynchronizeTransform(); return linearError < Box2D.Common.b2Settings.b2_linearSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2GearJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.type = Box2D.Dynamics.Joints.b2Joint.e_gearJoint; this.joint1 = null; this.joint2 = null; this.ratio = 1.0; }; c2inherit(Box2D.Dynamics.Joints.b2GearJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2GearJointDef.prototype.Initialize = function(joint1, joint2, ratio) { this.joint1 = joint1; this.bodyA = joint1.GetBodyA(); this.joint2 = joint2; this.bodyB = joint2.GetBodyA(); this.ratio = ratio; }; Box2D.Dynamics.Joints.b2GearJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2GearJoint(this); }; /** * @constructor */ Box2D.Dynamics.Joints.b2Jacobian = function() { this.linearA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.linearB = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Dynamics.Joints.b2Jacobian.prototype.SetZero = function() { this.linearA.SetZero(); this.angularA = 0.0; this.linearB.SetZero(); this.angularB = 0.0; }; Box2D.Dynamics.Joints.b2Jacobian.prototype.Set = function(x1, a1, x2, a2) { if (a1 === undefined) a1 = 0; if (a2 === undefined) a2 = 0; this.linearA.SetV(x1); this.angularA = a1; this.linearB.SetV(x2); this.angularB = a2; }; Box2D.Dynamics.Joints.b2Jacobian.prototype.Compute = function(x1, a1, x2, a2) { if (a1 === undefined) a1 = 0; if (a2 === undefined) a2 = 0; return (this.linearA.x * x1.x + this.linearA.y * x1.y) + this.angularA * a1 + (this.linearB.x * x2.x + this.linearB.y * x2.y) + this.angularB * a2; }; /** * @param {!Box2D.Dynamics.Joints.b2LineJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2LineJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localXAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localYAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_axis = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_perp = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_K = new Box2D.Common.Math.b2Mat22(); this.m_impulse = Box2D.Common.Math.b2Vec2.Get(0, 0); var tMat; var tX = 0; var tY = 0; this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_localXAxis1.SetV(def.localAxisA); this.m_localYAxis1.x = (-this.m_localXAxis1.y); this.m_localYAxis1.y = this.m_localXAxis1.x; this.m_impulse.SetZero(); this.m_motorMass = 0.0; this.m_motorImpulse = 0.0; this.m_lowerTranslation = def.lowerTranslation; this.m_upperTranslation = def.upperTranslation; this.m_maxMotorForce = def.maxMotorForce; this.m_motorSpeed = def.motorSpeed; this.m_enableLimit = def.enableLimit; this.m_enableMotor = def.enableMotor; this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_axis.SetZero(); this.m_perp.SetZero(); }; c2inherit(Box2D.Dynamics.Joints.b2LineJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2LineJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y)); }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_impulse.y; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetJointTranslation = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var p1 = bA.GetWorldPoint(this.m_localAnchor1); var p2 = bB.GetWorldPoint(this.m_localAnchor2); var dX = p2.x - p1.x; var dY = p2.y - p1.y; var axis = bA.GetWorldVector(this.m_localXAxis1); var translation = axis.x * dX + axis.y * dY; return translation; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetJointSpeed = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var p1X = bA.m_sweep.c.x + r1X; var p1Y = bA.m_sweep.c.y + r1Y; var p2X = bB.m_sweep.c.x + r2X; var p2Y = bB.m_sweep.c.y + r2Y; var dX = p2X - p1X; var dY = p2Y - p1Y; var axis = bA.GetWorldVector(this.m_localXAxis1); var v1 = bA.m_linearVelocity; var v2 = bB.m_linearVelocity; var w1 = bA.m_angularVelocity; var w2 = bB.m_angularVelocity; var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X))); return speed; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.EnableLimit = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableLimit = flag; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetLowerLimit = function() { return this.m_lowerTranslation; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetUpperLimit = function() { return this.m_upperTranslation; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SetLimits = function(lower, upper) { if (lower === undefined) lower = 0; if (upper === undefined) upper = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_lowerTranslation = lower; this.m_upperTranslation = upper; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.EnableMotor = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableMotor = flag; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SetMotorSpeed = function(speed) { if (speed === undefined) speed = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_motorSpeed = speed; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SetMaxMotorForce = function(force) { if (force === undefined) force = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_maxMotorForce = force; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetMaxMotorForce = function() { return this.m_maxMotorForce; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetMotorForce = function() { return this.m_motorImpulse; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; this.m_localCenterA.SetV(bA.GetLocalCenter()); this.m_localCenterB.SetV(bB.GetLocalCenter()); var xf1 = bA.GetTransform(); var xf2 = bB.GetTransform(); tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; this.m_invMassA = bA.m_invMass; this.m_invMassB = bB.m_invMass; this.m_invIA = bA.m_invI; this.m_invIB = bB.m_invI; this.m_axis.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localXAxis1)); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2; this.m_motorMass = this.m_motorMass > Number.MIN_VALUE ? 1.0 / this.m_motorMass : 0.0; this.m_perp.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localYAxis1)); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var m1 = this.m_invMassA; var m2 = this.m_invMassB; var i1 = this.m_invIA; var i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; if (this.m_enableLimit) { var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_equalLimits; } else if (jointTransition <= this.m_lowerTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit; this.m_impulse.y = 0.0; } } else if (jointTransition >= this.m_upperTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; this.m_impulse.y = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse.y = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; } if (this.m_enableMotor == false) { this.m_motorImpulse = 0.0; } if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_motorImpulse *= step.dtRatio; var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x; var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y; var L1 = this.m_impulse.x * this.m_s1 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a1; var L2 = this.m_impulse.x * this.m_s2 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a2; bA.m_linearVelocity.x -= this.m_invMassA * PX; bA.m_linearVelocity.y -= this.m_invMassA * PY; bA.m_angularVelocity -= this.m_invIA * L1; bB.m_linearVelocity.x += this.m_invMassB * PX; bB.m_linearVelocity.y += this.m_invMassB * PY; bB.m_angularVelocity += this.m_invIB * L2; } else { this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var v1 = bA.m_linearVelocity; var w1 = bA.m_angularVelocity; var v2 = bB.m_linearVelocity; var w2 = bB.m_angularVelocity; var PX = 0; var PY = 0; var L1 = 0; var L2 = 0; if (this.m_enableMotor && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); var oldImpulse = this.m_motorImpulse; var maxImpulse = step.dt * this.m_maxMotorForce; this.m_motorImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_motorImpulse - oldImpulse; PX = impulse * this.m_axis.x; PY = impulse * this.m_axis.y; L1 = impulse * this.m_a1; L2 = impulse * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } var Cdot1 = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1; if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var f1 = this.m_impulse.Copy(); var df = this.m_K.Solve(Box2D.Common.Math.b2Vec2.Get(0, 0), (-Cdot1), (-Cdot2)); this.m_impulse.Add(df); if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_impulse.y = Math.max(this.m_impulse.y, 0.0); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_impulse.y = Math.min(this.m_impulse.y, 0.0); } var b = (-Cdot1) - (this.m_impulse.y - f1.y) * this.m_K.col2.x; var f2r = 0; if (this.m_K.col1.x != 0.0) { f2r = b / this.m_K.col1.x + f1.x; } else { f2r = f1.x; } this.m_impulse.x = f2r; df.x = this.m_impulse.x - f1.x; df.y = this.m_impulse.y - f1.y; PX = df.x * this.m_perp.x + df.y * this.m_axis.x; PY = df.x * this.m_perp.y + df.y * this.m_axis.y; L1 = df.x * this.m_s1 + df.y * this.m_a1; L2 = df.x * this.m_s2 + df.y * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } else { var df2 = 0; if (this.m_K.col1.x != 0.0) { df2 = ((-Cdot1)) / this.m_K.col1.x; } else { df2 = 0.0; } this.m_impulse.x += df2; PX = df2 * this.m_perp.x; PY = df2 * this.m_perp.y; L1 = df2 * this.m_s1; L2 = df2 * this.m_s2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } bA.m_linearVelocity.SetV(v1); bA.m_angularVelocity = w1; bB.m_linearVelocity.SetV(v2); bB.m_angularVelocity = w2; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var limitC = 0; var oldLimitImpulse = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var c1 = bA.m_sweep.c; var a1 = bA.m_sweep.a; var c2 = bB.m_sweep.c; var a2 = bB.m_sweep.a; var tMat; var tX = 0; var m1 = 0; var m2 = 0; var i1 = 0; var i2 = 0; var linearError = 0.0; var angularError = 0.0; var active = false; var C2 = 0.0; var R1 = Box2D.Common.Math.b2Mat22.FromAngle(a1); var R2 = Box2D.Common.Math.b2Mat22.FromAngle(a2); tMat = R1; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = R2; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = c2.x + r2X - c1.x - r1X; var dY = c2.y + r2Y - c1.y - r1Y; if (this.m_enableLimit) { this.m_axis = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localXAxis1); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; var translation = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { C2 = Box2D.Common.Math.b2Math.Clamp(translation, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = Math.abs(translation); active = true; } else if (translation <= this.m_lowerTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_lowerTranslation + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); linearError = this.m_lowerTranslation - translation; active = true; } else if (translation >= this.m_upperTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_upperTranslation + Box2D.Common.b2Settings.b2_linearSlop, 0.0, Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = translation - this.m_upperTranslation; active = true; } } this.m_perp = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localYAxis1); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var impulse = Box2D.Common.Math.b2Vec2.Get(0, 0); var C1 = this.m_perp.x * dX + this.m_perp.y * dY; linearError = Math.max(linearError, Math.abs(C1)); angularError = 0.0; if (active) { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; this.m_K.Solve(impulse, (-C1), (-C2)); } else { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; var impulse1 = 0; if (k11 != 0.0) { impulse1 = ((-C1)) / k11; } else { impulse1 = 0.0; } impulse.x = impulse1; impulse.y = 0.0; } var PX = impulse.x * this.m_perp.x + impulse.y * this.m_axis.x; var PY = impulse.x * this.m_perp.y + impulse.y * this.m_axis.y; var L1 = impulse.x * this.m_s1 + impulse.y * this.m_a1; var L2 = impulse.x * this.m_s2 + impulse.y * this.m_a2; c1.x -= this.m_invMassA * PX; c1.y -= this.m_invMassA * PY; a1 -= this.m_invIA * L1; c2.x += this.m_invMassB * PX; c2.y += this.m_invMassB * PY; a2 += this.m_invIB * L2; bA.m_sweep.a = a1; bB.m_sweep.a = a2; bA.SynchronizeTransform(); bB.SynchronizeTransform(); return linearError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2LineJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAxisA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_lineJoint; this.localAxisA.Set(1.0, 0.0); this.enableLimit = false; this.lowerTranslation = 0.0; this.upperTranslation = 0.0; this.enableMotor = false; this.maxMotorForce = 0.0; this.motorSpeed = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2LineJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2LineJointDef.prototype.Initialize = function(bA, bB, anchor, axis) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.localAxisA = this.bodyA.GetLocalVector(axis); }; Box2D.Dynamics.Joints.b2LineJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2LineJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2PrismaticJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2PrismaticJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localXAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localYAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_axis = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_perp = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_K = new Box2D.Common.Math.b2Mat33(); this.m_impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_localXAxis1.SetV(def.localAxisA); this.m_localYAxis1.x = (-this.m_localXAxis1.y); this.m_localYAxis1.y = this.m_localXAxis1.x; this.m_refAngle = def.referenceAngle; this.m_impulse.SetZero(); this.m_motorMass = 0.0; this.m_motorImpulse = 0.0; this.m_lowerTranslation = def.lowerTranslation; this.m_upperTranslation = def.upperTranslation; this.m_maxMotorForce = def.maxMotorForce; this.m_motorSpeed = def.motorSpeed; this.m_enableLimit = def.enableLimit; this.m_enableMotor = def.enableMotor; this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_axis.SetZero(); this.m_perp.SetZero(); }; c2inherit(Box2D.Dynamics.Joints.b2PrismaticJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y)); }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_impulse.y; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetJointTranslation = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var p1 = bA.GetWorldPoint(this.m_localAnchor1); var p2 = bB.GetWorldPoint(this.m_localAnchor2); var dX = p2.x - p1.x; var dY = p2.y - p1.y; var axis = bA.GetWorldVector(this.m_localXAxis1); var translation = axis.x * dX + axis.y * dY; return translation; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetJointSpeed = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var p1X = bA.m_sweep.c.x + r1X; var p1Y = bA.m_sweep.c.y + r1Y; var p2X = bB.m_sweep.c.x + r2X; var p2Y = bB.m_sweep.c.y + r2Y; var dX = p2X - p1X; var dY = p2Y - p1Y; var axis = bA.GetWorldVector(this.m_localXAxis1); var v1 = bA.m_linearVelocity; var v2 = bB.m_linearVelocity; var w1 = bA.m_angularVelocity; var w2 = bB.m_angularVelocity; var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X))); return speed; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.EnableLimit = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableLimit = flag; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetLowerLimit = function() { return this.m_lowerTranslation; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetUpperLimit = function() { return this.m_upperTranslation; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SetLimits = function(lower, upper) { if (lower === undefined) lower = 0; if (upper === undefined) upper = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_lowerTranslation = lower; this.m_upperTranslation = upper; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.EnableMotor = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableMotor = flag; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SetMotorSpeed = function(speed) { if (speed === undefined) speed = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_motorSpeed = speed; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SetMaxMotorForce = function(force) { if (force === undefined) force = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_maxMotorForce = force; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetMotorForce = function() { return this.m_motorImpulse; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; this.m_localCenterA.SetV(bA.GetLocalCenter()); this.m_localCenterB.SetV(bB.GetLocalCenter()); var xf1 = bA.GetTransform(); var xf2 = bB.GetTransform(); tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; this.m_invMassA = bA.m_invMass; this.m_invMassB = bB.m_invMass; this.m_invIA = bA.m_invI; this.m_invIB = bB.m_invI; this.m_axis.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localXAxis1)); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2; if (this.m_motorMass > Number.MIN_VALUE) this.m_motorMass = 1.0 / this.m_motorMass; this.m_perp.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localYAxis1)); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var m1 = this.m_invMassA; var m2 = this.m_invMassB; var i1 = this.m_invIA; var i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2; this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = i1 + i2; this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2; this.m_K.col3.x = this.m_K.col1.z; this.m_K.col3.y = this.m_K.col2.z; this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; if (this.m_enableLimit) { var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_equalLimits; } else if (jointTransition <= this.m_lowerTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit; this.m_impulse.z = 0.0; } } else if (jointTransition >= this.m_upperTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; this.m_impulse.z = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse.z = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; } if (this.m_enableMotor == false) { this.m_motorImpulse = 0.0; } if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_motorImpulse *= step.dtRatio; var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x; var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y; var L1 = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; var L2 = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; bA.m_linearVelocity.x -= this.m_invMassA * PX; bA.m_linearVelocity.y -= this.m_invMassA * PY; bA.m_angularVelocity -= this.m_invIA * L1; bB.m_linearVelocity.x += this.m_invMassB * PX; bB.m_linearVelocity.y += this.m_invMassB * PY; bB.m_angularVelocity += this.m_invIB * L2; } else { this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var v1 = bA.m_linearVelocity; var w1 = bA.m_angularVelocity; var v2 = bB.m_linearVelocity; var w2 = bB.m_angularVelocity; var PX = 0; var PY = 0; var L1 = 0; var L2 = 0; if (this.m_enableMotor && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); var oldImpulse = this.m_motorImpulse; var maxImpulse = step.dt * this.m_maxMotorForce; this.m_motorImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_motorImpulse - oldImpulse; PX = impulse * this.m_axis.x; PY = impulse * this.m_axis.y; L1 = impulse * this.m_a1; L2 = impulse * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } var Cdot1X = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1; var Cdot1Y = w2 - w1; if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var f1 = this.m_impulse.Copy(); var df = this.m_K.Solve33(new Box2D.Common.Math.b2Vec3(0, 0, 0), (-Cdot1X), (-Cdot1Y), (-Cdot2)); this.m_impulse.Add(df); if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_impulse.z = Math.max(this.m_impulse.z, 0.0); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_impulse.z = Math.min(this.m_impulse.z, 0.0); } var bX = (-Cdot1X) - (this.m_impulse.z - f1.z) * this.m_K.col3.x; var bY = (-Cdot1Y) - (this.m_impulse.z - f1.z) * this.m_K.col3.y; var f2r = this.m_K.Solve22(Box2D.Common.Math.b2Vec2.Get(0, 0), bX, bY); f2r.x += f1.x; f2r.y += f1.y; this.m_impulse.x = f2r.x; this.m_impulse.y = f2r.y; df.x = this.m_impulse.x - f1.x; df.y = this.m_impulse.y - f1.y; df.z = this.m_impulse.z - f1.z; PX = df.x * this.m_perp.x + df.z * this.m_axis.x; PY = df.x * this.m_perp.y + df.z * this.m_axis.y; L1 = df.x * this.m_s1 + df.y + df.z * this.m_a1; L2 = df.x * this.m_s2 + df.y + df.z * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } else { var df2 = this.m_K.Solve22(Box2D.Common.Math.b2Vec2.Get(0, 0), (-Cdot1X), (-Cdot1Y)); this.m_impulse.x += df2.x; this.m_impulse.y += df2.y; PX = df2.x * this.m_perp.x; PY = df2.x * this.m_perp.y; L1 = df2.x * this.m_s1 + df2.y; L2 = df2.x * this.m_s2 + df2.y; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } bA.m_linearVelocity.SetV(v1); bA.m_angularVelocity = w1; bB.m_linearVelocity.SetV(v2); bB.m_angularVelocity = w2; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var limitC = 0; var oldLimitImpulse = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var c1 = bA.m_sweep.c; var a1 = bA.m_sweep.a; var c2 = bB.m_sweep.c; var a2 = bB.m_sweep.a; var tMat; var tX = 0; var m1 = 0; var m2 = 0; var i1 = 0; var i2 = 0; var linearError = 0.0; var angularError = 0.0; var active = false; var C2 = 0.0; var R1 = Box2D.Common.Math.b2Mat22.FromAngle(a1); var R2 = Box2D.Common.Math.b2Mat22.FromAngle(a2); tMat = R1; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = R2; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = c2.x + r2X - c1.x - r1X; var dY = c2.y + r2Y - c1.y - r1Y; if (this.m_enableLimit) { this.m_axis = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localXAxis1); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; var translation = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { C2 = Box2D.Common.Math.b2Math.Clamp(translation, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = Math.abs(translation); active = true; } else if (translation <= this.m_lowerTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_lowerTranslation + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); linearError = this.m_lowerTranslation - translation; active = true; } else if (translation >= this.m_upperTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_upperTranslation + Box2D.Common.b2Settings.b2_linearSlop, 0.0, Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = translation - this.m_upperTranslation; active = true; } } this.m_perp = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localYAxis1); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); var C1X = this.m_perp.x * dX + this.m_perp.y * dY; var C1Y = a2 - a1 - this.m_refAngle; linearError = Math.max(linearError, Math.abs(C1X)); angularError = Math.abs(C1Y); if (active) { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2; this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = i1 + i2; this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2; this.m_K.col3.x = this.m_K.col1.z; this.m_K.col3.y = this.m_K.col2.z; this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; this.m_K.Solve33(impulse, (-C1X), (-C1Y), (-C2)); } else { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; var k12 = i1 * this.m_s1 + i2 * this.m_s2; var k22 = i1 + i2; this.m_K.col1.Set(k11, k12, 0.0); this.m_K.col2.Set(k12, k22, 0.0); var impulse1 = this.m_K.Solve22(Box2D.Common.Math.b2Vec2.Get(0, 0), (-C1X), (-C1Y)); impulse.x = impulse1.x; impulse.y = impulse1.y; impulse.z = 0.0; } var PX = impulse.x * this.m_perp.x + impulse.z * this.m_axis.x; var PY = impulse.x * this.m_perp.y + impulse.z * this.m_axis.y; var L1 = impulse.x * this.m_s1 + impulse.y + impulse.z * this.m_a1; var L2 = impulse.x * this.m_s2 + impulse.y + impulse.z * this.m_a2; c1.x -= this.m_invMassA * PX; c1.y -= this.m_invMassA * PY; a1 -= this.m_invIA * L1; c2.x += this.m_invMassB * PX; c2.y += this.m_invMassB * PY; a2 += this.m_invIB * L2; bA.m_sweep.a = a1; bB.m_sweep.a = a2; bA.SynchronizeTransform(); bB.SynchronizeTransform(); return linearError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2PrismaticJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAxisA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint; this.localAxisA.Set(1.0, 0.0); this.referenceAngle = 0.0; this.enableLimit = false; this.lowerTranslation = 0.0; this.upperTranslation = 0.0; this.enableMotor = false; this.maxMotorForce = 0.0; this.motorSpeed = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2PrismaticJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2PrismaticJointDef.prototype.Initialize = function(bA, bB, anchor, axis) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.localAxisA = this.bodyA.GetLocalVector(axis); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2PrismaticJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2PrismaticJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2PulleyJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2PulleyJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_groundAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_groundAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_u1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_u2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_ground = this.m_bodyA.m_world.m_groundBody; this.m_groundAnchor1.x = def.groundAnchorA.x - this.m_ground.m_xf.position.x; this.m_groundAnchor1.y = def.groundAnchorA.y - this.m_ground.m_xf.position.y; this.m_groundAnchor2.x = def.groundAnchorB.x - this.m_ground.m_xf.position.x; this.m_groundAnchor2.y = def.groundAnchorB.y - this.m_ground.m_xf.position.y; this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_ratio = def.ratio; this.m_constant = def.lengthA + this.m_ratio * def.lengthB; this.m_maxLength1 = Math.min(def.maxLengthA, this.m_constant - this.m_ratio * Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength); this.m_maxLength2 = Math.min(def.maxLengthB, (this.m_constant - Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength) / this.m_ratio); this.m_impulse = 0.0; this.m_limitImpulse1 = 0.0; this.m_limitImpulse2 = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2PulleyJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse * this.m_u2.x, inv_dt * this.m_impulse * this.m_u2.y); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return 0.0; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetGroundAnchorA = function() { var a = this.m_ground.m_xf.position.Copy(); a.Add(this.m_groundAnchor1); return a; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetGroundAnchorB = function() { var a = this.m_ground.m_xf.position.Copy(); a.Add(this.m_groundAnchor2); return a; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetLength1 = function() { var p = this.m_bodyA.GetWorldPoint(this.m_localAnchor1); var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x; var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y; var dX = p.x - sX; var dY = p.y - sY; return Math.sqrt(dX * dX + dY * dY); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetLength2 = function() { var p = this.m_bodyB.GetWorldPoint(this.m_localAnchor2); var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x; var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; var dX = p.x - sX; var dY = p.y - sY; return Math.sqrt(dX * dX + dY * dY); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetRatio = function() { return this.m_ratio; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var p1X = bA.m_sweep.c.x + r1X; var p1Y = bA.m_sweep.c.y + r1Y; var p2X = bB.m_sweep.c.x + r2X; var p2Y = bB.m_sweep.c.y + r2Y; var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x; var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y; var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x; var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; this.m_u1.Set(p1X - s1X, p1Y - s1Y); this.m_u2.Set(p2X - s2X, p2Y - s2Y); var length1 = this.m_u1.Length(); var length2 = this.m_u2.Length(); if (length1 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u1.Multiply(1.0 / length1); } else { this.m_u1.SetZero(); } if (length2 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u2.Multiply(1.0 / length2); } else { this.m_u2.SetZero(); } var C = this.m_constant - length1 - this.m_ratio * length2; if (C > 0.0) { this.m_state = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse = 0.0; } else { this.m_state = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } if (length1 < this.m_maxLength1) { this.m_limitState1 = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_limitImpulse1 = 0.0; } else { this.m_limitState1 = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } if (length2 < this.m_maxLength2) { this.m_limitState2 = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_limitImpulse2 = 0.0; } else { this.m_limitState2 = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } var cr1u1 = r1X * this.m_u1.y - r1Y * this.m_u1.x; var cr2u2 = r2X * this.m_u2.y - r2Y * this.m_u2.x; this.m_limitMass1 = bA.m_invMass + bA.m_invI * cr1u1 * cr1u1; this.m_limitMass2 = bB.m_invMass + bB.m_invI * cr2u2 * cr2u2; this.m_pulleyMass = this.m_limitMass1 + this.m_ratio * this.m_ratio * this.m_limitMass2; this.m_limitMass1 = 1.0 / this.m_limitMass1; this.m_limitMass2 = 1.0 / this.m_limitMass2; this.m_pulleyMass = 1.0 / this.m_pulleyMass; if (step.warmStarting) { this.m_impulse *= step.dtRatio; this.m_limitImpulse1 *= step.dtRatio; this.m_limitImpulse2 *= step.dtRatio; var P1X = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.x; var P1Y = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.y; var P2X = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.x; var P2Y = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.y; bA.m_linearVelocity.x += bA.m_invMass * P1X; bA.m_linearVelocity.y += bA.m_invMass * P1Y; bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X); bB.m_linearVelocity.x += bB.m_invMass * P2X; bB.m_linearVelocity.y += bB.m_invMass * P2Y; bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X); } else { this.m_impulse = 0.0; this.m_limitImpulse1 = 0.0; this.m_limitImpulse2 = 0.0; } }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var v1X = 0; var v1Y = 0; var v2X = 0; var v2Y = 0; var P1X = 0; var P1Y = 0; var P2X = 0; var P2Y = 0; var Cdot = 0; var impulse = 0; var oldImpulse = 0; if (this.m_state == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y)); v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X); v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y)); v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X); Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y)) - this.m_ratio * (this.m_u2.x * v2X + this.m_u2.y * v2Y); impulse = this.m_pulleyMass * ((-Cdot)); oldImpulse = this.m_impulse; this.m_impulse = Math.max(0.0, this.m_impulse + impulse); impulse = this.m_impulse - oldImpulse; P1X = (-impulse * this.m_u1.x); P1Y = (-impulse * this.m_u1.y); P2X = (-this.m_ratio * impulse * this.m_u2.x); P2Y = (-this.m_ratio * impulse * this.m_u2.y); bA.m_linearVelocity.x += bA.m_invMass * P1X; bA.m_linearVelocity.y += bA.m_invMass * P1Y; bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X); bB.m_linearVelocity.x += bB.m_invMass * P2X; bB.m_linearVelocity.y += bB.m_invMass * P2Y; bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X); } if (this.m_limitState1 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y)); v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X); Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y)); impulse = (-this.m_limitMass1 * Cdot); oldImpulse = this.m_limitImpulse1; this.m_limitImpulse1 = Math.max(0.0, this.m_limitImpulse1 + impulse); impulse = this.m_limitImpulse1 - oldImpulse; P1X = (-impulse * this.m_u1.x); P1Y = (-impulse * this.m_u1.y); bA.m_linearVelocity.x += bA.m_invMass * P1X; bA.m_linearVelocity.y += bA.m_invMass * P1Y; bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X); } if (this.m_limitState2 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y)); v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X); Cdot = (-(this.m_u2.x * v2X + this.m_u2.y * v2Y)); impulse = (-this.m_limitMass2 * Cdot); oldImpulse = this.m_limitImpulse2; this.m_limitImpulse2 = Math.max(0.0, this.m_limitImpulse2 + impulse); impulse = this.m_limitImpulse2 - oldImpulse; P2X = (-impulse * this.m_u2.x); P2Y = (-impulse * this.m_u2.y); bB.m_linearVelocity.x += bB.m_invMass * P2X; bB.m_linearVelocity.y += bB.m_invMass * P2Y; bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X); } }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x; var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y; var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x; var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; var r1X = 0; var r1Y = 0; var r2X = 0; var r2Y = 0; var p1X = 0; var p1Y = 0; var p2X = 0; var p2Y = 0; var length1 = 0; var length2 = 0; var C = 0; var impulse = 0; var oldImpulse = 0; var oldLimitPositionImpulse = 0; var tX = 0; var linearError = 0.0; if (this.m_state == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; p1X = bA.m_sweep.c.x + r1X; p1Y = bA.m_sweep.c.y + r1Y; p2X = bB.m_sweep.c.x + r2X; p2Y = bB.m_sweep.c.y + r2Y; this.m_u1.Set(p1X - s1X, p1Y - s1Y); this.m_u2.Set(p2X - s2X, p2Y - s2Y); length1 = this.m_u1.Length(); length2 = this.m_u2.Length(); if (length1 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u1.Multiply(1.0 / length1); } else { this.m_u1.SetZero(); } if (length2 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u2.Multiply(1.0 / length2); } else { this.m_u2.SetZero(); } C = this.m_constant - length1 - this.m_ratio * length2; linearError = Math.max(linearError, (-C)); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); impulse = (-this.m_pulleyMass * C); p1X = (-impulse * this.m_u1.x); p1Y = (-impulse * this.m_u1.y); p2X = (-this.m_ratio * impulse * this.m_u2.x); p2Y = (-this.m_ratio * impulse * this.m_u2.y); bA.m_sweep.c.x += bA.m_invMass * p1X; bA.m_sweep.c.y += bA.m_invMass * p1Y; bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X); bB.m_sweep.c.x += bB.m_invMass * p2X; bB.m_sweep.c.y += bB.m_invMass * p2Y; bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X); bA.SynchronizeTransform(); bB.SynchronizeTransform(); } if (this.m_limitState1 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; p1X = bA.m_sweep.c.x + r1X; p1Y = bA.m_sweep.c.y + r1Y; this.m_u1.Set(p1X - s1X, p1Y - s1Y); length1 = this.m_u1.Length(); if (length1 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u1.x *= 1.0 / length1; this.m_u1.y *= 1.0 / length1; } else { this.m_u1.SetZero(); } C = this.m_maxLength1 - length1; linearError = Math.max(linearError, (-C)); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); impulse = (-this.m_limitMass1 * C); p1X = (-impulse * this.m_u1.x); p1Y = (-impulse * this.m_u1.y); bA.m_sweep.c.x += bA.m_invMass * p1X; bA.m_sweep.c.y += bA.m_invMass * p1Y; bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X); bA.SynchronizeTransform(); } if (this.m_limitState2 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; p2X = bB.m_sweep.c.x + r2X; p2Y = bB.m_sweep.c.y + r2Y; this.m_u2.Set(p2X - s2X, p2Y - s2Y); length2 = this.m_u2.Length(); if (length2 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u2.x *= 1.0 / length2; this.m_u2.y *= 1.0 / length2; } else { this.m_u2.SetZero(); } C = this.m_maxLength2 - length2; linearError = Math.max(linearError, (-C)); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); impulse = (-this.m_limitMass2 * C); p2X = (-impulse * this.m_u2.x); p2Y = (-impulse * this.m_u2.y); bB.m_sweep.c.x += bB.m_invMass * p2X; bB.m_sweep.c.y += bB.m_invMass * p2Y; bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X); bB.SynchronizeTransform(); } return linearError < Box2D.Common.b2Settings.b2_linearSlop; }; Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength = 1.0; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2PulleyJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.groundAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.groundAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint; this.groundAnchorA.Set((-1.0), 1.0); this.groundAnchorB.Set(1.0, 1.0); this.localAnchorA.Set((-1.0), 0.0); this.localAnchorB.Set(1.0, 0.0); this.lengthA = 0.0; this.maxLengthA = 0.0; this.lengthB = 0.0; this.maxLengthB = 0.0; this.ratio = 1.0; this.collideConnected = true; }; c2inherit(Box2D.Dynamics.Joints.b2PulleyJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2PulleyJointDef.prototype.Initialize = function(bA, bB, gaA, gaB, anchorA, anchorB, r) { if (r === undefined) r = 0; this.bodyA = bA; this.bodyB = bB; this.groundAnchorA.SetV(gaA); this.groundAnchorB.SetV(gaB); this.localAnchorA = this.bodyA.GetLocalPoint(anchorA); this.localAnchorB = this.bodyB.GetLocalPoint(anchorB); var d1X = anchorA.x - gaA.x; var d1Y = anchorA.y - gaA.y; this.lengthA = Math.sqrt(d1X * d1X + d1Y * d1Y); var d2X = anchorB.x - gaB.x; var d2Y = anchorB.y - gaB.y; this.lengthB = Math.sqrt(d2X * d2X + d2Y * d2Y); this.ratio = r; var C = this.lengthA + this.ratio * this.lengthB; this.maxLengthA = C - this.ratio * Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength; this.maxLengthB = (C - Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength) / this.ratio; }; Box2D.Dynamics.Joints.b2PulleyJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2PulleyJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2RevoluteJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2RevoluteJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.K = new Box2D.Common.Math.b2Mat22(); this.K1 = new Box2D.Common.Math.b2Mat22(); this.K2 = new Box2D.Common.Math.b2Mat22(); this.K3 = new Box2D.Common.Math.b2Mat22(); this.impulse3 = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.impulse2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.reduced = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass = new Box2D.Common.Math.b2Mat33(); this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_referenceAngle = def.referenceAngle; this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; this.m_lowerAngle = def.lowerAngle; this.m_upperAngle = def.upperAngle; this.m_maxMotorTorque = def.maxMotorTorque; this.m_motorSpeed = def.motorSpeed; this.m_enableLimit = def.enableLimit; this.m_enableMotor = def.enableMotor; this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; }; c2inherit(Box2D.Dynamics.Joints.b2RevoluteJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y); }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_impulse.z; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetJointAngle = function() { return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetJointSpeed = function() { return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.EnableLimit = function(flag) { this.m_enableLimit = flag; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetLowerLimit = function() { return this.m_lowerAngle; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetUpperLimit = function() { return this.m_upperAngle; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SetLimits = function(lower, upper) { if (lower === undefined) lower = 0; if (upper === undefined) upper = 0; this.m_lowerAngle = lower; this.m_upperAngle = upper; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.IsMotorEnabled = function() { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); return this.m_enableMotor; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.EnableMotor = function(flag) { this.m_enableMotor = flag; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SetMotorSpeed = function(speed) { if (speed === undefined) speed = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_motorSpeed = speed; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SetMaxMotorTorque = function(torque) { if (torque === undefined) torque = 0; this.m_maxMotorTorque = torque; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetMotorTorque = function() { return this.m_maxMotorTorque; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var m1 = bA.m_invMass; var m2 = bB.m_invMass; var i1 = bA.m_invI; var i2 = bB.m_invI; this.m_mass.col1.x = m1 + m2 + r1Y * r1Y * i1 + r2Y * r2Y * i2; this.m_mass.col2.x = (-r1Y * r1X * i1) - r2Y * r2X * i2; this.m_mass.col3.x = (-r1Y * i1) - r2Y * i2; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = m1 + m2 + r1X * r1X * i1 + r2X * r2X * i2; this.m_mass.col3.y = r1X * i1 + r2X * i2; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = i1 + i2; this.m_motorMass = 1.0 / (i1 + i2); if (!this.m_enableMotor) { this.m_motorImpulse = 0.0; } if (this.m_enableLimit) { var jointAngle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; if (Math.abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Box2D.Common.b2Settings.b2_angularSlop) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_equalLimits; } else if (jointAngle <= this.m_lowerAngle) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_impulse.z = 0.0; } this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit; } else if (jointAngle >= this.m_upperAngle) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_impulse.z = 0.0; } this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse.z = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; } if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_motorImpulse *= step.dtRatio; var PX = this.m_impulse.x; var PY = this.m_impulse.y; bA.m_linearVelocity.x -= m1 * PX; bA.m_linearVelocity.y -= m1 * PY; bA.m_angularVelocity -= i1 * ((r1X * PY - r1Y * PX) + this.m_motorImpulse + this.m_impulse.z); bB.m_linearVelocity.x += m2 * PX; bB.m_linearVelocity.y += m2 * PY; bB.m_angularVelocity += i2 * ((r2X * PY - r2Y * PX) + this.m_motorImpulse + this.m_impulse.z); } else { this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; var newImpulse = 0; var r1X = 0; var r1Y = 0; var r2X = 0; var r2Y = 0; var v1 = bA.m_linearVelocity; var w1 = bA.m_angularVelocity; var v2 = bB.m_linearVelocity; var w2 = bB.m_angularVelocity; var m1 = bA.m_invMass; var m2 = bB.m_invMass; var i1 = bA.m_invI; var i2 = bB.m_invI; if (this.m_enableMotor && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { var Cdot = w2 - w1 - this.m_motorSpeed; var impulse = this.m_motorMass * ((-Cdot)); var oldImpulse = this.m_motorImpulse; var maxImpulse = step.dt * this.m_maxMotorTorque; this.m_motorImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_motorImpulse - oldImpulse; w1 -= i1 * impulse; w2 += i2 * impulse; } if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var Cdot1X = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y)); var Cdot1Y = v2.y + (w2 * r2X) - v1.y - (w1 * r1X); var Cdot2 = w2 - w1; this.m_mass.Solve33(this.impulse3, (-Cdot1X), (-Cdot1Y), (-Cdot2)); if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { this.m_impulse.Add(this.impulse3); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { newImpulse = this.m_impulse.z + this.impulse3.z; if (newImpulse < 0.0) { this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y)); this.impulse3.x = this.reduced.x; this.impulse3.y = this.reduced.y; this.impulse3.z = (-this.m_impulse.z); this.m_impulse.x += this.reduced.x; this.m_impulse.y += this.reduced.y; this.m_impulse.z = 0.0; } } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { newImpulse = this.m_impulse.z + this.impulse3.z; if (newImpulse > 0.0) { this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y)); this.impulse3.x = this.reduced.x; this.impulse3.y = this.reduced.y; this.impulse3.z = (-this.m_impulse.z); this.m_impulse.x += this.reduced.x; this.m_impulse.y += this.reduced.y; this.m_impulse.z = 0.0; } } v1.x -= m1 * this.impulse3.x; v1.y -= m1 * this.impulse3.y; w1 -= i1 * (r1X * this.impulse3.y - r1Y * this.impulse3.x + this.impulse3.z); v2.x += m2 * this.impulse3.x; v2.y += m2 * this.impulse3.y; w2 += i2 * (r2X * this.impulse3.y - r2Y * this.impulse3.x + this.impulse3.z); } else { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var CdotX = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y)); var CdotY = v2.y + (w2 * r2X) - v1.y - (w1 * r1X); this.m_mass.Solve22(this.impulse2, (-CdotX), (-CdotY)); this.m_impulse.x += this.impulse2.x; this.m_impulse.y += this.impulse2.y; v1.x -= m1 * this.impulse2.x; v1.y -= m1 * this.impulse2.y; w1 -= i1 * (r1X * this.impulse2.y - r1Y * this.impulse2.x); v2.x += m2 * this.impulse2.x; v2.y += m2 * this.impulse2.y; w2 += i2 * (r2X * this.impulse2.y - r2Y * this.impulse2.x); } bA.m_linearVelocity.SetV(v1); bA.m_angularVelocity = w1; bB.m_linearVelocity.SetV(v2); bB.m_angularVelocity = w2; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var oldLimitImpulse = 0; var C = 0; var tMat; var bA = this.m_bodyA; var bB = this.m_bodyB; var angularError = 0.0; var positionError = 0.0; var tX = 0; var impulseX = 0; var impulseY = 0; if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { var angle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; var limitImpulse = 0.0; if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { C = Box2D.Common.Math.b2Math.Clamp(angle - this.m_lowerAngle, (-Box2D.Common.b2Settings.b2_maxAngularCorrection), Box2D.Common.b2Settings.b2_maxAngularCorrection); limitImpulse = (-this.m_motorMass * C); angularError = Math.abs(C); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { C = angle - this.m_lowerAngle; angularError = (-C); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_angularSlop, (-Box2D.Common.b2Settings.b2_maxAngularCorrection), 0.0); limitImpulse = (-this.m_motorMass * C); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { C = angle - this.m_upperAngle; angularError = C; C = Box2D.Common.Math.b2Math.Clamp(C - Box2D.Common.b2Settings.b2_angularSlop, 0.0, Box2D.Common.b2Settings.b2_maxAngularCorrection); limitImpulse = (-this.m_motorMass * C); } bA.m_sweep.a -= bA.m_invI * limitImpulse; bB.m_sweep.a += bB.m_invI * limitImpulse; bA.SynchronizeTransform(); bB.SynchronizeTransform(); } tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; var CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; var CLengthSquared = CX * CX + CY * CY; var CLength = Math.sqrt(CLengthSquared); positionError = CLength; var invMass1 = bA.m_invMass; var invMass2 = bB.m_invMass; var invI1 = bA.m_invI; var invI2 = bB.m_invI; var k_allowedStretch = 10.0 * Box2D.Common.b2Settings.b2_linearSlop; if (CLengthSquared > k_allowedStretch * k_allowedStretch) { var uX = CX / CLength; var uY = CY / CLength; var k = invMass1 + invMass2; var m = 1.0 / k; impulseX = m * ((-CX)); impulseY = m * ((-CY)); var k_beta = 0.5; bA.m_sweep.c.x -= k_beta * invMass1 * impulseX; bA.m_sweep.c.y -= k_beta * invMass1 * impulseY; bB.m_sweep.c.x += k_beta * invMass2 * impulseX; bB.m_sweep.c.y += k_beta * invMass2 * impulseY; CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; } this.K1.col1.x = invMass1 + invMass2; this.K1.col2.x = 0.0; this.K1.col1.y = 0.0; this.K1.col2.y = invMass1 + invMass2; this.K2.col1.x = invI1 * r1Y * r1Y; this.K2.col2.x = (-invI1 * r1X * r1Y); this.K2.col1.y = (-invI1 * r1X * r1Y); this.K2.col2.y = invI1 * r1X * r1X; this.K3.col1.x = invI2 * r2Y * r2Y; this.K3.col2.x = (-invI2 * r2X * r2Y); this.K3.col1.y = (-invI2 * r2X * r2Y); this.K3.col2.y = invI2 * r2X * r2X; this.K.SetM(this.K1); this.K.AddM(this.K2); this.K.AddM(this.K3); this.K.Solve(Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse, (-CX), (-CY)); impulseX = Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse.x; impulseY = Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse.y; bA.m_sweep.c.x -= bA.m_invMass * impulseX; bA.m_sweep.c.y -= bA.m_invMass * impulseY; bA.m_sweep.a -= bA.m_invI * (r1X * impulseY - r1Y * impulseX); bB.m_sweep.c.x += bB.m_invMass * impulseX; bB.m_sweep.c.y += bB.m_invMass * impulseY; bB.m_sweep.a += bB.m_invI * (r2X * impulseY - r2Y * impulseX); bA.SynchronizeTransform(); bB.SynchronizeTransform(); return positionError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse = Box2D.Common.Math.b2Vec2.Get(0, 0); /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2RevoluteJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint; this.localAnchorA.SetZero(); this.localAnchorB.SetZero(); this.referenceAngle = 0.0; this.lowerAngle = 0.0; this.upperAngle = 0.0; this.maxMotorTorque = 0.0; this.motorSpeed = 0.0; this.enableLimit = false; this.enableMotor = false; }; c2inherit(Box2D.Dynamics.Joints.b2RevoluteJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2RevoluteJointDef.prototype.Initialize = function(bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2RevoluteJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2RevoluteJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2WeldJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2WeldJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass = new Box2D.Common.Math.b2Mat33(); this.m_localAnchorA.SetV(def.localAnchorA); this.m_localAnchorB.SetV(def.localAnchorB); this.m_referenceAngle = def.referenceAngle; }; c2inherit(Box2D.Dynamics.Joints.b2WeldJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA); }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB); }; /** * @param {number} inv_dt * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetReactionForce = function(inv_dt) { return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y); }; /** * @param {number} inv_dt * @return {number} */ Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetReactionTorque = function(inv_dt) { return inv_dt * this.m_impulse.z; }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.InitVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB; this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB; this.m_mass.col3.x = (-rAY * iA) - rBY * iB; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB; this.m_mass.col3.y = rAX * iA + rBX * iB; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = iA + iB; if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_impulse.z *= step.dtRatio; bA.m_linearVelocity.x -= mA * this.m_impulse.x; bA.m_linearVelocity.y -= mA * this.m_impulse.y; bA.m_angularVelocity -= iA * (rAX * this.m_impulse.y - rAY * this.m_impulse.x + this.m_impulse.z); bB.m_linearVelocity.x += mB * this.m_impulse.x; bB.m_linearVelocity.y += mB * this.m_impulse.y; bB.m_angularVelocity += iB * (rBX * this.m_impulse.y - rBY * this.m_impulse.x + this.m_impulse.z); } else { this.m_impulse.SetZero(); } }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.SolveVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var vA = bA.m_linearVelocity; var wA = bA.m_angularVelocity; var vB = bB.m_linearVelocity; var wB = bB.m_angularVelocity; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var Cdot1X = vB.x - wB * rBY - vA.x + wA * rAY; var Cdot1Y = vB.y + wB * rBX - vA.y - wA * rAX; var Cdot2 = wB - wA; var impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass.Solve33(impulse, (-Cdot1X), (-Cdot1Y), (-Cdot2)); this.m_impulse.Add(impulse); vA.x -= mA * impulse.x; vA.y -= mA * impulse.y; wA -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z); vB.x += mB * impulse.x; vB.y += mB * impulse.y; wB += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z); bA.m_angularVelocity = wA; bB.m_angularVelocity = wB; }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; var C1X = bB.m_sweep.c.x + rBX - bA.m_sweep.c.x - rAX; var C1Y = bB.m_sweep.c.y + rBY - bA.m_sweep.c.y - rAY; var C2 = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; var k_allowedStretch = 10.0 * Box2D.Common.b2Settings.b2_linearSlop; var positionError = Math.sqrt(C1X * C1X + C1Y * C1Y); var angularError = Math.abs(C2); if (positionError > k_allowedStretch) { iA *= 1.0; iB *= 1.0; } this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB; this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB; this.m_mass.col3.x = (-rAY * iA) - rBY * iB; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB; this.m_mass.col3.y = rAX * iA + rBX * iB; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = iA + iB; var impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass.Solve33(impulse, (-C1X), (-C1Y), (-C2)); bA.m_sweep.c.x -= mA * impulse.x; bA.m_sweep.c.y -= mA * impulse.y; bA.m_sweep.a -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z); bB.m_sweep.c.x += mB * impulse.x; bB.m_sweep.c.y += mB * impulse.y; bB.m_sweep.a += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z); bA.SynchronizeTransform(); bB.SynchronizeTransform(); return positionError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2WeldJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_weldJoint; this.referenceAngle = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2WeldJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2WeldJointDef.prototype.Initialize = function(bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor)); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2WeldJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2WeldJoint(this); }; Box2D.Collision.b2Collision.s_incidentEdge = Box2D.Collision.b2Collision.MakeClipPointVector(); Box2D.Collision.b2Collision.s_clipPoints1 = Box2D.Collision.b2Collision.MakeClipPointVector(); Box2D.Collision.b2Collision.s_clipPoints2 = Box2D.Collision.b2Collision.MakeClipPointVector(); Box2D.Collision.b2Collision.s_localTangent = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_localNormal = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_planePoint = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_normal = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_tangent = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_tangent2 = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_v11 = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_v12 = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2TimeOfImpact.b2_toiCalls = 0; Box2D.Collision.b2TimeOfImpact.b2_toiIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiRootIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = 0; Box2D.Collision.b2TimeOfImpact.s_cache = new Box2D.Collision.b2SimplexCache(); Box2D.Collision.b2TimeOfImpact.s_distanceInput = new Box2D.Collision.b2DistanceInput(); Box2D.Collision.b2TimeOfImpact.s_xfA = new Box2D.Common.Math.b2Transform(); Box2D.Collision.b2TimeOfImpact.s_xfB = new Box2D.Common.Math.b2Transform(); Box2D.Collision.b2TimeOfImpact.s_fcn = new Box2D.Collision.b2SeparationFunction(); Box2D.Collision.b2TimeOfImpact.s_distanceOutput = new Box2D.Collision.b2DistanceOutput(); /** @type {!Box2D.Common.Math.b2Transform} */ Box2D.Dynamics.b2Body.s_xf1 = new Box2D.Common.Math.b2Transform(); Box2D.Dynamics.b2ContactListener.b2_defaultListener = new Box2D.Dynamics.b2ContactListener(); Box2D.Dynamics.b2ContactManager.s_evalCP = new Box2D.Collision.b2ContactPoint(); /** @type {!Box2D.Common.Math.b2Transform} */ Box2D.Dynamics.b2World.s_xf = new Box2D.Common.Math.b2Transform(); /** @type {!Box2D.Common.Math.b2Sweep} */ Box2D.Dynamics.b2World.s_backupA = new Box2D.Common.Math.b2Sweep(); /** @type {!Box2D.Common.Math.b2Sweep} */ Box2D.Dynamics.b2World.s_backupB = new Box2D.Common.Math.b2Sweep(); Box2D.Dynamics.Contacts.b2Contact.s_input = new Box2D.Collision.b2TOIInput(); Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold = new Box2D.Collision.b2WorldManifold(); Box2D.Dynamics.Contacts.b2ContactSolver.s_psm = new Box2D.Dynamics.Contacts.b2PositionSolverManifold(); /* * Convex Separator for Box2D Flash * * This class has been written by Antoan Angelov. * It is designed to work with Erin Catto's Box2D physics library. * * Everybody can use this software for any purpose, under two restrictions: * 1. You cannot claim that you wrote this software. * 2. You can not remove or alter this notice. * */ cr.b2Separator = function() {}; cr.b2Separator.det = function(x1, y1, x2, y2, x3, y3) { return x1*y2 + x2*y3 + x3*y1 - y1*x2 - y2*x3 - y3*x1; }; cr.b2Separator.hitRay = function(x1, y1, x2, y2, x3, y3, x4, y4) { var t1 = x3-x1, t2 = y3-y1, t3 = x2-x1, t4 = y2-y1, t5 = x4-x3, t6 = y4-y3, t7 = t4*t5 - t3*t6; var a = (t5*t2 - t6*t1) / t7; var px = x1 + a*t3, py = y1 + a*t4; var b1 = cr.b2Separator.isOnSegment(x2, y2, x1, y1, px, py); var b2 = cr.b2Separator.isOnSegment(px, py, x3, y3, x4, y4); if (b1 && b2) return Box2D.Common.Math.b2Vec2.Get(px, py); else return null; }; cr.b2Separator.isOnSegment = function(px, py, x1, y1, x2, y2) { var b1 = (x1+0.1 >= px && px >= x2-0.1) || (x1-0.1 <= px && px <= x2+0.1); var b2 = (y1+0.1 >= py && py >= y2-0.1) || (y1-0.1 <= py && py <= y2+0.1); return (b1 && b2) && cr.b2Separator.isOnLine(px, py, x1, y1, x2, y2); }; cr.b2Separator.isOnLine = function(px, py, x1, y1, x2, y2) { if (Math.abs(x2-x1) > 0.1) { var a = (y2-y1) / (x2-x1); var possibleY = a * (px-x1)+y1; var diff = Math.abs(possibleY-py); return diff < 0.1; } return Math.abs(px-x1) < 0.1; }; cr.b2Separator.pointsMatch = function(x1, y1, x2, y2) { return Math.abs(x2-x1) < 0.1 && Math.abs(y2-y1) < 0.1; }; cr.b2Separator.Separate = function(verticesVec /*array of b2Vec2*/, objarea) { var b2Vec2 = Box2D.Common.Math.b2Vec2; var calced = cr.b2Separator.calcShapes(verticesVec); var ret = []; var poly, a, b, c; var i, len, j, lenj; var areasum; for (i = 0, len = calced.length; i < len; i++) { a = calced[i]; poly = []; poly.length = a.length; areasum = 0; for (j = 0, lenj = a.length; j < lenj; j++) { b = a[j]; c = a[(j + 1) % lenj]; areasum += (b.x * c.y - b.y * c.x); poly[j] = b2Vec2.Get(b.x, b.y); } areasum = Math.abs(areasum / 2); if (areasum >= objarea * 0.001) ret.push(poly); } ; return ret; }; cr.b2Separator.calcShapes = function(verticesVec /*array of b2Vec2*/) { var vec = []; // array of b2Vec2 var i = 0, n = 0, j = 0; // ints var d = 0, t = 0, dx = 0, dy = 0, minLen = 0; // numbers var i1 = 0, i2 = 0, i3 = 0; // ints var p1, p2, p3, v1, v2, v, hitV; // b2Vec2s var j1 = 0, j2 = 0, k = 0, h = 0; // ints var vec1 = [], vec2 = []; // array of b2Vec2 var isConvex = false; // boolean var figsVec = [], queue = []; // Arrays queue.push(verticesVec); while (queue.length) { vec = queue[0]; n = vec.length; isConvex = true; for (i = 0; i < n; i++) { i1 = i; i2 = (i < n-1) ? i+1 : i+1-n; i3 = (i < n-2) ? i+2 : i+2-n; p1 = vec[i1]; p2 = vec[i2]; p3 = vec[i3]; d = cr.b2Separator.det(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y); if (d < 0) { isConvex = false; minLen = 1e9; for (j = 0; j < n; j++) { if ((j !== i1) && (j !== i2)) { j1 = j; j2 = (j<n - 1) ? j+1 : 0; v1 = vec[j1]; v2 = vec[j2]; v = cr.b2Separator.hitRay(p1.x, p1.y, p2.x, p2.y, v1.x, v1.y, v2.x, v2.y); if (v) { dx = p2.x - v.x; dy = p2.y - v.y; t = dx*dx + dy*dy; if (t < minLen) { h = j1; k = j2; hitV = v; minLen = t; } } } } if (minLen === 1e9) return []; vec1 = []; vec2 = []; j1 = h; j2 = k; v1 = vec[j1]; v2 = vec[j2]; if (!cr.b2Separator.pointsMatch(hitV.x, hitV.y, v2.x, v2.y)) vec1.push(hitV); if (!cr.b2Separator.pointsMatch(hitV.x, hitV.y, v1.x, v1.y)) vec2.push(hitV); h = -1; k = i1; while (true) { if (k !== j2) vec1.push(vec[k]); else { if (h < 0 || h >= n) return []; if (!cr.b2Separator.isOnSegment(v2.x, v2.y, vec[h].x, vec[h].y, p1.x, p1.y)) vec1.push(vec[k]); break; } h = k; if (k-1 < 0) k = n-1; else k--; } vec1.reverse(); h = -1; k = i2; while (true) { if (k !== j1) vec2.push(vec[k]); else { if (h < 0 || h >= n) return []; if (k === j1 && !cr.b2Separator.isOnSegment(v1.x, v1.y, vec[h].x, vec[h].y, p2.x, p2.y)) vec2.push(vec[k]); break; } h = k; if (k+1 > n-1) k = 0; else k++; } queue.push(vec1, vec2); queue.shift(); break; } } if (isConvex) figsVec.push(queue.shift()); } return figsVec; }; ; ; cr.behaviors.Physics = function(runtime) { for (var i = 0; i < 4000; i++) Box2D.Common.Math.b2Vec2._freeCache.push(new Box2D.Common.Math.b2Vec2(0, 0)); this.runtime = runtime; this.world = new Box2D.Dynamics.b2World( Box2D.Common.Math.b2Vec2.Get(0, 10), // gravity true); // allow sleep this.worldG = 10; this.lastUpdateTick = -1; var listener = new Box2D.Dynamics.b2ContactListener; listener.behavior = this; listener.BeginContact = function(contact) { var behA = contact.m_fixtureA.GetBody().c2userdata; var behB = contact.m_fixtureB.GetBody().c2userdata; this.behavior.runtime.registerCollision(behA.inst, behB.inst); }; this.world.SetContactListener(listener); var filter = new Box2D.Dynamics.b2ContactFilter; filter.behavior = this; filter.ShouldCollide = function (fixtureA, fixtureB) { if (this.behavior.allCollisionsEnabled) return true; var typeA = fixtureA.GetBody().c2userdata.inst.type; var typeB = fixtureB.GetBody().c2userdata.inst.type; var s = typeA.extra["Physics_DisabledCollisions"]; if (s && s.contains(typeB)) return false; s = typeB.extra["Physics_DisabledCollisions"]; if (s && s.contains(typeA)) return false; return true; }; this.world.SetContactFilter(filter); this.steppingMode = 0; // fixed this.velocityIterations = 8; this.positionIterations = 3; this.allCollisionsEnabled = true; }; (function () { var b2Vec2 = Box2D.Common.Math.b2Vec2, b2BodyDef = Box2D.Dynamics.b2BodyDef, b2Body = Box2D.Dynamics.b2Body, b2FixtureDef = Box2D.Dynamics.b2FixtureDef, b2Fixture = Box2D.Dynamics.b2Fixture, b2World = Box2D.Dynamics.b2World, b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape, b2CircleShape = Box2D.Collision.Shapes.b2CircleShape, b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef, b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef, b2Transform = Box2D.Common.Math.b2Transform, b2Mat22 = Box2D.Common.Math.b2Mat22; var TILE_FLIPPED_HORIZONTAL = -0x80000000 // note: pretend is a signed int, so negate var TILE_FLIPPED_VERTICAL = 0x40000000 var TILE_FLIPPED_DIAGONAL = 0x20000000 var TILE_FLAGS_MASK = 0xE0000000 var worldScale = 0.02; var behaviorProto = cr.behaviors.Physics.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; this.world = this.behavior.world; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.immovable = (this.properties[0] !== 0); this.collisionmask = this.properties[1]; this.preventRotation = (this.properties[2] !== 0); this.density = this.properties[3]; this.friction = this.properties[4]; this.restitution = this.properties[5]; this.linearDamping = this.properties[6]; this.angularDamping = this.properties[7]; this.bullet = (this.properties[8] !== 0); this.enabled = (this.properties[9] !== 0); this.body = null; this.inst.update_bbox(); this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; this.lastKnownAngle = this.inst.angle; this.lastWidth = 0; this.lastHeight = 0; this.lastTickOverride = false; this.recreateBody = false; this.lastAnimation = null; // for sprites only - will be undefined for other objects this.lastAnimationFrame = -1; // for sprites only - will be undefined for other objects if (this.myJoints) { this.myJoints.length = 0; this.myCreatedJoints.length = 0; this.joiningMe.clear(); } else { this.myJoints = []; // Created Box2D joints this.myCreatedJoints = []; // List of actions called to create joints this.joiningMe = new cr.ObjectSet(); // Instances with joints to me } var self = this; if (!this.recycled) { this.myDestroyCallback = (function(inst) { self.onInstanceDestroyed(inst); }); } this.runtime.addDestroyCallback(this.myDestroyCallback); }; behinstProto.postCreate = function () { this.inst.update_bbox(); this.createBody(); this.lastAnimation = this.inst.cur_animation; this.lastAnimationFrame = this.inst.cur_frame; }; behinstProto.onDestroy = function() { this.destroyMyJoints(); this.myCreatedJoints.length = 0; this.joiningMe.clear(); if (this.body) { this.world.DestroyBody(this.body); this.body = null; } this.runtime.removeDestroyCallback(this.myDestroyCallback); }; behinstProto.saveToJSON = function () { var o = { "e": this.enabled, "im": this.immovable, "pr": this.preventRotation, "d": this.density, "fr": this.friction, "re": this.restitution, "ld": this.linearDamping, "ad": this.angularDamping, "b": this.bullet, "mcj": this.myCreatedJoints }; if (this.enabled) { var temp = b2Vec2.Get(0, 0); temp.SetV(this.body.GetLinearVelocity()); o["vx"] = temp.x; o["vy"] = temp.y; o["om"] = this.body.GetAngularVelocity(); } return o; }; behinstProto.loadFromJSON = function (o) { this.destroyMyJoints(); this.myCreatedJoints.length = 0; this.joiningMe.clear(); if (this.body) { this.world.DestroyBody(this.body); this.body = null; } this.enabled = o["e"]; this.immovable = o["im"]; this.preventRotation = o["pr"]; this.density = o["d"]; this.friction = o["fr"]; this.restitution = o["re"]; this.linearDamping = o["ld"]; this.angularDamping = o["ad"]; this.bullet = o["b"]; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; this.lastKnownAngle = this.inst.angle; this.lastWidth = this.inst.width; this.lastHeight = this.inst.height; if (this.enabled) { this.createBody(); this.body.SetLinearVelocity(b2Vec2.Get(o["vx"], o["vy"])); this.body.SetAngularVelocity(o["om"]); if (o["vx"] !== 0 || o["vy"] !== 0 || o["om"] !== 0) this.body.SetAwake(true); this.myCreatedJoints = o["mcj"]; } }; behinstProto.afterLoad = function () { if (this.enabled) this.recreateMyJoints(); this.behavior.lastUpdateTick = this.runtime.tickcount - 1; }; behinstProto.onInstanceDestroyed = function (inst) { var i, len, j, instuid = inst.uid; for (i = 0, j = 0, len = this.myCreatedJoints.length; i < len; i++) { this.myCreatedJoints[j] = this.myCreatedJoints[i]; if (j < this.myJoints.length) this.myJoints[j] = this.myJoints[i]; if (this.myCreatedJoints[i].params[1] == instuid) // attached instance is always 2nd param this.world.DestroyJoint(this.myJoints[i]); else j++; } this.myCreatedJoints.length = j; if (j < this.myJoints.length) this.myJoints.length = j; this.joiningMe.remove(inst); }; behinstProto.destroyMyJoints = function() { var i, len; for (i = 0, len = this.myJoints.length; i < len; i++) this.world.DestroyJoint(this.myJoints[i]); this.myJoints.length = 0; }; behinstProto.recreateMyJoints = function() { var i, len, j; for (i = 0, len = this.myCreatedJoints.length; i < len; i++) { j = this.myCreatedJoints[i]; switch (j.type) { case 0: // distance joint this.doCreateDistanceJoint(j.params[0], j.params[1], j.params[2], j.params[3], j.params[4]); break; case 1: // revolute joint this.doCreateRevoluteJoint(j.params[0], j.params[1]); break; case 2: // limited revolute joint this.doCreateLimitedRevoluteJoint(j.params[0], j.params[1], j.params[2], j.params[3]); break; default: ; } } }; behinstProto.destroyBody = function() { if (!this.body) return; this.destroyMyJoints(); this.world.DestroyBody(this.body); this.body = null; this.inst.extra.box2dbody = null; }; var collrects = []; behinstProto.createBody = function() { if (!this.enabled) return; var inst = this.inst; var hadOldBody = false; var oldVelocity = null; var oldOmega = null; var i, len, j, lenj, k, lenk, vec, arr, b, c, rc, pts_cache, pts_count, convexpolys, cp, offx, offy, oldAngle; if (this.body) { hadOldBody = true; oldVelocity = b2Vec2.Get(0, 0); oldVelocity.SetV(this.body.GetLinearVelocity()); oldOmega = this.body.GetAngularVelocity(); arr = this.joiningMe.valuesRef(); for (i = 0, len = arr.length; i < len; i++) { b = arr[i].extra.box2dbody.c2userdata; b.destroyMyJoints(); } this.destroyBody(); } var fixDef = new b2FixtureDef; fixDef.density = this.density; fixDef.friction = this.friction; fixDef.restitution = this.restitution; var bodyDef = new b2BodyDef; if (this.immovable) bodyDef.type = 0; //b2BodyDef.b2_staticBody else bodyDef.type = 2; //b2BodyDef.b2_dynamicBody inst.update_bbox(); bodyDef.position.x = inst.bquad.midX() * worldScale; bodyDef.position.y = inst.bquad.midY() * worldScale; bodyDef.angle = inst.angle; bodyDef.fixedRotation = this.preventRotation; bodyDef.linearDamping = this.linearDamping; bodyDef.angularDamping = this.angularDamping; bodyDef.bullet = this.bullet; var hasPoly = this.inst.collision_poly && !this.inst.collision_poly.is_empty(); this.body = this.world.CreateBody(bodyDef); this.body.c2userdata = this; var usecollisionmask = this.collisionmask; if (!hasPoly && !this.inst.tilemap_exists && this.collisionmask === 0) usecollisionmask = 1; var instw = Math.max(Math.abs(inst.width), 1); var insth = Math.max(Math.abs(inst.height), 1); var ismirrored = inst.width < 0; var isflipped = inst.height < 0; if (usecollisionmask === 0) { if (inst.tilemap_exists) { offx = inst.bquad.midX() - inst.x; offy = inst.bquad.midY() - inst.y; inst.getAllCollisionRects(collrects); arr = []; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; rc = c.rc; if (c.poly) { if (!c.poly.convexpolys) { pts_cache = c.poly.pts_cache; pts_count = c.poly.pts_count; for (j = 0; j < pts_count; ++j) { arr.push(b2Vec2.Get(pts_cache[j*2], pts_cache[j*2+1])); } var flags = (c.id & TILE_FLAGS_MASK); if (flags === TILE_FLIPPED_HORIZONTAL || flags === TILE_FLIPPED_VERTICAL || flags === TILE_FLIPPED_DIAGONAL || ((flags & TILE_FLIPPED_HORIZONTAL) && (flags & TILE_FLIPPED_VERTICAL) && (flags & TILE_FLIPPED_DIAGONAL))) { arr.reverse(); } c.poly.convexpolys = cr.b2Separator.Separate(arr, (rc.right - rc.left) * (rc.bottom - rc.top)); for (j = 0, lenj = arr.length; j < lenj; ++j) b2Vec2.Free(arr[j]); arr.length = 0; } for (j = 0, lenj = c.poly.convexpolys.length; j < lenj; ++j) { cp = c.poly.convexpolys[j]; ; for (k = 0, lenk = cp.length; k < lenk; ++k) { arr.push(b2Vec2.Get((rc.left + cp[k].x - offx) * worldScale, (rc.top + cp[k].y - offy) * worldScale)); } fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsArray(arr, arr.length); // copies content of arr this.body.CreateFixture(fixDef); for (k = 0, lenk = arr.length; k < lenk; ++k) b2Vec2.Free(arr[k]); arr.length = 0; } } else { arr.push(b2Vec2.Get((rc.left - offx) * worldScale, (rc.top - offy) * worldScale)); arr.push(b2Vec2.Get((rc.right - offx) * worldScale, (rc.top - offy) * worldScale)); arr.push(b2Vec2.Get((rc.right - offx) * worldScale, (rc.bottom - offy) * worldScale)); arr.push(b2Vec2.Get((rc.left - offx) * worldScale, (rc.bottom - offy) * worldScale)); fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsArray(arr, arr.length); // copies content of arr this.body.CreateFixture(fixDef); } for (j = 0, lenj = arr.length; j < lenj; ++j) b2Vec2.Free(arr[j]); arr.length = 0; } } else { oldAngle = inst.angle; inst.angle = 0; inst.set_bbox_changed(); inst.update_bbox(); offx = inst.bquad.midX() - inst.x; offy = inst.bquad.midY() - inst.y; inst.angle = oldAngle; inst.set_bbox_changed(); inst.collision_poly.cache_poly(ismirrored ? -instw : instw, isflipped ? -insth : insth, 0); pts_cache = inst.collision_poly.pts_cache; pts_count = inst.collision_poly.pts_count; arr = []; arr.length = pts_count; for (i = 0; i < pts_count; i++) { arr[i] = b2Vec2.Get(pts_cache[i*2] - offx, pts_cache[i*2+1] - offy); } if (ismirrored !== isflipped) arr.reverse(); // wrong clockwise order when flipped convexpolys = cr.b2Separator.Separate(arr, instw * insth); for (i = 0; i < pts_count; i++) b2Vec2.Free(arr[i]); if (convexpolys.length) { for (i = 0, len = convexpolys.length; i < len; i++) { arr = convexpolys[i]; ; for (j = 0, lenj = arr.length; j < lenj; j++) { vec = arr[j]; vec.x *= worldScale; vec.y *= worldScale; } fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsArray(arr, arr.length); // copies content of arr this.body.CreateFixture(fixDef); for (j = 0, lenj = arr.length; j < lenj; j++) b2Vec2.Free(arr[j]); } } else { fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsBox(instw * worldScale * 0.5, insth * worldScale * 0.5); this.body.CreateFixture(fixDef); } } } else if (usecollisionmask === 1) { fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsBox(instw * worldScale * 0.5, insth * worldScale * 0.5); this.body.CreateFixture(fixDef); } else { fixDef.shape = new b2CircleShape(Math.min(instw, insth) * worldScale * 0.5); this.body.CreateFixture(fixDef); } inst.extra.box2dbody = this.body; this.lastWidth = inst.width; this.lastHeight = inst.height; if (hadOldBody) { this.body.SetLinearVelocity(oldVelocity); this.body.SetAngularVelocity(oldOmega); b2Vec2.Free(oldVelocity); this.recreateMyJoints(); arr = this.joiningMe.valuesRef(); for (i = 0, len = arr.length; i < len; i++) { b = arr[i].extra.box2dbody.c2userdata; b.recreateMyJoints(); } } collrects.length = 0; }; /* behinstProto.draw = function (ctx) { if (!this.myconvexpolys) return; this.inst.update_bbox(); var midx = this.inst.bquad.midX(); var midy = this.inst.bquad.midY(); var i, len, j, lenj; var sina = 0; var cosa = 1; if (this.inst.angle !== 0) { sina = Math.sin(this.inst.angle); cosa = Math.cos(this.inst.angle); } var strokeStyles = ["#f00", "#0f0", "#00f", "#ff0", "#0ff", "#f0f"]; ctx.lineWidth = 2; var i, len, j, lenj, ax, ay, bx, by, poly, va, vb; for (i = 0, len = this.myconvexpolys.length; i < len; i++) { poly = this.myconvexpolys[i]; ctx.strokeStyle = strokeStyles[i]; for (j = 0, lenj = poly.length; j < lenj; j++) { va = poly[j]; vb = poly[(j + 1) % lenj]; ax = va.x / worldScale; ay = va.y / worldScale; bx = vb.x / worldScale; by = vb.y / worldScale; ctx.beginPath(); ctx.moveTo(((ax * cosa) - (ay * sina)) + midx, ((ay * cosa) + (ax * sina)) + midy); ctx.lineTo(((bx * cosa) - (by * sina)) + midx, ((by * cosa) + (bx * sina)) + midy); ctx.stroke(); ctx.closePath(); } } }; */ behinstProto.tick = function () { if (!this.enabled) return; var inst = this.inst; var dt; if (this.behavior.steppingMode === 0) // fixed dt = this.runtime.timescale / 60; else { dt = this.runtime.getDt(this.inst); if (dt > 1 / 30) dt = 1 / 30; } if (this.runtime.tickcount > this.behavior.lastUpdateTick && this.runtime.timescale > 0) { this.world.Step(dt, this.behavior.velocityIterations, this.behavior.positionIterations); // still apply timescale this.world.ClearForces(); this.behavior.lastUpdateTick = this.runtime.tickcount; } if (this.recreateBody || inst.width !== this.lastWidth || inst.height !== this.lastHeight || inst.cur_animation !== this.lastAnimation || inst.cur_frame !== this.lastAnimationFrame || (inst.tilemap_exists && inst.physics_changed)) { this.createBody(); this.recreateBody = false; this.lastAnimation = inst.cur_animation; this.lastAnimationFrame = inst.cur_frame; if (inst.tilemap_exists && inst.physics_changed) inst.physics_changed = false; } var pos_changed = (inst.x !== this.lastKnownX || inst.y !== this.lastKnownY); var angle_changed = (inst.angle !== this.lastKnownAngle); if (pos_changed) { inst.update_bbox(); var newmidx = inst.bquad.midX(); var newmidy = inst.bquad.midY(); var diffx = newmidx - this.lastKnownX; var diffy = newmidy - this.lastKnownY; this.body.SetPosition(b2Vec2.Get(newmidx * worldScale, newmidy * worldScale)); this.body.SetLinearVelocity(b2Vec2.Get(diffx, diffy)); this.lastTickOverride = true; this.body.SetAwake(true); } else if (this.lastTickOverride) { this.lastTickOverride = false; this.body.SetLinearVelocity(b2Vec2.Get(0, 0)); this.body.SetPosition(b2Vec2.Get(inst.bquad.midX() * worldScale, inst.bquad.midY() * worldScale)); } if (angle_changed) { this.body.SetAngle(inst.angle); this.body.SetAwake(true); } var pos = this.body.GetPosition(); var newx = pos.x / worldScale; var newy = pos.y / worldScale; var newangle = this.body.GetAngle(); if (newx !== inst.x || newy !== inst.y || newangle !== inst.angle) { inst.x = newx; inst.y = newy; inst.angle = newangle; inst.set_bbox_changed(); inst.update_bbox(); var dx = inst.bquad.midX() - inst.x; var dy = inst.bquad.midY() - inst.y; if (dx !== 0 || dy !== 0) { inst.x -= dx; inst.y -= dy; inst.set_bbox_changed(); } } this.lastKnownX = inst.x; this.lastKnownY = inst.y; this.lastKnownAngle = inst.angle; }; behinstProto.getInstImgPointX = function(imgpt) { if (imgpt === -1 || !this.inst.getImagePoint) return this.inst.x; if (imgpt === 0 && this.body) return (this.body.GetPosition().x + this.body.GetLocalCenter().x) / worldScale; return this.inst.getImagePoint(imgpt, true); }; behinstProto.getInstImgPointY = function(imgpt) { if (imgpt === -1 || !this.inst.getImagePoint) return this.inst.y; if (imgpt === 0 && this.body) return (this.body.GetPosition().y + this.body.GetLocalCenter().y) / worldScale; return this.inst.getImagePoint(imgpt, false); }; function Cnds() {}; Cnds.prototype.IsSleeping = function () { if (!this.enabled) return false; return !this.body.IsAwake(); }; Cnds.prototype.CompareVelocity = function (which_, cmp_, x_) { if (!this.enabled) return false; var velocity_vec = this.body.GetLinearVelocity(); var v, vx, vy; if (which_ === 0) // X velocity v = velocity_vec.x / worldScale; else if (which_ === 1) // Y velocity v = velocity_vec.y / worldScale; else // Overall velocity { vx = velocity_vec.x / worldScale; vy = velocity_vec.y / worldScale; v = cr.distanceTo(0, 0, vx, vy); } return cr.do_cmp(v, cmp_, x_); }; Cnds.prototype.CompareAngularVelocity = function (cmp_, x_) { if (!this.enabled) return false; var av = cr.to_degrees(this.body.GetAngularVelocity()); return cr.do_cmp(av, cmp_, x_); }; Cnds.prototype.CompareMass = function (cmp_, x_) { if (!this.enabled) return false; var mass = this.body.GetMass() / worldScale; return cr.do_cmp(mass, cmp_, x_); }; Cnds.prototype.IsEnabled = function () { return this.enabled; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.ApplyForce = function (fx, fy, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyForce(b2Vec2.Get(fx, fy), b2Vec2.Get(x * worldScale, y * worldScale)); }; Acts.prototype.ApplyForceToward = function (f, px, py, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); var a = cr.angleTo(x, y, px, py); this.body.ApplyForce(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); }; Acts.prototype.ApplyForceAtAngle = function (f, a, imgpt) { if (!this.enabled) return; a = cr.to_radians(a); var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyForce(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); }; Acts.prototype.ApplyImpulse = function (fx, fy, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyImpulse(b2Vec2.Get(fx, fy), b2Vec2.Get(x * worldScale, y * worldScale)); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.ApplyImpulseToward = function (f, px, py, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); var a = cr.angleTo(x, y, px, py); this.body.ApplyImpulse(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.ApplyImpulseAtAngle = function (f, a, imgpt) { if (!this.enabled) return; a = cr.to_radians(a); var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyImpulse(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.ApplyTorque = function (m) { if (!this.enabled) return; this.body.ApplyTorque(cr.to_radians(m)); }; Acts.prototype.ApplyTorqueToAngle = function (m, a) { if (!this.enabled) return; m = cr.to_radians(m); a = cr.to_radians(a); if (cr.angleClockwise(this.inst.angle, a)) this.body.ApplyTorque(-m); else this.body.ApplyTorque(m); }; Acts.prototype.ApplyTorqueToPosition = function (m, x, y) { if (!this.enabled) return; m = cr.to_radians(m); var a = cr.angleTo(this.inst.x, this.inst.y, x, y); if (cr.angleClockwise(this.inst.angle, a)) this.body.ApplyTorque(-m); else this.body.ApplyTorque(m); }; Acts.prototype.SetAngularVelocity = function (v) { if (!this.enabled) return; this.body.SetAngularVelocity(cr.to_radians(v)); this.body.SetAwake(true); }; Acts.prototype.CreateDistanceJoint = function (imgpt, obj, objimgpt, damping, freq) { if (!obj || !this.enabled) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst || otherinst == this.inst) return; if (!otherinst.extra.box2dbody) return; // no physics behavior on other object this.myCreatedJoints.push({type: 0, params: [imgpt, otherinst.uid, objimgpt, damping, freq]}); this.doCreateDistanceJoint(imgpt, otherinst.uid, objimgpt, damping, freq); }; behinstProto.doCreateDistanceJoint = function (imgpt, otherinstuid, objimgpt, damping, freq) { if (!this.enabled) return; var otherinst = this.runtime.getObjectByUID(otherinstuid); if (!otherinst || otherinst == this.inst || !otherinst.extra.box2dbody) return; otherinst.extra.box2dbody.c2userdata.joiningMe.add(this.inst); var myx = this.getInstImgPointX(imgpt); var myy = this.getInstImgPointY(imgpt); var theirx, theiry; if (otherinst.getImagePoint) { theirx = otherinst.getImagePoint(objimgpt, true); theiry = otherinst.getImagePoint(objimgpt, false); } else { theirx = otherinst.x; theiry = otherinst.y; } var dx = myx - theirx; var dy = myy - theiry; var jointDef = new b2DistanceJointDef(); jointDef.Initialize(this.body, otherinst.extra.box2dbody, b2Vec2.Get(myx * worldScale, myy * worldScale), b2Vec2.Get(theirx * worldScale, theiry * worldScale)); jointDef.length = Math.sqrt(dx*dx + dy*dy) * worldScale; jointDef.dampingRatio = damping; jointDef.frequencyHz = freq; this.myJoints.push(this.world.CreateJoint(jointDef)); }; Acts.prototype.CreateRevoluteJoint = function (imgpt, obj) { if (!obj || !this.enabled) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst || otherinst == this.inst) return; if (!otherinst.extra.box2dbody) return; // no physics behavior on other object this.myCreatedJoints.push({type: 1, params: [imgpt, otherinst.uid]}); this.doCreateRevoluteJoint(imgpt, otherinst.uid); }; behinstProto.doCreateRevoluteJoint = function (imgpt, otherinstuid) { if (!this.enabled) return; var otherinst = this.runtime.getObjectByUID(otherinstuid); if (!otherinst || otherinst == this.inst || !otherinst.extra.box2dbody) return; otherinst.extra.box2dbody.c2userdata.joiningMe.add(this.inst); var myx = this.getInstImgPointX(imgpt); var myy = this.getInstImgPointY(imgpt); var jointDef = new b2RevoluteJointDef(); jointDef.Initialize(this.body, otherinst.extra.box2dbody, b2Vec2.Get(myx * worldScale, myy * worldScale)); this.myJoints.push(this.world.CreateJoint(jointDef)); }; Acts.prototype.CreateLimitedRevoluteJoint = function (imgpt, obj, lower, upper) { if (!obj || !this.enabled) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst || otherinst == this.inst) return; if (!otherinst.extra.box2dbody) return; // no physics behavior on other object this.myCreatedJoints.push({type: 2, params: [imgpt, otherinst.uid, lower, upper]}); this.doCreateLimitedRevoluteJoint(imgpt, otherinst.uid, lower, upper); }; behinstProto.doCreateLimitedRevoluteJoint = function (imgpt, otherinstuid, lower, upper) { if (!this.enabled) return; var otherinst = this.runtime.getObjectByUID(otherinstuid); if (!otherinst || otherinst == this.inst || !otherinst.extra.box2dbody) return; otherinst.extra.box2dbody.c2userdata.joiningMe.add(this.inst); var myx = this.getInstImgPointX(imgpt); var myy = this.getInstImgPointY(imgpt); var jointDef = new b2RevoluteJointDef(); jointDef.Initialize(this.body, otherinst.extra.box2dbody, b2Vec2.Get(myx * worldScale, myy * worldScale)); jointDef.enableLimit = true; jointDef.lowerAngle = cr.to_radians(lower); jointDef.upperAngle = cr.to_radians(upper); this.myJoints.push(this.world.CreateJoint(jointDef)); }; Acts.prototype.SetWorldGravity = function (g) { if (g === this.behavior.worldG) return; this.world.SetGravity(b2Vec2.Get(0, g)); this.behavior.worldG = g; var i, len, arr = this.behavior.my_instances.valuesRef(); for (i = 0, len = arr.length; i < len; i++) { if (arr[i].extra.box2dbody) arr[i].extra.box2dbody.SetAwake(true); } }; Acts.prototype.SetSteppingMode = function (mode) { this.behavior.steppingMode = mode; }; Acts.prototype.SetIterations = function (vel, pos) { if (vel < 1) vel = 1; if (pos < 1) pos = 1; this.behavior.velocityIterations = vel; this.behavior.positionIterations = pos; }; Acts.prototype.SetVelocity = function (vx, vy) { if (!this.enabled) return; this.body.SetLinearVelocity(b2Vec2.Get(vx * worldScale, vy * worldScale)); this.body.SetAwake(true); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.SetDensity = function (d) { if (!this.enabled) return; if (this.density === d) return; this.density = d; this.recreateBody = true; }; Acts.prototype.SetFriction = function (f) { if (!this.enabled) return; if (this.friction === f) return; this.friction = f; this.recreateBody = true; }; Acts.prototype.SetElasticity = function (e) { if (!this.enabled) return; if (this.restitution === e) return; this.restitution = e; this.recreateBody = true; }; Acts.prototype.SetLinearDamping = function (ld) { if (!this.enabled) return; if (this.linearDamping === ld) return; this.linearDamping = ld; this.body.SetLinearDamping(ld); }; Acts.prototype.SetAngularDamping = function (ad) { if (!this.enabled) return; if (this.angularDamping === ad) return; this.angularDamping = ad; this.body.SetAngularDamping(ad); }; Acts.prototype.SetImmovable = function (i) { if (!this.enabled) return; if (this.immovable === (i !== 0)) return; this.immovable = (i !== 0); this.body.SetType(this.immovable ? 0 /*b2BodyDef.b2_staticBody*/ : 2 /*b2BodyDef.b2_dynamicBody*/); this.body.SetAwake(true); }; function SetCollisionsEnabled(typeA, typeB, state) { var s; if (state) { s = typeA.extra["Physics_DisabledCollisions"]; if (s) s.remove(typeB); s = typeB.extra["Physics_DisabledCollisions"]; if (s) s.remove(typeA); } else { if (!typeA.extra["Physics_DisabledCollisions"]) typeA.extra["Physics_DisabledCollisions"] = new cr.ObjectSet(); typeA.extra["Physics_DisabledCollisions"].add(typeB); if (!typeB.extra["Physics_DisabledCollisions"]) typeB.extra["Physics_DisabledCollisions"] = new cr.ObjectSet(); typeB.extra["Physics_DisabledCollisions"].add(typeA); } }; Acts.prototype.EnableCollisions = function (obj, state) { if (!obj || !this.enabled) return; var i, len; if (obj.is_family) { for (i = 0, len = obj.members.length; i < len; i++) { SetCollisionsEnabled(this.inst.type, obj.members[i], state !== 0); } } else { SetCollisionsEnabled(this.inst.type, obj, state !== 0); } this.behavior.allCollisionsEnabled = false; }; Acts.prototype.SetPreventRotate = function (i) { if (!this.enabled) return; if (this.preventRotation === (i !== 0)) return; this.preventRotation = (i !== 0); this.body.SetFixedRotation(this.preventRotation); this.body.m_torque = 0; this.body.SetAngularVelocity(0); this.body.SetAwake(true); }; Acts.prototype.SetBullet = function (i) { if (!this.enabled) return; if (this.bullet === (i !== 0)) return; this.bullet = (i !== 0); this.body.SetBullet(this.bullet); this.body.SetAwake(true); }; Acts.prototype.RemoveJoints = function () { if (!this.enabled) return; this.destroyMyJoints(); this.myCreatedJoints.length = 0; this.joiningMe.clear(); }; Acts.prototype.SetEnabled = function (e) { if (this.enabled && e === 0) { this.destroyBody(); this.enabled = false; } else if (!this.enabled && e === 1) { this.enabled = true; this.createBody(); } }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.VelocityX = function (ret) { ret.set_float(this.enabled ? this.body.GetLinearVelocity().x / worldScale : 0); }; Exps.prototype.VelocityY = function (ret) { ret.set_float(this.enabled ? this.body.GetLinearVelocity().y / worldScale : 0); }; Exps.prototype.AngularVelocity = function (ret) { ret.set_float(this.enabled ? cr.to_degrees(this.body.GetAngularVelocity()) : 0); }; Exps.prototype.Mass = function (ret) { ret.set_float(this.enabled ? this.body.GetMass() / worldScale : 0); }; Exps.prototype.CenterOfMassX = function (ret) { ret.set_float(this.enabled ? (this.body.GetPosition().x + this.body.GetLocalCenter().x) / worldScale : 0); }; Exps.prototype.CenterOfMassY = function (ret) { ret.set_float(this.enabled ? (this.body.GetPosition().y + this.body.GetLocalCenter().y) / worldScale : 0); }; Exps.prototype.Density = function (ret) { ret.set_float(this.enabled ? this.density : 0); }; Exps.prototype.Friction = function (ret) { ret.set_float(this.enabled ? this.friction : 0); }; Exps.prototype.Elasticity = function (ret) { ret.set_float(this.enabled ? this.restitution : 0); }; Exps.prototype.LinearDamping = function (ret) { ret.set_float(this.enabled ? this.linearDamping : 0); }; Exps.prototype.AngularDamping = function (ret) { ret.set_float(this.enabled ? this.angularDamping : 0); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Pin = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Pin.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.pinObject = null; this.pinObjectUid = -1; // for loading this.pinAngle = 0; this.pinDist = 0; this.myStartAngle = 0; this.theirStartAngle = 0; this.lastKnownAngle = 0; this.mode = 0; // 0 = position & angle; 1 = position; 2 = angle; 3 = rope; 4 = bar var self = this; if (!this.recycled) { this.myDestroyCallback = (function(inst) { self.onInstanceDestroyed(inst); }); } this.runtime.addDestroyCallback(this.myDestroyCallback); }; behinstProto.saveToJSON = function () { return { "uid": this.pinObject ? this.pinObject.uid : -1, "pa": this.pinAngle, "pd": this.pinDist, "msa": this.myStartAngle, "tsa": this.theirStartAngle, "lka": this.lastKnownAngle, "m": this.mode }; }; behinstProto.loadFromJSON = function (o) { this.pinObjectUid = o["uid"]; // wait until afterLoad to look up this.pinAngle = o["pa"]; this.pinDist = o["pd"]; this.myStartAngle = o["msa"]; this.theirStartAngle = o["tsa"]; this.lastKnownAngle = o["lka"]; this.mode = o["m"]; }; behinstProto.afterLoad = function () { if (this.pinObjectUid === -1) this.pinObject = null; else { this.pinObject = this.runtime.getObjectByUID(this.pinObjectUid); ; } this.pinObjectUid = -1; }; behinstProto.onInstanceDestroyed = function (inst) { if (this.pinObject == inst) this.pinObject = null; }; behinstProto.onDestroy = function() { this.pinObject = null; this.runtime.removeDestroyCallback(this.myDestroyCallback); }; behinstProto.tick = function () { }; behinstProto.tick2 = function () { if (!this.pinObject) return; if (this.lastKnownAngle !== this.inst.angle) this.myStartAngle = cr.clamp_angle(this.myStartAngle + (this.inst.angle - this.lastKnownAngle)); var newx = this.inst.x; var newy = this.inst.y; if (this.mode === 3 || this.mode === 4) // rope mode or bar mode { var dist = cr.distanceTo(this.inst.x, this.inst.y, this.pinObject.x, this.pinObject.y); if ((dist > this.pinDist) || (this.mode === 4 && dist < this.pinDist)) { var a = cr.angleTo(this.pinObject.x, this.pinObject.y, this.inst.x, this.inst.y); newx = this.pinObject.x + Math.cos(a) * this.pinDist; newy = this.pinObject.y + Math.sin(a) * this.pinDist; } } else { newx = this.pinObject.x + Math.cos(this.pinObject.angle + this.pinAngle) * this.pinDist; newy = this.pinObject.y + Math.sin(this.pinObject.angle + this.pinAngle) * this.pinDist; } var newangle = cr.clamp_angle(this.myStartAngle + (this.pinObject.angle - this.theirStartAngle)); this.lastKnownAngle = newangle; if ((this.mode === 0 || this.mode === 1 || this.mode === 3 || this.mode === 4) && (this.inst.x !== newx || this.inst.y !== newy)) { this.inst.x = newx; this.inst.y = newy; this.inst.set_bbox_changed(); } if ((this.mode === 0 || this.mode === 2) && (this.inst.angle !== newangle)) { this.inst.angle = newangle; this.inst.set_bbox_changed(); } }; function Cnds() {}; Cnds.prototype.IsPinned = function () { return !!this.pinObject; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Pin = function (obj, mode_) { if (!obj) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst) return; this.pinObject = otherinst; this.pinAngle = cr.angleTo(otherinst.x, otherinst.y, this.inst.x, this.inst.y) - otherinst.angle; this.pinDist = cr.distanceTo(otherinst.x, otherinst.y, this.inst.x, this.inst.y); this.myStartAngle = this.inst.angle; this.lastKnownAngle = this.inst.angle; this.theirStartAngle = otherinst.angle; this.mode = mode_; }; Acts.prototype.Unpin = function () { this.pinObject = null; }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.PinnedUID = function (ret) { ret.set_int(this.pinObject ? this.pinObject.uid : -1); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Rotate = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Rotate.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.speed = cr.to_radians(this.properties[0]); this.acc = cr.to_radians(this.properties[1]); }; behinstProto.saveToJSON = function () { return { "speed": this.speed, "acc": this.acc }; }; behinstProto.loadFromJSON = function (o) { this.speed = o["speed"]; this.acc = o["acc"]; }; behinstProto.tick = function () { var dt = this.runtime.getDt(this.inst); if (dt === 0) return; if (this.acc !== 0) this.speed += this.acc * dt; if (this.speed !== 0) { this.inst.angle = cr.clamp_angle(this.inst.angle + this.speed * dt); this.inst.set_bbox_changed(); } }; function Cnds() {}; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function (s) { this.speed = cr.to_radians(s); }; Acts.prototype.SetAcceleration = function (a) { this.acc = cr.to_radians(a); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function (ret) { ret.set_float(cr.to_degrees(this.speed)); }; Exps.prototype.Acceleration = function (ret) { ret.set_float(cr.to_degrees(this.acc)); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Sin = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Sin.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; this.i = 0; // period offset (radians) }; var behinstProto = behaviorProto.Instance.prototype; var _2pi = 2 * Math.PI; var _pi_2 = Math.PI / 2; var _3pi_2 = (3 * Math.PI) / 2; behinstProto.onCreate = function() { this.active = (this.properties[0] === 1); this.movement = this.properties[1]; // 0=Horizontal|1=Vertical|2=Size|3=Width|4=Height|5=Angle|6=Opacity|7=Value only this.wave = this.properties[2]; // 0=Sine|1=Triangle|2=Sawtooth|3=Reverse sawtooth|4=Square this.period = this.properties[3]; this.period += Math.random() * this.properties[4]; // period random if (this.period === 0) this.i = 0; else { this.i = (this.properties[5] / this.period) * _2pi; // period offset this.i += ((Math.random() * this.properties[6]) / this.period) * _2pi; // period offset random } this.mag = this.properties[7]; // magnitude this.mag += Math.random() * this.properties[8]; // magnitude random this.initialValue = 0; this.initialValue2 = 0; this.ratio = 0; this.init(); }; behinstProto.saveToJSON = function () { return { "i": this.i, "a": this.active, "mv": this.movement, "w": this.wave, "p": this.period, "mag": this.mag, "iv": this.initialValue, "iv2": this.initialValue2, "r": this.ratio, "lkv": this.lastKnownValue, "lkv2": this.lastKnownValue2 }; }; behinstProto.loadFromJSON = function (o) { this.i = o["i"]; this.active = o["a"]; this.movement = o["mv"]; this.wave = o["w"]; this.period = o["p"]; this.mag = o["mag"]; this.initialValue = o["iv"]; this.initialValue2 = o["iv2"] || 0; this.ratio = o["r"]; this.lastKnownValue = o["lkv"]; this.lastKnownValue2 = o["lkv2"] || 0; }; behinstProto.init = function () { switch (this.movement) { case 0: // horizontal this.initialValue = this.inst.x; break; case 1: // vertical this.initialValue = this.inst.y; break; case 2: // size this.initialValue = this.inst.width; this.ratio = this.inst.height / this.inst.width; break; case 3: // width this.initialValue = this.inst.width; break; case 4: // height this.initialValue = this.inst.height; break; case 5: // angle this.initialValue = this.inst.angle; this.mag = cr.to_radians(this.mag); // convert magnitude from degrees to radians break; case 6: // opacity this.initialValue = this.inst.opacity; break; case 7: this.initialValue = 0; break; case 8: // forwards/backwards this.initialValue = this.inst.x; this.initialValue2 = this.inst.y; break; default: ; } this.lastKnownValue = this.initialValue; this.lastKnownValue2 = this.initialValue2; }; behinstProto.waveFunc = function (x) { x = x % _2pi; switch (this.wave) { case 0: // sine return Math.sin(x); case 1: // triangle if (x <= _pi_2) return x / _pi_2; else if (x <= _3pi_2) return 1 - (2 * (x - _pi_2) / Math.PI); else return (x - _3pi_2) / _pi_2 - 1; case 2: // sawtooth return 2 * x / _2pi - 1; case 3: // reverse sawtooth return -2 * x / _2pi + 1; case 4: // square return x < Math.PI ? -1 : 1; }; return 0; }; behinstProto.tick = function () { var dt = this.runtime.getDt(this.inst); if (!this.active || dt === 0) return; if (this.period === 0) this.i = 0; else { this.i += (dt / this.period) * _2pi; this.i = this.i % _2pi; } switch (this.movement) { case 0: // horizontal if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; this.inst.x = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; break; case 1: // vertical if (this.inst.y !== this.lastKnownValue) this.initialValue += this.inst.y - this.lastKnownValue; this.inst.y = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.y; break; case 2: // size this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; this.inst.height = this.inst.width * this.ratio; break; case 3: // width this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 4: // height this.inst.height = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 5: // angle if (this.inst.angle !== this.lastKnownValue) this.initialValue = cr.clamp_angle(this.initialValue + (this.inst.angle - this.lastKnownValue)); this.inst.angle = cr.clamp_angle(this.initialValue + this.waveFunc(this.i) * this.mag); this.lastKnownValue = this.inst.angle; break; case 6: // opacity this.inst.opacity = this.initialValue + (this.waveFunc(this.i) * this.mag) / 100; if (this.inst.opacity < 0) this.inst.opacity = 0; else if (this.inst.opacity > 1) this.inst.opacity = 1; break; case 8: // forwards/backwards if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; if (this.inst.y !== this.lastKnownValue2) this.initialValue2 += this.inst.y - this.lastKnownValue2; this.inst.x = this.initialValue + Math.cos(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.inst.y = this.initialValue2 + Math.sin(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; this.lastKnownValue2 = this.inst.y; break; } this.inst.set_bbox_changed(); }; behinstProto.onSpriteFrameChanged = function (prev_frame, next_frame) { switch (this.movement) { case 2: // size this.initialValue *= (next_frame.width / prev_frame.width); this.ratio = next_frame.height / next_frame.width; break; case 3: // width this.initialValue *= (next_frame.width / prev_frame.width); break; case 4: // height this.initialValue *= (next_frame.height / prev_frame.height); break; } }; function Cnds() {}; Cnds.prototype.IsActive = function () { return this.active; }; Cnds.prototype.CompareMovement = function (m) { return this.movement === m; }; Cnds.prototype.ComparePeriod = function (cmp, v) { return cr.do_cmp(this.period, cmp, v); }; Cnds.prototype.CompareMagnitude = function (cmp, v) { if (this.movement === 5) return cr.do_cmp(this.mag, cmp, cr.to_radians(v)); else return cr.do_cmp(this.mag, cmp, v); }; Cnds.prototype.CompareWave = function (w) { return this.wave === w; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetActive = function (a) { this.active = (a === 1); }; Acts.prototype.SetPeriod = function (x) { this.period = x; }; Acts.prototype.SetMagnitude = function (x) { this.mag = x; if (this.movement === 5) // angle this.mag = cr.to_radians(this.mag); }; Acts.prototype.SetMovement = function (m) { if (this.movement === 5) this.mag = cr.to_degrees(this.mag); this.movement = m; this.init(); }; Acts.prototype.SetWave = function (w) { this.wave = w; }; Acts.prototype.SetPhase = function (x) { this.i = (x * _2pi) % _2pi; }; Acts.prototype.UpdateInitialState = function () { this.init(); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.CyclePosition = function (ret) { ret.set_float(this.i / _2pi); }; Exps.prototype.Period = function (ret) { ret.set_float(this.period); }; Exps.prototype.Magnitude = function (ret) { if (this.movement === 5) // angle ret.set_float(cr.to_degrees(this.mag)); else ret.set_float(this.mag); }; Exps.prototype.Value = function (ret) { ret.set_float(this.waveFunc(this.i) * this.mag); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.destroy = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.destroy.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { }; behinstProto.tick = function () { this.inst.update_bbox(); var bbox = this.inst.bbox; var layout = this.inst.layer.layout; if (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height) this.runtime.DestroyInstance(this.inst); }; }()); ; ; cr.behaviors.wrap = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.wrap.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.mode = this.properties[0]; // 0 = wrap to layout, 1 = wrap to viewport }; behinstProto.tick = function () { var inst = this.inst; inst.update_bbox(); var bbox = inst.bbox; var layer = inst.layer; var layout = layer.layout; var lbound = 0, rbound = 0, tbound = 0, bbound = 0; if (this.mode === 0) { rbound = layout.width; bbound = layout.height; } else { lbound = layer.viewLeft; rbound = layer.viewRight; tbound = layer.viewTop; bbound = layer.viewBottom; } if (bbox.right < lbound) { inst.x = (rbound - 1) + (inst.x - bbox.left); inst.set_bbox_changed(); } else if (bbox.left > rbound) { inst.x = (lbound + 1) - (bbox.right - inst.x); inst.set_bbox_changed(); } else if (bbox.bottom < tbound) { inst.y = (bbound - 1) + (inst.y - bbox.top); inst.set_bbox_changed(); } else if (bbox.top > bbound) { inst.y = (tbound + 1) - (bbox.bottom - inst.y); inst.set_bbox_changed(); } }; }()); cr.getObjectRefTable = function () { return [ cr.plugins_.TiledBg, cr.plugins_.Touch, cr.plugins_.Spritefont2, cr.plugins_.Sprite, cr.plugins_.WebStorage, cr.plugins_.Audio, cr.plugins_.Browser, cr.plugins_.Function, cr.plugins_.Cocoon_Canvasplus, cr.plugins_.Mouse, cr.plugins_.Keyboard, cr.behaviors.Rotate, cr.behaviors.Sin, cr.behaviors.Fade, cr.behaviors.Bullet, cr.behaviors.wrap, cr.behaviors.Physics, cr.behaviors.destroy, cr.behaviors.Pin, cr.system_object.prototype.cnds.IsGroupActive, cr.system_object.prototype.cnds.OnLayoutStart, cr.system_object.prototype.acts.SetLayerOpacity, cr.plugins_.Sprite.prototype.acts.SetPos, cr.system_object.prototype.exps.layoutwidth, cr.system_object.prototype.exps.layoutheight, cr.plugins_.Spritefont2.prototype.acts.SetPos, cr.plugins_.Sprite.prototype.acts.SetY, cr.plugins_.Sprite.prototype.exps.Width, cr.system_object.prototype.acts.SetVar, cr.plugins_.Spritefont2.prototype.acts.SetText, cr.behaviors.Pin.prototype.acts.Pin, cr.system_object.prototype.cnds.CompareVar, cr.system_object.prototype.cnds.EveryTick, cr.system_object.prototype.exps.viewporttop, cr.system_object.prototype.exps.viewportleft, cr.system_object.prototype.exps.viewportright, cr.plugins_.Spritefont2.prototype.acts.SetPosToObject, cr.plugins_.Touch.prototype.cnds.OnTouchObject, cr.behaviors.Sin.prototype.cnds.IsActive, cr.plugins_.Audio.prototype.acts.Play, cr.behaviors.Fade.prototype.acts.StartFade, cr.behaviors.Sin.prototype.acts.SetActive, cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, cr.plugins_.WebStorage.prototype.acts.StoreLocal, cr.system_object.prototype.acts.Wait, cr.plugins_.Spritefont2.prototype.acts.SetVisible, cr.plugins_.Sprite.prototype.acts.SetVisible, cr.plugins_.Sprite.prototype.acts.Destroy, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, cr.system_object.prototype.cnds.Every, cr.system_object.prototype.acts.AddVar, cr.plugins_.Sprite.prototype.cnds.OnCollision, cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet, cr.plugins_.Sprite.prototype.acts.SetBoolInstanceVar, cr.plugins_.Sprite.prototype.acts.SubInstanceVar, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, cr.plugins_.Sprite.prototype.acts.Spawn, cr.plugins_.Sprite.prototype.cnds.OnAnyAnimFinished, cr.system_object.prototype.acts.SubVar, cr.plugins_.Audio.prototype.acts.PlayByName, cr.plugins_.Sprite.prototype.acts.StartAnim, cr.behaviors.Physics.prototype.acts.ApplyImpulseAtAngle, cr.system_object.prototype.exps.angle, cr.plugins_.Sprite.prototype.exps.X, cr.plugins_.Sprite.prototype.exps.Y, cr.behaviors.Physics.prototype.acts.SetImmovable, cr.plugins_.Sprite.prototype.acts.SetAngle, cr.system_object.prototype.exps.random, cr.plugins_.Sprite.prototype.acts.SetSize, cr.plugins_.Sprite.prototype.acts.SetPosToObject, cr.plugins_.Touch.prototype.cnds.IsTouchingObject, cr.plugins_.Sprite.prototype.acts.SetAnim, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, cr.system_object.prototype.exps.round, cr.system_object.prototype.exps.distance, cr.plugins_.Touch.prototype.exps.X, cr.plugins_.Touch.prototype.exps.Y, cr.plugins_.Sprite.prototype.exps.Angle, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, cr.plugins_.Sprite.prototype.cnds.OnAnimFinished, cr.plugins_.Spritefont2.prototype.acts.SetY, cr.plugins_.Spritefont2.prototype.exps.Y, cr.plugins_.Spritefont2.prototype.acts.SetAngle, cr.behaviors.Physics.prototype.acts.EnableCollisions, cr.plugins_.Mouse.prototype.exps.X, cr.plugins_.Mouse.prototype.exps.Y, cr.system_object.prototype.cnds.Compare, cr.plugins_.Audio.prototype.acts.Preload, cr.system_object.prototype.exps.viewportbottom, cr.system_object.prototype.exps.loadingprogress, cr.plugins_.Spritefont2.prototype.cnds.IsBoolInstanceVarSet, cr.system_object.prototype.cnds.OnLoadFinished, cr.plugins_.Spritefont2.prototype.acts.SetBoolInstanceVar, cr.system_object.prototype.acts.SetGroupActive, cr.plugins_.Keyboard.prototype.cnds.OnAnyKey, cr.plugins_.Sprite.prototype.cnds.CompareFrame, cr.plugins_.Browser.prototype.acts.RequestFullScreen, cr.system_object.prototype.acts.WaitForSignal, cr.system_object.prototype.acts.GoToLayout, cr.plugins_.Mouse.prototype.cnds.IsOverObject, cr.system_object.prototype.acts.SetTimescale, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, cr.plugins_.WebStorage.prototype.exps.LocalValue, cr.plugins_.Sprite.prototype.acts.SetWidth, cr.plugins_.Sprite.prototype.acts.SetX, cr.system_object.prototype.exps.clamp, cr.system_object.prototype.exps.log10, cr.plugins_.Audio.prototype.acts.SetVolume, cr.system_object.prototype.cnds.Else, cr.system_object.prototype.acts.GoToLayoutByName, cr.system_object.prototype.cnds.TriggerOnce, cr.system_object.prototype.acts.SetLayerScale, cr.system_object.prototype.exps.lerp, cr.system_object.prototype.exps.layeropacity, cr.system_object.prototype.exps.layerscale, cr.plugins_.Sprite.prototype.cnds.CompareAnimSpeed, cr.system_object.prototype.acts.RestartLayout, cr.plugins_.Browser.prototype.acts.CancelFullScreen, cr.plugins_.Mouse.prototype.cnds.IsButtonDown, cr.plugins_.Mouse.prototype.acts.SetCursorSprite, cr.system_object.prototype.exps.windowwidth, cr.system_object.prototype.exps.windowheight, cr.system_object.prototype.acts.SetLayerVisible, cr.system_object.prototype.cnds.LayerCmpOpacity, cr.system_object.prototype.acts.Signal, cr.plugins_.Browser.prototype.acts.GoToURLWindow, cr.plugins_.Cocoon_Canvasplus.prototype.cnds.isCanvasPlus, cr.plugins_.Cocoon_Canvasplus.prototype.acts.exitApp, cr.plugins_.Browser.prototype.acts.Close, cr.plugins_.TiledBg.prototype.cnds.CompareInstanceVar, cr.plugins_.TiledBg.prototype.acts.SetVisible ];}; home/jogoso94/public_html/jogos/plumper/c2runtime.js 0000644 00002503072 15042715253 0016543 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com var cr = {}; cr.plugins_ = {}; cr.behaviors = {}; if (typeof Object.getPrototypeOf !== "function") { if (typeof "test".__proto__ === "object") { Object.getPrototypeOf = function(object) { return object.__proto__; }; } else { Object.getPrototypeOf = function(object) { return object.constructor.prototype; }; } } (function(){ cr.logexport = function (msg) { if (window.console && window.console.log) window.console.log(msg); }; cr.logerror = function (msg) { if (window.console && window.console.error) window.console.error(msg); }; cr.seal = function(x) { return x; }; cr.freeze = function(x) { return x; }; cr.is_undefined = function (x) { return typeof x === "undefined"; }; cr.is_number = function (x) { return typeof x === "number"; }; cr.is_string = function (x) { return typeof x === "string"; }; cr.isPOT = function (x) { return x > 0 && ((x - 1) & x) === 0; }; cr.nextHighestPowerOfTwo = function(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } cr.abs = function (x) { return (x < 0 ? -x : x); }; cr.max = function (a, b) { return (a > b ? a : b); }; cr.min = function (a, b) { return (a < b ? a : b); }; cr.PI = Math.PI; cr.round = function (x) { return (x + 0.5) | 0; }; cr.floor = function (x) { if (x >= 0) return x | 0; else return (x | 0) - 1; // correctly round down when negative }; cr.ceil = function (x) { var f = x | 0; return (f === x ? f : f + 1); }; function Vector2(x, y) { this.x = x; this.y = y; cr.seal(this); }; Vector2.prototype.offset = function (px, py) { this.x += px; this.y += py; return this; }; Vector2.prototype.mul = function (px, py) { this.x *= px; this.y *= py; return this; }; cr.vector2 = Vector2; cr.segments_intersect = function(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { var max_ax, min_ax, max_ay, min_ay, max_bx, min_bx, max_by, min_by; if (a1x < a2x) { min_ax = a1x; max_ax = a2x; } else { min_ax = a2x; max_ax = a1x; } if (b1x < b2x) { min_bx = b1x; max_bx = b2x; } else { min_bx = b2x; max_bx = b1x; } if (max_ax < min_bx || min_ax > max_bx) return false; if (a1y < a2y) { min_ay = a1y; max_ay = a2y; } else { min_ay = a2y; max_ay = a1y; } if (b1y < b2y) { min_by = b1y; max_by = b2y; } else { min_by = b2y; max_by = b1y; } if (max_ay < min_by || min_ay > max_by) return false; var dpx = b1x - a1x + b2x - a2x; var dpy = b1y - a1y + b2y - a2y; var qax = a2x - a1x; var qay = a2y - a1y; var qbx = b2x - b1x; var qby = b2y - b1y; var d = cr.abs(qay * qbx - qby * qax); var la = qbx * dpy - qby * dpx; if (cr.abs(la) > d) return false; var lb = qax * dpy - qay * dpx; return cr.abs(lb) <= d; }; function Rect(left, top, right, bottom) { this.set(left, top, right, bottom); cr.seal(this); }; Rect.prototype.set = function (left, top, right, bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; }; Rect.prototype.copy = function (r) { this.left = r.left; this.top = r.top; this.right = r.right; this.bottom = r.bottom; }; Rect.prototype.width = function () { return this.right - this.left; }; Rect.prototype.height = function () { return this.bottom - this.top; }; Rect.prototype.offset = function (px, py) { this.left += px; this.top += py; this.right += px; this.bottom += py; return this; }; Rect.prototype.normalize = function () { var temp = 0; if (this.left > this.right) { temp = this.left; this.left = this.right; this.right = temp; } if (this.top > this.bottom) { temp = this.top; this.top = this.bottom; this.bottom = temp; } }; Rect.prototype.intersects_rect = function (rc) { return !(rc.right < this.left || rc.bottom < this.top || rc.left > this.right || rc.top > this.bottom); }; Rect.prototype.intersects_rect_off = function (rc, ox, oy) { return !(rc.right + ox < this.left || rc.bottom + oy < this.top || rc.left + ox > this.right || rc.top + oy > this.bottom); }; Rect.prototype.contains_pt = function (x, y) { return (x >= this.left && x <= this.right) && (y >= this.top && y <= this.bottom); }; Rect.prototype.equals = function (r) { return this.left === r.left && this.top === r.top && this.right === r.right && this.bottom === r.bottom; }; cr.rect = Rect; function Quad() { this.tlx = 0; this.tly = 0; this.trx = 0; this.try_ = 0; // is a keyword otherwise! this.brx = 0; this.bry = 0; this.blx = 0; this.bly = 0; cr.seal(this); }; Quad.prototype.set_from_rect = function (rc) { this.tlx = rc.left; this.tly = rc.top; this.trx = rc.right; this.try_ = rc.top; this.brx = rc.right; this.bry = rc.bottom; this.blx = rc.left; this.bly = rc.bottom; }; Quad.prototype.set_from_rotated_rect = function (rc, a) { if (a === 0) { this.set_from_rect(rc); } else { var sin_a = Math.sin(a); var cos_a = Math.cos(a); var left_sin_a = rc.left * sin_a; var top_sin_a = rc.top * sin_a; var right_sin_a = rc.right * sin_a; var bottom_sin_a = rc.bottom * sin_a; var left_cos_a = rc.left * cos_a; var top_cos_a = rc.top * cos_a; var right_cos_a = rc.right * cos_a; var bottom_cos_a = rc.bottom * cos_a; this.tlx = left_cos_a - top_sin_a; this.tly = top_cos_a + left_sin_a; this.trx = right_cos_a - top_sin_a; this.try_ = top_cos_a + right_sin_a; this.brx = right_cos_a - bottom_sin_a; this.bry = bottom_cos_a + right_sin_a; this.blx = left_cos_a - bottom_sin_a; this.bly = bottom_cos_a + left_sin_a; } }; Quad.prototype.offset = function (px, py) { this.tlx += px; this.tly += py; this.trx += px; this.try_ += py; this.brx += px; this.bry += py; this.blx += px; this.bly += py; return this; }; var minresult = 0; var maxresult = 0; function minmax4(a, b, c, d) { if (a < b) { if (c < d) { if (a < c) minresult = a; else minresult = c; if (b > d) maxresult = b; else maxresult = d; } else { if (a < d) minresult = a; else minresult = d; if (b > c) maxresult = b; else maxresult = c; } } else { if (c < d) { if (b < c) minresult = b; else minresult = c; if (a > d) maxresult = a; else maxresult = d; } else { if (b < d) minresult = b; else minresult = d; if (a > c) maxresult = a; else maxresult = c; } } }; Quad.prototype.bounding_box = function (rc) { minmax4(this.tlx, this.trx, this.brx, this.blx); rc.left = minresult; rc.right = maxresult; minmax4(this.tly, this.try_, this.bry, this.bly); rc.top = minresult; rc.bottom = maxresult; }; Quad.prototype.contains_pt = function (x, y) { var tlx = this.tlx; var tly = this.tly; var v0x = this.trx - tlx; var v0y = this.try_ - tly; var v1x = this.brx - tlx; var v1y = this.bry - tly; var v2x = x - tlx; var v2y = y - tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y var dot11 = v1x * v1x + v1y * v1y var dot12 = v1x * v2x + v1y * v2y var invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); var u = (dot11 * dot02 - dot01 * dot12) * invDenom; var v = (dot00 * dot12 - dot01 * dot02) * invDenom; if ((u >= 0.0) && (v > 0.0) && (u + v < 1)) return true; v0x = this.blx - tlx; v0y = this.bly - tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); u = (dot11 * dot02 - dot01 * dot12) * invDenom; v = (dot00 * dot12 - dot01 * dot02) * invDenom; return (u >= 0.0) && (v > 0.0) && (u + v < 1); }; Quad.prototype.at = function (i, xory) { if (xory) { switch (i) { case 0: return this.tlx; case 1: return this.trx; case 2: return this.brx; case 3: return this.blx; case 4: return this.tlx; default: return this.tlx; } } else { switch (i) { case 0: return this.tly; case 1: return this.try_; case 2: return this.bry; case 3: return this.bly; case 4: return this.tly; default: return this.tly; } } }; Quad.prototype.midX = function () { return (this.tlx + this.trx + this.brx + this.blx) / 4; }; Quad.prototype.midY = function () { return (this.tly + this.try_ + this.bry + this.bly) / 4; }; Quad.prototype.intersects_segment = function (x1, y1, x2, y2) { if (this.contains_pt(x1, y1) || this.contains_pt(x2, y2)) return true; var a1x, a1y, a2x, a2y; var i; for (i = 0; i < 4; i++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; Quad.prototype.intersects_quad = function (rhs) { var midx = rhs.midX(); var midy = rhs.midY(); if (this.contains_pt(midx, midy)) return true; midx = this.midX(); midy = this.midY(); if (rhs.contains_pt(midx, midy)) return true; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; var i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); b1x = rhs.at(j, true); b1y = rhs.at(j, false); b2x = rhs.at(j + 1, true); b2y = rhs.at(j + 1, false); if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; cr.quad = Quad; cr.RGB = function (red, green, blue) { return Math.max(Math.min(red, 255), 0) | (Math.max(Math.min(green, 255), 0) << 8) | (Math.max(Math.min(blue, 255), 0) << 16); }; cr.GetRValue = function (rgb) { return rgb & 0xFF; }; cr.GetGValue = function (rgb) { return (rgb & 0xFF00) >> 8; }; cr.GetBValue = function (rgb) { return (rgb & 0xFF0000) >> 16; }; cr.shallowCopy = function (a, b, allowOverwrite) { var attr; for (attr in b) { if (b.hasOwnProperty(attr)) { ; a[attr] = b[attr]; } } return a; }; cr.arrayRemove = function (arr, index) { var i, len; index = cr.floor(index); if (index < 0 || index >= arr.length) return; // index out of bounds for (i = index, len = arr.length - 1; i < len; i++) arr[i] = arr[i + 1]; cr.truncateArray(arr, len); }; cr.truncateArray = function (arr, index) { arr.length = index; }; cr.clearArray = function (arr) { cr.truncateArray(arr, 0); }; cr.shallowAssignArray = function (dest, src) { cr.clearArray(dest); var i, len; for (i = 0, len = src.length; i < len; ++i) dest[i] = src[i]; }; cr.appendArray = function (a, b) { a.push.apply(a, b); }; cr.fastIndexOf = function (arr, item) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { if (arr[i] === item) return i; } return -1; }; cr.arrayFindRemove = function (arr, item) { var index = cr.fastIndexOf(arr, item); if (index !== -1) cr.arrayRemove(arr, index); }; cr.clamp = function(x, a, b) { if (x < a) return a; else if (x > b) return b; else return x; }; cr.to_radians = function(x) { return x / (180.0 / cr.PI); }; cr.to_degrees = function(x) { return x * (180.0 / cr.PI); }; cr.clamp_angle_degrees = function (a) { a %= 360; // now in (-360, 360) range if (a < 0) a += 360; // now in [0, 360) range return a; }; cr.clamp_angle = function (a) { a %= 2 * cr.PI; // now in (-2pi, 2pi) range if (a < 0) a += 2 * cr.PI; // now in [0, 2pi) range return a; }; cr.to_clamped_degrees = function (x) { return cr.clamp_angle_degrees(cr.to_degrees(x)); }; cr.to_clamped_radians = function (x) { return cr.clamp_angle(cr.to_radians(x)); }; cr.angleTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.atan2(dy, dx); }; cr.angleDiff = function (a1, a2) { if (a1 === a2) return 0; var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); var n = s1 * s2 + c1 * c2; if (n >= 1) return 0; if (n <= -1) return cr.PI; return Math.acos(n); }; cr.angleRotate = function (start, end, step) { var ss = Math.sin(start); var cs = Math.cos(start); var se = Math.sin(end); var ce = Math.cos(end); if (Math.acos(ss * se + cs * ce) > step) { if (cs * se - ss * ce > 0) return cr.clamp_angle(start + step); else return cr.clamp_angle(start - step); } else return cr.clamp_angle(end); }; cr.angleClockwise = function (a1, a2) { var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); return c1 * s2 - s1 * c2 <= 0; }; cr.rotatePtAround = function (px, py, a, ox, oy, getx) { if (a === 0) return getx ? px : py; var sin_a = Math.sin(a); var cos_a = Math.cos(a); px -= ox; py -= oy; var left_sin_a = px * sin_a; var top_sin_a = py * sin_a; var left_cos_a = px * cos_a; var top_cos_a = py * cos_a; px = left_cos_a - top_sin_a; py = top_cos_a + left_sin_a; px += ox; py += oy; return getx ? px : py; } cr.distanceTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.sqrt(dx*dx + dy*dy); }; cr.xor = function (x, y) { return !x !== !y; }; cr.lerp = function (a, b, x) { return a + (b - a) * x; }; cr.unlerp = function (a, b, c) { if (a === b) return 0; // avoid divide by 0 return (c - a) / (b - a); }; cr.anglelerp = function (a, b, x) { var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { return a + diff * x; } else { return a - diff * x; } }; cr.qarp = function (a, b, c, x) { return cr.lerp(cr.lerp(a, b, x), cr.lerp(b, c, x), x); }; cr.cubic = function (a, b, c, d, x) { return cr.lerp(cr.qarp(a, b, c, x), cr.qarp(b, c, d, x), x); }; cr.cosp = function (a, b, x) { return (a + b + (a - b) * Math.cos(x * Math.PI)) / 2; }; cr.hasAnyOwnProperty = function (o) { var p; for (p in o) { if (o.hasOwnProperty(p)) return true; } return false; }; cr.wipe = function (obj) { var p; for (p in obj) { if (obj.hasOwnProperty(p)) delete obj[p]; } }; var startup_time = +(new Date()); cr.performance_now = function() { if (typeof window["performance"] !== "undefined") { var winperf = window["performance"]; if (typeof winperf.now !== "undefined") return winperf.now(); else if (typeof winperf["webkitNow"] !== "undefined") return winperf["webkitNow"](); else if (typeof winperf["mozNow"] !== "undefined") return winperf["mozNow"](); else if (typeof winperf["msNow"] !== "undefined") return winperf["msNow"](); } return Date.now() - startup_time; }; var isChrome = false; var isSafari = false; var isiOS = false; var isEjecta = false; if (typeof window !== "undefined") // not c2 editor { isChrome = /chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent); isSafari = !isChrome && /safari/i.test(navigator.userAgent); isiOS = /(iphone|ipod|ipad)/i.test(navigator.userAgent); isEjecta = window["c2ejecta"]; } var supports_set = ((!isSafari && !isEjecta && !isiOS) && (typeof Set !== "undefined" && typeof Set.prototype["forEach"] !== "undefined")); function ObjectSet_() { this.s = null; this.items = null; // lazy allocated (hopefully results in better GC performance) this.item_count = 0; if (supports_set) { this.s = new Set(); } this.values_cache = []; this.cache_valid = true; cr.seal(this); }; ObjectSet_.prototype.contains = function (x) { if (this.isEmpty()) return false; if (supports_set) return this.s["has"](x); else return (this.items && this.items.hasOwnProperty(x)); }; ObjectSet_.prototype.add = function (x) { if (supports_set) { if (!this.s["has"](x)) { this.s["add"](x); this.cache_valid = false; } } else { var str = x.toString(); var items = this.items; if (!items) { this.items = {}; this.items[str] = x; this.item_count = 1; this.cache_valid = false; } else if (!items.hasOwnProperty(str)) { items[str] = x; this.item_count++; this.cache_valid = false; } } }; ObjectSet_.prototype.remove = function (x) { if (this.isEmpty()) return; if (supports_set) { if (this.s["has"](x)) { this.s["delete"](x); this.cache_valid = false; } } else if (this.items) { var str = x.toString(); var items = this.items; if (items.hasOwnProperty(str)) { delete items[str]; this.item_count--; this.cache_valid = false; } } }; ObjectSet_.prototype.clear = function (/*wipe_*/) { if (this.isEmpty()) return; if (supports_set) { this.s["clear"](); // best! } else { this.items = null; // creates garbage; will lazy allocate on next add() this.item_count = 0; } cr.clearArray(this.values_cache); this.cache_valid = true; }; ObjectSet_.prototype.isEmpty = function () { return this.count() === 0; }; ObjectSet_.prototype.count = function () { if (supports_set) return this.s["size"]; else return this.item_count; }; var current_arr = null; var current_index = 0; function set_append_to_arr(x) { current_arr[current_index++] = x; }; ObjectSet_.prototype.update_cache = function () { if (this.cache_valid) return; if (supports_set) { cr.clearArray(this.values_cache); current_arr = this.values_cache; current_index = 0; this.s["forEach"](set_append_to_arr); ; current_arr = null; current_index = 0; } else { var values_cache = this.values_cache; cr.clearArray(values_cache); var p, n = 0, items = this.items; if (items) { for (p in items) { if (items.hasOwnProperty(p)) values_cache[n++] = items[p]; } } ; } this.cache_valid = true; }; ObjectSet_.prototype.valuesRef = function () { this.update_cache(); return this.values_cache; }; cr.ObjectSet = ObjectSet_; var tmpSet = new cr.ObjectSet(); cr.removeArrayDuplicates = function (arr) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { tmpSet.add(arr[i]); } cr.shallowAssignArray(arr, tmpSet.valuesRef()); tmpSet.clear(); }; cr.arrayRemoveAllFromObjectSet = function (arr, remset) { if (supports_set) cr.arrayRemoveAll_set(arr, remset.s); else cr.arrayRemoveAll_arr(arr, remset.valuesRef()); }; cr.arrayRemoveAll_set = function (arr, s) { var i, j, len, item; for (i = 0, j = 0, len = arr.length; i < len; ++i) { item = arr[i]; if (!s["has"](item)) // not an item to remove arr[j++] = item; // keep it } cr.truncateArray(arr, j); }; cr.arrayRemoveAll_arr = function (arr, rem) { var i, j, len, item; for (i = 0, j = 0, len = arr.length; i < len; ++i) { item = arr[i]; if (cr.fastIndexOf(rem, item) === -1) // not an item to remove arr[j++] = item; // keep it } cr.truncateArray(arr, j); }; function KahanAdder_() { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; cr.seal(this); }; KahanAdder_.prototype.add = function (v) { this.y = v - this.c; this.t = this.sum + this.y; this.c = (this.t - this.sum) - this.y; this.sum = this.t; }; KahanAdder_.prototype.reset = function () { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; }; cr.KahanAdder = KahanAdder_; cr.regexp_escape = function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }; function CollisionPoly_(pts_array_) { this.pts_cache = []; this.bboxLeft = 0; this.bboxTop = 0; this.bboxRight = 0; this.bboxBottom = 0; this.convexpolys = null; // for physics behavior to cache separated polys this.set_pts(pts_array_); cr.seal(this); }; CollisionPoly_.prototype.set_pts = function(pts_array_) { this.pts_array = pts_array_; this.pts_count = pts_array_.length / 2; // x, y, x, y... in array this.pts_cache.length = pts_array_.length; this.cache_width = -1; this.cache_height = -1; this.cache_angle = 0; }; CollisionPoly_.prototype.is_empty = function() { return !this.pts_array.length; }; CollisionPoly_.prototype.update_bbox = function () { var myptscache = this.pts_cache; var bboxLeft_ = myptscache[0]; var bboxRight_ = bboxLeft_; var bboxTop_ = myptscache[1]; var bboxBottom_ = bboxTop_; var x, y, i = 1, i2, len = this.pts_count; for ( ; i < len; ++i) { i2 = i*2; x = myptscache[i2]; y = myptscache[i2+1]; if (x < bboxLeft_) bboxLeft_ = x; if (x > bboxRight_) bboxRight_ = x; if (y < bboxTop_) bboxTop_ = y; if (y > bboxBottom_) bboxBottom_ = y; } this.bboxLeft = bboxLeft_; this.bboxRight = bboxRight_; this.bboxTop = bboxTop_; this.bboxBottom = bboxBottom_; }; CollisionPoly_.prototype.set_from_rect = function(rc, offx, offy) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = rc.left - offx; myptscache[1] = rc.top - offy; myptscache[2] = rc.right - offx; myptscache[3] = rc.top - offy; myptscache[4] = rc.right - offx; myptscache[5] = rc.bottom - offy; myptscache[6] = rc.left - offx; myptscache[7] = rc.bottom - offy; this.cache_width = rc.right - rc.left; this.cache_height = rc.bottom - rc.top; this.update_bbox(); }; CollisionPoly_.prototype.set_from_quad = function(q, offx, offy, w, h) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = q.tlx - offx; myptscache[1] = q.tly - offy; myptscache[2] = q.trx - offx; myptscache[3] = q.try_ - offy; myptscache[4] = q.brx - offx; myptscache[5] = q.bry - offy; myptscache[6] = q.blx - offx; myptscache[7] = q.bly - offy; this.cache_width = w; this.cache_height = h; this.update_bbox(); }; CollisionPoly_.prototype.set_from_poly = function (r) { this.pts_count = r.pts_count; cr.shallowAssignArray(this.pts_cache, r.pts_cache); this.bboxLeft = r.bboxLeft; this.bboxTop - r.bboxTop; this.bboxRight = r.bboxRight; this.bboxBottom = r.bboxBottom; }; CollisionPoly_.prototype.cache_poly = function(w, h, a) { if (this.cache_width === w && this.cache_height === h && this.cache_angle === a) return; // cache up-to-date this.cache_width = w; this.cache_height = h; this.cache_angle = a; var i, i2, i21, len, x, y; var sina = 0; var cosa = 1; var myptsarray = this.pts_array; var myptscache = this.pts_cache; if (a !== 0) { sina = Math.sin(a); cosa = Math.cos(a); } for (i = 0, len = this.pts_count; i < len; i++) { i2 = i*2; i21 = i2+1; x = myptsarray[i2] * w; y = myptsarray[i21] * h; myptscache[i2] = (x * cosa) - (y * sina); myptscache[i21] = (y * cosa) + (x * sina); } this.update_bbox(); }; CollisionPoly_.prototype.contains_pt = function (a2x, a2y) { var myptscache = this.pts_cache; if (a2x === myptscache[0] && a2y === myptscache[1]) return true; var i, i2, imod, len = this.pts_count; var a1x = this.bboxLeft - 110; var a1y = this.bboxTop - 101; var a3x = this.bboxRight + 131 var a3y = this.bboxBottom + 120; var b1x, b1y, b2x, b2y; var count1 = 0, count2 = 0; for (i = 0; i < len; i++) { i2 = i*2; imod = ((i+1)%len)*2; b1x = myptscache[i2]; b1y = myptscache[i2+1]; b2x = myptscache[imod]; b2y = myptscache[imod+1]; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) count1++; if (cr.segments_intersect(a3x, a3y, a2x, a2y, b1x, b1y, b2x, b2y)) count2++; } return (count1 % 2 === 1) || (count2 % 2 === 1); }; CollisionPoly_.prototype.intersects_poly = function (rhs, offx, offy) { var rhspts = rhs.pts_cache; var mypts = this.pts_cache; if (this.contains_pt(rhspts[0] + offx, rhspts[1] + offy)) return true; if (rhs.contains_pt(mypts[0] - offx, mypts[1] - offy)) return true; var i, i2, imod, leni, j, j2, jmod, lenj; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i*2; imod = ((i+1)%leni)*2; a1x = mypts[i2]; a1y = mypts[i2+1]; a2x = mypts[imod]; a2y = mypts[imod+1]; for (j = 0, lenj = rhs.pts_count; j < lenj; j++) { j2 = j*2; jmod = ((j+1)%lenj)*2; b1x = rhspts[j2] + offx; b1y = rhspts[j2+1] + offy; b2x = rhspts[jmod] + offx; b2y = rhspts[jmod+1] + offy; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; CollisionPoly_.prototype.intersects_segment = function (offx, offy, x1, y1, x2, y2) { var mypts = this.pts_cache; if (this.contains_pt(x1 - offx, y1 - offy)) return true; var i, leni, i2, imod; var a1x, a1y, a2x, a2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i*2; imod = ((i+1)%leni)*2; a1x = mypts[i2] + offx; a1y = mypts[i2+1] + offy; a2x = mypts[imod] + offx; a2y = mypts[imod+1] + offy; if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; CollisionPoly_.prototype.mirror = function (px) { var i, leni, i2; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i*2; this.pts_cache[i2] = px * 2 - this.pts_cache[i2]; } }; CollisionPoly_.prototype.flip = function (py) { var i, leni, i21; for (i = 0, leni = this.pts_count; i < leni; ++i) { i21 = i*2+1; this.pts_cache[i21] = py * 2 - this.pts_cache[i21]; } }; CollisionPoly_.prototype.diag = function () { var i, leni, i2, i21, temp; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i*2; i21 = i2+1; temp = this.pts_cache[i2]; this.pts_cache[i2] = this.pts_cache[i21]; this.pts_cache[i21] = temp; } }; cr.CollisionPoly = CollisionPoly_; function SparseGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; SparseGrid_.prototype.totalCellCount = 0; SparseGrid_.prototype.getCell = function (x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; SparseGrid_.prototype.XToCell = function (x_) { return cr.floor(x_ / this.cellwidth); }; SparseGrid_.prototype.YToCell = function (y_) { return cr.floor(y_ / this.cellheight); }; SparseGrid_.prototype.update = function (inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeGridCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; SparseGrid_.prototype.queryRange = function (rc, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(rc.left); ystart = this.YToCell(rc.top); lenx = this.XToCell(rc.right); leny = this.YToCell(rc.bottom); for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; cr.SparseGrid = SparseGrid_; function RenderGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; RenderGrid_.prototype.totalCellCount = 0; RenderGrid_.prototype.getCell = function (x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocRenderCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocRenderCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; RenderGrid_.prototype.XToCell = function (x_) { return cr.floor(x_ / this.cellwidth); }; RenderGrid_.prototype.YToCell = function (y_) { return cr.floor(y_ / this.cellheight); }; RenderGrid_.prototype.update = function (inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeRenderCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; RenderGrid_.prototype.queryRange = function (left, top, right, bottom, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(left); ystart = this.YToCell(top); lenx = this.XToCell(right); leny = this.YToCell(bottom); for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; RenderGrid_.prototype.markRangeChanged = function (rc) { var x, lenx, ystart, y, leny, cell; x = rc.left; ystart = rc.top; lenx = rc.right; leny = rc.bottom; for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.is_sorted = false; } } }; cr.RenderGrid = RenderGrid_; var gridcellcache = []; function allocGridCell(grid_, x_, y_) { var ret; SparseGrid_.prototype.totalCellCount++; if (gridcellcache.length) { ret = gridcellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.GridCell(grid_, x_, y_); }; function freeGridCell(c) { SparseGrid_.prototype.totalCellCount--; c.objects.clear(); if (gridcellcache.length < 1000) gridcellcache.push(c); }; function GridCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = new cr.ObjectSet(); }; GridCell_.prototype.isEmpty = function () { return this.objects.isEmpty(); }; GridCell_.prototype.insert = function (inst) { this.objects.add(inst); }; GridCell_.prototype.remove = function (inst) { this.objects.remove(inst); }; GridCell_.prototype.dump = function (result) { cr.appendArray(result, this.objects.valuesRef()); }; cr.GridCell = GridCell_; var rendercellcache = []; function allocRenderCell(grid_, x_, y_) { var ret; RenderGrid_.prototype.totalCellCount++; if (rendercellcache.length) { ret = rendercellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.RenderCell(grid_, x_, y_); }; function freeRenderCell(c) { RenderGrid_.prototype.totalCellCount--; c.reset(); if (rendercellcache.length < 1000) rendercellcache.push(c); }; function RenderCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = []; // array which needs to be sorted by Z order this.is_sorted = true; // whether array is in correct sort order or not this.pending_removal = new cr.ObjectSet(); this.any_pending_removal = false; }; RenderCell_.prototype.isEmpty = function () { if (!this.objects.length) { ; ; return true; } if (this.objects.length > this.pending_removal.count()) return false; ; this.flush_pending(); // takes fast path and just resets state return true; }; RenderCell_.prototype.insert = function (inst) { if (this.pending_removal.contains(inst)) { this.pending_removal.remove(inst); if (this.pending_removal.isEmpty()) this.any_pending_removal = false; return; } if (this.objects.length) { var top = this.objects[this.objects.length - 1]; if (top.get_zindex() > inst.get_zindex()) this.is_sorted = false; // 'inst' should be somewhere beneath 'top' this.objects.push(inst); } else { this.objects.push(inst); this.is_sorted = true; } ; }; RenderCell_.prototype.remove = function (inst) { this.pending_removal.add(inst); this.any_pending_removal = true; if (this.pending_removal.count() >= 30) this.flush_pending(); }; RenderCell_.prototype.flush_pending = function () { ; if (!this.any_pending_removal) return; // not changed if (this.pending_removal.count() === this.objects.length) { this.reset(); return; } cr.arrayRemoveAllFromObjectSet(this.objects, this.pending_removal); this.pending_removal.clear(); this.any_pending_removal = false; }; function sortByInstanceZIndex(a, b) { return a.zindex - b.zindex; }; RenderCell_.prototype.ensure_sorted = function () { if (this.is_sorted) return; // already sorted this.objects.sort(sortByInstanceZIndex); this.is_sorted = true; }; RenderCell_.prototype.reset = function () { cr.clearArray(this.objects); this.is_sorted = true; this.pending_removal.clear(); this.any_pending_removal = false; }; RenderCell_.prototype.dump = function (result) { this.flush_pending(); this.ensure_sorted(); if (this.objects.length) result.push(this.objects); }; cr.RenderCell = RenderCell_; var fxNames = [ "lighter", "xor", "copy", "destination-over", "source-in", "destination-in", "source-out", "destination-out", "source-atop", "destination-atop"]; cr.effectToCompositeOp = function(effect) { if (effect <= 0 || effect >= 11) return "source-over"; return fxNames[effect - 1]; // not including "none" so offset by 1 }; cr.setGLBlend = function(this_, effect, gl) { if (!gl) return; this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; switch (effect) { case 1: // lighter (additive) this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE; break; case 2: // xor break; // todo case 3: // copy this_.srcBlend = gl.ONE; this_.destBlend = gl.ZERO; break; case 4: // destination-over this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ONE; break; case 5: // source-in this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ZERO; break; case 6: // destination-in this_.srcBlend = gl.ZERO; this_.destBlend = gl.SRC_ALPHA; break; case 7: // source-out this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ZERO; break; case 8: // destination-out this_.srcBlend = gl.ZERO; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 9: // source-atop this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 10: // destination-atop this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.SRC_ALPHA; break; } }; cr.round6dp = function (x) { return Math.round(x * 1000000) / 1000000; }; /* var localeCompare_options = { "usage": "search", "sensitivity": "accent" }; var has_localeCompare = !!"a".localeCompare; var localeCompare_works1 = (has_localeCompare && "a".localeCompare("A", undefined, localeCompare_options) === 0); var localeCompare_works2 = (has_localeCompare && "a".localeCompare("á", undefined, localeCompare_options) !== 0); var supports_localeCompare = (has_localeCompare && localeCompare_works1 && localeCompare_works2); */ cr.equals_nocase = function (a, b) { if (typeof a !== "string" || typeof b !== "string") return false; if (a.length !== b.length) return false; if (a === b) return true; /* if (supports_localeCompare) { return (a.localeCompare(b, undefined, localeCompare_options) === 0); } else { */ return a.toLowerCase() === b.toLowerCase(); }; cr.isCanvasInputEvent = function (e) { var target = e.target; if (!target) return true; if (target === document || target === window) return true; if (document && document.body && target === document.body) return true; if (cr.equals_nocase(target.tagName, "canvas")) return true; return false; }; }()); var MatrixArray=typeof Float32Array!=="undefined"?Float32Array:Array,glMatrixArrayType=MatrixArray,vec3={},mat3={},mat4={},quat4={};vec3.create=function(a){var b=new MatrixArray(3);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2]);return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a===c)return a[0]+=b[0],a[1]+=b[1],a[2]+=b[2],a;c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c}; vec3.subtract=function(a,b,c){if(!c||a===c)return a[0]-=b[0],a[1]-=b[1],a[2]-=b[2],a;c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a===c)return a[0]*=b,a[1]*=b,a[2]*=b,a;c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c}; vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g===1)return b[0]=c,b[1]=d,b[2]=e,b}else return b[0]=0,b[1]=0,b[2]=0,b;g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1],a=a[2],g=b[0],f=b[1],b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1],a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}; vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1],a=a[2]-b[2],b=Math.sqrt(d*d+e*e+a*a);if(!b)return c[0]=0,c[1]=0,c[2]=0,c;b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"}; mat3.create=function(a){var b=new MatrixArray(9);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8]);return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a}; mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[15]=1;b[14]=0;b[13]=0;b[12]=0;b[11]=0;b[10]=a[8];b[9]=a[7];b[8]=a[6];b[7]=0;b[6]=a[5];b[5]=a[4];b[4]=a[3];b[3]=0;b[2]=a[2];b[1]=a[1];b[0]=a[0];return b}; mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};mat4.create=function(a){var b=new MatrixArray(16);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]);return b}; mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a}; mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b}; mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],n=a[11],o=a[12],m=a[13],p=a[14],a=a[15];return o*k*h*e-j*m*h*e-o*f*l*e+g*m*l*e+j*f*p*e-g*k*p*e-o*k*d*i+j*m*d*i+o*c*l*i-b*m*l*i-j*c*p*i+b*k*p*i+o*f*d*n-g*m*d*n-o*c*h*n+b*m*h*n+g*c*p*n-b*f*p*n-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a}; mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],n=a[10],o=a[11],m=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*m,y=k*r-n*m,z=k*s-o*m,C=l*r-n*p,D=l*s-o*p,E=n*s-o*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+n*v-o*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-m*w+r*t-s*B)*q;b[7]=(k*w-n*t+o*B)*q;b[8]=(f*D-h*z+j*x)*q; b[9]=(-c*D+d*z-g*x)*q;b[10]=(m*v-p*t+s*A)*q;b[11]=(-k*v+l*t-o*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-m*u+p*B-r*A)*q;b[15]=(k*u-l*B+n*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,n=-k*g+h*i,o=j*g-f*i,m=c*l+d*n+e*o;if(!m)return null;m=1/m;b||(b=mat3.create());b[0]=l*m;b[1]=(-k*d+e*j)*m;b[2]=(h*d-e*f)*m;b[3]=n*m;b[4]=(k*c-e*i)*m;b[5]=(-h*c+e*g)*m;b[6]=o*m;b[7]=(-j*c+d*i)*m;b[8]=(f*c-d*g)*m;return b}; mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],n=a[9],o=a[10],m=a[11],p=a[12],r=a[13],s=a[14],a=a[15],A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14],b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*n+u*r;c[2]=A*g+B*j+t*o+u*s;c[3]=A*f+B*k+t*m+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*n+y*r;c[6]=v*g+w*j+x*o+y*s;c[7]=v*f+w*k+x*m+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*n+E*r;c[10]=z*g+C* j+D*o+E*s;c[11]=z*f+C*k+D*m+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*n+b*r;c[14]=q*g+F*j+G*o+b*s;c[15]=q*f+F*k+G*m+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c}; mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c}; mat4.translate=function(a,b,c){var d=b[0],e=b[1],b=b[2],g,f,h,i,j,k,l,n,o,m,p,r;if(!c||a===c)return a[12]=a[0]*d+a[4]*e+a[8]*b+a[12],a[13]=a[1]*d+a[5]*e+a[9]*b+a[13],a[14]=a[2]*d+a[6]*e+a[10]*b+a[14],a[15]=a[3]*d+a[7]*e+a[11]*b+a[15],a;g=a[0];f=a[1];h=a[2];i=a[3];j=a[4];k=a[5];l=a[6];n=a[7];o=a[8];m=a[9];p=a[10];r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=n;c[8]=o;c[9]=m;c[10]=p;c[11]=r;c[12]=g*d+j*e+o*b+a[12];c[13]=f*d+k*e+m*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+n*e+r*b+a[15]; return c};mat4.scale=function(a,b,c){var d=b[0],e=b[1],b=b[2];if(!c||a===c)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=b,a[9]*=b,a[10]*=b,a[11]*=b,a;c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c}; mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1],c=c[2],f=Math.sqrt(e*e+g*g+c*c),h,i,j,k,l,n,o,m,p,r,s,A,B,t,u,v,w,x,y,z;if(!f)return null;f!==1&&(f=1/f,e*=f,g*=f,c*=f);h=Math.sin(b);i=Math.cos(b);j=1-i;b=a[0];f=a[1];k=a[2];l=a[3];n=a[4];o=a[5];m=a[6];p=a[7];r=a[8];s=a[9];A=a[10];B=a[11];t=e*e*j+i;u=g*e*j+c*h;v=c*e*j-g*h;w=e*g*j-c*h;x=g*g*j+i;y=c*g*j+e*h;z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;d?a!==d&&(d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]):d=a;d[0]=b*t+n*u+r*v;d[1]=f*t+o*u+s*v;d[2]=k*t+m*u+A* v;d[3]=l*t+p*u+B*v;d[4]=b*w+n*x+r*y;d[5]=f*w+o*x+s*y;d[6]=k*w+m*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+n*e+r*g;d[9]=f*z+o*e+s*g;d[10]=k*z+m*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c}; mat4.rotateY=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[4]=a[4],c[5]=a[5],c[6]=a[6],c[7]=a[7],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c}; mat4.rotateZ=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];c?a!==c&&(c[8]=a[8],c[9]=a[9],c[10]=a[10],c[11]=a[11],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c}; mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b*=a;return mat4.frustum(-b,b,-a,a,c,d,e)}; mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f}; mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e,g,f,h,i,j,k,l,n=a[0],o=a[1],a=a[2];g=c[0];f=c[1];e=c[2];c=b[1];j=b[2];if(n===b[0]&&o===c&&a===j)return mat4.identity(d);c=n-b[0];j=o-b[1];k=a-b[2];l=1/Math.sqrt(c*c+j*j+k*k);c*=l;j*=l;k*=l;b=f*k-e*j;e=e*c-g*k;g=g*j-f*c;(l=Math.sqrt(b*b+e*e+g*g))?(l=1/l,b*=l,e*=l,g*=l):g=e=b=0;f=j*g-k*e;h=k*b-c*g;i=c*e-j*b;(l=Math.sqrt(f*f+h*h+i*i))?(l=1/l,f*=l,h*=l,i*=l):i=h=f=0;d[0]=b;d[1]=f;d[2]=c;d[3]=0;d[4]=e;d[5]=h;d[6]=j;d[7]=0;d[8]=g;d[9]=i;d[10]=k;d[11]= 0;d[12]=-(b*n+e*o+g*a);d[13]=-(f*n+h*o+i*a);d[14]=-(c*n+j*o+k*a);d[15]=1;return d};mat4.fromRotationTranslation=function(a,b,c){c||(c=mat4.create());var d=a[0],e=a[1],g=a[2],f=a[3],h=d+d,i=e+e,j=g+g,a=d*h,k=d*i;d*=j;var l=e*i;e*=j;g*=j;h*=f;i*=f;f*=j;c[0]=1-(l+g);c[1]=k+f;c[2]=d-i;c[3]=0;c[4]=k-f;c[5]=1-(a+g);c[6]=e+h;c[7]=0;c[8]=d+i;c[9]=e-h;c[10]=1-(a+l);c[11]=0;c[12]=b[0];c[13]=b[1];c[14]=b[2];c[15]=1;return c}; mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4.create=function(a){var b=new MatrixArray(4);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]);return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b}; quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a===b)return a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e)),a;b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a===b)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2],a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)}; quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f===0)return b[0]=0,b[1]=0,b[2]=0,b[3]=0,b;f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],a=a[3],f=b[0],h=b[1],i=b[2],b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c}; quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=a[0],f=a[1],h=a[2],a=a[3],i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d,d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=k-g;b[4]=1-(j+e);b[5]=d+f;b[6]=c+h;b[7]=d-f;b[8]=1-(j+l);return b}; quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=0;b[4]=k-g;b[5]=1-(j+e);b[6]=d+f;b[7]=0;b[8]=c+h;b[9]=d-f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; quat4.slerp=function(a,b,c,d){d||(d=a);var e=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],g,f;if(Math.abs(e)>=1)return d!==a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]),d;g=Math.acos(e);f=Math.sqrt(1-e*e);if(Math.abs(f)<0.001)return d[0]=a[0]*0.5+b[0]*0.5,d[1]=a[1]*0.5+b[1]*0.5,d[2]=a[2]*0.5+b[2]*0.5,d[3]=a[3]*0.5+b[3]*0.5,d;e=Math.sin((1-c)*g)/f;c=Math.sin(c*g)/f;d[0]=a[0]*e+b[0]*c;d[1]=a[1]*e+b[1]*c;d[2]=a[2]*e+b[2]*c;d[3]=a[3]*e+b[3]*c;return d}; quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}; (function() { var MAX_VERTICES = 8000; // equates to 2500 objects being drawn var MAX_INDICES = (MAX_VERTICES / 2) * 3; // 6 indices for every 4 vertices var MAX_POINTS = 8000; var MULTI_BUFFERS = 4; // cycle 4 buffers to try and avoid blocking var BATCH_NULL = 0; var BATCH_QUAD = 1; var BATCH_SETTEXTURE = 2; var BATCH_SETOPACITY = 3; var BATCH_SETBLEND = 4; var BATCH_UPDATEMODELVIEW = 5; var BATCH_RENDERTOTEXTURE = 6; var BATCH_CLEAR = 7; var BATCH_POINTS = 8; var BATCH_SETPROGRAM = 9; var BATCH_SETPROGRAMPARAMETERS = 10; var BATCH_SETTEXTURE1 = 11; var BATCH_SETCOLOR = 12; var BATCH_SETDEPTHTEST = 13; var BATCH_SETEARLYZMODE = 14; /* var lose_ext = null; window.lose_context = function () { if (!lose_ext) { console.log("WEBGL_lose_context not supported"); return; } lose_ext.loseContext(); }; window.restore_context = function () { if (!lose_ext) { console.log("WEBGL_lose_context not supported"); return; } lose_ext.restoreContext(); }; */ var tempMat4 = mat4.create(); function GLWrap_(gl, isMobile, enableFrontToBack) { this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent); this.width = 0; // not yet known, wait for call to setSize() this.height = 0; this.enableFrontToBack = !!enableFrontToBack; this.isEarlyZPass = false; this.isBatchInEarlyZPass = false; this.currentZ = 0; this.zNear = 1; this.zFar = 1000; this.zIncrement = ((this.zFar - this.zNear) / 32768); this.zA = this.zFar / (this.zFar - this.zNear); this.zB = this.zFar * this.zNear / (this.zNear - this.zFar); this.kzA = 65536 * this.zA; this.kzB = 65536 * this.zB; this.cam = vec3.create([0, 0, 100]); // camera position this.look = vec3.create([0, 0, 0]); // lookat position this.up = vec3.create([0, 1, 0]); // up vector this.worldScale = vec3.create([1, 1, 1]); // world scaling factor this.enable_mipmaps = true; this.matP = mat4.create(); // perspective matrix this.matMV = mat4.create(); // model view matrix this.lastMV = mat4.create(); this.currentMV = mat4.create(); this.gl = gl; this.initState(); }; GLWrap_.prototype.initState = function () { var gl = this.gl; var i, len; this.lastOpacity = 1; this.lastTexture0 = null; // last bound to TEXTURE0 this.lastTexture1 = null; // last bound to TEXTURE1 this.currentOpacity = 1; gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.disable(gl.CULL_FACE); gl.disable(gl.STENCIL_TEST); gl.disable(gl.DITHER); if (this.enableFrontToBack) { gl.enable(gl.DEPTH_TEST); gl.depthFunc(gl.LEQUAL); } else { gl.disable(gl.DEPTH_TEST); } this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); this.lastSrcBlend = gl.ONE; this.lastDestBlend = gl.ONE_MINUS_SRC_ALPHA; this.vertexData = new Float32Array(MAX_VERTICES * (this.enableFrontToBack ? 3 : 2)); this.texcoordData = new Float32Array(MAX_VERTICES * 2); this.pointData = new Float32Array(MAX_POINTS * 4); this.pointBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferData(gl.ARRAY_BUFFER, this.pointData.byteLength, gl.DYNAMIC_DRAW); this.vertexBuffers = new Array(MULTI_BUFFERS); this.texcoordBuffers = new Array(MULTI_BUFFERS); for (i = 0; i < MULTI_BUFFERS; i++) { this.vertexBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[i]); gl.bufferData(gl.ARRAY_BUFFER, this.vertexData.byteLength, gl.DYNAMIC_DRAW); this.texcoordBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[i]); gl.bufferData(gl.ARRAY_BUFFER, this.texcoordData.byteLength, gl.DYNAMIC_DRAW); } this.curBuffer = 0; this.indexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); var indexData = new Uint16Array(MAX_INDICES); i = 0, len = MAX_INDICES; var fv = 0; while (i < len) { indexData[i++] = fv; // top left indexData[i++] = fv + 1; // top right indexData[i++] = fv + 2; // bottom right (first tri) indexData[i++] = fv; // top left indexData[i++] = fv + 2; // bottom right indexData[i++] = fv + 3; // bottom left fv += 4; } gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW); this.vertexPtr = 0; this.texPtr = 0; this.pointPtr = 0; var fsSource, vsSource; this.shaderPrograms = []; fsSource = [ "varying mediump vec2 vTex;", "uniform lowp float opacity;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, vTex);", " gl_FragColor *= opacity;", "}" ].join("\n"); if (this.enableFrontToBack) { vsSource = [ "attribute highp vec3 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, aPos.z, 1.0);", " vTex = aTex;", "}" ].join("\n"); } else { vsSource = [ "attribute highp vec2 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " vTex = aTex;", "}" ].join("\n"); } var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<default>"); ; this.shaderPrograms.push(shaderProg); // Default shader is always shader 0 fsSource = [ "uniform mediump sampler2D samplerFront;", "varying lowp float opacity;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, gl_PointCoord);", " gl_FragColor *= opacity;", "}" ].join("\n"); var pointVsSource = [ "attribute vec4 aPos;", "varying float opacity;", "uniform mat4 matP;", "uniform mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " gl_PointSize = aPos.z;", " opacity = aPos.w;", "}" ].join("\n"); shaderProg = this.createShaderProgram({src: fsSource}, pointVsSource, "<point>"); ; this.shaderPrograms.push(shaderProg); // Point shader is always shader 1 fsSource = [ "varying mediump vec2 vTex;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " if (texture2D(samplerFront, vTex).a < 1.0)", " discard;", // discarding non-opaque fragments "}" ].join("\n"); var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<earlyz>"); ; this.shaderPrograms.push(shaderProg); // Early-Z shader is always shader 2 fsSource = [ "uniform lowp vec4 colorFill;", "void main(void) {", " gl_FragColor = colorFill;", "}" ].join("\n"); var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<fill>"); ; this.shaderPrograms.push(shaderProg); // Fill-color shader is always shader 3 for (var shader_name in cr.shaders) { if (cr.shaders.hasOwnProperty(shader_name)) this.shaderPrograms.push(this.createShaderProgram(cr.shaders[shader_name], vsSource, shader_name)); } gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, null); this.batch = []; this.batchPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.lastProgram = -1; // start -1 so first switchProgram can do work this.currentProgram = -1; // current program during batch execution this.currentShader = null; this.fbo = gl.createFramebuffer(); this.renderToTex = null; this.depthBuffer = null; this.attachedDepthBuffer = false; // wait until first size call to attach, otherwise it has no storage if (this.enableFrontToBack) { this.depthBuffer = gl.createRenderbuffer(); } this.tmpVec3 = vec3.create([0, 0, 0]); ; var pointsizes = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); this.minPointSize = pointsizes[0]; this.maxPointSize = pointsizes[1]; if (this.maxPointSize > 2048) this.maxPointSize = 2048; ; this.switchProgram(0); cr.seal(this); }; function GLShaderProgram(gl, shaderProgram, name) { this.gl = gl; this.shaderProgram = shaderProgram; this.name = name; this.locAPos = gl.getAttribLocation(shaderProgram, "aPos"); this.locATex = gl.getAttribLocation(shaderProgram, "aTex"); this.locMatP = gl.getUniformLocation(shaderProgram, "matP"); this.locMatMV = gl.getUniformLocation(shaderProgram, "matMV"); this.locOpacity = gl.getUniformLocation(shaderProgram, "opacity"); this.locColorFill = gl.getUniformLocation(shaderProgram, "colorFill"); this.locSamplerFront = gl.getUniformLocation(shaderProgram, "samplerFront"); this.locSamplerBack = gl.getUniformLocation(shaderProgram, "samplerBack"); this.locDestStart = gl.getUniformLocation(shaderProgram, "destStart"); this.locDestEnd = gl.getUniformLocation(shaderProgram, "destEnd"); this.locSeconds = gl.getUniformLocation(shaderProgram, "seconds"); this.locPixelWidth = gl.getUniformLocation(shaderProgram, "pixelWidth"); this.locPixelHeight = gl.getUniformLocation(shaderProgram, "pixelHeight"); this.locLayerScale = gl.getUniformLocation(shaderProgram, "layerScale"); this.locLayerAngle = gl.getUniformLocation(shaderProgram, "layerAngle"); this.locViewOrigin = gl.getUniformLocation(shaderProgram, "viewOrigin"); this.locScrollPos = gl.getUniformLocation(shaderProgram, "scrollPos"); this.hasAnyOptionalUniforms = !!(this.locPixelWidth || this.locPixelHeight || this.locSeconds || this.locSamplerBack || this.locDestStart || this.locDestEnd || this.locLayerScale || this.locLayerAngle || this.locViewOrigin || this.locScrollPos); this.lpPixelWidth = -999; // set to something unlikely so never counts as cached on first set this.lpPixelHeight = -999; this.lpOpacity = 1; this.lpDestStartX = 0.0; this.lpDestStartY = 0.0; this.lpDestEndX = 1.0; this.lpDestEndY = 1.0; this.lpLayerScale = 1.0; this.lpLayerAngle = 0.0; this.lpViewOriginX = 0.0; this.lpViewOriginY = 0.0; this.lpScrollPosX = 0.0; this.lpScrollPosY = 0.0; this.lpSeconds = 0.0; this.lastCustomParams = []; this.lpMatMV = mat4.create(); if (this.locOpacity) gl.uniform1f(this.locOpacity, 1); if (this.locColorFill) gl.uniform4f(this.locColorFill, 1.0, 1.0, 1.0, 1.0); if (this.locSamplerFront) gl.uniform1i(this.locSamplerFront, 0); if (this.locSamplerBack) gl.uniform1i(this.locSamplerBack, 1); if (this.locDestStart) gl.uniform2f(this.locDestStart, 0.0, 0.0); if (this.locDestEnd) gl.uniform2f(this.locDestEnd, 1.0, 1.0); if (this.locLayerScale) gl.uniform1f(this.locLayerScale, 1.0); if (this.locLayerAngle) gl.uniform1f(this.locLayerAngle, 0.0); if (this.locViewOrigin) gl.uniform2f(this.locViewOrigin, 0.0, 0.0); if (this.locScrollPos) gl.uniform2f(this.locScrollPos, 0.0, 0.0); if (this.locSeconds) gl.uniform1f(this.locSeconds, 0.0); this.hasCurrentMatMV = false; // matMV needs updating }; function areMat4sEqual(a, b) { return a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&& a[4]===b[4]&&a[5]===b[5]&&a[6]===b[6]&&a[7]===b[7]&& a[8]===b[8]&&a[9]===b[9]&&a[10]===b[10]&&a[11]===b[11]&& a[12]===b[12]&&a[13]===b[13]&&a[14]===b[14]&&a[15]===b[15]; }; GLShaderProgram.prototype.updateMatMV = function (mv) { if (areMat4sEqual(this.lpMatMV, mv)) return; // no change, save the expensive GL call mat4.set(mv, this.lpMatMV); this.gl.uniformMatrix4fv(this.locMatMV, false, mv); }; GLWrap_.prototype.createShaderProgram = function(shaderEntry, vsSource, name) { var gl = this.gl; var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, shaderEntry.src); gl.compileShader(fragmentShader); if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { ; gl.deleteShader(fragmentShader); return null; } var vertexShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader, vsSource); gl.compileShader(vertexShader); if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); return null; } var shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, fragmentShader); gl.attachShader(shaderProgram, vertexShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); gl.deleteProgram(shaderProgram); return null; } gl.useProgram(shaderProgram); gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); var ret = new GLShaderProgram(gl, shaderProgram, name); ret.extendBoxHorizontal = shaderEntry.extendBoxHorizontal || 0; ret.extendBoxVertical = shaderEntry.extendBoxVertical || 0; ret.crossSampling = !!shaderEntry.crossSampling; ret.preservesOpaqueness = !!shaderEntry.preservesOpaqueness; ret.animated = !!shaderEntry.animated; ret.parameters = shaderEntry.parameters || []; var i, len; for (i = 0, len = ret.parameters.length; i < len; i++) { ret.parameters[i][1] = gl.getUniformLocation(shaderProgram, ret.parameters[i][0]); ret.lastCustomParams.push(0); gl.uniform1f(ret.parameters[i][1], 0); } cr.seal(ret); return ret; }; GLWrap_.prototype.getShaderIndex = function(name_) { var i, len; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { if (this.shaderPrograms[i].name === name_) return i; } return -1; }; GLWrap_.prototype.project = function (x, y, out) { var mv = this.matMV; var proj = this.matP; var fTempo = [0, 0, 0, 0, 0, 0, 0, 0]; fTempo[0] = mv[0]*x+mv[4]*y+mv[12]; fTempo[1] = mv[1]*x+mv[5]*y+mv[13]; fTempo[2] = mv[2]*x+mv[6]*y+mv[14]; fTempo[3] = mv[3]*x+mv[7]*y+mv[15]; fTempo[4] = proj[0]*fTempo[0]+proj[4]*fTempo[1]+proj[8]*fTempo[2]+proj[12]*fTempo[3]; fTempo[5] = proj[1]*fTempo[0]+proj[5]*fTempo[1]+proj[9]*fTempo[2]+proj[13]*fTempo[3]; fTempo[6] = proj[2]*fTempo[0]+proj[6]*fTempo[1]+proj[10]*fTempo[2]+proj[14]*fTempo[3]; fTempo[7] = -fTempo[2]; if(fTempo[7]===0.0) //The w value return; fTempo[7]=1.0/fTempo[7]; fTempo[4]*=fTempo[7]; fTempo[5]*=fTempo[7]; fTempo[6]*=fTempo[7]; out[0]=(fTempo[4]*0.5+0.5)*this.width; out[1]=(fTempo[5]*0.5+0.5)*this.height; }; GLWrap_.prototype.setSize = function(w, h, force) { if (this.width === w && this.height === h && !force) return; this.endBatch(); var gl = this.gl; this.width = w; this.height = h; gl.viewport(0, 0, w, h); mat4.lookAt(this.cam, this.look, this.up, this.matMV); if (this.enableFrontToBack) { mat4.ortho(-w/2, w/2, h/2, -h/2, this.zNear, this.zFar, this.matP); this.worldScale[0] = 1; this.worldScale[1] = 1; } else { mat4.perspective(45, w / h, this.zNear, this.zFar, this.matP); var tl = [0, 0]; var br = [0, 0]; this.project(0, 0, tl); this.project(1, 1, br); this.worldScale[0] = 1 / (br[0] - tl[0]); this.worldScale[1] = -1 / (br[1] - tl[1]); } var i, len, s; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { s = this.shaderPrograms[i]; s.hasCurrentMatMV = false; if (s.locMatP) { gl.useProgram(s.shaderProgram); gl.uniformMatrix4fv(s.locMatP, false, this.matP); } } gl.useProgram(this.shaderPrograms[this.lastProgram].shaderProgram); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE0); this.lastTexture0 = null; this.lastTexture1 = null; if (this.depthBuffer) { gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo); gl.bindRenderbuffer(gl.RENDERBUFFER, this.depthBuffer); gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, this.width, this.height); if (!this.attachedDepthBuffer) { gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.depthBuffer); this.attachedDepthBuffer = true; } gl.bindRenderbuffer(gl.RENDERBUFFER, null); gl.bindFramebuffer(gl.FRAMEBUFFER, null); this.renderToTex = null; } }; GLWrap_.prototype.resetModelView = function () { mat4.lookAt(this.cam, this.look, this.up, this.matMV); mat4.scale(this.matMV, this.worldScale); }; GLWrap_.prototype.translate = function (x, y) { if (x === 0 && y === 0) return; this.tmpVec3[0] = x;// * this.worldScale[0]; this.tmpVec3[1] = y;// * this.worldScale[1]; this.tmpVec3[2] = 0; mat4.translate(this.matMV, this.tmpVec3); }; GLWrap_.prototype.scale = function (x, y) { if (x === 1 && y === 1) return; this.tmpVec3[0] = x; this.tmpVec3[1] = y; this.tmpVec3[2] = 1; mat4.scale(this.matMV, this.tmpVec3); }; GLWrap_.prototype.rotateZ = function (a) { if (a === 0) return; mat4.rotateZ(this.matMV, a); }; GLWrap_.prototype.updateModelView = function() { if (areMat4sEqual(this.lastMV, this.matMV)) return; var b = this.pushBatch(); b.type = BATCH_UPDATEMODELVIEW; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(this.matMV); mat4.set(this.matMV, this.lastMV); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; /* var debugBatch = false; jQuery(document).mousedown( function(info) { if (info.which === 2) debugBatch = true; } ); */ GLWrap_.prototype.setEarlyZIndex = function (i) { if (!this.enableFrontToBack) return; if (i > 32760) i = 32760; this.currentZ = this.cam[2] - this.zNear - i * this.zIncrement; }; function GLBatchJob(type_, glwrap_) { this.type = type_; this.glwrap = glwrap_; this.gl = glwrap_.gl; this.opacityParam = 0; // for setOpacity() this.startIndex = 0; // for quad() this.indexCount = 0; // " this.texParam = null; // for setTexture() this.mat4param = null; // for updateModelView() this.shaderParams = []; // for user parameters cr.seal(this); }; GLBatchJob.prototype.doSetEarlyZPass = function () { var gl = this.gl; var glwrap = this.glwrap; if (this.startIndex !== 0) // enable { gl.depthMask(true); // enable depth writes gl.colorMask(false, false, false, false); // disable color writes gl.disable(gl.BLEND); // no color writes so disable blend gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); gl.clear(gl.DEPTH_BUFFER_BIT); // auto-clear depth buffer gl.bindFramebuffer(gl.FRAMEBUFFER, null); glwrap.isBatchInEarlyZPass = true; } else { gl.depthMask(false); // disable depth writes, only test existing depth values gl.colorMask(true, true, true, true); // enable color writes gl.enable(gl.BLEND); // turn blending back on glwrap.isBatchInEarlyZPass = false; } }; GLBatchJob.prototype.doSetTexture = function () { this.gl.bindTexture(this.gl.TEXTURE_2D, this.texParam); }; GLBatchJob.prototype.doSetTexture1 = function () { var gl = this.gl; gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); gl.activeTexture(gl.TEXTURE0); }; GLBatchJob.prototype.doSetOpacity = function () { var o = this.opacityParam; var glwrap = this.glwrap; glwrap.currentOpacity = o; var curProg = glwrap.currentShader; if (curProg.locOpacity && curProg.lpOpacity !== o) { curProg.lpOpacity = o; this.gl.uniform1f(curProg.locOpacity, o); } }; GLBatchJob.prototype.doQuad = function () { this.gl.drawElements(this.gl.TRIANGLES, this.indexCount, this.gl.UNSIGNED_SHORT, this.startIndex); }; GLBatchJob.prototype.doSetBlend = function () { this.gl.blendFunc(this.startIndex, this.indexCount); }; GLBatchJob.prototype.doUpdateModelView = function () { var i, len, s, shaderPrograms = this.glwrap.shaderPrograms, currentProgram = this.glwrap.currentProgram; for (i = 0, len = shaderPrograms.length; i < len; i++) { s = shaderPrograms[i]; if (i === currentProgram && s.locMatMV) { s.updateMatMV(this.mat4param); s.hasCurrentMatMV = true; } else s.hasCurrentMatMV = false; } mat4.set(this.mat4param, this.glwrap.currentMV); }; GLBatchJob.prototype.doRenderToTexture = function () { var gl = this.gl; var glwrap = this.glwrap; if (this.texParam) { if (glwrap.lastTexture1 === this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); glwrap.lastTexture1 = null; gl.activeTexture(gl.TEXTURE0); } gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); if (!glwrap.isBatchInEarlyZPass) { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texParam, 0); } } else { if (!glwrap.enableFrontToBack) { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); } gl.bindFramebuffer(gl.FRAMEBUFFER, null); } }; GLBatchJob.prototype.doClear = function () { var gl = this.gl; var mode = this.startIndex; if (mode === 0) // clear whole surface { gl.clearColor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clear(gl.COLOR_BUFFER_BIT); } else if (mode === 1) // clear rectangle { gl.enable(gl.SCISSOR_TEST); gl.scissor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.disable(gl.SCISSOR_TEST); } else // clear depth { gl.clear(gl.DEPTH_BUFFER_BIT); } }; GLBatchJob.prototype.doSetDepthTestEnabled = function () { var gl = this.gl; var enable = this.startIndex; if (enable !== 0) { gl.enable(gl.DEPTH_TEST); } else { gl.disable(gl.DEPTH_TEST); } }; GLBatchJob.prototype.doPoints = function () { var gl = this.gl; var glwrap = this.glwrap; if (glwrap.enableFrontToBack) gl.disable(gl.DEPTH_TEST); var s = glwrap.shaderPrograms[1]; gl.useProgram(s.shaderProgram); if (!s.hasCurrentMatMV && s.locMatMV) { s.updateMatMV(glwrap.currentMV); s.hasCurrentMatMV = true; } gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.pointBuffer); gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.POINTS, this.startIndex / 4, this.indexCount); s = glwrap.currentShader; gl.useProgram(s.shaderProgram); if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, glwrap.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } if (glwrap.enableFrontToBack) gl.enable(gl.DEPTH_TEST); }; GLBatchJob.prototype.doSetProgram = function () { var gl = this.gl; var glwrap = this.glwrap; var s = glwrap.shaderPrograms[this.startIndex]; // recycled param to save memory glwrap.currentProgram = this.startIndex; // current batch program glwrap.currentShader = s; gl.useProgram(s.shaderProgram); // switch to if (!s.hasCurrentMatMV && s.locMatMV) { s.updateMatMV(glwrap.currentMV); s.hasCurrentMatMV = true; } if (s.locOpacity && s.lpOpacity !== glwrap.currentOpacity) { s.lpOpacity = glwrap.currentOpacity; gl.uniform1f(s.locOpacity, glwrap.currentOpacity); } if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, glwrap.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } } GLBatchJob.prototype.doSetColor = function () { var s = this.glwrap.currentShader; var mat4param = this.mat4param; this.gl.uniform4f(s.locColorFill, mat4param[0], mat4param[1], mat4param[2], mat4param[3]); }; GLBatchJob.prototype.doSetProgramParameters = function () { var i, len, s = this.glwrap.currentShader; var gl = this.gl; var mat4param = this.mat4param; if (s.locSamplerBack && this.glwrap.lastTexture1 !== this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); this.glwrap.lastTexture1 = this.texParam; gl.activeTexture(gl.TEXTURE0); } var v = mat4param[0]; var v2; if (s.locPixelWidth && v !== s.lpPixelWidth) { s.lpPixelWidth = v; gl.uniform1f(s.locPixelWidth, v); } v = mat4param[1]; if (s.locPixelHeight && v !== s.lpPixelHeight) { s.lpPixelHeight = v; gl.uniform1f(s.locPixelHeight, v); } v = mat4param[2]; v2 = mat4param[3]; if (s.locDestStart && (v !== s.lpDestStartX || v2 !== s.lpDestStartY)) { s.lpDestStartX = v; s.lpDestStartY = v2; gl.uniform2f(s.locDestStart, v, v2); } v = mat4param[4]; v2 = mat4param[5]; if (s.locDestEnd && (v !== s.lpDestEndX || v2 !== s.lpDestEndY)) { s.lpDestEndX = v; s.lpDestEndY = v; gl.uniform2f(s.locDestEnd, v, v2); } v = mat4param[6]; if (s.locLayerScale && v !== s.lpLayerScale) { s.lpLayerScale = v; gl.uniform1f(s.locLayerScale, v); } v = mat4param[7]; if (s.locLayerAngle && v !== s.lpLayerAngle) { s.lpLayerAngle = v; gl.uniform1f(s.locLayerAngle, v); } v = mat4param[8]; v2 = mat4param[9]; if (s.locViewOrigin && (v !== s.lpViewOriginX || v2 !== s.lpViewOriginY)) { s.lpViewOriginX = v; s.lpViewOriginY = v2; gl.uniform2f(s.locViewOrigin, v, v2); } v = mat4param[10]; v2 = mat4param[11]; if (s.locScrollPos && (v !== s.lpScrollPosX || v2 !== s.lpScrollPosY)) { s.lpScrollPosX = v; s.lpScrollPosY = v2; gl.uniform2f(s.locScrollPos, v, v2); } v = mat4param[12]; if (s.locSeconds && v !== s.lpSeconds) { s.lpSeconds = v; gl.uniform1f(s.locSeconds, v); } if (s.parameters.length) { for (i = 0, len = s.parameters.length; i < len; i++) { v = this.shaderParams[i]; if (v !== s.lastCustomParams[i]) { s.lastCustomParams[i] = v; gl.uniform1f(s.parameters[i][1], v); } } } }; GLWrap_.prototype.pushBatch = function () { if (this.batchPtr === this.batch.length) this.batch.push(new GLBatchJob(BATCH_NULL, this)); return this.batch[this.batchPtr++]; }; GLWrap_.prototype.endBatch = function () { if (this.batchPtr === 0) return; if (this.gl.isContextLost()) return; var gl = this.gl; if (this.pointPtr > 0) { gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.pointData.subarray(0, this.pointPtr)); if (s && s.locAPos >= 0 && s.name === "<point>") gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); } if (this.vertexPtr > 0) { var s = this.currentShader; gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[this.curBuffer]); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexData.subarray(0, this.vertexPtr)); if (s && s.locAPos >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locAPos, this.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[this.curBuffer]); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.texcoordData.subarray(0, this.texPtr)); if (s && s.locATex >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } var i, len, b; for (i = 0, len = this.batchPtr; i < len; i++) { b = this.batch[i]; switch (b.type) { case 1: b.doQuad(); break; case 2: b.doSetTexture(); break; case 3: b.doSetOpacity(); break; case 4: b.doSetBlend(); break; case 5: b.doUpdateModelView(); break; case 6: b.doRenderToTexture(); break; case 7: b.doClear(); break; case 8: b.doPoints(); break; case 9: b.doSetProgram(); break; case 10: b.doSetProgramParameters(); break; case 11: b.doSetTexture1(); break; case 12: b.doSetColor(); break; case 13: b.doSetDepthTestEnabled(); break; case 14: b.doSetEarlyZPass(); break; } } this.batchPtr = 0; this.vertexPtr = 0; this.texPtr = 0; this.pointPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.isBatchInEarlyZPass = false; this.curBuffer++; if (this.curBuffer >= MULTI_BUFFERS) this.curBuffer = 0; }; GLWrap_.prototype.setOpacity = function (op) { if (op === this.lastOpacity) return; if (this.isEarlyZPass) return; // ignore var b = this.pushBatch(); b.type = BATCH_SETOPACITY; b.opacityParam = op; this.lastOpacity = op; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTexture = function (tex) { if (tex === this.lastTexture0) return; ; var b = this.pushBatch(); b.type = BATCH_SETTEXTURE; b.texParam = tex; this.lastTexture0 = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setBlend = function (s, d) { if (s === this.lastSrcBlend && d === this.lastDestBlend) return; if (this.isEarlyZPass) return; // ignore var b = this.pushBatch(); b.type = BATCH_SETBLEND; b.startIndex = s; // recycle params to save memory b.indexCount = d; this.lastSrcBlend = s; this.lastDestBlend = d; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.isPremultipliedAlphaBlend = function () { return (this.lastSrcBlend === this.gl.ONE && this.lastDestBlend === this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setAlphaBlend = function () { this.setBlend(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setNoPremultiplyAlphaBlend = function () { this.setBlend(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA); }; var LAST_VERTEX = MAX_VERTICES * 2 - 8; GLWrap_.prototype.quad = function(tlx, tly, trx, try_, brx, bry, blx, bly) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = 0; td[t++] = 0; td[t++] = 1; td[t++] = 0; td[t++] = 1; td[t++] = 1; td[t++] = 0; td[t++] = 1; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.quadTex = function(tlx, tly, trx, try_, brx, bry, blx, bly, rcTex) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } var rc_left = rcTex.left; var rc_top = rcTex.top; var rc_right = rcTex.right; var rc_bottom = rcTex.bottom; if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = rc_left; td[t++] = rc_top; td[t++] = rc_right; td[t++] = rc_top; td[t++] = rc_right; td[t++] = rc_bottom; td[t++] = rc_left; td[t++] = rc_bottom; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.quadTexUV = function(tlx, tly, trx, try_, brx, bry, blx, bly, tlu, tlv, tru, trv, bru, brv, blu, blv) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = tlu; td[t++] = tlv; td[t++] = tru; td[t++] = trv; td[t++] = bru; td[t++] = brv; td[t++] = blu; td[t++] = blv; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.convexPoly = function(pts) { var pts_count = pts.length / 2; ; var tris = pts_count - 2; // 3 points = 1 tri, 4 points = 2 tris, 5 points = 3 tris etc. var last_tri = tris - 1; var p0x = pts[0]; var p0y = pts[1]; var i, i2, p1x, p1y, p2x, p2y, p3x, p3y; for (i = 0; i < tris; i += 2) // draw 2 triangles at a time { i2 = i * 2; p1x = pts[i2 + 2]; p1y = pts[i2 + 3]; p2x = pts[i2 + 4]; p2y = pts[i2 + 5]; if (i === last_tri) { this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p2x, p2y); } else { p3x = pts[i2 + 6]; p3y = pts[i2 + 7]; this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y); } } }; var LAST_POINT = MAX_POINTS - 4; GLWrap_.prototype.point = function(x_, y_, size_, opacity_) { if (this.pointPtr >= LAST_POINT) this.endBatch(); var p = this.pointPtr; // point cursor var pd = this.pointData; // point data array if (this.hasPointBatchTop) { this.batch[this.batchPtr - 1].indexCount++; } else { var b = this.pushBatch(); b.type = BATCH_POINTS; b.startIndex = p; b.indexCount = 1; this.hasPointBatchTop = true; this.hasQuadBatchTop = false; } pd[p++] = x_; pd[p++] = y_; pd[p++] = size_; pd[p++] = opacity_; this.pointPtr = p; }; GLWrap_.prototype.switchProgram = function (progIndex) { if (this.lastProgram === progIndex) return; // no change var shaderProg = this.shaderPrograms[progIndex]; if (!shaderProg) { if (this.lastProgram === 0) return; // already on default shader progIndex = 0; shaderProg = this.shaderPrograms[0]; } var b = this.pushBatch(); b.type = BATCH_SETPROGRAM; b.startIndex = progIndex; this.lastProgram = progIndex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.programUsesDest = function (progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd); }; GLWrap_.prototype.programUsesCrossSampling = function (progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd || s.crossSampling); }; GLWrap_.prototype.programPreservesOpaqueness = function (progIndex) { return this.shaderPrograms[progIndex].preservesOpaqueness; }; GLWrap_.prototype.programExtendsBox = function (progIndex) { var s = this.shaderPrograms[progIndex]; return s.extendBoxHorizontal !== 0 || s.extendBoxVertical !== 0; }; GLWrap_.prototype.getProgramBoxExtendHorizontal = function (progIndex) { return this.shaderPrograms[progIndex].extendBoxHorizontal; }; GLWrap_.prototype.getProgramBoxExtendVertical = function (progIndex) { return this.shaderPrograms[progIndex].extendBoxVertical; }; GLWrap_.prototype.getProgramParameterType = function (progIndex, paramIndex) { return this.shaderPrograms[progIndex].parameters[paramIndex][2]; }; GLWrap_.prototype.programIsAnimated = function (progIndex) { return this.shaderPrograms[progIndex].animated; }; GLWrap_.prototype.setProgramParameters = function (backTex, pixelWidth, pixelHeight, destStartX, destStartY, destEndX, destEndY, layerScale, layerAngle, viewOriginLeft, viewOriginTop, scrollPosX, scrollPosY, seconds, params) { var i, len; var s = this.shaderPrograms[this.lastProgram]; var b, mat4param, shaderParams; if (s.hasAnyOptionalUniforms || params.length) { b = this.pushBatch(); b.type = BATCH_SETPROGRAMPARAMETERS; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(); mat4param = b.mat4param; mat4param[0] = pixelWidth; mat4param[1] = pixelHeight; mat4param[2] = destStartX; mat4param[3] = destStartY; mat4param[4] = destEndX; mat4param[5] = destEndY; mat4param[6] = layerScale; mat4param[7] = layerAngle; mat4param[8] = viewOriginLeft; mat4param[9] = viewOriginTop; mat4param[10] = scrollPosX; mat4param[11] = scrollPosY; mat4param[12] = seconds; if (s.locSamplerBack) { ; b.texParam = backTex; } else b.texParam = null; if (params.length) { shaderParams = b.shaderParams; shaderParams.length = params.length; for (i = 0, len = params.length; i < len; i++) shaderParams[i] = params[i]; } this.hasQuadBatchTop = false; this.hasPointBatchTop = false; } }; GLWrap_.prototype.clear = function (r, g, b_, a) { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 0; // clear all mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r; b.mat4param[1] = g; b.mat4param[2] = b_; b.mat4param[3] = a; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearRect = function (x, y, w, h) { if (w < 0 || h < 0) return; // invalid clear area var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 1; // clear rect mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = x; b.mat4param[1] = y; b.mat4param[2] = w; b.mat4param[3] = h; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearDepth = function () { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 2; // clear depth mode this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setEarlyZPass = function (e) { if (!this.enableFrontToBack) return; // no depth buffer in use e = !!e; if (this.isEarlyZPass === e) return; // no change var b = this.pushBatch(); b.type = BATCH_SETEARLYZMODE; b.startIndex = (e ? 1 : 0); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.isEarlyZPass = e; this.renderToTex = null; if (this.isEarlyZPass) { this.switchProgram(2); // early Z program } else { this.switchProgram(0); // normal rendering } }; GLWrap_.prototype.setDepthTestEnabled = function (e) { if (!this.enableFrontToBack) return; // no depth buffer in use var b = this.pushBatch(); b.type = BATCH_SETDEPTHTEST; b.startIndex = (e ? 1 : 0); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.fullscreenQuad = function () { mat4.set(this.lastMV, tempMat4); this.resetModelView(); this.updateModelView(); var halfw = this.width / 2; var halfh = this.height / 2; this.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); mat4.set(tempMat4, this.matMV); this.updateModelView(); }; GLWrap_.prototype.setColorFillMode = function (r_, g_, b_, a_) { this.switchProgram(3); var b = this.pushBatch(); b.type = BATCH_SETCOLOR; if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r_; b.mat4param[1] = g_; b.mat4param[2] = b_; b.mat4param[3] = a_; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTextureFillMode = function () { ; this.switchProgram(0); }; GLWrap_.prototype.restoreEarlyZMode = function () { ; this.switchProgram(2); }; GLWrap_.prototype.present = function () { this.endBatch(); this.gl.flush(); /* if (debugBatch) { ; debugBatch = false; } */ }; function nextHighestPowerOfTwo(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } var all_textures = []; var textures_by_src = {}; GLWrap_.prototype.contextLost = function () { cr.clearArray(all_textures); textures_by_src = {}; }; var BF_RGBA8 = 0; var BF_RGB8 = 1; var BF_RGBA4 = 2; var BF_RGB5_A1 = 3; var BF_RGB565 = 4; GLWrap_.prototype.loadTexture = function (img, tiling, linearsampling, pixelformat, tiletype, nomip) { tiling = !!tiling; linearsampling = !!linearsampling; var tex_key = img.src + "," + tiling + "," + linearsampling + (tiling ? ("," + tiletype) : ""); var webGL_texture = null; if (typeof img.src !== "undefined" && textures_by_src.hasOwnProperty(tex_key)) { webGL_texture = textures_by_src[tex_key]; webGL_texture.c2refcount++; return webGL_texture; } this.endBatch(); ; var gl = this.gl; var isPOT = (cr.isPOT(img.width) && cr.isPOT(img.height)); webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); var internalformat = gl.RGBA; var format = gl.RGBA; var type = gl.UNSIGNED_BYTE; if (pixelformat && !this.isIE) { switch (pixelformat) { case BF_RGB8: internalformat = gl.RGB; format = gl.RGB; break; case BF_RGBA4: type = gl.UNSIGNED_SHORT_4_4_4_4; break; case BF_RGB5_A1: type = gl.UNSIGNED_SHORT_5_5_5_1; break; case BF_RGB565: internalformat = gl.RGB; format = gl.RGB; type = gl.UNSIGNED_SHORT_5_6_5; break; } } if (!isPOT && tiling) { var canvas = document.createElement("canvas"); canvas.width = cr.nextHighestPowerOfTwo(img.width); canvas.height = cr.nextHighestPowerOfTwo(img.height); var ctx = canvas.getContext("2d"); ctx["webkitImageSmoothingEnabled"] = linearsampling; ctx["mozImageSmoothingEnabled"] = linearsampling; ctx["msImageSmoothingEnabled"] = linearsampling; ctx["imageSmoothingEnabled"] = linearsampling; ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, canvas); } else gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, img); if (tiling) { if (tiletype === "repeat-x") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } else if (tiletype === "repeat-y") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } if (linearsampling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); if (isPOT && this.enable_mipmaps && !nomip) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); gl.generateMipmap(gl.TEXTURE_2D); } else gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = img.width; webGL_texture.c2height = img.height; webGL_texture.c2refcount = 1; webGL_texture.c2texkey = tex_key; all_textures.push(webGL_texture); textures_by_src[tex_key] = webGL_texture; return webGL_texture; }; GLWrap_.prototype.createEmptyTexture = function (w, h, linearsampling, _16bit, tiling) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; var webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, null); if (tiling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = w; webGL_texture.c2height = h; all_textures.push(webGL_texture); return webGL_texture; }; GLWrap_.prototype.videoToTexture = function (video_, texture_, _16bit) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; gl.bindTexture(gl.TEXTURE_2D, texture_); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); try { gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, video_); } catch (e) { if (console && console.error) console.error("Error updating WebGL texture: ", e); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; }; GLWrap_.prototype.deleteTexture = function (tex) { if (!tex) return; if (typeof tex.c2refcount !== "undefined" && tex.c2refcount > 1) { tex.c2refcount--; return; } this.endBatch(); if (tex === this.lastTexture0) { this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.lastTexture0 = null; } if (tex === this.lastTexture1) { this.gl.activeTexture(this.gl.TEXTURE1); this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.gl.activeTexture(this.gl.TEXTURE0); this.lastTexture1 = null; } cr.arrayFindRemove(all_textures, tex); if (typeof tex.c2texkey !== "undefined") delete textures_by_src[tex.c2texkey]; this.gl.deleteTexture(tex); }; GLWrap_.prototype.estimateVRAM = function () { var total = this.width * this.height * 4 * 2; var i, len, t; for (i = 0, len = all_textures.length; i < len; i++) { t = all_textures[i]; total += (t.c2width * t.c2height * 4); } return total; }; GLWrap_.prototype.textureCount = function () { return all_textures.length; }; GLWrap_.prototype.setRenderingToTexture = function (tex) { if (tex === this.renderToTex) return; ; var b = this.pushBatch(); b.type = BATCH_RENDERTOTEXTURE; b.texParam = tex; this.renderToTex = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; cr.GLWrap = GLWrap_; }()); ; (function() { function window_innerWidth() { if (typeof jQuery !== "undefined") return jQuery(window).width(); else return window.innerWidth; }; function window_innerHeight() { if (typeof jQuery !== "undefined") return jQuery(window).height(); else return window.innerHeight; }; var raf = window["requestAnimationFrame"] || window["mozRequestAnimationFrame"] || window["webkitRequestAnimationFrame"] || window["msRequestAnimationFrame"] || window["oRequestAnimationFrame"]; function Runtime(canvas) { if (!canvas || (!canvas.getContext && !canvas["dc"])) return; if (canvas["c2runtime"]) return; else canvas["c2runtime"] = this; var self = this; this.isCrosswalk = /crosswalk/i.test(navigator.userAgent) || /xwalk/i.test(navigator.userAgent) || !!(typeof window["c2isCrosswalk"] !== "undefined" && window["c2isCrosswalk"]); this.isCordova = this.isCrosswalk || (typeof window["device"] !== "undefined" && (typeof window["device"]["cordova"] !== "undefined" || typeof window["device"]["phonegap"] !== "undefined")) || (typeof window["c2iscordova"] !== "undefined" && window["c2iscordova"]); this.isPhoneGap = this.isCordova; this.isDirectCanvas = !!canvas["dc"]; this.isAppMobi = (typeof window["AppMobi"] !== "undefined" || this.isDirectCanvas); this.isCocoonJs = !!window["c2cocoonjs"]; this.isEjecta = !!window["c2ejecta"]; if (this.isCocoonJs) { CocoonJS["App"]["onSuspended"].addEventListener(function() { self["setSuspended"](true); }); CocoonJS["App"]["onActivated"].addEventListener(function () { self["setSuspended"](false); }); } if (this.isEjecta) { document.addEventListener("pagehide", function() { self["setSuspended"](true); }); document.addEventListener("pageshow", function() { self["setSuspended"](false); }); document.addEventListener("resize", function () { self["setSize"](window.innerWidth, window.innerHeight); }); } this.isDomFree = (this.isDirectCanvas || this.isCocoonJs || this.isEjecta); this.isMicrosoftEdge = /edge\//i.test(navigator.userAgent); this.isIE = (/msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent) || /iemobile/i.test(navigator.userAgent)) && !this.isMicrosoftEdge; this.isTizen = /tizen/i.test(navigator.userAgent); this.isAndroid = /android/i.test(navigator.userAgent) && !this.isTizen && !this.isIE && !this.isMicrosoftEdge; // IE mobile and Tizen masquerade as Android this.isiPhone = (/iphone/i.test(navigator.userAgent) || /ipod/i.test(navigator.userAgent)) && !this.isIE && !this.isMicrosoftEdge; // treat ipod as an iphone; IE mobile masquerades as iPhone this.isiPad = /ipad/i.test(navigator.userAgent); this.isiOS = this.isiPhone || this.isiPad || this.isEjecta; this.isiPhoneiOS6 = (this.isiPhone && /os\s6/i.test(navigator.userAgent)); this.isChrome = (/chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent)) && !this.isIE && !this.isMicrosoftEdge; // note true on Chromium-based webview on Android 4.4+; IE 'Edge' mode also pretends to be Chrome this.isAmazonWebApp = /amazonwebappplatform/i.test(navigator.userAgent); this.isFirefox = /firefox/i.test(navigator.userAgent); this.isSafari = /safari/i.test(navigator.userAgent) && !this.isChrome && !this.isIE && !this.isMicrosoftEdge; // Chrome and IE Mobile masquerade as Safari this.isWindows = /windows/i.test(navigator.userAgent); this.isNWjs = (typeof window["c2nodewebkit"] !== "undefined" || typeof window["c2nwjs"] !== "undefined" || /nodewebkit/i.test(navigator.userAgent) || /nwjs/i.test(navigator.userAgent)); this.isNodeWebkit = this.isNWjs; // old name for backwards compat this.isArcade = (typeof window["is_scirra_arcade"] !== "undefined"); this.isWindows8App = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.isWindows8Capable = !!(typeof window["c2isWindows8Capable"] !== "undefined" && window["c2isWindows8Capable"]); this.isWindowsPhone8 = !!(typeof window["c2isWindowsPhone8"] !== "undefined" && window["c2isWindowsPhone8"]); this.isWindowsPhone81 = !!(typeof window["c2isWindowsPhone81"] !== "undefined" && window["c2isWindowsPhone81"]); this.isWindows10 = !!window["cr_windows10"]; this.isWinJS = (this.isWindows8App || this.isWindows8Capable || this.isWindowsPhone81 || this.isWindows10); // note not WP8.0 this.isBlackberry10 = !!(typeof window["c2isBlackberry10"] !== "undefined" && window["c2isBlackberry10"]); this.isAndroidStockBrowser = (this.isAndroid && !this.isChrome && !this.isCrosswalk && !this.isFirefox && !this.isAmazonWebApp && !this.isDomFree); this.devicePixelRatio = 1; this.isMobile = (this.isCordova || this.isCrosswalk || this.isAppMobi || this.isCocoonJs || this.isAndroid || this.isiOS || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isBlackberry10 || this.isTizen || this.isEjecta); if (!this.isMobile) { this.isMobile = /(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent); } if (typeof cr_is_preview !== "undefined" && !this.isNWjs && (window.location.search === "?nw" || /nodewebkit/i.test(navigator.userAgent) || /nwjs/i.test(navigator.userAgent))) { this.isNWjs = true; } this.isDebug = (typeof cr_is_preview !== "undefined" && window.location.search.indexOf("debug") > -1); this.canvas = canvas; this.canvasdiv = document.getElementById("c2canvasdiv"); this.gl = null; this.glwrap = null; this.glUnmaskedRenderer = "(unavailable)"; this.enableFrontToBack = false; this.earlyz_index = 0; this.ctx = null; this.fullscreenOldMarginCss = ""; this.firstInFullscreen = false; this.oldWidth = 0; // for restoring non-fullscreen canvas after fullscreen this.oldHeight = 0; this.canvas.oncontextmenu = function (e) { if (e.preventDefault) e.preventDefault(); return false; }; this.canvas.onselectstart = function (e) { if (e.preventDefault) e.preventDefault(); return false; }; if (this.isDirectCanvas) window["c2runtime"] = this; if (this.isNWjs) { window["ondragover"] = function(e) { e.preventDefault(); return false; }; window["ondrop"] = function(e) { e.preventDefault(); return false; }; require("nw.gui")["App"]["clearCache"](); } if (this.isAndroidStockBrowser && typeof jQuery !== "undefined") { jQuery("canvas").parents("*").css("overflow", "visible"); } this.width = canvas.width; this.height = canvas.height; this.draw_width = this.width; this.draw_height = this.height; this.cssWidth = this.width; this.cssHeight = this.height; this.lastWindowWidth = window.innerWidth; this.lastWindowHeight = window.innerHeight; this.forceCanvasAlpha = false; // allow plugins to force the canvas to display with alpha channel this.redraw = true; this.isSuspended = false; if (!Date.now) { Date.now = function now() { return +new Date(); }; } this.plugins = []; this.types = {}; this.types_by_index = []; this.behaviors = []; this.layouts = {}; this.layouts_by_index = []; this.eventsheets = {}; this.eventsheets_by_index = []; this.wait_for_textures = []; // for blocking until textures loaded this.triggers_to_postinit = []; this.all_global_vars = []; this.all_local_vars = []; this.solidBehavior = null; this.jumpthruBehavior = null; this.shadowcasterBehavior = null; this.deathRow = {}; this.hasPendingInstances = false; // true if anything exists in create row or death row this.isInClearDeathRow = false; this.isInOnDestroy = 0; // needs to support recursion so increments and decrements and is true if > 0 this.isRunningEvents = false; this.isEndingLayout = false; this.createRow = []; this.isLoadingState = false; this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = ""; this.lastSaveJson = ""; this.signalledContinuousPreview = false; this.suspendDrawing = false; // for hiding display until continuous preview loads this.dt = 0; this.dt1 = 0; this.minimumFramerate = 30; this.logictime = 0; // used to calculate CPUUtilisation this.cpuutilisation = 0; this.timescale = 1.0; this.kahanTime = new cr.KahanAdder(); this.wallTime = new cr.KahanAdder(); this.last_tick_time = 0; this.fps = 0; this.last_fps_time = 0; this.tickcount = 0; this.execcount = 0; this.framecount = 0; // for fps this.objectcount = 0; this.changelayout = null; this.destroycallbacks = []; this.event_stack = []; this.event_stack_index = -1; this.localvar_stack = [[]]; this.localvar_stack_index = 0; this.trigger_depth = 0; // recursion depth for triggers this.pushEventStack(null); this.loop_stack = []; this.loop_stack_index = -1; this.next_uid = 0; this.next_puid = 0; // permanent unique ids this.layout_first_tick = true; this.family_count = 0; this.suspend_events = []; this.raf_id = -1; this.timeout_id = -1; this.isloading = true; this.loadingprogress = 0; this.isNodeFullscreen = false; this.stackLocalCount = 0; // number of stack-based local vars for recursion this.audioInstance = null; this.had_a_click = false; this.isInUserInputEvent = false; this.objects_to_pretick = new cr.ObjectSet(); this.objects_to_tick = new cr.ObjectSet(); this.objects_to_tick2 = new cr.ObjectSet(); this.registered_collisions = []; this.temp_poly = new cr.CollisionPoly([]); this.temp_poly2 = new cr.CollisionPoly([]); this.allGroups = []; // array of all event groups this.groups_by_name = {}; this.cndsBySid = {}; this.actsBySid = {}; this.varsBySid = {}; this.blocksBySid = {}; this.running_layout = null; // currently running layout this.layer_canvas = null; // for layers "render-to-texture" this.layer_ctx = null; this.layer_tex = null; this.layout_tex = null; this.layout_canvas = null; this.layout_ctx = null; this.is_WebGL_context_lost = false; this.uses_background_blending = false; // if any shader uses background blending, so entire layout renders to texture this.fx_tex = [null, null]; this.fullscreen_scaling = 0; this.files_subfolder = ""; // path with project files this.objectsByUid = {}; // maps every in-use UID (as a string) to its instance this.loaderlogos = null; this.snapshotCanvas = null; this.snapshotData = ""; this.objectRefTable = []; this.requestProjectData(); }; Runtime.prototype.requestProjectData = function () { var self = this; var xhr; if (this.isWindowsPhone8) xhr = new ActiveXObject("Microsoft.XMLHTTP"); else xhr = new XMLHttpRequest(); var datajs_filename = "data.js"; if (this.isWindows8App || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isWindows10) datajs_filename = "data.json"; xhr.open("GET", datajs_filename, true); var supportsJsonResponse = false; if (!this.isDomFree && ("response" in xhr) && ("responseType" in xhr)) { try { xhr["responseType"] = "json"; supportsJsonResponse = (xhr["responseType"] === "json"); } catch (e) { supportsJsonResponse = false; } } if (!supportsJsonResponse && ("responseType" in xhr)) { try { xhr["responseType"] = "text"; } catch (e) {} } if ("overrideMimeType" in xhr) { try { xhr["overrideMimeType"]("application/json; charset=utf-8"); } catch (e) {} } if (this.isWindowsPhone8) { xhr.onreadystatechange = function () { if (xhr.readyState !== 4) return; self.loadProject(JSON.parse(xhr["responseText"])); }; } else { xhr.onload = function () { if (supportsJsonResponse) { self.loadProject(xhr["response"]); // already parsed by browser } else { if (self.isEjecta) { var str = xhr["responseText"]; str = str.substr(str.indexOf("{")); // trim any BOM self.loadProject(JSON.parse(str)); } else { self.loadProject(JSON.parse(xhr["responseText"])); // forced to sync parse JSON } } }; xhr.onerror = function (e) { cr.logerror("Error requesting " + datajs_filename + ":"); cr.logerror(e); }; } xhr.send(); }; Runtime.prototype.initRendererAndLoader = function () { var self = this; var i, len, j, lenj, k, lenk, t, s, l, y; this.isRetina = ((!this.isDomFree || this.isEjecta || this.isCordova) && this.useHighDpi && !this.isAndroidStockBrowser); if (this.fullscreen_mode === 0 && this.isiOS) this.isRetina = false; this.devicePixelRatio = (this.isRetina ? (window["devicePixelRatio"] || window["webkitDevicePixelRatio"] || window["mozDevicePixelRatio"] || window["msDevicePixelRatio"] || 1) : 1); this.ClearDeathRow(); var attribs; var alpha_canvas = !!(this.forceCanvasAlpha || (this.alphaBackground && !(this.isNWjs || this.isWinJS || this.isWindowsPhone8 || this.isCrosswalk || this.isCordova || this.isAmazonWebApp))); if (this.fullscreen_mode > 0) this["setSize"](window_innerWidth(), window_innerHeight(), true); try { if (this.enableWebGL && (this.isCocoonJs || this.isEjecta || !this.isDomFree)) { attribs = { "alpha": alpha_canvas, "depth": false, "antialias": false, "failIfMajorPerformanceCaveat": true }; this.gl = (this.canvas.getContext("webgl", attribs) || this.canvas.getContext("experimental-webgl", attribs)); } } catch (e) { } if (this.gl) { var debug_ext = this.gl.getExtension("WEBGL_debug_renderer_info"); if (debug_ext) { var unmasked_vendor = this.gl.getParameter(debug_ext.UNMASKED_VENDOR_WEBGL); var unmasked_renderer = this.gl.getParameter(debug_ext.UNMASKED_RENDERER_WEBGL); this.glUnmaskedRenderer = unmasked_renderer + " [" + unmasked_vendor + "]"; } if (this.enableFrontToBack) this.glUnmaskedRenderer += " [front-to-back enabled]"; ; if (!this.isDomFree) { this.overlay_canvas = document.createElement("canvas"); jQuery(this.overlay_canvas).appendTo(this.canvas.parentNode); this.overlay_canvas.oncontextmenu = function (e) { return false; }; this.overlay_canvas.onselectstart = function (e) { return false; }; this.overlay_canvas.width = Math.round(this.cssWidth * this.devicePixelRatio); this.overlay_canvas.height = Math.round(this.cssHeight * this.devicePixelRatio); jQuery(this.overlay_canvas).css({"width": this.cssWidth + "px", "height": this.cssHeight + "px"}); this.positionOverlayCanvas(); this.overlay_ctx = this.overlay_canvas.getContext("2d"); } this.glwrap = new cr.GLWrap(this.gl, this.isMobile, this.enableFrontToBack); this.glwrap.setSize(this.canvas.width, this.canvas.height); this.glwrap.enable_mipmaps = (this.downscalingQuality !== 0); this.ctx = null; this.canvas.addEventListener("webglcontextlost", function (ev) { ev.preventDefault(); self.onContextLost(); cr.logexport("[Construct 2] WebGL context lost"); window["cr_setSuspended"](true); // stop rendering }, false); this.canvas.addEventListener("webglcontextrestored", function (ev) { self.glwrap.initState(); self.glwrap.setSize(self.glwrap.width, self.glwrap.height, true); self.layer_tex = null; self.layout_tex = null; self.fx_tex[0] = null; self.fx_tex[1] = null; self.onContextRestored(); self.redraw = true; cr.logexport("[Construct 2] WebGL context restored"); window["cr_setSuspended"](false); // resume rendering }, false); for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; for (j = 0, lenj = t.effect_types.length; j < lenj; j++) { s = t.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { l = this.layouts_by_index[i]; for (j = 0, lenj = l.effect_types.length; j < lenj; j++) { s = l.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); } l.updateActiveEffects(); // update preserves opaqueness flag for (j = 0, lenj = l.layers.length; j < lenj; j++) { y = l.layers[j]; for (k = 0, lenk = y.effect_types.length; k < lenk; k++) { s = y.effect_types[k]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } y.updateActiveEffects(); // update preserves opaqueness flag } } } else { if (this.fullscreen_mode > 0 && this.isDirectCanvas) { ; this.canvas = null; document.oncontextmenu = function (e) { return false; }; document.onselectstart = function (e) { return false; }; this.ctx = AppMobi["canvas"]["getContext"]("2d"); try { this.ctx["samplingMode"] = this.linearSampling ? "smooth" : "sharp"; this.ctx["globalScale"] = 1; this.ctx["HTML5CompatibilityMode"] = true; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } catch(e){} if (this.width !== 0 && this.height !== 0) { this.ctx.width = this.width; this.ctx.height = this.height; } } if (!this.ctx) { ; if (this.isCocoonJs) { attribs = { "antialias": !!this.linearSampling, "alpha": alpha_canvas }; this.ctx = this.canvas.getContext("2d", attribs); } else { attribs = { "alpha": alpha_canvas }; this.ctx = this.canvas.getContext("2d", attribs); } this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling; this.ctx["mozImageSmoothingEnabled"] = this.linearSampling; this.ctx["msImageSmoothingEnabled"] = this.linearSampling; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } this.overlay_canvas = null; this.overlay_ctx = null; } this.tickFunc = function (timestamp) { self.tick(false, timestamp); }; if (window != window.top && !this.isDomFree && !this.isWinJS && !this.isWindowsPhone8) { document.addEventListener("mousedown", function () { window.focus(); }, true); document.addEventListener("touchstart", function () { window.focus(); }, true); } if (typeof cr_is_preview !== "undefined") { if (this.isCocoonJs) console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"); if (window.location.search.indexOf("continuous") > -1) { cr.logexport("Reloading for continuous preview"); this.loadFromSlot = "__c2_continuouspreview"; this.suspendDrawing = true; } if (this.pauseOnBlur && !this.isMobile) { jQuery(window).focus(function () { self["setSuspended"](false); }); jQuery(window).blur(function () { self["setSuspended"](true); }); } } window.addEventListener("blur", function () { self.onWindowBlur(); }); if (!this.isDomFree) { var unfocusFormControlFunc = function (e) { if (cr.isCanvasInputEvent(e) && document["activeElement"] && document["activeElement"] !== document.getElementsByTagName("body")[0] && document["activeElement"].blur) { try { document["activeElement"].blur(); } catch (e) {} } } if (window.navigator["pointerEnabled"]) { document.addEventListener("pointerdown", unfocusFormControlFunc); } else if (window.navigator["msPointerEnabled"]) { document.addEventListener("MSPointerDown", unfocusFormControlFunc); } else { document.addEventListener("touchstart", unfocusFormControlFunc); } document.addEventListener("mousedown", unfocusFormControlFunc); } if (this.fullscreen_mode === 0 && this.isRetina && this.devicePixelRatio > 1) { this["setSize"](this.original_width, this.original_height, true); } this.tryLockOrientation(); this.getready(); // determine things to preload this.go(); // run loading screen this.extra = {}; cr.seal(this); }; var webkitRepaintFlag = false; Runtime.prototype["setSize"] = function (w, h, force) { var offx = 0, offy = 0; var neww = 0, newh = 0, intscale = 0; var tryHideAddressBar = (this.isiPhoneiOS6 && this.isSafari && !navigator["standalone"] && !this.isDomFree && !this.isCordova); if (tryHideAddressBar) h += 60; // height of Safari iPhone iOS 6 address bar if (this.lastWindowWidth === w && this.lastWindowHeight === h && !force) return; this.lastWindowWidth = w; this.lastWindowHeight = h; var mode = this.fullscreen_mode; var orig_aspect, cur_aspect; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen) && !this.isCordova; if (!isfullscreen && this.fullscreen_mode === 0 && !force) return; // ignore size events when not fullscreen and not using a fullscreen-in-browser mode if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; var dpr = this.devicePixelRatio; if (mode >= 4) { orig_aspect = this.original_width / this.original_height; cur_aspect = w / h; if (cur_aspect > orig_aspect) { neww = h * orig_aspect; if (mode === 5) // integer scaling { intscale = (neww * dpr) / this.original_width; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offx = (w - neww) / 2; w = neww; } } else { newh = w / orig_aspect; if (mode === 5) // integer scaling { intscale = (newh * dpr) / this.original_height; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offy = (h - newh) / 2; h = newh; } } if (isfullscreen && !this.isNWjs) { offx = 0; offy = 0; } } else if (this.isNWjs && this.isNodeFullscreen && this.fullscreen_mode_set === 0) { offx = Math.floor((w - this.original_width) / 2); offy = Math.floor((h - this.original_height) / 2); w = this.original_width; h = this.original_height; } if (mode < 2) this.aspect_scale = dpr; if (this.isRetina && this.isiPad && dpr > 1) // don't apply to iPad 1-2 { if (w >= 1024) w = 1023; // 2046 retina pixels if (h >= 1024) h = 1023; } this.cssWidth = Math.round(w); this.cssHeight = Math.round(h); this.width = Math.round(w * dpr); this.height = Math.round(h * dpr); this.redraw = true; if (this.wantFullscreenScalingQuality) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { if ((this.width < this.original_width && this.height < this.original_height) || mode === 1) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { this.draw_width = this.original_width; this.draw_height = this.original_height; this.fullscreenScalingQuality = false; /*var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width;*/ if (mode === 2) // scale inner { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect < orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect > orig_aspect) this.draw_height = this.draw_width / cur_aspect; } else if (mode === 3) { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect > orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect < orig_aspect) this.draw_height = this.draw_width / cur_aspect; } } } if (this.canvasdiv && !this.isDomFree) { jQuery(this.canvasdiv).css({"width": Math.round(w) + "px", "height": Math.round(h) + "px", "margin-left": Math.floor(offx) + "px", "margin-top": Math.floor(offy) + "px"}); if (typeof cr_is_preview !== "undefined") { jQuery("#borderwrap").css({"width": Math.round(w) + "px", "height": Math.round(h) + "px"}); } } if (this.canvas) { this.canvas.width = Math.round(w * dpr); this.canvas.height = Math.round(h * dpr); if (this.isEjecta) { this.canvas.style.left = Math.floor(offx) + "px"; this.canvas.style.top = Math.floor(offy) + "px"; this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } else if (this.isRetina && !this.isDomFree) { this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } } if (this.overlay_canvas) { this.overlay_canvas.width = Math.round(w * dpr); this.overlay_canvas.height = Math.round(h * dpr); this.overlay_canvas.style.width = this.cssWidth + "px"; this.overlay_canvas.style.height = this.cssHeight + "px"; } if (this.glwrap) { this.glwrap.setSize(Math.round(w * dpr), Math.round(h * dpr)); } if (this.isDirectCanvas && this.ctx) { this.ctx.width = Math.round(w); this.ctx.height = Math.round(h); } if (this.ctx) { this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling; this.ctx["mozImageSmoothingEnabled"] = this.linearSampling; this.ctx["msImageSmoothingEnabled"] = this.linearSampling; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } this.tryLockOrientation(); if (!this.isDomFree && (tryHideAddressBar || this.isiPhone)) { window.setTimeout(function () { window.scrollTo(0, 1); }, 100); } }; Runtime.prototype.tryLockOrientation = function () { if (!this.autoLockOrientation || this.orientations === 0) return; var orientation = "portrait"; if (this.orientations === 2) orientation = "landscape"; try { if (screen["orientation"] && screen["orientation"]["lock"]) screen["orientation"]["lock"](orientation); else if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); } catch (e) { if (console && console.warn) console.warn("Failed to lock orientation: ", e); } }; Runtime.prototype.onContextLost = function () { this.glwrap.contextLost(); this.is_WebGL_context_lost = true; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onLostWebGLContext) t.onLostWebGLContext(); } }; Runtime.prototype.onContextRestored = function () { this.is_WebGL_context_lost = false; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onRestoreWebGLContext) t.onRestoreWebGLContext(); } }; Runtime.prototype.positionOverlayCanvas = function() { if (this.isDomFree) return; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isCordova; var overlay_position = isfullscreen ? jQuery(this.canvas).offset() : jQuery(this.canvas).position(); overlay_position.position = "absolute"; jQuery(this.overlay_canvas).css(overlay_position); }; var caf = window["cancelAnimationFrame"] || window["mozCancelAnimationFrame"] || window["webkitCancelAnimationFrame"] || window["msCancelAnimationFrame"] || window["oCancelAnimationFrame"]; Runtime.prototype["setSuspended"] = function (s) { var i, len; if (s && !this.isSuspended) { cr.logexport("[Construct 2] Suspending"); this.isSuspended = true; // next tick will be last if (this.raf_id !== -1 && caf) // note: CocoonJS does not implement cancelAnimationFrame caf(this.raf_id); if (this.timeout_id !== -1) clearTimeout(this.timeout_id); for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](true); } else if (!s && this.isSuspended) { cr.logexport("[Construct 2] Resuming"); this.isSuspended = false; this.last_tick_time = cr.performance_now(); // ensure first tick is a zero-dt one this.last_fps_time = cr.performance_now(); // reset FPS counter this.framecount = 0; this.logictime = 0; for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](false); this.tick(false); // kick off runtime again } }; Runtime.prototype.addSuspendCallback = function (f) { this.suspend_events.push(f); }; Runtime.prototype.GetObjectReference = function (i) { ; return this.objectRefTable[i]; }; Runtime.prototype.loadProject = function (data_response) { ; if (!data_response || !data_response["project"]) cr.logerror("Project model unavailable"); var pm = data_response["project"]; this.name = pm[0]; this.first_layout = pm[1]; this.fullscreen_mode = pm[12]; // 0 = off, 1 = crop, 2 = scale inner, 3 = scale outer, 4 = letterbox scale, 5 = integer letterbox scale this.fullscreen_mode_set = pm[12]; this.original_width = pm[10]; this.original_height = pm[11]; this.parallax_x_origin = this.original_width / 2; this.parallax_y_origin = this.original_height / 2; if (this.isDomFree && !this.isEjecta && (pm[12] >= 4 || pm[12] === 0)) { cr.logexport("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"); this.fullscreen_mode = 3; this.fullscreen_mode_set = 3; } this.uses_loader_layout = pm[18]; this.loaderstyle = pm[19]; if (this.loaderstyle === 0) { var loaderImage = new Image(); loaderImage.crossOrigin = "anonymous"; loaderImage.src = "loading-logo.png"; this.loaderlogos = { logo: loaderImage }; } else if (this.loaderstyle === 4) // c2 splash { var loaderC2logo_1024 = new Image(); loaderC2logo_1024.src = ""; var loaderC2logo_512 = new Image(); loaderC2logo_512.src = ""; var loaderC2logo_256 = new Image(); loaderC2logo_256.src = ""; var loaderC2logo_128 = new Image(); loaderC2logo_128.src = ""; var loaderPowered_1024 = new Image(); loaderPowered_1024.src = ""; var loaderPowered_512 = new Image(); loaderPowered_512.src = ""; var loaderPowered_256 = new Image(); loaderPowered_256.src = ""; var loaderPowered_128 = new Image(); loaderPowered_128.src = ""; var loaderWebsite_1024 = new Image(); loaderWebsite_1024.src = ""; var loaderWebsite_512 = new Image(); loaderWebsite_512.src = ""; var loaderWebsite_256 = new Image(); loaderWebsite_256.src = ""; var loaderWebsite_128 = new Image(); loaderWebsite_128.src = ""; this.loaderlogos = { logo: [loaderC2logo_1024, loaderC2logo_512, loaderC2logo_256, loaderC2logo_128], powered: [loaderPowered_1024, loaderPowered_512, loaderPowered_256, loaderPowered_128], website: [loaderWebsite_1024, loaderWebsite_512, loaderWebsite_256, loaderWebsite_128] }; } this.next_uid = pm[21]; this.objectRefTable = cr.getObjectRefTable(); this.system = new cr.system_object(this); var i, len, j, lenj, k, lenk, idstr, m, b, t, f, p; var plugin, plugin_ctor; for (i = 0, len = pm[2].length; i < len; i++) { m = pm[2][i]; p = this.GetObjectReference(m[0]); ; cr.add_common_aces(m, p.prototype); plugin = new p(this); plugin.singleglobal = m[1]; plugin.is_world = m[2]; plugin.must_predraw = m[9]; if (plugin.onCreate) plugin.onCreate(); // opportunity to override default ACEs cr.seal(plugin); this.plugins.push(plugin); } this.objectRefTable = cr.getObjectRefTable(); for (i = 0, len = pm[3].length; i < len; i++) { m = pm[3][i]; plugin_ctor = this.GetObjectReference(m[1]); ; plugin = null; for (j = 0, lenj = this.plugins.length; j < lenj; j++) { if (this.plugins[j] instanceof plugin_ctor) { plugin = this.plugins[j]; break; } } ; ; var type_inst = new plugin.Type(plugin); ; type_inst.name = m[0]; type_inst.is_family = m[2]; type_inst.instvar_sids = m[3].slice(0); type_inst.vars_count = m[3].length; type_inst.behs_count = m[4]; type_inst.fx_count = m[5]; type_inst.sid = m[11]; if (type_inst.is_family) { type_inst.members = []; // types in this family type_inst.family_index = this.family_count++; type_inst.families = null; } else { type_inst.members = null; type_inst.family_index = -1; type_inst.families = []; // families this type belongs to } type_inst.family_var_map = null; type_inst.family_beh_map = null; type_inst.family_fx_map = null; type_inst.is_contained = false; type_inst.container = null; if (m[6]) { type_inst.texture_file = m[6][0]; type_inst.texture_filesize = m[6][1]; type_inst.texture_pixelformat = m[6][2]; } else { type_inst.texture_file = null; type_inst.texture_filesize = 0; type_inst.texture_pixelformat = 0; // rgba8 } if (m[7]) { type_inst.animations = m[7]; } else { type_inst.animations = null; } type_inst.index = i; // save index in to types array in type type_inst.instances = []; // all instances of this type type_inst.deadCache = []; // destroyed instances to recycle next create type_inst.solstack = [new cr.selection(type_inst)]; // initialise SOL stack with one empty SOL type_inst.cur_sol = 0; type_inst.default_instance = null; type_inst.default_layerindex = 0; type_inst.stale_iids = true; type_inst.updateIIDs = cr.type_updateIIDs; type_inst.getFirstPicked = cr.type_getFirstPicked; type_inst.getPairedInstance = cr.type_getPairedInstance; type_inst.getCurrentSol = cr.type_getCurrentSol; type_inst.pushCleanSol = cr.type_pushCleanSol; type_inst.pushCopySol = cr.type_pushCopySol; type_inst.popSol = cr.type_popSol; type_inst.getBehaviorByName = cr.type_getBehaviorByName; type_inst.getBehaviorIndexByName = cr.type_getBehaviorIndexByName; type_inst.getEffectIndexByName = cr.type_getEffectIndexByName; type_inst.applySolToContainer = cr.type_applySolToContainer; type_inst.getInstanceByIID = cr.type_getInstanceByIID; type_inst.collision_grid = new cr.SparseGrid(this.original_width, this.original_height); type_inst.any_cell_changed = true; type_inst.any_instance_parallaxed = false; type_inst.extra = {}; type_inst.toString = cr.type_toString; type_inst.behaviors = []; for (j = 0, lenj = m[8].length; j < lenj; j++) { b = m[8][j]; var behavior_ctor = this.GetObjectReference(b[1]); var behavior_plugin = null; for (k = 0, lenk = this.behaviors.length; k < lenk; k++) { if (this.behaviors[k] instanceof behavior_ctor) { behavior_plugin = this.behaviors[k]; break; } } if (!behavior_plugin) { behavior_plugin = new behavior_ctor(this); behavior_plugin.my_types = []; // types using this behavior behavior_plugin.my_instances = new cr.ObjectSet(); // instances of this behavior if (behavior_plugin.onCreate) behavior_plugin.onCreate(); cr.seal(behavior_plugin); this.behaviors.push(behavior_plugin); if (cr.behaviors.solid && behavior_plugin instanceof cr.behaviors.solid) this.solidBehavior = behavior_plugin; if (cr.behaviors.jumpthru && behavior_plugin instanceof cr.behaviors.jumpthru) this.jumpthruBehavior = behavior_plugin; if (cr.behaviors.shadowcaster && behavior_plugin instanceof cr.behaviors.shadowcaster) this.shadowcasterBehavior = behavior_plugin; } if (behavior_plugin.my_types.indexOf(type_inst) === -1) behavior_plugin.my_types.push(type_inst); var behavior_type = new behavior_plugin.Type(behavior_plugin, type_inst); behavior_type.name = b[0]; behavior_type.sid = b[2]; behavior_type.onCreate(); cr.seal(behavior_type); type_inst.behaviors.push(behavior_type); } type_inst.global = m[9]; type_inst.isOnLoaderLayout = m[10]; type_inst.effect_types = []; for (j = 0, lenj = m[12].length; j < lenj; j++) { type_inst.effect_types.push({ id: m[12][j][0], name: m[12][j][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: j }); } type_inst.tile_poly_data = m[13]; if (!this.uses_loader_layout || type_inst.is_family || type_inst.isOnLoaderLayout || !plugin.is_world) { type_inst.onCreate(); cr.seal(type_inst); } if (type_inst.name) this.types[type_inst.name] = type_inst; this.types_by_index.push(type_inst); if (plugin.singleglobal) { var instance = new plugin.Instance(type_inst); instance.uid = this.next_uid++; instance.puid = this.next_puid++; instance.iid = 0; instance.get_iid = cr.inst_get_iid; instance.toString = cr.inst_toString; instance.properties = m[14]; instance.onCreate(); cr.seal(instance); type_inst.instances.push(instance); this.objectsByUid[instance.uid.toString()] = instance; } } for (i = 0, len = pm[4].length; i < len; i++) { var familydata = pm[4][i]; var familytype = this.types_by_index[familydata[0]]; var familymember; for (j = 1, lenj = familydata.length; j < lenj; j++) { familymember = this.types_by_index[familydata[j]]; familymember.families.push(familytype); familytype.members.push(familymember); } } for (i = 0, len = pm[28].length; i < len; i++) { var containerdata = pm[28][i]; var containertypes = []; for (j = 0, lenj = containerdata.length; j < lenj; j++) containertypes.push(this.types_by_index[containerdata[j]]); for (j = 0, lenj = containertypes.length; j < lenj; j++) { containertypes[j].is_contained = true; containertypes[j].container = containertypes; } } if (this.family_count > 0) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.is_family || !t.families.length) continue; t.family_var_map = new Array(this.family_count); t.family_beh_map = new Array(this.family_count); t.family_fx_map = new Array(this.family_count); var all_fx = []; var varsum = 0; var behsum = 0; var fxsum = 0; for (j = 0, lenj = t.families.length; j < lenj; j++) { f = t.families[j]; t.family_var_map[f.family_index] = varsum; varsum += f.vars_count; t.family_beh_map[f.family_index] = behsum; behsum += f.behs_count; t.family_fx_map[f.family_index] = fxsum; fxsum += f.fx_count; for (k = 0, lenk = f.effect_types.length; k < lenk; k++) all_fx.push(cr.shallowCopy({}, f.effect_types[k])); } t.effect_types = all_fx.concat(t.effect_types); for (j = 0, lenj = t.effect_types.length; j < lenj; j++) t.effect_types[j].index = j; } } for (i = 0, len = pm[5].length; i < len; i++) { m = pm[5][i]; var layout = new cr.layout(this, m); cr.seal(layout); this.layouts[layout.name] = layout; this.layouts_by_index.push(layout); } for (i = 0, len = pm[6].length; i < len; i++) { m = pm[6][i]; var sheet = new cr.eventsheet(this, m); cr.seal(sheet); this.eventsheets[sheet.name] = sheet; this.eventsheets_by_index.push(sheet); } for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].postInit(); for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].updateDeepIncludes(); for (i = 0, len = this.triggers_to_postinit.length; i < len; i++) this.triggers_to_postinit[i].postInit(); cr.clearArray(this.triggers_to_postinit) this.audio_to_preload = pm[7]; this.files_subfolder = pm[8]; this.pixel_rounding = pm[9]; this.aspect_scale = 1.0; this.enableWebGL = pm[13]; this.linearSampling = pm[14]; this.alphaBackground = pm[15]; this.versionstr = pm[16]; this.useHighDpi = pm[17]; this.orientations = pm[20]; // 0 = any, 1 = portrait, 2 = landscape this.autoLockOrientation = (this.orientations > 0); this.pauseOnBlur = pm[22]; this.wantFullscreenScalingQuality = pm[23]; // false = low quality, true = high quality this.fullscreenScalingQuality = this.wantFullscreenScalingQuality; this.downscalingQuality = pm[24]; // 0 = low (mips off), 1 = medium (mips on, dense spritesheet), 2 = high (mips on, sparse spritesheet) this.preloadSounds = pm[25]; // 0 = no, 1 = yes this.projectName = pm[26]; this.enableFrontToBack = pm[27] && !this.isIE; // front-to-back renderer disabled in IE (but not Edge) this.start_time = Date.now(); cr.clearArray(this.objectRefTable); this.initRendererAndLoader(); }; var anyImageHadError = false; Runtime.prototype.waitForImageLoad = function (img_, src_) { img_["cocoonLazyLoad"] = true; img_.onerror = function (e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error loading image '" + img_.src + "': ", e); }; if (this.isEjecta) { img_.src = src_; } else if (!img_.src) { if (typeof XAPKReader !== "undefined") { XAPKReader.get(src_, function (expanded_url) { img_.src = expanded_url; }, function (e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error extracting image '" + src_ + "' from expansion file: ", e); }); } else { img_.crossOrigin = "anonymous"; // required for Arcade sandbox compatibility img_.src = src_; } } this.wait_for_textures.push(img_); }; Runtime.prototype.findWaitingTexture = function (src_) { var i, len; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { if (this.wait_for_textures[i].cr_src === src_) return this.wait_for_textures[i]; } return null; }; var audio_preload_totalsize = 0; var audio_preload_started = false; Runtime.prototype.getready = function () { if (!this.audioInstance) return; audio_preload_totalsize = this.audioInstance.setPreloadList(this.audio_to_preload); }; Runtime.prototype.areAllTexturesAndSoundsLoaded = function () { var totalsize = audio_preload_totalsize; var completedsize = 0; var audiocompletedsize = 0; var ret = true; var i, len, img; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { img = this.wait_for_textures[i]; var filesize = img.cr_filesize; if (!filesize || filesize <= 0) filesize = 50000; totalsize += filesize; if (!!img.src && (img.complete || img["loaded"]) && !img.c2error) completedsize += filesize; else ret = false; // not all textures loaded } if (ret && this.preloadSounds && this.audioInstance) { if (!audio_preload_started) { this.audioInstance.startPreloads(); audio_preload_started = true; } audiocompletedsize = this.audioInstance.getPreloadedSize(); completedsize += audiocompletedsize; if (audiocompletedsize < audio_preload_totalsize) ret = false; // not done yet } if (totalsize == 0) this.progress = 1; // indicate to C2 splash loader that it can finish now else this.progress = (completedsize / totalsize); return ret; }; var isC2SplashDone = false; Runtime.prototype.go = function () { if (!this.ctx && !this.glwrap) return; var ctx = this.ctx || this.overlay_ctx; if (this.overlay_canvas) this.positionOverlayCanvas(); this.progress = 0; this.last_progress = -1; var self = this; if (this.areAllTexturesAndSoundsLoaded() && (this.loaderstyle !== 4 || isC2SplashDone)) { this.go_loading_finished(); } else { var ms_elapsed = Date.now() - this.start_time; if (ctx) { var overlay_width = this.width; var overlay_height = this.height; var dpr = this.devicePixelRatio; if (this.loaderstyle < 3 && (this.isCocoonJs || (ms_elapsed >= 500 && this.last_progress != this.progress))) { ctx.clearRect(0, 0, overlay_width, overlay_height); var mx = overlay_width / 2; var my = overlay_height / 2; var haslogo = (this.loaderstyle === 0 && this.loaderlogos.logo.complete); var hlw = 40 * dpr; var hlh = 0; var logowidth = 80 * dpr; var logoheight; if (haslogo) { var loaderLogoImage = this.loaderlogos.logo; logowidth = loaderLogoImage.width * dpr; logoheight = loaderLogoImage.height * dpr; hlw = logowidth / 2; hlh = logoheight / 2; ctx.drawImage(loaderLogoImage, cr.floor(mx - hlw), cr.floor(my - hlh), logowidth, logoheight); } if (this.loaderstyle <= 1) { my += hlh + (haslogo ? 12 * dpr : 0); mx -= hlw; mx = cr.floor(mx) + 0.5; my = cr.floor(my) + 0.5; ctx.fillStyle = anyImageHadError ? "red" : "DodgerBlue"; ctx.fillRect(mx, my, Math.floor(logowidth * this.progress), 6 * dpr); ctx.strokeStyle = "black"; ctx.strokeRect(mx, my, logowidth, 6 * dpr); ctx.strokeStyle = "white"; ctx.strokeRect(mx - 1 * dpr, my - 1 * dpr, logowidth + 2 * dpr, 8 * dpr); } else if (this.loaderstyle === 2) { ctx.font = (this.isEjecta ? "12pt ArialMT" : "12pt Arial"); ctx.fillStyle = anyImageHadError ? "#f00" : "#999"; ctx.textBaseLine = "middle"; var percent_text = Math.round(this.progress * 100) + "%"; var text_dim = ctx.measureText ? ctx.measureText(percent_text) : null; var text_width = text_dim ? text_dim.width : 0; ctx.fillText(percent_text, mx - (text_width / 2), my); } this.last_progress = this.progress; } else if (this.loaderstyle === 4) { this.draw_c2_splash_loader(ctx); if (raf) raf(function() { self.go(); }); else setTimeout(function() { self.go(); }, 16); return; } } setTimeout(function() { self.go(); }, (this.isCocoonJs ? 10 : 100)); } }; var splashStartTime = -1; var splashFadeInDuration = 300; var splashFadeOutDuration = 300; var splashAfterFadeOutWait = (typeof cr_is_preview === "undefined" ? 200 : 0); var splashIsFadeIn = true; var splashIsFadeOut = false; var splashFadeInFinish = 0; var splashFadeOutStart = 0; var splashMinDisplayTime = (typeof cr_is_preview === "undefined" ? 3000 : 0); var renderViaCanvas = null; var renderViaCtx = null; var splashFrameNumber = 0; function maybeCreateRenderViaCanvas(w, h) { if (!renderViaCanvas || renderViaCanvas.width !== w || renderViaCanvas.height !== h) { renderViaCanvas = document.createElement("canvas"); renderViaCanvas.width = w; renderViaCanvas.height = h; renderViaCtx = renderViaCanvas.getContext("2d"); } }; function mipImage(arr, size) { if (size <= 128) return arr[3]; else if (size <= 256) return arr[2]; else if (size <= 512) return arr[1]; else return arr[0]; }; Runtime.prototype.draw_c2_splash_loader = function(ctx) { if (isC2SplashDone) return; var w = Math.ceil(this.width); var h = Math.ceil(this.height); var dpr = this.devicePixelRatio; var logoimages = this.loaderlogos.logo; var poweredimages = this.loaderlogos.powered; var websiteimages = this.loaderlogos.website; for (var i = 0; i < 4; ++i) { if (!logoimages[i].complete || !poweredimages[i].complete || !websiteimages[i].complete) return; } if (splashFrameNumber === 0) splashStartTime = Date.now(); var nowTime = Date.now(); var isRenderingVia = false; var renderToCtx = ctx; var drawW, drawH; if (splashIsFadeIn || splashIsFadeOut) { ctx.clearRect(0, 0, w, h); maybeCreateRenderViaCanvas(w, h); renderToCtx = renderViaCtx; isRenderingVia = true; if (splashIsFadeIn && splashFrameNumber === 1) splashStartTime = Date.now(); } else { ctx.globalAlpha = 1; } renderToCtx.fillStyle = "#333333"; renderToCtx.fillRect(0, 0, w, h); if (this.cssHeight > 256) { drawW = cr.clamp(h * 0.22, 105, w * 0.6); drawH = drawW * 0.25; renderToCtx.drawImage(mipImage(poweredimages, drawW), w * 0.5 - drawW/2, h * 0.2 - drawH/2, drawW, drawH); drawW = Math.min(h * 0.395, w * 0.95); drawH = drawW; renderToCtx.drawImage(mipImage(logoimages, drawW), w * 0.5 - drawW/2, h * 0.485 - drawH/2, drawW, drawH); drawW = cr.clamp(h * 0.22, 105, w * 0.6); drawH = drawW * 0.25; renderToCtx.drawImage(mipImage(websiteimages, drawW), w * 0.5 - drawW/2, h * 0.868 - drawH/2, drawW, drawH); renderToCtx.fillStyle = "#3C3C3C"; drawW = w; drawH = Math.max(h * 0.005, 2); renderToCtx.fillRect(0, h * 0.8 - drawH/2, drawW, drawH); renderToCtx.fillStyle = anyImageHadError ? "red" : "#E0FF65"; drawW = w * this.progress; renderToCtx.fillRect(w * 0.5 - drawW/2, h * 0.8 - drawH/2, drawW, drawH); } else { drawW = h * 0.55; drawH = drawW; renderToCtx.drawImage(mipImage(logoimages, drawW), w * 0.5 - drawW/2, h * 0.45 - drawH/2, drawW, drawH); renderToCtx.fillStyle = "#3C3C3C"; drawW = w; drawH = Math.max(h * 0.005, 2); renderToCtx.fillRect(0, h * 0.85 - drawH/2, drawW, drawH); renderToCtx.fillStyle = anyImageHadError ? "red" : "#E0FF65"; drawW = w * this.progress; renderToCtx.fillRect(w * 0.5 - drawW/2, h * 0.85 - drawH/2, drawW, drawH); } if (isRenderingVia) { if (splashIsFadeIn) { if (splashFrameNumber === 0) ctx.globalAlpha = 0; else ctx.globalAlpha = Math.min((nowTime - splashStartTime) / splashFadeInDuration, 1); } else if (splashIsFadeOut) { ctx.globalAlpha = Math.max(1 - (nowTime - splashFadeOutStart) / splashFadeOutDuration, 0); } ctx.drawImage(renderViaCanvas, 0, 0, w, h); } if (splashIsFadeIn && nowTime - splashStartTime >= splashFadeInDuration && splashFrameNumber >= 2) { splashIsFadeIn = false; splashFadeInFinish = nowTime; } if (!splashIsFadeIn && nowTime - splashFadeInFinish >= splashMinDisplayTime && !splashIsFadeOut && this.progress >= 1) { splashIsFadeOut = true; splashFadeOutStart = nowTime; } if ((splashIsFadeOut && nowTime - splashFadeOutStart >= splashFadeOutDuration + splashAfterFadeOutWait) || (typeof cr_is_preview !== "undefined" && this.progress >= 1 && Date.now() - splashStartTime < 500)) { isC2SplashDone = true; splashIsFadeIn = false; splashIsFadeOut = false; renderViaCanvas = null; renderViaCtx = null; this.loaderlogos = null; } ++splashFrameNumber; }; Runtime.prototype.go_loading_finished = function () { if (this.overlay_canvas) { this.canvas.parentNode.removeChild(this.overlay_canvas); this.overlay_ctx = null; this.overlay_canvas = null; } this.start_time = Date.now(); this.last_fps_time = cr.performance_now(); // for counting framerate var i, len, t; if (this.uses_loader_layout) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (!t.is_family && !t.isOnLoaderLayout && t.plugin.is_world) { t.onCreate(); cr.seal(t); } } } else this.isloading = false; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { this.layouts_by_index[i].createGlobalNonWorlds(); } if (this.fullscreen_mode >= 2) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width; } if (this.first_layout) this.layouts[this.first_layout].startRunning(); else this.layouts_by_index[0].startRunning(); ; if (!this.uses_loader_layout) { this.loadingprogress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); } if (navigator["splashscreen"] && navigator["splashscreen"]["hide"]) navigator["splashscreen"]["hide"](); for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onAppBegin) t.onAppBegin(); } if (document["hidden"] || document["webkitHidden"] || document["mozHidden"] || document["msHidden"]) { window["cr_setSuspended"](true); // stop rendering } else { this.tick(false); } if (this.isDirectCanvas) AppMobi["webview"]["execute"]("onGameReady();"); }; Runtime.prototype.tick = function (background_wake, timestamp, debug_step) { if (!this.running_layout) return; var nowtime = cr.performance_now(); var logic_start = nowtime; if (!debug_step && this.isSuspended && !background_wake) return; if (!background_wake) { if (raf) this.raf_id = raf(this.tickFunc); else { this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16); } } var raf_time = timestamp || nowtime; var fsmode = this.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"]) && !this.isCordova; if ((isfullscreen || this.isNodeFullscreen) && this.fullscreen_scaling > 0) fsmode = this.fullscreen_scaling; if (fsmode > 0 && (!this.isiOS || window.self !== window.top)) { var curwidth = window.innerWidth; var curheight = window.innerHeight; if (this.lastWindowWidth !== curwidth || this.lastWindowHeight !== curheight) { this["setSize"](window_innerWidth(), window_innerHeight()); } } if (!this.isDomFree) { if (isfullscreen) { if (!this.firstInFullscreen) { this.fullscreenOldMarginCss = jQuery(this.canvas).css("margin") || "0"; this.firstInFullscreen = true; } if (!this.isChrome && !this.isNWjs) { jQuery(this.canvas).css({ "margin-left": "" + Math.floor((screen.width - (this.width / this.devicePixelRatio)) / 2) + "px", "margin-top": "" + Math.floor((screen.height - (this.height / this.devicePixelRatio)) / 2) + "px" }); } } else { if (this.firstInFullscreen) { if (!this.isChrome && !this.isNWjs) { jQuery(this.canvas).css("margin", this.fullscreenOldMarginCss); } this.fullscreenOldMarginCss = ""; this.firstInFullscreen = false; if (this.fullscreen_mode === 0) { this["setSize"](Math.round(this.oldWidth / this.devicePixelRatio), Math.round(this.oldHeight / this.devicePixelRatio), true); } } else { this.oldWidth = this.width; this.oldHeight = this.height; } } } if (this.isloading) { var done = this.areAllTexturesAndSoundsLoaded(); // updates this.progress this.loadingprogress = this.progress; if (done) { this.isloading = false; this.progress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); } } this.logic(raf_time); if ((this.redraw || this.isCocoonJs) && !this.is_WebGL_context_lost && !this.suspendDrawing && !background_wake) { this.redraw = false; if (this.glwrap) this.drawGL(); else this.draw(); if (this.snapshotCanvas) { if (this.canvas && this.canvas.toDataURL) { this.snapshotData = this.canvas.toDataURL(this.snapshotCanvas[0], this.snapshotCanvas[1]); if (window["cr_onSnapshot"]) window["cr_onSnapshot"](this.snapshotData); this.trigger(cr.system_object.prototype.cnds.OnCanvasSnapshot, null); } this.snapshotCanvas = null; } } if (!this.hit_breakpoint) { this.tickcount++; this.execcount++; this.framecount++; } this.logictime += cr.performance_now() - logic_start; }; Runtime.prototype.logic = function (cur_time) { var i, leni, j, lenj, k, lenk, type, inst, binst; if (cur_time - this.last_fps_time >= 1000) // every 1 second { this.last_fps_time += 1000; if (cur_time - this.last_fps_time >= 1000) this.last_fps_time = cur_time; this.fps = this.framecount; this.framecount = 0; this.cpuutilisation = this.logictime; this.logictime = 0; } if (this.last_tick_time !== 0) { var ms_diff = cur_time - this.last_tick_time; if (ms_diff < 0) ms_diff = 0; this.dt1 = ms_diff / 1000.0; // dt measured in seconds if (this.dt1 > 0.5) this.dt1 = 0; else if (this.dt1 > 1 / this.minimumFramerate) this.dt1 = 1 / this.minimumFramerate; } this.last_tick_time = cur_time; this.dt = this.dt1 * this.timescale; this.kahanTime.add(this.dt); this.wallTime.add(this.dt1); var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isCordova; if (this.fullscreen_mode >= 2 /* scale */ || (isfullscreen && this.fullscreen_scaling > 0)) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; var mode = this.fullscreen_mode; if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; if ((mode !== 2 && cur_aspect > orig_aspect) || (mode === 2 && cur_aspect < orig_aspect)) { this.aspect_scale = this.height / this.original_height; } else { this.aspect_scale = this.width / this.original_width; } if (this.running_layout) { this.running_layout.scrollToX(this.running_layout.scrollX); this.running_layout.scrollToY(this.running_layout.scrollY); } } else this.aspect_scale = (this.isRetina ? this.devicePixelRatio : 1); this.ClearDeathRow(); this.isInOnDestroy++; this.system.runWaits(); // prevent instance list changing this.isInOnDestroy--; this.ClearDeathRow(); // allow instance list changing this.isInOnDestroy++; var tickarr = this.objects_to_pretick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].pretick(); for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { inst.behavior_insts[k].tick(); } } } for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.posttick) binst.posttick(); } } } tickarr = this.objects_to_tick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick(); this.isInOnDestroy--; // end preventing instance lists from being changed this.handleSaveLoad(); // save/load now if queued i = 0; while (this.changelayout && i++ < 10) { this.doChangeLayout(this.changelayout); } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) this.eventsheets_by_index[i].hasRun = false; if (this.running_layout.event_sheet) this.running_layout.event_sheet.run(); cr.clearArray(this.registered_collisions); this.layout_first_tick = false; this.isInOnDestroy++; // prevent instance lists from being changed for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { var inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.tick2) binst.tick2(); } } } tickarr = this.objects_to_tick2.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick2(); this.isInOnDestroy--; // end preventing instance lists from being changed }; Runtime.prototype.onWindowBlur = function () { var i, leni, j, lenj, k, lenk, type, inst, binst; for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (inst.onWindowBlur) inst.onWindowBlur(); if (!inst.behavior_insts) continue; // single-globals don't have behavior_insts for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.onWindowBlur) binst.onWindowBlur(); } } } }; Runtime.prototype.doChangeLayout = function (changeToLayout) { var prev_layout = this.running_layout; this.running_layout.stopRunning(); var i, len, j, lenj, k, lenk, type, inst, binst; if (this.glwrap) { for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; if (type.unloadTextures && (!type.global || type.instances.length === 0) && changeToLayout.initial_types.indexOf(type) === -1) { type.unloadTextures(); } } } if (prev_layout == changeToLayout) cr.clearArray(this.system.waits); cr.clearArray(this.registered_collisions); changeToLayout.startRunning(); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (!type.global && !type.plugin.singleglobal) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (inst.onLayoutChange) inst.onLayoutChange(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.onLayoutChange) binst.onLayoutChange(); } } } } this.redraw = true; this.layout_first_tick = true; this.ClearDeathRow(); }; Runtime.prototype.pretickMe = function (inst) { this.objects_to_pretick.add(inst); }; Runtime.prototype.unpretickMe = function (inst) { this.objects_to_pretick.remove(inst); }; Runtime.prototype.tickMe = function (inst) { this.objects_to_tick.add(inst); }; Runtime.prototype.untickMe = function (inst) { this.objects_to_tick.remove(inst); }; Runtime.prototype.tick2Me = function (inst) { this.objects_to_tick2.add(inst); }; Runtime.prototype.untick2Me = function (inst) { this.objects_to_tick2.remove(inst); }; Runtime.prototype.getDt = function (inst) { if (!inst || inst.my_timescale === -1.0) return this.dt; return this.dt1 * inst.my_timescale; }; Runtime.prototype.draw = function () { this.running_layout.draw(this.ctx); if (this.isDirectCanvas) this.ctx["present"](); }; Runtime.prototype.drawGL = function () { if (this.enableFrontToBack) { this.earlyz_index = 1; // start from front, 1-based to avoid exactly equalling near plane Z value this.running_layout.drawGL_earlyZPass(this.glwrap); } this.running_layout.drawGL(this.glwrap); this.glwrap.present(); }; Runtime.prototype.addDestroyCallback = function (f) { if (f) this.destroycallbacks.push(f); }; Runtime.prototype.removeDestroyCallback = function (f) { cr.arrayFindRemove(this.destroycallbacks, f); }; Runtime.prototype.getObjectByUID = function (uid_) { ; var uidstr = uid_.toString(); if (this.objectsByUid.hasOwnProperty(uidstr)) return this.objectsByUid[uidstr]; else return null; }; var objectset_cache = []; function alloc_objectset() { if (objectset_cache.length) return objectset_cache.pop(); else return new cr.ObjectSet(); }; function free_objectset(s) { s.clear(); objectset_cache.push(s); }; Runtime.prototype.DestroyInstance = function (inst) { var i, len; var type = inst.type; var typename = type.name; var has_typename = this.deathRow.hasOwnProperty(typename); var obj_set = null; if (has_typename) { obj_set = this.deathRow[typename]; if (obj_set.contains(inst)) return; // already had DestroyInstance called } else { obj_set = alloc_objectset(); this.deathRow[typename] = obj_set; } obj_set.add(inst); this.hasPendingInstances = true; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { this.DestroyInstance(inst.siblings[i]); } } if (this.isInClearDeathRow) obj_set.values_cache.push(inst); if (!this.isEndingLayout) { this.isInOnDestroy++; // support recursion this.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnDestroyed, inst); this.isInOnDestroy--; } }; Runtime.prototype.ClearDeathRow = function () { if (!this.hasPendingInstances) return; var inst, type, instances; var i, j, leni, lenj, obj_set; this.isInClearDeathRow = true; for (i = 0, leni = this.createRow.length; i < leni; ++i) { inst = this.createRow[i]; type = inst.type; type.instances.push(inst); for (j = 0, lenj = type.families.length; j < lenj; ++j) { type.families[j].instances.push(inst); type.families[j].stale_iids = true; } } cr.clearArray(this.createRow); this.IterateDeathRow(); // moved to separate function so for-in performance doesn't hobble entire function cr.wipe(this.deathRow); // all objectsets have already been recycled this.isInClearDeathRow = false; this.hasPendingInstances = false; }; Runtime.prototype.IterateDeathRow = function () { for (var p in this.deathRow) { if (this.deathRow.hasOwnProperty(p)) { this.ClearDeathRowForType(this.deathRow[p]); } } }; Runtime.prototype.ClearDeathRowForType = function (obj_set) { var arr = obj_set.valuesRef(); // get array of items from set ; var type = arr[0].type; ; ; var i, len, j, lenj, w, f, layer_instances, inst; cr.arrayRemoveAllFromObjectSet(type.instances, obj_set); type.stale_iids = true; if (type.instances.length === 0) type.any_instance_parallaxed = false; for (i = 0, len = type.families.length; i < len; ++i) { f = type.families[i]; cr.arrayRemoveAllFromObjectSet(f.instances, obj_set); f.stale_iids = true; } for (i = 0, len = this.system.waits.length; i < len; ++i) { w = this.system.waits[i]; if (w.sols.hasOwnProperty(type.index)) cr.arrayRemoveAllFromObjectSet(w.sols[type.index].insts, obj_set); if (!type.is_family) { for (j = 0, lenj = type.families.length; j < lenj; ++j) { f = type.families[j]; if (w.sols.hasOwnProperty(f.index)) cr.arrayRemoveAllFromObjectSet(w.sols[f.index].insts, obj_set); } } } var first_layer = arr[0].layer; if (first_layer) { if (first_layer.useRenderCells) { layer_instances = first_layer.instances; for (i = 0, len = layer_instances.length; i < len; ++i) { inst = layer_instances[i]; if (!obj_set.contains(inst)) continue; // not destroying this instance inst.update_bbox(); first_layer.render_grid.update(inst, inst.rendercells, null); inst.rendercells.set(0, 0, -1, -1); } } cr.arrayRemoveAllFromObjectSet(first_layer.instances, obj_set); first_layer.setZIndicesStaleFrom(0); } for (i = 0; i < arr.length; ++i) // check array length every time in case it changes { this.ClearDeathRowForSingleInstance(arr[i], type); } free_objectset(obj_set); this.redraw = true; }; Runtime.prototype.ClearDeathRowForSingleInstance = function (inst, type) { var i, len, binst; for (i = 0, len = this.destroycallbacks.length; i < len; ++i) this.destroycallbacks[i](inst); if (inst.collcells) { type.collision_grid.update(inst, inst.collcells, null); } var layer = inst.layer; if (layer) { layer.removeFromInstanceList(inst, true); // remove from both instance list and render grid } if (inst.behavior_insts) { for (i = 0, len = inst.behavior_insts.length; i < len; ++i) { binst = inst.behavior_insts[i]; if (binst.onDestroy) binst.onDestroy(); binst.behavior.my_instances.remove(inst); } } this.objects_to_pretick.remove(inst); this.objects_to_tick.remove(inst); this.objects_to_tick2.remove(inst); if (inst.onDestroy) inst.onDestroy(); if (this.objectsByUid.hasOwnProperty(inst.uid.toString())) delete this.objectsByUid[inst.uid.toString()]; this.objectcount--; if (type.deadCache.length < 100) type.deadCache.push(inst); }; Runtime.prototype.createInstance = function (type, layer, sx, sy) { if (type.is_family) { var i = cr.floor(Math.random() * type.members.length); return this.createInstance(type.members[i], layer, sx, sy); } if (!type.default_instance) { return null; } return this.createInstanceFromInit(type.default_instance, layer, false, sx, sy, false); }; var all_behaviors = []; Runtime.prototype.createInstanceFromInit = function (initial_inst, layer, is_startup_instance, sx, sy, skip_siblings) { var i, len, j, lenj, p, effect_fallback, x, y; if (!initial_inst) return null; var type = this.types_by_index[initial_inst[1]]; ; ; var is_world = type.plugin.is_world; ; if (this.isloading && is_world && !type.isOnLoaderLayout) return null; if (is_world && !this.glwrap && initial_inst[0][11] === 11) return null; var original_layer = layer; if (!is_world) layer = null; var inst; if (type.deadCache.length) { inst = type.deadCache.pop(); inst.recycled = true; type.plugin.Instance.call(inst, type); } else { inst = new type.plugin.Instance(type); inst.recycled = false; } if (is_startup_instance && !skip_siblings && !this.objectsByUid.hasOwnProperty(initial_inst[2].toString())) inst.uid = initial_inst[2]; else inst.uid = this.next_uid++; this.objectsByUid[inst.uid.toString()] = inst; inst.puid = this.next_puid++; inst.iid = type.instances.length; for (i = 0, len = this.createRow.length; i < len; ++i) { if (this.createRow[i].type === type) inst.iid++; } inst.get_iid = cr.inst_get_iid; inst.toString = cr.inst_toString; var initial_vars = initial_inst[3]; if (inst.recycled) { cr.wipe(inst.extra); } else { inst.extra = {}; if (typeof cr_is_preview !== "undefined") { inst.instance_var_names = []; inst.instance_var_names.length = initial_vars.length; for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_var_names[i] = initial_vars[i][1]; } inst.instance_vars = []; inst.instance_vars.length = initial_vars.length; } for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_vars[i] = initial_vars[i][0]; if (is_world) { var wm = initial_inst[0]; ; inst.x = cr.is_undefined(sx) ? wm[0] : sx; inst.y = cr.is_undefined(sy) ? wm[1] : sy; inst.z = wm[2]; inst.width = wm[3]; inst.height = wm[4]; inst.depth = wm[5]; inst.angle = wm[6]; inst.opacity = wm[7]; inst.hotspotX = wm[8]; inst.hotspotY = wm[9]; inst.blend_mode = wm[10]; effect_fallback = wm[11]; if (!this.glwrap && type.effect_types.length) // no WebGL renderer and shaders used inst.blend_mode = effect_fallback; // use fallback blend mode - destroy mode was handled above inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); if (inst.recycled) { for (i = 0, len = wm[12].length; i < len; i++) { for (j = 0, lenj = wm[12][i].length; j < lenj; j++) inst.effect_params[i][j] = wm[12][i][j]; } inst.bbox.set(0, 0, 0, 0); inst.collcells.set(0, 0, -1, -1); inst.rendercells.set(0, 0, -1, -1); inst.bquad.set_from_rect(inst.bbox); cr.clearArray(inst.bbox_changed_callbacks); } else { inst.effect_params = wm[12].slice(0); for (i = 0, len = inst.effect_params.length; i < len; i++) inst.effect_params[i] = wm[12][i].slice(0); inst.active_effect_types = []; inst.active_effect_flags = []; inst.active_effect_flags.length = type.effect_types.length; inst.bbox = new cr.rect(0, 0, 0, 0); inst.collcells = new cr.rect(0, 0, -1, -1); inst.rendercells = new cr.rect(0, 0, -1, -1); inst.bquad = new cr.quad(); inst.bbox_changed_callbacks = []; inst.set_bbox_changed = cr.set_bbox_changed; inst.add_bbox_changed_callback = cr.add_bbox_changed_callback; inst.contains_pt = cr.inst_contains_pt; inst.update_bbox = cr.update_bbox; inst.update_render_cell = cr.update_render_cell; inst.update_collision_cell = cr.update_collision_cell; inst.get_zindex = cr.inst_get_zindex; } inst.tilemap_exists = false; inst.tilemap_width = 0; inst.tilemap_height = 0; inst.tilemap_data = null; if (wm.length === 14) { inst.tilemap_exists = true; inst.tilemap_width = wm[13][0]; inst.tilemap_height = wm[13][1]; inst.tilemap_data = wm[13][2]; } for (i = 0, len = type.effect_types.length; i < len; i++) inst.active_effect_flags[i] = true; inst.shaders_preserve_opaqueness = true; inst.updateActiveEffects = cr.inst_updateActiveEffects; inst.updateActiveEffects(); inst.uses_shaders = !!inst.active_effect_types.length; inst.bbox_changed = true; inst.cell_changed = true; type.any_cell_changed = true; inst.visible = true; inst.my_timescale = -1.0; inst.layer = layer; inst.zindex = layer.instances.length; // will be placed at top of current layer inst.earlyz_index = 0; if (typeof inst.collision_poly === "undefined") inst.collision_poly = null; inst.collisionsEnabled = true; this.redraw = true; } var initial_props, binst; cr.clearArray(all_behaviors); for (i = 0, len = type.families.length; i < len; i++) { all_behaviors.push.apply(all_behaviors, type.families[i].behaviors); } all_behaviors.push.apply(all_behaviors, type.behaviors); if (inst.recycled) { for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; binst = inst.behavior_insts[i]; binst.recycled = true; btype.behavior.Instance.call(binst, btype, inst); initial_props = initial_inst[4][i]; for (j = 0, lenj = initial_props.length; j < lenj; j++) binst.properties[j] = initial_props[j]; binst.onCreate(); btype.behavior.my_instances.add(inst); } } else { inst.behavior_insts = []; for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; var binst = new btype.behavior.Instance(btype, inst); binst.recycled = false; binst.properties = initial_inst[4][i].slice(0); binst.onCreate(); cr.seal(binst); inst.behavior_insts.push(binst); btype.behavior.my_instances.add(inst); } } initial_props = initial_inst[5]; if (inst.recycled) { for (i = 0, len = initial_props.length; i < len; i++) inst.properties[i] = initial_props[i]; } else inst.properties = initial_props.slice(0); this.createRow.push(inst); this.hasPendingInstances = true; if (layer) { ; layer.appendToInstanceList(inst, true); if (layer.parallaxX !== 1 || layer.parallaxY !== 1) type.any_instance_parallaxed = true; } this.objectcount++; if (type.is_contained) { inst.is_contained = true; if (inst.recycled) cr.clearArray(inst.siblings); else inst.siblings = []; // note: should not include self in siblings if (!is_startup_instance && !skip_siblings) // layout links initial instances { for (i = 0, len = type.container.length; i < len; i++) { if (type.container[i] === type) continue; if (!type.container[i].default_instance) { return null; } inst.siblings.push(this.createInstanceFromInit(type.container[i].default_instance, original_layer, false, is_world ? inst.x : sx, is_world ? inst.y : sy, true)); } for (i = 0, len = inst.siblings.length; i < len; i++) { inst.siblings[i].siblings.push(inst); for (j = 0; j < len; j++) { if (i !== j) inst.siblings[i].siblings.push(inst.siblings[j]); } } } } else { inst.is_contained = false; inst.siblings = null; } inst.onCreate(); if (!inst.recycled) cr.seal(inst); for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].postCreate) inst.behavior_insts[i].postCreate(); } return inst; }; Runtime.prototype.getLayerByName = function (layer_name) { var i, len; for (i = 0, len = this.running_layout.layers.length; i < len; i++) { var layer = this.running_layout.layers[i]; if (cr.equals_nocase(layer.name, layer_name)) return layer; } return null; }; Runtime.prototype.getLayerByNumber = function (index) { index = cr.floor(index); if (index < 0) index = 0; if (index >= this.running_layout.layers.length) index = this.running_layout.layers.length - 1; return this.running_layout.layers[index]; }; Runtime.prototype.getLayer = function (l) { if (cr.is_number(l)) return this.getLayerByNumber(l); else return this.getLayerByName(l.toString()); }; Runtime.prototype.clearSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].getCurrentSol().select_all = true; } }; Runtime.prototype.pushCleanSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCleanSol(); } }; Runtime.prototype.pushCopySol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCopySol(); } }; Runtime.prototype.popSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].popSol(); } }; Runtime.prototype.updateAllCells = function (type) { if (!type.any_cell_changed) return; // all instances must already be up-to-date var i, len, instances = type.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].update_collision_cell(); } var createRow = this.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === type) createRow[i].update_collision_cell(); } type.any_cell_changed = false; }; Runtime.prototype.getCollisionCandidates = function (layer, rtype, bbox, candidates) { var i, len, t; var is_parallaxed = (layer ? (layer.parallaxX !== 1 || layer.parallaxY !== 1) : false); if (rtype.is_family) { for (i = 0, len = rtype.members.length; i < len; ++i) { t = rtype.members[i]; if (is_parallaxed || t.any_instance_parallaxed) { cr.appendArray(candidates, t.instances); } else { this.updateAllCells(t); t.collision_grid.queryRange(bbox, candidates); } } } else { if (is_parallaxed || rtype.any_instance_parallaxed) { cr.appendArray(candidates, rtype.instances); } else { this.updateAllCells(rtype); rtype.collision_grid.queryRange(bbox, candidates); } } }; Runtime.prototype.getTypesCollisionCandidates = function (layer, types, bbox, candidates) { var i, len; for (i = 0, len = types.length; i < len; ++i) { this.getCollisionCandidates(layer, types[i], bbox, candidates); } }; Runtime.prototype.getSolidCollisionCandidates = function (layer, bbox, candidates) { var solid = this.getSolidBehavior(); if (!solid) return null; this.getTypesCollisionCandidates(layer, solid.my_types, bbox, candidates); }; Runtime.prototype.getJumpthruCollisionCandidates = function (layer, bbox, candidates) { var jumpthru = this.getJumpthruBehavior(); if (!jumpthru) return null; this.getTypesCollisionCandidates(layer, jumpthru.my_types, bbox, candidates); }; Runtime.prototype.testAndSelectCanvasPointOverlap = function (type, ptx, pty, inverted) { var sol = type.getCurrentSol(); var i, j, inst, len; var lx, ly; if (sol.select_all) { if (!inverted) { sol.select_all = false; cr.clearArray(sol.instances); // clear contents } for (i = 0, len = type.instances.length; i < len; i++) { inst = type.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else sol.instances.push(inst); } } } else { j = 0; for (i = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else { sol.instances[j] = sol.instances[i]; j++; } } } if (!inverted) sol.instances.length = j; } type.applySolToContainer(); if (inverted) return true; // did not find anything overlapping else return sol.hasObjects(); }; Runtime.prototype.testOverlap = function (a, b) { if (!a || !b || a === b || !a.collisionsEnabled || !b.collisionsEnabled) return false; a.update_bbox(); b.update_bbox(); var layera = a.layer; var layerb = b.layer; var different_layers = (layera !== layerb && (layera.parallaxX !== layerb.parallaxX || layerb.parallaxY !== layerb.parallaxY || layera.scale !== layerb.scale || layera.angle !== layerb.angle || layera.zoomRate !== layerb.zoomRate)); var i, len, i2, i21, x, y, haspolya, haspolyb, polya, polyb; if (!different_layers) // same layers: easy check { if (!a.bbox.intersects_rect(b.bbox)) return false; if (!a.bquad.intersects_quad(b.bquad)) return false; if (a.tilemap_exists && b.tilemap_exists) return false; if (a.tilemap_exists) return this.testTilemapOverlap(a, b); if (b.tilemap_exists) return this.testTilemapOverlap(b, a); haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolya && !haspolyb) return true; if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); polya = a.collision_poly; } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); polya = this.temp_poly; } if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); polyb = b.collision_poly; } else { this.temp_poly.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); polyb = this.temp_poly; } return polya.intersects_poly(polyb, b.x - a.x, b.y - a.y); } else // different layers: need to do full translated check { haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); this.temp_poly.set_from_poly(a.collision_poly); } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); } polya = this.temp_poly; if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); this.temp_poly2.set_from_poly(b.collision_poly); } else { this.temp_poly2.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); } polyb = this.temp_poly2; for (i = 0, len = polya.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polya.pts_cache[i2]; y = polya.pts_cache[i21]; polya.pts_cache[i2] = layera.layerToCanvas(x + a.x, y + a.y, true); polya.pts_cache[i21] = layera.layerToCanvas(x + a.x, y + a.y, false); } polya.update_bbox(); for (i = 0, len = polyb.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polyb.pts_cache[i2]; y = polyb.pts_cache[i21]; polyb.pts_cache[i2] = layerb.layerToCanvas(x + b.x, y + b.y, true); polyb.pts_cache[i21] = layerb.layerToCanvas(x + b.x, y + b.y, false); } polyb.update_bbox(); return polya.intersects_poly(polyb, 0, 0); } }; var tmpQuad = new cr.quad(); var tmpRect = new cr.rect(0, 0, 0, 0); var collrect_candidates = []; Runtime.prototype.testTilemapOverlap = function (tm, a) { var i, len, c, rc; var bbox = a.bbox; var tmx = tm.x; var tmy = tm.y; tm.getCollisionRectCandidates(bbox, collrect_candidates); var collrects = collrect_candidates; var haspolya = (a.collision_poly && !a.collision_poly.is_empty()); for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; rc = c.rc; if (bbox.intersects_rect_off(rc, tmx, tmy)) { tmpQuad.set_from_rect(rc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_quad(a.bquad)) { if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); if (c.poly) { if (c.poly.intersects_poly(a.collision_poly, a.x - (tmx + rc.left), a.y - (tmy + rc.top))) { cr.clearArray(collrect_candidates); return true; } } else { this.temp_poly.set_from_quad(tmpQuad, 0, 0, rc.right - rc.left, rc.bottom - rc.top); if (this.temp_poly.intersects_poly(a.collision_poly, a.x, a.y)) { cr.clearArray(collrect_candidates); return true; } } } else { if (c.poly) { this.temp_poly.set_from_quad(a.bquad, 0, 0, a.width, a.height); if (c.poly.intersects_poly(this.temp_poly, -(tmx + rc.left), -(tmy + rc.top))) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } } } cr.clearArray(collrect_candidates); return false; }; Runtime.prototype.testRectOverlap = function (r, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; if (!b.bbox.intersects_rect(r)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(r, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (r.intersects_rect_off(tilerc, tmx, tmy)) { if (c.poly) { this.temp_poly.set_from_rect(r, 0, 0); if (c.poly.intersects_poly(this.temp_poly, -(tmx + tilerc.left), -(tmy + tilerc.top))) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } cr.clearArray(collrect_candidates); return false; } else { tmpQuad.set_from_rect(r); if (!b.bquad.intersects_quad(tmpQuad)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); tmpQuad.offset(-r.left, -r.top); this.temp_poly.set_from_quad(tmpQuad, 0, 0, 1, 1); return b.collision_poly.intersects_poly(this.temp_poly, r.left - b.x, r.top - b.y); } }; Runtime.prototype.testSegmentOverlap = function (x1, y1, x2, y2, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; tmpRect.set(cr.min(x1, x2), cr.min(y1, y2), cr.max(x1, x2), cr.max(y1, y2)); if (!b.bbox.intersects_rect(tmpRect)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(tmpRect, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (tmpRect.intersects_rect_off(tilerc, tmx, tmy)) { tmpQuad.set_from_rect(tilerc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_segment(x1, y1, x2, y2)) { if (c.poly) { if (c.poly.intersects_segment(tmx + tilerc.left, tmy + tilerc.top, x1, y1, x2, y2)) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } } cr.clearArray(collrect_candidates); return false; } else { if (!b.bquad.intersects_segment(x1, y1, x2, y2)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); return b.collision_poly.intersects_segment(b.x, b.y, x1, y1, x2, y2); } }; Runtime.prototype.typeHasBehavior = function (t, b) { if (!b) return false; var i, len, j, lenj, f; for (i = 0, len = t.behaviors.length; i < len; i++) { if (t.behaviors[i].behavior instanceof b) return true; } if (!t.is_family) { for (i = 0, len = t.families.length; i < len; i++) { f = t.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (f.behaviors[j].behavior instanceof b) return true; } } } return false; }; Runtime.prototype.typeHasNoSaveBehavior = function (t) { return this.typeHasBehavior(t, cr.behaviors.NoSave); }; Runtime.prototype.typeHasPersistBehavior = function (t) { return this.typeHasBehavior(t, cr.behaviors.Persist); }; Runtime.prototype.getSolidBehavior = function () { return this.solidBehavior; }; Runtime.prototype.getJumpthruBehavior = function () { return this.jumpthruBehavior; }; var candidates = []; Runtime.prototype.testOverlapSolid = function (inst) { var i, len, s; inst.update_bbox(); this.getSolidCollisionCandidates(inst.layer, inst.bbox, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra["solidEnabled"]) continue; if (this.testOverlap(inst, s)) { cr.clearArray(candidates); return s; } } cr.clearArray(candidates); return null; }; Runtime.prototype.testRectOverlapSolid = function (r) { var i, len, s; this.getSolidCollisionCandidates(null, r, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra["solidEnabled"]) continue; if (this.testRectOverlap(r, s)) { cr.clearArray(candidates); return s; } } cr.clearArray(candidates); return null; }; var jumpthru_array_ret = []; Runtime.prototype.testOverlapJumpThru = function (inst, all) { var ret = null; if (all) { ret = jumpthru_array_ret; cr.clearArray(ret); } inst.update_bbox(); this.getJumpthruCollisionCandidates(inst.layer, inst.bbox, candidates); var i, len, j; for (i = 0, len = candidates.length; i < len; ++i) { j = candidates[i]; if (!j.extra["jumpthruEnabled"]) continue; if (this.testOverlap(inst, j)) { if (all) ret.push(j); else { cr.clearArray(candidates); return j; } } } cr.clearArray(candidates); return ret; }; Runtime.prototype.pushOutSolid = function (inst, xdir, ydir, dist, include_jumpthrus, specific_jumpthru) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; var last_overlapped = null, secondlast_overlapped = null; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; if (!last_overlapped) { if (include_jumpthrus) { if (specific_jumpthru) last_overlapped = (this.testOverlap(inst, specific_jumpthru) ? specific_jumpthru : null); else last_overlapped = this.testOverlapJumpThru(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; } if (!last_overlapped) { if (secondlast_overlapped) this.pushInFractional(inst, xdir, ydir, secondlast_overlapped, 16); return true; } } } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushOut = function (inst, xdir, ydir, dist, otherinst) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, otherinst)) return true; } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushInFractional = function (inst, xdir, ydir, obj, limit) { var divisor = 2; var frac; var forward = false; var overlapping = false; var bestx = inst.x; var besty = inst.y; while (divisor <= limit) { frac = 1 / divisor; divisor *= 2; inst.x += xdir * frac * (forward ? 1 : -1); inst.y += ydir * frac * (forward ? 1 : -1); inst.set_bbox_changed(); if (this.testOverlap(inst, obj)) { forward = true; overlapping = true; } else { forward = false; overlapping = false; bestx = inst.x; besty = inst.y; } } if (overlapping) { inst.x = bestx; inst.y = besty; inst.set_bbox_changed(); } }; Runtime.prototype.pushOutSolidNearest = function (inst, max_dist_) { var max_dist = (cr.is_undefined(max_dist_) ? 100 : max_dist_); var dist = 0; var oldx = inst.x var oldy = inst.y; var dir = 0; var dx = 0, dy = 0; var last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; // already clear of solids while (dist <= max_dist) { switch (dir) { case 0: dx = 0; dy = -1; dist++; break; case 1: dx = 1; dy = -1; break; case 2: dx = 1; dy = 0; break; case 3: dx = 1; dy = 1; break; case 4: dx = 0; dy = 1; break; case 5: dx = -1; dy = 1; break; case 6: dx = -1; dy = 0; break; case 7: dx = -1; dy = -1; break; } dir = (dir + 1) % 8; inst.x = cr.floor(oldx + (dx * dist)); inst.y = cr.floor(oldy + (dy * dist)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.registerCollision = function (a, b) { if (!a.collisionsEnabled || !b.collisionsEnabled) return; this.registered_collisions.push([a, b]); }; Runtime.prototype.checkRegisteredCollision = function (a, b) { var i, len, x; for (i = 0, len = this.registered_collisions.length; i < len; i++) { x = this.registered_collisions[i]; if ((x[0] == a && x[1] == b) || (x[0] == b && x[1] == a)) return true; } return false; }; Runtime.prototype.calculateSolidBounceAngle = function(inst, startx, starty, obj) { var objx = inst.x; var objy = inst.y; var radius = cr.max(10, cr.distanceTo(startx, starty, objx, objy)); var startangle = cr.angleTo(startx, starty, objx, objy); var firstsolid = obj || this.testOverlapSolid(inst); if (!firstsolid) return cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; var i, curangle, anticlockwise_free_angle, clockwise_free_angle; var increment = cr.to_radians(5); // 5 degree increments for (i = 1; i < 36; i++) { curangle = startangle - i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { anticlockwise_free_angle = curangle; break; } } } if (i === 36) anticlockwise_free_angle = cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; for (i = 1; i < 36; i++) { curangle = startangle + i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { clockwise_free_angle = curangle; break; } } } if (i === 36) clockwise_free_angle = cr.clamp_angle(startangle + cr.PI); inst.x = objx; inst.y = objy; inst.set_bbox_changed(); if (clockwise_free_angle === anticlockwise_free_angle) return clockwise_free_angle; var half_diff = cr.angleDiff(clockwise_free_angle, anticlockwise_free_angle) / 2; var normal; if (cr.angleClockwise(clockwise_free_angle, anticlockwise_free_angle)) { normal = cr.clamp_angle(anticlockwise_free_angle + half_diff + cr.PI); } else { normal = cr.clamp_angle(clockwise_free_angle + half_diff); } ; var vx = Math.cos(startangle); var vy = Math.sin(startangle); var nx = Math.cos(normal); var ny = Math.sin(normal); var v_dot_n = vx * nx + vy * ny; var rx = vx - 2 * v_dot_n * nx; var ry = vy - 2 * v_dot_n * ny; return cr.angleTo(0, 0, rx, ry); }; var triggerSheetIndex = -1; Runtime.prototype.trigger = function (method, inst, value /* for fast triggers */) { ; if (!this.running_layout) return false; var sheet = this.running_layout.event_sheet; if (!sheet) return false; // no event sheet active; nothing to trigger var ret = false; var r, i, len; triggerSheetIndex++; var deep_includes = sheet.deep_includes; for (i = 0, len = deep_includes.length; i < len; ++i) { r = this.triggerOnSheet(method, inst, deep_includes[i], value); ret = ret || r; } r = this.triggerOnSheet(method, inst, sheet, value); ret = ret || r; triggerSheetIndex--; return ret; }; Runtime.prototype.triggerOnSheet = function (method, inst, sheet, value) { var ret = false; var i, leni, r, families; if (!inst) { r = this.triggerOnSheetForTypeName(method, inst, "system", sheet, value); ret = ret || r; } else { r = this.triggerOnSheetForTypeName(method, inst, inst.type.name, sheet, value); ret = ret || r; families = inst.type.families; for (i = 0, leni = families.length; i < leni; ++i) { r = this.triggerOnSheetForTypeName(method, inst, families[i].name, sheet, value); ret = ret || r; } } return ret; // true if anything got triggered }; Runtime.prototype.triggerOnSheetForTypeName = function (method, inst, type_name, sheet, value) { var i, leni; var ret = false, ret2 = false; var trig, index; var fasttrigger = (typeof value !== "undefined"); var triggers = (fasttrigger ? sheet.fasttriggers : sheet.triggers); var obj_entry = triggers[type_name]; if (!obj_entry) return ret; var triggers_list = null; for (i = 0, leni = obj_entry.length; i < leni; ++i) { if (obj_entry[i].method == method) { triggers_list = obj_entry[i].evs; break; } } if (!triggers_list) return ret; var triggers_to_fire; if (fasttrigger) { triggers_to_fire = triggers_list[value]; } else { triggers_to_fire = triggers_list; } if (!triggers_to_fire) return null; for (i = 0, leni = triggers_to_fire.length; i < leni; i++) { trig = triggers_to_fire[i][0]; index = triggers_to_fire[i][1]; ret2 = this.executeSingleTrigger(inst, type_name, trig, index); ret = ret || ret2; } return ret; }; Runtime.prototype.executeSingleTrigger = function (inst, type_name, trig, index) { var i, leni; var ret = false; this.trigger_depth++; var current_event = this.getCurrentEventStack().current_event; if (current_event) this.pushCleanSol(current_event.solModifiersIncludingParents); var isrecursive = (this.trigger_depth > 1); // calling trigger from inside another trigger this.pushCleanSol(trig.solModifiersIncludingParents); if (isrecursive) this.pushLocalVarStack(); var event_stack = this.pushEventStack(trig); event_stack.current_event = trig; if (inst) { var sol = this.types[type_name].getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; this.types[type_name].applySolToContainer(); } var ok_to_run = true; if (trig.parent) { var temp_parents_arr = event_stack.temp_parents_arr; var cur_parent = trig.parent; while (cur_parent) { temp_parents_arr.push(cur_parent); cur_parent = cur_parent.parent; } temp_parents_arr.reverse(); for (i = 0, leni = temp_parents_arr.length; i < leni; i++) { if (!temp_parents_arr[i].run_pretrigger()) // parent event failed { ok_to_run = false; break; } } } if (ok_to_run) { this.execcount++; if (trig.orblock) trig.run_orblocktrigger(index); else trig.run(); ret = ret || event_stack.last_event_true; } this.popEventStack(); if (isrecursive) this.popLocalVarStack(); this.popSol(trig.solModifiersIncludingParents); if (current_event) this.popSol(current_event.solModifiersIncludingParents); if (this.hasPendingInstances && this.isInOnDestroy === 0 && triggerSheetIndex === 0 && !this.isRunningEvents) { this.ClearDeathRow(); } this.trigger_depth--; return ret; }; Runtime.prototype.getCurrentCondition = function () { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.conditions[evinfo.cndindex]; }; Runtime.prototype.getCurrentAction = function () { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.actions[evinfo.actindex]; }; Runtime.prototype.pushLocalVarStack = function () { this.localvar_stack_index++; if (this.localvar_stack_index >= this.localvar_stack.length) this.localvar_stack.push([]); }; Runtime.prototype.popLocalVarStack = function () { ; this.localvar_stack_index--; }; Runtime.prototype.getCurrentLocalVarStack = function () { return this.localvar_stack[this.localvar_stack_index]; }; Runtime.prototype.pushEventStack = function (cur_event) { this.event_stack_index++; if (this.event_stack_index >= this.event_stack.length) this.event_stack.push(new cr.eventStackFrame()); var ret = this.getCurrentEventStack(); ret.reset(cur_event); return ret; }; Runtime.prototype.popEventStack = function () { ; this.event_stack_index--; }; Runtime.prototype.getCurrentEventStack = function () { return this.event_stack[this.event_stack_index]; }; Runtime.prototype.pushLoopStack = function (name_) { this.loop_stack_index++; if (this.loop_stack_index >= this.loop_stack.length) { this.loop_stack.push(cr.seal({ name: name_, index: 0, stopped: false })); } var ret = this.getCurrentLoop(); ret.name = name_; ret.index = 0; ret.stopped = false; return ret; }; Runtime.prototype.popLoopStack = function () { ; this.loop_stack_index--; }; Runtime.prototype.getCurrentLoop = function () { return this.loop_stack[this.loop_stack_index]; }; Runtime.prototype.getEventVariableByName = function (name, scope) { var i, leni, j, lenj, sheet, e; while (scope) { for (i = 0, leni = scope.subevents.length; i < leni; i++) { e = scope.subevents[i]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } scope = scope.parent; } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) { sheet = this.eventsheets_by_index[i]; for (j = 0, lenj = sheet.events.length; j < lenj; j++) { e = sheet.events[j]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } } return null; }; Runtime.prototype.getLayoutBySid = function (sid_) { var i, len; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { if (this.layouts_by_index[i].sid === sid_) return this.layouts_by_index[i]; } return null; }; Runtime.prototype.getObjectTypeBySid = function (sid_) { var i, len; for (i = 0, len = this.types_by_index.length; i < len; i++) { if (this.types_by_index[i].sid === sid_) return this.types_by_index[i]; } return null; }; Runtime.prototype.getGroupBySid = function (sid_) { var i, len; for (i = 0, len = this.allGroups.length; i < len; i++) { if (this.allGroups[i].sid === sid_) return this.allGroups[i]; } return null; }; Runtime.prototype.doCanvasSnapshot = function (format_, quality_) { this.snapshotCanvas = [format_, quality_]; this.redraw = true; // force redraw so snapshot is always taken }; function makeSaveDb(e) { var db = e.target.result; db.createObjectStore("saves", { keyPath: "slot" }); }; function IndexedDB_WriteSlot(slot_, data_, oncomplete_, onerror_) { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function (e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"], "readwrite"); var objectStore = transaction.objectStore("saves"); var putReq = objectStore.put({"slot": slot_, "data": data_ }); putReq.onsuccess = oncomplete_; }; }; function IndexedDB_ReadSlot(slot_, oncomplete_, onerror_) { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function (e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"]); var objectStore = transaction.objectStore("saves"); var readReq = objectStore.get(slot_); readReq.onsuccess = function (e) { if (readReq.result) oncomplete_(readReq.result["data"]); else oncomplete_(null); }; }; }; Runtime.prototype.signalContinuousPreview = function () { this.signalledContinuousPreview = true; }; function doContinuousPreviewReload() { cr.logexport("Reloading for continuous preview"); if (!!window["c2cocoonjs"]) { CocoonJS["App"]["reload"](); } else { if (window.location.search.indexOf("continuous") > -1) window.location.reload(true); else window.location = window.location + "?continuous"; } }; Runtime.prototype.handleSaveLoad = function () { var self = this; var savingToSlot = this.saveToSlot; var savingJson = this.lastSaveJson; var loadingFromSlot = this.loadFromSlot; var continuous = false; if (this.signalledContinuousPreview) { continuous = true; savingToSlot = "__c2_continuouspreview"; this.signalledContinuousPreview = false; } if (savingToSlot.length) { this.ClearDeathRow(); savingJson = this.saveToJSONString(); if (window.indexedDB && !this.isCocoonJs) { IndexedDB_WriteSlot(savingToSlot, savingJson, function () { cr.logexport("Saved state to IndexedDB storage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); }, function (e) { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); } catch (f) { cr.logexport("Failed to save game state: " + e + "; " + f); } }); } else { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; this.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); } catch (e) { cr.logexport("Error saving to WebStorage: " + e); } } this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = ""; } if (loadingFromSlot.length) { if (window.indexedDB && !this.isCocoonJs) { IndexedDB_ReadSlot(loadingFromSlot, function (result_) { if (result_) { self.loadFromJson = result_; cr.logexport("Loaded state from IndexedDB storage (" + self.loadFromJson.length + " bytes)"); } else { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); } self.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); }, function (e) { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); self.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); }); } else { try { this.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + this.loadFromJson.length + " bytes)"); } catch (e) { this.loadFromJson = ""; } this.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } this.loadFromSlot = ""; this.saveToSlot = ""; } if (this.loadFromJson.length) { this.ClearDeathRow(); this.loadFromJSONString(this.loadFromJson); this.lastSaveJson = this.loadFromJson; this.trigger(cr.system_object.prototype.cnds.OnLoadComplete, null); this.lastSaveJson = ""; this.loadFromJson = ""; } }; function CopyExtraObject(extra) { var p, ret = {}; for (p in extra) { if (extra.hasOwnProperty(p)) { if (extra[p] instanceof cr.ObjectSet) continue; if (extra[p] && typeof extra[p].c2userdata !== "undefined") continue; if (p === "spriteCreatedDestroyCallback") continue; ret[p] = extra[p]; } } return ret; }; Runtime.prototype.saveToJSONString = function() { var i, len, j, lenj, type, layout, typeobj, g, c, a, v, p; var o = { "c2save": true, "version": 1, "rt": { "time": this.kahanTime.sum, "walltime": this.wallTime.sum, "timescale": this.timescale, "tickcount": this.tickcount, "execcount": this.execcount, "next_uid": this.next_uid, "running_layout": this.running_layout.sid, "start_time_offset": (Date.now() - this.start_time) }, "types": {}, "layouts": {}, "events": { "groups": {}, "cnds": {}, "acts": {}, "vars": {} } }; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; typeobj = { "instances": [] }; if (cr.hasAnyOwnProperty(type.extra)) typeobj["ex"] = CopyExtraObject(type.extra); for (j = 0, lenj = type.instances.length; j < lenj; j++) { typeobj["instances"].push(this.saveInstanceToJSON(type.instances[j])); } o["types"][type.sid.toString()] = typeobj; } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { layout = this.layouts_by_index[i]; o["layouts"][layout.sid.toString()] = layout.saveToJSON(); } var ogroups = o["events"]["groups"]; for (i = 0, len = this.allGroups.length; i < len; i++) { g = this.allGroups[i]; ogroups[g.sid.toString()] = this.groups_by_name[g.group_name].group_active; } var ocnds = o["events"]["cnds"]; for (p in this.cndsBySid) { if (this.cndsBySid.hasOwnProperty(p)) { c = this.cndsBySid[p]; if (cr.hasAnyOwnProperty(c.extra)) ocnds[p] = { "ex": CopyExtraObject(c.extra) }; } } var oacts = o["events"]["acts"]; for (p in this.actsBySid) { if (this.actsBySid.hasOwnProperty(p)) { a = this.actsBySid[p]; if (cr.hasAnyOwnProperty(a.extra)) oacts[p] = { "ex": a.extra }; } } var ovars = o["events"]["vars"]; for (p in this.varsBySid) { if (this.varsBySid.hasOwnProperty(p)) { v = this.varsBySid[p]; if (!v.is_constant && (!v.parent || v.is_static)) ovars[p] = v.data; } } o["system"] = this.system.saveToJSON(); return JSON.stringify(o); }; Runtime.prototype.refreshUidMap = function () { var i, len, type, j, lenj, inst; this.objectsByUid = {}; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; this.objectsByUid[inst.uid.toString()] = inst; } } }; Runtime.prototype.loadFromJSONString = function (str) { var o = JSON.parse(str); if (!o["c2save"]) return; // probably not a c2 save state if (o["version"] > 1) return; // from future version of c2; assume not compatible this.isLoadingState = true; var rt = o["rt"]; this.kahanTime.reset(); this.kahanTime.sum = rt["time"]; this.wallTime.reset(); this.wallTime.sum = rt["walltime"] || 0; this.timescale = rt["timescale"]; this.tickcount = rt["tickcount"]; this.execcount = rt["execcount"]; this.start_time = Date.now() - rt["start_time_offset"]; var layout_sid = rt["running_layout"]; if (layout_sid !== this.running_layout.sid) { var changeToLayout = this.getLayoutBySid(layout_sid); if (changeToLayout) this.doChangeLayout(changeToLayout); else return; // layout that was saved on has gone missing (deleted?) } var i, len, j, lenj, k, lenk, p, type, existing_insts, load_insts, inst, binst, layout, layer, g, iid, t; var otypes = o["types"]; for (p in otypes) { if (otypes.hasOwnProperty(p)) { type = this.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || this.typeHasNoSaveBehavior(type)) continue; if (otypes[p]["ex"]) type.extra = otypes[p]["ex"]; else cr.wipe(type.extra); existing_insts = type.instances; load_insts = otypes[p]["instances"]; for (i = 0, len = cr.min(existing_insts.length, load_insts.length); i < len; i++) { this.loadInstanceFromJSON(existing_insts[i], load_insts[i]); } for (i = load_insts.length, len = existing_insts.length; i < len; i++) this.DestroyInstance(existing_insts[i]); for (i = existing_insts.length, len = load_insts.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.running_layout.getLayerBySid(load_insts[i]["w"]["l"]); if (!layer) continue; } inst = this.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.loadInstanceFromJSON(inst, load_insts[i]); } type.stale_iids = true; } } this.ClearDeathRow(); this.refreshUidMap(); var olayouts = o["layouts"]; for (p in olayouts) { if (olayouts.hasOwnProperty(p)) { layout = this.getLayoutBySid(parseInt(p, 10)); if (!layout) continue; // must've gone missing layout.loadFromJSON(olayouts[p]); } } var ogroups = o["events"]["groups"]; for (p in ogroups) { if (ogroups.hasOwnProperty(p)) { g = this.getGroupBySid(parseInt(p, 10)); if (g && this.groups_by_name[g.group_name]) this.groups_by_name[g.group_name].setGroupActive(ogroups[p]); } } var ocnds = o["events"]["cnds"]; for (p in ocnds) { if (ocnds.hasOwnProperty(p) && this.cndsBySid.hasOwnProperty(p)) { this.cndsBySid[p].extra = ocnds[p]["ex"]; } } var oacts = o["events"]["acts"]; for (p in oacts) { if (oacts.hasOwnProperty(p) && this.actsBySid.hasOwnProperty(p)) { this.actsBySid[p].extra = oacts[p]["ex"]; } } var ovars = o["events"]["vars"]; for (p in ovars) { if (ovars.hasOwnProperty(p) && this.varsBySid.hasOwnProperty(p)) { this.varsBySid[p].data = ovars[p]; } } this.next_uid = rt["next_uid"]; this.isLoadingState = false; this.system.loadFromJSON(o["system"]); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (type.is_contained) { iid = inst.get_iid(); cr.clearArray(inst.siblings); for (k = 0, lenk = type.container.length; k < lenk; k++) { t = type.container[k]; if (type === t) continue; ; inst.siblings.push(t.instances[iid]); } } if (inst.afterLoad) inst.afterLoad(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.afterLoad) binst.afterLoad(); } } } } this.redraw = true; }; Runtime.prototype.saveInstanceToJSON = function(inst, state_only) { var i, len, world, behinst, et; var type = inst.type; var plugin = type.plugin; var o = {}; if (state_only) o["c2"] = true; // mark as known json data from Construct 2 else o["uid"] = inst.uid; if (cr.hasAnyOwnProperty(inst.extra)) o["ex"] = CopyExtraObject(inst.extra); if (inst.instance_vars && inst.instance_vars.length) { o["ivs"] = {}; for (i = 0, len = inst.instance_vars.length; i < len; i++) { o["ivs"][inst.type.instvar_sids[i].toString()] = inst.instance_vars[i]; } } if (plugin.is_world) { world = { "x": inst.x, "y": inst.y, "w": inst.width, "h": inst.height, "l": inst.layer.sid, "zi": inst.get_zindex() }; if (inst.angle !== 0) world["a"] = inst.angle; if (inst.opacity !== 1) world["o"] = inst.opacity; if (inst.hotspotX !== 0.5) world["hX"] = inst.hotspotX; if (inst.hotspotY !== 0.5) world["hY"] = inst.hotspotY; if (inst.blend_mode !== 0) world["bm"] = inst.blend_mode; if (!inst.visible) world["v"] = inst.visible; if (!inst.collisionsEnabled) world["ce"] = inst.collisionsEnabled; if (inst.my_timescale !== -1) world["mts"] = inst.my_timescale; if (type.effect_types.length) { world["fx"] = []; for (i = 0, len = type.effect_types.length; i < len; i++) { et = type.effect_types[i]; world["fx"].push({"name": et.name, "active": inst.active_effect_flags[et.index], "params": inst.effect_params[et.index] }); } } o["w"] = world; } if (inst.behavior_insts && inst.behavior_insts.length) { o["behs"] = {}; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { behinst = inst.behavior_insts[i]; if (behinst.saveToJSON) o["behs"][behinst.type.sid.toString()] = behinst.saveToJSON(); } } if (inst.saveToJSON) o["data"] = inst.saveToJSON(); return o; }; Runtime.prototype.getInstanceVarIndexBySid = function (type, sid_) { var i, len; for (i = 0, len = type.instvar_sids.length; i < len; i++) { if (type.instvar_sids[i] === sid_) return i; } return -1; }; Runtime.prototype.getBehaviorIndexBySid = function (inst, sid_) { var i, len; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].type.sid === sid_) return i; } return -1; }; Runtime.prototype.loadInstanceFromJSON = function(inst, o, state_only) { var p, i, len, iv, oivs, world, fxindex, obehs, behindex; var oldlayer; var type = inst.type; var plugin = type.plugin; if (state_only) { if (!o["c2"]) return; } else inst.uid = o["uid"]; if (o["ex"]) inst.extra = o["ex"]; else cr.wipe(inst.extra); oivs = o["ivs"]; if (oivs) { for (p in oivs) { if (oivs.hasOwnProperty(p)) { iv = this.getInstanceVarIndexBySid(type, parseInt(p, 10)); if (iv < 0 || iv >= inst.instance_vars.length) continue; // must've gone missing inst.instance_vars[iv] = oivs[p]; } } } if (plugin.is_world) { world = o["w"]; if (inst.layer.sid !== world["l"]) { oldlayer = inst.layer; inst.layer = this.running_layout.getLayerBySid(world["l"]); if (inst.layer) { oldlayer.removeFromInstanceList(inst, true); inst.layer.appendToInstanceList(inst, true); inst.set_bbox_changed(); inst.layer.setZIndicesStaleFrom(0); } else { inst.layer = oldlayer; if (!state_only) this.DestroyInstance(inst); } } inst.x = world["x"]; inst.y = world["y"]; inst.width = world["w"]; inst.height = world["h"]; inst.zindex = world["zi"]; inst.angle = world.hasOwnProperty("a") ? world["a"] : 0; inst.opacity = world.hasOwnProperty("o") ? world["o"] : 1; inst.hotspotX = world.hasOwnProperty("hX") ? world["hX"] : 0.5; inst.hotspotY = world.hasOwnProperty("hY") ? world["hY"] : 0.5; inst.visible = world.hasOwnProperty("v") ? world["v"] : true; inst.collisionsEnabled = world.hasOwnProperty("ce") ? world["ce"] : true; inst.my_timescale = world.hasOwnProperty("mts") ? world["mts"] : -1; inst.blend_mode = world.hasOwnProperty("bm") ? world["bm"] : 0;; inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); inst.set_bbox_changed(); if (world.hasOwnProperty("fx")) { for (i = 0, len = world["fx"].length; i < len; i++) { fxindex = type.getEffectIndexByName(world["fx"][i]["name"]); if (fxindex < 0) continue; // must've gone missing inst.active_effect_flags[fxindex] = world["fx"][i]["active"]; inst.effect_params[fxindex] = world["fx"][i]["params"]; } } inst.updateActiveEffects(); } obehs = o["behs"]; if (obehs) { for (p in obehs) { if (obehs.hasOwnProperty(p)) { behindex = this.getBehaviorIndexBySid(inst, parseInt(p, 10)); if (behindex < 0) continue; // must've gone missing inst.behavior_insts[behindex].loadFromJSON(obehs[p]); } } } if (o["data"]) inst.loadFromJSON(o["data"]); }; cr.runtime = Runtime; cr.createRuntime = function (canvasid) { return new Runtime(document.getElementById(canvasid)); }; cr.createDCRuntime = function (w, h) { return new Runtime({ "dc": true, "width": w, "height": h }); }; window["cr_createRuntime"] = cr.createRuntime; window["cr_createDCRuntime"] = cr.createDCRuntime; window["createCocoonJSRuntime"] = function () { window["c2cocoonjs"] = true; var canvas = document.createElement("screencanvas") || document.createElement("canvas"); canvas.screencanvas = true; document.body.appendChild(canvas); var rt = new Runtime(canvas); window["c2runtime"] = rt; window.addEventListener("orientationchange", function () { window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); }); window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; window["createEjectaRuntime"] = function () { var canvas = document.getElementById("canvas"); var rt = new Runtime(canvas); window["c2runtime"] = rt; window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; }()); window["cr_getC2Runtime"] = function() { var canvas = document.getElementById("c2canvas"); if (canvas) return canvas["c2runtime"]; else if (window["c2runtime"]) return window["c2runtime"]; else return null; } window["cr_getSnapshot"] = function (format_, quality_) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime.doCanvasSnapshot(format_, quality_); } window["cr_sizeCanvas"] = function(w, h) { if (w === 0 || h === 0) return; var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSize"](w, h); } window["cr_setSuspended"] = function(s) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSuspended"](s); } ; (function() { function Layout(runtime, m) { this.runtime = runtime; this.event_sheet = null; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); this.scale = 1.0; this.angle = 0; this.first_visit = true; this.name = m[0]; this.width = m[1]; this.height = m[2]; this.unbounded_scrolling = m[3]; this.sheetname = m[4]; this.sid = m[5]; var lm = m[6]; var i, len; this.layers = []; this.initial_types = []; for (i = 0, len = lm.length; i < len; i++) { var layer = new cr.layer(this, lm[i]); layer.number = i; cr.seal(layer); this.layers.push(layer); } var im = m[7]; this.initial_nonworld = []; for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]]; ; if (!type.default_instance) type.default_instance = inst; this.initial_nonworld.push(inst); if (this.initial_types.indexOf(type) === -1) this.initial_types.push(type); } this.effect_types = []; this.active_effect_types = []; this.shaders_preserve_opaqueness = true; this.effect_params = []; for (i = 0, len = m[8].length; i < len; i++) { this.effect_types.push({ id: m[8][i][0], name: m[8][i][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: i }); this.effect_params.push(m[8][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); this.persist_data = {}; }; Layout.prototype.saveObjectToPersist = function (inst) { var sidStr = inst.type.sid.toString(); if (!this.persist_data.hasOwnProperty(sidStr)) this.persist_data[sidStr] = []; var type_persist = this.persist_data[sidStr]; type_persist.push(this.runtime.saveInstanceToJSON(inst)); }; Layout.prototype.hasOpaqueBottomLayer = function () { var layer = this.layers[0]; return !layer.transparent && layer.opacity === 1.0 && !layer.forceOwnTexture && layer.visible; }; Layout.prototype.updateActiveEffects = function () { cr.clearArray(this.active_effect_types); this.shaders_preserve_opaqueness = true; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) { this.active_effect_types.push(et); if (!et.preservesOpaqueness) this.shaders_preserve_opaqueness = false; } } }; Layout.prototype.getEffectByName = function (name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; var created_instances = []; function sort_by_zindex(a, b) { return a.zindex - b.zindex; }; var first_layout = true; Layout.prototype.startRunning = function () { if (this.sheetname) { this.event_sheet = this.runtime.eventsheets[this.sheetname]; ; this.event_sheet.updateDeepIncludes(); } this.runtime.running_layout = this; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); var i, k, len, lenk, type, type_instances, inst, iid, t, s, p, q, type_data, layer; for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { type = this.runtime.types_by_index[i]; if (type.is_family) continue; // instances are only transferred for their real type type_instances = type.instances; for (k = 0, lenk = type_instances.length; k < lenk; k++) { inst = type_instances[k]; if (inst.layer) { var num = inst.layer.number; if (num >= this.layers.length) num = this.layers.length - 1; inst.layer = this.layers[num]; if (inst.layer.instances.indexOf(inst) === -1) inst.layer.instances.push(inst); inst.layer.zindices_stale = true; } } } if (!first_layout) { for (i = 0, len = this.layers.length; i < len; ++i) { this.layers[i].instances.sort(sort_by_zindex); } } var layer; cr.clearArray(created_instances); this.boundScrolling(); for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; layer.createInitialInstances(); // fills created_instances layer.updateViewport(null); } var uids_changed = false; if (!this.first_visit) { for (p in this.persist_data) { if (this.persist_data.hasOwnProperty(p)) { type = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || !this.runtime.typeHasPersistBehavior(type)) continue; type_data = this.persist_data[p]; for (i = 0, len = type_data.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.getLayerBySid(type_data[i]["w"]["l"]); if (!layer) continue; } inst = this.runtime.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.runtime.loadInstanceFromJSON(inst, type_data[i]); uids_changed = true; created_instances.push(inst); } cr.clearArray(type_data); } } for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].instances.sort(sort_by_zindex); this.layers[i].zindices_stale = true; // in case of duplicates/holes } } if (uids_changed) { this.runtime.ClearDeathRow(); this.runtime.refreshUidMap(); } for (i = 0; i < created_instances.length; i++) { inst = created_instances[i]; if (!inst.type.is_contained) continue; iid = inst.get_iid(); for (k = 0, lenk = inst.type.container.length; k < lenk; k++) { t = inst.type.container[k]; if (inst.type === t) continue; if (t.instances.length > iid) inst.siblings.push(t.instances[iid]); else { if (!t.default_instance) { } else { s = this.runtime.createInstanceFromInit(t.default_instance, inst.layer, true, inst.x, inst.y, true); this.runtime.ClearDeathRow(); t.updateIIDs(); inst.siblings.push(s); created_instances.push(s); // come back around and link up its own instances too } } } } for (i = 0, len = this.initial_nonworld.length; i < len; i++) { inst = this.runtime.createInstanceFromInit(this.initial_nonworld[i], null, true); ; } this.runtime.changelayout = null; this.runtime.ClearDeathRow(); if (this.runtime.ctx && !this.runtime.isDomFree) { for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; if (t.is_family || !t.instances.length || !t.preloadCanvas2D) continue; t.preloadCanvas2D(this.runtime.ctx); } } /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout start: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ for (i = 0, len = created_instances.length; i < len; i++) { inst = created_instances[i]; this.runtime.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnCreated, inst); } cr.clearArray(created_instances); if (!this.runtime.isLoadingState) { this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutStart, null); } this.first_visit = false; }; Layout.prototype.createGlobalNonWorlds = function () { var i, k, len, initial_inst, inst, type; for (i = 0, k = 0, len = this.initial_nonworld.length; i < len; i++) { initial_inst = this.initial_nonworld[i]; type = this.runtime.types_by_index[initial_inst[1]]; if (type.global) { if (!type.is_contained) { inst = this.runtime.createInstanceFromInit(initial_inst, null, true); } } else { this.initial_nonworld[k] = initial_inst; k++; } } cr.truncateArray(this.initial_nonworld, k); }; Layout.prototype.stopRunning = function () { ; /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout end: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ if (!this.runtime.isLoadingState) { this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutEnd, null); } this.runtime.isEndingLayout = true; cr.clearArray(this.runtime.system.waits); var i, leni, j, lenj; var layer_instances, inst, type; if (!this.first_visit) { for (i = 0, leni = this.layers.length; i < leni; i++) { this.layers[i].updateZIndices(); layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { if (this.runtime.typeHasPersistBehavior(inst.type)) this.saveObjectToPersist(inst); } } } } for (i = 0, leni = this.layers.length; i < leni; i++) { layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { this.runtime.DestroyInstance(inst); } } this.runtime.ClearDeathRow(); cr.clearArray(layer_instances); this.layers[i].zindices_stale = true; } for (i = 0, leni = this.runtime.types_by_index.length; i < leni; i++) { type = this.runtime.types_by_index[i]; if (type.global || type.plugin.is_world || type.plugin.singleglobal || type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) this.runtime.DestroyInstance(type.instances[j]); this.runtime.ClearDeathRow(); } first_layout = false; this.runtime.isEndingLayout = false; }; var temp_rect = new cr.rect(0, 0, 0, 0); Layout.prototype.recreateInitialObjects = function (type, x1, y1, x2, y2) { temp_rect.set(x1, y1, x2, y2); var i, len; for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].recreateInitialObjects(type, temp_rect); } }; Layout.prototype.draw = function (ctx) { var layout_canvas; var layout_ctx = ctx; var ctx_changed = false; var render_offscreen = !this.runtime.fullscreenScalingQuality; if (render_offscreen) { if (!this.runtime.layout_canvas) { this.runtime.layout_canvas = document.createElement("canvas"); layout_canvas = this.runtime.layout_canvas; layout_canvas.width = this.runtime.draw_width; layout_canvas.height = this.runtime.draw_height; this.runtime.layout_ctx = layout_canvas.getContext("2d"); ctx_changed = true; } layout_canvas = this.runtime.layout_canvas; layout_ctx = this.runtime.layout_ctx; if (layout_canvas.width !== this.runtime.draw_width) { layout_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layout_canvas.height !== this.runtime.draw_height) { layout_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { layout_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling; } } layout_ctx.globalAlpha = 1; layout_ctx.globalCompositeOperation = "source-over"; if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer()) layout_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && l.blend_mode !== 11 && (l.instances.length || !l.transparent)) l.draw(layout_ctx); else l.updateViewport(null); // even if not drawing, keep viewport up to date } if (render_offscreen) { ctx.drawImage(layout_canvas, 0, 0, this.runtime.width, this.runtime.height); } }; Layout.prototype.drawGL_earlyZPass = function (glw) { glw.setEarlyZPass(true); if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } var i, l; for (i = this.layers.length - 1; i >= 0; --i) { l = this.layers[i]; if (l.visible && l.opacity === 1 && l.shaders_preserve_opaqueness && l.blend_mode === 0 && (l.instances.length || !l.transparent)) { l.drawGL_earlyZPass(glw); } else { l.updateViewport(null); // even if not drawing, keep viewport up to date } } glw.setEarlyZPass(false); }; Layout.prototype.drawGL = function (glw) { var render_to_texture = (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality || this.runtime.enableFrontToBack); if (render_to_texture) { if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } } else { if (this.runtime.layout_tex) { glw.setRenderingToTexture(null); glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = null; } } if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer()) glw.clear(0, 0, 0, 0); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && (l.instances.length || !l.transparent)) l.drawGL(glw); else l.updateViewport(null); // even if not drawing, keep viewport up to date } if (render_to_texture) { if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && this.runtime.fullscreenScalingQuality)) { if (this.active_effect_types.length === 1) { var etindex = this.active_effect_types[0].index; glw.switchProgram(this.active_effect_types[0].shaderindex); glw.setProgramParameters(null, // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd this.scale, // layerScale this.angle, // layerAngle 0.0, 0.0, // viewOrigin this.runtime.draw_width / 2, this.runtime.draw_height / 2, // scrollPos this.runtime.kahanTime.sum, // seconds this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(this.active_effect_types[0].shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); } glw.setRenderingToTexture(null); // to backbuffer glw.setDepthTestEnabled(false); // ignore depth buffer, copy full texture glw.setOpacity(1); glw.setTexture(this.runtime.layout_tex); glw.setAlphaBlend(); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.width / 2; var halfh = this.runtime.height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); glw.setDepthTestEnabled(true); // turn depth test back on } else { this.renderEffectChain(glw, null, null, null); } } }; Layout.prototype.getRenderTarget = function() { if (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality || this.runtime.enableFrontToBack) { return this.runtime.layout_tex; } else { return null; } }; Layout.prototype.getMinLayerScale = function () { var m = this.layers[0].getScale(); var i, len, l; for (i = 1, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.parallaxX === 0 && l.parallaxY === 0) continue; if (l.getScale() < m) m = l.getScale(); } return m; }; Layout.prototype.scrollToX = function (x) { if (!this.unbounded_scrolling) { var widthBoundary = (this.runtime.draw_width * (1 / this.getMinLayerScale()) / 2); if (x > this.width - widthBoundary) x = this.width - widthBoundary; if (x < widthBoundary) x = widthBoundary; } if (this.scrollX !== x) { this.scrollX = x; this.runtime.redraw = true; } }; Layout.prototype.scrollToY = function (y) { if (!this.unbounded_scrolling) { var heightBoundary = (this.runtime.draw_height * (1 / this.getMinLayerScale()) / 2); if (y > this.height - heightBoundary) y = this.height - heightBoundary; if (y < heightBoundary) y = heightBoundary; } if (this.scrollY !== y) { this.scrollY = y; this.runtime.redraw = true; } }; Layout.prototype.boundScrolling = function () { this.scrollToX(this.scrollX); this.scrollToY(this.scrollY); }; Layout.prototype.renderEffectChain = function (glw, layer, inst, rendertarget) { var active_effect_types = inst ? inst.active_effect_types : layer ? layer.active_effect_types : this.active_effect_types; var layerScale = 1, layerAngle = 0, viewOriginLeft = 0, viewOriginTop = 0, viewOriginRight = this.runtime.draw_width, viewOriginBottom = this.runtime.draw_height; if (inst) { layerScale = inst.layer.getScale(); layerAngle = inst.layer.getAngle(); viewOriginLeft = inst.layer.viewLeft; viewOriginTop = inst.layer.viewTop; viewOriginRight = inst.layer.viewRight; viewOriginBottom = inst.layer.viewBottom; } else if (layer) { layerScale = layer.getScale(); layerAngle = layer.getAngle(); viewOriginLeft = layer.viewLeft; viewOriginTop = layer.viewTop; viewOriginRight = layer.viewRight; viewOriginBottom = layer.viewBottom; } var fx_tex = this.runtime.fx_tex; var i, len, last, temp, fx_index = 0, other_fx_index = 1; var y, h; var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var halfw = windowWidth / 2; var halfh = windowHeight / 2; var rcTex = layer ? layer.rcTex : this.rcTex; var rcTex2 = layer ? layer.rcTex2 : this.rcTex2; var screenleft = 0, clearleft = 0; var screentop = 0, cleartop = 0; var screenright = windowWidth, clearright = windowWidth; var screenbottom = windowHeight, clearbottom = windowHeight; var boxExtendHorizontal = 0; var boxExtendVertical = 0; var inst_layer_angle = inst ? inst.layer.getAngle() : 0; if (inst) { for (i = 0, len = active_effect_types.length; i < len; i++) { boxExtendHorizontal += glw.getProgramBoxExtendHorizontal(active_effect_types[i].shaderindex); boxExtendVertical += glw.getProgramBoxExtendVertical(active_effect_types[i].shaderindex); } var bbox = inst.bbox; screenleft = layer.layerToCanvas(bbox.left, bbox.top, true, true); screentop = layer.layerToCanvas(bbox.left, bbox.top, false, true); screenright = layer.layerToCanvas(bbox.right, bbox.bottom, true, true); screenbottom = layer.layerToCanvas(bbox.right, bbox.bottom, false, true); if (inst_layer_angle !== 0) { var screentrx = layer.layerToCanvas(bbox.right, bbox.top, true, true); var screentry = layer.layerToCanvas(bbox.right, bbox.top, false, true); var screenblx = layer.layerToCanvas(bbox.left, bbox.bottom, true, true); var screenbly = layer.layerToCanvas(bbox.left, bbox.bottom, false, true); temp = Math.min(screenleft, screenright, screentrx, screenblx); screenright = Math.max(screenleft, screenright, screentrx, screenblx); screenleft = temp; temp = Math.min(screentop, screenbottom, screentry, screenbly); screenbottom = Math.max(screentop, screenbottom, screentry, screenbly); screentop = temp; } screenleft -= boxExtendHorizontal; screentop -= boxExtendVertical; screenright += boxExtendHorizontal; screenbottom += boxExtendVertical; rcTex2.left = screenleft / windowWidth; rcTex2.top = 1 - screentop / windowHeight; rcTex2.right = screenright / windowWidth; rcTex2.bottom = 1 - screenbottom / windowHeight; clearleft = screenleft = cr.floor(screenleft); cleartop = screentop = cr.floor(screentop); clearright = screenright = cr.ceil(screenright); clearbottom = screenbottom = cr.ceil(screenbottom); clearleft -= boxExtendHorizontal; cleartop -= boxExtendVertical; clearright += boxExtendHorizontal; clearbottom += boxExtendVertical; if (screenleft < 0) screenleft = 0; if (screentop < 0) screentop = 0; if (screenright > windowWidth) screenright = windowWidth; if (screenbottom > windowHeight) screenbottom = windowHeight; if (clearleft < 0) clearleft = 0; if (cleartop < 0) cleartop = 0; if (clearright > windowWidth) clearright = windowWidth; if (clearbottom > windowHeight) clearbottom = windowHeight; rcTex.left = screenleft / windowWidth; rcTex.top = 1 - screentop / windowHeight; rcTex.right = screenright / windowWidth; rcTex.bottom = 1 - screenbottom / windowHeight; } else { rcTex.left = rcTex2.left = 0; rcTex.top = rcTex2.top = 0; rcTex.right = rcTex2.right = 1; rcTex.bottom = rcTex2.bottom = 1; } var pre_draw = (inst && (glw.programUsesDest(active_effect_types[0].shaderindex) || boxExtendHorizontal !== 0 || boxExtendVertical !== 0 || inst.opacity !== 1 || inst.type.plugin.must_predraw)) || (layer && !inst && layer.opacity !== 1); glw.setAlphaBlend(); if (pre_draw) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(0); glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { inst.drawGL(glw); } else { glw.setTexture(this.runtime.layer_tex); glw.setOpacity(layer.opacity); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst) { temp = rcTex.top; rcTex.top = rcTex.bottom; rcTex.bottom = temp; } fx_index = 1; other_fx_index = 0; } glw.setOpacity(1); var last = active_effect_types.length - 1; var post_draw = glw.programUsesCrossSampling(active_effect_types[last].shaderindex) || (!layer && !inst && !this.runtime.fullscreenScalingQuality); var etindex = 0; for (i = 0, len = active_effect_types.length; i < len; i++) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(active_effect_types[i].shaderindex); etindex = active_effect_types[i].index; if (glw.programIsAnimated(active_effect_types[i].shaderindex)) this.runtime.redraw = true; if (i == 0 && !pre_draw) { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { glw.setProgramParameters(rendertarget, // backTex 1.0 / inst.width, // pixelWidth 1.0 / inst.height, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, inst.effect_params[etindex]); // fx params inst.drawGL(glw); } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, layer ? // fx params layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(layer ? this.runtime.layer_tex : this.runtime.layout_tex); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst && !post_draw) { temp = screenbottom; screenbottom = screentop; screentop = temp; } } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, inst ? // fx params inst.effect_params[etindex] : layer ? layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(null); if (i === last && !post_draw) { if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); glw.setRenderingToTexture(rendertarget); } else { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); } glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); if (i === last && !post_draw) glw.setTexture(null); } fx_index = (fx_index === 0 ? 1 : 0); other_fx_index = (fx_index === 0 ? 1 : 0); // will be opposite to fx_index since it was just assigned } if (post_draw) { glw.switchProgram(0); if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); else { if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); halfw = this.runtime.width / 2; halfh = this.runtime.height / 2; screenleft = 0; screentop = 0; screenright = this.runtime.width; screenbottom = this.runtime.height; } } glw.setRenderingToTexture(rendertarget); glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); if (inst && active_effect_types.length === 1 && !pre_draw) glw.quadTex(screenleft, screentop, screenright, screentop, screenright, screenbottom, screenleft, screenbottom, rcTex); else glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); glw.setTexture(null); } }; Layout.prototype.getLayerBySid = function (sid_) { var i, len; for (i = 0, len = this.layers.length; i < len; i++) { if (this.layers[i].sid === sid_) return this.layers[i]; } return null; }; Layout.prototype.saveToJSON = function () { var i, len, layer, et; var o = { "sx": this.scrollX, "sy": this.scrollY, "s": this.scale, "a": this.angle, "w": this.width, "h": this.height, "fv": this.first_visit, // added r127 "persist": this.persist_data, "fx": [], "layers": {} }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; o["layers"][layer.sid.toString()] = layer.saveToJSON(); } return o; }; Layout.prototype.loadFromJSON = function (o) { var i, j, len, fx, p, layer; this.scrollX = o["sx"]; this.scrollY = o["sy"]; this.scale = o["s"]; this.angle = o["a"]; this.width = o["w"]; this.height = o["h"]; this.persist_data = o["persist"]; if (typeof o["fv"] !== "undefined") this.first_visit = o["fv"]; var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); var olayers = o["layers"]; for (p in olayers) { if (olayers.hasOwnProperty(p)) { layer = this.getLayerBySid(parseInt(p, 10)); if (!layer) continue; // must've gone missing layer.loadFromJSON(olayers[p]); } } }; cr.layout = Layout; function Layer(layout, m) { this.layout = layout; this.runtime = layout.runtime; this.instances = []; // running instances this.scale = 1.0; this.angle = 0; this.disableAngle = false; this.tmprect = new cr.rect(0, 0, 0, 0); this.tmpquad = new cr.quad(); this.viewLeft = 0; this.viewRight = 0; this.viewTop = 0; this.viewBottom = 0; this.zindices_stale = false; this.zindices_stale_from = -1; // first index that has changed, or -1 if no bound this.clear_earlyz_index = 0; this.name = m[0]; this.index = m[1]; this.sid = m[2]; this.visible = m[3]; // initially visible this.background_color = m[4]; this.transparent = m[5]; this.parallaxX = m[6]; this.parallaxY = m[7]; this.opacity = m[8]; this.forceOwnTexture = m[9]; this.useRenderCells = m[10]; this.zoomRate = m[11]; this.blend_mode = m[12]; this.effect_fallback = m[13]; this.compositeOp = "source-over"; this.srcBlend = 0; this.destBlend = 0; this.render_grid = null; this.last_render_list = alloc_arr(); this.render_list_stale = true; this.last_render_cells = new cr.rect(0, 0, -1, -1); this.cur_render_cells = new cr.rect(0, 0, -1, -1); if (this.useRenderCells) { this.render_grid = new cr.RenderGrid(this.runtime.original_width, this.runtime.original_height); } this.render_offscreen = false; var im = m[14]; var i, len; this.startup_initial_instances = []; // for restoring initial_instances after load this.initial_instances = []; this.created_globals = []; // global object UIDs already created - for save/load to avoid recreating for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]]; ; if (!type.default_instance) { type.default_instance = inst; type.default_layerindex = this.index; } this.initial_instances.push(inst); if (this.layout.initial_types.indexOf(type) === -1) this.layout.initial_types.push(type); } cr.shallowAssignArray(this.startup_initial_instances, this.initial_instances); this.effect_types = []; this.active_effect_types = []; this.shaders_preserve_opaqueness = true; this.effect_params = []; for (i = 0, len = m[15].length; i < len; i++) { this.effect_types.push({ id: m[15][i][0], name: m[15][i][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: i }); this.effect_params.push(m[15][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); }; Layer.prototype.updateActiveEffects = function () { cr.clearArray(this.active_effect_types); this.shaders_preserve_opaqueness = true; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) { this.active_effect_types.push(et); if (!et.preservesOpaqueness) this.shaders_preserve_opaqueness = false; } } }; Layer.prototype.getEffectByName = function (name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; Layer.prototype.createInitialInstances = function () { var i, k, len, inst, initial_inst, type, keep, hasPersistBehavior; for (i = 0, k = 0, len = this.initial_instances.length; i < len; i++) { initial_inst = this.initial_instances[i]; type = this.runtime.types_by_index[initial_inst[1]]; ; hasPersistBehavior = this.runtime.typeHasPersistBehavior(type); keep = true; if (!hasPersistBehavior || this.layout.first_visit) { inst = this.runtime.createInstanceFromInit(initial_inst, this, true); ; created_instances.push(inst); if (inst.type.global) { keep = false; this.created_globals.push(inst.uid); } } if (keep) { this.initial_instances[k] = this.initial_instances[i]; k++; } } this.initial_instances.length = k; this.runtime.ClearDeathRow(); // flushes creation row so IIDs will be correct if (!this.runtime.glwrap && this.effect_types.length) // no WebGL renderer and shaders used this.blend_mode = this.effect_fallback; // use fallback blend mode this.compositeOp = cr.effectToCompositeOp(this.blend_mode); if (this.runtime.gl) cr.setGLBlend(this, this.blend_mode, this.runtime.gl); this.render_list_stale = true; }; Layer.prototype.recreateInitialObjects = function (only_type, rc) { var i, len, initial_inst, type, wm, x, y, inst, j, lenj, s; var types_by_index = this.runtime.types_by_index; var only_type_is_family = only_type.is_family; var only_type_members = only_type.members; for (i = 0, len = this.initial_instances.length; i < len; ++i) { initial_inst = this.initial_instances[i]; wm = initial_inst[0]; x = wm[0]; y = wm[1]; if (!rc.contains_pt(x, y)) continue; // not in the given area type = types_by_index[initial_inst[1]]; if (type !== only_type) { if (only_type_is_family) { if (only_type_members.indexOf(type) < 0) continue; } else continue; // only_type is not a family, and the initial inst type does not match } inst = this.runtime.createInstanceFromInit(initial_inst, this, false); this.runtime.isInOnDestroy++; this.runtime.trigger(Object.getPrototypeOf(type.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; } }; Layer.prototype.removeFromInstanceList = function (inst, remove_from_grid) { var index = cr.fastIndexOf(this.instances, inst); if (index < 0) return; // not found if (remove_from_grid && this.useRenderCells && inst.rendercells && inst.rendercells.right >= inst.rendercells.left) { inst.update_bbox(); // make sure actually in its current rendercells this.render_grid.update(inst, inst.rendercells, null); // no new range provided - remove only inst.rendercells.set(0, 0, -1, -1); // set to invalid state to indicate not inserted } if (index === this.instances.length - 1) this.instances.pop(); else { cr.arrayRemove(this.instances, index); this.setZIndicesStaleFrom(index); } this.render_list_stale = true; }; Layer.prototype.appendToInstanceList = function (inst, add_to_grid) { ; inst.zindex = this.instances.length; this.instances.push(inst); if (add_to_grid && this.useRenderCells && inst.rendercells) { inst.set_bbox_changed(); // will cause immediate update and new insertion to grid } this.render_list_stale = true; }; Layer.prototype.prependToInstanceList = function (inst, add_to_grid) { ; this.instances.unshift(inst); this.setZIndicesStaleFrom(0); if (add_to_grid && this.useRenderCells && inst.rendercells) { inst.set_bbox_changed(); // will cause immediate update and new insertion to grid } }; Layer.prototype.moveInstanceAdjacent = function (inst, other, isafter) { ; var myZ = inst.get_zindex(); var insertZ = other.get_zindex(); cr.arrayRemove(this.instances, myZ); if (myZ < insertZ) insertZ--; if (isafter) insertZ++; if (insertZ === this.instances.length) this.instances.push(inst); else this.instances.splice(insertZ, 0, inst); this.setZIndicesStaleFrom(myZ < insertZ ? myZ : insertZ); }; Layer.prototype.setZIndicesStaleFrom = function (index) { if (this.zindices_stale_from === -1) // not yet set this.zindices_stale_from = index; else if (index < this.zindices_stale_from) // determine minimum z index affected this.zindices_stale_from = index; this.zindices_stale = true; this.render_list_stale = true; }; Layer.prototype.updateZIndices = function () { if (!this.zindices_stale) return; if (this.zindices_stale_from === -1) this.zindices_stale_from = 0; var i, len, inst; if (this.useRenderCells) { for (i = this.zindices_stale_from, len = this.instances.length; i < len; ++i) { inst = this.instances[i]; inst.zindex = i; this.render_grid.markRangeChanged(inst.rendercells); } } else { for (i = this.zindices_stale_from, len = this.instances.length; i < len; ++i) { this.instances[i].zindex = i; } } this.zindices_stale = false; this.zindices_stale_from = -1; }; Layer.prototype.getScale = function (include_aspect) { return this.getNormalScale() * (this.runtime.fullscreenScalingQuality || include_aspect ? this.runtime.aspect_scale : 1); }; Layer.prototype.getNormalScale = function () { return ((this.scale * this.layout.scale) - 1) * this.zoomRate + 1; }; Layer.prototype.getAngle = function () { if (this.disableAngle) return 0; return cr.clamp_angle(this.layout.angle + this.angle); }; var arr_cache = []; function alloc_arr() { if (arr_cache.length) return arr_cache.pop(); else return []; } function free_arr(a) { cr.clearArray(a); arr_cache.push(a); }; function mergeSortedZArrays(a, b, out) { var i = 0, j = 0, k = 0, lena = a.length, lenb = b.length, ai, bj; out.length = lena + lenb; for ( ; i < lena && j < lenb; ++k) { ai = a[i]; bj = b[j]; if (ai.zindex < bj.zindex) { out[k] = ai; ++i; } else { out[k] = bj; ++j; } } for ( ; i < lena; ++i, ++k) out[k] = a[i]; for ( ; j < lenb; ++j, ++k) out[k] = b[j]; }; var next_arr = []; function mergeAllSortedZArrays_pass(arr, first_pass) { var i, len, arr1, arr2, out; for (i = 0, len = arr.length; i < len - 1; i += 2) { arr1 = arr[i]; arr2 = arr[i+1]; out = alloc_arr(); mergeSortedZArrays(arr1, arr2, out); if (!first_pass) { free_arr(arr1); free_arr(arr2); } next_arr.push(out); } if (len % 2 === 1) { if (first_pass) { arr1 = alloc_arr(); cr.shallowAssignArray(arr1, arr[len - 1]); next_arr.push(arr1); } else { next_arr.push(arr[len - 1]); } } cr.shallowAssignArray(arr, next_arr); cr.clearArray(next_arr); }; function mergeAllSortedZArrays(arr) { var first_pass = true; while (arr.length > 1) { mergeAllSortedZArrays_pass(arr, first_pass); first_pass = false; } return arr[0]; }; var render_arr = []; Layer.prototype.getRenderCellInstancesToDraw = function () { ; this.updateZIndices(); this.render_grid.queryRange(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom, render_arr); if (!render_arr.length) return alloc_arr(); if (render_arr.length === 1) { var a = alloc_arr(); cr.shallowAssignArray(a, render_arr[0]); cr.clearArray(render_arr); return a; } var draw_list = mergeAllSortedZArrays(render_arr); cr.clearArray(render_arr); return draw_list; }; Layer.prototype.draw = function (ctx) { this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.blend_mode !== 0); var layer_canvas = this.runtime.canvas; var layer_ctx = ctx; var ctx_changed = false; if (this.render_offscreen) { if (!this.runtime.layer_canvas) { this.runtime.layer_canvas = document.createElement("canvas"); ; layer_canvas = this.runtime.layer_canvas; layer_canvas.width = this.runtime.draw_width; layer_canvas.height = this.runtime.draw_height; this.runtime.layer_ctx = layer_canvas.getContext("2d"); ; ctx_changed = true; } layer_canvas = this.runtime.layer_canvas; layer_ctx = this.runtime.layer_ctx; if (layer_canvas.width !== this.runtime.draw_width) { layer_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layer_canvas.height !== this.runtime.draw_height) { layer_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { layer_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling; } if (this.transparent) layer_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.globalAlpha = 1; layer_ctx.globalCompositeOperation = "source-over"; if (!this.transparent) { layer_ctx.fillStyle = "rgb(" + this.background_color[0] + "," + this.background_color[1] + "," + this.background_color[2] + ")"; layer_ctx.fillRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.save(); this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, layer_ctx); var myscale = this.getScale(); layer_ctx.scale(myscale, myscale); layer_ctx.translate(-px, -py); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, len, inst, last_inst = null; for (i = 0, len = instances_to_draw.length; i < len; ++i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstance(inst, layer_ctx); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; layer_ctx.restore(); if (this.render_offscreen) { ctx.globalCompositeOperation = this.compositeOp; ctx.globalAlpha = this.opacity; ctx.drawImage(layer_canvas, 0, 0); } }; Layer.prototype.drawInstance = function(inst, layer_ctx) { if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; layer_ctx.globalCompositeOperation = inst.compositeOp; inst.draw(layer_ctx); }; Layer.prototype.updateViewport = function (ctx) { this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, ctx); }; Layer.prototype.rotateViewport = function (px, py, ctx) { var myscale = this.getScale(); this.viewLeft = px; this.viewTop = py; this.viewRight = px + (this.runtime.draw_width * (1 / myscale)); this.viewBottom = py + (this.runtime.draw_height * (1 / myscale)); var myAngle = this.getAngle(); if (myAngle !== 0) { if (ctx) { ctx.translate(this.runtime.draw_width / 2, this.runtime.draw_height / 2); ctx.rotate(-myAngle); ctx.translate(this.runtime.draw_width / -2, this.runtime.draw_height / -2); } this.tmprect.set(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom); this.tmprect.offset((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); this.tmpquad.set_from_rotated_rect(this.tmprect, myAngle); this.tmpquad.bounding_box(this.tmprect); this.tmprect.offset((this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2); this.viewLeft = this.tmprect.left; this.viewTop = this.tmprect.top; this.viewRight = this.tmprect.right; this.viewBottom = this.tmprect.bottom; } } Layer.prototype.drawGL_earlyZPass = function (glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = this.forceOwnTexture; if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, inst, last_inst = null; for (i = instances_to_draw.length - 1; i >= 0; --i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstanceGL_earlyZPass(instances_to_draw[i], glw); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; if (!this.transparent) { this.clear_earlyz_index = this.runtime.earlyz_index++; glw.setEarlyZIndex(this.clear_earlyz_index); glw.setColorFillMode(1, 1, 1, 1); glw.fullscreenQuad(); // fill remaining space in depth buffer with current Z value glw.restoreEarlyZMode(); } }; Layer.prototype.drawGL = function (glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.active_effect_types.length > 0 || this.blend_mode !== 0); if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); if (this.transparent) glw.clear(0, 0, 0, 0); } if (!this.transparent) { if (this.runtime.enableFrontToBack) { glw.setEarlyZIndex(this.clear_earlyz_index); glw.setColorFillMode(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); glw.fullscreenQuad(); glw.setTextureFillMode(); } else { glw.clear(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); } } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, len, inst, last_inst = null; for (i = 0, len = instances_to_draw.length; i < len; ++i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstanceGL(instances_to_draw[i], glw); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; if (this.render_offscreen) { shaderindex = this.active_effect_types.length ? this.active_effect_types[0].shaderindex : 0; etindex = this.active_effect_types.length ? this.active_effect_types[0].index : 0; if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && this.opacity === 1)) { if (this.active_effect_types.length === 1) { glw.switchProgram(shaderindex); glw.setProgramParameters(this.layout.getRenderTarget(), // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd myscale, // layerScale this.getAngle(), this.viewLeft, this.viewTop, (this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2, this.runtime.kahanTime.sum, this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); glw.setRenderingToTexture(this.layout.getRenderTarget()); glw.setOpacity(this.opacity); glw.setTexture(this.runtime.layer_tex); glw.setBlend(this.srcBlend, this.destBlend); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.draw_width / 2; var halfh = this.runtime.draw_height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); } else { this.layout.renderEffectChain(glw, this, null, this.layout.getRenderTarget()); } } }; Layer.prototype.drawInstanceGL = function (inst, glw) { ; if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; glw.setEarlyZIndex(inst.earlyz_index); if (inst.uses_shaders) { this.drawInstanceWithShadersGL(inst, glw); } else { glw.switchProgram(0); // un-set any previously set shader glw.setBlend(inst.srcBlend, inst.destBlend); inst.drawGL(glw); } }; Layer.prototype.drawInstanceGL_earlyZPass = function (inst, glw) { ; if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; inst.earlyz_index = this.runtime.earlyz_index++; if (inst.blend_mode !== 0 || inst.opacity !== 1 || !inst.shaders_preserve_opaqueness || !inst.drawGL_earlyZPass) return; glw.setEarlyZIndex(inst.earlyz_index); inst.drawGL_earlyZPass(glw); }; Layer.prototype.drawInstanceWithShadersGL = function (inst, glw) { var shaderindex = inst.active_effect_types[0].shaderindex; var etindex = inst.active_effect_types[0].index; var myscale = this.getScale(); if (inst.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && !glw.programExtendsBox(shaderindex) && ((!inst.angle && !inst.layer.getAngle()) || !glw.programUsesDest(shaderindex)) && inst.opacity === 1 && !inst.type.plugin.must_predraw) { glw.switchProgram(shaderindex); glw.setBlend(inst.srcBlend, inst.destBlend); if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; var destStartX = 0, destStartY = 0, destEndX = 0, destEndY = 0; if (glw.programUsesDest(shaderindex)) { var bbox = inst.bbox; var screenleft = this.layerToCanvas(bbox.left, bbox.top, true, true); var screentop = this.layerToCanvas(bbox.left, bbox.top, false, true); var screenright = this.layerToCanvas(bbox.right, bbox.bottom, true, true); var screenbottom = this.layerToCanvas(bbox.right, bbox.bottom, false, true); destStartX = screenleft / windowWidth; destStartY = 1 - screentop / windowHeight; destEndX = screenright / windowWidth; destEndY = 1 - screenbottom / windowHeight; } glw.setProgramParameters(this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget(), // backTex 1.0 / inst.width, // pixelWidth 1.0 / inst.height, // pixelHeight destStartX, destStartY, destEndX, destEndY, myscale, this.getAngle(), this.viewLeft, this.viewTop, (this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2, this.runtime.kahanTime.sum, inst.effect_params[etindex]); inst.drawGL(glw); } else { this.layout.renderEffectChain(glw, this, inst, this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget()); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); } }; Layer.prototype.canvasToLayer = function (ptx, pty, getx, using_draw_area) { var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina) { ptx *= multiplier; pty *= multiplier; } var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var par_x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var par_y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var x = par_x; var y = par_y; var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x += ptx * invScale; y += pty * invScale; var a = this.getAngle(); if (a !== 0) { x -= par_x; y -= par_y; var cosa = Math.cos(a); var sina = Math.sin(a); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += par_x; y += par_y; } return getx ? x : y; }; Layer.prototype.layerToCanvas = function (ptx, pty, getx, using_draw_area) { var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var par_x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var par_y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var x = par_x; var y = par_y; var a = this.getAngle(); if (a !== 0) { ptx -= par_x; pty -= par_y; var cosa = Math.cos(-a); var sina = Math.sin(-a); var x_temp = (ptx * cosa) - (pty * sina); pty = (pty * cosa) + (ptx * sina); ptx = x_temp; ptx += par_x; pty += par_y; } var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x = (ptx - x) / invScale; y = (pty - y) / invScale; var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina && !using_draw_area) { x /= multiplier; y /= multiplier; } return getx ? x : y; }; Layer.prototype.rotatePt = function (x_, y_, getx) { if (this.getAngle() === 0) return getx ? x_ : y_; var nx = this.layerToCanvas(x_, y_, true); var ny = this.layerToCanvas(x_, y_, false); this.disableAngle = true; var px = this.canvasToLayer(nx, ny, true); var py = this.canvasToLayer(nx, ny, true); this.disableAngle = false; return getx ? px : py; }; Layer.prototype.saveToJSON = function () { var i, len, et; var o = { "s": this.scale, "a": this.angle, "vl": this.viewLeft, "vt": this.viewTop, "vr": this.viewRight, "vb": this.viewBottom, "v": this.visible, "bc": this.background_color, "t": this.transparent, "px": this.parallaxX, "py": this.parallaxY, "o": this.opacity, "zr": this.zoomRate, "fx": [], "cg": this.created_globals, // added r197; list of global UIDs already created "instances": [] }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } return o; }; Layer.prototype.loadFromJSON = function (o) { var i, j, len, p, inst, fx; this.scale = o["s"]; this.angle = o["a"]; this.viewLeft = o["vl"]; this.viewTop = o["vt"]; this.viewRight = o["vr"]; this.viewBottom = o["vb"]; this.visible = o["v"]; this.background_color = o["bc"]; this.transparent = o["t"]; this.parallaxX = o["px"]; this.parallaxY = o["py"]; this.opacity = o["o"]; this.zoomRate = o["zr"]; this.created_globals = o["cg"] || []; // added r197 cr.shallowAssignArray(this.initial_instances, this.startup_initial_instances); var temp_set = new cr.ObjectSet(); for (i = 0, len = this.created_globals.length; i < len; ++i) temp_set.add(this.created_globals[i]); for (i = 0, j = 0, len = this.initial_instances.length; i < len; ++i) { if (!temp_set.contains(this.initial_instances[i][2])) // UID in element 2 { this.initial_instances[j] = this.initial_instances[i]; ++j; } } cr.truncateArray(this.initial_instances, j); var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); this.instances.sort(sort_by_zindex); this.zindices_stale = true; }; cr.layer = Layer; }()); ; (function() { var allUniqueSolModifiers = []; function testSolsMatch(arr1, arr2) { var i, len = arr1.length; switch (len) { case 0: return true; case 1: return arr1[0] === arr2[0]; case 2: return arr1[0] === arr2[0] && arr1[1] === arr2[1]; default: for (i = 0; i < len; i++) { if (arr1[i] !== arr2[i]) return false; } return true; } }; function solArraySorter(t1, t2) { return t1.index - t2.index; }; function findMatchingSolModifier(arr) { var i, len, u, temp, subarr; if (arr.length === 2) { if (arr[0].index > arr[1].index) { temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } } else if (arr.length > 2) arr.sort(solArraySorter); // so testSolsMatch compares in same order if (arr.length >= allUniqueSolModifiers.length) allUniqueSolModifiers.length = arr.length + 1; if (!allUniqueSolModifiers[arr.length]) allUniqueSolModifiers[arr.length] = []; subarr = allUniqueSolModifiers[arr.length]; for (i = 0, len = subarr.length; i < len; i++) { u = subarr[i]; if (testSolsMatch(arr, u)) return u; } subarr.push(arr); return arr; }; function EventSheet(runtime, m) { this.runtime = runtime; this.triggers = {}; this.fasttriggers = {}; this.hasRun = false; this.includes = new cr.ObjectSet(); // all event sheets included by this sheet, at first-level indirection only this.deep_includes = []; // all includes from this sheet recursively, in trigger order this.already_included_sheets = []; // used while building deep_includes this.name = m[0]; var em = m[1]; // events model this.events = []; // triggers won't make it to this array var i, len; for (i = 0, len = em.length; i < len; i++) this.init_event(em[i], null, this.events); }; EventSheet.prototype.toString = function () { return this.name; }; EventSheet.prototype.init_event = function (m, parent, nontriggers) { switch (m[0]) { case 0: // event block { var block = new cr.eventblock(this, parent, m); cr.seal(block); if (block.orblock) { nontriggers.push(block); var i, len; for (i = 0, len = block.conditions.length; i < len; i++) { if (block.conditions[i].trigger) this.init_trigger(block, i); } } else { if (block.is_trigger()) this.init_trigger(block, 0); else nontriggers.push(block); } break; } case 1: // variable { var v = new cr.eventvariable(this, parent, m); cr.seal(v); nontriggers.push(v); break; } case 2: // include { var inc = new cr.eventinclude(this, parent, m); cr.seal(inc); nontriggers.push(inc); break; } default: ; } }; EventSheet.prototype.postInit = function () { var i, len; for (i = 0, len = this.events.length; i < len; i++) { this.events[i].postInit(i < len - 1 && this.events[i + 1].is_else_block); } }; EventSheet.prototype.updateDeepIncludes = function () { cr.clearArray(this.deep_includes); cr.clearArray(this.already_included_sheets); this.addDeepIncludes(this); cr.clearArray(this.already_included_sheets); }; EventSheet.prototype.addDeepIncludes = function (root_sheet) { var i, len, inc, sheet; var deep_includes = root_sheet.deep_includes; var already_included_sheets = root_sheet.already_included_sheets; var arr = this.includes.valuesRef(); for (i = 0, len = arr.length; i < len; ++i) { inc = arr[i]; sheet = inc.include_sheet; if (!inc.isActive() || root_sheet === sheet || already_included_sheets.indexOf(sheet) > -1) continue; already_included_sheets.push(sheet); sheet.addDeepIncludes(root_sheet); deep_includes.push(sheet); } }; EventSheet.prototype.run = function (from_include) { if (!this.runtime.resuming_breakpoint) { this.hasRun = true; if (!from_include) this.runtime.isRunningEvents = true; } var i, len; for (i = 0, len = this.events.length; i < len; i++) { var ev = this.events[i]; ev.run(); this.runtime.clearSol(ev.solModifiers); if (this.runtime.hasPendingInstances) this.runtime.ClearDeathRow(); } if (!from_include) this.runtime.isRunningEvents = false; }; function isPerformanceSensitiveTrigger(method) { if (cr.plugins_.Sprite && method === cr.plugins_.Sprite.prototype.cnds.OnFrameChanged) { return true; } return false; }; EventSheet.prototype.init_trigger = function (trig, index) { if (!trig.orblock) this.runtime.triggers_to_postinit.push(trig); // needs to be postInit'd later var i, len; var cnd = trig.conditions[index]; var type_name; if (cnd.type) type_name = cnd.type.name; else type_name = "system"; var fasttrigger = cnd.fasttrigger; var triggers = (fasttrigger ? this.fasttriggers : this.triggers); if (!triggers[type_name]) triggers[type_name] = []; var obj_entry = triggers[type_name]; var method = cnd.func; if (fasttrigger) { if (!cnd.parameters.length) // no parameters return; var firstparam = cnd.parameters[0]; if (firstparam.type !== 1 || // not a string param firstparam.expression.type !== 2) // not a string literal node { return; } var fastevs; var firstvalue = firstparam.expression.value.toLowerCase(); var i, len; for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { fastevs = obj_entry[i].evs; if (!fastevs[firstvalue]) fastevs[firstvalue] = [[trig, index]]; else fastevs[firstvalue].push([trig, index]); return; } } fastevs = {}; fastevs[firstvalue] = [[trig, index]]; obj_entry.push({ method: method, evs: fastevs }); } else { for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { obj_entry[i].evs.push([trig, index]); return; } } if (isPerformanceSensitiveTrigger(method)) obj_entry.unshift({ method: method, evs: [[trig, index]]}); else obj_entry.push({ method: method, evs: [[trig, index]]}); } }; cr.eventsheet = EventSheet; function Selection(type) { this.type = type; this.instances = []; // subset of picked instances this.else_instances = []; // subset of unpicked instances this.select_all = true; }; Selection.prototype.hasObjects = function () { if (this.select_all) return this.type.instances.length; else return this.instances.length; }; Selection.prototype.getObjects = function () { if (this.select_all) return this.type.instances; else return this.instances; }; /* Selection.prototype.ensure_picked = function (inst, skip_siblings) { var i, len; var orblock = inst.runtime.getCurrentEventStack().current_event.orblock; if (this.select_all) { this.select_all = false; if (orblock) { cr.shallowAssignArray(this.else_instances, inst.type.instances); cr.arrayFindRemove(this.else_instances, inst); } this.instances.length = 1; this.instances[0] = inst; } else { if (orblock) { i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { if (this.instances.indexOf(inst) === -1) this.instances.push(inst); } } if (!skip_siblings) { } }; */ Selection.prototype.pick_one = function (inst) { if (!inst) return; if (inst.runtime.getCurrentEventStack().current_event.orblock) { if (this.select_all) { cr.clearArray(this.instances); cr.shallowAssignArray(this.else_instances, inst.type.instances); this.select_all = false; } var i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { this.select_all = false; cr.clearArray(this.instances); this.instances[0] = inst; } }; cr.selection = Selection; function EventBlock(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.solModifiersIncludingParents = []; this.solWriterAfterCnds = false; // block does not change SOL after running its conditions this.group = false; // is group of events this.initially_activated = false; // if a group, is active on startup this.toplevelevent = false; // is an event block parented only by a top-level group this.toplevelgroup = false; // is parented only by other groups or is top-level (i.e. not in a subevent) this.has_else_block = false; // is followed by else ; this.conditions = []; this.actions = []; this.subevents = []; this.group_name = ""; this.group = false; this.initially_activated = false; this.group_active = false; this.contained_includes = null; if (m[1]) { this.group_name = m[1][1].toLowerCase(); this.group = true; this.initially_activated = !!m[1][0]; this.contained_includes = []; this.group_active = this.initially_activated; this.runtime.allGroups.push(this); this.runtime.groups_by_name[this.group_name] = this; } this.orblock = m[2]; this.sid = m[4]; if (!this.group) this.runtime.blocksBySid[this.sid.toString()] = this; var i, len; var cm = m[5]; for (i = 0, len = cm.length; i < len; i++) { var cnd = new cr.condition(this, cm[i]); cnd.index = i; cr.seal(cnd); this.conditions.push(cnd); /* if (cnd.is_logical()) this.is_logical = true; if (cnd.type && !cnd.type.plugin.singleglobal && this.cndReferences.indexOf(cnd.type) === -1) this.cndReferences.push(cnd.type); */ this.addSolModifier(cnd.type); } var am = m[6]; for (i = 0, len = am.length; i < len; i++) { var act = new cr.action(this, am[i]); act.index = i; cr.seal(act); this.actions.push(act); } if (m.length === 8) { var em = m[7]; for (i = 0, len = em.length; i < len; i++) this.sheet.init_event(em[i], this, this.subevents); } this.is_else_block = false; if (this.conditions.length) { this.is_else_block = (this.conditions[0].type == null && this.conditions[0].func == cr.system_object.prototype.cnds.Else); } }; window["_c2hh_"] = "F8BD88175F0B2F14B2CB797396461D31839036A8"; EventBlock.prototype.postInit = function (hasElse/*, prevBlock_*/) { var i, len; var p = this.parent; if (this.group) { this.toplevelgroup = true; while (p) { if (!p.group) { this.toplevelgroup = false; break; } p = p.parent; } } this.toplevelevent = !this.is_trigger() && (!this.parent || (this.parent.group && this.parent.toplevelgroup)); this.has_else_block = !!hasElse; this.solModifiersIncludingParents = this.solModifiers.slice(0); p = this.parent; while (p) { for (i = 0, len = p.solModifiers.length; i < len; i++) this.addParentSolModifier(p.solModifiers[i]); p = p.parent; } this.solModifiers = findMatchingSolModifier(this.solModifiers); this.solModifiersIncludingParents = findMatchingSolModifier(this.solModifiersIncludingParents); var i, len/*, s*/; for (i = 0, len = this.conditions.length; i < len; i++) this.conditions[i].postInit(); for (i = 0, len = this.actions.length; i < len; i++) this.actions[i].postInit(); for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].postInit(i < len - 1 && this.subevents[i + 1].is_else_block); } /* if (this.is_else_block && this.prev_block) { for (i = 0, len = this.prev_block.solModifiers.length; i < len; i++) { s = this.prev_block.solModifiers[i]; if (this.solModifiers.indexOf(s) === -1) this.solModifiers.push(s); } } */ }; EventBlock.prototype.setGroupActive = function (a) { if (this.group_active === !!a) return; // same state this.group_active = !!a; var i, len; for (i = 0, len = this.contained_includes.length; i < len; ++i) { this.contained_includes[i].updateActive(); } if (len > 0 && this.runtime.running_layout.event_sheet) this.runtime.running_layout.event_sheet.updateDeepIncludes(); }; function addSolModifierToList(type, arr) { var i, len, t; if (!type) return; if (arr.indexOf(type) === -1) arr.push(type); if (type.is_contained) { for (i = 0, len = type.container.length; i < len; i++) { t = type.container[i]; if (type === t) continue; // already handled if (arr.indexOf(t) === -1) arr.push(t); } } }; EventBlock.prototype.addSolModifier = function (type) { addSolModifierToList(type, this.solModifiers); }; EventBlock.prototype.addParentSolModifier = function (type) { addSolModifierToList(type, this.solModifiersIncludingParents); }; EventBlock.prototype.setSolWriterAfterCnds = function () { this.solWriterAfterCnds = true; if (this.parent) this.parent.setSolWriterAfterCnds(); }; EventBlock.prototype.is_trigger = function () { if (!this.conditions.length) // no conditions return false; else return this.conditions[0].trigger; }; EventBlock.prototype.run = function () { var i, len, c, any_true = false, cnd_result; var runtime = this.runtime; var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var conditions = this.conditions; if (!this.is_else_block) evinfo.else_branch_ran = false; if (this.orblock) { if (conditions.length === 0) any_true = true; // be sure to run if empty block evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { c = conditions[evinfo.cndindex]; if (c.trigger) // skip triggers when running OR block continue; cnd_result = c.run(); if (cnd_result) // make sure all conditions run and run if any were true any_true = true; } evinfo.last_event_true = any_true; if (any_true) this.run_actions_and_subevents(); } else { evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { cnd_result = conditions[evinfo.cndindex].run(); if (!cnd_result) // condition failed { evinfo.last_event_true = false; if (this.toplevelevent && runtime.hasPendingInstances) runtime.ClearDeathRow(); return; // bail out now } } evinfo.last_event_true = true; this.run_actions_and_subevents(); } this.end_run(evinfo); }; EventBlock.prototype.end_run = function (evinfo) { if (evinfo.last_event_true && this.has_else_block) evinfo.else_branch_ran = true; if (this.toplevelevent && this.runtime.hasPendingInstances) this.runtime.ClearDeathRow(); }; EventBlock.prototype.run_orblocktrigger = function (index) { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; if (this.conditions[index].run()) { this.run_actions_and_subevents(); this.runtime.getCurrentEventStack().last_event_true = true; } }; EventBlock.prototype.run_actions_and_subevents = function () { var evinfo = this.runtime.getCurrentEventStack(); var len; for (evinfo.actindex = 0, len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.resume_actions_and_subevents = function () { var evinfo = this.runtime.getCurrentEventStack(); var len; for (len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.run_subevents = function () { if (!this.subevents.length) return; var i, len, subev, pushpop/*, skipped_pop = false, pop_modifiers = null*/; var last = this.subevents.length - 1; this.runtime.pushEventStack(this); if (this.solWriterAfterCnds) { for (i = 0, len = this.subevents.length; i < len; i++) { subev = this.subevents[i]; pushpop = (!this.toplevelgroup || (!this.group && i < last)); if (pushpop) this.runtime.pushCopySol(subev.solModifiers); subev.run(); if (pushpop) this.runtime.popSol(subev.solModifiers); else this.runtime.clearSol(subev.solModifiers); } } else { for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].run(); } } this.runtime.popEventStack(); }; EventBlock.prototype.run_pretrigger = function () { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var any_true = false; var i, len; for (evinfo.cndindex = 0, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { ; if (this.conditions[evinfo.cndindex].run()) any_true = true; else if (!this.orblock) // condition failed (let OR blocks run all conditions anyway) return false; // bail out } return this.orblock ? any_true : true; }; EventBlock.prototype.retrigger = function () { this.runtime.execcount++; var prevcndindex = this.runtime.getCurrentEventStack().cndindex; var len; var evinfo = this.runtime.pushEventStack(this); if (!this.orblock) { for (evinfo.cndindex = prevcndindex + 1, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { if (!this.conditions[evinfo.cndindex].run()) // condition failed { this.runtime.popEventStack(); // moving up level of recursion return false; // bail out } } } this.run_actions_and_subevents(); this.runtime.popEventStack(); return true; // ran an iteration }; EventBlock.prototype.isFirstConditionOfType = function (cnd) { var cndindex = cnd.index; if (cndindex === 0) return true; --cndindex; for ( ; cndindex >= 0; --cndindex) { if (this.conditions[cndindex].type === cnd.type) return false; } return true; }; cr.eventblock = EventBlock; function Condition(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = this.runtime.GetObjectReference(m[1]); ; this.trigger = (m[3] > 0); this.fasttrigger = (m[3] === 2); this.looping = m[4]; this.inverted = m[5]; this.isstatic = m[6]; this.sid = m[7]; this.runtime.cndsBySid[this.sid.toString()] = this; if (m[0] === -1) // system object { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]]; ; if (this.isstatic) this.run = this.run_static; else this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]); ; this.beh_index = this.type.getBehaviorIndexByName(m[2]); ; } else { this.behaviortype = null; this.beh_index = -1; } if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); } if (this.fasttrigger) this.run = this.run_true; if (m.length === 10) { var i, len; var em = m[9]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Condition.prototype.postInit = function () { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; /* Condition.prototype.is_logical = function () { return !this.type || this.type.plugin.singleglobal; }; */ Condition.prototype.run_true = function () { return true; }; Condition.prototype.run_system = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); return cr.xor(this.func.apply(this.runtime.system, this.results), this.inverted); }; Condition.prototype.run_static = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); var ret = this.func.apply(this.behaviortype ? this.behaviortype : this.type, this.results); this.type.applySolToContainer(); return ret; }; Condition.prototype.run_object = function () { var i, j, k, leni, lenj, p, ret, met, inst, s, sol2; var type = this.type; var sol = type.getCurrentSol(); var is_orblock = this.block.orblock && !this.trigger; // triggers in OR blocks need to work normally var offset = 0; var is_contained = type.is_contained; var is_family = type.is_family; var family_index = type.family_index; var beh_index = this.beh_index; var is_beh = (beh_index > -1); var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var inverted = this.inverted; var func = this.func; var arr, container; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } if (sol.select_all) { cr.clearArray(sol.instances); // clear contents cr.clearArray(sol.else_instances); arr = type.instances; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i]; ; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); met = cr.xor(ret, inverted); if (met) sol.instances.push(inst); else if (is_orblock) // in OR blocks, keep the instances not meeting the condition for subsequent testing sol.else_instances.push(inst); } if (type.finish) type.finish(true); sol.select_all = false; type.applySolToContainer(); return sol.hasObjects(); } else { k = 0; var using_else_instances = (is_orblock && !this.block.isFirstConditionOfType(this)); arr = (using_else_instances ? sol.else_instances : sol.instances); var any_true = false; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i]; ; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; if (using_else_instances) { sol.instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances.push(s); } } } else { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances[k] = s; } } k++; } } else { if (using_else_instances) { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances[k] = s; } } k++; } else if (is_orblock) { sol.else_instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances.push(s); } } } } } cr.truncateArray(arr, k); if (is_contained) { container = type.container; for (i = 0, leni = container.length; i < leni; i++) { sol2 = container[i].getCurrentSol(); if (using_else_instances) cr.truncateArray(sol2.else_instances, k); else cr.truncateArray(sol2.instances, k); } } var pick_in_finish = any_true; // don't pick in finish() if we're only doing the logic test below if (using_else_instances && !any_true) { for (i = 0, leni = sol.instances.length; i < leni; i++) { inst = sol.instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; j++) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); } } if (is_beh) ret = func.apply(inst.behavior_insts[beh_index], results); else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; break; // got our flag, don't need to test any more } } } if (type.finish) type.finish(pick_in_finish || is_orblock); return is_orblock ? any_true : sol.hasObjects(); } }; cr.condition = Condition; function Action(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = this.runtime.GetObjectReference(m[1]); ; if (m[0] === -1) // system { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]]; ; this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]); ; this.beh_index = this.type.getBehaviorIndexByName(m[2]); ; } else { this.behaviortype = null; this.beh_index = -1; } } this.sid = m[3]; this.runtime.actsBySid[this.sid.toString()] = this; if (m.length === 6) { var i, len; var em = m[5]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Action.prototype.postInit = function () { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; Action.prototype.run_system = function () { var runtime = this.runtime; var i, len; var parameters = this.parameters; var results = this.results; for (i = 0, len = parameters.length; i < len; ++i) results[i] = parameters[i].get(); return this.func.apply(runtime.system, results); }; Action.prototype.run_object = function () { var type = this.type; var beh_index = this.beh_index; var family_index = type.family_index; var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var func = this.func; var instances = type.getCurrentSol().getObjects(); var is_family = type.is_family; var is_beh = (beh_index > -1); var i, j, leni, lenj, p, inst, offset; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } for (i = 0, leni = instances.length; i < leni; ++i) { inst = instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // pass i to use as default SOL index } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } func.apply(inst.behavior_insts[beh_index + offset], results); } else func.apply(inst, results); } return false; }; cr.action = Action; var tempValues = []; var tempValuesPtr = -1; function pushTempValue() { tempValuesPtr++; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; function popTempValue() { tempValuesPtr--; }; function Parameter(owner, m) { this.owner = owner; this.block = owner.block; this.sheet = owner.sheet; this.runtime = owner.runtime; this.type = m[0]; this.expression = null; this.solindex = 0; this.get = null; this.combosel = 0; this.layout = null; this.key = 0; this.object = null; this.index = 0; this.varname = null; this.eventvar = null; this.fileinfo = null; this.subparams = null; this.variadicret = null; this.subparams = null; this.variadicret = null; this.variesPerInstance = false; var i, len, param; switch (m[0]) { case 0: // number case 7: // any this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp; break; case 1: // string this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp_str; break; case 5: // layer this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_layer; break; case 3: // combo case 8: // cmp this.combosel = m[1]; this.get = this.get_combosel; break; case 6: // layout this.layout = this.runtime.layouts[m[1]]; ; this.get = this.get_layout; break; case 9: // keyb this.key = m[1]; this.get = this.get_key; break; case 4: // object this.object = this.runtime.types_by_index[m[1]]; ; this.get = this.get_object; this.block.addSolModifier(this.object); if (this.owner instanceof cr.action) this.block.setSolWriterAfterCnds(); else if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); break; case 10: // instvar this.index = m[1]; if (owner.type.is_family) { this.get = this.get_familyvar; this.variesPerInstance = true; } else this.get = this.get_instvar; break; case 11: // eventvar this.varname = m[1]; this.eventvar = null; this.get = this.get_eventvar; break; case 2: // audiofile ["name", ismusic] case 12: // fileinfo "name" this.fileinfo = m[1]; this.get = this.get_audiofile; break; case 13: // variadic this.get = this.get_variadic; this.subparams = []; this.variadicret = []; for (i = 1, len = m.length; i < len; i++) { param = new cr.parameter(this.owner, m[i]); cr.seal(param); this.subparams.push(param); this.variadicret.push(0); } break; default: ; } }; Parameter.prototype.postInit = function () { var i, len; if (this.type === 11) // eventvar { this.eventvar = this.runtime.getEventVariableByName(this.varname, this.block.parent); ; } else if (this.type === 13) // variadic, postInit all sub-params { for (i = 0, len = this.subparams.length; i < len; i++) this.subparams[i].postInit(); } if (this.expression) this.expression.postInit(); }; Parameter.prototype.maybeVaryForType = function (t) { if (this.variesPerInstance) return; // already varies per instance, no need to check again if (!t) return; // never vary for system type if (!t.plugin.singleglobal) { this.variesPerInstance = true; return; } }; Parameter.prototype.setVaries = function () { this.variesPerInstance = true; }; Parameter.prototype.get_exp = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); return temp.data; // return actual JS value, not expvalue }; Parameter.prototype.get_exp_str = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); if (cr.is_string(temp.data)) return temp.data; else return ""; }; Parameter.prototype.get_object = function () { return this.object; }; Parameter.prototype.get_combosel = function () { return this.combosel; }; Parameter.prototype.get_layer = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); if (temp.is_number()) return this.runtime.getLayerByNumber(temp.data); else return this.runtime.getLayerByName(temp.data); } Parameter.prototype.get_layout = function () { return this.layout; }; Parameter.prototype.get_key = function () { return this.key; }; Parameter.prototype.get_instvar = function () { return this.index; }; Parameter.prototype.get_familyvar = function (solindex_) { var solindex = solindex_ || 0; var familytype = this.owner.type; var realtype = null; var sol = familytype.getCurrentSol(); var objs = sol.getObjects(); if (objs.length) realtype = objs[solindex % objs.length].type; else if (sol.else_instances.length) realtype = sol.else_instances[solindex % sol.else_instances.length].type; else if (familytype.instances.length) realtype = familytype.instances[solindex % familytype.instances.length].type; else return 0; return this.index + realtype.family_var_map[familytype.family_index]; }; Parameter.prototype.get_eventvar = function () { return this.eventvar; }; Parameter.prototype.get_audiofile = function () { return this.fileinfo; }; Parameter.prototype.get_variadic = function () { var i, len; for (i = 0, len = this.subparams.length; i < len; i++) { this.variadicret[i] = this.subparams[i].get(); } return this.variadicret; }; cr.parameter = Parameter; function EventVariable(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.name = m[1]; this.vartype = m[2]; this.initial = m[3]; this.is_static = !!m[4]; this.is_constant = !!m[5]; this.sid = m[6]; this.runtime.varsBySid[this.sid.toString()] = this; this.data = this.initial; // note: also stored in event stack frame for local nonstatic nonconst vars if (this.parent) // local var { if (this.is_static || this.is_constant) this.localIndex = -1; else this.localIndex = this.runtime.stackLocalCount++; this.runtime.all_local_vars.push(this); } else // global var { this.localIndex = -1; this.runtime.all_global_vars.push(this); } }; EventVariable.prototype.postInit = function () { this.solModifiers = findMatchingSolModifier(this.solModifiers); }; EventVariable.prototype.setValue = function (x) { ; var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs) this.data = x; else // local nonstatic variable: use event stack to keep value at this level of recursion { if (this.localIndex >= lvs.length) lvs.length = this.localIndex + 1; lvs[this.localIndex] = x; } }; EventVariable.prototype.getValue = function () { var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs || this.is_constant) return this.data; else // local nonstatic variable { if (this.localIndex >= lvs.length) { ; return this.initial; } if (typeof lvs[this.localIndex] === "undefined") { ; return this.initial; } return lvs[this.localIndex]; } }; EventVariable.prototype.run = function () { if (this.parent && !this.is_static && !this.is_constant) this.setValue(this.initial); }; cr.eventvariable = EventVariable; function EventInclude(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.include_sheet = null; // determined in postInit this.include_sheet_name = m[1]; this.active = true; }; EventInclude.prototype.toString = function () { return "include:" + this.include_sheet.toString(); }; EventInclude.prototype.postInit = function () { this.include_sheet = this.runtime.eventsheets[this.include_sheet_name]; ; ; this.sheet.includes.add(this); this.solModifiers = findMatchingSolModifier(this.solModifiers); var p = this.parent; while (p) { if (p.group) p.contained_includes.push(this); p = p.parent; } this.updateActive(); }; EventInclude.prototype.run = function () { if (this.parent) this.runtime.pushCleanSol(this.runtime.types_by_index); if (!this.include_sheet.hasRun) this.include_sheet.run(true); // from include if (this.parent) this.runtime.popSol(this.runtime.types_by_index); }; EventInclude.prototype.updateActive = function () { var p = this.parent; while (p) { if (p.group && !p.group_active) { this.active = false; return; } p = p.parent; } this.active = true; }; EventInclude.prototype.isActive = function () { return this.active; }; cr.eventinclude = EventInclude; function EventStackFrame() { this.temp_parents_arr = []; this.reset(null); cr.seal(this); }; EventStackFrame.prototype.reset = function (cur_event) { this.current_event = cur_event; this.cndindex = 0; this.actindex = 0; cr.clearArray(this.temp_parents_arr); this.last_event_true = false; this.else_branch_ran = false; this.any_true_state = false; }; EventStackFrame.prototype.isModifierAfterCnds = function () { if (this.current_event.solWriterAfterCnds) return true; if (this.cndindex < this.current_event.conditions.length - 1) return !!this.current_event.solModifiers.length; return false; }; cr.eventStackFrame = EventStackFrame; }()); (function() { function ExpNode(owner_, m) { this.owner = owner_; this.runtime = owner_.runtime; this.type = m[0]; ; this.get = [this.eval_int, this.eval_float, this.eval_string, this.eval_unaryminus, this.eval_add, this.eval_subtract, this.eval_multiply, this.eval_divide, this.eval_mod, this.eval_power, this.eval_and, this.eval_or, this.eval_equal, this.eval_notequal, this.eval_less, this.eval_lessequal, this.eval_greater, this.eval_greaterequal, this.eval_conditional, this.eval_system_exp, this.eval_object_exp, this.eval_instvar_exp, this.eval_behavior_exp, this.eval_eventvar_exp][this.type]; var paramsModel = null; this.value = null; this.first = null; this.second = null; this.third = null; this.func = null; this.results = null; this.parameters = null; this.object_type = null; this.beh_index = -1; this.instance_expr = null; this.varindex = -1; this.behavior_type = null; this.varname = null; this.eventvar = null; this.return_string = false; switch (this.type) { case 0: // int case 1: // float case 2: // string this.value = m[1]; break; case 3: // unaryminus this.first = new cr.expNode(owner_, m[1]); break; case 18: // conditional this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); this.third = new cr.expNode(owner_, m[3]); break; case 19: // system_exp this.func = this.runtime.GetObjectReference(m[1]); ; if (this.func === cr.system_object.prototype.exps.random || this.func === cr.system_object.prototype.exps.choose) { this.owner.setVaries(); } this.results = []; this.parameters = []; if (m.length === 3) { paramsModel = m[2]; this.results.length = paramsModel.length + 1; // must also fit 'ret' } else this.results.length = 1; // to fit 'ret' break; case 20: // object_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.beh_index = -1; this.func = this.runtime.GetObjectReference(m[2]); this.return_string = m[3]; if (cr.plugins_.Function && this.func === cr.plugins_.Function.prototype.exps.Call) { this.owner.setVaries(); } if (m[4]) this.instance_expr = new cr.expNode(owner_, m[4]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 6) { paramsModel = m[5]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 21: // instvar_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.return_string = m[2]; if (m[3]) this.instance_expr = new cr.expNode(owner_, m[3]); else this.instance_expr = null; this.varindex = m[4]; break; case 22: // behavior_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.behavior_type = this.object_type.getBehaviorByName(m[2]); ; this.beh_index = this.object_type.getBehaviorIndexByName(m[2]); this.func = this.runtime.GetObjectReference(m[3]); this.return_string = m[4]; if (m[5]) this.instance_expr = new cr.expNode(owner_, m[5]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 7) { paramsModel = m[6]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 23: // eventvar_exp this.varname = m[1]; this.eventvar = null; // assigned in postInit break; } this.owner.maybeVaryForType(this.object_type); if (this.type >= 4 && this.type <= 17) { this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); } if (paramsModel) { var i, len; for (i = 0, len = paramsModel.length; i < len; i++) this.parameters.push(new cr.expNode(owner_, paramsModel[i])); } cr.seal(this); }; ExpNode.prototype.postInit = function () { if (this.type === 23) // eventvar_exp { this.eventvar = this.owner.runtime.getEventVariableByName(this.varname, this.owner.block.parent); ; } if (this.first) this.first.postInit(); if (this.second) this.second.postInit(); if (this.third) this.third.postInit(); if (this.instance_expr) this.instance_expr.postInit(); if (this.parameters) { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.parameters[i].postInit(); } }; var tempValues = []; var tempValuesPtr = -1; function pushTempValue() { ++tempValuesPtr; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; function popTempValue() { --tempValuesPtr; }; function eval_params(parameters, results, temp) { var i, len; for (i = 0, len = parameters.length; i < len; ++i) { parameters[i].get(temp); results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue } } ExpNode.prototype.eval_system_exp = function (ret) { var parameters = this.parameters; var results = this.results; results[0] = ret; var temp = pushTempValue(); eval_params(parameters, results, temp); popTempValue(); this.func.apply(this.runtime.system, results); }; ExpNode.prototype.eval_object_exp = function (ret) { var object_type = this.object_type; var results = this.results; var parameters = this.parameters; var instance_expr = this.instance_expr; var func = this.func; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } results[0] = ret; ret.object_class = object_type; // so expression can access family type if need be var temp = pushTempValue(); eval_params(parameters, results, temp); if (instance_expr) { instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = object_type.instances; // pick from all instances, not SOL } } popTempValue(); var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; var returned_val = func.apply(instances[index], results); ; }; ExpNode.prototype.eval_behavior_exp = function (ret) { var object_type = this.object_type; var results = this.results; var parameters = this.parameters; var instance_expr = this.instance_expr; var beh_index = this.beh_index; var func = this.func; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } results[0] = ret; ret.object_class = object_type; // so expression can access family type if need be var temp = pushTempValue(); eval_params(parameters, results, temp); if (instance_expr) { instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = object_type.instances; // pick from all instances, not SOL } } popTempValue(); var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; var inst = instances[index]; var offset = 0; if (object_type.is_family) { offset = inst.type.family_beh_map[object_type.family_index]; } var returned_val = func.apply(inst.behavior_insts[beh_index + offset], results); ; }; ExpNode.prototype.eval_instvar_exp = function (ret) { var instance_expr = this.instance_expr; var object_type = this.object_type; var varindex = this.varindex; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); var inst; if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } if (instance_expr) { var temp = pushTempValue(); instance_expr.get(temp); if (temp.is_number()) { index = temp.data; var type_instances = object_type.instances; if (type_instances.length !== 0) // avoid NaN result with % { index %= type_instances.length; // wraparound if (index < 0) // offset index += type_instances.length; } inst = object_type.getInstanceByIID(index); var to_ret = inst.instance_vars[varindex]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); popTempValue(); return; // done } popTempValue(); } var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; inst = instances[index]; var offset = 0; if (object_type.is_family) { offset = inst.type.family_var_map[object_type.family_index]; } var to_ret = inst.instance_vars[varindex + offset]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); }; ExpNode.prototype.eval_int = function (ret) { ret.type = cr.exptype.Integer; ret.data = this.value; }; ExpNode.prototype.eval_float = function (ret) { ret.type = cr.exptype.Float; ret.data = this.value; }; ExpNode.prototype.eval_string = function (ret) { ret.type = cr.exptype.String; ret.data = this.value; }; ExpNode.prototype.eval_unaryminus = function (ret) { this.first.get(ret); // retrieve operand if (ret.is_number()) ret.data = -ret.data; }; ExpNode.prototype.eval_add = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data += temp.data; // both operands numbers: add if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_subtract = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data -= temp.data; // both operands numbers: subtract if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_multiply = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data *= temp.data; // both operands numbers: multiply if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_divide = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data /= temp.data; // both operands numbers: divide ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_mod = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data %= temp.data; // both operands numbers: modulo if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_power = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data = Math.pow(ret.data, temp.data); // both operands numbers: raise to power if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_and = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (temp.is_string() || ret.is_string()) this.eval_and_stringconcat(ret, temp); else this.eval_and_logical(ret, temp); popTempValue(); }; ExpNode.prototype.eval_and_stringconcat = function (ret, temp) { if (ret.is_string() && temp.is_string()) this.eval_and_stringconcat_str_str(ret, temp); else this.eval_and_stringconcat_num(ret, temp); }; ExpNode.prototype.eval_and_stringconcat_str_str = function (ret, temp) { ret.data += temp.data; }; ExpNode.prototype.eval_and_stringconcat_num = function (ret, temp) { if (ret.is_string()) { ret.data += (Math.round(temp.data * 1e10) / 1e10).toString(); } else { ret.set_string(ret.data.toString() + temp.data); } }; ExpNode.prototype.eval_and_logical = function (ret, temp) { ret.set_int(ret.data && temp.data ? 1 : 0); }; ExpNode.prototype.eval_or = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { if (ret.data || temp.data) ret.set_int(1); else ret.set_int(0); } popTempValue(); }; ExpNode.prototype.eval_conditional = function (ret) { this.first.get(ret); // condition operand if (ret.data) // is true this.second.get(ret); // evaluate second operand to ret else this.third.get(ret); // evaluate third operand to ret }; ExpNode.prototype.eval_equal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data === temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_notequal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data !== temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_less = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data < temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_lessequal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data <= temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_greater = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data > temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_greaterequal = function (ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data >= temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_eventvar_exp = function (ret) { var val = this.eventvar.getValue(); if (cr.is_number(val)) ret.set_float(val); else ret.set_string(val); }; cr.expNode = ExpNode; function ExpValue(type, data) { this.type = type || cr.exptype.Integer; this.data = data || 0; this.object_class = null; ; ; ; if (this.type == cr.exptype.Integer) this.data = Math.floor(this.data); cr.seal(this); }; ExpValue.prototype.is_int = function () { return this.type === cr.exptype.Integer; }; ExpValue.prototype.is_float = function () { return this.type === cr.exptype.Float; }; ExpValue.prototype.is_number = function () { return this.type === cr.exptype.Integer || this.type === cr.exptype.Float; }; ExpValue.prototype.is_string = function () { return this.type === cr.exptype.String; }; ExpValue.prototype.make_int = function () { if (!this.is_int()) { if (this.is_float()) this.data = Math.floor(this.data); // truncate float else if (this.is_string()) this.data = parseInt(this.data, 10); this.type = cr.exptype.Integer; } }; ExpValue.prototype.make_float = function () { if (!this.is_float()) { if (this.is_string()) this.data = parseFloat(this.data); this.type = cr.exptype.Float; } }; ExpValue.prototype.make_string = function () { if (!this.is_string()) { this.data = this.data.toString(); this.type = cr.exptype.String; } }; ExpValue.prototype.set_int = function (val) { ; this.type = cr.exptype.Integer; this.data = Math.floor(val); }; ExpValue.prototype.set_float = function (val) { ; this.type = cr.exptype.Float; this.data = val; }; ExpValue.prototype.set_string = function (val) { ; this.type = cr.exptype.String; this.data = val; }; ExpValue.prototype.set_any = function (val) { if (cr.is_number(val)) { this.type = cr.exptype.Float; this.data = val; } else if (cr.is_string(val)) { this.type = cr.exptype.String; this.data = val.toString(); } else { this.type = cr.exptype.Integer; this.data = 0; } }; cr.expvalue = ExpValue; cr.exptype = { Integer: 0, // emulated; no native integer support in javascript Float: 1, String: 2 }; }()); ; cr.system_object = function (runtime) { this.runtime = runtime; this.waits = []; }; cr.system_object.prototype.saveToJSON = function () { var o = {}; var i, len, j, lenj, p, w, t, sobj; o["waits"] = []; var owaits = o["waits"]; var waitobj; for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; waitobj = { "t": w.time, "st": w.signaltag, "s": w.signalled, "ev": w.ev.sid, "sm": [], "sols": {} }; if (w.ev.actions[w.actindex]) waitobj["act"] = w.ev.actions[w.actindex].sid; for (j = 0, lenj = w.solModifiers.length; j < lenj; j++) waitobj["sm"].push(w.solModifiers[j].sid); for (p in w.sols) { if (w.sols.hasOwnProperty(p)) { t = this.runtime.types_by_index[parseInt(p, 10)]; ; sobj = { "sa": w.sols[p].sa, "insts": [] }; for (j = 0, lenj = w.sols[p].insts.length; j < lenj; j++) sobj["insts"].push(w.sols[p].insts[j].uid); waitobj["sols"][t.sid.toString()] = sobj; } } owaits.push(waitobj); } return o; }; cr.system_object.prototype.loadFromJSON = function (o) { var owaits = o["waits"]; var i, len, j, lenj, p, w, addWait, e, aindex, t, savedsol, nusol, inst; cr.clearArray(this.waits); for (i = 0, len = owaits.length; i < len; i++) { w = owaits[i]; e = this.runtime.blocksBySid[w["ev"].toString()]; if (!e) continue; // event must've gone missing aindex = -1; for (j = 0, lenj = e.actions.length; j < lenj; j++) { if (e.actions[j].sid === w["act"]) { aindex = j; break; } } if (aindex === -1) continue; // action must've gone missing addWait = {}; addWait.sols = {}; addWait.solModifiers = []; addWait.deleteme = false; addWait.time = w["t"]; addWait.signaltag = w["st"] || ""; addWait.signalled = !!w["s"]; addWait.ev = e; addWait.actindex = aindex; for (j = 0, lenj = w["sm"].length; j < lenj; j++) { t = this.runtime.getObjectTypeBySid(w["sm"][j]); if (t) addWait.solModifiers.push(t); } for (p in w["sols"]) { if (w["sols"].hasOwnProperty(p)) { t = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!t) continue; // type must've been deleted savedsol = w["sols"][p]; nusol = { sa: savedsol["sa"], insts: [] }; for (j = 0, lenj = savedsol["insts"].length; j < lenj; j++) { inst = this.runtime.getObjectByUID(savedsol["insts"][j]); if (inst) nusol.insts.push(inst); } addWait.sols[t.index.toString()] = nusol; } } this.waits.push(addWait); } }; (function () { var sysProto = cr.system_object.prototype; function SysCnds() {}; SysCnds.prototype.EveryTick = function() { return true; }; SysCnds.prototype.OnLayoutStart = function() { return true; }; SysCnds.prototype.OnLayoutEnd = function() { return true; }; SysCnds.prototype.Compare = function(x, cmp, y) { return cr.do_cmp(x, cmp, y); }; SysCnds.prototype.CompareTime = function (cmp, t) { var elapsed = this.runtime.kahanTime.sum; if (cmp === 0) { var cnd = this.runtime.getCurrentCondition(); if (!cnd.extra["CompareTime_executed"]) { if (elapsed >= t) { cnd.extra["CompareTime_executed"] = true; return true; } } return false; } return cr.do_cmp(elapsed, cmp, t); }; SysCnds.prototype.LayerVisible = function (layer) { if (!layer) return false; else return layer.visible; }; SysCnds.prototype.LayerEmpty = function (layer) { if (!layer) return false; else return !layer.instances.length; }; SysCnds.prototype.LayerCmpOpacity = function (layer, cmp, opacity_) { if (!layer) return false; return cr.do_cmp(layer.opacity * 100, cmp, opacity_); }; SysCnds.prototype.Repeat = function (count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; i < count && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; i < count && !current_loop.stopped; i++) { current_loop.index = i; current_event.retrigger(); } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.While = function (count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; if (!current_event.retrigger()) // one of the other conditions returned false current_loop.stopped = true; // break this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; !current_loop.stopped; i++) { current_loop.index = i; if (!current_event.retrigger()) current_loop.stopped = true; } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.For = function (name, start, end) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(name); var i; if (end < start) { if (solModifierAfterCnds) { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } else { if (solModifierAfterCnds) { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } this.runtime.popLoopStack(); return false; }; var foreach_instancestack = []; var foreach_instanceptr = -1; SysCnds.prototype.ForEach = function (obj) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } cr.clearArray(instances); this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; function foreach_sortinstances(a, b) { var va = a.extra["c2_feo_val"]; var vb = b.extra["c2_feo_val"]; if (cr.is_number(va) && cr.is_number(vb)) return va - vb; else { va = "" + va; vb = "" + vb; if (va < vb) return -1; else if (va > vb) return 1; else return 0; } }; SysCnds.prototype.ForEachOrdered = function (obj, exp, order) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var current_condition = this.runtime.getCurrentCondition(); var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; for (i = 0, len = instances.length; i < len; i++) { instances[i].extra["c2_feo_val"] = current_condition.parameters[1].get(i); } instances.sort(foreach_sortinstances); if (order === 1) instances.reverse(); var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } cr.clearArray(instances); this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; SysCnds.prototype.PickByComparison = function (obj_, exp_, cmp_, val_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) cr.clearArray(sol.else_instances); var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); val_ = current_condition.parameters[3].get(i); if (cr.do_cmp(exp_, cmp_, val_)) { k++; } else { sol.else_instances.push(inst); } } cr.truncateArray(tmp_instances, k); sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); cr.clearArray(tmp_instances); foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.PickByEvaluate = function (obj_, exp_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) cr.clearArray(sol.else_instances); var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); if (exp_) { k++; } else { sol.else_instances.push(inst); } } cr.truncateArray(tmp_instances, k); sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); cr.clearArray(tmp_instances); foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.TriggerOnce = function () { var cndextra = this.runtime.getCurrentCondition().extra; if (typeof cndextra["TriggerOnce_lastTick"] === "undefined") cndextra["TriggerOnce_lastTick"] = -1; var last_tick = cndextra["TriggerOnce_lastTick"]; var cur_tick = this.runtime.tickcount; cndextra["TriggerOnce_lastTick"] = cur_tick; return this.runtime.layout_first_tick || last_tick !== cur_tick - 1; }; SysCnds.prototype.Every = function (seconds) { var cnd = this.runtime.getCurrentCondition(); var last_time = cnd.extra["Every_lastTime"] || 0; var cur_time = this.runtime.kahanTime.sum; if (typeof cnd.extra["Every_seconds"] === "undefined") cnd.extra["Every_seconds"] = seconds; var this_seconds = cnd.extra["Every_seconds"]; if (cur_time >= last_time + this_seconds) { cnd.extra["Every_lastTime"] = last_time + this_seconds; if (cur_time >= cnd.extra["Every_lastTime"] + 0.04) { cnd.extra["Every_lastTime"] = cur_time; } cnd.extra["Every_seconds"] = seconds; return true; } else if (cur_time < last_time - 0.1) { cnd.extra["Every_lastTime"] = cur_time; } return false; }; SysCnds.prototype.PickNth = function (obj, index) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); index = cr.floor(index); if (index < 0 || index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.PickRandom = function (obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var index = cr.floor(Math.random() * instances.length); if (index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.CompareVar = function (v, cmp, val) { return cr.do_cmp(v.getValue(), cmp, val); }; SysCnds.prototype.IsGroupActive = function (group) { var g = this.runtime.groups_by_name[group.toLowerCase()]; return g && g.group_active; }; SysCnds.prototype.IsPreview = function () { return typeof cr_is_preview !== "undefined"; }; SysCnds.prototype.PickAll = function (obj) { if (!obj) return false; if (!obj.instances.length) return false; var sol = obj.getCurrentSol(); sol.select_all = true; obj.applySolToContainer(); return true; }; SysCnds.prototype.IsMobile = function () { return this.runtime.isMobile; }; SysCnds.prototype.CompareBetween = function (x, a, b) { return x >= a && x <= b; }; SysCnds.prototype.Else = function () { var current_frame = this.runtime.getCurrentEventStack(); if (current_frame.else_branch_ran) return false; // another event in this else-if chain has run else return !current_frame.last_event_true; /* var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var prev_event = current_event.prev_block; if (!prev_event) return false; if (prev_event.is_logical) return !this.runtime.last_event_true; var i, len, j, lenj, s, sol, temp, inst, any_picked = false; for (i = 0, len = prev_event.cndReferences.length; i < len; i++) { s = prev_event.cndReferences[i]; sol = s.getCurrentSol(); if (sol.select_all || sol.instances.length === s.instances.length) { sol.select_all = false; sol.instances.length = 0; } else { if (sol.instances.length === 1 && sol.else_instances.length === 0 && s.instances.length >= 2) { inst = sol.instances[0]; sol.instances.length = 0; for (j = 0, lenj = s.instances.length; j < lenj; j++) { if (s.instances[j] != inst) sol.instances.push(s.instances[j]); } any_picked = true; } else { temp = sol.instances; sol.instances = sol.else_instances; sol.else_instances = temp; any_picked = true; } } } return any_picked; */ }; SysCnds.prototype.OnLoadFinished = function () { return true; }; SysCnds.prototype.OnCanvasSnapshot = function () { return true; }; SysCnds.prototype.EffectsSupported = function () { return !!this.runtime.glwrap; }; SysCnds.prototype.OnSaveComplete = function () { return true; }; SysCnds.prototype.OnLoadComplete = function () { return true; }; SysCnds.prototype.OnLoadFailed = function () { return true; }; SysCnds.prototype.ObjectUIDExists = function (u) { return !!this.runtime.getObjectByUID(u); }; SysCnds.prototype.IsOnPlatform = function (p) { var rt = this.runtime; switch (p) { case 0: // HTML5 website return !rt.isDomFree && !rt.isNodeWebkit && !rt.isCordova && !rt.isWinJS && !rt.isWindowsPhone8 && !rt.isBlackberry10 && !rt.isAmazonWebApp; case 1: // iOS return rt.isiOS; case 2: // Android return rt.isAndroid; case 3: // Windows 8 return rt.isWindows8App; case 4: // Windows Phone 8 return rt.isWindowsPhone8; case 5: // Blackberry 10 return rt.isBlackberry10; case 6: // Tizen return rt.isTizen; case 7: // CocoonJS return rt.isCocoonJs; case 8: // Cordova return rt.isCordova; case 9: // Scirra Arcade return rt.isArcade; case 10: // node-webkit return rt.isNodeWebkit; case 11: // crosswalk return rt.isCrosswalk; case 12: // amazon webapp return rt.isAmazonWebApp; default: // should not be possible return false; } }; var cacheRegex = null; var lastRegex = ""; var lastFlags = ""; function getRegex(regex_, flags_) { if (!cacheRegex || regex_ !== lastRegex || flags_ !== lastFlags) { cacheRegex = new RegExp(regex_, flags_); lastRegex = regex_; lastFlags = flags_; } cacheRegex.lastIndex = 0; // reset return cacheRegex; }; SysCnds.prototype.RegexTest = function (str_, regex_, flags_) { var regex = getRegex(regex_, flags_); return regex.test(str_); }; var tmp_arr = []; SysCnds.prototype.PickOverlappingPoint = function (obj_, x_, y_) { if (!obj_) return false; var sol = obj_.getCurrentSol(); var instances = sol.getObjects(); var current_event = this.runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; var cnd = this.runtime.getCurrentCondition(); var i, len, inst, pick; if (sol.select_all) { cr.shallowAssignArray(tmp_arr, instances); cr.clearArray(sol.else_instances); sol.select_all = false; cr.clearArray(sol.instances); } else { if (orblock) { cr.shallowAssignArray(tmp_arr, sol.else_instances); cr.clearArray(sol.else_instances); } else { cr.shallowAssignArray(tmp_arr, instances); cr.clearArray(sol.instances); } } for (i = 0, len = tmp_arr.length; i < len; ++i) { inst = tmp_arr[i]; inst.update_bbox(); pick = cr.xor(inst.contains_pt(x_, y_), cnd.inverted); if (pick) sol.instances.push(inst); else sol.else_instances.push(inst); } obj_.applySolToContainer(); return cr.xor(!!sol.instances.length, cnd.inverted); }; SysCnds.prototype.IsNaN = function (n) { return !!isNaN(n); }; SysCnds.prototype.AngleWithin = function (a1, within, a2) { return cr.angleDiff(cr.to_radians(a1), cr.to_radians(a2)) <= cr.to_radians(within); }; SysCnds.prototype.IsClockwiseFrom = function (a1, a2) { return cr.angleClockwise(cr.to_radians(a1), cr.to_radians(a2)); }; SysCnds.prototype.IsBetweenAngles = function (a, la, ua) { var angle = cr.to_clamped_radians(a); var lower = cr.to_clamped_radians(la); var upper = cr.to_clamped_radians(ua); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; SysCnds.prototype.IsValueType = function (x, t) { if (typeof x === "number") return t === 0; else // string return t === 1; }; sysProto.cnds = new SysCnds(); function SysActs() {}; SysActs.prototype.GoToLayout = function (to) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout ; this.runtime.changelayout = to; }; SysActs.prototype.NextPrevLayout = function (prev) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout var index = this.runtime.layouts_by_index.indexOf(this.runtime.running_layout); if (prev && index === 0) return; // cannot go to previous layout from first layout if (!prev && index === this.runtime.layouts_by_index.length - 1) return; // cannot go to next layout from last layout var to = this.runtime.layouts_by_index[index + (prev ? -1 : 1)]; ; this.runtime.changelayout = to; }; SysActs.prototype.CreateObject = function (obj, layer, x, y) { if (!layer || !obj) return; var inst = this.runtime.createInstance(obj, layer, x, y); if (!inst) return; this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = s; } } }; SysActs.prototype.SetLayerVisible = function (layer, visible_) { if (!layer) return; if (layer.visible !== visible_) { layer.visible = visible_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerOpacity = function (layer, opacity_) { if (!layer) return; opacity_ = cr.clamp(opacity_ / 100, 0, 1); if (layer.opacity !== opacity_) { layer.opacity = opacity_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerScaleRate = function (layer, sr) { if (!layer) return; if (layer.zoomRate !== sr) { layer.zoomRate = sr; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerForceOwnTexture = function (layer, f) { if (!layer) return; f = !!f; if (layer.forceOwnTexture !== f) { layer.forceOwnTexture = f; this.runtime.redraw = true; } }; SysActs.prototype.SetLayoutScale = function (s) { if (!this.runtime.running_layout) return; if (this.runtime.running_layout.scale !== s) { this.runtime.running_layout.scale = s; this.runtime.running_layout.boundScrolling(); this.runtime.redraw = true; } }; SysActs.prototype.ScrollX = function(x) { this.runtime.running_layout.scrollToX(x); }; SysActs.prototype.ScrollY = function(y) { this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.Scroll = function(x, y) { this.runtime.running_layout.scrollToX(x); this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.ScrollToObject = function(obj) { var inst = obj.getFirstPicked(); if (inst) { this.runtime.running_layout.scrollToX(inst.x); this.runtime.running_layout.scrollToY(inst.y); } }; SysActs.prototype.SetVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(x); else v.setValue(parseFloat(x)); } else if (v.vartype === 1) v.setValue(x.toString()); }; SysActs.prototype.AddVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() + x); else v.setValue(v.getValue() + parseFloat(x)); } else if (v.vartype === 1) v.setValue(v.getValue() + x.toString()); }; SysActs.prototype.SubVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() - x); else v.setValue(v.getValue() - parseFloat(x)); } }; SysActs.prototype.SetGroupActive = function (group, active) { var g = this.runtime.groups_by_name[group.toLowerCase()]; if (!g) return; switch (active) { case 0: g.setGroupActive(false); break; case 1: g.setGroupActive(true); break; case 2: g.setGroupActive(!g.group_active); break; } }; SysActs.prototype.SetTimescale = function (ts_) { var ts = ts_; if (ts < 0) ts = 0; this.runtime.timescale = ts; }; SysActs.prototype.SetObjectTimescale = function (obj, ts_) { var ts = ts_; if (ts < 0) ts = 0; if (!obj) return; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = ts; } }; SysActs.prototype.RestoreObjectTimescale = function (obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = -1.0; } }; var waitobjrecycle = []; function allocWaitObject() { var w; if (waitobjrecycle.length) w = waitobjrecycle.pop(); else { w = {}; w.sols = {}; w.solModifiers = []; } w.deleteme = false; return w; }; function freeWaitObject(w) { cr.wipe(w.sols); cr.clearArray(w.solModifiers); waitobjrecycle.push(w); }; var solstateobjects = []; function allocSolStateObject() { var s; if (solstateobjects.length) s = solstateobjects.pop(); else { s = {}; s.insts = []; } s.sa = false; return s; }; function freeSolStateObject(s) { cr.clearArray(s.insts); solstateobjects.push(s); }; SysActs.prototype.Wait = function (seconds) { if (seconds < 0) return; var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = this.runtime.kahanTime.sum + seconds; waitobj.signaltag = ""; waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.WaitForSignal = function (tag) { var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = -1; waitobj.signaltag = tag.toLowerCase(); waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.Signal = function (tag) { var lowertag = tag.toLowerCase(); var i, len, w; for (i = 0, len = this.waits.length; i < len; ++i) { w = this.waits[i]; if (w.time !== -1) continue; // timer wait, ignore if (w.signaltag === lowertag) // waiting for this signal w.signalled = true; // will run on next check } }; SysActs.prototype.SetLayerScale = function (layer, scale) { if (!layer) return; if (layer.scale === scale) return; layer.scale = scale; this.runtime.redraw = true; }; SysActs.prototype.ResetGlobals = function () { var i, len, g; for (i = 0, len = this.runtime.all_global_vars.length; i < len; i++) { g = this.runtime.all_global_vars[i]; g.data = g.initial; } }; SysActs.prototype.SetLayoutAngle = function (a) { a = cr.to_radians(a); a = cr.clamp_angle(a); if (this.runtime.running_layout) { if (this.runtime.running_layout.angle !== a) { this.runtime.running_layout.angle = a; this.runtime.redraw = true; } } }; SysActs.prototype.SetLayerAngle = function (layer, a) { if (!layer) return; a = cr.to_radians(a); a = cr.clamp_angle(a); if (layer.angle === a) return; layer.angle = a; this.runtime.redraw = true; }; SysActs.prototype.SetLayerParallax = function (layer, px, py) { if (!layer) return; if (layer.parallaxX === px / 100 && layer.parallaxY === py / 100) return; layer.parallaxX = px / 100; layer.parallaxY = py / 100; if (layer.parallaxX !== 1 || layer.parallaxY !== 1) { var i, len, instances = layer.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].type.any_instance_parallaxed = true; } } this.runtime.redraw = true; }; SysActs.prototype.SetLayerBackground = function (layer, c) { if (!layer) return; var r = cr.GetRValue(c); var g = cr.GetGValue(c); var b = cr.GetBValue(c); if (layer.background_color[0] === r && layer.background_color[1] === g && layer.background_color[2] === b) return; layer.background_color[0] = r; layer.background_color[1] = g; layer.background_color[2] = b; this.runtime.redraw = true; }; SysActs.prototype.SetLayerTransparent = function (layer, t) { if (!layer) return; if (!!t === !!layer.transparent) return; layer.transparent = !!t; this.runtime.redraw = true; }; SysActs.prototype.SetLayerBlendMode = function (layer, bm) { if (!layer) return; if (layer.blend_mode === bm) return; layer.blend_mode = bm; layer.compositeOp = cr.effectToCompositeOp(layer.blend_mode); if (this.runtime.gl) cr.setGLBlend(layer, layer.blend_mode, this.runtime.gl); this.runtime.redraw = true; }; SysActs.prototype.StopLoop = function () { if (this.runtime.loop_stack_index < 0) return; // no loop currently running this.runtime.getCurrentLoop().stopped = true; }; SysActs.prototype.GoToLayoutByName = function (layoutname) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to different layout ; var l; for (l in this.runtime.layouts) { if (this.runtime.layouts.hasOwnProperty(l) && cr.equals_nocase(l, layoutname)) { this.runtime.changelayout = this.runtime.layouts[l]; return; } } }; SysActs.prototype.RestartLayout = function (layoutname) { if (this.runtime.isloading) return; // cannot restart loader layouts if (this.runtime.changelayout) return; // already changing to a different layout ; if (!this.runtime.running_layout) return; this.runtime.changelayout = this.runtime.running_layout; var i, len, g; for (i = 0, len = this.runtime.allGroups.length; i < len; i++) { g = this.runtime.allGroups[i]; g.setGroupActive(g.initially_activated); } }; SysActs.prototype.SnapshotCanvas = function (format_, quality_) { this.runtime.doCanvasSnapshot(format_ === 0 ? "image/png" : "image/jpeg", quality_ / 100); }; SysActs.prototype.SetCanvasSize = function (w, h) { if (w <= 0 || h <= 0) return; var mode = this.runtime.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.runtime.isNodeFullscreen); if (isfullscreen && this.runtime.fullscreen_scaling > 0) mode = this.runtime.fullscreen_scaling; if (mode === 0) { this.runtime["setSize"](w, h, true); } else { this.runtime.original_width = w; this.runtime.original_height = h; this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); } }; SysActs.prototype.SetLayoutEffectEnabled = function (enable_, effectname_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; this.runtime.running_layout.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectEnabled = function (layer, enable_, effectname_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; layer.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayoutEffectParam = function (effectname_, index_, value_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var params = this.runtime.running_layout.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectParam = function (layer, effectname_, index_, value_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var params = layer.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SaveState = function (slot_) { this.runtime.saveToSlot = slot_; }; SysActs.prototype.LoadState = function (slot_) { this.runtime.loadFromSlot = slot_; }; SysActs.prototype.LoadStateJSON = function (jsonstr_) { this.runtime.loadFromJson = jsonstr_; }; SysActs.prototype.SetHalfFramerateMode = function (set_) { this.runtime.halfFramerateMode = (set_ !== 0); }; SysActs.prototype.SetFullscreenQuality = function (q) { var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen); if (!isfullscreen && this.runtime.fullscreen_mode === 0) return; this.runtime.wantFullscreenScalingQuality = (q !== 0); this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); }; SysActs.prototype.ResetPersisted = function () { var i, len; for (i = 0, len = this.runtime.layouts_by_index.length; i < len; ++i) { this.runtime.layouts_by_index[i].persist_data = {}; this.runtime.layouts_by_index[i].first_visit = true; } }; SysActs.prototype.RecreateInitialObjects = function (obj, x1, y1, x2, y2) { if (!obj) return; this.runtime.running_layout.recreateInitialObjects(obj, x1, y1, x2, y2); }; SysActs.prototype.SetPixelRounding = function (m) { this.runtime.pixel_rounding = (m !== 0); this.runtime.redraw = true; }; SysActs.prototype.SetMinimumFramerate = function (f) { if (f < 1) f = 1; if (f > 120) f = 120; this.runtime.minimumFramerate = f; }; sysProto.acts = new SysActs(); function SysExps() {}; SysExps.prototype["int"] = function(ret, x) { if (cr.is_string(x)) { ret.set_int(parseInt(x, 10)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_int(x); }; SysExps.prototype["float"] = function(ret, x) { if (cr.is_string(x)) { ret.set_float(parseFloat(x)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_float(x); }; SysExps.prototype.str = function(ret, x) { if (cr.is_string(x)) ret.set_string(x); else ret.set_string(x.toString()); }; SysExps.prototype.len = function(ret, x) { ret.set_int(x.length || 0); }; SysExps.prototype.random = function (ret, a, b) { if (b === undefined) { ret.set_float(Math.random() * a); } else { ret.set_float(Math.random() * (b - a) + a); } }; SysExps.prototype.sqrt = function(ret, x) { ret.set_float(Math.sqrt(x)); }; SysExps.prototype.abs = function(ret, x) { ret.set_float(Math.abs(x)); }; SysExps.prototype.round = function(ret, x) { ret.set_int(Math.round(x)); }; SysExps.prototype.floor = function(ret, x) { ret.set_int(Math.floor(x)); }; SysExps.prototype.ceil = function(ret, x) { ret.set_int(Math.ceil(x)); }; SysExps.prototype.sin = function(ret, x) { ret.set_float(Math.sin(cr.to_radians(x))); }; SysExps.prototype.cos = function(ret, x) { ret.set_float(Math.cos(cr.to_radians(x))); }; SysExps.prototype.tan = function(ret, x) { ret.set_float(Math.tan(cr.to_radians(x))); }; SysExps.prototype.asin = function(ret, x) { ret.set_float(cr.to_degrees(Math.asin(x))); }; SysExps.prototype.acos = function(ret, x) { ret.set_float(cr.to_degrees(Math.acos(x))); }; SysExps.prototype.atan = function(ret, x) { ret.set_float(cr.to_degrees(Math.atan(x))); }; SysExps.prototype.exp = function(ret, x) { ret.set_float(Math.exp(x)); }; SysExps.prototype.ln = function(ret, x) { ret.set_float(Math.log(x)); }; SysExps.prototype.log10 = function(ret, x) { ret.set_float(Math.log(x) / Math.LN10); }; SysExps.prototype.max = function(ret) { var max_ = arguments[1]; if (typeof max_ !== "number") max_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (max_ < a) max_ = a; } ret.set_float(max_); }; SysExps.prototype.min = function(ret) { var min_ = arguments[1]; if (typeof min_ !== "number") min_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (min_ > a) min_ = a; } ret.set_float(min_); }; SysExps.prototype.dt = function(ret) { ret.set_float(this.runtime.dt); }; SysExps.prototype.timescale = function(ret) { ret.set_float(this.runtime.timescale); }; SysExps.prototype.wallclocktime = function(ret) { ret.set_float((Date.now() - this.runtime.start_time) / 1000.0); }; SysExps.prototype.time = function(ret) { ret.set_float(this.runtime.kahanTime.sum); }; SysExps.prototype.tickcount = function(ret) { ret.set_int(this.runtime.tickcount); }; SysExps.prototype.objectcount = function(ret) { ret.set_int(this.runtime.objectcount); }; SysExps.prototype.fps = function(ret) { ret.set_int(this.runtime.fps); }; SysExps.prototype.loopindex = function(ret, name_) { var loop, i, len; if (!this.runtime.loop_stack.length) { ret.set_int(0); return; } if (name_) { for (i = this.runtime.loop_stack_index; i >= 0; --i) { loop = this.runtime.loop_stack[i]; if (loop.name === name_) { ret.set_int(loop.index); return; } } ret.set_int(0); } else { loop = this.runtime.getCurrentLoop(); ret.set_int(loop ? loop.index : -1); } }; SysExps.prototype.distance = function(ret, x1, y1, x2, y2) { ret.set_float(cr.distanceTo(x1, y1, x2, y2)); }; SysExps.prototype.angle = function(ret, x1, y1, x2, y2) { ret.set_float(cr.to_degrees(cr.angleTo(x1, y1, x2, y2))); }; SysExps.prototype.scrollx = function(ret) { ret.set_float(this.runtime.running_layout.scrollX); }; SysExps.prototype.scrolly = function(ret) { ret.set_float(this.runtime.running_layout.scrollY); }; SysExps.prototype.newline = function(ret) { ret.set_string("\n"); }; SysExps.prototype.lerp = function(ret, a, b, x) { ret.set_float(cr.lerp(a, b, x)); }; SysExps.prototype.qarp = function(ret, a, b, c, x) { ret.set_float(cr.qarp(a, b, c, x)); }; SysExps.prototype.cubic = function(ret, a, b, c, d, x) { ret.set_float(cr.cubic(a, b, c, d, x)); }; SysExps.prototype.cosp = function(ret, a, b, x) { ret.set_float(cr.cosp(a, b, x)); }; SysExps.prototype.windowwidth = function(ret) { ret.set_int(this.runtime.width); }; SysExps.prototype.windowheight = function(ret) { ret.set_int(this.runtime.height); }; SysExps.prototype.uppercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toUpperCase() : ""); }; SysExps.prototype.lowercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toLowerCase() : ""); }; SysExps.prototype.clamp = function(ret, x, l, u) { if (x < l) ret.set_float(l); else if (x > u) ret.set_float(u); else ret.set_float(x); }; SysExps.prototype.layerscale = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.scale); }; SysExps.prototype.layeropacity = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.opacity * 100); }; SysExps.prototype.layerscalerate = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.zoomRate); }; SysExps.prototype.layerparallaxx = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxX * 100); }; SysExps.prototype.layerparallaxy = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxY * 100); }; SysExps.prototype.layerindex = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_int(-1); else ret.set_int(layer.index); }; SysExps.prototype.layoutscale = function (ret) { if (this.runtime.running_layout) ret.set_float(this.runtime.running_layout.scale); else ret.set_float(0); }; SysExps.prototype.layoutangle = function (ret) { ret.set_float(cr.to_degrees(this.runtime.running_layout.angle)); }; SysExps.prototype.layerangle = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(cr.to_degrees(layer.angle)); }; SysExps.prototype.layoutwidth = function (ret) { ret.set_int(this.runtime.running_layout.width); }; SysExps.prototype.layoutheight = function (ret) { ret.set_int(this.runtime.running_layout.height); }; SysExps.prototype.find = function (ret, text, searchstr) { if (cr.is_string(text) && cr.is_string(searchstr)) ret.set_int(text.search(new RegExp(cr.regexp_escape(searchstr), "i"))); else ret.set_int(-1); }; SysExps.prototype.left = function (ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(0, n) : ""); }; SysExps.prototype.right = function (ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(text.length - n) : ""); }; SysExps.prototype.mid = function (ret, text, index_, length_) { ret.set_string(cr.is_string(text) ? text.substr(index_, length_) : ""); }; SysExps.prototype.tokenat = function (ret, text, index_, sep) { if (cr.is_string(text) && cr.is_string(sep)) { var arr = text.split(sep); var i = cr.floor(index_); if (i < 0 || i >= arr.length) ret.set_string(""); else ret.set_string(arr[i]); } else ret.set_string(""); }; SysExps.prototype.tokencount = function (ret, text, sep) { if (cr.is_string(text) && text.length) ret.set_int(text.split(sep).length); else ret.set_int(0); }; SysExps.prototype.replace = function (ret, text, find_, replace_) { if (cr.is_string(text) && cr.is_string(find_) && cr.is_string(replace_)) ret.set_string(text.replace(new RegExp(cr.regexp_escape(find_), "gi"), replace_)); else ret.set_string(cr.is_string(text) ? text : ""); }; SysExps.prototype.trim = function (ret, text) { ret.set_string(cr.is_string(text) ? text.trim() : ""); }; SysExps.prototype.pi = function (ret) { ret.set_float(cr.PI); }; SysExps.prototype.layoutname = function (ret) { if (this.runtime.running_layout) ret.set_string(this.runtime.running_layout.name); else ret.set_string(""); }; SysExps.prototype.renderer = function (ret) { ret.set_string(this.runtime.gl ? "webgl" : "canvas2d"); }; SysExps.prototype.rendererdetail = function (ret) { ret.set_string(this.runtime.glUnmaskedRenderer); }; SysExps.prototype.anglediff = function (ret, a, b) { ret.set_float(cr.to_degrees(cr.angleDiff(cr.to_radians(a), cr.to_radians(b)))); }; SysExps.prototype.choose = function (ret) { var index = cr.floor(Math.random() * (arguments.length - 1)); ret.set_any(arguments[index + 1]); }; SysExps.prototype.rgb = function (ret, r, g, b) { ret.set_int(cr.RGB(r, g, b)); }; SysExps.prototype.projectversion = function (ret) { ret.set_string(this.runtime.versionstr); }; SysExps.prototype.projectname = function (ret) { ret.set_string(this.runtime.projectName); }; SysExps.prototype.anglelerp = function (ret, a, b, x) { a = cr.to_radians(a); b = cr.to_radians(b); var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { ret.set_float(cr.to_clamped_degrees(a + diff * x)); } else { ret.set_float(cr.to_clamped_degrees(a - diff * x)); } }; SysExps.prototype.anglerotate = function (ret, a, b, c) { a = cr.to_radians(a); b = cr.to_radians(b); c = cr.to_radians(c); ret.set_float(cr.to_clamped_degrees(cr.angleRotate(a, b, c))); }; SysExps.prototype.zeropad = function (ret, n, d) { var s = (n < 0 ? "-" : ""); if (n < 0) n = -n; var zeroes = d - n.toString().length; for (var i = 0; i < zeroes; i++) s += "0"; ret.set_string(s + n.toString()); }; SysExps.prototype.cpuutilisation = function (ret) { ret.set_float(this.runtime.cpuutilisation / 1000); }; SysExps.prototype.viewportleft = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewLeft : 0); }; SysExps.prototype.viewporttop = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewTop : 0); }; SysExps.prototype.viewportright = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewRight : 0); }; SysExps.prototype.viewportbottom = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewBottom : 0); }; SysExps.prototype.loadingprogress = function (ret) { ret.set_float(this.runtime.loadingprogress); }; SysExps.prototype.unlerp = function(ret, a, b, y) { ret.set_float(cr.unlerp(a, b, y)); }; SysExps.prototype.canvassnapshot = function (ret) { ret.set_string(this.runtime.snapshotData); }; SysExps.prototype.urlencode = function (ret, s) { ret.set_string(encodeURIComponent(s)); }; SysExps.prototype.urldecode = function (ret, s) { ret.set_string(decodeURIComponent(s)); }; SysExps.prototype.canvastolayerx = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, true) : 0); }; SysExps.prototype.canvastolayery = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, false) : 0); }; SysExps.prototype.layertocanvasx = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, true) : 0); }; SysExps.prototype.layertocanvasy = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, false) : 0); }; SysExps.prototype.savestatejson = function (ret) { ret.set_string(this.runtime.lastSaveJson); }; SysExps.prototype.imagememoryusage = function (ret) { if (this.runtime.glwrap) ret.set_float(Math.round(100 * this.runtime.glwrap.estimateVRAM() / (1024 * 1024)) / 100); else ret.set_float(0); }; SysExps.prototype.regexsearch = function (ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); ret.set_int(str_ ? str_.search(regex) : -1); }; SysExps.prototype.regexreplace = function (ret, str_, regex_, flags_, replace_) { var regex = getRegex(regex_, flags_); ret.set_string(str_ ? str_.replace(regex, replace_) : ""); }; var regexMatches = []; var lastMatchesStr = ""; var lastMatchesRegex = ""; var lastMatchesFlags = ""; function updateRegexMatches(str_, regex_, flags_) { if (str_ === lastMatchesStr && regex_ === lastMatchesRegex && flags_ === lastMatchesFlags) return; var regex = getRegex(regex_, flags_); regexMatches = str_.match(regex); lastMatchesStr = str_; lastMatchesRegex = regex_; lastMatchesFlags = flags_; }; SysExps.prototype.regexmatchcount = function (ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); updateRegexMatches(str_, regex_, flags_); ret.set_int(regexMatches ? regexMatches.length : 0); }; SysExps.prototype.regexmatchat = function (ret, str_, regex_, flags_, index_) { index_ = Math.floor(index_); var regex = getRegex(regex_, flags_); updateRegexMatches(str_, regex_, flags_); if (!regexMatches || index_ < 0 || index_ >= regexMatches.length) ret.set_string(""); else ret.set_string(regexMatches[index_]); }; SysExps.prototype.infinity = function (ret) { ret.set_float(Infinity); }; SysExps.prototype.setbit = function (ret, n, b, v) { n = n | 0; b = b | 0; v = (v !== 0 ? 1 : 0); ret.set_int((n & ~(1 << b)) | (v << b)); }; SysExps.prototype.togglebit = function (ret, n, b) { n = n | 0; b = b | 0; ret.set_int(n ^ (1 << b)); }; SysExps.prototype.getbit = function (ret, n, b) { n = n | 0; b = b | 0; ret.set_int((n & (1 << b)) ? 1 : 0); }; SysExps.prototype.originalwindowwidth = function (ret) { ret.set_int(this.runtime.original_width); }; SysExps.prototype.originalwindowheight = function (ret) { ret.set_int(this.runtime.original_height); }; sysProto.exps = new SysExps(); sysProto.runWaits = function () { var i, j, len, w, k, s, ss; var evinfo = this.runtime.getCurrentEventStack(); for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; if (w.time === -1) // signalled wait { if (!w.signalled) continue; // not yet signalled } else // timer wait { if (w.time > this.runtime.kahanTime.sum) continue; // timer not yet expired } evinfo.current_event = w.ev; evinfo.actindex = w.actindex; evinfo.cndindex = 0; for (k in w.sols) { if (w.sols.hasOwnProperty(k)) { s = this.runtime.types_by_index[parseInt(k, 10)].getCurrentSol(); ss = w.sols[k]; s.select_all = ss.sa; cr.shallowAssignArray(s.instances, ss.insts); freeSolStateObject(ss); } } w.ev.resume_actions_and_subevents(); this.runtime.clearSol(w.solModifiers); w.deleteme = true; } for (i = 0, j = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; this.waits[j] = w; if (w.deleteme) freeWaitObject(w); else j++; } cr.truncateArray(this.waits, j); }; }()); ; (function () { cr.add_common_aces = function (m, pluginProto) { var singleglobal_ = m[1]; var position_aces = m[3]; var size_aces = m[4]; var angle_aces = m[5]; var appearance_aces = m[6]; var zorder_aces = m[7]; var effects_aces = m[8]; if (!pluginProto.cnds) pluginProto.cnds = {}; if (!pluginProto.acts) pluginProto.acts = {}; if (!pluginProto.exps) pluginProto.exps = {}; var cnds = pluginProto.cnds; var acts = pluginProto.acts; var exps = pluginProto.exps; if (position_aces) { cnds.CompareX = function (cmp, x) { return cr.do_cmp(this.x, cmp, x); }; cnds.CompareY = function (cmp, y) { return cr.do_cmp(this.y, cmp, y); }; cnds.IsOnScreen = function () { var layer = this.layer; this.update_bbox(); var bbox = this.bbox; return !(bbox.right < layer.viewLeft || bbox.bottom < layer.viewTop || bbox.left > layer.viewRight || bbox.top > layer.viewBottom); }; cnds.IsOutsideLayout = function () { this.update_bbox(); var bbox = this.bbox; var layout = this.runtime.running_layout; return (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height); }; cnds.PickDistance = function (which, x, y) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var dist = cr.distanceTo(inst.x, inst.y, x, y); var i, len, d; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; d = cr.distanceTo(inst.x, inst.y, x, y); if ((which === 0 && d < dist) || (which === 1 && d > dist)) { dist = d; pickme = inst; } } sol.pick_one(pickme); return true; }; acts.SetX = function (x) { if (this.x !== x) { this.x = x; this.set_bbox_changed(); } }; acts.SetY = function (y) { if (this.y !== y) { this.y = y; this.set_bbox_changed(); } }; acts.SetPos = function (x, y) { if (this.x !== x || this.y !== y) { this.x = x; this.y = y; this.set_bbox_changed(); } }; acts.SetPosToObject = function (obj, imgpt) { var inst = obj.getPairedInstance(this); if (!inst) return; var newx, newy; if (inst.getImagePoint) { newx = inst.getImagePoint(imgpt, true); newy = inst.getImagePoint(imgpt, false); } else { newx = inst.x; newy = inst.y; } if (this.x !== newx || this.y !== newy) { this.x = newx; this.y = newy; this.set_bbox_changed(); } }; acts.MoveForward = function (dist) { if (dist !== 0) { this.x += Math.cos(this.angle) * dist; this.y += Math.sin(this.angle) * dist; this.set_bbox_changed(); } }; acts.MoveAtAngle = function (a, dist) { if (dist !== 0) { this.x += Math.cos(cr.to_radians(a)) * dist; this.y += Math.sin(cr.to_radians(a)) * dist; this.set_bbox_changed(); } }; exps.X = function (ret) { ret.set_float(this.x); }; exps.Y = function (ret) { ret.set_float(this.y); }; exps.dt = function (ret) { ret.set_float(this.runtime.getDt(this)); }; } if (size_aces) { cnds.CompareWidth = function (cmp, w) { return cr.do_cmp(this.width, cmp, w); }; cnds.CompareHeight = function (cmp, h) { return cr.do_cmp(this.height, cmp, h); }; acts.SetWidth = function (w) { if (this.width !== w) { this.width = w; this.set_bbox_changed(); } }; acts.SetHeight = function (h) { if (this.height !== h) { this.height = h; this.set_bbox_changed(); } }; acts.SetSize = function (w, h) { if (this.width !== w || this.height !== h) { this.width = w; this.height = h; this.set_bbox_changed(); } }; exps.Width = function (ret) { ret.set_float(this.width); }; exps.Height = function (ret) { ret.set_float(this.height); }; exps.BBoxLeft = function (ret) { this.update_bbox(); ret.set_float(this.bbox.left); }; exps.BBoxTop = function (ret) { this.update_bbox(); ret.set_float(this.bbox.top); }; exps.BBoxRight = function (ret) { this.update_bbox(); ret.set_float(this.bbox.right); }; exps.BBoxBottom = function (ret) { this.update_bbox(); ret.set_float(this.bbox.bottom); }; } if (angle_aces) { cnds.AngleWithin = function (within, a) { return cr.angleDiff(this.angle, cr.to_radians(a)) <= cr.to_radians(within); }; cnds.IsClockwiseFrom = function (a) { return cr.angleClockwise(this.angle, cr.to_radians(a)); }; cnds.IsBetweenAngles = function (a, b) { var lower = cr.to_clamped_radians(a); var upper = cr.to_clamped_radians(b); var angle = cr.clamp_angle(this.angle); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; acts.SetAngle = function (a) { var newangle = cr.to_radians(cr.clamp_angle_degrees(a)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateClockwise = function (a) { if (a !== 0 && !isNaN(a)) { this.angle += cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateCounterclockwise = function (a) { if (a !== 0 && !isNaN(a)) { this.angle -= cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateTowardAngle = function (amt, target) { var newangle = cr.angleRotate(this.angle, cr.to_radians(target), cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateTowardPosition = function (amt, x, y) { var dx = x - this.x; var dy = y - this.y; var target = Math.atan2(dy, dx); var newangle = cr.angleRotate(this.angle, target, cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.SetTowardPosition = function (x, y) { var dx = x - this.x; var dy = y - this.y; var newangle = Math.atan2(dy, dx); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; exps.Angle = function (ret) { ret.set_float(cr.to_clamped_degrees(this.angle)); }; } if (!singleglobal_) { cnds.CompareInstanceVar = function (iv, cmp, val) { return cr.do_cmp(this.instance_vars[iv], cmp, val); }; cnds.IsBoolInstanceVarSet = function (iv) { return this.instance_vars[iv]; }; cnds.PickInstVarHiLow = function (which, iv) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var val = inst.instance_vars[iv]; var i, len, v; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; v = inst.instance_vars[iv]; if ((which === 0 && v < val) || (which === 1 && v > val)) { val = v; pickme = inst; } } sol.pick_one(pickme); return true; }; cnds.PickByUID = function (u) { var i, len, j, inst, families, instances, sol; var cnd = this.runtime.getCurrentCondition(); if (cnd.inverted) { sol = this.getCurrentSol(); if (sol.select_all) { sol.select_all = false; cr.clearArray(sol.instances); cr.clearArray(sol.else_instances); instances = this.instances; for (i = 0, len = instances.length; i < len; i++) { inst = instances[i]; if (inst.uid === u) sol.else_instances.push(inst); else sol.instances.push(inst); } this.applySolToContainer(); return !!sol.instances.length; } else { for (i = 0, j = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; sol.instances[j] = inst; if (inst.uid === u) { sol.else_instances.push(inst); } else j++; } cr.truncateArray(sol.instances, j); this.applySolToContainer(); return !!sol.instances.length; } } else { inst = this.runtime.getObjectByUID(u); if (!inst) return false; sol = this.getCurrentSol(); if (!sol.select_all && sol.instances.indexOf(inst) === -1) return false; // not picked if (this.is_family) { families = inst.type.families; for (i = 0, len = families.length; i < len; i++) { if (families[i] === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } } } else if (inst.type === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } return false; } }; cnds.OnCreated = function () { return true; }; cnds.OnDestroyed = function () { return true; }; acts.SetInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] = val; else myinstvars[iv] = parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] = val; else myinstvars[iv] = val.toString(); } else ; }; acts.AddInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] += val; else myinstvars[iv] += parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] += val; else myinstvars[iv] += val.toString(); } else ; }; acts.SubInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] -= val; else myinstvars[iv] -= parseFloat(val); } else ; }; acts.SetBoolInstanceVar = function (iv, val) { this.instance_vars[iv] = val ? 1 : 0; }; acts.ToggleBoolInstanceVar = function (iv) { this.instance_vars[iv] = 1 - this.instance_vars[iv]; }; acts.Destroy = function () { this.runtime.DestroyInstance(this); }; if (!acts.LoadFromJsonString) { acts.LoadFromJsonString = function (str_) { var o, i, len, binst; try { o = JSON.parse(str_); } catch (e) { return; } this.runtime.loadInstanceFromJSON(this, o, true); if (this.afterLoad) this.afterLoad(); if (this.behavior_insts) { for (i = 0, len = this.behavior_insts.length; i < len; ++i) { binst = this.behavior_insts[i]; if (binst.afterLoad) binst.afterLoad(); } } }; } exps.Count = function (ret) { var count = ret.object_class.instances.length; var i, len, inst; for (i = 0, len = this.runtime.createRow.length; i < len; i++) { inst = this.runtime.createRow[i]; if (ret.object_class.is_family) { if (inst.type.families.indexOf(ret.object_class) >= 0) count++; } else { if (inst.type === ret.object_class) count++; } } ret.set_int(count); }; exps.PickedCount = function (ret) { ret.set_int(ret.object_class.getCurrentSol().getObjects().length); }; exps.UID = function (ret) { ret.set_int(this.uid); }; exps.IID = function (ret) { ret.set_int(this.get_iid()); }; if (!exps.AsJSON) { exps.AsJSON = function (ret) { ret.set_string(JSON.stringify(this.runtime.saveInstanceToJSON(this, true))); }; } } if (appearance_aces) { cnds.IsVisible = function () { return this.visible; }; acts.SetVisible = function (v) { if (!v !== !this.visible) { this.visible = !!v; this.runtime.redraw = true; } }; cnds.CompareOpacity = function (cmp, x) { return cr.do_cmp(cr.round6dp(this.opacity * 100), cmp, x); }; acts.SetOpacity = function (x) { var new_opacity = x / 100.0; if (new_opacity < 0) new_opacity = 0; else if (new_opacity > 1) new_opacity = 1; if (new_opacity !== this.opacity) { this.opacity = new_opacity; this.runtime.redraw = true; } }; exps.Opacity = function (ret) { ret.set_float(cr.round6dp(this.opacity * 100.0)); }; } if (zorder_aces) { cnds.IsOnLayer = function (layer_) { if (!layer_) return false; return this.layer === layer_; }; cnds.PickTopBottom = function (which_) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var i, len; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; if (which_ === 0) { if (inst.layer.index > pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() > pickme.get_zindex())) { pickme = inst; } } else { if (inst.layer.index < pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() < pickme.get_zindex())) { pickme = inst; } } } sol.pick_one(pickme); return true; }; acts.MoveToTop = function () { var layer = this.layer; var layer_instances = layer.instances; if (layer_instances.length && layer_instances[layer_instances.length - 1] === this) return; // is already at top layer.removeFromInstanceList(this, false); layer.appendToInstanceList(this, false); this.runtime.redraw = true; }; acts.MoveToBottom = function () { var layer = this.layer; var layer_instances = layer.instances; if (layer_instances.length && layer_instances[0] === this) return; // is already at bottom layer.removeFromInstanceList(this, false); layer.prependToInstanceList(this, false); this.runtime.redraw = true; }; acts.MoveToLayer = function (layerMove) { if (!layerMove || layerMove == this.layer) return; this.layer.removeFromInstanceList(this, true); this.layer = layerMove; layerMove.appendToInstanceList(this, true); this.runtime.redraw = true; }; acts.ZMoveToObject = function (where_, obj_) { var isafter = (where_ === 0); if (!obj_) return; var other = obj_.getFirstPicked(this); if (!other || other.uid === this.uid) return; if (this.layer.index !== other.layer.index) { this.layer.removeFromInstanceList(this, true); this.layer = other.layer; other.layer.appendToInstanceList(this, true); } this.layer.moveInstanceAdjacent(this, other, isafter); this.runtime.redraw = true; }; exps.LayerNumber = function (ret) { ret.set_int(this.layer.number); }; exps.LayerName = function (ret) { ret.set_string(this.layer.name); }; exps.ZIndex = function (ret) { ret.set_int(this.get_zindex()); }; } if (effects_aces) { acts.SetEffectEnabled = function (enable_, effectname_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var enable = (enable_ === 1); if (this.active_effect_flags[i] === enable) return; // no change this.active_effect_flags[i] = enable; this.updateActiveEffects(); this.runtime.redraw = true; }; acts.SetEffectParam = function (effectname_, index_, value_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var et = this.type.effect_types[i]; var params = this.effect_params[i]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; } }; cr.set_bbox_changed = function () { this.bbox_changed = true; // will recreate next time box requested this.cell_changed = true; this.type.any_cell_changed = true; // avoid unnecessary updateAllBBox() calls this.runtime.redraw = true; // assume runtime needs to redraw var i, len, callbacks = this.bbox_changed_callbacks; for (i = 0, len = callbacks.length; i < len; ++i) { callbacks[i](this); } if (this.layer.useRenderCells) this.update_bbox(); }; cr.add_bbox_changed_callback = function (f) { if (f) { this.bbox_changed_callbacks.push(f); } }; cr.update_bbox = function () { if (!this.bbox_changed) return; // bounding box not changed var bbox = this.bbox; var bquad = this.bquad; bbox.set(this.x, this.y, this.x + this.width, this.y + this.height); bbox.offset(-this.hotspotX * this.width, -this.hotspotY * this.height); if (!this.angle) { bquad.set_from_rect(bbox); // make bounding quad from box } else { bbox.offset(-this.x, -this.y); // translate to origin bquad.set_from_rotated_rect(bbox, this.angle); // rotate around origin bquad.offset(this.x, this.y); // translate back to original position bquad.bounding_box(bbox); } bbox.normalize(); this.bbox_changed = false; // bounding box up to date this.update_render_cell(); }; var tmprc = new cr.rect(0, 0, 0, 0); cr.update_render_cell = function () { if (!this.layer.useRenderCells) return; var mygrid = this.layer.render_grid; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (this.rendercells.equals(tmprc)) return; if (this.rendercells.right < this.rendercells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, this.rendercells, tmprc); this.rendercells.copy(tmprc); this.layer.render_list_stale = true; }; cr.update_collision_cell = function () { if (!this.cell_changed || !this.collisionsEnabled) return; this.update_bbox(); var mygrid = this.type.collision_grid; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (this.collcells.equals(tmprc)) return; if (this.collcells.right < this.collcells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, this.collcells, tmprc); this.collcells.copy(tmprc); this.cell_changed = false; }; cr.inst_contains_pt = function (x, y) { if (!this.bbox.contains_pt(x, y)) return false; if (!this.bquad.contains_pt(x, y)) return false; if (this.collision_poly && !this.collision_poly.is_empty()) { this.collision_poly.cache_poly(this.width, this.height, this.angle); return this.collision_poly.contains_pt(x - this.x, y - this.y); } else return true; }; cr.inst_get_iid = function () { this.type.updateIIDs(); return this.iid; }; cr.inst_get_zindex = function () { this.layer.updateZIndices(); return this.zindex; }; cr.inst_updateActiveEffects = function () { cr.clearArray(this.active_effect_types); var i, len, et; var preserves_opaqueness = true; for (i = 0, len = this.active_effect_flags.length; i < len; i++) { if (this.active_effect_flags[i]) { et = this.type.effect_types[i]; this.active_effect_types.push(et); if (!et.preservesOpaqueness) preserves_opaqueness = false; } } this.uses_shaders = !!this.active_effect_types.length; this.shaders_preserve_opaqueness = preserves_opaqueness; }; cr.inst_toString = function () { return "Inst" + this.puid; }; cr.type_getFirstPicked = function (frominst) { if (frominst && frominst.is_contained && frominst.type != this) { var i, len, s; for (i = 0, len = frominst.siblings.length; i < len; i++) { s = frominst.siblings[i]; if (s.type == this) return s; } } var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[0]; else return null; }; cr.type_getPairedInstance = function (inst) { var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[inst.get_iid() % instances.length]; else return null; }; cr.type_updateIIDs = function () { if (!this.stale_iids || this.is_family) return; // up to date or is family - don't want family to overwrite IIDs var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].iid = i; var next_iid = i; var createRow = this.runtime.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === this) createRow[i].iid = next_iid++; } this.stale_iids = false; }; cr.type_getInstanceByIID = function (i) { if (i < this.instances.length) return this.instances[i]; i -= this.instances.length; var createRow = this.runtime.createRow; var j, lenj; for (j = 0, lenj = createRow.length; j < lenj; ++j) { if (createRow[j].type === this) { if (i === 0) return createRow[j]; --i; } } ; return null; }; cr.type_getCurrentSol = function () { return this.solstack[this.cur_sol]; }; cr.type_pushCleanSol = function () { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); else this.solstack[this.cur_sol].select_all = true; // else clear next SOL }; cr.type_pushCopySol = function () { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); var clonesol = this.solstack[this.cur_sol]; var prevsol = this.solstack[this.cur_sol - 1]; if (prevsol.select_all) clonesol.select_all = true; else { clonesol.select_all = false; cr.shallowAssignArray(clonesol.instances, prevsol.instances); cr.shallowAssignArray(clonesol.else_instances, prevsol.else_instances); } }; cr.type_popSol = function () { ; this.cur_sol--; }; cr.type_getBehaviorByName = function (behname) { var i, len, j, lenj, f, index = 0; if (!this.is_family) { for (i = 0, len = this.families.length; i < len; i++) { f = this.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (behname === f.behaviors[j].name) { this.extra["lastBehIndex"] = index; return f.behaviors[j]; } index++; } } } for (i = 0, len = this.behaviors.length; i < len; i++) { if (behname === this.behaviors[i].name) { this.extra["lastBehIndex"] = index; return this.behaviors[i]; } index++; } return null; }; cr.type_getBehaviorIndexByName = function (behname) { var b = this.getBehaviorByName(behname); if (b) return this.extra["lastBehIndex"]; else return -1; }; cr.type_getEffectIndexByName = function (name_) { var i, len; for (i = 0, len = this.effect_types.length; i < len; i++) { if (this.effect_types[i].name === name_) return i; } return -1; }; cr.type_applySolToContainer = function () { if (!this.is_contained || this.is_family) return; var i, len, j, lenj, t, sol, sol2; this.updateIIDs(); sol = this.getCurrentSol(); var select_all = sol.select_all; var es = this.runtime.getCurrentEventStack(); var orblock = es && es.current_event && es.current_event.orblock; for (i = 0, len = this.container.length; i < len; i++) { t = this.container[i]; if (t === this) continue; t.updateIIDs(); sol2 = t.getCurrentSol(); sol2.select_all = select_all; if (!select_all) { cr.clearArray(sol2.instances); for (j = 0, lenj = sol.instances.length; j < lenj; ++j) sol2.instances[j] = t.getInstanceByIID(sol.instances[j].iid); if (orblock) { cr.clearArray(sol2.else_instances); for (j = 0, lenj = sol.else_instances.length; j < lenj; ++j) sol2.else_instances[j] = t.getInstanceByIID(sol.else_instances[j].iid); } } } }; cr.type_toString = function () { return "Type" + this.sid; }; cr.do_cmp = function (x, cmp, y) { if (typeof x === "undefined" || typeof y === "undefined") return false; switch (cmp) { case 0: // equal return x === y; case 1: // not equal return x !== y; case 2: // less return x < y; case 3: // less/equal return x <= y; case 4: // greater return x > y; case 5: // greater/equal return x >= y; default: ; return false; } }; })(); cr.shaders = {}; cr.shaders["exposure"] = {src: ["varying mediump vec2 vTex;", "uniform lowp sampler2D samplerFront;", "uniform mediump float exposure;", "void main(void)", "{", "lowp vec4 front = texture2D(samplerFront, vTex);", "gl_FragColor = vec4(front.rgb * pow(2.0, exposure), front.a);", "}" ].join("\n"), extendBoxHorizontal: 0, extendBoxVertical: 0, crossSampling: false, preservesOpaqueness: true, animated: false, parameters: [["exposure", 0, 1]] } ; ; cr.plugins_.Audio = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Audio.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; var audRuntime = null; var audInst = null; var audTag = ""; var appPath = ""; // for Cordova only var API_HTML5 = 0; var API_WEBAUDIO = 1; var API_CORDOVA = 2; var API_APPMOBI = 3; var api = API_HTML5; var context = null; var audioBuffers = []; // cache of buffers var audioInstances = []; // cache of instances var lastAudio = null; var useOgg = false; // determined at create time var timescale_mode = 0; var silent = false; var masterVolume = 1; var listenerX = 0; var listenerY = 0; var panningModel = 1; // HRTF var distanceModel = 1; // Inverse var refDistance = 10; var maxDistance = 10000; var rolloffFactor = 1; var micSource = null; var micTag = ""; var isMusicWorkaround = false; var musicPlayNextTouch = []; function dbToLinear(x) { var v = dbToLinear_nocap(x); if (!isFinite(v)) // accidentally passing a string can result in NaN; set volume to 0 if so v = 0; if (v < 0) v = 0; if (v > 1) v = 1; return v; }; function linearToDb(x) { if (x < 0) x = 0; if (x > 1) x = 1; return linearToDb_nocap(x); }; function dbToLinear_nocap(x) { return Math.pow(10, x / 20); }; function linearToDb_nocap(x) { return (Math.log(x) / Math.log(10)) * 20; }; var effects = {}; function getDestinationForTag(tag) { tag = tag.toLowerCase(); if (effects.hasOwnProperty(tag)) { if (effects[tag].length) return effects[tag][0].getInputNode(); } return context["destination"]; }; function createGain() { if (context["createGain"]) return context["createGain"](); else return context["createGainNode"](); }; function createDelay(d) { if (context["createDelay"]) return context["createDelay"](d); else return context["createDelayNode"](d); }; function startSource(s) { if (s["start"]) s["start"](0); else s["noteOn"](0); }; function startSourceAt(s, x, d) { if (s["start"]) s["start"](0, x); else s["noteGrainOn"](0, x, d - x); }; function stopSource(s) { try { if (s["stop"]) s["stop"](0); else s["noteOff"](0); } catch (e) {} }; function setAudioParam(ap, value, ramp, time) { if (!ap) return; // iOS is missing some parameters ap["cancelScheduledValues"](0); if (time === 0) { ap["value"] = value; return; } var curTime = context["currentTime"]; time += curTime; switch (ramp) { case 0: // step ap["setValueAtTime"](value, time); break; case 1: // linear ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["linearRampToValueAtTime"](value, time); break; case 2: // exponential ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["exponentialRampToValueAtTime"](value, time); break; } }; var filterTypes = ["lowpass", "highpass", "bandpass", "lowshelf", "highshelf", "peaking", "notch", "allpass"]; function FilterEffect(type, freq, detune, q, gain, mix) { this.type = "filter"; this.params = [type, freq, detune, q, gain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = type; else this.filterNode["type"] = filterTypes[type]; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.filterNode["gain"]["value"] = gain; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); }; FilterEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; FilterEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; FilterEffect.prototype.getInputNode = function () { return this.inputNode; }; FilterEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 1: // filter frequency this.params[1] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[2] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[3] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 4: // filter/delay gain (note value is in dB here) this.params[4] = value; setAudioParam(this.filterNode["gain"], value, ramp, time); break; } }; function DelayEffect(delayTime, delayGain, mix) { this.type = "delay"; this.params = [delayTime, delayGain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.mainNode = createGain(); this.delayNode = createDelay(delayTime); this.delayNode["delayTime"]["value"] = delayTime; this.delayGainNode = createGain(); this.delayGainNode["gain"]["value"] = delayGain; this.inputNode["connect"](this.mainNode); this.inputNode["connect"](this.dryNode); this.mainNode["connect"](this.wetNode); this.mainNode["connect"](this.delayNode); this.delayNode["connect"](this.delayGainNode); this.delayGainNode["connect"](this.mainNode); }; DelayEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DelayEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.mainNode["disconnect"](); this.delayNode["disconnect"](); this.delayGainNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DelayEffect.prototype.getInputNode = function () { return this.inputNode; }; DelayEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[2] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 4: // filter/delay gain (note value is passed in dB but needs to be linear here) this.params[1] = dbToLinear(value); setAudioParam(this.delayGainNode["gain"], dbToLinear(value), ramp, time); break; case 5: // delay time this.params[0] = value; setAudioParam(this.delayNode["delayTime"], value, ramp, time); break; } }; function ConvolveEffect(buffer, normalize, mix, src) { this.type = "convolve"; this.params = [normalize, mix, src]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.convolveNode = context["createConvolver"](); if (buffer) { this.convolveNode["normalize"] = normalize; this.convolveNode["buffer"] = buffer; } this.inputNode["connect"](this.convolveNode); this.inputNode["connect"](this.dryNode); this.convolveNode["connect"](this.wetNode); }; ConvolveEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; ConvolveEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.convolveNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; ConvolveEffect.prototype.getInputNode = function () { return this.inputNode; }; ConvolveEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function FlangerEffect(delay, modulation, freq, feedback, mix) { this.type = "flanger"; this.params = [delay, modulation, freq, feedback, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.feedbackNode = createGain(); this.feedbackNode["gain"]["value"] = feedback; this.delayNode = createDelay(delay + modulation); this.delayNode["delayTime"]["value"] = delay; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.delayNode); this.inputNode["connect"](this.dryNode); this.delayNode["connect"](this.wetNode); this.delayNode["connect"](this.feedbackNode); this.feedbackNode["connect"](this.delayNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.delayNode["delayTime"]); startSource(this.oscNode); }; FlangerEffect.prototype.connectTo = function (node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; FlangerEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.delayNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); this.feedbackNode["disconnect"](); }; FlangerEffect.prototype.getInputNode = function () { return this.inputNode; }; FlangerEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 6: // modulation this.params[1] = value / 1000; setAudioParam(this.oscGainNode["gain"], value / 1000, ramp, time); break; case 7: // modulation frequency this.params[2] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; case 8: // feedback this.params[3] = value / 100; setAudioParam(this.feedbackNode["gain"], value / 100, ramp, time); break; } }; function PhaserEffect(freq, detune, q, modulation, modfreq, mix) { this.type = "phaser"; this.params = [freq, detune, q, modulation, modfreq, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = 7; // all-pass else this.filterNode["type"] = "allpass"; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = modfreq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.filterNode["frequency"]); startSource(this.oscNode); }; PhaserEffect.prototype.connectTo = function (node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; PhaserEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); }; PhaserEffect.prototype.getInputNode = function () { return this.inputNode; }; PhaserEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 1: // filter frequency this.params[0] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[1] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[2] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 6: // modulation this.params[3] = value; setAudioParam(this.oscGainNode["gain"], value, ramp, time); break; case 7: // modulation frequency this.params[4] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function GainEffect(g) { this.type = "gain"; this.params = [g]; this.node = createGain(); this.node["gain"]["value"] = g; }; GainEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; GainEffect.prototype.remove = function () { this.node["disconnect"](); }; GainEffect.prototype.getInputNode = function () { return this.node; }; GainEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 4: // gain this.params[0] = dbToLinear(value); setAudioParam(this.node["gain"], dbToLinear(value), ramp, time); break; } }; function TremoloEffect(freq, mix) { this.type = "tremolo"; this.params = [freq, mix]; this.node = createGain(); this.node["gain"]["value"] = 1 - (mix / 2); this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = mix / 2; this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.node["gain"]); startSource(this.oscNode); }; TremoloEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; TremoloEffect.prototype.remove = function () { this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.node["disconnect"](); }; TremoloEffect.prototype.getInputNode = function () { return this.node; }; TremoloEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.node["gain"]["value"], 1 - (value / 2), ramp, time); setAudioParam(this.oscGainNode["gain"]["value"], value / 2, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function RingModulatorEffect(freq, mix) { this.type = "ringmod"; this.params = [freq, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.ringNode = createGain(); this.ringNode["gain"]["value"] = 0; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscNode["connect"](this.ringNode["gain"]); startSource(this.oscNode); this.inputNode["connect"](this.ringNode); this.inputNode["connect"](this.dryNode); this.ringNode["connect"](this.wetNode); }; RingModulatorEffect.prototype.connectTo = function (node_) { this.wetNode["disconnect"](); this.wetNode["connect"](node_); this.dryNode["disconnect"](); this.dryNode["connect"](node_); }; RingModulatorEffect.prototype.remove = function () { this.oscNode["disconnect"](); this.ringNode["disconnect"](); this.inputNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; RingModulatorEffect.prototype.getInputNode = function () { return this.inputNode; }; RingModulatorEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function DistortionEffect(threshold, headroom, drive, makeupgain, mix) { this.type = "distortion"; this.params = [threshold, headroom, drive, makeupgain, mix]; this.inputNode = createGain(); this.preGain = createGain(); this.postGain = createGain(); this.setDrive(drive, dbToLinear_nocap(makeupgain)); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.waveShaper = context["createWaveShaper"](); this.curve = new Float32Array(65536); this.generateColortouchCurve(threshold, headroom); this.waveShaper.curve = this.curve; this.inputNode["connect"](this.preGain); this.inputNode["connect"](this.dryNode); this.preGain["connect"](this.waveShaper); this.waveShaper["connect"](this.postGain); this.postGain["connect"](this.wetNode); }; DistortionEffect.prototype.setDrive = function (drive, makeupgain) { if (drive < 0.01) drive = 0.01; this.preGain["gain"]["value"] = drive; this.postGain["gain"]["value"] = Math.pow(1 / drive, 0.6) * makeupgain; }; function e4(x, k) { return 1.0 - Math.exp(-k * x); } DistortionEffect.prototype.shape = function (x, linearThreshold, linearHeadroom) { var maximum = 1.05 * linearHeadroom * linearThreshold; var kk = (maximum - linearThreshold); var sign = x < 0 ? -1 : +1; var absx = x < 0 ? -x : x; var shapedInput = absx < linearThreshold ? absx : linearThreshold + kk * e4(absx - linearThreshold, 1.0 / kk); shapedInput *= sign; return shapedInput; }; DistortionEffect.prototype.generateColortouchCurve = function (threshold, headroom) { var linearThreshold = dbToLinear_nocap(threshold); var linearHeadroom = dbToLinear_nocap(headroom); var n = 65536; var n2 = n / 2; var x = 0; for (var i = 0; i < n2; ++i) { x = i / n2; x = this.shape(x, linearThreshold, linearHeadroom); this.curve[n2 + i] = x; this.curve[n2 - i - 1] = -x; } }; DistortionEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DistortionEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.preGain["disconnect"](); this.waveShaper["disconnect"](); this.postGain["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DistortionEffect.prototype.getInputNode = function () { return this.inputNode; }; DistortionEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function CompressorEffect(threshold, knee, ratio, attack, release) { this.type = "compressor"; this.params = [threshold, knee, ratio, attack, release]; this.node = context["createDynamicsCompressor"](); try { this.node["threshold"]["value"] = threshold; this.node["knee"]["value"] = knee; this.node["ratio"]["value"] = ratio; this.node["attack"]["value"] = attack; this.node["release"]["value"] = release; } catch (e) {} }; CompressorEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; CompressorEffect.prototype.remove = function () { this.node["disconnect"](); }; CompressorEffect.prototype.getInputNode = function () { return this.node; }; CompressorEffect.prototype.setParam = function(param, value, ramp, time) { }; function AnalyserEffect(fftSize, smoothing) { this.type = "analyser"; this.params = [fftSize, smoothing]; this.node = context["createAnalyser"](); this.node["fftSize"] = fftSize; this.node["smoothingTimeConstant"] = smoothing; this.freqBins = new Float32Array(this.node["frequencyBinCount"]); this.signal = new Uint8Array(fftSize); this.peak = 0; this.rms = 0; }; AnalyserEffect.prototype.tick = function () { this.node["getFloatFrequencyData"](this.freqBins); this.node["getByteTimeDomainData"](this.signal); var fftSize = this.node["fftSize"]; var i = 0; this.peak = 0; var rmsSquaredSum = 0; var s = 0; for ( ; i < fftSize; i++) { s = (this.signal[i] - 128) / 128; if (s < 0) s = -s; if (this.peak < s) this.peak = s; rmsSquaredSum += s * s; } this.peak = linearToDb(this.peak); this.rms = linearToDb(Math.sqrt(rmsSquaredSum / fftSize)); }; AnalyserEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; AnalyserEffect.prototype.remove = function () { this.node["disconnect"](); }; AnalyserEffect.prototype.getInputNode = function () { return this.node; }; AnalyserEffect.prototype.setParam = function(param, value, ramp, time) { }; var OT_POS_SAMPLES = 4; function ObjectTracker() { this.obj = null; this.loadUid = 0; this.speeds = []; this.lastX = 0; this.lastY = 0; this.moveAngle = 0; }; ObjectTracker.prototype.setObject = function (obj_) { this.obj = obj_; if (this.obj) { this.lastX = this.obj.x; this.lastY = this.obj.y; } cr.clearArray(this.speeds); }; ObjectTracker.prototype.hasObject = function () { return !!this.obj; }; ObjectTracker.prototype.tick = function (dt) { if (!this.obj || dt === 0) return; this.moveAngle = cr.angleTo(this.lastX, this.lastY, this.obj.x, this.obj.y); var s = cr.distanceTo(this.lastX, this.lastY, this.obj.x, this.obj.y) / dt; if (this.speeds.length < OT_POS_SAMPLES) this.speeds.push(s); else { this.speeds.shift(); this.speeds.push(s); } this.lastX = this.obj.x; this.lastY = this.obj.y; }; ObjectTracker.prototype.getSpeed = function () { if (!this.speeds.length) return 0; var i, len, sum = 0; for (i = 0, len = this.speeds.length; i < len; i++) { sum += this.speeds[i]; } return sum / this.speeds.length; }; ObjectTracker.prototype.getVelocityX = function () { return Math.cos(this.moveAngle) * this.getSpeed(); }; ObjectTracker.prototype.getVelocityY = function () { return Math.sin(this.moveAngle) * this.getSpeed(); }; var iOShadtouchstart = false; // has had touch start input on iOS <=8 to work around web audio API muting var iOShadtouchend = false; // has had touch end input on iOS 9+ to work around web audio API muting function C2AudioBuffer(src_, is_music) { this.src = src_; this.myapi = api; this.is_music = is_music; this.added_end_listener = false; var self = this; this.outNode = null; this.mediaSourceNode = null; this.panWhenReady = []; // for web audio API positioned sounds this.seekWhenReady = 0; this.pauseWhenReady = false; this.supportWebAudioAPI = false; this.failedToLoad = false; this.wasEverReady = false; // if a buffer is ever marked as ready, it's permanently considered ready after then. if (api === API_WEBAUDIO && is_music) { this.myapi = API_HTML5; this.outNode = createGain(); } this.bufferObject = null; // actual audio object this.audioData = null; // web audio api: ajax request result (compressed audio that needs decoding) var request; switch (this.myapi) { case API_HTML5: this.bufferObject = new Audio(); this.bufferObject.crossOrigin = "anonymous"; this.bufferObject.addEventListener("canplaythrough", function () { self.wasEverReady = true; // update loaded state so preload is considered complete }); if (api === API_WEBAUDIO && context["createMediaElementSource"] && !/wiiu/i.test(navigator.userAgent)) { this.supportWebAudioAPI = true; // can be routed through web audio api this.bufferObject.addEventListener("canplay", function () { if (!self.mediaSourceNode) // protect against this event firing twice { self.mediaSourceNode = context["createMediaElementSource"](self.bufferObject); self.mediaSourceNode["connect"](self.outNode); } }); } this.bufferObject.autoplay = false; // this is only a source buffer, not an instance this.bufferObject.preload = "auto"; this.bufferObject.src = src_; break; case API_WEBAUDIO: request = new XMLHttpRequest(); request.open("GET", src_, true); request.responseType = "arraybuffer"; request.onload = function () { self.audioData = request.response; self.decodeAudioBuffer(); }; request.onerror = function () { self.failedToLoad = true; }; request.send(); break; case API_CORDOVA: this.bufferObject = true; break; case API_APPMOBI: this.bufferObject = true; break; } }; C2AudioBuffer.prototype.decodeAudioBuffer = function () { if (this.bufferObject || !this.audioData) return; // audio already decoded or AJAX request not yet complete var self = this; if (context["decodeAudioData"]) { context["decodeAudioData"](this.audioData, function (buffer) { self.bufferObject = buffer; self.audioData = null; // clear AJAX response to allow GC and save memory, only need the bufferObject now var p, i, len, a; if (!cr.is_undefined(self.playTagWhenReady) && !silent) { if (self.panWhenReady.length) { for (i = 0, len = self.panWhenReady.length; i < len; i++) { p = self.panWhenReady[i]; a = new C2AudioInstance(self, p.thistag); a.setPannerEnabled(true); if (typeof p.objUid !== "undefined") { p.obj = audRuntime.getObjectByUID(p.objUid); if (!p.obj) continue; } if (p.obj) { var px = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, false); a.setPan(px, py, cr.to_degrees(p.obj.angle - p.obj.layer.getAngle()), p.ia, p.oa, p.og); a.setObject(p.obj); } else { a.setPan(p.x, p.y, p.a, p.ia, p.oa, p.og); } a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } cr.clearArray(self.panWhenReady); } else { a = new C2AudioInstance(self, self.playTagWhenReady || ""); // sometimes playTagWhenReady is not set - TODO: why? a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } } else if (!cr.is_undefined(self.convolveWhenReady)) { var convolveNode = self.convolveWhenReady.convolveNode; convolveNode["normalize"] = self.normalizeWhenReady; convolveNode["buffer"] = buffer; } }, function (e) { self.failedToLoad = true; }); } else { this.bufferObject = context["createBuffer"](this.audioData, false); this.audioData = null; // clear AJAX response to allow GC and save memory, only need the bufferObject now if (!cr.is_undefined(this.playTagWhenReady) && !silent) { var a = new C2AudioInstance(this, this.playTagWhenReady); a.play(this.loopWhenReady, this.volumeWhenReady, this.seekWhenReady); if (this.pauseWhenReady) a.pause(); audioInstances.push(a); } else if (!cr.is_undefined(this.convolveWhenReady)) { var convolveNode = this.convolveWhenReady.convolveNode; convolveNode["normalize"] = this.normalizeWhenReady; convolveNode["buffer"] = this.bufferObject; } } }; C2AudioBuffer.prototype.isLoaded = function () { switch (this.myapi) { case API_HTML5: var ret = this.bufferObject["readyState"] >= 4; // HAVE_ENOUGH_DATA if (ret) this.wasEverReady = true; return ret || this.wasEverReady; case API_WEBAUDIO: return !!this.audioData || !!this.bufferObject; case API_CORDOVA: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.isLoadedAndDecoded = function () { switch (this.myapi) { case API_HTML5: return this.isLoaded(); // no distinction between loaded and decoded in HTML5 audio, just rely on ready state case API_WEBAUDIO: return !!this.bufferObject; case API_CORDOVA: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.hasFailedToLoad = function () { switch (this.myapi) { case API_HTML5: return !!this.bufferObject["error"]; case API_WEBAUDIO: return this.failedToLoad; } return false; }; function C2AudioInstance(buffer_, tag_) { var self = this; this.tag = tag_; this.fresh = true; this.stopped = true; this.src = buffer_.src; this.buffer = buffer_; this.myapi = api; this.is_music = buffer_.is_music; this.playbackRate = 1; this.hasPlaybackEnded = true; // ended flag this.resume_me = false; // make sure resumes when leaving suspend this.is_paused = false; this.resume_position = 0; // for web audio api to resume from correct playback position this.looping = false; this.is_muted = false; this.is_silent = false; this.volume = 1; this.onended_handler = function (e) { if (self.is_paused || self.resume_me) return; var bufferThatEnded = this; if (!bufferThatEnded) bufferThatEnded = e.target; if (bufferThatEnded !== self.active_buffer) return; self.hasPlaybackEnded = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }; this.active_buffer = null; this.isTimescaled = ((timescale_mode === 1 && !this.is_music) || timescale_mode === 2); this.mutevol = 1; this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum); this.gainNode = null; this.pannerNode = null; this.pannerEnabled = false; this.objectTracker = null; this.panX = 0; this.panY = 0; this.panAngle = 0; this.panConeInner = 0; this.panConeOuter = 0; this.panConeOuterGain = 0; this.instanceObject = null; var add_end_listener = false; if (this.myapi === API_WEBAUDIO && this.buffer.myapi === API_HTML5 && !this.buffer.supportWebAudioAPI) this.myapi = API_HTML5; switch (this.myapi) { case API_HTML5: if (this.is_music) { this.instanceObject = buffer_.bufferObject; add_end_listener = !buffer_.added_end_listener; buffer_.added_end_listener = true; } else { this.instanceObject = new Audio(); this.instanceObject.crossOrigin = "anonymous"; this.instanceObject.autoplay = false; this.instanceObject.src = buffer_.bufferObject.src; add_end_listener = true; } if (add_end_listener) { this.instanceObject.addEventListener('ended', function () { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } break; case API_WEBAUDIO: this.gainNode = createGain(); this.gainNode["connect"](getDestinationForTag(tag_)); if (this.buffer.myapi === API_WEBAUDIO) { if (buffer_.bufferObject) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = buffer_.bufferObject; this.instanceObject["connect"](this.gainNode); } } else { this.instanceObject = this.buffer.bufferObject; // reference the audio element this.buffer.outNode["connect"](this.gainNode); if (!this.buffer.added_end_listener) { this.buffer.added_end_listener = true; this.buffer.bufferObject.addEventListener('ended', function () { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } } break; case API_CORDOVA: this.instanceObject = new window["Media"](appPath + this.src, null, null, function (status) { if (status === window["Media"]["MEDIA_STOPPED"]) { self.hasPlaybackEnded = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); } }); break; case API_APPMOBI: this.instanceObject = true; break; } }; C2AudioInstance.prototype.hasEnded = function () { var time; switch (this.myapi) { case API_HTML5: return this.instanceObject.ended; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (!this.fresh && !this.stopped && this.instanceObject["loop"]) return false; if (this.is_paused) return false; return this.hasPlaybackEnded; } else return this.instanceObject.ended; case API_CORDOVA: return this.hasPlaybackEnded; case API_APPMOBI: true; // recycling an AppMobi sound does not matter because it will just do another throwaway playSound } return true; }; C2AudioInstance.prototype.canBeRecycled = function () { if (this.fresh || this.stopped) return true; // not yet used or is not playing return this.hasEnded(); }; C2AudioInstance.prototype.setPannerEnabled = function (enable_) { if (api !== API_WEBAUDIO) return; if (!this.pannerEnabled && enable_) { if (!this.gainNode) return; if (!this.pannerNode) { this.pannerNode = context["createPanner"](); if (typeof this.pannerNode["panningModel"] === "number") this.pannerNode["panningModel"] = panningModel; else this.pannerNode["panningModel"] = ["equalpower", "HRTF", "soundfield"][panningModel]; if (typeof this.pannerNode["distanceModel"] === "number") this.pannerNode["distanceModel"] = distanceModel; else this.pannerNode["distanceModel"] = ["linear", "inverse", "exponential"][distanceModel]; this.pannerNode["refDistance"] = refDistance; this.pannerNode["maxDistance"] = maxDistance; this.pannerNode["rolloffFactor"] = rolloffFactor; } this.gainNode["disconnect"](); this.gainNode["connect"](this.pannerNode); this.pannerNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = true; } else if (this.pannerEnabled && !enable_) { if (!this.gainNode) return; this.pannerNode["disconnect"](); this.gainNode["disconnect"](); this.gainNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = false; } }; C2AudioInstance.prototype.setPan = function (x, y, angle, innerangle, outerangle, outergain) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; this.pannerNode["setPosition"](x, y, 0); this.pannerNode["setOrientation"](Math.cos(cr.to_radians(angle)), Math.sin(cr.to_radians(angle)), 0); this.pannerNode["coneInnerAngle"] = innerangle; this.pannerNode["coneOuterAngle"] = outerangle; this.pannerNode["coneOuterGain"] = outergain; this.panX = x; this.panY = y; this.panAngle = angle; this.panConeInner = innerangle; this.panConeOuter = outerangle; this.panConeOuterGain = outergain; }; C2AudioInstance.prototype.setObject = function (o) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; if (!this.objectTracker) this.objectTracker = new ObjectTracker(); this.objectTracker.setObject(o); }; C2AudioInstance.prototype.tick = function (dt) { if (!this.pannerEnabled || api !== API_WEBAUDIO || !this.objectTracker || !this.objectTracker.hasObject() || !this.isPlaying()) { return; } this.objectTracker.tick(dt); var inst = this.objectTracker.obj; var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); this.pannerNode["setPosition"](px, py, 0); var a = 0; if (typeof this.objectTracker.obj.angle !== "undefined") { a = inst.angle - inst.layer.getAngle(); this.pannerNode["setOrientation"](Math.cos(a), Math.sin(a), 0); } px = cr.rotatePtAround(this.objectTracker.getVelocityX(), this.objectTracker.getVelocityY(), -inst.layer.getAngle(), 0, 0, true); py = cr.rotatePtAround(this.objectTracker.getVelocityX(), this.objectTracker.getVelocityY(), -inst.layer.getAngle(), 0, 0, false); this.pannerNode["setVelocity"](px, py, 0); }; C2AudioInstance.prototype.play = function (looping, vol, fromPosition) { var instobj = this.instanceObject; this.looping = looping; this.volume = vol; var seekPos = fromPosition || 0; switch (this.myapi) { case API_HTML5: if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.volume !== vol * masterVolume) instobj.volume = vol * masterVolume; if (instobj.loop !== looping) instobj.loop = looping; if (instobj.muted) instobj.muted = false; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) { ; } } if (this.is_music && isMusicWorkaround && !audRuntime.isInUserInputEvent) musicPlayNextTouch.push(this); else { try { this.instanceObject.play(); } catch (e) { // sometimes throws on WP8.1... try not to kill the app if (console && console.log) console.log("[C2] WARNING: exception trying to play audio '" + this.buffer.src + "': ", e); } } break; case API_WEBAUDIO: this.muted = false; this.mutevol = 1; if (this.buffer.myapi === API_WEBAUDIO) { this.gainNode["gain"]["value"] = vol * masterVolume; if (!this.fresh) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); } this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = looping; this.hasPlaybackEnded = false; if (seekPos === 0) startSource(this.instanceObject); else startSourceAt(this.instanceObject, seekPos, this.getDuration()); } else { if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.loop !== looping) instobj.loop = looping; instobj.volume = vol * masterVolume; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) { ; } } if (this.is_music && isMusicWorkaround && !audRuntime.isInUserInputEvent) musicPlayNextTouch.push(this); else instobj.play(); } break; case API_CORDOVA: if ((!this.fresh && this.stopped) || seekPos !== 0) instobj["seekTo"](seekPos); instobj["play"](); this.hasPlaybackEnded = false; break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["playSound"](this.src, looping); else AppMobi["player"]["playSound"](this.src, looping); break; } this.playbackRate = 1; this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - seekPos; this.fresh = false; this.stopped = false; this.is_paused = false; }; C2AudioInstance.prototype.stop = function () { switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) stopSource(this.instanceObject); else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_CORDOVA: this.instanceObject["stop"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.stopped = true; this.is_paused = false; }; C2AudioInstance.prototype.pause = function () { if (this.fresh || this.stopped || this.hasEnded() || this.is_paused) return; switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(true); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); this.is_paused = true; stopSource(this.instanceObject); } else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_CORDOVA: this.instanceObject["pause"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.is_paused = true; }; C2AudioInstance.prototype.resume = function () { if (this.fresh || this.stopped || this.hasEnded() || !this.is_paused) return; switch (this.myapi) { case API_HTML5: this.instanceObject.play(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.updatePlaybackRate(); this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - (this.resume_position / (this.playbackRate || 0.001)); startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject.play(); } break; case API_CORDOVA: this.instanceObject["play"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["resumeSound"](this.src); break; } this.is_paused = false; }; C2AudioInstance.prototype.seek = function (pos) { if (this.fresh || this.stopped || this.hasEnded()) return; switch (this.myapi) { case API_HTML5: try { this.instanceObject.currentTime = pos; } catch (e) {} break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) this.resume_position = pos; else { this.pause(); this.resume_position = pos; this.resume(); } } else { try { this.instanceObject.currentTime = pos; } catch (e) {} } break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["seekSound"](this.src, pos); break; } }; C2AudioInstance.prototype.reconnect = function (toNode) { if (this.myapi !== API_WEBAUDIO) return; if (this.pannerEnabled) { this.pannerNode["disconnect"](); this.pannerNode["connect"](toNode); } else { this.gainNode["disconnect"](); this.gainNode["connect"](toNode); } }; C2AudioInstance.prototype.getDuration = function (applyPlaybackRate) { var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.duration !== "undefined") ret = this.instanceObject.duration; break; case API_WEBAUDIO: ret = this.buffer.bufferObject["duration"]; break; case API_CORDOVA: ret = this.instanceObject["getDuration"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getDurationSound"](this.src); break; } if (applyPlaybackRate) ret /= (this.playbackRate || 0.001); // avoid divide-by-zero return ret; }; C2AudioInstance.prototype.getPlaybackTime = function (applyPlaybackRate) { var duration = this.getDuration(); var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) return this.resume_position; else ret = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - this.startTime; } else if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getPlaybackTimeSound"](this.src); break; } if (applyPlaybackRate) ret *= this.playbackRate; if (!this.looping && ret > duration) ret = duration; return ret; }; C2AudioInstance.prototype.isPlaying = function () { return !this.is_paused && !this.fresh && !this.stopped && !this.hasEnded(); }; C2AudioInstance.prototype.setVolume = function (v) { this.volume = v; this.updateVolume(); }; C2AudioInstance.prototype.updateVolume = function () { var volToSet = this.volume * masterVolume; if (!isFinite(volToSet)) volToSet = 0; // HTMLMediaElement throws if setting non-finite volume switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.volume !== "undefined" && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.gainNode["gain"]["value"] = volToSet * this.mutevol; } else { if (typeof this.instanceObject.volume !== "undefined" && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.getVolume = function () { return this.volume; }; C2AudioInstance.prototype.doSetMuted = function (m) { switch (this.myapi) { case API_HTML5: if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.mutevol = (m ? 0 : 1); this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; } else { if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setMuted = function (m) { this.is_muted = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setSilent = function (m) { this.is_silent = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setLooping = function (l) { this.looping = l; switch (this.myapi) { case API_HTML5: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_WEBAUDIO: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["setLoopingSound"](this.src, l); break; } }; C2AudioInstance.prototype.setPlaybackRate = function (r) { this.playbackRate = r; this.updatePlaybackRate(); }; C2AudioInstance.prototype.updatePlaybackRate = function () { var r = this.playbackRate; if (this.isTimescaled) r *= audRuntime.timescale; switch (this.myapi) { case API_HTML5: if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.instanceObject["playbackRate"]["value"] !== r) this.instanceObject["playbackRate"]["value"] = r; } else { if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setSuspended = function (s) { switch (this.myapi) { case API_HTML5: if (s) { if (this.isPlaying()) { this.resume_me = true; this.instanceObject["pause"](); } else this.resume_me = false; } else { if (this.resume_me) { this.instanceObject["play"](); this.resume_me = false; } } break; case API_WEBAUDIO: if (s) { if (this.isPlaying()) { this.resume_me = true; if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(true); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); stopSource(this.instanceObject); } else this.instanceObject["pause"](); } else this.resume_me = false; } else { if (this.resume_me) { if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.updatePlaybackRate(); this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - (this.resume_position / (this.playbackRate || 0.001)); startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject["play"](); } this.resume_me = false; } } break; case API_CORDOVA: if (s) { if (this.isPlaying()) { this.instanceObject["pause"](); this.resume_me = true; } else this.resume_me = false; } else { if (this.resume_me) { this.resume_me = false; this.instanceObject["play"](); } } break; case API_APPMOBI: break; } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; audRuntime = this.runtime; audInst = this; this.listenerTracker = null; this.listenerZ = -600; if ((this.runtime.isiOS || (this.runtime.isAndroid && (this.runtime.isChrome || this.runtime.isAndroidStockBrowser))) && !this.runtime.isCrosswalk && !this.runtime.isDomFree && !this.runtime.isAmazonWebApp) { isMusicWorkaround = true; } context = null; if (typeof AudioContext !== "undefined") { api = API_WEBAUDIO; context = new AudioContext(); } else if (typeof webkitAudioContext !== "undefined") { api = API_WEBAUDIO; context = new webkitAudioContext(); } if (isMusicWorkaround) { var unblockWebAudio = function () { var buffer = context["createBuffer"](1, 1, 22050); var source = context["createBufferSource"](); source["buffer"] = buffer; source["connect"](context["destination"]); startSource(source); }; var playQueuedMusic = function () { var i, len, m; if (isMusicWorkaround) { if (!silent) { for (i = 0, len = musicPlayNextTouch.length; i < len; ++i) { m = musicPlayNextTouch[i]; if (!m.stopped && !m.is_paused) m.instanceObject.play(); } } cr.clearArray(musicPlayNextTouch); } }; document.addEventListener("touchend", function () { if (!iOShadtouchend && context) { unblockWebAudio(); iOShadtouchend = true; } playQueuedMusic(); }, true); } if (api !== API_WEBAUDIO) { if (this.runtime.isCordova && typeof window["Media"] !== "undefined") api = API_CORDOVA; else if (this.runtime.isAppMobi) api = API_APPMOBI; } if (api === API_CORDOVA) { appPath = location.href; var i = appPath.lastIndexOf("/"); if (i > -1) appPath = appPath.substr(0, i + 1); appPath = appPath.replace("file://", ""); } if (this.runtime.isSafari && this.runtime.isWindows && typeof Audio === "undefined") { alert("It looks like you're using Safari for Windows without Quicktime. Audio cannot be played until Quicktime is installed."); this.runtime.DestroyInstance(this); } else { if (this.runtime.isDirectCanvas) useOgg = this.runtime.isAndroid; // AAC on iOS, OGG on Android else { try { useOgg = !!(new Audio().canPlayType('audio/ogg; codecs="vorbis"')); } catch (e) { useOgg = false; } } switch (api) { case API_HTML5: ; break; case API_WEBAUDIO: ; break; case API_CORDOVA: ; break; case API_APPMOBI: ; break; default: ; } this.runtime.tickMe(this); } }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function () { this.runtime.audioInstance = this; timescale_mode = this.properties[0]; // 0 = off, 1 = sounds only, 2 = all this.saveload = this.properties[1]; // 0 = all, 1 = sounds only, 2 = music only, 3 = none this.playinbackground = (this.properties[2] !== 0); panningModel = this.properties[3]; // 0 = equalpower, 1 = hrtf, 3 = soundfield distanceModel = this.properties[4]; // 0 = linear, 1 = inverse, 2 = exponential this.listenerZ = -this.properties[5]; refDistance = this.properties[6]; maxDistance = this.properties[7]; rolloffFactor = this.properties[8]; this.listenerTracker = new ObjectTracker(); var draw_width = (this.runtime.draw_width || this.runtime.width); var draw_height = (this.runtime.draw_height || this.runtime.height); if (api === API_WEBAUDIO) { if (typeof context["listener"]["dopplerFactor"] !== "undefined") context["listener"]["dopplerFactor"] = 0; context["listener"]["setPosition"](draw_width / 2, draw_height / 2, this.listenerZ); context["listener"]["setOrientation"](0, 0, 1, 0, -1, 0); window["c2OnAudioMicStream"] = function (localMediaStream, tag) { if (micSource) micSource["disconnect"](); micTag = tag.toLowerCase(); micSource = context["createMediaStreamSource"](localMediaStream); micSource["connect"](getDestinationForTag(micTag)); }; } this.runtime.addSuspendCallback(function(s) { audInst.onSuspend(s); }); var self = this; this.runtime.addDestroyCallback(function (inst) { self.onInstanceDestroyed(inst); }); }; instanceProto.onInstanceDestroyed = function (inst) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.objectTracker) { if (a.objectTracker.obj === inst) { a.objectTracker.obj = null; if (a.pannerEnabled && a.isPlaying() && a.looping) a.stop(); } } } if (this.listenerTracker.obj === inst) this.listenerTracker.obj = null; }; instanceProto.saveToJSON = function () { var o = { "silent": silent, "masterVolume": masterVolume, "listenerZ": this.listenerZ, "listenerUid": this.listenerTracker.hasObject() ? this.listenerTracker.obj.uid : -1, "playing": [], "effects": {} }; var playingarr = o["playing"]; var i, len, a, d, p, panobj, playbackTime; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (!a.isPlaying()) continue; // no need to save stopped sounds if (this.saveload === 3) // not saving/loading any sounds/music continue; if (a.is_music && this.saveload === 1) // not saving/loading music continue; if (!a.is_music && this.saveload === 2) // not saving/loading sound continue; playbackTime = a.getPlaybackTime(); if (a.looping) playbackTime = playbackTime % a.getDuration(); d = { "tag": a.tag, "buffersrc": a.buffer.src, "is_music": a.is_music, "playbackTime": playbackTime, "volume": a.volume, "looping": a.looping, "muted": a.is_muted, "playbackRate": a.playbackRate, "paused": a.is_paused, "resume_position": a.resume_position }; if (a.pannerEnabled) { d["pan"] = {}; panobj = d["pan"]; if (a.objectTracker && a.objectTracker.hasObject()) { panobj["objUid"] = a.objectTracker.obj.uid; } else { panobj["x"] = a.panX; panobj["y"] = a.panY; panobj["a"] = a.panAngle; } panobj["ia"] = a.panConeInner; panobj["oa"] = a.panConeOuter; panobj["og"] = a.panConeOuterGain; } playingarr.push(d); } var fxobj = o["effects"]; var fxarr; for (p in effects) { if (effects.hasOwnProperty(p)) { fxarr = []; for (i = 0, len = effects[p].length; i < len; i++) { fxarr.push({ "type": effects[p][i].type, "params": effects[p][i].params }); } fxobj[p] = fxarr; } } return o; }; var objectTrackerUidsToLoad = []; instanceProto.loadFromJSON = function (o) { var setSilent = o["silent"]; masterVolume = o["masterVolume"]; this.listenerZ = o["listenerZ"]; this.listenerTracker.setObject(null); var listenerUid = o["listenerUid"]; if (listenerUid !== -1) { this.listenerTracker.loadUid = listenerUid; objectTrackerUidsToLoad.push(this.listenerTracker); } var playingarr = o["playing"]; var i, len, d, src, is_music, tag, playbackTime, looping, vol, b, a, p, pan, panObjUid; if (this.saveload !== 3) { for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.is_music && this.saveload === 1) continue; // only saving/loading sound: leave music playing if (!a.is_music && this.saveload === 2) continue; // only saving/loading music: leave sound playing a.stop(); } } var fxarr, fxtype, fxparams, fx; for (p in effects) { if (effects.hasOwnProperty(p)) { for (i = 0, len = effects[p].length; i < len; i++) effects[p][i].remove(); } } cr.wipe(effects); for (p in o["effects"]) { if (o["effects"].hasOwnProperty(p)) { fxarr = o["effects"][p]; for (i = 0, len = fxarr.length; i < len; i++) { fxtype = fxarr[i]["type"]; fxparams = fxarr[i]["params"]; switch (fxtype) { case "filter": addEffectForTag(p, new FilterEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "delay": addEffectForTag(p, new DelayEffect(fxparams[0], fxparams[1], fxparams[2])); break; case "convolve": src = fxparams[2]; b = this.getAudioBuffer(src, false); if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, fxparams[0], fxparams[1], src); } else { fx = new ConvolveEffect(null, fxparams[0], fxparams[1], src); b.normalizeWhenReady = fxparams[0]; b.convolveWhenReady = fx; } addEffectForTag(p, fx); break; case "flanger": addEffectForTag(p, new FlangerEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "phaser": addEffectForTag(p, new PhaserEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "gain": addEffectForTag(p, new GainEffect(fxparams[0])); break; case "tremolo": addEffectForTag(p, new TremoloEffect(fxparams[0], fxparams[1])); break; case "ringmod": addEffectForTag(p, new RingModulatorEffect(fxparams[0], fxparams[1])); break; case "distortion": addEffectForTag(p, new DistortionEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "compressor": addEffectForTag(p, new CompressorEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "analyser": addEffectForTag(p, new AnalyserEffect(fxparams[0], fxparams[1])); break; } } } } for (i = 0, len = playingarr.length; i < len; i++) { if (this.saveload === 3) // not saving/loading any sounds/music continue; d = playingarr[i]; src = d["buffersrc"]; is_music = d["is_music"]; tag = d["tag"]; playbackTime = d["playbackTime"]; looping = d["looping"]; vol = d["volume"]; pan = d["pan"]; panObjUid = (pan && pan.hasOwnProperty("objUid")) ? pan["objUid"] : -1; if (is_music && this.saveload === 1) // not saving/loading music continue; if (!is_music && this.saveload === 2) // not saving/loading sound continue; a = this.getAudioInstance(src, tag, is_music, looping, vol); if (!a) { b = this.getAudioBuffer(src, is_music); b.seekWhenReady = playbackTime; b.pauseWhenReady = d["paused"]; if (pan) { if (panObjUid !== -1) { b.panWhenReady.push({ objUid: panObjUid, ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } else { b.panWhenReady.push({ x: pan["x"], y: pan["y"], a: pan["a"], ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } } continue; } a.resume_position = d["resume_position"]; a.setPannerEnabled(!!pan); a.play(looping, vol, playbackTime); a.updatePlaybackRate(); a.updateVolume(); a.doSetMuted(a.is_muted || a.is_silent); if (d["paused"]) a.pause(); if (d["muted"]) a.setMuted(true); a.doSetMuted(a.is_muted || a.is_silent); if (pan) { if (panObjUid !== -1) { a.objectTracker = a.objectTracker || new ObjectTracker(); a.objectTracker.loadUid = panObjUid; objectTrackerUidsToLoad.push(a.objectTracker); } else { a.setPan(pan["x"], pan["y"], pan["a"], pan["ia"], pan["oa"], pan["og"]); } } } if (setSilent && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (!setSilent && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; instanceProto.afterLoad = function () { var i, len, ot, inst; for (i = 0, len = objectTrackerUidsToLoad.length; i < len; i++) { ot = objectTrackerUidsToLoad[i]; inst = this.runtime.getObjectByUID(ot.loadUid); ot.setObject(inst); ot.loadUid = -1; if (inst) { listenerX = inst.x; listenerY = inst.y; } } cr.clearArray(objectTrackerUidsToLoad); }; instanceProto.onSuspend = function (s) { if (this.playinbackground) return; if (!s && context && context["resume"]) context["resume"](); var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSuspended(s); if (s && context && context["suspend"]) context["suspend"](); }; instanceProto.tick = function () { var dt = this.runtime.dt; var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; a.tick(dt); if (timescale_mode !== 0) a.updatePlaybackRate(); } var p, arr, f; for (p in effects) { if (effects.hasOwnProperty(p)) { arr = effects[p]; for (i = 0, len = arr.length; i < len; i++) { f = arr[i]; if (f.tick) f.tick(); } } } if (api === API_WEBAUDIO && this.listenerTracker.hasObject()) { this.listenerTracker.tick(dt); listenerX = this.listenerTracker.obj.x; listenerY = this.listenerTracker.obj.y; context["listener"]["setPosition"](this.listenerTracker.obj.x, this.listenerTracker.obj.y, this.listenerZ); context["listener"]["setVelocity"](this.listenerTracker.getVelocityX(), this.listenerTracker.getVelocityY(), 0); } }; var preload_list = []; instanceProto.setPreloadList = function (arr) { var i, len, p, filename, size, isOgg; var total_size = 0; for (i = 0, len = arr.length; i < len; ++i) { p = arr[i]; filename = p[0]; size = p[1] * 2; isOgg = (filename.length > 4 && filename.substr(filename.length - 4) === ".ogg"); if ((isOgg && useOgg) || (!isOgg && !useOgg)) { preload_list.push({ filename: filename, size: size, obj: null }); total_size += size; } } return total_size; }; instanceProto.startPreloads = function () { var i, len, p, src; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; src = this.runtime.files_subfolder + p.filename; p.obj = this.getAudioBuffer(src, false); } }; instanceProto.getPreloadedSize = function () { var completed = 0; var i, len, p; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; if (p.obj.isLoadedAndDecoded() || p.obj.hasFailedToLoad() || this.runtime.isDomFree || this.runtime.isAndroidStockBrowser) { completed += p.size; } else if (p.obj.isLoaded()) // downloaded but not decoded: only happens in Web Audio API, count as half-way progress { completed += Math.floor(p.size / 2); } }; return completed; }; instanceProto.getAudioBuffer = function (src_, is_music) { var i, len, a, ret = null, j, k, lenj, ai; for (i = 0, len = audioBuffers.length; i < len; i++) { a = audioBuffers[i]; if (a.src === src_) { ret = a; break; } } if (!ret) { ret = new C2AudioBuffer(src_, is_music); audioBuffers.push(ret); } return ret; }; instanceProto.getAudioInstance = function (src_, tag, is_music, looping, vol) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.src === src_ && (a.canBeRecycled() || is_music)) { a.tag = tag; return a; } } var b = this.getAudioBuffer(src_, is_music); if (!b.bufferObject) { if (tag !== "<preload>") { b.playTagWhenReady = tag; b.loopWhenReady = looping; b.volumeWhenReady = vol; } return null; } a = new C2AudioInstance(b, tag); audioInstances.push(a); return a; }; var taggedAudio = []; function SortByIsPlaying(a, b) { var an = a.isPlaying() ? 1 : 0; var bn = b.isPlaying() ? 1 : 0; if (an === bn) return 0; else if (an < bn) return 1; else return -1; }; function getAudioByTag(tag, sort_by_playing) { cr.clearArray(taggedAudio); if (!tag.length) { if (!lastAudio || lastAudio.hasEnded()) return; else { cr.clearArray(taggedAudio); taggedAudio[0] = lastAudio; return; } } var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (cr.equals_nocase(tag, a.tag)) taggedAudio.push(a); } if (sort_by_playing) taggedAudio.sort(SortByIsPlaying); }; function reconnectEffects(tag) { var i, len, arr, n, toNode = context["destination"]; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { toNode = arr[0].getInputNode(); for (i = 0, len = arr.length; i < len; i++) { n = arr[i]; if (i + 1 === len) n.connectTo(context["destination"]); else n.connectTo(arr[i + 1].getInputNode()); } } } getAudioByTag(tag); for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].reconnect(toNode); if (micSource && micTag === tag) { micSource["disconnect"](); micSource["connect"](toNode); } }; function addEffectForTag(tag, fx) { if (!effects.hasOwnProperty(tag)) effects[tag] = [fx]; else effects[tag].push(fx); reconnectEffects(tag); }; function Cnds() {}; Cnds.prototype.OnEnded = function (t) { return cr.equals_nocase(audTag, t); }; Cnds.prototype.PreloadsComplete = function () { var i, len; for (i = 0, len = audioBuffers.length; i < len; i++) { if (!audioBuffers[i].isLoadedAndDecoded() && !audioBuffers[i].hasFailedToLoad()) return false; } return true; }; Cnds.prototype.AdvancedAudioSupported = function () { return api === API_WEBAUDIO; }; Cnds.prototype.IsSilent = function () { return silent; }; Cnds.prototype.IsAnyPlaying = function () { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) { if (audioInstances[i].isPlaying()) return true; } return false; }; Cnds.prototype.IsTagPlaying = function (tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (taggedAudio[i].isPlaying()) return true; } return false; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Play = function (file, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtPosition = function (file, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtObject = function (file, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayByName = function (folder, filename, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtPositionByName = function (folder, filename, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtObjectByName = function (folder, filename, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping!==0, v); }; Acts.prototype.SetLooping = function (tag, looping) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setLooping(looping === 0); }; Acts.prototype.SetMuted = function (tag, muted) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setMuted(muted === 0); }; Acts.prototype.SetVolume = function (tag, vol) { getAudioByTag(tag); var v = dbToLinear(vol); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setVolume(v); }; Acts.prototype.Preload = function (file) { if (silent) return; var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_CORDOVA) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.PreloadByName = function (folder, filename) { if (silent) return; var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_CORDOVA) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.SetPlaybackRate = function (tag, rate) { getAudioByTag(tag); if (rate < 0.0) rate = 0; var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setPlaybackRate(rate); }; Acts.prototype.Stop = function (tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].stop(); }; Acts.prototype.StopAll = function () { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].stop(); }; Acts.prototype.SetPaused = function (tag, state) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (state === 0) taggedAudio[i].pause(); else taggedAudio[i].resume(); } }; Acts.prototype.Seek = function (tag, pos) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { taggedAudio[i].seek(pos); } }; Acts.prototype.SetSilent = function (s) { var i, len; if (s === 2) // toggling s = (silent ? 1 : 0); // choose opposite state if (s === 0 && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (s === 1 && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; Acts.prototype.SetMasterVolume = function (vol) { masterVolume = dbToLinear(vol); var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].updateVolume(); }; Acts.prototype.AddFilterEffect = function (tag, type, freq, detune, q, gain, mix) { if (api !== API_WEBAUDIO || type < 0 || type >= filterTypes.length || !context["createBiquadFilter"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FilterEffect(type, freq, detune, q, gain, mix)); }; Acts.prototype.AddDelayEffect = function (tag, delay, gain, mix) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DelayEffect(delay, dbToLinear(gain), mix)); }; Acts.prototype.AddFlangerEffect = function (tag, delay, modulation, freq, feedback, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FlangerEffect(delay / 1000, modulation / 1000, freq, feedback / 100, mix)); }; Acts.prototype.AddPhaserEffect = function (tag, freq, detune, q, mod, modfreq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new PhaserEffect(freq, detune, q, mod, modfreq, mix)); }; Acts.prototype.AddConvolutionEffect = function (tag, file, norm, mix) { if (api !== API_WEBAUDIO || !context["createConvolver"]) return; var doNormalize = (norm === 0); var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); var b = this.getAudioBuffer(src, false); tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; var fx; if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, doNormalize, mix, src); } else { fx = new ConvolveEffect(null, doNormalize, mix, src); b.normalizeWhenReady = doNormalize; b.convolveWhenReady = fx; } addEffectForTag(tag, fx); }; Acts.prototype.AddGainEffect = function (tag, g) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(dbToLinear(g))); }; Acts.prototype.AddMuteEffect = function (tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(0)); // re-use gain effect with 0 gain }; Acts.prototype.AddTremoloEffect = function (tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new TremoloEffect(freq, mix)); }; Acts.prototype.AddRingModEffect = function (tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new RingModulatorEffect(freq, mix)); }; Acts.prototype.AddDistortionEffect = function (tag, threshold, headroom, drive, makeupgain, mix) { if (api !== API_WEBAUDIO || !context["createWaveShaper"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DistortionEffect(threshold, headroom, drive, makeupgain, mix)); }; Acts.prototype.AddCompressorEffect = function (tag, threshold, knee, ratio, attack, release) { if (api !== API_WEBAUDIO || !context["createDynamicsCompressor"]) return; tag = tag.toLowerCase(); addEffectForTag(tag, new CompressorEffect(threshold, knee, ratio, attack / 1000, release / 1000)); }; Acts.prototype.AddAnalyserEffect = function (tag, fftSize, smoothing) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new AnalyserEffect(fftSize, smoothing)); }; Acts.prototype.RemoveEffects = function (tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); var i, len, arr; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { for (i = 0, len = arr.length; i < len; i++) arr[i].remove(); cr.clearArray(arr); reconnectEffects(tag); } } }; Acts.prototype.SetEffectParameter = function (tag, index, param, value, ramp, time) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); index = Math.floor(index); var arr; if (!effects.hasOwnProperty(tag)) return; arr = effects[tag]; if (index < 0 || index >= arr.length) return; arr[index].setParam(param, value, ramp, time); }; Acts.prototype.SetListenerObject = function (obj_) { if (!obj_ || api !== API_WEBAUDIO) return; var inst = obj_.getFirstPicked(); if (!inst) return; this.listenerTracker.setObject(inst); listenerX = inst.x; listenerY = inst.y; }; Acts.prototype.SetListenerZ = function (z) { this.listenerZ = z; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.Duration = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getDuration()); else ret.set_float(0); }; Exps.prototype.PlaybackTime = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getPlaybackTime(true)); else ret.set_float(0); }; Exps.prototype.Volume = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) { var v = taggedAudio[0].getVolume(); ret.set_float(linearToDb(v)); } else ret.set_float(0); }; Exps.prototype.MasterVolume = function (ret) { ret.set_float(linearToDb(masterVolume)); }; Exps.prototype.EffectCount = function (ret, tag) { tag = tag.toLowerCase(); var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; ret.set_int(arr ? arr.length : 0); }; function getAnalyser(tag, index) { var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; if (arr && index >= 0 && index < arr.length && arr[index].freqBins) return arr[index]; else return null; }; Exps.prototype.AnalyserFreqBinCount = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); ret.set_int(analyser ? analyser.node["frequencyBinCount"] : 0); }; Exps.prototype.AnalyserFreqBinAt = function (ret, tag, index, bin) { tag = tag.toLowerCase(); index = Math.floor(index); bin = Math.floor(bin); var analyser = getAnalyser(tag, index); if (!analyser) ret.set_float(0); else if (bin < 0 || bin >= analyser.node["frequencyBinCount"]) ret.set_float(0); else ret.set_float(analyser.freqBins[bin]); }; Exps.prototype.AnalyserPeakLevel = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.peak); else ret.set_float(0); }; Exps.prototype.AnalyserRMSLevel = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.rms); else ret.set_float(0); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Browser = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Browser.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; window.addEventListener("resize", function () { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnResize, self); }); if (typeof navigator.onLine !== "undefined") { window.addEventListener("online", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOnline, self); }); window.addEventListener("offline", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOffline, self); }); } if (typeof window.applicationCache !== "undefined") { window.applicationCache.addEventListener('updateready', function() { self.runtime.loadingprogress = 1; self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); window.applicationCache.addEventListener('progress', function(e) { self.runtime.loadingprogress = e["loaded"] / e["total"]; }); } if (!this.runtime.isDirectCanvas) { document.addEventListener("appMobi.device.update.available", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); document.addEventListener("backbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }); document.addEventListener("menubutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); }); document.addEventListener("searchbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnSearchButton, self); }); document.addEventListener("tizenhwkey", function (e) { var ret; switch (e["keyName"]) { case "back": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); if (!ret) { if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); } break; case "menu": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); if (!ret) e.preventDefault(); break; } }); } if (this.runtime.isWinJS && WinJS["Application"]) { WinJS["Application"]["onbackclick"] = function (e) { return !!self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }; } this.runtime.addSuspendCallback(function(s) { if (s) { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageHidden, self); } else { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageVisible, self); } }); this.is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); }; var batteryManager = null; var loadedBatteryManager = false; function maybeLoadBatteryManager() { if (loadedBatteryManager) return; if (!navigator["getBattery"]) return; var promise = navigator["getBattery"](); loadedBatteryManager = true; if (promise) { promise.then(function (manager) { batteryManager = manager; }); } }; function Cnds() {}; Cnds.prototype.CookiesEnabled = function() { return navigator ? navigator.cookieEnabled : false; }; Cnds.prototype.IsOnline = function() { return navigator ? navigator.onLine : false; }; Cnds.prototype.HasJava = function() { return navigator ? navigator.javaEnabled() : false; }; Cnds.prototype.OnOnline = function() { return true; }; Cnds.prototype.OnOffline = function() { return true; }; Cnds.prototype.IsDownloadingUpdate = function () { if (typeof window["applicationCache"] === "undefined") return false; else return window["applicationCache"]["status"] === window["applicationCache"]["DOWNLOADING"]; }; Cnds.prototype.OnUpdateReady = function () { return true; }; Cnds.prototype.PageVisible = function () { return !this.runtime.isSuspended; }; Cnds.prototype.OnPageVisible = function () { return true; }; Cnds.prototype.OnPageHidden = function () { return true; }; Cnds.prototype.OnResize = function () { return true; }; Cnds.prototype.IsFullscreen = function () { return !!(document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || this.runtime.isNodeFullscreen); }; Cnds.prototype.OnBackButton = function () { return true; }; Cnds.prototype.OnMenuButton = function () { return true; }; Cnds.prototype.OnSearchButton = function () { return true; }; Cnds.prototype.IsMetered = function () { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) return false; return !!connection["metered"]; }; Cnds.prototype.IsCharging = function () { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { return !!battery["charging"] } else { maybeLoadBatteryManager(); if (batteryManager) { return !!batteryManager["charging"]; } else { return true; // if unknown, default to charging (powered) } } }; Cnds.prototype.IsPortraitLandscape = function (p) { var current = (window.innerWidth <= window.innerHeight ? 0 : 1); return current === p; }; Cnds.prototype.SupportsFullscreen = function () { if (this.runtime.isNodeWebkit) return true; var elem = this.runtime.canvasdiv || this.runtime.canvas; return !!(elem["requestFullscreen"] || elem["mozRequestFullScreen"] || elem["msRequestFullscreen"] || elem["webkitRequestFullScreen"]); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Alert = function (msg) { if (!this.runtime.isDomFree) alert(msg.toString()); }; Acts.prototype.Close = function () { if (this.runtime.isCocoonJs) CocoonJS["App"]["forceToFinish"](); else if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); else if (navigator["app"] && navigator["app"]["exitApp"]) navigator["app"]["exitApp"](); else if (navigator["device"] && navigator["device"]["exitApp"]) navigator["device"]["exitApp"](); else if (!this.is_arcade && !this.runtime.isDomFree) window.close(); }; Acts.prototype.Focus = function () { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["focus"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.focus(); }; Acts.prototype.Blur = function () { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["blur"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.blur(); }; Acts.prototype.GoBack = function () { if (navigator["app"] && navigator["app"]["backHistory"]) navigator["app"]["backHistory"](); else if (!this.is_arcade && !this.runtime.isDomFree && window.back) window.back(); }; Acts.prototype.GoForward = function () { if (!this.is_arcade && !this.runtime.isDomFree && window.forward) window.forward(); }; Acts.prototype.GoHome = function () { if (!this.is_arcade && !this.runtime.isDomFree && window.home) window.home(); }; Acts.prototype.GoToURL = function (url, target) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (this.runtime.isCordova) window.open(url, "_system"); else if (!this.is_arcade && !this.runtime.isDomFree) { if (target === 2 && !this.is_arcade) // top window.top.location = url; else if (target === 1 && !this.is_arcade) // parent window.parent.location = url; else // self window.location = url; } }; Acts.prototype.GoToURLWindow = function (url, tag) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (this.runtime.isCordova) window.open(url, "_system"); else if (!this.is_arcade && !this.runtime.isDomFree) window.open(url, tag); }; Acts.prototype.Reload = function () { if (!this.is_arcade && !this.runtime.isDomFree) window.location.reload(); }; var firstRequestFullscreen = true; var crruntime = null; function onFullscreenError(e) { if (console && console.warn) console.warn("Fullscreen request failed: ", e); crruntime["setSize"](window.innerWidth, window.innerHeight); }; Acts.prototype.RequestFullScreen = function (stretchmode) { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Requesting fullscreen is not supported on this platform - the request has been ignored"); return; } if (stretchmode >= 2) stretchmode += 1; if (stretchmode === 6) stretchmode = 2; if (this.runtime.isNodeWebkit) { if (this.runtime.isDebug) { debuggerFullscreen(true); } else if (!this.runtime.isNodeFullscreen && window["nwgui"]) { window["nwgui"]["Window"]["get"]()["enterFullscreen"](); this.runtime.isNodeFullscreen = true; this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); } } else { if (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || document["fullScreenElement"]) { return; } this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); var elem = this.runtime.canvasdiv || this.runtime.canvas; if (firstRequestFullscreen) { firstRequestFullscreen = false; crruntime = this.runtime; elem.addEventListener("mozfullscreenerror", onFullscreenError); elem.addEventListener("webkitfullscreenerror", onFullscreenError); elem.addEventListener("MSFullscreenError", onFullscreenError); elem.addEventListener("fullscreenerror", onFullscreenError); } if (elem["requestFullscreen"]) elem["requestFullscreen"](); else if (elem["mozRequestFullScreen"]) elem["mozRequestFullScreen"](); else if (elem["msRequestFullscreen"]) elem["msRequestFullscreen"](); else if (elem["webkitRequestFullScreen"]) { if (typeof Element !== "undefined" && typeof Element["ALLOW_KEYBOARD_INPUT"] !== "undefined") elem["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]); else elem["webkitRequestFullScreen"](); } } }; Acts.prototype.CancelFullScreen = function () { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Exiting fullscreen is not supported on this platform - the request has been ignored"); return; } if (this.runtime.isNodeWebkit) { if (this.runtime.isDebug) { debuggerFullscreen(false); } else if (this.runtime.isNodeFullscreen && window["nwgui"]) { window["nwgui"]["Window"]["get"]()["leaveFullscreen"](); this.runtime.isNodeFullscreen = false; } } else { if (document["exitFullscreen"]) document["exitFullscreen"](); else if (document["mozCancelFullScreen"]) document["mozCancelFullScreen"](); else if (document["msExitFullscreen"]) document["msExitFullscreen"](); else if (document["webkitCancelFullScreen"]) document["webkitCancelFullScreen"](); } }; Acts.prototype.Vibrate = function (pattern_) { try { var arr = pattern_.split(","); var i, len; for (i = 0, len = arr.length; i < len; i++) { arr[i] = parseInt(arr[i], 10); } if (navigator["vibrate"]) navigator["vibrate"](arr); else if (navigator["mozVibrate"]) navigator["mozVibrate"](arr); else if (navigator["webkitVibrate"]) navigator["webkitVibrate"](arr); else if (navigator["msVibrate"]) navigator["msVibrate"](arr); } catch (e) {} }; Acts.prototype.InvokeDownload = function (url_, filename_) { var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(url_); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = url_; a["download"] = filename_; body.appendChild(a); var clickEvent = document.createEvent("MouseEvent"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.InvokeDownloadString = function (str_, mimetype_, filename_) { var datauri = "data:" + mimetype_ + "," + encodeURIComponent(str_); var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(datauri); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = datauri; a["download"] = filename_; body.appendChild(a); var clickEvent = document.createEvent("MouseEvent"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.ConsoleLog = function (type_, msg_) { if (typeof console === "undefined") return; if (type_ === 0 && console.log) console.log(msg_.toString()); if (type_ === 1 && console.warn) console.warn(msg_.toString()); if (type_ === 2 && console.error) console.error(msg_.toString()); }; Acts.prototype.ConsoleGroup = function (name_) { if (console && console.group) console.group(name_); }; Acts.prototype.ConsoleGroupEnd = function () { if (console && console.groupEnd) console.groupEnd(); }; Acts.prototype.ExecJs = function (js_) { try { if (eval) eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } }; var orientations = [ "portrait", "landscape", "portrait-primary", "portrait-secondary", "landscape-primary", "landscape-secondary" ]; Acts.prototype.LockOrientation = function (o) { o = Math.floor(o); if (o < 0 || o >= orientations.length) return; this.runtime.autoLockOrientation = false; var orientation = orientations[o]; if (screen["orientation"] && screen["orientation"]["lock"]) screen["orientation"]["lock"](orientation); else if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); }; Acts.prototype.UnlockOrientation = function () { this.runtime.autoLockOrientation = false; if (screen["orientation"] && screen["orientation"]["unlock"]) screen["orientation"]["unlock"](); else if (screen["unlockOrientation"]) screen["unlockOrientation"](); else if (screen["webkitUnlockOrientation"]) screen["webkitUnlockOrientation"](); else if (screen["mozUnlockOrientation"]) screen["mozUnlockOrientation"](); else if (screen["msUnlockOrientation"]) screen["msUnlockOrientation"](); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.URL = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.toString()); }; Exps.prototype.Protocol = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.protocol); }; Exps.prototype.Domain = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hostname); }; Exps.prototype.PathName = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.pathname); }; Exps.prototype.Hash = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hash); }; Exps.prototype.Referrer = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : document.referrer); }; Exps.prototype.Title = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : document.title); }; Exps.prototype.Name = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appName); }; Exps.prototype.Version = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appVersion); }; Exps.prototype.Language = function (ret) { if (navigator && navigator.language) ret.set_string(navigator.language); else ret.set_string(""); }; Exps.prototype.Platform = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.platform); }; Exps.prototype.Product = function (ret) { if (navigator && navigator.product) ret.set_string(navigator.product); else ret.set_string(""); }; Exps.prototype.Vendor = function (ret) { if (navigator && navigator.vendor) ret.set_string(navigator.vendor); else ret.set_string(""); }; Exps.prototype.UserAgent = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.userAgent); }; Exps.prototype.QueryString = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.search); }; Exps.prototype.QueryParam = function (ret, paramname) { if (this.runtime.isDomFree) { ret.set_string(""); return; } var match = RegExp('[?&]' + paramname + '=([^&]*)').exec(window.location.search); if (match) ret.set_string(decodeURIComponent(match[1].replace(/\+/g, ' '))); else ret.set_string(""); }; Exps.prototype.Bandwidth = function (ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_float(Number.POSITIVE_INFINITY); else { if (typeof connection["bandwidth"] !== "undefined") ret.set_float(connection["bandwidth"]); else if (typeof connection["downlinkMax"] !== "undefined") ret.set_float(connection["downlinkMax"]); else ret.set_float(Number.POSITIVE_INFINITY); } }; Exps.prototype.ConnectionType = function (ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_string("unknown"); else { ret.set_string(connection["type"] || "unknown"); } }; Exps.prototype.BatteryLevel = function (ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { ret.set_float(battery["level"]); } else { maybeLoadBatteryManager(); if (batteryManager) { ret.set_float(batteryManager["level"]); } else { ret.set_float(1); // not supported/unknown: assume charged } } }; Exps.prototype.BatteryTimeLeft = function (ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { ret.set_float(battery["dischargingTime"]); } else { maybeLoadBatteryManager(); if (batteryManager) { ret.set_float(batteryManager["dischargingTime"]); } else { ret.set_float(Number.POSITIVE_INFINITY); // not supported/unknown: assume infinite time left } } }; Exps.prototype.ExecJS = function (ret, js_) { if (!eval) { ret.set_any(0); return; } var result = 0; try { result = eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } if (typeof result === "number") ret.set_any(result); else if (typeof result === "string") ret.set_any(result); else if (typeof result === "boolean") ret.set_any(result ? 1 : 0); else ret.set_any(0); }; Exps.prototype.ScreenWidth = function (ret) { ret.set_int(screen.width); }; Exps.prototype.ScreenHeight = function (ret) { ret.set_int(screen.height); }; Exps.prototype.DevicePixelRatio = function (ret) { ret.set_float(this.runtime.devicePixelRatio); }; Exps.prototype.WindowInnerWidth = function (ret) { ret.set_int(window.innerWidth); }; Exps.prototype.WindowInnerHeight = function (ret) { ret.set_int(window.innerHeight); }; Exps.prototype.WindowOuterWidth = function (ret) { ret.set_int(window.outerWidth); }; Exps.prototype.WindowOuterHeight = function (ret) { ret.set_int(window.outerHeight); }; pluginProto.exps = new Exps(); }()); /** * Object holder for the plugin */ cr.plugins_.Cocoon_Canvasplus = function(runtime) { this.runtime = runtime; }; /** * C2 plugin */ (function() { var dialog = ""; var input_text = ""; var capture_screen_sync = ""; var capture_screen_async = ""; var device_info = ""; var pluginProto = cr.plugins_.Cocoon_Canvasplus.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; /** * C2 specific behaviour */ pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var self; instanceProto.onCreate = function() { if (!(this.runtime.isAndroid || this.runtime.isiOS)) return; if (typeof Cocoon == 'undefined') return; self = this; }; function Cnds() {}; /** * Cocoon Basic conditions */ Cnds.prototype.isCanvasPlus = function() { return this.runtime.isCocoonJs; }; Cnds.prototype.onKeyboardCancel = function() { return true; }; Cnds.prototype.onKeyboardSuccess = function() { return true; }; Cnds.prototype.onConfirmCancel = function() { return true; }; Cnds.prototype.onConfirmSuccess = function() { return true; }; pluginProto.cnds = new Cnds(); /** * Plugin actions */ function Acts() {}; Acts.prototype.promptKeyboard = function(title_, message_, initial_, type_, canceltext_, oktext_) { if (!this.runtime.isCocoonJs) return; var typestr = ["text", "num", "phone", "email", "url"][type_]; Cocoon.Dialog.prompt({ title: title_, message: message_, text: initial_, type: typestr, cancelText: canceltext_, confirmText: oktext_ }, { success: function(text) { input_text = text; self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onKeyboardSuccess, self); }, cancel: function() { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onKeyboardCancel, self); } }); }; Acts.prototype.confirmDialog = function(title_, message_, canceltext_, oktext_) { if (!this.runtime.isCocoonJs) return; Cocoon.Dialog.confirm({ title: title_, message: message_, cancelText: canceltext_, confirmText: oktext_ }, function(accepted) { if (accepted) { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onConfirmSuccess, self); } else { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onConfirmCancel, self); } }); }; Acts.prototype.openURL = function(url_) { Cocoon.App.openURL(url_); }; Acts.prototype.exitApp = function() { Cocoon.App.exit(); }; Acts.prototype.pauseApp = function() { Cocoon.App.pause(); }; Acts.prototype.resumeApp = function() { Cocoon.App.resume(); }; Acts.prototype.captureScreenSync = function(filename_, storage_, capture_) { if (!this.runtime.isCocoonJs) return; var storage_type = ["APP_STORAGE", "INTERNAL_STORAGE", "EXTERNAL_STORAGE", "TEMPORARY_STORAGE"][storage_]; var gallery = false; capture_screen_sync = Cocoon.Utils.captureScreen(filename_, storage_type, capture_, gallery); }; Acts.prototype.captureScreenAsync = function(filename_, storage_, capture_) { if (!this.runtime.isCocoonJs) return; var storage_type = ["APP_STORAGE", "INTERNAL_STORAGE", "EXTERNAL_STORAGE", "TEMPORARY_STORAGE"][storage_]; var gallery = false; Cocoon.Utils.captureScreenAsync(filename_, storage_type, capture_, gallery, function(url, error) { if (error) { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onCaptureScreenAsyncFail, self); } else { capture_screen_async = url; self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onCaptureScreenAsyncSuccess, self); } }); }; Acts.prototype.captureScreenSyncShare = function(filename_, storage_, capture_, text_) { if (!this.runtime.isCocoonJs) return; var storage_type = ["APP_STORAGE", "INTERNAL_STORAGE", "EXTERNAL_STORAGE", "TEMPORARY_STORAGE"][storage_]; var gallery = false; url = Cocoon.Utils.captureScreen(filename_, storage_type, capture_, gallery); Cocoon.Share.share({ message: text_, image: url }, function(activity, completed, error) { if (completed) { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onShareSyncComplete, self); } else { self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onShareSyncFail, self); console.log(error); } }); }; Acts.prototype.showWebdialog = function(url_){ dialog = new Cocoon.Widget.WebDialog(); dialog.show(url_, function(){ console.log("The user has closed the dialog!"); self.runtime.trigger(cr.plugins_.Cocoon_Canvasplus.prototype.cnds.onWebdialogUserClose, self); }); }; Acts.prototype.closeWebdialog = function(){ dialog.close(); }; Acts.prototype.getDeviceInfo = function(){ device_info = Cocoon.Device.getDeviceInfo(); }; pluginProto.acts = new Acts(); /** * Expressions */ function Exps() {}; Exps.prototype.InputText = function(ret) { ret.set_string(input_text); }; Exps.prototype.CaptureScreenSync = function(ret) { ret.set_string(capture_screen_sync); }; Exps.prototype.CaptureScreenAsync = function(ret) { ret.set_string(capture_screen_async); }; Exps.prototype.DeviceOS = function(ret) { ret.set_string(device_info.os); }; Exps.prototype.DeviceVersion = function(ret) { ret.set_string(device_info.version); }; Exps.prototype.DeviceDPI = function(ret) { ret.set_string(device_info.dpi); }; Exps.prototype.DeviceBrand = function(ret) { ret.set_string(device_info.brand); }; Exps.prototype.DeviceModel = function(ret) { ret.set_string(device_info.model); }; Exps.prototype.DevicePlatformId = function(ret) { ret.set_string(device_info.platformId); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Keyboard = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Keyboard.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.keyMap = new Array(256); // stores key up/down state this.usedKeys = new Array(256); this.triggerKey = 0; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; if (!this.runtime.isDomFree) { jQuery(document).keydown( function(info) { self.onKeyDown(info); } ); jQuery(document).keyup( function(info) { self.onKeyUp(info); } ); } }; var keysToBlockWhenFramed = [32, 33, 34, 35, 36, 37, 38, 39, 40, 44]; instanceProto.onKeyDown = function (info) { var alreadyPreventedDefault = false; if (window != window.top && keysToBlockWhenFramed.indexOf(info.which) > -1) { info.preventDefault(); alreadyPreventedDefault = true; info.stopPropagation(); } if (this.keyMap[info.which]) { if (this.usedKeys[info.which] && !alreadyPreventedDefault) info.preventDefault(); return; } this.keyMap[info.which] = true; this.triggerKey = info.which; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKey, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKey, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCode, this); this.runtime.isInUserInputEvent = false; if (eventRan || eventRan2) { this.usedKeys[info.which] = true; if (!alreadyPreventedDefault) info.preventDefault(); } }; instanceProto.onKeyUp = function (info) { this.keyMap[info.which] = false; this.triggerKey = info.which; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKeyReleased, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyReleased, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCodeReleased, this); this.runtime.isInUserInputEvent = false; if (eventRan || eventRan2 || this.usedKeys[info.which]) { this.usedKeys[info.which] = true; info.preventDefault(); } }; instanceProto.onWindowBlur = function () { var i; for (i = 0; i < 256; ++i) { if (!this.keyMap[i]) continue; // key already up this.keyMap[i] = false; this.triggerKey = i; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKeyReleased, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyReleased, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCodeReleased, this); if (eventRan || eventRan2) this.usedKeys[i] = true; } }; instanceProto.saveToJSON = function () { return { "triggerKey": this.triggerKey }; }; instanceProto.loadFromJSON = function (o) { this.triggerKey = o["triggerKey"]; }; function Cnds() {}; Cnds.prototype.IsKeyDown = function(key) { return this.keyMap[key]; }; Cnds.prototype.OnKey = function(key) { return (key === this.triggerKey); }; Cnds.prototype.OnAnyKey = function(key) { return true; }; Cnds.prototype.OnAnyKeyReleased = function(key) { return true; }; Cnds.prototype.OnKeyReleased = function(key) { return (key === this.triggerKey); }; Cnds.prototype.IsKeyCodeDown = function(key) { key = Math.floor(key); if (key < 0 || key >= this.keyMap.length) return false; return this.keyMap[key]; }; Cnds.prototype.OnKeyCode = function(key) { return (key === this.triggerKey); }; Cnds.prototype.OnKeyCodeReleased = function(key) { return (key === this.triggerKey); }; pluginProto.cnds = new Cnds(); function Acts() {}; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.LastKeyCode = function (ret) { ret.set_int(this.triggerKey); }; function fixedStringFromCharCode(kc) { kc = Math.floor(kc); switch (kc) { case 8: return "backspace"; case 9: return "tab"; case 13: return "enter"; case 16: return "shift"; case 17: return "control"; case 18: return "alt"; case 19: return "pause"; case 20: return "capslock"; case 27: return "esc"; case 33: return "pageup"; case 34: return "pagedown"; case 35: return "end"; case 36: return "home"; case 37: return "←"; case 38: return "↑"; case 39: return "→"; case 40: return "↓"; case 45: return "insert"; case 46: return "del"; case 91: return "left window key"; case 92: return "right window key"; case 93: return "select"; case 96: return "numpad 0"; case 97: return "numpad 1"; case 98: return "numpad 2"; case 99: return "numpad 3"; case 100: return "numpad 4"; case 101: return "numpad 5"; case 102: return "numpad 6"; case 103: return "numpad 7"; case 104: return "numpad 8"; case 105: return "numpad 9"; case 106: return "numpad *"; case 107: return "numpad +"; case 109: return "numpad -"; case 110: return "numpad ."; case 111: return "numpad /"; case 112: return "F1"; case 113: return "F2"; case 114: return "F3"; case 115: return "F4"; case 116: return "F5"; case 117: return "F6"; case 118: return "F7"; case 119: return "F8"; case 120: return "F9"; case 121: return "F10"; case 122: return "F11"; case 123: return "F12"; case 144: return "numlock"; case 145: return "scroll lock"; case 186: return ";"; case 187: return "="; case 188: return ","; case 189: return "-"; case 190: return "."; case 191: return "/"; case 192: return "'"; case 219: return "["; case 220: return "\\"; case 221: return "]"; case 222: return "#"; case 223: return "`"; default: return String.fromCharCode(kc); } }; Exps.prototype.StringFromKeyCode = function (ret, kc) { ret.set_string(fixedStringFromCharCode(kc)); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Mouse = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Mouse.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.buttonMap = new Array(4); // mouse down states this.mouseXcanvas = 0; // mouse position relative to canvas this.mouseYcanvas = 0; this.triggerButton = 0; this.triggerType = 0; this.triggerDir = 0; this.handled = false; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; if (!this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); jQuery(document).dblclick( function(info) { self.onDoubleClick(info); } ); var wheelevent = function(info) { self.onWheel(info); }; document.addEventListener("mousewheel", wheelevent, false); document.addEventListener("DOMMouseScroll", wheelevent, false); } }; var dummyoffset = {left: 0, top: 0}; instanceProto.onMouseMove = function(info) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); this.mouseXcanvas = info.pageX - offset.left; this.mouseYcanvas = info.pageY - offset.top; }; instanceProto.mouseInGame = function () { if (this.runtime.fullscreen_mode > 0) return true; return this.mouseXcanvas >= 0 && this.mouseYcanvas >= 0 && this.mouseXcanvas < this.runtime.width && this.mouseYcanvas < this.runtime.height; }; instanceProto.onMouseDown = function(info) { if (!this.mouseInGame()) return; this.buttonMap[info.which] = true; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnAnyClick, this); this.triggerButton = info.which - 1; // 1-based this.triggerType = 0; // single click this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnClick, this); this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onMouseUp = function(info) { if (!this.buttonMap[info.which]) return; if (this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; this.buttonMap[info.which] = false; this.runtime.isInUserInputEvent = true; this.triggerButton = info.which - 1; // 1-based this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnRelease, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onDoubleClick = function(info) { if (!this.mouseInGame()) return; info.preventDefault(); this.runtime.isInUserInputEvent = true; this.triggerButton = info.which - 1; // 1-based this.triggerType = 1; // double click this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnClick, this); this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onWheel = function (info) { var delta = info.wheelDelta ? info.wheelDelta : info.detail ? -info.detail : 0; this.triggerDir = (delta < 0 ? 0 : 1); this.handled = false; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnWheel, this); this.runtime.isInUserInputEvent = false; if (this.handled && cr.isCanvasInputEvent(info)) info.preventDefault(); }; function Cnds() {}; Cnds.prototype.OnClick = function (button, type) { return button === this.triggerButton && type === this.triggerType; }; Cnds.prototype.OnAnyClick = function () { return true; }; Cnds.prototype.IsButtonDown = function (button) { return this.buttonMap[button + 1]; // jQuery uses 1-based buttons for some reason }; Cnds.prototype.OnRelease = function (button) { return button === this.triggerButton; }; Cnds.prototype.IsOverObject = function (obj) { var cnd = this.runtime.getCurrentCondition(); var mx = this.mouseXcanvas; var my = this.mouseYcanvas; return cr.xor(this.runtime.testAndSelectCanvasPointOverlap(obj, mx, my, cnd.inverted), cnd.inverted); }; Cnds.prototype.OnObjectClicked = function (button, type, obj) { if (button !== this.triggerButton || type !== this.triggerType) return false; // wrong click type return this.runtime.testAndSelectCanvasPointOverlap(obj, this.mouseXcanvas, this.mouseYcanvas, false); }; Cnds.prototype.OnWheel = function (dir) { this.handled = true; return dir === this.triggerDir; }; pluginProto.cnds = new Cnds(); function Acts() {}; var lastSetCursor = null; Acts.prototype.SetCursor = function (c) { if (this.runtime.isDomFree) return; var cursor_style = ["auto", "pointer", "text", "crosshair", "move", "help", "wait", "none"][c]; if (lastSetCursor === cursor_style) return; // redundant lastSetCursor = cursor_style; document.body.style.cursor = cursor_style; }; Acts.prototype.SetCursorSprite = function (obj) { if (this.runtime.isDomFree || this.runtime.isMobile || !obj) return; var inst = obj.getFirstPicked(); if (!inst || !inst.curFrame) return; var frame = inst.curFrame; if (lastSetCursor === frame) return; // already set this frame lastSetCursor = frame; var datauri = frame.getDataUri(); var cursor_style = "url(" + datauri + ") " + Math.round(frame.hotspotX * frame.width) + " " + Math.round(frame.hotspotY * frame.height) + ", auto"; document.body.style.cursor = ""; document.body.style.cursor = cursor_style; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.X = function (ret, layerparam) { var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, true)); else ret.set_float(0); } }; Exps.prototype.Y = function (ret, layerparam) { var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function (ret) { ret.set_float(this.mouseXcanvas); }; Exps.prototype.AbsoluteY = function (ret) { ret.set_float(this.mouseYcanvas); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Sprite = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Sprite.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; function frame_getDataUri() { if (this.datauri.length === 0) { var tmpcanvas = document.createElement("canvas"); tmpcanvas.width = this.width; tmpcanvas.height = this.height; var tmpctx = tmpcanvas.getContext("2d"); if (this.spritesheeted) { tmpctx.drawImage(this.texture_img, this.offx, this.offy, this.width, this.height, 0, 0, this.width, this.height); } else { tmpctx.drawImage(this.texture_img, 0, 0, this.width, this.height); } this.datauri = tmpcanvas.toDataURL("image/png"); } return this.datauri; }; typeProto.onCreate = function() { if (this.is_family) return; var i, leni, j, lenj; var anim, frame, animobj, frameobj, wt, uv; this.all_frames = []; this.has_loaded_textures = false; for (i = 0, leni = this.animations.length; i < leni; i++) { anim = this.animations[i]; animobj = {}; animobj.name = anim[0]; animobj.speed = anim[1]; animobj.loop = anim[2]; animobj.repeatcount = anim[3]; animobj.repeatto = anim[4]; animobj.pingpong = anim[5]; animobj.sid = anim[6]; animobj.frames = []; for (j = 0, lenj = anim[7].length; j < lenj; j++) { frame = anim[7][j]; frameobj = {}; frameobj.texture_file = frame[0]; frameobj.texture_filesize = frame[1]; frameobj.offx = frame[2]; frameobj.offy = frame[3]; frameobj.width = frame[4]; frameobj.height = frame[5]; frameobj.duration = frame[6]; frameobj.hotspotX = frame[7]; frameobj.hotspotY = frame[8]; frameobj.image_points = frame[9]; frameobj.poly_pts = frame[10]; frameobj.pixelformat = frame[11]; frameobj.spritesheeted = (frameobj.width !== 0); frameobj.datauri = ""; // generated on demand and cached frameobj.getDataUri = frame_getDataUri; uv = {}; uv.left = 0; uv.top = 0; uv.right = 1; uv.bottom = 1; frameobj.sheetTex = uv; frameobj.webGL_texture = null; wt = this.runtime.findWaitingTexture(frame[0]); if (wt) { frameobj.texture_img = wt; } else { frameobj.texture_img = new Image(); frameobj.texture_img.cr_src = frame[0]; frameobj.texture_img.cr_filesize = frame[1]; frameobj.texture_img.c2webGL_texture = null; this.runtime.waitForImageLoad(frameobj.texture_img, frame[0]); } cr.seal(frameobj); animobj.frames.push(frameobj); this.all_frames.push(frameobj); } cr.seal(animobj); this.animations[i] = animobj; // swap array data for object } }; typeProto.updateAllCurrentTexture = function () { var i, len, inst; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; inst.curWebGLTexture = inst.curFrame.webGL_texture; } }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.texture_img.c2webGL_texture = null; frame.webGL_texture = null; } this.has_loaded_textures = false; this.updateAllCurrentTexture(); }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.updateAllCurrentTexture(); }; typeProto.loadTextures = function () { if (this.is_family || this.has_loaded_textures || !this.runtime.glwrap) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.has_loaded_textures = true; }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.has_loaded_textures) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; this.runtime.glwrap.deleteTexture(frame.webGL_texture); frame.webGL_texture = null; } this.has_loaded_textures = false; }; var already_drawn_images = []; typeProto.preloadCanvas2D = function (ctx) { var i, len, frameimg; cr.clearArray(already_drawn_images); for (i = 0, len = this.all_frames.length; i < len; ++i) { frameimg = this.all_frames[i].texture_img; if (already_drawn_images.indexOf(frameimg) !== -1) continue; ctx.drawImage(frameimg, 0, 0); already_drawn_images.push(frameimg); } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; var poly_pts = this.type.animations[0].frames[0].poly_pts; if (this.recycled) this.collision_poly.set_pts(poly_pts); else this.collision_poly = new cr.CollisionPoly(poly_pts); }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.isTicking = false; this.inAnimTrigger = false; this.collisionsEnabled = (this.properties[3] !== 0); if (!(this.type.animations.length === 1 && this.type.animations[0].frames.length === 1) && this.type.animations[0].speed !== 0) { this.runtime.tickMe(this); this.isTicking = true; } this.cur_animation = this.getAnimationByName(this.properties[1]) || this.type.animations[0]; this.cur_frame = this.properties[2]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; var curanimframe = this.cur_animation.frames[this.cur_frame]; this.collision_poly.set_pts(curanimframe.poly_pts); this.hotspotX = curanimframe.hotspotX; this.hotspotY = curanimframe.hotspotY; this.cur_anim_speed = this.cur_animation.speed; if (this.recycled) this.animTimer.reset(); else this.animTimer = new cr.KahanAdder(); this.frameStart = this.getNowTime(); this.animPlaying = true; this.animRepeats = 0; this.animForwards = true; this.animTriggerName = ""; this.changeAnimName = ""; this.changeAnimFrom = 0; this.changeAnimFrame = -1; this.type.loadTextures(); var i, leni, j, lenj; var anim, frame, uv, maintex; for (i = 0, leni = this.type.animations.length; i < leni; i++) { anim = this.type.animations[i]; for (j = 0, lenj = anim.frames.length; j < lenj; j++) { frame = anim.frames[j]; if (frame.width === 0) { frame.width = frame.texture_img.width; frame.height = frame.texture_img.height; } if (frame.spritesheeted) { maintex = frame.texture_img; uv = frame.sheetTex; uv.left = frame.offx / maintex.width; uv.top = frame.offy / maintex.height; uv.right = (frame.offx + frame.width) / maintex.width; uv.bottom = (frame.offy + frame.height) / maintex.height; if (frame.offx === 0 && frame.offy === 0 && frame.width === maintex.width && frame.height === maintex.height) { frame.spritesheeted = false; } } } } this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; }; instanceProto.saveToJSON = function () { var o = { "a": this.cur_animation.sid, "f": this.cur_frame, "cas": this.cur_anim_speed, "fs": this.frameStart, "ar": this.animRepeats, "at": this.animTimer.sum }; if (!this.animPlaying) o["ap"] = this.animPlaying; if (!this.animForwards) o["af"] = this.animForwards; return o; }; instanceProto.loadFromJSON = function (o) { var anim = this.getAnimationBySid(o["a"]); if (anim) this.cur_animation = anim; this.cur_frame = o["f"]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; this.cur_anim_speed = o["cas"]; this.frameStart = o["fs"]; this.animRepeats = o["ar"]; this.animTimer.reset(); this.animTimer.sum = o["at"]; this.animPlaying = o.hasOwnProperty("ap") ? o["ap"] : true; this.animForwards = o.hasOwnProperty("af") ? o["af"] : true; this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; this.collision_poly.set_pts(this.curFrame.poly_pts); this.hotspotX = this.curFrame.hotspotX; this.hotspotY = this.curFrame.hotspotY; }; instanceProto.animationFinish = function (reverse) { this.cur_frame = reverse ? 0 : this.cur_animation.frames.length - 1; this.animPlaying = false; this.animTriggerName = this.cur_animation.name; this.inAnimTrigger = true; this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnyAnimFinished, this); this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnimFinished, this); this.inAnimTrigger = false; this.animRepeats = 0; }; instanceProto.getNowTime = function() { return this.animTimer.sum; }; instanceProto.tick = function() { this.animTimer.add(this.runtime.getDt(this)); if (this.changeAnimName.length) this.doChangeAnim(); if (this.changeAnimFrame >= 0) this.doChangeAnimFrame(); var now = this.getNowTime(); var cur_animation = this.cur_animation; var prev_frame = cur_animation.frames[this.cur_frame]; var next_frame; var cur_frame_time = prev_frame.duration / this.cur_anim_speed; if (this.animPlaying && now >= this.frameStart + cur_frame_time) { if (this.animForwards) { this.cur_frame++; } else { this.cur_frame--; } this.frameStart += cur_frame_time; if (this.cur_frame >= cur_animation.frames.length) { if (cur_animation.pingpong) { this.animForwards = false; this.cur_frame = cur_animation.frames.length - 2; } else if (cur_animation.loop) { this.cur_frame = cur_animation.repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(false); } else { this.cur_frame = cur_animation.repeatto; } } } if (this.cur_frame < 0) { if (cur_animation.pingpong) { this.cur_frame = 1; this.animForwards = true; if (!cur_animation.loop) { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } } } else { if (cur_animation.loop) { this.cur_frame = cur_animation.repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } else { this.cur_frame = cur_animation.repeatto; } } } } if (this.cur_frame < 0) this.cur_frame = 0; else if (this.cur_frame >= cur_animation.frames.length) this.cur_frame = cur_animation.frames.length - 1; if (now > this.frameStart + (cur_animation.frames[this.cur_frame].duration / this.cur_anim_speed)) { this.frameStart = now; } next_frame = cur_animation.frames[this.cur_frame]; this.OnFrameChanged(prev_frame, next_frame); this.runtime.redraw = true; } }; instanceProto.getAnimationByName = function (name_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (cr.equals_nocase(a.name, name_)) return a; } return null; }; instanceProto.getAnimationBySid = function (sid_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (a.sid === sid_) return a; } return null; }; instanceProto.doChangeAnim = function () { var prev_frame = this.cur_animation.frames[this.cur_frame]; var anim = this.getAnimationByName(this.changeAnimName); this.changeAnimName = ""; if (!anim) return; if (cr.equals_nocase(anim.name, this.cur_animation.name) && this.animPlaying) return; this.cur_animation = anim; this.cur_anim_speed = anim.speed; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (this.changeAnimFrom === 1) this.cur_frame = 0; this.animPlaying = true; this.frameStart = this.getNowTime(); this.animForwards = true; this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.runtime.redraw = true; }; instanceProto.doChangeAnimFrame = function () { var prev_frame = this.cur_animation.frames[this.cur_frame]; var prev_frame_number = this.cur_frame; this.cur_frame = cr.floor(this.changeAnimFrame); if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (prev_frame_number !== this.cur_frame) { this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.frameStart = this.getNowTime(); this.runtime.redraw = true; } this.changeAnimFrame = -1; }; instanceProto.OnFrameChanged = function (prev_frame, next_frame) { var oldw = prev_frame.width; var oldh = prev_frame.height; var neww = next_frame.width; var newh = next_frame.height; if (oldw != neww) this.width *= (neww / oldw); if (oldh != newh) this.height *= (newh / oldh); this.hotspotX = next_frame.hotspotX; this.hotspotY = next_frame.hotspotY; this.collision_poly.set_pts(next_frame.poly_pts); this.set_bbox_changed(); this.curFrame = next_frame; this.curWebGLTexture = next_frame.webGL_texture; var i, len, b; for (i = 0, len = this.behavior_insts.length; i < len; i++) { b = this.behavior_insts[i]; if (b.onSpriteFrameChanged) b.onSpriteFrameChanged(prev_frame, next_frame); } this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnFrameChanged, this); }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; var cur_frame = this.curFrame; var spritesheeted = cur_frame.spritesheeted; var cur_image = cur_frame.texture_img; var myx = this.x; var myy = this.y; var w = this.width; var h = this.height; if (this.angle === 0 && w >= 0 && h >= 0) { myx -= this.hotspotX * w; myy -= this.hotspotY * h; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, myx, myy, w, h); } else { ctx.drawImage(cur_image, myx, myy, w, h); } } else { if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } ctx.save(); var widthfactor = w > 0 ? 1 : -1; var heightfactor = h > 0 ? 1 : -1; ctx.translate(myx, myy); if (widthfactor !== 1 || heightfactor !== 1) ctx.scale(widthfactor, heightfactor); ctx.rotate(this.angle * widthfactor * heightfactor); var drawx = 0 - (this.hotspotX * cr.abs(w)) var drawy = 0 - (this.hotspotY * cr.abs(h)); if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, drawx, drawy, cr.abs(w), cr.abs(h)); } else { ctx.drawImage(cur_image, drawx, drawy, cr.abs(w), cr.abs(h)); } ctx.restore(); } /* ctx.strokeStyle = "#f00"; ctx.lineWidth = 3; ctx.beginPath(); this.collision_poly.cache_poly(this.width, this.height, this.angle); var i, len, ax, ay, bx, by; for (i = 0, len = this.collision_poly.pts_count; i < len; i++) { ax = this.collision_poly.pts_cache[i*2] + this.x; ay = this.collision_poly.pts_cache[i*2+1] + this.y; bx = this.collision_poly.pts_cache[((i+1)%len)*2] + this.x; by = this.collision_poly.pts_cache[((i+1)%len)*2+1] + this.y; ctx.moveTo(ax, ay); ctx.lineTo(bx, by); } ctx.stroke(); ctx.closePath(); */ /* if (this.behavior_insts.length >= 1 && this.behavior_insts[0].draw) { this.behavior_insts[0].draw(ctx); } */ }; instanceProto.drawGL_earlyZPass = function(glw) { this.drawGL(glw); }; instanceProto.drawGL = function(glw) { glw.setTexture(this.curWebGLTexture); glw.setOpacity(this.opacity); var cur_frame = this.curFrame; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = Math.round(this.x) - this.x; var oy = Math.round(this.y) - this.y; if (cur_frame.spritesheeted) glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, cur_frame.sheetTex); else glw.quad(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy); } else { if (cur_frame.spritesheeted) glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, cur_frame.sheetTex); else glw.quad(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly); } }; instanceProto.getImagePointIndexByName = function(name_) { var cur_frame = this.curFrame; var i, len; for (i = 0, len = cur_frame.image_points.length; i < len; i++) { if (cr.equals_nocase(name_, cur_frame.image_points[i][0])) return i; } return -1; }; instanceProto.getImagePoint = function(imgpt, getX) { var cur_frame = this.curFrame; var image_points = cur_frame.image_points; var index; if (cr.is_string(imgpt)) index = this.getImagePointIndexByName(imgpt); else index = imgpt - 1; // 0 is origin index = cr.floor(index); if (index < 0 || index >= image_points.length) return getX ? this.x : this.y; // return origin var x = (image_points[index][1] - cur_frame.hotspotX) * this.width; var y = image_points[index][2]; y = (y - cur_frame.hotspotY) * this.height; var cosa = Math.cos(this.angle); var sina = Math.sin(this.angle); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += this.x; y += this.y; return getX ? x : y; }; function Cnds() {}; var arrCache = []; function allocArr() { if (arrCache.length) return arrCache.pop(); else return [0, 0, 0]; }; function freeArr(a) { a[0] = 0; a[1] = 0; a[2] = 0; arrCache.push(a); }; function makeCollKey(a, b) { if (a < b) return "" + a + "," + b; else return "" + b + "," + a; }; function collmemory_add(collmemory, a, b, tickcount) { var a_uid = a.uid; var b_uid = b.uid; var key = makeCollKey(a_uid, b_uid); if (collmemory.hasOwnProperty(key)) { collmemory[key][2] = tickcount; return; } var arr = allocArr(); arr[0] = a_uid; arr[1] = b_uid; arr[2] = tickcount; collmemory[key] = arr; }; function collmemory_remove(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { freeArr(collmemory[key]); delete collmemory[key]; } }; function collmemory_removeInstance(collmemory, inst) { var uid = inst.uid; var p, entry; for (p in collmemory) { if (collmemory.hasOwnProperty(p)) { entry = collmemory[p]; if (entry[0] === uid || entry[1] === uid) { freeArr(collmemory[p]); delete collmemory[p]; } } } }; var last_coll_tickcount = -2; function collmemory_has(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { last_coll_tickcount = collmemory[key][2]; return true; } else { last_coll_tickcount = -2; return false; } }; var candidates1 = []; Cnds.prototype.OnCollision = function (rtype) { if (!rtype) return false; var runtime = this.runtime; var cnd = runtime.getCurrentCondition(); var ltype = cnd.type; var collmemory = null; if (cnd.extra["collmemory"]) { collmemory = cnd.extra["collmemory"]; } else { collmemory = {}; cnd.extra["collmemory"] = collmemory; } if (!cnd.extra["spriteCreatedDestroyCallback"]) { cnd.extra["spriteCreatedDestroyCallback"] = true; runtime.addDestroyCallback(function(inst) { collmemory_removeInstance(cnd.extra["collmemory"], inst); }); } var lsol = ltype.getCurrentSol(); var rsol = rtype.getCurrentSol(); var linstances = lsol.getObjects(); var rinstances; var l, linst, r, rinst; var curlsol, currsol; var tickcount = this.runtime.tickcount; var lasttickcount = tickcount - 1; var exists, run; var current_event = runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; for (l = 0; l < linstances.length; l++) { linst = linstances[l]; if (rsol.select_all) { linst.update_bbox(); this.runtime.getCollisionCandidates(linst.layer, rtype, linst.bbox, candidates1); rinstances = candidates1; } else rinstances = rsol.getObjects(); for (r = 0; r < rinstances.length; r++) { rinst = rinstances[r]; if (runtime.testOverlap(linst, rinst) || runtime.checkRegisteredCollision(linst, rinst)) { exists = collmemory_has(collmemory, linst, rinst); run = (!exists || (last_coll_tickcount < lasttickcount)); collmemory_add(collmemory, linst, rinst, tickcount); if (run) { runtime.pushCopySol(current_event.solModifiers); curlsol = ltype.getCurrentSol(); currsol = rtype.getCurrentSol(); curlsol.select_all = false; currsol.select_all = false; if (ltype === rtype) { curlsol.instances.length = 2; // just use lsol, is same reference as rsol curlsol.instances[0] = linst; curlsol.instances[1] = rinst; ltype.applySolToContainer(); } else { curlsol.instances.length = 1; currsol.instances.length = 1; curlsol.instances[0] = linst; currsol.instances[0] = rinst; ltype.applySolToContainer(); rtype.applySolToContainer(); } current_event.retrigger(); runtime.popSol(current_event.solModifiers); } } else { collmemory_remove(collmemory, linst, rinst); } } cr.clearArray(candidates1); } return false; }; var rpicktype = null; var rtopick = new cr.ObjectSet(); var needscollisionfinish = false; var candidates2 = []; var temp_bbox = new cr.rect(0, 0, 0, 0); function DoOverlapCondition(rtype, offx, offy) { if (!rtype) return false; var do_offset = (offx !== 0 || offy !== 0); var oldx, oldy, ret = false, r, lenr, rinst; var cnd = this.runtime.getCurrentCondition(); var ltype = cnd.type; var inverted = cnd.inverted; var rsol = rtype.getCurrentSol(); var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var rinstances; if (rsol.select_all) { this.update_bbox(); temp_bbox.copy(this.bbox); temp_bbox.offset(offx, offy); this.runtime.getCollisionCandidates(this.layer, rtype, temp_bbox, candidates2); rinstances = candidates2; } else if (orblock) rinstances = rsol.else_instances; else rinstances = rsol.instances; rpicktype = rtype; needscollisionfinish = (ltype !== rtype && !inverted); if (do_offset) { oldx = this.x; oldy = this.y; this.x += offx; this.y += offy; this.set_bbox_changed(); } for (r = 0, lenr = rinstances.length; r < lenr; r++) { rinst = rinstances[r]; if (this.runtime.testOverlap(this, rinst)) { ret = true; if (inverted) break; if (ltype !== rtype) rtopick.add(rinst); } } if (do_offset) { this.x = oldx; this.y = oldy; this.set_bbox_changed(); } cr.clearArray(candidates2); return ret; }; typeProto.finish = function (do_pick) { if (!needscollisionfinish) return; if (do_pick) { var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var sol = rpicktype.getCurrentSol(); var topick = rtopick.valuesRef(); var i, len, inst; if (sol.select_all) { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = topick.length; i < len; ++i) { sol.instances[i] = topick[i]; } if (orblock) { cr.clearArray(sol.else_instances); for (i = 0, len = rpicktype.instances.length; i < len; ++i) { inst = rpicktype.instances[i]; if (!rtopick.contains(inst)) sol.else_instances.push(inst); } } } else { if (orblock) { var initsize = sol.instances.length; for (i = 0, len = topick.length; i < len; ++i) { sol.instances[initsize + i] = topick[i]; cr.arrayFindRemove(sol.else_instances, topick[i]); } } else { cr.shallowAssignArray(sol.instances, topick); } } rpicktype.applySolToContainer(); } rtopick.clear(); needscollisionfinish = false; }; Cnds.prototype.IsOverlapping = function (rtype) { return DoOverlapCondition.call(this, rtype, 0, 0); }; Cnds.prototype.IsOverlappingOffset = function (rtype, offx, offy) { return DoOverlapCondition.call(this, rtype, offx, offy); }; Cnds.prototype.IsAnimPlaying = function (animname) { if (this.changeAnimName.length) return cr.equals_nocase(this.changeAnimName, animname); else return cr.equals_nocase(this.cur_animation.name, animname); }; Cnds.prototype.CompareFrame = function (cmp, framenum) { return cr.do_cmp(this.cur_frame, cmp, framenum); }; Cnds.prototype.CompareAnimSpeed = function (cmp, x) { var s = (this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); return cr.do_cmp(s, cmp, x); }; Cnds.prototype.OnAnimFinished = function (animname) { return cr.equals_nocase(this.animTriggerName, animname); }; Cnds.prototype.OnAnyAnimFinished = function () { return true; }; Cnds.prototype.OnFrameChanged = function () { return true; }; Cnds.prototype.IsMirrored = function () { return this.width < 0; }; Cnds.prototype.IsFlipped = function () { return this.height < 0; }; Cnds.prototype.OnURLLoaded = function () { return true; }; Cnds.prototype.IsCollisionEnabled = function () { return this.collisionsEnabled; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Spawn = function (obj, layer, imgpt) { if (!obj || !layer) return; var inst = this.runtime.createInstance(obj, layer, this.getImagePoint(imgpt, true), this.getImagePoint(imgpt, false)); if (!inst) return; if (typeof inst.angle !== "undefined") { inst.angle = this.angle; inst.set_bbox_changed(); } this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var cur_act = this.runtime.getCurrentAction(); var reset_sol = false; if (cr.is_undefined(cur_act.extra["Spawn_LastExec"]) || cur_act.extra["Spawn_LastExec"] < this.runtime.execcount) { reset_sol = true; cur_act.extra["Spawn_LastExec"] = this.runtime.execcount; } var sol; if (obj != this.type) { sol = obj.getCurrentSol(); sol.select_all = false; if (reset_sol) { cr.clearArray(sol.instances); sol.instances[0] = inst; } else sol.instances.push(inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; if (reset_sol) { cr.clearArray(sol.instances); sol.instances[0] = s; } else sol.instances.push(s); } } } }; Acts.prototype.SetEffect = function (effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.StopAnim = function () { this.animPlaying = false; }; Acts.prototype.StartAnim = function (from) { this.animPlaying = true; this.frameStart = this.getNowTime(); if (from === 1 && this.cur_frame !== 0) { this.changeAnimFrame = 0; if (!this.inAnimTrigger) this.doChangeAnimFrame(); } if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetAnim = function (animname, from) { this.changeAnimName = animname; this.changeAnimFrom = from; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnim(); }; Acts.prototype.SetAnimFrame = function (framenumber) { this.changeAnimFrame = framenumber; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnimFrame(); }; Acts.prototype.SetAnimSpeed = function (s) { this.cur_anim_speed = cr.abs(s); this.animForwards = (s >= 0); if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetMirrored = function (m) { var neww = cr.abs(this.width) * (m === 0 ? -1 : 1); if (this.width === neww) return; this.width = neww; this.set_bbox_changed(); }; Acts.prototype.SetFlipped = function (f) { var newh = cr.abs(this.height) * (f === 0 ? -1 : 1); if (this.height === newh) return; this.height = newh; this.set_bbox_changed(); }; Acts.prototype.SetScale = function (s) { var cur_frame = this.curFrame; var mirror_factor = (this.width < 0 ? -1 : 1); var flip_factor = (this.height < 0 ? -1 : 1); var new_width = cur_frame.width * s * mirror_factor; var new_height = cur_frame.height * s * flip_factor; if (this.width !== new_width || this.height !== new_height) { this.width = new_width; this.height = new_height; this.set_bbox_changed(); } }; Acts.prototype.LoadURL = function (url_, resize_) { var img = new Image(); var self = this; var curFrame_ = this.curFrame; img.onload = function () { if (curFrame_.texture_img.src === img.src) { if (self.runtime.glwrap && self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); return; } curFrame_.texture_img = img; curFrame_.offx = 0; curFrame_.offy = 0; curFrame_.width = img.width; curFrame_.height = img.height; curFrame_.spritesheeted = false; curFrame_.datauri = ""; curFrame_.pixelformat = 0; // reset to RGBA, since we don't know what type of image will have come in if (self.runtime.glwrap) { if (curFrame_.webGL_texture) self.runtime.glwrap.deleteTexture(curFrame_.webGL_texture); curFrame_.webGL_texture = self.runtime.glwrap.loadTexture(img, false, self.runtime.linearSampling); if (self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; self.type.updateAllCurrentTexture(); } if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:") img["crossOrigin"] = "anonymous"; img.src = url_; }; Acts.prototype.SetCollisions = function (set_) { if (this.collisionsEnabled === (set_ !== 0)) return; // no change this.collisionsEnabled = (set_ !== 0); if (this.collisionsEnabled) this.set_bbox_changed(); // needs to be added back to cells else { if (this.collcells.right >= this.collcells.left) this.type.collision_grid.update(this, this.collcells, null); this.collcells.set(0, 0, -1, -1); } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.AnimationFrame = function (ret) { ret.set_int(this.cur_frame); }; Exps.prototype.AnimationFrameCount = function (ret) { ret.set_int(this.cur_animation.frames.length); }; Exps.prototype.AnimationName = function (ret) { ret.set_string(this.cur_animation.name); }; Exps.prototype.AnimationSpeed = function (ret) { ret.set_float(this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); }; Exps.prototype.ImagePointX = function (ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, true)); }; Exps.prototype.ImagePointY = function (ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, false)); }; Exps.prototype.ImagePointCount = function (ret) { ret.set_int(this.curFrame.image_points.length); }; Exps.prototype.ImageWidth = function (ret) { ret.set_float(this.curFrame.width); }; Exps.prototype.ImageHeight = function (ret) { ret.set_float(this.curFrame.height); }; pluginProto.exps = new Exps(); }()); /* global cr,log,assert2 */ /* jshint globalstrict: true */ /* jshint strict: true */ ; ; cr.plugins_.Spritefont2 = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Spritefont2.prototype; pluginProto.onCreate = function () { }; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.runtime.waitForImageLoad(this.texture_img, this.texture_file); this.webGL_texture = null; }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, false, this.runtime.linearSampling, this.texture_pixelformat); } var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].webGL_texture = this.webGL_texture; }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function (ctx) { ctx.drawImage(this.texture_img, 0, 0); }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onDestroy = function() { freeAllLines (this.lines); freeAllClip (this.clipList); freeAllClipUV(this.clipUV); cr.wipe(this.characterWidthList); }; instanceProto.onCreate = function() { this.texture_img = this.type.texture_img; this.characterWidth = this.properties[0]; this.characterHeight = this.properties[1]; this.characterSet = this.properties[2]; this.text = this.properties[3]; this.characterScale = this.properties[4]; this.visible = (this.properties[5] === 0); // 0=visible, 1=invisible this.halign = this.properties[6]/2.0; // 0=left, 1=center, 2=right this.valign = this.properties[7]/2.0; // 0=top, 1=center, 2=bottom this.wrapbyword = (this.properties[9] === 0); // 0=word, 1=character this.characterSpacing = this.properties[10]; this.lineHeight = this.properties[11]; this.textWidth = 0; this.textHeight = 0; if (this.recycled) { cr.clearArray(this.lines); cr.wipe(this.clipList); cr.wipe(this.clipUV); cr.wipe(this.characterWidthList); } else { this.lines = []; this.clipList = {}; this.clipUV = {}; this.characterWidthList = {}; } this.text_changed = true; this.lastwrapwidth = this.width; if (this.runtime.glwrap) { if (!this.type.webGL_texture) { this.type.webGL_texture = this.runtime.glwrap.loadTexture(this.type.texture_img, false, this.runtime.linearSampling, this.type.texture_pixelformat); } this.webGL_texture = this.type.webGL_texture; } this.SplitSheet(); }; instanceProto.saveToJSON = function () { var save = { "t": this.text, "csc": this.characterScale, "csp": this.characterSpacing, "lh": this.lineHeight, "tw": this.textWidth, "th": this.textHeight, "lrt": this.last_render_tick, "ha": this.halign, "va": this.valign, "cw": {} }; for (var ch in this.characterWidthList) save["cw"][ch] = this.characterWidthList[ch]; return save; }; instanceProto.loadFromJSON = function (o) { this.text = o["t"]; this.characterScale = o["csc"]; this.characterSpacing = o["csp"]; this.lineHeight = o["lh"]; this.textWidth = o["tw"]; this.textHeight = o["th"]; this.last_render_tick = o["lrt"]; if (o.hasOwnProperty("ha")) this.halign = o["ha"]; if (o.hasOwnProperty("va")) this.valign = o["va"]; for(var ch in o["cw"]) this.characterWidthList[ch] = o["cw"][ch]; this.text_changed = true; this.lastwrapwidth = this.width; }; function trimRight(text) { return text.replace(/\s\s*$/, ''); } var MAX_CACHE_SIZE = 1000; function alloc(cache,Constructor) { if (cache.length) return cache.pop(); else return new Constructor(); } function free(cache,data) { if (cache.length < MAX_CACHE_SIZE) { cache.push(data); } } function freeAll(cache,dataList,isArray) { if (isArray) { var i, len; for (i = 0, len = dataList.length; i < len; i++) { free(cache,dataList[i]); } cr.clearArray(dataList); } else { var prop; for(prop in dataList) { if(Object.prototype.hasOwnProperty.call(dataList,prop)) { free(cache,dataList[prop]); delete dataList[prop]; } } } } function addLine(inst,lineIndex,cur_line) { var lines = inst.lines; var line; cur_line = trimRight(cur_line); if (lineIndex >= lines.length) lines.push(allocLine()); line = lines[lineIndex]; line.text = cur_line; line.width = inst.measureWidth(cur_line); inst.textWidth = cr.max(inst.textWidth,line.width); } var linesCache = []; function allocLine() { return alloc(linesCache,Object); } function freeLine(l) { free(linesCache,l); } function freeAllLines(arr) { freeAll(linesCache,arr,true); } function addClip(obj,property,x,y,w,h) { if (obj[property] === undefined) { obj[property] = alloc(clipCache,Object); } obj[property].x = x; obj[property].y = y; obj[property].w = w; obj[property].h = h; } var clipCache = []; function allocClip() { return alloc(clipCache,Object); } function freeAllClip(obj) { freeAll(clipCache,obj,false);} function addClipUV(obj,property,left,top,right,bottom) { if (obj[property] === undefined) { obj[property] = alloc(clipUVCache,cr.rect); } obj[property].left = left; obj[property].top = top; obj[property].right = right; obj[property].bottom = bottom; } var clipUVCache = []; function allocClipUV() { return alloc(clipUVCache,cr.rect);} function freeAllClipUV(obj) { freeAll(clipUVCache,obj,false);} instanceProto.SplitSheet = function() { var texture = this.texture_img; var texWidth = texture.width; var texHeight = texture.height; var charWidth = this.characterWidth; var charHeight = this.characterHeight; var charU = charWidth /texWidth; var charV = charHeight/texHeight; var charSet = this.characterSet ; var cols = Math.floor(texWidth/charWidth); var rows = Math.floor(texHeight/charHeight); for ( var c = 0; c < charSet.length; c++) { if (c >= cols * rows) break; var x = c%cols; var y = Math.floor(c/cols); var letter = charSet.charAt(c); if (this.runtime.glwrap) { addClipUV( this.clipUV, letter, x * charU , y * charV , (x+1) * charU , (y+1) * charV ); } else { addClip( this.clipList, letter, x * charWidth, y * charHeight, charWidth, charHeight ); } } }; /* * Word-Wrapping */ var wordsCache = []; pluginProto.TokeniseWords = function (text) { cr.clearArray(wordsCache); var cur_word = ""; var ch; var i = 0; while (i < text.length) { ch = text.charAt(i); if (ch === "\n") { if (cur_word.length) { wordsCache.push(cur_word); cur_word = ""; } wordsCache.push("\n"); ++i; } else if (ch === " " || ch === "\t" || ch === "-") { do { cur_word += text.charAt(i); i++; } while (i < text.length && (text.charAt(i) === " " || text.charAt(i) === "\t")); wordsCache.push(cur_word); cur_word = ""; } else if (i < text.length) { cur_word += ch; i++; } } if (cur_word.length) wordsCache.push(cur_word); }; pluginProto.WordWrap = function (inst) { var text = inst.text; var lines = inst.lines; if (!text || !text.length) { freeAllLines(lines); return; } var width = inst.width; if (width <= 2.0) { freeAllLines(lines); return; } var charWidth = inst.characterWidth; var charScale = inst.characterScale; var charSpacing = inst.characterSpacing; if ( (text.length * (charWidth * charScale + charSpacing) - charSpacing) <= width && text.indexOf("\n") === -1) { var all_width = inst.measureWidth(text); if (all_width <= width) { freeAllLines(lines); lines.push(allocLine()); lines[0].text = text; lines[0].width = all_width; inst.textWidth = all_width; inst.textHeight = inst.characterHeight * charScale + inst.lineHeight; return; } } var wrapbyword = inst.wrapbyword; this.WrapText(inst); inst.textHeight = lines.length * (inst.characterHeight * charScale + inst.lineHeight); }; pluginProto.WrapText = function (inst) { var wrapbyword = inst.wrapbyword; var text = inst.text; var lines = inst.lines; var width = inst.width; var wordArray; if (wrapbyword) { this.TokeniseWords(text); // writes to wordsCache wordArray = wordsCache; } else { wordArray = text; } var cur_line = ""; var prev_line; var line_width; var i; var lineIndex = 0; var line; var ignore_newline = false; for (i = 0; i < wordArray.length; i++) { if (wordArray[i] === "\n") { if (ignore_newline === true) { ignore_newline = false; } else { addLine(inst,lineIndex,cur_line); lineIndex++; } cur_line = ""; continue; } ignore_newline = false; prev_line = cur_line; cur_line += wordArray[i]; line_width = inst.measureWidth(trimRight(cur_line)); if (line_width > width) { if (prev_line === "") { addLine(inst,lineIndex,cur_line); cur_line = ""; ignore_newline = true; } else { addLine(inst,lineIndex,prev_line); cur_line = wordArray[i]; } lineIndex++; if (!wrapbyword && cur_line === " ") cur_line = ""; } } if (trimRight(cur_line).length) { addLine(inst,lineIndex,cur_line); lineIndex++; } for (i = lineIndex; i < lines.length; i++) freeLine(lines[i]); lines.length = lineIndex; }; instanceProto.measureWidth = function(text) { var spacing = this.characterSpacing; var len = text.length; var width = 0; for (var i = 0; i < len; i++) { width += this.getCharacterWidth(text.charAt(i)) * this.characterScale + spacing; } width -= (width > 0) ? spacing : 0; return width; }; /***/ instanceProto.getCharacterWidth = function(character) { var widthList = this.characterWidthList; if (widthList[character] !== undefined) { return widthList[character]; } else { return this.characterWidth; } }; instanceProto.rebuildText = function() { if (this.text_changed || this.width !== this.lastwrapwidth) { this.textWidth = 0; this.textHeight = 0; this.type.plugin.WordWrap(this); this.text_changed = false; this.lastwrapwidth = this.width; } }; var EPSILON = 0.00001; instanceProto.draw = function(ctx, glmode) { var texture = this.texture_img; if (this.text !== "" && texture != null) { this.rebuildText(); if (this.height < this.characterHeight*this.characterScale + this.lineHeight) { return; } ctx.globalAlpha = this.opacity; var myx = this.x; var myy = this.y; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } var viewLeft = this.layer.viewLeft; var viewTop = this.layer.viewTop; var viewRight = this.layer.viewRight; var viewBottom = this.layer.viewBottom; ctx.save(); ctx.translate(myx, myy); ctx.rotate(this.angle); var ha = this.halign; var va = this.valign; var scale = this.characterScale; var charHeight = this.characterHeight * scale; var lineHeight = this.lineHeight; var charSpace = this.characterSpacing; var lines = this.lines; var textHeight = this.textHeight; var letterWidth; var halign; var valign = va * cr.max(0,(this.height - textHeight)); var offx = -(this.hotspotX * this.width); var offy = -(this.hotspotY * this.height); offy += valign; var drawX ; var drawY = offy; var roundX, roundY; for(var i = 0; i < lines.length; i++) { var line = lines[i].text; var len = lines[i].width; halign = ha * cr.max(0,this.width - len); drawX = offx + halign; drawY += lineHeight; if (myy + drawY + charHeight < viewTop) { drawY += charHeight; continue; } for(var j = 0; j < line.length; j++) { var letter = line.charAt(j); letterWidth = this.getCharacterWidth(letter); var clip = this.clipList[letter]; if (myx + drawX + letterWidth * scale + charSpace < viewLeft) { drawX += letterWidth * scale + charSpace; continue; } if ( drawX + letterWidth * scale > this.width + EPSILON ) { break; } if (clip !== undefined) { roundX = drawX; roundY = drawY; if (this.angle === 0) { roundX = Math.round(roundX); roundY = Math.round(roundY); } ctx.drawImage( this.texture_img, clip.x, clip.y, clip.w, clip.h, roundX,roundY,clip.w*scale,clip.h*scale); } drawX += letterWidth * scale + charSpace; if (myx + drawX > viewRight) break; } drawY += charHeight; if (drawY + charHeight + lineHeight > this.height || myy + drawY > viewBottom) { break; } } ctx.restore(); } }; var dQuad = new cr.quad(); function rotateQuad(quad,cosa,sina) { var x_temp; x_temp = (quad.tlx * cosa) - (quad.tly * sina); quad.tly = (quad.tly * cosa) + (quad.tlx * sina); quad.tlx = x_temp; x_temp = (quad.trx * cosa) - (quad.try_ * sina); quad.try_ = (quad.try_ * cosa) + (quad.trx * sina); quad.trx = x_temp; x_temp = (quad.blx * cosa) - (quad.bly * sina); quad.bly = (quad.bly * cosa) + (quad.blx * sina); quad.blx = x_temp; x_temp = (quad.brx * cosa) - (quad.bry * sina); quad.bry = (quad.bry * cosa) + (quad.brx * sina); quad.brx = x_temp; } instanceProto.drawGL = function(glw) { glw.setTexture(this.webGL_texture); glw.setOpacity(this.opacity); if (!this.text) return; this.rebuildText(); if (this.height < this.characterHeight*this.characterScale + this.lineHeight) { return; } this.update_bbox(); var q = this.bquad; var ox = 0; var oy = 0; if (this.runtime.pixel_rounding) { ox = Math.round(this.x) - this.x; oy = Math.round(this.y) - this.y; } var viewLeft = this.layer.viewLeft; var viewTop = this.layer.viewTop; var viewRight = this.layer.viewRight; var viewBottom = this.layer.viewBottom; var angle = this.angle; var ha = this.halign; var va = this.valign; var scale = this.characterScale; var charHeight = this.characterHeight * scale; // to precalculate in onCreate or on change var lineHeight = this.lineHeight; var charSpace = this.characterSpacing; var lines = this.lines; var textHeight = this.textHeight; var letterWidth; var cosa,sina; if (angle !== 0) { cosa = Math.cos(angle); sina = Math.sin(angle); } var halign; var valign = va * cr.max(0,(this.height - textHeight)); var offx = q.tlx + ox; var offy = q.tly + oy; var drawX ; var drawY = valign; var roundX, roundY; for(var i = 0; i < lines.length; i++) { var line = lines[i].text; var lineWidth = lines[i].width; halign = ha * cr.max(0,this.width - lineWidth); drawX = halign; drawY += lineHeight; if (angle === 0 && offy + drawY + charHeight < viewTop) { drawY += charHeight; continue; } for(var j = 0; j < line.length; j++) { var letter = line.charAt(j); letterWidth = this.getCharacterWidth(letter); var clipUV = this.clipUV[letter]; if (offx + drawX + letterWidth * scale + charSpace < viewLeft) { drawX += letterWidth * scale + charSpace; continue; } if (drawX + letterWidth * scale > this.width + EPSILON) { break; } if (clipUV !== undefined) { var clipWidth = this.characterWidth*scale; var clipHeight = this.characterHeight*scale; roundX = drawX; roundY = drawY; if (angle === 0) { roundX = Math.round(roundX); roundY = Math.round(roundY); } dQuad.tlx = roundX; dQuad.tly = roundY; dQuad.trx = roundX + clipWidth; dQuad.try_ = roundY ; dQuad.blx = roundX; dQuad.bly = roundY + clipHeight; dQuad.brx = roundX + clipWidth; dQuad.bry = roundY + clipHeight; if(angle !== 0) { rotateQuad(dQuad,cosa,sina); } dQuad.offset(offx,offy); glw.quadTex( dQuad.tlx, dQuad.tly, dQuad.trx, dQuad.try_, dQuad.brx, dQuad.bry, dQuad.blx, dQuad.bly, clipUV ); } drawX += letterWidth * scale + charSpace; if (angle === 0 && offx + drawX > viewRight) break; } drawY += charHeight; if (drawY + charHeight + lineHeight > this.height || offy + drawY > viewBottom) { break; } } }; function Cnds() {} Cnds.prototype.CompareText = function(text_to_compare, case_sensitive) { if (case_sensitive) return this.text == text_to_compare; else return cr.equals_nocase(this.text, text_to_compare); }; pluginProto.cnds = new Cnds(); function Acts() {} Acts.prototype.SetText = function(param) { if (cr.is_number(param) && param < 1e9) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_set = param.toString(); if (this.text !== text_to_set) { this.text = text_to_set; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.AppendText = function(param) { if (cr.is_number(param)) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_append = param.toString(); if (text_to_append) // not empty { this.text += text_to_append; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetScale = function(param) { if (param !== this.characterScale) { this.characterScale = param; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetCharacterSpacing = function(param) { if (param !== this.CharacterSpacing) { this.characterSpacing = param; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetLineHeight = function(param) { if (param !== this.lineHeight) { this.lineHeight = param; this.text_changed = true; this.runtime.redraw = true; } }; instanceProto.SetCharWidth = function(character,width) { var w = parseInt(width,10); if (this.characterWidthList[character] !== w) { this.characterWidthList[character] = w; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetCharacterWidth = function(characterSet,width) { if (characterSet !== "") { for(var c = 0; c < characterSet.length; c++) { this.SetCharWidth(characterSet.charAt(c),width); } } }; Acts.prototype.SetEffect = function (effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.SetHAlign = function (a) { this.halign = a / 2.0; this.text_changed = true; this.runtime.redraw = true; }; Acts.prototype.SetVAlign = function (a) { this.valign = a / 2.0; this.text_changed = true; this.runtime.redraw = true; }; pluginProto.acts = new Acts(); function Exps() {} Exps.prototype.CharacterWidth = function(ret,character) { ret.set_int(this.getCharacterWidth(character)); }; Exps.prototype.CharacterHeight = function(ret) { ret.set_int(this.characterHeight); }; Exps.prototype.CharacterScale = function(ret) { ret.set_float(this.characterScale); }; Exps.prototype.CharacterSpacing = function(ret) { ret.set_int(this.characterSpacing); }; Exps.prototype.LineHeight = function(ret) { ret.set_int(this.lineHeight); }; Exps.prototype.Text = function(ret) { ret.set_string(this.text); }; Exps.prototype.TextWidth = function (ret) { this.rebuildText(); ret.set_float(this.textWidth); }; Exps.prototype.TextHeight = function (ret) { this.rebuildText(); ret.set_float(this.textHeight); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.TiledBg = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.TiledBg.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.texture_img.cr_filesize = this.texture_filesize; this.runtime.waitForImageLoad(this.texture_img, this.texture_file); this.pattern = null; this.webGL_texture = null; }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); } var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].webGL_texture = this.webGL_texture; }; typeProto.loadTextures = function () { if (this.is_family || this.webGL_texture || !this.runtime.glwrap) return; this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function (ctx) { ctx.drawImage(this.texture_img, 0, 0); }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.rcTex = new cr.rect(0, 0, 0, 0); this.has_own_texture = false; // true if a texture loaded in from URL this.texture_img = this.type.texture_img; if (this.runtime.glwrap) { this.type.loadTextures(); this.webGL_texture = this.type.webGL_texture; } else { if (!this.type.pattern) this.type.pattern = this.runtime.ctx.createPattern(this.type.texture_img, "repeat"); this.pattern = this.type.pattern; } }; instanceProto.afterLoad = function () { this.has_own_texture = false; this.texture_img = this.type.texture_img; }; instanceProto.onDestroy = function () { if (this.runtime.glwrap && this.has_own_texture && this.webGL_texture) { this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; } }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; ctx.save(); ctx.fillStyle = this.pattern; var myx = this.x; var myy = this.y; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } var drawX = -(this.hotspotX * this.width); var drawY = -(this.hotspotY * this.height); var offX = drawX % this.texture_img.width; var offY = drawY % this.texture_img.height; if (offX < 0) offX += this.texture_img.width; if (offY < 0) offY += this.texture_img.height; ctx.translate(myx, myy); ctx.rotate(this.angle); ctx.translate(offX, offY); ctx.fillRect(drawX - offX, drawY - offY, this.width, this.height); ctx.restore(); }; instanceProto.drawGL_earlyZPass = function(glw) { this.drawGL(glw); }; instanceProto.drawGL = function(glw) { glw.setTexture(this.webGL_texture); glw.setOpacity(this.opacity); var rcTex = this.rcTex; rcTex.right = this.width / this.texture_img.width; rcTex.bottom = this.height / this.texture_img.height; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = Math.round(this.x) - this.x; var oy = Math.round(this.y) - this.y; glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, rcTex); } else glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, rcTex); }; function Cnds() {}; Cnds.prototype.OnURLLoaded = function () { return true; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetEffect = function (effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.LoadURL = function (url_) { var img = new Image(); var self = this; img.onload = function () { self.texture_img = img; if (self.runtime.glwrap) { if (self.has_own_texture && self.webGL_texture) self.runtime.glwrap.deleteTexture(self.webGL_texture); self.webGL_texture = self.runtime.glwrap.loadTexture(img, true, self.runtime.linearSampling); } else { self.pattern = self.runtime.ctx.createPattern(img, "repeat"); } self.has_own_texture = true; self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.TiledBg.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:") img.crossOrigin = "anonymous"; img.src = url_; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.ImageWidth = function (ret) { ret.set_float(this.texture_img.width); }; Exps.prototype.ImageHeight = function (ret) { ret.set_float(this.texture_img.height); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Touch = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Touch.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.touches = []; this.mouseDown = false; }; var instanceProto = pluginProto.Instance.prototype; var dummyoffset = {left: 0, top: 0}; instanceProto.findTouch = function (id) { var i, len; for (i = 0, len = this.touches.length; i < len; i++) { if (this.touches[i]["id"] === id) return i; } return -1; }; var appmobi_accx = 0; var appmobi_accy = 0; var appmobi_accz = 0; function AppMobiGetAcceleration(evt) { appmobi_accx = evt.x; appmobi_accy = evt.y; appmobi_accz = evt.z; }; var pg_accx = 0; var pg_accy = 0; var pg_accz = 0; function PhoneGapGetAcceleration(evt) { pg_accx = evt.x; pg_accy = evt.y; pg_accz = evt.z; }; var theInstance = null; var touchinfo_cache = []; function AllocTouchInfo(x, y, id, index) { var ret; if (touchinfo_cache.length) ret = touchinfo_cache.pop(); else ret = new TouchInfo(); ret.init(x, y, id, index); return ret; }; function ReleaseTouchInfo(ti) { if (touchinfo_cache.length < 100) touchinfo_cache.push(ti); }; var GESTURE_HOLD_THRESHOLD = 15; // max px motion for hold gesture to register var GESTURE_HOLD_TIMEOUT = 500; // time for hold gesture to register var GESTURE_TAP_TIMEOUT = 333; // time for tap gesture to register var GESTURE_DOUBLETAP_THRESHOLD = 25; // max distance apart for taps to be function TouchInfo() { this.starttime = 0; this.time = 0; this.lasttime = 0; this.startx = 0; this.starty = 0; this.x = 0; this.y = 0; this.lastx = 0; this.lasty = 0; this["id"] = 0; this.startindex = 0; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.init = function (x, y, id, index) { var nowtime = cr.performance_now(); this.time = nowtime; this.lasttime = nowtime; this.starttime = nowtime; this.startx = x; this.starty = y; this.x = x; this.y = y; this.lastx = x; this.lasty = y; this["id"] = id; this.startindex = index; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.update = function (nowtime, x, y) { this.lasttime = this.time; this.time = nowtime; this.lastx = this.x; this.lasty = this.y; this.x = x; this.y = y; if (!this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) >= GESTURE_HOLD_THRESHOLD) { this.tooFarForHold = true; } }; TouchInfo.prototype.maybeTriggerHold = function (inst, index) { if (this.triggeredHold) return; // already triggered this gesture var nowtime = cr.performance_now(); if (nowtime - this.starttime >= GESTURE_HOLD_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { this.triggeredHold = true; inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGestureObject, inst); inst.getTouchIndex = 0; } }; var lastTapX = -1000; var lastTapY = -1000; var lastTapTime = -10000; TouchInfo.prototype.maybeTriggerTap = function (inst, index) { if (this.triggeredHold) return; var nowtime = cr.performance_now(); if (nowtime - this.starttime <= GESTURE_TAP_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; if ((nowtime - lastTapTime <= GESTURE_TAP_TIMEOUT * 2) && cr.distanceTo(lastTapX, lastTapY, this.x, this.y) < GESTURE_DOUBLETAP_THRESHOLD) { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGestureObject, inst); lastTapX = -1000; lastTapY = -1000; lastTapTime = -10000; } else { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGestureObject, inst); lastTapX = this.x; lastTapY = this.y; lastTapTime = nowtime; } inst.getTouchIndex = 0; } }; instanceProto.onCreate = function() { theInstance = this; this.isWindows8 = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.orient_alpha = 0; this.orient_beta = 0; this.orient_gamma = 0; this.acc_g_x = 0; this.acc_g_y = 0; this.acc_g_z = 0; this.acc_x = 0; this.acc_y = 0; this.acc_z = 0; this.curTouchX = 0; this.curTouchY = 0; this.trigger_index = 0; this.trigger_id = 0; this.getTouchIndex = 0; this.useMouseInput = (this.properties[0] !== 0); var elem = (this.runtime.fullscreen_mode > 0) ? document : this.runtime.canvas; var elem2 = document; if (this.runtime.isDirectCanvas) elem2 = elem = window["Canvas"]; else if (this.runtime.isCocoonJs) elem2 = elem = window; var self = this; if (window.navigator["pointerEnabled"]) { elem.addEventListener("pointerdown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("pointermove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("pointerup", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("pointercancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); this.runtime.canvas.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); document.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); } } else if (window.navigator["msPointerEnabled"]) { elem.addEventListener("MSPointerDown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("MSPointerMove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("MSPointerUp", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("MSPointerCancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); } } else { elem.addEventListener("touchstart", function(info) { self.onTouchStart(info); }, false ); elem.addEventListener("touchmove", function(info) { self.onTouchMove(info); }, false ); elem2.addEventListener("touchend", function(info) { self.onTouchEnd(info, false); }, false ); elem2.addEventListener("touchcancel", function(info) { self.onTouchEnd(info, true); }, false ); } if (this.isWindows8) { var win8accelerometerFn = function(e) { var reading = e["reading"]; self.acc_x = reading["accelerationX"]; self.acc_y = reading["accelerationY"]; self.acc_z = reading["accelerationZ"]; }; var win8inclinometerFn = function(e) { var reading = e["reading"]; self.orient_alpha = reading["yawDegrees"]; self.orient_beta = reading["pitchDegrees"]; self.orient_gamma = reading["rollDegrees"]; }; var accelerometer = Windows["Devices"]["Sensors"]["Accelerometer"]["getDefault"](); if (accelerometer) { accelerometer["reportInterval"] = Math.max(accelerometer["minimumReportInterval"], 16); accelerometer.addEventListener("readingchanged", win8accelerometerFn); } var inclinometer = Windows["Devices"]["Sensors"]["Inclinometer"]["getDefault"](); if (inclinometer) { inclinometer["reportInterval"] = Math.max(inclinometer["minimumReportInterval"], 16); inclinometer.addEventListener("readingchanged", win8inclinometerFn); } document.addEventListener("visibilitychange", function(e) { if (document["hidden"] || document["msHidden"]) { if (accelerometer) accelerometer.removeEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.removeEventListener("readingchanged", win8inclinometerFn); } else { if (accelerometer) accelerometer.addEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.addEventListener("readingchanged", win8inclinometerFn); } }, false); } else { window.addEventListener("deviceorientation", function (eventData) { self.orient_alpha = eventData["alpha"] || 0; self.orient_beta = eventData["beta"] || 0; self.orient_gamma = eventData["gamma"] || 0; }, false); window.addEventListener("devicemotion", function (eventData) { if (eventData["accelerationIncludingGravity"]) { self.acc_g_x = eventData["accelerationIncludingGravity"]["x"] || 0; self.acc_g_y = eventData["accelerationIncludingGravity"]["y"] || 0; self.acc_g_z = eventData["accelerationIncludingGravity"]["z"] || 0; } if (eventData["acceleration"]) { self.acc_x = eventData["acceleration"]["x"] || 0; self.acc_y = eventData["acceleration"]["y"] || 0; self.acc_z = eventData["acceleration"]["z"] || 0; } }, false); } if (this.useMouseInput && !this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); } if (!this.runtime.isiOS && this.runtime.isCordova && navigator["accelerometer"] && navigator["accelerometer"]["watchAcceleration"]) { navigator["accelerometer"]["watchAcceleration"](PhoneGapGetAcceleration, null, { "frequency": 40 }); } this.runtime.tick2Me(this); }; instanceProto.onPointerMove = function (info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault) info.preventDefault(); var i = this.findTouch(info["pointerId"]); var nowtime = cr.performance_now(); if (i >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var t = this.touches[i]; if (nowtime - t.time < 2) return; t.update(nowtime, info.pageX - offset.left, info.pageY - offset.top); } }; instanceProto.onPointerStart = function (info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var touchx = info.pageX - offset.left; var touchy = info.pageY - offset.top; var nowtime = cr.performance_now(); this.trigger_index = this.touches.length; this.trigger_id = info["pointerId"]; this.touches.push(AllocTouchInfo(touchx, touchy, info["pointerId"], this.trigger_index)); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onPointerEnd = function (info, isCancel) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var i = this.findTouch(info["pointerId"]); this.trigger_index = (i >= 0 ? this.touches[i].startindex : -1); this.trigger_id = (i >= 0 ? this.touches[i]["id"] : -1); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (i >= 0) { if (!isCancel) this.touches[i].maybeTriggerTap(this, i); ReleaseTouchInfo(this.touches[i]); this.touches.splice(i, 1); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchMove = function (info) { if (info.preventDefault) info.preventDefault(); var nowtime = cr.performance_now(); var i, len, t, u; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; var j = this.findTouch(t["identifier"]); if (j >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); u = this.touches[j]; if (nowtime - u.time < 2) continue; u.update(nowtime, t.pageX - offset.left, t.pageY - offset.top); } } }; instanceProto.onTouchStart = function (info) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var nowtime = cr.performance_now(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j !== -1) continue; var touchx = t.pageX - offset.left; var touchy = t.pageY - offset.top; this.trigger_index = this.touches.length; this.trigger_id = t["identifier"]; this.touches.push(AllocTouchInfo(touchx, touchy, t["identifier"], this.trigger_index)); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchEnd = function (info, isCancel) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j >= 0) { this.trigger_index = this.touches[j].startindex; this.trigger_id = this.touches[j]["id"]; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (!isCancel) this.touches[j].maybeTriggerTap(this, j); ReleaseTouchInfo(this.touches[j]); this.touches.splice(j, 1); } } this.runtime.isInUserInputEvent = false; }; instanceProto.getAlpha = function () { if (this.runtime.isCordova && this.orient_alpha === 0 && pg_accz !== 0) return pg_accz * 90; else return this.orient_alpha; }; instanceProto.getBeta = function () { if (this.runtime.isCordova && this.orient_beta === 0 && pg_accy !== 0) return pg_accy * 90; else return this.orient_beta; }; instanceProto.getGamma = function () { if (this.runtime.isCordova && this.orient_gamma === 0 && pg_accx !== 0) return pg_accx * 90; else return this.orient_gamma; }; var noop_func = function(){}; instanceProto.onMouseDown = function(info) { var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchStart(fakeinfo); this.mouseDown = true; }; instanceProto.onMouseMove = function(info) { if (!this.mouseDown) return; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchMove(fakeinfo); }; instanceProto.onMouseUp = function(info) { if (info.preventDefault && this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchEnd(fakeinfo); this.mouseDown = false; }; instanceProto.tick2 = function() { var i, len, t; var nowtime = cr.performance_now(); for (i = 0, len = this.touches.length; i < len; ++i) { t = this.touches[i]; if (t.time <= nowtime - 50) t.lasttime = nowtime; t.maybeTriggerHold(this, i); } }; function Cnds() {}; Cnds.prototype.OnTouchStart = function () { return true; }; Cnds.prototype.OnTouchEnd = function () { return true; }; Cnds.prototype.IsInTouch = function () { return this.touches.length; }; Cnds.prototype.OnTouchObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; var touching = []; Cnds.prototype.IsTouchingObject = function (type) { if (!type) return false; var sol = type.getCurrentSol(); var instances = sol.getObjects(); var px, py; var i, leni, j, lenj; for (i = 0, leni = instances.length; i < leni; i++) { var inst = instances[i]; inst.update_bbox(); for (j = 0, lenj = this.touches.length; j < lenj; j++) { var touch = this.touches[j]; px = inst.layer.canvasToLayer(touch.x, touch.y, true); py = inst.layer.canvasToLayer(touch.x, touch.y, false); if (inst.contains_pt(px, py)) { touching.push(inst); break; } } } if (touching.length) { sol.select_all = false; cr.shallowAssignArray(sol.instances, touching); type.applySolToContainer(); cr.clearArray(touching); return true; } else return false; }; Cnds.prototype.CompareTouchSpeed = function (index, cmp, s) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) return false; var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; var speed = 0; if (timediff > 0) speed = dist / timediff; return cr.do_cmp(speed, cmp, s); }; Cnds.prototype.OrientationSupported = function () { return typeof window["DeviceOrientationEvent"] !== "undefined"; }; Cnds.prototype.MotionSupported = function () { return typeof window["DeviceMotionEvent"] !== "undefined"; }; Cnds.prototype.CompareOrientation = function (orientation_, cmp_, angle_) { var v = 0; if (orientation_ === 0) v = this.getAlpha(); else if (orientation_ === 1) v = this.getBeta(); else v = this.getGamma(); return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.CompareAcceleration = function (acceleration_, cmp_, angle_) { var v = 0; if (acceleration_ === 0) v = this.acc_g_x; else if (acceleration_ === 1) v = this.acc_g_y; else if (acceleration_ === 2) v = this.acc_g_z; else if (acceleration_ === 3) v = this.acc_x; else if (acceleration_ === 4) v = this.acc_y; else if (acceleration_ === 5) v = this.acc_z; return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.OnNthTouchStart = function (touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.OnNthTouchEnd = function (touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.HasNthTouch = function (touch_) { touch_ = Math.floor(touch_); return this.touches.length >= touch_ + 1; }; Cnds.prototype.OnHoldGesture = function () { return true; }; Cnds.prototype.OnTapGesture = function () { return true; }; Cnds.prototype.OnDoubleTapGesture = function () { return true; }; Cnds.prototype.OnHoldGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnTapGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnDoubleTapGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; pluginProto.cnds = new Cnds(); function Exps() {}; Exps.prototype.TouchCount = function (ret) { ret.set_int(this.touches.length); }; Exps.prototype.X = function (ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XAt = function (ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XForID = function (ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); else ret.set_float(0); } }; Exps.prototype.Y = function (ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YAt = function (ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YForID = function (ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function (ret) { if (this.touches.length) ret.set_float(this.touches[0].x); else ret.set_float(0); }; Exps.prototype.AbsoluteXAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].x); }; Exps.prototype.AbsoluteXForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.x); }; Exps.prototype.AbsoluteY = function (ret) { if (this.touches.length) ret.set_float(this.touches[0].y); else ret.set_float(0); }; Exps.prototype.AbsoluteYAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].y); }; Exps.prototype.AbsoluteYForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.y); }; Exps.prototype.SpeedAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; if (timediff === 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.SpeedForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var dist = cr.distanceTo(touch.x, touch.y, touch.lastx, touch.lasty); var timediff = (touch.time - touch.lasttime) / 1000; if (timediff === 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.AngleAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(t.lastx, t.lasty, t.x, t.y))); }; Exps.prototype.AngleForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(touch.lastx, touch.lasty, touch.x, touch.y))); }; Exps.prototype.Alpha = function (ret) { ret.set_float(this.getAlpha()); }; Exps.prototype.Beta = function (ret) { ret.set_float(this.getBeta()); }; Exps.prototype.Gamma = function (ret) { ret.set_float(this.getGamma()); }; Exps.prototype.AccelerationXWithG = function (ret) { ret.set_float(this.acc_g_x); }; Exps.prototype.AccelerationYWithG = function (ret) { ret.set_float(this.acc_g_y); }; Exps.prototype.AccelerationZWithG = function (ret) { ret.set_float(this.acc_g_z); }; Exps.prototype.AccelerationX = function (ret) { ret.set_float(this.acc_x); }; Exps.prototype.AccelerationY = function (ret) { ret.set_float(this.acc_y); }; Exps.prototype.AccelerationZ = function (ret) { ret.set_float(this.acc_z); }; Exps.prototype.TouchIndex = function (ret) { ret.set_int(this.trigger_index); }; Exps.prototype.TouchID = function (ret) { ret.set_float(this.trigger_id); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.WebStorage = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.WebStorage.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var prefix = ""; var is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); if (is_arcade) prefix = "arcade" + window["scirra_arcade_id"]; var isSupported = false; try { localStorage.getItem("test"); isSupported = true; } catch (e) { isSupported = false; } instanceProto.onCreate = function() { if (!isSupported) { cr.logexport("[Construct 2] Webstorage plugin: local storage is not supported on this platform."); } }; function Cnds() {}; Cnds.prototype.LocalStorageEnabled = function() { return isSupported; }; Cnds.prototype.SessionStorageEnabled = function() { return isSupported; }; Cnds.prototype.LocalStorageExists = function(key) { if (!isSupported) return false; return localStorage.getItem(prefix + key) != null; }; Cnds.prototype.SessionStorageExists = function(key) { if (!isSupported) return false; return sessionStorage.getItem(prefix + key) != null; }; Cnds.prototype.OnQuotaExceeded = function () { return true; }; Cnds.prototype.CompareKeyText = function (key, text_to_compare, case_sensitive) { if (!isSupported) return false; var value = localStorage.getItem(prefix + key) || ""; if (case_sensitive) return value == text_to_compare; else return cr.equals_nocase(value, text_to_compare); }; Cnds.prototype.CompareKeyNumber = function (key, cmp, x) { if (!isSupported) return false; var value = localStorage.getItem(prefix + key) || ""; return cr.do_cmp(parseFloat(value), cmp, x); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StoreLocal = function(key, data) { if (!isSupported) return; try { localStorage.setItem(prefix + key, data); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); } }; Acts.prototype.StoreSession = function(key,data) { if (!isSupported) return; try { sessionStorage.setItem(prefix + key, data); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); } }; Acts.prototype.RemoveLocal = function(key) { if (!isSupported) return; localStorage.removeItem(prefix + key); }; Acts.prototype.RemoveSession = function(key) { if (!isSupported) return; sessionStorage.removeItem(prefix + key); }; Acts.prototype.ClearLocal = function() { if (!isSupported) return; if (!is_arcade) localStorage.clear(); }; Acts.prototype.ClearSession = function() { if (!isSupported) return; if (!is_arcade) sessionStorage.clear(); }; Acts.prototype.JSONLoad = function (json_, mode_) { if (!isSupported) return; var d; try { d = JSON.parse(json_); } catch(e) { return; } if (!d["c2dictionary"]) // presumably not a c2dictionary object return; var o = d["data"]; if (mode_ === 0 && !is_arcade) // 'set' mode: must clear webstorage first localStorage.clear(); var p; for (p in o) { if (o.hasOwnProperty(p)) { try { localStorage.setItem(prefix + p, o[p]); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); return; } } } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.LocalValue = function(ret,key) { if (!isSupported) { ret.set_string(""); return; } ret.set_string(localStorage.getItem(prefix + key) || ""); }; Exps.prototype.SessionValue = function(ret,key) { if (!isSupported) { ret.set_string(""); return; } ret.set_string(sessionStorage.getItem(prefix + key) || ""); }; Exps.prototype.LocalCount = function(ret) { if (!isSupported) { ret.set_int(0); return; } ret.set_int(is_arcade ? 0 : localStorage.length); }; Exps.prototype.SessionCount = function(ret) { if (!isSupported) { ret.set_int(0); return; } ret.set_int(is_arcade ? 0 : sessionStorage.length); }; Exps.prototype.LocalAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(localStorage.getItem(localStorage.key(n)) || ""); }; Exps.prototype.SessionAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(sessionStorage.getItem(sessionStorage.key(n)) || ""); }; Exps.prototype.LocalKeyAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(localStorage.key(n) || ""); }; Exps.prototype.SessionKeyAt = function(ret,n) { if (is_arcade || !isSupported) ret.set_string(""); else ret.set_string(sessionStorage.key(n) || ""); }; Exps.prototype.AsJSON = function (ret) { if (!isSupported) { ret.set_string(""); return; } var o = {}, i, len, k; for (i = 0, len = localStorage.length; i < len; i++) { k = localStorage.key(i); if (is_arcade) { if (k.substr(0, prefix.length) === prefix) { o[k.substr(prefix.length)] = localStorage.getItem(k); } } else o[k] = localStorage.getItem(k); } ret.set_string(JSON.stringify({ "c2dictionary": true, "data": o })); }; pluginProto.exps = new Exps(); }()); ; ; cr.behaviors.Fade = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Fade.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.activeAtStart = this.properties[0] === 1; this.setMaxOpacity = false; // used to retrieve maxOpacity once in first 'Start fade' action if initially inactive this.fadeInTime = this.properties[1]; this.waitTime = this.properties[2]; this.fadeOutTime = this.properties[3]; this.destroy = this.properties[4]; // 0 = no, 1 = after fade out this.stage = this.activeAtStart ? 0 : 3; // 0 = fade in, 1 = wait, 2 = fade out, 3 = done if (this.recycled) this.stageTime.reset(); else this.stageTime = new cr.KahanAdder(); this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); if (this.activeAtStart) { if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } } }; behinstProto.saveToJSON = function () { return { "fit": this.fadeInTime, "wt": this.waitTime, "fot": this.fadeOutTime, "s": this.stage, "st": this.stageTime.sum, "mo": this.maxOpacity, }; }; behinstProto.loadFromJSON = function (o) { this.fadeInTime = o["fit"]; this.waitTime = o["wt"]; this.fadeOutTime = o["fot"]; this.stage = o["s"]; this.stageTime.reset(); this.stageTime.sum = o["st"]; this.maxOpacity = o["mo"]; }; behinstProto.tick = function () { this.stageTime.add(this.runtime.getDt(this.inst)); if (this.stage === 0) { this.inst.opacity = (this.stageTime.sum / this.fadeInTime) * this.maxOpacity; this.runtime.redraw = true; if (this.inst.opacity >= this.maxOpacity) { this.inst.opacity = this.maxOpacity; this.stage = 1; // wait stage this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeInEnd, this.inst); } } if (this.stage === 1) { if (this.stageTime.sum >= this.waitTime) { this.stage = 2; // fade out stage this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnWaitEnd, this.inst); } } if (this.stage === 2) { if (this.fadeOutTime !== 0) { this.inst.opacity = this.maxOpacity - ((this.stageTime.sum / this.fadeOutTime) * this.maxOpacity); this.runtime.redraw = true; if (this.inst.opacity < 0) { this.inst.opacity = 0; this.stage = 3; // done this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeOutEnd, this.inst); if (this.destroy === 1) this.runtime.DestroyInstance(this.inst); } } } }; behinstProto.doStart = function () { this.stage = 0; this.stageTime.reset(); if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } }; function Cnds() {}; Cnds.prototype.OnFadeOutEnd = function () { return true; }; Cnds.prototype.OnFadeInEnd = function () { return true; }; Cnds.prototype.OnWaitEnd = function () { return true; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StartFade = function () { if (!this.activeAtStart && !this.setMaxOpacity) { this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); this.setMaxOpacity = true; } if (this.stage === 3) this.doStart(); }; Acts.prototype.RestartFade = function () { this.doStart(); }; Acts.prototype.SetFadeInTime = function (t) { if (t < 0) t = 0; this.fadeInTime = t; }; Acts.prototype.SetWaitTime = function (t) { if (t < 0) t = 0; this.waitTime = t; }; Acts.prototype.SetFadeOutTime = function (t) { if (t < 0) t = 0; this.fadeOutTime = t; }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.FadeInTime = function (ret) { ret.set_float(this.fadeInTime); }; Exps.prototype.WaitTime = function (ret) { ret.set_float(this.waitTime); }; Exps.prototype.FadeOutTime = function (ret) { ret.set_float(this.fadeOutTime); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Rotate = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Rotate.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.speed = cr.to_radians(this.properties[0]); this.acc = cr.to_radians(this.properties[1]); }; behinstProto.saveToJSON = function () { return { "speed": this.speed, "acc": this.acc }; }; behinstProto.loadFromJSON = function (o) { this.speed = o["speed"]; this.acc = o["acc"]; }; behinstProto.tick = function () { var dt = this.runtime.getDt(this.inst); if (dt === 0) return; if (this.acc !== 0) this.speed += this.acc * dt; if (this.speed !== 0) { this.inst.angle = cr.clamp_angle(this.inst.angle + this.speed * dt); this.inst.set_bbox_changed(); } }; function Cnds() {}; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function (s) { this.speed = cr.to_radians(s); }; Acts.prototype.SetAcceleration = function (a) { this.acc = cr.to_radians(a); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function (ret) { ret.set_float(cr.to_degrees(this.speed)); }; Exps.prototype.Acceleration = function (ret) { ret.set_float(cr.to_degrees(this.acc)); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Sin = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Sin.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; this.i = 0; // period offset (radians) }; var behinstProto = behaviorProto.Instance.prototype; var _2pi = 2 * Math.PI; var _pi_2 = Math.PI / 2; var _3pi_2 = (3 * Math.PI) / 2; behinstProto.onCreate = function() { this.active = (this.properties[0] === 1); this.movement = this.properties[1]; // 0=Horizontal|1=Vertical|2=Size|3=Width|4=Height|5=Angle|6=Opacity|7=Value only this.wave = this.properties[2]; // 0=Sine|1=Triangle|2=Sawtooth|3=Reverse sawtooth|4=Square this.period = this.properties[3]; this.period += Math.random() * this.properties[4]; // period random if (this.period === 0) this.i = 0; else { this.i = (this.properties[5] / this.period) * _2pi; // period offset this.i += ((Math.random() * this.properties[6]) / this.period) * _2pi; // period offset random } this.mag = this.properties[7]; // magnitude this.mag += Math.random() * this.properties[8]; // magnitude random this.initialValue = 0; this.initialValue2 = 0; this.ratio = 0; this.init(); }; behinstProto.saveToJSON = function () { return { "i": this.i, "a": this.active, "mv": this.movement, "w": this.wave, "p": this.period, "mag": this.mag, "iv": this.initialValue, "iv2": this.initialValue2, "r": this.ratio, "lkv": this.lastKnownValue, "lkv2": this.lastKnownValue2 }; }; behinstProto.loadFromJSON = function (o) { this.i = o["i"]; this.active = o["a"]; this.movement = o["mv"]; this.wave = o["w"]; this.period = o["p"]; this.mag = o["mag"]; this.initialValue = o["iv"]; this.initialValue2 = o["iv2"] || 0; this.ratio = o["r"]; this.lastKnownValue = o["lkv"]; this.lastKnownValue2 = o["lkv2"] || 0; }; behinstProto.init = function () { switch (this.movement) { case 0: // horizontal this.initialValue = this.inst.x; break; case 1: // vertical this.initialValue = this.inst.y; break; case 2: // size this.initialValue = this.inst.width; this.ratio = this.inst.height / this.inst.width; break; case 3: // width this.initialValue = this.inst.width; break; case 4: // height this.initialValue = this.inst.height; break; case 5: // angle this.initialValue = this.inst.angle; this.mag = cr.to_radians(this.mag); // convert magnitude from degrees to radians break; case 6: // opacity this.initialValue = this.inst.opacity; break; case 7: this.initialValue = 0; break; case 8: // forwards/backwards this.initialValue = this.inst.x; this.initialValue2 = this.inst.y; break; default: ; } this.lastKnownValue = this.initialValue; this.lastKnownValue2 = this.initialValue2; }; behinstProto.waveFunc = function (x) { x = x % _2pi; switch (this.wave) { case 0: // sine return Math.sin(x); case 1: // triangle if (x <= _pi_2) return x / _pi_2; else if (x <= _3pi_2) return 1 - (2 * (x - _pi_2) / Math.PI); else return (x - _3pi_2) / _pi_2 - 1; case 2: // sawtooth return 2 * x / _2pi - 1; case 3: // reverse sawtooth return -2 * x / _2pi + 1; case 4: // square return x < Math.PI ? -1 : 1; }; return 0; }; behinstProto.tick = function () { var dt = this.runtime.getDt(this.inst); if (!this.active || dt === 0) return; if (this.period === 0) this.i = 0; else { this.i += (dt / this.period) * _2pi; this.i = this.i % _2pi; } switch (this.movement) { case 0: // horizontal if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; this.inst.x = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; break; case 1: // vertical if (this.inst.y !== this.lastKnownValue) this.initialValue += this.inst.y - this.lastKnownValue; this.inst.y = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.y; break; case 2: // size this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; this.inst.height = this.inst.width * this.ratio; break; case 3: // width this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 4: // height this.inst.height = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 5: // angle if (this.inst.angle !== this.lastKnownValue) this.initialValue = cr.clamp_angle(this.initialValue + (this.inst.angle - this.lastKnownValue)); this.inst.angle = cr.clamp_angle(this.initialValue + this.waveFunc(this.i) * this.mag); this.lastKnownValue = this.inst.angle; break; case 6: // opacity this.inst.opacity = this.initialValue + (this.waveFunc(this.i) * this.mag) / 100; if (this.inst.opacity < 0) this.inst.opacity = 0; else if (this.inst.opacity > 1) this.inst.opacity = 1; break; case 8: // forwards/backwards if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; if (this.inst.y !== this.lastKnownValue2) this.initialValue2 += this.inst.y - this.lastKnownValue2; this.inst.x = this.initialValue + Math.cos(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.inst.y = this.initialValue2 + Math.sin(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; this.lastKnownValue2 = this.inst.y; break; } this.inst.set_bbox_changed(); }; behinstProto.onSpriteFrameChanged = function (prev_frame, next_frame) { switch (this.movement) { case 2: // size this.initialValue *= (next_frame.width / prev_frame.width); this.ratio = next_frame.height / next_frame.width; break; case 3: // width this.initialValue *= (next_frame.width / prev_frame.width); break; case 4: // height this.initialValue *= (next_frame.height / prev_frame.height); break; } }; function Cnds() {}; Cnds.prototype.IsActive = function () { return this.active; }; Cnds.prototype.CompareMovement = function (m) { return this.movement === m; }; Cnds.prototype.ComparePeriod = function (cmp, v) { return cr.do_cmp(this.period, cmp, v); }; Cnds.prototype.CompareMagnitude = function (cmp, v) { if (this.movement === 5) return cr.do_cmp(this.mag, cmp, cr.to_radians(v)); else return cr.do_cmp(this.mag, cmp, v); }; Cnds.prototype.CompareWave = function (w) { return this.wave === w; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetActive = function (a) { this.active = (a === 1); }; Acts.prototype.SetPeriod = function (x) { this.period = x; }; Acts.prototype.SetMagnitude = function (x) { this.mag = x; if (this.movement === 5) // angle this.mag = cr.to_radians(this.mag); }; Acts.prototype.SetMovement = function (m) { if (this.movement === 5) this.mag = cr.to_degrees(this.mag); this.movement = m; this.init(); }; Acts.prototype.SetWave = function (w) { this.wave = w; }; Acts.prototype.SetPhase = function (x) { this.i = (x * _2pi) % _2pi; }; Acts.prototype.UpdateInitialState = function () { this.init(); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.CyclePosition = function (ret) { ret.set_float(this.i / _2pi); }; Exps.prototype.Period = function (ret) { ret.set_float(this.period); }; Exps.prototype.Magnitude = function (ret) { if (this.movement === 5) // angle ret.set_float(cr.to_degrees(this.mag)); else ret.set_float(this.mag); }; Exps.prototype.Value = function (ret) { ret.set_float(this.waveFunc(this.i) * this.mag); }; behaviorProto.exps = new Exps(); }()); cr.getObjectRefTable = function () { return [ cr.plugins_.Audio, cr.plugins_.Browser, cr.plugins_.Cocoon_Canvasplus, cr.plugins_.Keyboard, cr.plugins_.Mouse, cr.plugins_.Touch, cr.plugins_.Sprite, cr.plugins_.Spritefont2, cr.plugins_.TiledBg, cr.plugins_.WebStorage, cr.behaviors.Rotate, cr.behaviors.Sin, cr.behaviors.Fade, cr.system_object.prototype.cnds.IsGroupActive, cr.system_object.prototype.cnds.OnLayoutStart, cr.plugins_.Sprite.prototype.acts.SetAngle, cr.plugins_.Sprite.prototype.acts.Spawn, cr.plugins_.Sprite.prototype.acts.SetPos, cr.plugins_.Sprite.prototype.exps.X, cr.plugins_.Sprite.prototype.exps.Y, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, cr.plugins_.Sprite.prototype.acts.MoveToTop, cr.plugins_.Spritefont2.prototype.acts.SetText, cr.system_object.prototype.acts.SetGroupActive, cr.system_object.prototype.acts.SetVar, cr.plugins_.Sprite.prototype.cnds.CompareFrame, cr.system_object.prototype.exps.round, cr.system_object.prototype.exps.random, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, cr.plugins_.Sprite.prototype.exps.AnimationFrame, cr.plugins_.Sprite.prototype.exps.Angle, cr.system_object.prototype.cnds.CompareVar, cr.system_object.prototype.cnds.EveryTick, cr.system_object.prototype.exps.viewportright, cr.system_object.prototype.exps.viewporttop, cr.plugins_.Spritefont2.prototype.acts.SetPos, cr.system_object.prototype.exps.layoutwidth, cr.plugins_.Sprite.prototype.acts.SetPosToObject, cr.system_object.prototype.cnds.Every, cr.system_object.prototype.acts.SubVar, cr.system_object.prototype.acts.AddVar, cr.plugins_.Audio.prototype.acts.Play, cr.system_object.prototype.acts.Wait, cr.plugins_.Sprite.prototype.acts.Destroy, cr.plugins_.Spritefont2.prototype.acts.SetVisible, cr.plugins_.Sprite.prototype.acts.SetVisible, cr.system_object.prototype.exps.layoutheight, cr.plugins_.Touch.prototype.cnds.OnTouchObject, cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet, cr.system_object.prototype.cnds.Compare, cr.plugins_.Sprite.prototype.acts.SetBoolInstanceVar, cr.system_object.prototype.cnds.TriggerOnce, cr.system_object.prototype.acts.SetLayerOpacity, cr.system_object.prototype.acts.SetLayerScale, cr.system_object.prototype.exps.lerp, cr.system_object.prototype.exps.layeropacity, cr.system_object.prototype.exps.layerscale, cr.plugins_.WebStorage.prototype.acts.StoreLocal, cr.system_object.prototype.acts.WaitForSignal, cr.system_object.prototype.acts.GoToLayout, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, cr.plugins_.Sprite.prototype.acts.SetY, cr.plugins_.TiledBg.prototype.acts.SetHeight, cr.system_object.prototype.exps.distance, cr.plugins_.TiledBg.prototype.exps.X, cr.plugins_.TiledBg.prototype.exps.Y, cr.system_object.prototype.acts.CreateObject, cr.system_object.prototype.exps.viewportleft, cr.system_object.prototype.exps.viewportbottom, cr.plugins_.Sprite.prototype.acts.SetSize, cr.plugins_.Sprite.prototype.exps.Width, cr.plugins_.Sprite.prototype.exps.Height, cr.plugins_.Sprite.prototype.cnds.OnCollision, cr.plugins_.TiledBg.prototype.cnds.CompareHeight, cr.plugins_.TiledBg.prototype.acts.SetY, cr.plugins_.TiledBg.prototype.exps.Height, cr.plugins_.TiledBg.prototype.cnds.CompareX, cr.plugins_.TiledBg.prototype.exps.Width, cr.plugins_.TiledBg.prototype.acts.SetX, cr.plugins_.Mouse.prototype.cnds.IsOverObject, cr.behaviors.Sin.prototype.acts.SetActive, cr.plugins_.Sprite.prototype.cnds.CompareAnimSpeed, cr.plugins_.TiledBg.prototype.acts.SetVisible, cr.system_object.prototype.acts.GoToLayoutByName, cr.plugins_.Keyboard.prototype.cnds.OnAnyKey, cr.plugins_.Audio.prototype.acts.Preload, cr.system_object.prototype.exps.loadingprogress, cr.plugins_.Spritefont2.prototype.cnds.IsBoolInstanceVarSet, cr.system_object.prototype.cnds.OnLoadFinished, cr.plugins_.Spritefont2.prototype.acts.SetBoolInstanceVar, cr.plugins_.Browser.prototype.acts.RequestFullScreen, cr.system_object.prototype.acts.SetTimescale, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, cr.plugins_.WebStorage.prototype.exps.LocalValue, cr.plugins_.Sprite.prototype.acts.SetWidth, cr.plugins_.Sprite.prototype.acts.SetX, cr.plugins_.Touch.prototype.cnds.IsTouchingObject, cr.system_object.prototype.exps.clamp, cr.plugins_.Touch.prototype.exps.X, cr.system_object.prototype.exps.log10, cr.plugins_.Audio.prototype.acts.SetVolume, cr.system_object.prototype.cnds.Else, cr.plugins_.Sprite.prototype.acts.SetAnim, cr.system_object.prototype.acts.RestartLayout, cr.plugins_.Browser.prototype.acts.CancelFullScreen, cr.plugins_.Mouse.prototype.cnds.IsButtonDown, cr.plugins_.Mouse.prototype.acts.SetCursorSprite, cr.system_object.prototype.exps.windowwidth, cr.system_object.prototype.exps.windowheight, cr.system_object.prototype.acts.SetLayerVisible, cr.system_object.prototype.cnds.LayerCmpOpacity, cr.system_object.prototype.acts.Signal, cr.plugins_.Sprite.prototype.acts.StartAnim, cr.plugins_.Browser.prototype.acts.GoToURLWindow, cr.plugins_.Cocoon_Canvasplus.prototype.cnds.isCanvasPlus, cr.plugins_.Cocoon_Canvasplus.prototype.acts.exitApp, cr.plugins_.Browser.prototype.acts.Close, cr.plugins_.Spritefont2.prototype.acts.SetPosToObject, cr.plugins_.Sprite.prototype.cnds.IsAnimPlaying, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar ];}; home/jogoso94/public_html/jogos/pixel_zombies/c2runtime.js 0000644 00000615665 15043306466 0017745 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com 'use strict';var aa,ba,ca,da,E,ea,ia,L,Q,ja,ka,la,ma,qa,ra,T,sa,ta,ua,va,za,Aa,Ba,Ca,Da,Ea,V,Ga,Ha,Ia,Ja,Ka,La,Ma,Na,Oa,Pa,Qa,Ra,Sa,Ta,Ua,Za,$a,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,ub,vb,wb,yb,zb,Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb,Ib,Jb,Kb,Lb,Mb,Nb,Ob,Pb,Qb,Rb,Sb,Tb,Ub,Vb,Wb,Xb,Yb,Zb,$b,ac,bc,cc={};"function"!==typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===typeof"test".__proto__?function(e){return e.__proto__}:function(e){return e.constructor.prototype}); (function(){function e(d,q,a,n){this.set(d,q,a,n)}function r(){this.Qa=this.Pa=this.Sa=this.Ra=this.eb=this.cb=this.wa=this.va=0}function m(d,q,a,n){d<q?a<n?(s=d<a?d:a,y=q>n?q:n):(s=d<n?d:n,y=q>a?q:a):a<n?(s=q<a?q:a,y=d>n?d:n):(s=q<n?q:n,y=d>a?d:a)}function p(){this.items=this.Xc=null;this.Wf=0;n&&(this.Xc=new Set);this.wg=[];this.je=!0}function v(d){u[F++]=d}function c(){this.X=this.Wj=this.y=this.zk=0}function b(d){this.$a=[];this.li=this.ni=this.oi=this.mi=0;this.Th(d)}function h(d,q){this.Ck= d;this.Bk=q;this.cells={}}function t(d,q){this.Ck=d;this.Bk=q;this.cells={}}function g(d,q,a){var n;return S.length?(n=S.pop(),n.el=d,n.x=q,n.y=a,n):new ba(d,q,a)}function a(d,q,a){this.el=d;this.x=q;this.y=a;this.kb=new ca}function l(d,q,a){var n;return C.length?(n=C.pop(),n.el=d,n.x=q,n.y=a,n):new da(d,q,a)}function w(d,q,a){this.el=d;this.x=q;this.y=a;this.kb=[];this.Vf=!0;this.od=new ca;this.Ag=!1}function f(d,q){return d.ad-q.ad}E=function(d){window.console&&window.console.log&&window.console.log(d)}; ea=function(d){window.console&&window.console.error&&window.console.error(d)};aa=function(d){return d};ia=function(d){return"undefined"===typeof d};L=function(d){return"number"===typeof d};Q=function(d){return"string"===typeof d};ja=function(d){return 0<d&&0===(d-1&d)};ka=function(d){--d;for(var q=1;32>q;q<<=1)d|=d>>q;return d+1};la=function(d){return 0>d?-d:d};ma=function(d,q){return d>q?d:q};qa=function(d,q){return d<q?d:q};ra=Math.PI;T=function(d){return 0<=d?d|0:(d|0)-1};sa=function(d){var q= d|0;return q===d?q:q+1};ta=function(d,q,a,n,u,k,f,l){var c,b,F,g;d<a?(b=d,c=a):(b=a,c=d);u<f?(g=u,F=f):(g=f,F=u);if(c<g||b>F)return!1;q<n?(b=q,c=n):(b=n,c=q);k<l?(g=k,F=l):(g=l,F=k);if(c<g||b>F)return!1;c=u-d+f-a;b=k-q+l-n;d=a-d;q=n-q;u=f-u;k=l-k;l=la(q*u-k*d);return la(u*b-k*c)>l?!1:la(d*b-q*c)<=l};e.prototype.set=function(d,q,a,n){this.left=d;this.top=q;this.right=a;this.bottom=n};e.prototype.Bi=function(d){this.left=d.left;this.top=d.top;this.right=d.right;this.bottom=d.bottom};e.prototype.width= function(){return this.right-this.left};e.prototype.height=function(){return this.bottom-this.top};e.prototype.offset=function(d,q){this.left+=d;this.top+=q;this.right+=d;this.bottom+=q;return this};e.prototype.normalize=function(){var d=0;this.left>this.right&&(d=this.left,this.left=this.right,this.right=d);this.top>this.bottom&&(d=this.top,this.top=this.bottom,this.bottom=d)};e.prototype.lu=function(d){return!(d.right<this.left||d.bottom<this.top||d.left>this.right||d.top>this.bottom)};e.prototype.mu= function(d,q,a){return!(d.right+q<this.left||d.bottom+a<this.top||d.left+q>this.right||d.top+a>this.bottom)};e.prototype.yb=function(d,q){return d>=this.left&&d<=this.right&&q>=this.top&&q<=this.bottom};e.prototype.Li=function(d){return this.left===d.left&&this.top===d.top&&this.right===d.right&&this.bottom===d.bottom};ua=e;r.prototype.Sh=function(d){this.va=d.left;this.wa=d.top;this.cb=d.right;this.eb=d.top;this.Ra=d.right;this.Sa=d.bottom;this.Pa=d.left;this.Qa=d.bottom};r.prototype.Mp=function(d, q){if(0===q)this.Sh(d);else{var a=Math.sin(q),n=Math.cos(q),u=d.left*a,k=d.top*a,f=d.right*a,a=d.bottom*a,l=d.left*n,c=d.top*n,b=d.right*n,n=d.bottom*n;this.va=l-k;this.wa=c+u;this.cb=b-k;this.eb=c+f;this.Ra=b-a;this.Sa=n+f;this.Pa=l-a;this.Qa=n+u}};r.prototype.offset=function(d,q){this.va+=d;this.wa+=q;this.cb+=d;this.eb+=q;this.Ra+=d;this.Sa+=q;this.Pa+=d;this.Qa+=q;return this};var s=0,y=0;r.prototype.qn=function(d){m(this.va,this.cb,this.Ra,this.Pa);d.left=s;d.right=y;m(this.wa,this.eb,this.Sa, this.Qa);d.top=s;d.bottom=y};r.prototype.yb=function(d,q){var a=this.cb-this.va,n=this.eb-this.wa,u=this.Ra-this.va,k=this.Sa-this.wa,f=d-this.va,l=q-this.wa,c=a*a+n*n,b=a*u+n*k,n=a*f+n*l,F=u*u+k*k,g=u*f+k*l,h=1/(c*F-b*b),a=(F*n-b*g)*h,c=(c*g-b*n)*h;if(0<=a&&0<c&&1>a+c)return!0;a=this.Pa-this.va;n=this.Qa-this.wa;c=a*a+n*n;b=a*u+n*k;n=a*f+n*l;h=1/(c*F-b*b);a=(F*n-b*g)*h;c=(c*g-b*n)*h;return 0<=a&&0<c&&1>a+c};r.prototype.Lc=function(d,q){if(q)switch(d){case 0:return this.va;case 1:return this.cb;case 2:return this.Ra; case 3:return this.Pa;case 4:return this.va;default:return this.va}else switch(d){case 0:return this.wa;case 1:return this.eb;case 2:return this.Sa;case 3:return this.Qa;case 4:return this.wa;default:return this.wa}};r.prototype.To=function(){return(this.va+this.cb+this.Ra+this.Pa)/4};r.prototype.Uo=function(){return(this.wa+this.eb+this.Sa+this.Qa)/4};r.prototype.ko=function(d){var q=d.To(),a=d.Uo();if(this.yb(q,a))return!0;q=this.To();a=this.Uo();if(d.yb(q,a))return!0;var n,u,k,f,l,c,b,F;for(b= 0;4>b;b++)for(F=0;4>F;F++)if(q=this.Lc(b,!0),a=this.Lc(b,!1),n=this.Lc(b+1,!0),u=this.Lc(b+1,!1),k=d.Lc(F,!0),f=d.Lc(F,!1),l=d.Lc(F+1,!0),c=d.Lc(F+1,!1),ta(q,a,n,u,k,f,l,c))return!0;return!1};va=r;za=function(d,q){for(var a in q)q.hasOwnProperty(a)&&(d[a]=q[a]);return d};Aa=function(d,q){var a,n;q=T(q);if(!(0>q||q>=d.length)){a=q;for(n=d.length-1;a<n;a++)d[a]=d[a+1];d.length=n}};Ba=function(d,q){d.length=q.length;var a,n;a=0;for(n=q.length;a<n;a++)d[a]=q[a]};Ca=function(d,q){d.push.apply(d,q)};Da= function(d,q){var a,n;a=0;for(n=d.length;a<n;++a)if(d[a]===q)return a;return-1};Ea=function(d,q){var a=Da(d,q);-1!==a&&Aa(d,a)};V=function(d){return d/(180/ra)};Ga=function(d){return 180/ra*d};Ha=function(d){d%=360;0>d&&(d+=360);return d};Ia=function(d){d%=2*ra;0>d&&(d+=2*ra);return d};Ja=function(d){return Ha(Ga(d))};Ka=function(d){return Ia(V(d))};La=function(d,q,a,n){return Math.atan2(n-q,a-d)};Ma=function(d,q){if(d===q)return 0;var a=Math.sin(d),n=Math.cos(d),u=Math.sin(q),k=Math.cos(q),a=a*u+ n*k;return 1<=a?0:-1>=a?ra:Math.acos(a)};Na=function(d,q,a){var n=Math.sin(d),u=Math.cos(d),k=Math.sin(q),f=Math.cos(q);return Math.acos(n*k+u*f)>a?0<u*k-n*f?Ia(d+a):Ia(d-a):Ia(q)};Oa=function(d,q){var a=Math.sin(d),n=Math.cos(d),u=Math.sin(q),k=Math.cos(q);return 0>=n*u-a*k};Pa=function(d,q,a,n,u,k){if(0===a)return k?d:q;var f=Math.sin(a);a=Math.cos(a);d-=n;q-=u;var l=d*f;d=d*a-q*f;q=q*a+l;return k?d+n:q+u};Qa=function(d,q,a,n){d=a-d;q=n-q;return Math.sqrt(d*d+q*q)};Ra=function(d,q){return!d!==!q}; Sa=function(d,q,a){return d+(q-d)*a};Ta=function(d){for(var q in d)if(d.hasOwnProperty(q))return!0;return!1};Ua=function(d){for(var q in d)d.hasOwnProperty(q)&&delete d[q]};var D=+new Date;Za=function(){if("undefined"!==typeof window.performance){var d=window.performance;if("undefined"!==typeof d.now)return d.now();if("undefined"!==typeof d.webkitNow)return d.webkitNow();if("undefined"!==typeof d.mozNow)return d.mozNow();if("undefined"!==typeof d.msNow)return d.msNow()}return Date.now()-D};var k= !1,d=k=!1,q=!1;"undefined"!==typeof window&&(k=/chrome/i.test(navigator.userAgent)||/chromium/i.test(navigator.userAgent),k=!k&&/safari/i.test(navigator.userAgent),d=/(iphone|ipod|ipad)/i.test(navigator.userAgent),q=window.c2ejecta);var n=!k&&!q&&!d&&"undefined"!==typeof Set&&"undefined"!==typeof Set.prototype.forEach;p.prototype.contains=function(d){return this.Md()?!1:n?this.Xc.has(d):this.items&&this.items.hasOwnProperty(d)};p.prototype.add=function(d){if(n)this.Xc.has(d)||(this.Xc.add(d),this.je= !1);else{var q=d.toString(),a=this.items;a?a.hasOwnProperty(q)||(a[q]=d,this.Wf++,this.je=!1):(this.items={},this.items[q]=d,this.Wf=1,this.je=!1)}};p.prototype.remove=function(d){if(!this.Md())if(n)this.Xc.has(d)&&(this.Xc["delete"](d),this.je=!1);else if(this.items){d=d.toString();var q=this.items;q.hasOwnProperty(d)&&(delete q[d],this.Wf--,this.je=!1)}};p.prototype.clear=function(){this.Md()||(n?this.Xc.clear():(this.items=null,this.Wf=0),this.wg.length=0,this.je=!0)};p.prototype.Md=function(){return 0=== this.count()};p.prototype.count=function(){return n?this.Xc.size:this.Wf};var u=null,F=0;p.prototype.Bv=function(){if(!this.je){if(n)this.wg.length=this.Xc.size,u=this.wg,F=0,this.Xc.forEach(v),u=null,F=0;else{var d=this.wg;d.length=this.Wf;var q,a=0,k=this.items;if(k)for(q in k)k.hasOwnProperty(q)&&(d[a++]=k[q])}this.je=!0}};p.prototype.He=function(){this.Bv();return this.wg};ca=p;new ca;$a=function(d,q){n?ab(d,q.Xc):bb(d,q.He())};ab=function(d,q){var a,n,k,u;n=a=0;for(k=d.length;a<k;++a)u=d[a], q.has(u)||(d[n++]=u);d.length=n};bb=function(d,q){var a,n,k,u;n=a=0;for(k=d.length;a<k;++a)u=d[a],-1===Da(q,u)&&(d[n++]=u);d.length=n};c.prototype.add=function(d){this.y=d-this.zk;this.Wj=this.X+this.y;this.zk=this.Wj-this.X-this.y;this.X=this.Wj};c.prototype.reset=function(){this.X=this.Wj=this.y=this.zk=0};cb=c;db=function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};b.prototype.Th=function(d){this.yp=d;this.Vc=d.length/2;this.$a.length=d.length;this.qi=this.ri=-1;this.tn=0};b.prototype.Sf= function(){return!this.yp.length};b.prototype.xa=function(){for(var d=this.$a,q=d[0],a=q,n=d[1],k=n,u,f,l=1,c=this.Vc;l<c;++l)f=2*l,u=d[f],f=d[f+1],u<q&&(q=u),u>a&&(a=u),f<n&&(n=f),f>k&&(k=f);this.mi=q;this.ni=a;this.oi=n;this.li=k};b.prototype.Sh=function(d,q,a){this.$a.length=8;this.Vc=4;var n=this.$a;n[0]=d.left-q;n[1]=d.top-a;n[2]=d.right-q;n[3]=d.top-a;n[4]=d.right-q;n[5]=d.bottom-a;n[6]=d.left-q;n[7]=d.bottom-a;this.ri=d.right-d.left;this.qi=d.bottom-d.top;this.xa()};b.prototype.pg=function(d, q,a,n,u){this.$a.length=8;this.Vc=4;var k=this.$a;k[0]=d.va-q;k[1]=d.wa-a;k[2]=d.cb-q;k[3]=d.eb-a;k[4]=d.Ra-q;k[5]=d.Sa-a;k[6]=d.Pa-q;k[7]=d.Qa-a;this.ri=n;this.qi=u;this.xa()};b.prototype.Lp=function(d){this.Vc=d.Vc;Ba(this.$a,d.$a);this.mi=d.mi;this.oi-d.oi;this.ni=d.ni;this.li=d.li};b.prototype.If=function(d,q,a){if(this.ri!==d||this.qi!==q||this.tn!==a){this.ri=d;this.qi=q;this.tn=a;var n,k,u,f,l,c=0,b=1,F=this.yp,g=this.$a;0!==a&&(c=Math.sin(a),b=Math.cos(a));a=0;for(u=this.Vc;a<u;a++)n=2*a, k=n+1,f=F[n]*d,l=F[k]*q,g[n]=f*b-l*c,g[k]=l*b+f*c;this.xa()}};b.prototype.yb=function(d,q){var a=this.$a;if(d===a[0]&&q===a[1])return!0;var n,k,u,f=this.Vc,l=this.mi-110,c=this.oi-101,b=this.ni+131,F=this.li+120,g,h,C=0,s=0;for(n=0;n<f;n++)k=2*n,u=(n+1)%f*2,g=a[k],k=a[k+1],h=a[u],u=a[u+1],ta(l,c,d,q,g,k,h,u)&&C++,ta(b,F,d,q,g,k,h,u)&&s++;return 1===C%2||1===s%2};b.prototype.ah=function(d,q,a){var n=d.$a,k=this.$a;if(this.yb(n[0]+q,n[1]+a)||d.yb(k[0]-q,k[1]-a))return!0;var u,f,l,c,b,F,g,h,C,s,w,S; u=0;for(c=this.Vc;u<c;u++)for(f=2*u,l=(u+1)%c*2,h=k[f],f=k[f+1],C=k[l],s=k[l+1],l=0,g=d.Vc;l<g;l++)if(b=2*l,F=(l+1)%g*2,w=n[b]+q,b=n[b+1]+a,S=n[F]+q,F=n[F+1]+a,ta(h,f,C,s,w,b,S,F))return!0;return!1};eb=b;h.prototype.re=function(d,q,a){var n;n=this.cells[d];return n?(n=n[q])?n:a?(n=g(this,d,q),this.cells[d][q]=n):null:a?(n=g(this,d,q),this.cells[d]={},this.cells[d][q]=n):null};h.prototype.gc=function(d){return T(d/this.Ck)};h.prototype.hc=function(d){return T(d/this.Bk)};h.prototype.update=function(d, q,a){var n,k,u,f,l;if(q)for(n=q.left,k=q.right;n<=k;++n)for(u=q.top,f=q.bottom;u<=f;++u)if(!a||!a.yb(n,u))if(l=this.re(n,u,!1))l.remove(d),l.Md()&&(l.kb.clear(),1E3>S.length&&S.push(l),this.cells[n][u]=null);if(a)for(n=a.left,k=a.right;n<=k;++n)for(u=a.top,f=a.bottom;u<=f;++u)q&&q.yb(n,u)||this.re(n,u,!0).ll(d)};h.prototype.Jj=function(d,q){var a,n,k,u,f,l;a=this.gc(d.left);k=this.hc(d.top);n=this.gc(d.right);for(f=this.hc(d.bottom);a<=n;++a)for(u=k;u<=f;++u)(l=this.re(a,u,!1))&&l.dump(q)};fb=h;t.prototype.re= function(d,q,a){var n;n=this.cells[d];return n?(n=n[q])?n:a?(n=l(this,d,q),this.cells[d][q]=n):null:a?(n=l(this,d,q),this.cells[d]={},this.cells[d][q]=n):null};t.prototype.gc=function(d){return T(d/this.Ck)};t.prototype.hc=function(d){return T(d/this.Bk)};t.prototype.update=function(d,q,a){var n,u,k,f,l;if(q)for(n=q.left,u=q.right;n<=u;++n)for(k=q.top,f=q.bottom;k<=f;++k)if(!a||!a.yb(n,k))if(l=this.re(n,k,!1))l.remove(d),l.Md()&&(l.reset(),1E3>C.length&&C.push(l),this.cells[n][k]=null);if(a)for(n= a.left,u=a.right;n<=u;++n)for(k=a.top,f=a.bottom;k<=f;++k)q&&q.yb(n,k)||this.re(n,k,!0).ll(d)};t.prototype.Jj=function(d,q,a,n,k){var u,f;d=this.gc(d);q=this.hc(q);a=this.gc(a);for(u=this.hc(n);d<=a;++d)for(n=q;n<=u;++n)(f=this.re(d,n,!1))&&f.dump(k)};t.prototype.Du=function(d){var q,a,n,k,u;q=d.left;n=d.top;a=d.right;for(k=d.bottom;q<=a;++q)for(d=n;d<=k;++d)if(u=this.re(q,d,!1))u.Vf=!1};gb=t;var S=[];a.prototype.Md=function(){return this.kb.Md()};a.prototype.ll=function(d){this.kb.add(d)};a.prototype.remove= function(d){this.kb.remove(d)};a.prototype.dump=function(d){Ca(d,this.kb.He())};ba=a;var C=[];w.prototype.Md=function(){if(!this.kb.length)return!0;if(this.kb.length>this.od.count())return!1;this.Rk();return!0};w.prototype.ll=function(d){this.od.contains(d)?(this.od.remove(d),this.od.Md()&&(this.Ag=!1)):this.kb.length?(this.kb[this.kb.length-1].jd()>d.jd()&&(this.Vf=!1),this.kb.push(d)):(this.kb.push(d),this.Vf=!0)};w.prototype.remove=function(d){this.od.add(d);this.Ag=!0;30<=this.od.count()&&this.Rk()}; w.prototype.Rk=function(){this.Ag&&(this.od.count()===this.kb.length?this.reset():($a(this.kb,this.od),this.od.clear(),this.Ag=!1))};w.prototype.Us=function(){this.Vf||(this.kb.sort(f),this.Vf=!0)};w.prototype.reset=function(){this.kb.length=0;this.Vf=!0;this.od.clear();this.Ag=!1};w.prototype.dump=function(d){this.Rk();this.Us();this.kb.length&&d.push(this.kb)};da=w;var oa="lighter xor copy destination-over source-in destination-in source-out destination-out source-atop destination-atop".split(" "); hb=function(d){return 0>=d||11<=d?"source-over":oa[d-1]};ib=function(d,q,a){if(a)switch(d.Ab=a.ONE,d.zb=a.ONE_MINUS_SRC_ALPHA,q){case 1:d.Ab=a.ONE;d.zb=a.ONE;break;case 3:d.Ab=a.ONE;d.zb=a.ZERO;break;case 4:d.Ab=a.ONE_MINUS_DST_ALPHA;d.zb=a.ONE;break;case 5:d.Ab=a.DST_ALPHA;d.zb=a.ZERO;break;case 6:d.Ab=a.ZERO;d.zb=a.SRC_ALPHA;break;case 7:d.Ab=a.ONE_MINUS_DST_ALPHA;d.zb=a.ZERO;break;case 8:d.Ab=a.ZERO;d.zb=a.ONE_MINUS_SRC_ALPHA;break;case 9:d.Ab=a.DST_ALPHA;d.zb=a.ONE_MINUS_SRC_ALPHA;break;case 10:d.Ab= a.ONE_MINUS_DST_ALPHA,d.zb=a.SRC_ALPHA}};jb=function(d){return Math.round(1E6*d)/1E6};kb=function(d,q){return"string"!==typeof d||"string"!==typeof q||d.length!==q.length?!1:d===q?!0:d.toLowerCase()===q.toLowerCase()};lb=function(d){d=d.target;return!d||d===document||d===window||document&&document.body&&d===document.body||kb(d.tagName,"canvas")?!0:!1}})();var dc="undefined"!==typeof Float32Array?Float32Array:Array;function ec(e){var r=new dc(3);e&&(r[0]=e[0],r[1]=e[1],r[2]=e[2]);return r} function fc(e){var r=new dc(16);e&&(r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15]);return r}function gc(e,r){r[0]=e[0];r[1]=e[1];r[2]=e[2];r[3]=e[3];r[4]=e[4];r[5]=e[5];r[6]=e[6];r[7]=e[7];r[8]=e[8];r[9]=e[9];r[10]=e[10];r[11]=e[11];r[12]=e[12];r[13]=e[13];r[14]=e[14];r[15]=e[15]} function hc(e,r){var m=r[0],p=r[1];r=r[2];e[0]*=m;e[1]*=m;e[2]*=m;e[3]*=m;e[4]*=p;e[5]*=p;e[6]*=p;e[7]*=p;e[8]*=r;e[9]*=r;e[10]*=r;e[11]*=r} function ic(e,r,m,p){p||(p=fc());var v,c,b,h,t,g,a,l,w=e[0],f=e[1];e=e[2];c=m[0];b=m[1];v=m[2];m=r[1];g=r[2];w===r[0]&&f===m&&e===g?(e=p,e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1):(m=w-r[0],g=f-r[1],a=e-r[2],l=1/Math.sqrt(m*m+g*g+a*a),m*=l,g*=l,a*=l,r=b*a-v*g,v=v*m-c*a,c=c*g-b*m,(l=Math.sqrt(r*r+v*v+c*c))?(l=1/l,r*=l,v*=l,c*=l):c=v=r=0,b=g*c-a*v,h=a*r-m*c,t=m*v-g*r,(l=Math.sqrt(b*b+h*h+t*t))?(l=1/l,b*=l,h*=l,t*=l):t=h=b=0, p[0]=r,p[1]=b,p[2]=m,p[3]=0,p[4]=v,p[5]=h,p[6]=g,p[7]=0,p[8]=c,p[9]=t,p[10]=a,p[11]=0,p[12]=-(r*w+v*f+c*e),p[13]=-(b*w+h*f+t*e),p[14]=-(m*w+g*f+a*e),p[15]=1)} (function(){function e(c){this.$e=/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent);this.height=this.width=0;this.un=ec([0,0,100]);this.Do=ec([0,0,0]);this.gq=ec([0,1,0]);this.Km=ec([1,1,1]);this.Gn=!0;this.Hl=fc();this.Bc=fc();this.vo=fc();this.Hk=fc();this.n=c;this.fo()}function r(c,b,h){this.n=c;this.Uh=b;this.name=h;this.Ac=c.getAttribLocation(b,"aPos");this.we=c.getAttribLocation(b,"aTex");this.Bo=c.getUniformLocation(b,"matP");this.pj=c.getUniformLocation(b,"matMV");this.bg= c.getUniformLocation(b,"opacity");this.Co=c.getUniformLocation(b,"samplerFront");this.wh=c.getUniformLocation(b,"samplerBack");this.pf=c.getUniformLocation(b,"destStart");this.of=c.getUniformLocation(b,"destEnd");this.Dl=c.getUniformLocation(b,"seconds");this.Cl=c.getUniformLocation(b,"pixelWidth");this.Bl=c.getUniformLocation(b,"pixelHeight");this.vh=c.getUniformLocation(b,"layerScale");this.uh=c.getUniformLocation(b,"layerAngle");this.yh=c.getUniformLocation(b,"viewOrigin");this.xh=c.getUniformLocation(b, "scrollPos");this.gu=!!(this.Cl||this.Bl||this.Dl||this.wh||this.pf||this.of||this.vh||this.uh||this.yh||this.xh);this.Lo=this.Mo=-999;this.sj=1;this.Ho=this.Go=0;this.Jo=this.Fo=this.Eo=1;this.Oo=this.No=this.Qo=this.Po=this.Io=0;this.wl=[];this.Ko=fc();this.bg&&c.uniform1f(this.bg,1);this.Co&&c.uniform1i(this.Co,0);this.wh&&c.uniform1i(this.wh,1);this.pf&&c.uniform2f(this.pf,0,0);this.of&&c.uniform2f(this.of,1,1);this.vh&&c.uniform1f(this.vh,1);this.uh&&c.uniform1f(this.uh,0);this.yh&&c.uniform2f(this.yh, 0,0);this.xh&&c.uniform2f(this.xh,0,0);this.Ve=!1}function m(c,b){this.type=c;this.B=b;this.n=b.n;this.kd=this.Gc=this.kp=0;this.na=this.Zc=null;this.Np=[]}e.prototype.fo=function(){var c=this.n,b;this.wo=1;this.jf=this.hf=null;this.Fi=1;c.clearColor(0,0,0,0);c.clear(c.COLOR_BUFFER_BIT);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.disable(c.CULL_FACE);c.disable(c.DEPTH_TEST);this.xo=c.ONE;this.uo=c.ONE_MINUS_SRC_ALPHA;this.Xl=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,this.Xl);this.ei= Array(4);this.Yh=Array(4);for(b=0;4>b;b++)this.ei[b]=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,this.ei[b]),this.Yh[b]=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,this.Yh[b]);this.Cd=0;this.ju=c.createBuffer();c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,this.ju);this.Gm=new Float32Array(16E3);this.um=new Float32Array(16E3);this.Qu=new Float32Array(32E3);for(var h=new Uint16Array(12E3),t=b=0;12E3>b;)h[b++]=t,h[b++]=t+1,h[b++]=t+2,h[b++]=t,h[b++]=t+2,h[b++]=t+3,t+=4;c.bufferData(c.ELEMENT_ARRAY_BUFFER,h, c.STATIC_DRAW);this.Yl=this.xd=0;this.ab=[];b=this.Gk({src:"varying mediump vec2 vTex;\nuniform lowp float opacity;\nuniform lowp sampler2D samplerFront;\nvoid main(void) {\n\tgl_FragColor = texture2D(samplerFront, vTex);\n\tgl_FragColor *= opacity;\n}"},"attribute highp vec2 aPos;\nattribute mediump vec2 aTex;\nvarying mediump vec2 vTex;\nuniform highp mat4 matP;\nuniform highp mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tvTex = aTex;\n}","<default>"); this.ab.push(b);b=this.Gk({src:"uniform mediump sampler2D samplerFront;\nvarying lowp float opacity;\nvoid main(void) {\n\tgl_FragColor = texture2D(samplerFront, gl_PointCoord);\n\tgl_FragColor *= opacity;\n}"},"attribute vec4 aPos;\nvarying float opacity;\nuniform mat4 matP;\nuniform mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tgl_PointSize = aPos.z;\n\topacity = aPos.w;\n}","<point>");this.ab.push(b);for(var g in jc)jc.hasOwnProperty(g)&&this.ab.push(this.Gk(jc[g], "attribute highp vec2 aPos;\nattribute mediump vec2 aTex;\nvarying mediump vec2 vTex;\nuniform highp mat4 matP;\nuniform highp mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tvTex = aTex;\n}",g));c.activeTexture(c.TEXTURE0);c.bindTexture(c.TEXTURE_2D,null);this.ie=[];this.Ad=0;this.Vb=!1;this.Cn=this.oh=-1;this.Jg=null;this.yt=c.createFramebuffer();this.Dp=null;this.Fe=ec([0,0,0]);this.Ro=c.getParameter(c.ALIASED_POINT_SIZE_RANGE)[1];2048<this.Ro&& (this.Ro=2048);this.ud(0)};r.prototype.Cm=function(c){var b=this.Ko;if(b[0]!==c[0]||b[1]!==c[1]||b[2]!==c[2]||b[3]!==c[3]||b[4]!==c[4]||b[5]!==c[5]||b[6]!==c[6]||b[7]!==c[7]||b[8]!==c[8]||b[9]!==c[9]||b[10]!==c[10]||b[11]!==c[11]||b[12]!==c[12]||b[13]!==c[13]||b[14]!==c[14]||b[15]!==c[15])gc(c,this.Ko),this.n.uniformMatrix4fv(this.pj,!1,c)};e.prototype.Gk=function(c,b,h){var t=this.n,g=t.createShader(t.FRAGMENT_SHADER);t.shaderSource(g,c.src);t.compileShader(g);if(!t.getShaderParameter(g,t.COMPILE_STATUS))return t.deleteShader(g), null;var a=t.createShader(t.VERTEX_SHADER);t.shaderSource(a,b);t.compileShader(a);if(!t.getShaderParameter(a,t.COMPILE_STATUS))return t.deleteShader(g),t.deleteShader(a),null;b=t.createProgram();t.attachShader(b,g);t.attachShader(b,a);t.linkProgram(b);if(!t.getProgramParameter(b,t.LINK_STATUS))return t.deleteShader(g),t.deleteShader(a),t.deleteProgram(b),null;t.useProgram(b);t.deleteShader(g);t.deleteShader(a);h=new r(t,b,h);h.Ok=c.Ok||0;h.Pk=c.Pk||0;h.Bn=!!c.Bn;h.mn=!!c.mn;h.R=c.R||[];c=0;for(g= h.R.length;c<g;c++)h.R[c][1]=t.getUniformLocation(b,h.R[c][0]),h.wl.push(0),t.uniform1f(h.R[c][1],0);return h};e.prototype.bl=function(c){var b,h;b=0;for(h=this.ab.length;b<h;b++)if(this.ab[b].name===c)return b;return-1};e.prototype.xp=function(c,b,h){var t=this.Bc,g=this.Hl,a=[0,0,0,0,0,0,0,0];a[0]=t[0]*c+t[4]*b+t[12];a[1]=t[1]*c+t[5]*b+t[13];a[2]=t[2]*c+t[6]*b+t[14];a[3]=t[3]*c+t[7]*b+t[15];a[4]=g[0]*a[0]+g[4]*a[1]+g[8]*a[2]+g[12]*a[3];a[5]=g[1]*a[0]+g[5]*a[1]+g[9]*a[2]+g[13]*a[3];a[6]=g[2]*a[0]+ g[6]*a[1]+g[10]*a[2]+g[14]*a[3];a[7]=-a[2];0!==a[7]&&(a[7]=1/a[7],a[4]*=a[7],a[5]*=a[7],a[6]*=a[7],h[0]=(.5*a[4]+.5)*this.width,h[1]=(.5*a[5]+.5)*this.height)};e.prototype.Be=function(c,b,h){if(this.width!==c||this.height!==b||h){this.Pe();this.width=c;this.height=b;this.n.viewport(0,0,c,b);b=c/b;var t=this.Hl,g;g=1*Math.tan(45*Math.PI/360);b*=g;c=-b;h=-g;t||(t=fc());var a=b-c,l=g-h;t[0]=2/a;t[1]=0;t[2]=0;t[3]=0;t[4]=0;t[5]=2/l;t[6]=0;t[7]=0;t[8]=(b+c)/a;t[9]=(g+h)/l;t[10]=-1001/999;t[11]=-1;t[12]= 0;t[13]=0;t[14]=-2E3/999;t[15]=0;ic(this.un,this.Do,this.gq,this.Bc);c=[0,0];b=[0,0];this.xp(0,0,c);this.xp(1,1,b);this.Km[0]=1/(b[0]-c[0]);this.Km[1]=-1/(b[1]-c[1]);c=0;for(b=this.ab.length;c<b;c++)h=this.ab[c],h.Ve=!1,h.Bo&&(this.n.useProgram(h.Uh),this.n.uniformMatrix4fv(h.Bo,!1,this.Hl));this.n.useProgram(this.ab[this.oh].Uh);this.n.bindTexture(this.n.TEXTURE_2D,null);this.n.activeTexture(this.n.TEXTURE1);this.n.bindTexture(this.n.TEXTURE_2D,null);this.n.activeTexture(this.n.TEXTURE0);this.jf= this.hf=null}};e.prototype.ze=function(){ic(this.un,this.Do,this.gq,this.Bc);hc(this.Bc,this.Km)};e.prototype.translate=function(c,b){if(0!==c||0!==b){this.Fe[0]=c;this.Fe[1]=b;this.Fe[2]=0;var h=this.Bc,t=this.Fe,g=t[0],a=t[1],t=t[2];h[12]=h[0]*g+h[4]*a+h[8]*t+h[12];h[13]=h[1]*g+h[5]*a+h[9]*t+h[13];h[14]=h[2]*g+h[6]*a+h[10]*t+h[14];h[15]=h[3]*g+h[7]*a+h[11]*t+h[15]}};e.prototype.scale=function(c,b){if(1!==c||1!==b)this.Fe[0]=c,this.Fe[1]=b,this.Fe[2]=1,hc(this.Bc,this.Fe)};e.prototype.Ep=function(c){if(0!== c){var b=this.Bc,h,t=Math.sin(c);c=Math.cos(c);var g=b[0],a=b[1],l=b[2],w=b[3],f=b[4],s=b[5],y=b[6],m=b[7];h?b!==h&&(h[8]=b[8],h[9]=b[9],h[10]=b[10],h[11]=b[11],h[12]=b[12],h[13]=b[13],h[14]=b[14],h[15]=b[15]):h=b;h[0]=g*c+f*t;h[1]=a*c+s*t;h[2]=l*c+y*t;h[3]=w*c+m*t;h[4]=g*-t+f*c;h[5]=a*-t+s*c;h[6]=l*-t+y*c;h[7]=w*-t+m*c}};e.prototype.Ge=function(){for(var c=!1,b=0;16>b;b++)if(this.vo[b]!==this.Bc[b]){c=!0;break}c&&(c=this.Wc(),c.type=5,c.na?gc(this.Bc,c.na):c.na=fc(this.Bc),gc(this.Bc,this.vo),this.Vb= !1)};m.prototype.Js=function(){this.n.bindTexture(this.n.TEXTURE_2D,this.Zc)};m.prototype.Ks=function(){var c=this.n;c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_2D,this.Zc);c.activeTexture(c.TEXTURE0)};m.prototype.Gs=function(){var c=this.kp,b=this.B;b.Fi=c;b=b.Jg;b.bg&&b.sj!==c&&(b.sj=c,this.n.uniform1f(b.bg,c))};m.prototype.Ds=function(){this.n.drawElements(this.n.TRIANGLES,this.kd,this.n.UNSIGNED_SHORT,2*this.Gc)};m.prototype.Fs=function(){this.n.blendFunc(this.Gc,this.kd)};m.prototype.Ms= function(){var c,b,h,t=this.B.ab,g=this.B.Cn;c=0;for(b=t.length;c<b;c++)h=t[c],c===g&&h.pj?(h.Cm(this.na),h.Ve=!0):h.Ve=!1;gc(this.na,this.B.Hk)};m.prototype.Es=function(){var c=this.n,b=this.B;this.Zc?(b.jf===this.Zc&&(c.activeTexture(c.TEXTURE1),c.bindTexture(c.TEXTURE_2D,null),b.jf=null,c.activeTexture(c.TEXTURE0)),c.bindFramebuffer(c.FRAMEBUFFER,b.yt),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,this.Zc,0)):(c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D, null,0),c.bindFramebuffer(c.FRAMEBUFFER,null))};m.prototype.Bs=function(){var c=this.n;0===this.Gc?(c.clearColor(this.na[0],this.na[1],this.na[2],this.na[3]),c.clear(c.COLOR_BUFFER_BIT)):(c.enable(c.SCISSOR_TEST),c.scissor(this.na[0],this.na[1],this.na[2],this.na[3]),c.clearColor(0,0,0,0),c.clear(this.n.COLOR_BUFFER_BIT),c.disable(c.SCISSOR_TEST))};m.prototype.Cs=function(){var c=this.n,b=this.B,h=b.ab[1];c.useProgram(h.Uh);!h.Ve&&h.pj&&(h.Cm(b.Hk),h.Ve=!0);c.enableVertexAttribArray(h.Ac);c.bindBuffer(c.ARRAY_BUFFER, b.Xl);c.vertexAttribPointer(h.Ac,4,c.FLOAT,!1,0,0);c.drawArrays(c.POINTS,this.Gc/4,this.kd);h=b.Jg;c.useProgram(h.Uh);0<=h.Ac&&(c.enableVertexAttribArray(h.Ac),c.bindBuffer(c.ARRAY_BUFFER,b.ei[b.Cd]),c.vertexAttribPointer(h.Ac,2,c.FLOAT,!1,0,0));0<=h.we&&(c.enableVertexAttribArray(h.we),c.bindBuffer(c.ARRAY_BUFFER,b.Yh[b.Cd]),c.vertexAttribPointer(h.we,2,c.FLOAT,!1,0,0))};m.prototype.Hs=function(){var c=this.n,b=this.B,h=b.ab[this.Gc];b.Cn=this.Gc;b.Jg=h;c.useProgram(h.Uh);!h.Ve&&h.pj&&(h.Cm(b.Hk), h.Ve=!0);h.bg&&h.sj!==b.Fi&&(h.sj=b.Fi,c.uniform1f(h.bg,b.Fi));0<=h.Ac&&(c.enableVertexAttribArray(h.Ac),c.bindBuffer(c.ARRAY_BUFFER,b.ei[b.Cd]),c.vertexAttribPointer(h.Ac,2,c.FLOAT,!1,0,0));0<=h.we&&(c.enableVertexAttribArray(h.we),c.bindBuffer(c.ARRAY_BUFFER,b.Yh[b.Cd]),c.vertexAttribPointer(h.we,2,c.FLOAT,!1,0,0))};m.prototype.Is=function(){var c,b,h=this.B.Jg,t=this.n;c=this.na;h.wh&&this.B.jf!==this.Zc&&(t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,this.Zc),this.B.jf=this.Zc,t.activeTexture(t.TEXTURE0)); var g=c[0];h.Cl&&g!==h.Mo&&(h.Mo=g,t.uniform1f(h.Cl,g));g=c[1];h.Bl&&g!==h.Lo&&(h.Lo=g,t.uniform1f(h.Bl,g));g=c[2];b=c[3];!h.pf||g===h.Go&&b===h.Ho||(h.Go=g,h.Ho=b,t.uniform2f(h.pf,g,b));g=c[4];b=c[5];!h.of||g===h.Eo&&b===h.Fo||(h.Eo=g,h.Fo=g,t.uniform2f(h.of,g,b));g=c[6];h.vh&&g!==h.Jo&&(h.Jo=g,t.uniform1f(h.vh,g));g=c[7];h.uh&&g!==h.Io&&(h.Io=g,t.uniform1f(h.uh,g));g=c[8];b=c[9];!h.yh||g===h.Po&&b===h.Qo||(h.Po=g,h.Qo=b,t.uniform2f(h.yh,g,b));g=c[10];b=c[11];!h.xh||g===h.No&&b===h.Oo||(h.No=g,h.Oo= b,t.uniform2f(h.xh,g,b));h.Dl&&t.uniform1f(h.Dl,Za()/1E3);if(h.R.length)for(c=0,b=h.R.length;c<b;c++)g=this.Np[c],g!==h.wl[c]&&(h.wl[c]=g,t.uniform1f(h.R[c][1],g))};e.prototype.Wc=function(){this.Ad===this.ie.length&&this.ie.push(new m(0,this));return this.ie[this.Ad++]};e.prototype.Pe=function(){if(0!==this.Ad&&!this.n.isContextLost()){var c=this.n;0<this.Yl&&(c.bindBuffer(c.ARRAY_BUFFER,this.Xl),c.bufferData(c.ARRAY_BUFFER,this.Qu.subarray(0,this.Yl),c.STREAM_DRAW),b&&0<=b.Ac&&"<point>"===b.name&& c.vertexAttribPointer(b.Ac,4,c.FLOAT,!1,0,0));if(0<this.xd){var b=this.Jg;c.bindBuffer(c.ARRAY_BUFFER,this.ei[this.Cd]);c.bufferData(c.ARRAY_BUFFER,this.Gm.subarray(0,this.xd),c.STREAM_DRAW);b&&0<=b.Ac&&"<point>"!==b.name&&c.vertexAttribPointer(b.Ac,2,c.FLOAT,!1,0,0);c.bindBuffer(c.ARRAY_BUFFER,this.Yh[this.Cd]);c.bufferData(c.ARRAY_BUFFER,this.um.subarray(0,this.xd),c.STREAM_DRAW);b&&0<=b.we&&"<point>"!==b.name&&c.vertexAttribPointer(b.we,2,c.FLOAT,!1,0,0)}for(var h,c=0,b=this.Ad;c<b;c++)switch(h= this.ie[c],h.type){case 1:h.Ds();break;case 2:h.Js();break;case 3:h.Gs();break;case 4:h.Fs();break;case 5:h.Ms();break;case 6:h.Es();break;case 7:h.Bs();break;case 8:h.Cs();break;case 9:h.Hs();break;case 10:h.Is();break;case 11:h.Ks()}this.Yl=this.xd=this.Ad=0;this.Vb=!1;this.Cd++;4<=this.Cd&&(this.Cd=0)}};e.prototype.wf=function(c){if(c!==this.wo){var b=this.Wc();b.type=3;this.wo=b.kp=c;this.Vb=!1}};e.prototype.ec=function(c){if(c!==this.hf){var b=this.Wc();b.type=2;this.hf=b.Zc=c;this.Vb=!1}};e.prototype.Ae= function(c,b){if(c!==this.xo||b!==this.uo){var h=this.Wc();h.type=4;h.Gc=c;h.kd=b;this.xo=c;this.uo=b;this.Vb=!1}};e.prototype.Ip=function(){this.Ae(this.n.ONE,this.n.ONE_MINUS_SRC_ALPHA)};e.prototype.Ij=function(c,b,h,t,g,a,l,w){15992<=this.xd&&this.Pe();var f=this.xd,s=this.Gm,y=this.um;if(this.Vb)this.ie[this.Ad-1].kd+=6;else{var m=this.Wc();m.type=1;m.Gc=f/4*3;m.kd=6;this.Vb=!0}s[f]=c;y[f++]=0;s[f]=b;y[f++]=0;s[f]=h;y[f++]=1;s[f]=t;y[f++]=0;s[f]=g;y[f++]=1;s[f]=a;y[f++]=1;s[f]=l;y[f++]=0;s[f]= w;y[f++]=1;this.xd=f};e.prototype.sd=function(c,b,h,t,g,a,l,w,f){15992<=this.xd&&this.Pe();var s=this.xd,m=this.Gm,e=this.um;if(this.Vb)this.ie[this.Ad-1].kd+=6;else{var k=this.Wc();k.type=1;k.Gc=s/4*3;k.kd=6;this.Vb=!0}var k=f.left,d=f.top,q=f.right;f=f.bottom;m[s]=c;e[s++]=k;m[s]=b;e[s++]=d;m[s]=h;e[s++]=q;m[s]=t;e[s++]=d;m[s]=g;e[s++]=q;m[s]=a;e[s++]=f;m[s]=l;e[s++]=k;m[s]=w;e[s++]=f;this.xd=s};e.prototype.ud=function(c){if(this.oh!==c){if(!this.ab[c]){if(0===this.oh)return;c=0}var b=this.Wc(); b.type=9;this.oh=b.Gc=c;this.Vb=!1}};e.prototype.Kh=function(c){c=this.ab[c];return!(!c.pf&&!c.of)};e.prototype.$l=function(c){c=this.ab[c];return!!(c.pf||c.of||c.Bn)};e.prototype.Xu=function(c){c=this.ab[c];return 0!==c.Ok||0!==c.Pk};e.prototype.Pt=function(c){return this.ab[c].Ok};e.prototype.Qt=function(c){return this.ab[c].Pk};e.prototype.Rt=function(c,b){return this.ab[c].R[b][2]};e.prototype.Gj=function(c){return this.ab[c].mn};e.prototype.ng=function(c,b,h,t,g,a,l,w,f,s,m,e,k,d){var q=this.ab[this.oh], n,u;if(q.gu||d.length){n=this.Wc();n.type=10;n.na?gc(this.Bc,n.na):n.na=fc();u=n.na;u[0]=b;u[1]=h;u[2]=t;u[3]=g;u[4]=a;u[5]=l;u[6]=w;u[7]=f;u[8]=s;u[9]=m;u[10]=e;u[11]=k;n.Zc=q.wh?c:null;if(d.length)for(h=n.Np,h.length=d.length,c=0,b=d.length;c<b;c++)h[c]=d[c];this.Vb=!1}};e.prototype.clear=function(c,b,h,t){var g=this.Wc();g.type=7;g.Gc=0;g.na||(g.na=fc());g.na[0]=c;g.na[1]=b;g.na[2]=h;g.na[3]=t;this.Vb=!1};e.prototype.clearRect=function(c,b,h,t){if(!(0>h||0>t)){var g=this.Wc();g.type=7;g.Gc=1;g.na|| (g.na=fc());g.na[0]=c;g.na[1]=b;g.na[2]=h;g.na[3]=t;this.Vb=!1}};e.prototype.Wu=function(){this.Pe();this.n.flush()};var p=[],v={};e.prototype.us=function(){p.length=0;v={}};e.prototype.$f=function(c,b,h,t){b=!!b;h=!!h;var g=c.src+","+b+","+h+(b?",undefined":""),a=null;if("undefined"!==typeof c.src&&v.hasOwnProperty(g))return a=v[g],a.pi++,a;this.Pe();var l=this.n,w=ja(c.width)&&ja(c.height),a=l.createTexture();l.bindTexture(l.TEXTURE_2D,a);l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);var f= l.RGBA,s=l.RGBA,m=l.UNSIGNED_BYTE;if(t&&!this.$e)switch(t){case 1:s=f=l.RGB;break;case 2:m=l.UNSIGNED_SHORT_4_4_4_4;break;case 3:m=l.UNSIGNED_SHORT_5_5_5_1;break;case 4:s=f=l.RGB,m=l.UNSIGNED_SHORT_5_6_5}if(!w&&b){t=document.createElement("canvas");t.width=ka(c.width);t.height=ka(c.height);var e=t.getContext("2d");e.webkitImageSmoothingEnabled=h;e.mozImageSmoothingEnabled=h;e.msImageSmoothingEnabled=h;e.imageSmoothingEnabled=h;e.drawImage(c,0,0,c.width,c.height,0,0,t.width,t.height);l.texImage2D(l.TEXTURE_2D, 0,f,s,m,t)}else l.texImage2D(l.TEXTURE_2D,0,f,s,m,c);b?(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.REPEAT),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.REPEAT)):(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE));h?(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),w&&this.Gn?(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR_MIPMAP_LINEAR),l.generateMipmap(l.TEXTURE_2D)):l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MIN_FILTER,l.LINEAR)):(l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST));l.bindTexture(l.TEXTURE_2D,null);this.hf=null;a.Eg=c.width;a.Dg=c.height;a.pi=1;a.sn=g;p.push(a);return v[g]=a};e.prototype.me=function(c,b,h){var m;this.Pe();var g=this.n;this.$e&&(m=!1);var a=g.createTexture();g.bindTexture(g.TEXTURE_2D,a);g.texImage2D(g.TEXTURE_2D,0,g.RGBA,c,b,0,g.RGBA,m?g.UNSIGNED_SHORT_4_4_4_4:g.UNSIGNED_BYTE,null);g.texParameteri(g.TEXTURE_2D, g.TEXTURE_WRAP_S,g.CLAMP_TO_EDGE);g.texParameteri(g.TEXTURE_2D,g.TEXTURE_WRAP_T,g.CLAMP_TO_EDGE);g.texParameteri(g.TEXTURE_2D,g.TEXTURE_MAG_FILTER,h?g.LINEAR:g.NEAREST);g.texParameteri(g.TEXTURE_2D,g.TEXTURE_MIN_FILTER,h?g.LINEAR:g.NEAREST);g.bindTexture(g.TEXTURE_2D,null);this.hf=null;a.Eg=c;a.Dg=b;p.push(a);return a};e.prototype.deleteTexture=function(c){c&&("undefined"!==typeof c.pi&&1<c.pi?c.pi--:(this.Pe(),c===this.hf&&(this.n.bindTexture(this.n.TEXTURE_2D,null),this.hf=null),c===this.jf&&(this.n.activeTexture(this.n.TEXTURE1), this.n.bindTexture(this.n.TEXTURE_2D,null),this.n.activeTexture(this.n.TEXTURE0),this.jf=null),Ea(p,c),"undefined"!==typeof c.sn&&delete v[c.sn],this.n.deleteTexture(c)))};e.prototype.td=function(c){if(c!==this.Dp){var b=this.Wc();b.type=6;this.Dp=b.Zc=c;this.Vb=!1}};mb=e})(); (function(){function e(){return"undefined"!==typeof jQuery?jQuery(window).width():window.innerWidth}function r(){return"undefined"!==typeof jQuery?jQuery(window).height():window.innerHeight}function m(d){if(d&&(d.getContext||d.dc)&&!d.c2runtime){d.c2runtime=this;var q=this;this.oc=(this.eh=/crosswalk/i.test(navigator.userAgent)||/xwalk/i.test(navigator.userAgent)||!("undefined"===typeof window.c2isCrosswalk||!window.c2isCrosswalk))||"undefined"!==typeof window.device&&("undefined"!==typeof window.device.cordova|| "undefined"!==typeof window.device.phonegap)||"undefined"!==typeof window.c2iscordova&&window.c2iscordova;this.ib=!!d.dc;this.Rf="undefined"!==typeof window.AppMobi||this.ib;this.nc=!!window.c2cocoonjs;this.yc=!!window.c2ejecta;this.nc&&(CocoonJS.App.onSuspended.addEventListener(function(){q.setSuspended(!0)}),CocoonJS.App.onActivated.addEventListener(function(){q.setSuspended(!1)}));this.yc&&(document.addEventListener("pagehide",function(){q.setSuspended(!0)}),document.addEventListener("pageshow", function(){q.setSuspended(!1)}),document.addEventListener("resize",function(){q.setSize(window.innerWidth,window.innerHeight)}));this.Aa=this.ib||this.nc||this.yc;this.$e=/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent)||/iemobile/i.test(navigator.userAgent)||/edge\//i.test(navigator.userAgent);this.qo=/tizen/i.test(navigator.userAgent);this.bh=/android/i.test(navigator.userAgent)&&!this.qo&&!this.$e;this.ul=(/iphone/i.test(navigator.userAgent)||/ipod/i.test(navigator.userAgent))&& !this.$e;this.to=/ipad/i.test(navigator.userAgent);this.mh=this.ul||this.to||this.yc;this.xu=this.ul&&/os\s6/i.test(navigator.userAgent);this.dh=(/chrome/i.test(navigator.userAgent)||/chromium/i.test(navigator.userAgent))&&!this.$e;this.ol=/amazonwebappplatform/i.test(navigator.userAgent);this.qu=/firefox/i.test(navigator.userAgent);this.oo=/safari/i.test(navigator.userAgent)&&!this.dh&&!this.$e;this.tu=/windows/i.test(navigator.userAgent);this.ue="undefined"!==typeof window.c2nodewebkit||"undefined"!== typeof window.c2nwjs||/nodewebkit/i.test(navigator.userAgent)||/nwjs/i.test(navigator.userAgent);this.ro=!("undefined"===typeof window.c2isWindows8||!window.c2isWindows8);this.vu=!("undefined"===typeof window.c2isWindows8Capable||!window.c2isWindows8Capable);this.ff=!("undefined"===typeof window.c2isWindowsPhone8||!window.c2isWindowsPhone8);this.ih=!("undefined"===typeof window.c2isWindowsPhone81||!window.c2isWindowsPhone81);this.sl=this.ro||this.vu||this.ih;this.pu=!("undefined"===typeof window.c2isBlackberry10|| !window.c2isBlackberry10);this.bj=this.bh&&!this.dh&&!this.eh&&!this.qu&&!this.ol&&!this.Aa;this.devicePixelRatio=1;this.bf=this.oc||this.eh||this.Rf||this.nc||this.bh||this.mh||this.ff||this.ih||this.pu||this.qo||this.yc;this.bf||(this.bf=/(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent));"undefined"===typeof cr_is_preview||this.ue||"?nw"!==window.location.search&&!/nodewebkit/i.test(navigator.userAgent)&&!/nwjs/i.test(navigator.userAgent)|| (this.ue=!0);this.canvas=d;this.vn=document.getElementById("c2canvasdiv");this.qa=this.B=this.n=null;this.Uk="";this.Qi=!1;this.dp=this.ep=0;this.canvas.oncontextmenu=function(d){d.preventDefault&&d.preventDefault();return!1};this.canvas.onselectstart=function(d){d.preventDefault&&d.preventDefault();return!1};this.ib&&(window.c2runtime=this);this.ue&&(window.ondragover=function(d){d.preventDefault();return!1},window.ondrop=function(d){d.preventDefault();return!1},require("nw.gui").App.clearCache()); this.bj&&"undefined"!==typeof jQuery&&jQuery("canvas").parents("*").css("overflow","visible");this.width=d.width;this.height=d.height;this.W=this.width;this.V=this.height;this.Di=this.width;this.Ci=this.height;this.qh=window.innerWidth;this.ph=window.innerHeight;this.At=!1;this.ga=!0;this.gh=!1;Date.now||(Date.now=function(){return+new Date});this.plugins=[];this.types={};this.q=[];this.Ha=[];this.Zf={};this.Tc=[];this.Nk={};this.Hd=[];this.Bf=[];this.ek=[];this.js=[];this.ks=[];this.Ne={};this.pl= this.se=!1;this.Rc=0;this.rl=!1;this.Oc=[];this.Nd=this.Hb=this.lj=this.km="";this.Wh=this.Qp=!1;this.Fk=this.zh=this.pe=this.oe=0;this.Af=1;this.Wb=new cb;this.yd=new cb;this.uj=this.Ri=this.Lg=this.zf=this.lf=this.Tk=this.ij=0;this.Bd=null;this.Ji=[];this.Mk=[];this.Mi=-1;this.El=[[]];this.zm=this.qj=0;this.Hj(null);this.Gl=[];this.rj=-1;this.Yo=this.Dh=0;this.zl=!0;this.Ng=0;this.Xh=[];this.wm=this.am=-1;this.gf=!0;this.nf=0;this.fh=!1;this.sv=0;this.Hf=null;this.ld=this.fl=!1;this.cp=new ca;this.Ol= new ca;this.Pl=new ca;this.dm=[];this.Yc=new eb([]);this.tm=new eb([]);this.fe=[];this.Xg={};this.Lf={};this.Gf={};this.xg={};this.pn={};this.Ao=this.kj=this.Yb=this.pc=this.zo=this.jj=this.ra=null;this.vg=this.tl=!1;this.Vk=[null,null];this.Se=0;this.Og="";this.Pd={};this.Sj=this.ag=null;this.tj=[];this.av()}}function p(d){d.target.result.createObjectStore("saves",{keyPath:"slot"})}function v(d,q,a,k){var f=indexedDB.open("_C2SaveStates");f.onupgradeneeded=p;f.onerror=k;f.onsuccess=function(f){f= f.target.result;f.onerror=k;f.transaction(["saves"],"readwrite").objectStore("saves").put({slot:d,data:q}).onsuccess=a}}function c(d,q,a){var k=indexedDB.open("_C2SaveStates");k.onupgradeneeded=p;k.onerror=a;k.onsuccess=function(k){k=k.target.result;k.onerror=a;var u=k.transaction(["saves"]).objectStore("saves").get(d);u.onsuccess=function(){u.result?q(u.result.data):q(null)}}}function b(){E("Reloading for continuous preview");window.c2cocoonjs?CocoonJS.App.reload():-1<window.location.search.indexOf("continuous")? window.location.reload(!0):window.location+="?continuous"}function h(d){var q,a={};for(q in d)!d.hasOwnProperty(q)||d[q]instanceof ca||d[q]&&"undefined"!==typeof d[q].Cw||(a[q]=d[q]);return a}m.prototype.av=function(){var d=this,q;q=this.ff?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest;var a="data.js";if(this.ro||this.ff||this.ih)a="data.json";q.open("GET",a,!0);var k=!1;if(!this.Aa&&"response"in q&&"responseType"in q)try{q.responseType="json",k="json"===q.responseType}catch(f){k=!1}if(!k&& "responseType"in q)try{q.responseType="text"}catch(l){}if("overrideMimeType"in q)try{q.overrideMimeType("application/json; charset=utf-8")}catch(c){}this.ff?q.onreadystatechange=function(){4===q.readyState&&d.nj(JSON.parse(q.responseText))}:(q.onload=function(){if(k)d.nj(q.response);else if(d.yc){var a=q.responseText,a=a.substr(a.indexOf("{"));d.nj(JSON.parse(a))}else d.nj(JSON.parse(q.responseText))},q.onerror=function(d){ea("Error requesting "+a+":");ea(d)});q.send()};m.prototype.ku=function(){var d= this,q,a,k,f,l,c,b,g,h;this.devicePixelRatio=(this.df=(!this.Aa||this.yc)&&this.Dv&&!this.bj)?window.devicePixelRatio||window.webkitDevicePixelRatio||window.mozDevicePixelRatio||window.msDevicePixelRatio||1:1;this.wb();a=!(!this.At&&(!this.uk||this.ue||this.sl||this.ff||this.eh||this.oc||this.ol));0<this.Ub&&this.setSize(e(),r(),!0);try{this.Ss&&(this.nc||this.yc||!this.Aa)&&(q={alpha:a,depth:!1,antialias:!1,failIfMajorPerformanceCaveat:!0},this.n=this.canvas.getContext("webgl",q)||this.canvas.getContext("experimental-webgl", q))}catch(s){}if(this.n){this.Aa||(this.rb=document.createElement("canvas"),jQuery(this.rb).appendTo(this.canvas.parentNode),this.rb.oncontextmenu=function(){return!1},this.rb.onselectstart=function(){return!1},this.rb.width=this.Di,this.rb.height=this.Ci,jQuery(this.rb).css({width:this.Di+"px",height:this.Ci+"px"}),this.wp(),this.Wl=this.rb.getContext("2d"));this.B=new mb(this.n,this.bf);this.B.Be(this.canvas.width,this.canvas.height);this.B.Gn=0!==this.Ns;this.qa=null;this.canvas.addEventListener("webglcontextlost", function(a){a.preventDefault();d.Iu();E("[Construct 2] WebGL context lost");window.cr_setSuspended(!0)},!1);this.canvas.addEventListener("webglcontextrestored",function(){d.B.fo();d.B.Be(d.B.width,d.B.height,!0);d.pc=null;d.Yb=null;d.Vk[0]=null;d.Vk[1]=null;d.Ju();d.ga=!0;E("[Construct 2] WebGL context restored");window.cr_setSuspended(!1)},!1);q=0;for(a=this.q.length;q<a;q++)for(l=this.q[q],k=0,f=l.L.length;k<f;k++)b=l.L[k],b.tb=this.B.bl(b.id),this.vg=this.vg||this.B.Kh(b.tb);q=0;for(a=this.Tc.length;q< a;q++){g=this.Tc[q];k=0;for(f=g.L.length;k<f;k++)b=g.L[k],b.tb=this.B.bl(b.id);k=0;for(f=g.T.length;k<f;k++)for(h=g.T[k],l=0,c=h.L.length;l<c;l++)b=h.L[l],b.tb=this.B.bl(b.id),this.vg=this.vg||this.B.Kh(b.tb)}}else{if(0<this.Ub&&this.ib){this.canvas=null;document.oncontextmenu=function(){return!1};document.onselectstart=function(){return!1};this.qa=AppMobi.canvas.getContext("2d");try{this.qa.samplingMode=this.ea?"smooth":"sharp",this.qa.globalScale=1,this.qa.HTML5CompatibilityMode=!0,this.qa.imageSmoothingEnabled= this.ea}catch(w){}0!==this.width&&0!==this.height&&(this.qa.width=this.width,this.qa.height=this.height)}this.qa||(q=this.nc?{antialias:!!this.ea,alpha:a}:{alpha:a},this.qa=this.canvas.getContext("2d",q),this.qa.webkitImageSmoothingEnabled=this.ea,this.qa.mozImageSmoothingEnabled=this.ea,this.qa.msImageSmoothingEnabled=this.ea,this.qa.imageSmoothingEnabled=this.ea);this.Wl=this.rb=null}this.Yp=function(a){d.ub(!1,a)};window==window.top||this.Aa||this.sl||this.ff||(document.addEventListener("mousedown", function(){window.focus()},!0),document.addEventListener("touchstart",function(){window.focus()},!0));"undefined"!==typeof cr_is_preview&&(this.nc&&console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"),-1<window.location.search.indexOf("continuous")&&(E("Reloading for continuous preview"),this.lj="__c2_continuouspreview",this.Wh=!0),this.Ou&&!this.bf&&(jQuery(window).focus(function(){d.setSuspended(!1)}),jQuery(window).blur(function(){d.setSuspended(!0)})));this.Aa||(q=function(d){if(lb(d)&& document.activeElement&&document.activeElement!==document.getElementsByTagName("body")[0]&&document.activeElement.blur)try{document.activeElement.blur()}catch(a){}},window.navigator.pointerEnabled?document.addEventListener("pointerdown",q):window.navigator.msPointerEnabled?document.addEventListener("MSPointerDown",q):document.addEventListener("touchstart",q),document.addEventListener("mousedown",q));0===this.Ub&&this.df&&1<this.devicePixelRatio&&this.setSize(this.Za,this.Ya,!0);this.bq();this.du(); this.go();this.N={}};m.prototype.setSize=function(d,a,n){var k=0,f=0,l=0,c=0,c=0,b=this.xu&&this.oo&&!navigator.standalone&&!this.Aa&&!this.oc;b&&(a+=60);if(this.qh!==d||this.ph!==a||n){this.qh=d;this.ph=a;var g=this.Ub,h=(document.mozFullScreen||document.webkitIsFullScreen||!!document.msFullscreenElement||document.fullScreen||this.fh)&&!this.oc;if(h||0!==this.Ub||n)h&&0<this.Se&&(g=this.Se),n=this.devicePixelRatio,4<=g?(l=this.Za/this.Ya,d/a>l?(l*=a,5===g?(c=l*n/this.Za,1<c?c=Math.floor(c):1>c&& (c=1/Math.ceil(1/c)),l=this.Za*c/n,c=this.Ya*c/n,k=(d-l)/2,f=(a-c)/2,d=l,a=c):(k=(d-l)/2,d=l)):(c=d/l,5===g?(c=c*n/this.Ya,1<c?c=Math.floor(c):1>c&&(c=1/Math.ceil(1/c)),l=this.Za*c/n,c=this.Ya*c/n,k=(d-l)/2,f=(a-c)/2,d=l):f=(a-c)/2,a=c),h&&!this.ue&&(f=k=0)):this.ue&&this.fh&&0===this.Pn&&(k=Math.floor((d-this.Za)/2),f=Math.floor((a-this.Ya)/2),d=this.Za,a=this.Ya),2>g&&(this.Cg=n),this.df&&this.to&&1<n&&(1024<=d&&(d=1023),1024<=a&&(a=1023)),this.Di=Math.round(d),this.Ci=Math.round(a),this.width= Math.round(d*n),this.height=Math.round(a*n),this.ga=!0,this.rq?(this.W=this.width,this.V=this.height,this.xc=!0):this.width<this.Za&&this.height<this.Ya||1===g?(this.W=this.width,this.V=this.height,this.xc=!0):(this.W=this.Za,this.V=this.Ya,this.xc=!1,2===g?(l=this.Za/this.Ya,g=this.qh/this.ph,g<l?this.W=this.V*g:g>l&&(this.V=this.W/g)):3===g&&(l=this.Za/this.Ya,g=this.qh/this.ph,g>l?this.W=this.V*g:g<l&&(this.V=this.W/g))),this.vn&&!this.Aa&&(jQuery(this.vn).css({width:Math.round(d)+"px",height:Math.round(a)+ "px","margin-left":Math.floor(k)+"px","margin-top":Math.floor(f)+"px"}),"undefined"!==typeof cr_is_preview&&jQuery("#borderwrap").css({width:Math.round(d)+"px",height:Math.round(a)+"px"})),this.canvas&&(this.canvas.width=Math.round(d*n),this.canvas.height=Math.round(a*n),this.yc?(this.canvas.style.left=Math.floor(k)+"px",this.canvas.style.top=Math.floor(f)+"px",this.canvas.style.width=Math.round(d)+"px",this.canvas.style.height=Math.round(a)+"px"):this.df&&!this.Aa&&jQuery(this.canvas).css({width:Math.round(d)+ "px",height:Math.round(a)+"px"})),this.rb&&(this.rb.width=Math.round(d),this.rb.height=Math.round(a),jQuery(this.rb).css({width:Math.round(d)+"px",height:Math.round(a)+"px"})),this.B&&this.B.Be(Math.round(d*n),Math.round(a*n)),this.ib&&this.qa&&(this.qa.width=Math.round(d),this.qa.height=Math.round(a)),this.qa&&(this.qa.webkitImageSmoothingEnabled=this.ea,this.qa.mozImageSmoothingEnabled=this.ea,this.qa.msImageSmoothingEnabled=this.ea,this.qa.imageSmoothingEnabled=this.ea),this.bq(),this.Aa||!b&& !this.ul||window.setTimeout(function(){window.scrollTo(0,1)},100)}};m.prototype.bq=function(){if(this.os&&0!==this.Ul){var d="portrait";2===this.Ul&&(d="landscape");screen.orientation&&screen.orientation.lock?screen.orientation.lock(d):screen.lockOrientation?screen.lockOrientation(d):screen.webkitLockOrientation?screen.webkitLockOrientation(d):screen.mozLockOrientation?screen.mozLockOrientation(d):screen.msLockOrientation&&screen.msLockOrientation(d)}};m.prototype.Iu=function(){this.B.us();this.tl= !0;var d,a,n;d=0;for(a=this.q.length;d<a;d++)n=this.q[d],n.vj&&n.vj()};m.prototype.Ju=function(){this.tl=!1;var d,a,n;d=0;for(a=this.q.length;d<a;d++)n=this.q[d],n.xj&&n.xj()};m.prototype.wp=function(){if(!this.Aa){var d=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||document.msFullscreenElement||this.fh)&&!this.oc?jQuery(this.canvas).offset():jQuery(this.canvas).position();d.position="absolute";jQuery(this.rb).css(d)}};var t=window.cancelAnimationFrame||window.mozCancelAnimationFrame|| window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||window.oCancelAnimationFrame;m.prototype.setSuspended=function(d){var a;if(d&&!this.gh)for(E("[Construct 2] Suspending"),this.gh=!0,-1!==this.am&&t&&t(this.am),-1!==this.wm&&clearTimeout(this.wm),d=0,a=this.Xh.length;d<a;d++)this.Xh[d](!0);else if(!d&&this.gh){E("[Construct 2] Resuming");this.gh=!1;this.ij=Za();this.lf=Za();d=this.zh=this.Ri=0;for(a=this.Xh.length;d<a;d++)this.Xh[d](!1);this.ub(!1)}};m.prototype.jn=function(d){this.Xh.push(d)}; m.prototype.de=function(d){return this.tj[d]};m.prototype.nj=function(d){d&&d.project||ea("Project model unavailable");d=d.project;this.name=d[0];this.Ln=d[1];this.Ub=d[12];this.Pn=d[12];this.Za=d[10];this.Ya=d[11];this.rp=this.Za/2;this.sp=this.Ya/2;this.Aa&&!this.yc&&(4<=d[12]||0===d[12])&&(E("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"),this.Pn=this.Ub=3);this.Fm=d[18];this.sh=d[19];0===this.sh&&(this.ag=new Image,this.ag.src= "loading-logo.png");this.Dh=d[21];this.tj=kc();this.vd=new W(this);var a,n,k,f,l,c,b,g,h;a=0;for(n=d[2].length;a<n;a++)b=d[2][a],k=this.de(b[0]),nb(b,k.prototype),h=new k(this),h.Rj=b[1],h.ve=b[2],h.Vo=b[9],h.U&&h.U(),this.plugins.push(h);this.tj=kc();a=0;for(n=d[3].length;a<n;a++){b=d[3][a];l=this.de(b[1]);h=null;k=0;for(f=this.plugins.length;k<f;k++)if(this.plugins[k]instanceof l){h=this.plugins[k];break}var s=new h.ua(h);s.name=b[0];s.F=b[2];s.ml=b[3].slice(0);s.Fv=b[3].length;s.ps=b[4];s.Ct=b[5]; s.Z=b[11];s.F?(s.eg=[],s.Id=this.Ng++,s.za=null):(s.eg=null,s.Id=-1,s.za=[]);s.Oi=null;s.Nf=null;s.Hn=null;s.Lb=!1;s.Tb=null;b[6]?(s.Yj=b[6][0],s.vm=b[6][1],s.Zh=b[6][2]):(s.Yj=null,s.vm=0,s.Zh=0);s.Rb=b[7]?b[7]:null;s.index=a;s.c=[];s.Hi=[];s.De=[new ob(s)];s.Fd=0;s.uc=null;s.zs=0;s.rg=!0;s.gk=pb;s.Tn=qb;s.Nt=rb;s.H=sb;s.Lh=tb;s.vf=ub;s.rd=vb;s.Ui=wb;s.Wk=yb;s.Yk=zb;s.qc=Ab;s.Un=Bb;s.xi=new fb(this.Za,this.Ya);s.ii=!0;s.ji=!1;s.N={};s.toString=Cb;s.Ha=[];k=0;for(f=b[8].length;k<f;k++){g=b[8][k]; var w=this.de(g[1]),m=null;l=0;for(c=this.Ha.length;l<c;l++)if(this.Ha[l]instanceof w){m=this.Ha[l];break}m||(m=new w(this),m.Xo=[],m.Ml=new ca,m.U&&m.U(),this.Ha.push(m));-1===m.Xo.indexOf(s)&&m.Xo.push(s);l=new m.ua(m,s);l.name=g[0];l.Z=g[2];l.U();s.Ha.push(l)}s.global=b[9];s.ql=b[10];s.L=[];k=0;for(f=b[12].length;k<f;k++)s.L.push({id:b[12][k][0],name:b[12][k][1],tb:-1,xb:!0,index:k});s.Uw=b[13];this.Fm&&!s.F&&!s.ql&&h.ve||s.U();s.name&&(this.types[s.name]=s);this.q.push(s);h.Rj&&(k=new h.la(s), k.uid=this.Dh++,k.zp=this.Yo++,k.Xe=0,k.Vg=Db,k.toString=Eb,k.A=b[14],k.U(),s.c.push(k),this.Pd[k.uid.toString()]=k)}a=0;for(n=d[4].length;a<n;a++)for(l=d[4][a],c=this.q[l[0]],k=1,f=l.length;k<f;k++)b=this.q[l[k]],b.za.push(c),c.eg.push(b);a=0;for(n=d[27].length;a<n;a++){l=d[27][a];c=[];k=0;for(f=l.length;k<f;k++)c.push(this.q[l[k]]);k=0;for(f=c.length;k<f;k++)c[k].Lb=!0,c[k].Tb=c}if(0<this.Ng)for(a=0,n=this.q.length;a<n;a++)if(b=this.q[a],!b.F&&b.za.length){b.Oi=Array(this.Ng);b.Nf=Array(this.Ng); b.Hn=Array(this.Ng);s=[];k=m=w=g=0;for(f=b.za.length;k<f;k++)for(h=b.za[k],b.Oi[h.Id]=g,g+=h.Fv,b.Nf[h.Id]=w,w+=h.ps,b.Hn[h.Id]=m,m+=h.Ct,l=0,c=h.L.length;l<c;l++)s.push(za({},h.L[l]));b.L=s.concat(b.L);k=0;for(f=b.L.length;k<f;k++)b.L[k].index=k}a=0;for(n=d[5].length;a<n;a++)b=d[5][a],k=new Fb(this,b),this.Zf[k.name]=k,this.Tc.push(k);a=0;for(n=d[6].length;a<n;a++)b=d[6][a],k=new Gb(this,b),this.Nk[k.name]=k,this.Hd.push(k);a=0;for(n=this.Hd.length;a<n;a++)this.Hd[a].Ga();a=0;for(n=this.Hd.length;a< n;a++)this.Hd[a].Bm();a=0;for(n=this.ek.length;a<n;a++)this.ek[a].Ga();this.ek.length=0;this.ns=d[7];this.Og=d[8];this.qd=d[9];this.Cg=1;this.Ss=d[13];this.ea=d[14];this.uk=d[15];this.Dv=d[17];this.Ul=d[20];this.os=0<this.Ul;this.Ou=d[22];this.xc=this.rq=d[23];this.Ns=d[24];this.Uu=d[25];this.Tj=Date.now();this.tj.length=0;this.ku()};var g=!1;m.prototype.qq=function(d,a){d.cocoonLazyLoad=!0;d.onerror=function(a){g=d.rn=!0;console&&console.error&&console.error("Error loading image '"+d.src+"': ",a)}; this.yc?d.src=a:d.src||("undefined"!==typeof XAPKReader?XAPKReader.get(a,function(a){d.src=a},function(n){g=d.rn=!0;console&&console.error&&console.error("Error extracting image '"+a+"' from expansion file: ",n)}):d.src=a);this.Bf.push(d)};m.prototype.zt=function(d){var a,n;a=0;for(n=this.Bf.length;a<n;a++)if(this.Bf[a].vs===d)return this.Bf[a];return null};var a=0,l=!1;m.prototype.du=function(){this.Hf&&(a=this.Hf.qv(this.ns))};m.prototype.nn=function(){var d=a,q=0,n=0,k=!0,f,c,n=0;for(f=this.Bf.length;n< f;n++){c=this.Bf[n];var b=c.zn;if(!b||0>=b)b=5E4;d+=b;c.src&&(c.complete||c.loaded)&&!c.rn?q+=b:k=!1}k&&this.Uu&&this.Hf&&(l||(this.Hf.tv(),l=!0),n=this.Hf.Ot(),q+=n,n<a&&(k=!1));this.uf=0==d?0:q/d;return k};m.prototype.go=function(){if(this.qa||this.B){var d=this.qa||this.Wl;this.rb&&this.wp();this.uf=0;this.yo=-1;if(this.nn())this.eu();else{var a=Date.now()-this.Tj;if(d){var n=this.width,k=this.height,f=this.devicePixelRatio;this.rb&&(n=this.Di,k=this.Ci,f=1);if(3!==this.sh&&(this.nc||500<=a&&this.yo!= this.uf)){d.clearRect(0,0,n,k);var a=n/2,k=k/2,n=0===this.sh&&this.ag.complete,l=40*f,c=0,b=80*f,s;n&&(b=this.ag.width*f,s=this.ag.height*f,l=b/2,c=s/2,d.drawImage(this.ag,T(a-l),T(k-c),b,s));1>=this.sh?(a=T(a-l)+.5,k=T(k+(c+(n?12*f:0)))+.5,d.fillStyle=g?"red":"DodgerBlue",d.fillRect(a,k,Math.floor(b*this.uf),6*f),d.strokeStyle="black",d.strokeRect(a,k,b,6*f),d.strokeStyle="white",d.strokeRect(a-1*f,k-1*f,b+2*f,8*f)):2===this.sh&&(d.font=this.yc?"12pt ArialMT":"12pt Arial",d.fillStyle=g?"#f00":"#999", d.Tw="middle",f=Math.round(100*this.uf)+"%",n=d.measureText?d.measureText(f):null,d.fillText(f,a-(n?n.width:0)/2,k))}this.yo=this.uf}setTimeout(function(d){return function(){d.go()}}(this),this.nc?10:100)}}};m.prototype.eu=function(){this.rb&&(this.canvas.parentNode.removeChild(this.rb),this.rb=this.Wl=null);this.Tj=Date.now();this.lf=Za();var d,a,n;if(this.Fm)for(d=0,a=this.q.length;d<a;d++)n=this.q[d],n.F||n.ql||!n.ta.ve||n.U();else this.gf=!1;d=0;for(a=this.Tc.length;d<a;d++)this.Tc[d].ws();2<= this.Ub&&(d=this.Za/this.Ya,a=this.width/this.height,this.Cg=2!==this.Ub&&a>d||2===this.Ub&&a<d?this.height/this.Ya:this.width/this.Za);this.Ln?this.Zf[this.Ln].qm():this.Tc[0].qm();this.Fm||(this.nf=1,this.trigger(W.prototype.d.nk,null));navigator.splashscreen&&navigator.splashscreen.hide&&navigator.splashscreen.hide();d=0;for(a=this.q.length;d<a;d++)n=this.q[d],n.Hu&&n.Hu();document.hidden||document.webkitHidden||document.mozHidden||document.msHidden?window.cr_setSuspended(!0):this.ub(!1);this.ib&& AppMobi.webview.execute("onGameReady();")};var w=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame;m.prototype.ub=function(d,a,n){if(this.ra){var k=Za();if(n||!this.gh||d){d||(w?this.am=w(this.Yp):this.wm=setTimeout(this.Yp,this.bf?1:16));a=a||k;var f=this.Ub;((n=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||!!document.msFullscreenElement)&&!this.oc)||this.fh)&& 0<this.Se&&(f=this.Se);0<f&&(!this.mh||window.self!==window.top)&&(f=window.innerHeight,this.qh===window.innerWidth&&this.ph===f||this.setSize(e(),r()));this.Aa||(n?(this.Qi||(this.Uk=jQuery(this.canvas).css("margin")||"0",this.Qi=!0),this.dh||this.ue||jQuery(this.canvas).css({"margin-left":""+Math.floor((screen.width-this.width/this.devicePixelRatio)/2)+"px","margin-top":""+Math.floor((screen.height-this.height/this.devicePixelRatio)/2)+"px"})):this.Qi?(this.dh||this.ue||jQuery(this.canvas).css("margin", this.Uk),this.Uk="",this.Qi=!1,0===this.Ub&&this.setSize(Math.round(this.ep/this.devicePixelRatio),Math.round(this.dp/this.devicePixelRatio),!0)):(this.ep=this.width,this.dp=this.height));this.gf&&(n=this.nn(),this.nf=this.uf,n&&(this.gf=!1,this.uf=1,this.trigger(W.prototype.d.nk,null)));this.Cu(a);!this.ga&&!this.nc||this.tl||this.Wh||d||(this.ga=!1,this.B?this.wc():this.Gd(),this.Sj&&(this.canvas&&this.canvas.toDataURL&&(this.canvas.toDataURL(this.Sj[0],this.Sj[1]),this.trigger(W.prototype.d.fr, null)),this.Sj=null));this.Nw||(this.zf++,this.Lg++,this.Ri++);this.zh+=Za()-k}}};m.prototype.Cu=function(d){var a,n,k,f,l,b,c,g;1E3<=d-this.lf&&(this.lf+=1E3,1E3<=d-this.lf&&(this.lf=d),this.Tk=this.Ri,this.Ri=0,this.Fk=this.zh,this.zh=0);0!==this.ij&&(a=d-this.ij,0>a&&(a=0),this.pe=a/1E3,.5<this.pe?this.pe=0:.1<this.pe&&(this.pe=.1));this.ij=d;this.oe=this.pe*this.Af;this.Wb.add(this.oe);this.yd.add(this.pe);d=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||!!document.msFullscreenElement|| this.fh)&&!this.oc;2<=this.Ub||d&&0<this.Se?(a=this.Za/this.Ya,n=this.width/this.height,k=this.Ub,d&&0<this.Se&&(k=this.Se),this.Cg=2!==k&&n>a||2===k&&n<a?this.height/this.Ya:this.width/this.Za,this.ra&&(this.ra.Gp(this.ra.scrollX),this.ra.Hp(this.ra.scrollY))):this.Cg=this.df?this.devicePixelRatio:1;this.wb();this.Rc++;this.vd.dv();this.Rc--;this.wb();this.Rc++;n=this.cp.He();d=0;for(a=n.length;d<a;d++)n[d].Pw();d=0;for(a=this.q.length;d<a;d++)if(b=this.q[d],!b.F&&(b.Ha.length||b.za.length))for(n= 0,k=b.c.length;n<k;n++)for(c=b.c[n],f=0,l=c.S.length;f<l;f++)c.S[f].ub();d=0;for(a=this.q.length;d<a;d++)if(b=this.q[d],!b.F&&(b.Ha.length||b.za.length))for(n=0,k=b.c.length;n<k;n++)for(c=b.c[n],f=0,l=c.S.length;f<l;f++)g=c.S[f],g.Tu&&g.Tu();n=this.Ol.He();d=0;for(a=n.length;d<a;d++)n[d].ub();this.Rc--;this.fu();for(d=0;this.Bd&&10>d++;)this.Fn(this.Bd);d=0;for(a=this.Hd.length;d<a;d++)this.Hd[d].hl=!1;this.ra.Qe&&this.ra.Qe.Ka();this.dm.length=0;this.zl=!1;this.Rc++;d=0;for(a=this.q.length;d<a;d++)if(b= this.q[d],!b.F&&(b.Ha.length||b.za.length))for(n=0,k=b.c.length;n<k;n++)for(c=b.c[n],f=0,l=c.S.length;f<l;f++)g=c.S[f],g.ak&&g.ak();n=this.Pl.He();d=0;for(a=n.length;d<a;d++)n[d].ak();this.Rc--};m.prototype.Fn=function(d){var a=this.ra;this.ra.uv();var n,k,f,l,b,c,g;if(this.B)for(n=0,k=this.q.length;n<k;n++)b=this.q[n],b.F||!b.fk||b.global&&0!==b.c.length||-1!==d.$g.indexOf(b)||b.fk();a==d&&(this.vd.Pb.length=0);d.qm();n=0;for(k=this.q.length;n<k;n++)if(b=this.q[n],b.global||b.ta.Rj)for(d=0,a=b.c.length;d< a;d++)if(c=b.c[d],c.Sl&&c.Sl(),c.S)for(f=0,l=c.S.length;f<l;f++)g=c.S[f],g.Sl&&g.Sl();this.zl=this.ga=!0;this.wb()};m.prototype.bk=function(d){this.Ol.add(d)};m.prototype.wv=function(d){this.Pl.add(d)};m.prototype.Vi=function(d){return d&&-1!==d.Ch?this.pe*d.Ch:this.oe};m.prototype.Gd=function(){this.ra.Gd(this.qa);this.ib&&this.qa.present()};m.prototype.wc=function(){this.ra.wc(this.B);this.B.Wu()};m.prototype.tk=function(d){d&&this.Ji.push(d)};m.prototype.$u=function(d){Ea(this.Ji,d)};m.prototype.Tg= function(d){d=d.toString();return this.Pd.hasOwnProperty(d)?this.Pd[d]:null};var f=[];m.prototype.be=function(d){var a,n;a=d.type.name;var k=null;if(this.Ne.hasOwnProperty(a)){if(k=this.Ne[a],k.contains(d))return}else k=f.length?f.pop():new ca,this.Ne[a]=k;k.add(d);this.se=!0;if(d.Lb)for(a=0,n=d.siblings.length;a<n;a++)this.be(d.siblings[a]);this.pl&&k.wg.push(d);this.Rc++;this.trigger(Object.getPrototypeOf(d.type.ta).d.hr,d);this.Rc--};m.prototype.wb=function(){if(this.se){var d,a,n,k,f,l;this.pl= !0;n=0;for(f=this.Oc.length;n<f;++n)for(d=this.Oc[n],a=d.type,a.c.push(d),k=0,l=a.za.length;k<l;++k)a.za[k].c.push(d),a.za[k].rg=!0;this.Oc.length=0;this.Xq();Ua(this.Ne);this.se=this.pl=!1}};m.prototype.Xq=function(){for(var d in this.Ne)this.Ne.hasOwnProperty(d)&&this.yq(this.Ne[d])};m.prototype.yq=function(d){var a=d.He(),n=a[0].type,k,l,b,c,g,s;$a(n.c,d);n.rg=!0;0===n.c.length&&(n.ji=!1);k=0;for(l=n.za.length;k<l;++k)s=n.za[k],$a(s.c,d),s.rg=!0;k=0;for(l=this.vd.Pb.length;k<l;++k)if(g=this.vd.Pb[k], g.Jb.hasOwnProperty(n.index)&&$a(g.Jb[n.index].Ld,d),!n.F)for(b=0,c=n.za.length;b<c;++b)s=n.za[b],g.Jb.hasOwnProperty(s.index)&&$a(g.Jb[s.index].Ld,d);if(g=a[0].k){if(g.$c)for(b=g.c,k=0,l=b.length;k<l;++k)c=b[k],d.contains(c)&&(c.xa(),g.cc.update(c,c.Nb,null),c.Nb.set(0,0,-1,-1));$a(g.c,d);g.Rh(0)}for(k=0;k<a.length;++k)this.xq(a[k],n);d.clear();f.push(d);this.ga=!0};m.prototype.xq=function(d,a){var n,k,f;n=0;for(k=this.Ji.length;n<k;++n)this.Ji[n](d);d.le&&a.xi.update(d,d.le,null);(n=d.k)&&n.kg(d, !0);if(d.S)for(n=0,k=d.S.length;n<k;++n)f=d.S[n],f.tf&&f.tf(),f.behavior.Ml.remove(d);this.cp.remove(d);this.Ol.remove(d);this.Pl.remove(d);d.tf&&d.tf();this.Pd.hasOwnProperty(d.uid.toString())&&delete this.Pd[d.uid.toString()];this.uj--;100>a.Hi.length&&a.Hi.push(d)};m.prototype.An=function(d,a,n,k){if(d.F){var f=T(Math.random()*d.eg.length);return this.An(d.eg[f],a,n,k)}return d.uc?this.ne(d.uc,a,!1,n,k,!1):null};var s=[];m.prototype.ne=function(d,a,n,k,f,l){var b,c,g,h;if(!d)return null;var w= this.q[d[1]],m=w.ta.ve;if(this.gf&&m&&!w.ql||m&&!this.B&&11===d[0][11])return null;var t=a;m||(a=null);var e;w.Hi.length?(e=w.Hi.pop(),e.ac=!0,w.ta.la.call(e,w)):(e=new w.ta.la(w),e.ac=!1);e.uid=!n||l||this.Pd.hasOwnProperty(d[2].toString())?this.Dh++:d[2];this.Pd[e.uid.toString()]=e;e.zp=this.Yo++;e.Xe=w.c.length;b=0;for(c=this.Oc.length;b<c;++b)this.Oc[b].type===w&&e.Xe++;e.Vg=Db;e.toString=Eb;g=d[3];if(e.ac)Ua(e.N);else{e.N={};if("undefined"!==typeof cr_is_preview)for(e.jo=[],e.jo.length=g.length, b=0,c=g.length;b<c;b++)e.jo[b]=g[b][1];e.Wa=[];e.Wa.length=g.length}b=0;for(c=g.length;b<c;b++)e.Wa[b]=g[b][0];if(m){var y=d[0];e.x=ia(k)?y[0]:k;e.y=ia(f)?y[1]:f;e.z=y[2];e.width=y[3];e.height=y[4];e.depth=y[5];e.g=y[6];e.opacity=y[7];e.Db=y[8];e.Eb=y[9];e.Kb=y[10];b=y[11];!this.B&&w.L.length&&(e.Kb=b);e.Gg=hb(e.Kb);this.n&&ib(e,e.Kb,this.n);if(e.ac){b=0;for(c=y[12].length;b<c;b++)for(g=0,h=y[12][b].length;g<h;g++)e.Ba[b][g]=y[12][b][g];e.Oa.set(0,0,0,0);e.le.set(0,0,-1,-1);e.Nb.set(0,0,-1,-1);e.Sb.Sh(e.Oa); e.yk.length=0}else{e.Ba=y[12].slice(0);b=0;for(c=e.Ba.length;b<c;b++)e.Ba[b]=y[12][b].slice(0);e.ja=[];e.ee=[];e.ee.length=w.L.length;e.Oa=new ua(0,0,0,0);e.le=new ua(0,0,-1,-1);e.Nb=new ua(0,0,-1,-1);e.Sb=new va;e.yk=[];e.Da=Hb;e.Bw=Ib;e.yb=Jb;e.xa=Kb;e.Cv=Lb;e.lq=Mb;e.jd=Nb}e.$h=!1;e.zv=0;e.yv=0;e.xv=null;14===y.length&&(e.$h=!0,e.zv=y[13][0],e.yv=y[13][1],e.xv=y[13][2]);b=0;for(c=w.L.length;b<c;b++)e.ee[b]=!0;e.Zd=Ob;e.Zd();e.mq=!!e.ja.length;e.xk=!0;e.Ak=!0;w.ii=!0;e.visible=!0;e.Ch=-1;e.k=a; e.ad=a.c.length;"undefined"===typeof e.ka&&(e.ka=null);this.ga=e.Le=!0}var r;b=s.length=0;for(c=w.za.length;b<c;b++)s.push.apply(s,w.za[b].Ha);s.push.apply(s,w.Ha);if(e.ac)for(b=0,c=s.length;b<c;b++){var p=s[b];r=e.S[b];r.ac=!0;p.behavior.la.call(r,p,e);y=d[4][b];g=0;for(h=y.length;g<h;g++)r.A[g]=y[g];r.U();p.behavior.Ml.add(e)}else for(e.S=[],b=0,c=s.length;b<c;b++)p=s[b],r=new p.behavior.la(p,e),r.ac=!1,r.A=d[4][b].slice(0),r.U(),e.S.push(r),p.behavior.Ml.add(e);y=d[5];if(e.ac)for(b=0,c=y.length;b< c;b++)e.A[b]=y[b];else e.A=y.slice(0);this.Oc.push(e);this.se=!0;a&&(a.Bg(e,!0),1!==a.Dc||1!==a.Ec)&&(w.ji=!0);this.uj++;if(w.Lb){if(e.Lb=!0,e.ac?e.siblings.length=0:e.siblings=[],!n&&!l){b=0;for(c=w.Tb.length;b<c;b++)if(w.Tb[b]!==w){if(!w.Tb[b].uc)return null;e.siblings.push(this.ne(w.Tb[b].uc,t,!1,m?e.x:k,m?e.y:f,!0))}b=0;for(c=e.siblings.length;b<c;b++)for(e.siblings[b].siblings.push(e),g=0;g<c;g++)b!==g&&e.siblings[b].siblings.push(e.siblings[g])}}else e.Lb=!1,e.siblings=null;e.U();b=0;for(c= e.S.length;b<c;b++)e.S[b].Su&&e.S[b].Su();return e};m.prototype.$k=function(d){var a,n;a=0;for(n=this.ra.T.length;a<n;a++){var k=this.ra.T[a];if(kb(k.name,d))return k}return null};m.prototype.Sg=function(d){d=T(d);0>d&&(d=0);d>=this.ra.T.length&&(d=this.ra.T.length-1);return this.ra.T[d]};m.prototype.Dk=function(d){var a,n;a=0;for(n=d.length;a<n;a++)d[a].H().O=!0};m.prototype.Lh=function(d){var a,n;a=0;for(n=d.length;a<n;a++)d[a].Lh()};m.prototype.vf=function(d){var a,n;a=0;for(n=d.length;a<n;a++)d[a].vf()}; m.prototype.rd=function(d){var a,n;a=0;for(n=d.length;a<n;a++)d[a].rd()};m.prototype.iq=function(d){if(d.ii){var a,n,k=d.c;a=0;for(n=k.length;a<n;++a)k[a].lq();k=this.Oc;a=0;for(n=k.length;a<n;++a)k[a].type===d&&k[a].lq();d.ii=!1}};m.prototype.Ht=function(d,a,n,k){var f,b,l=d?1!==d.Dc||1!==d.Ec:!1;if(a.F)for(d=0,f=a.eg.length;d<f;++d)b=a.eg[d],l||b.ji?Ca(k,b.c):(this.iq(b),b.xi.Jj(n,k));else l||a.ji?Ca(k,a.c):(this.iq(a),a.xi.Jj(n,k))};m.prototype.Xj=function(d,a,k){var b=d.H(),f,l,c,g,s,h;if(b.O)for(b.O= !1,f=b.c.length=0,g=d.c.length;f<g;f++)c=d.c[f],c.xa(),s=c.k.Bb(a,k,!0),h=c.k.Bb(a,k,!1),c.yb(s,h)&&b.c.push(c);else{f=l=0;for(g=b.c.length;f<g;f++)c=b.c[f],c.xa(),s=c.k.Bb(a,k,!0),h=c.k.Bb(a,k,!1),c.yb(s,h)&&(b.c[l]=b.c[f],l++);b.c.length=l}d.qc();return b.gl()};m.prototype.vv=function(d,a){if(!(d&&a&&d!==a&&d.Le&&a.Le))return!1;d.xa();a.xa();var k=d.k,b=a.k,f,l,c,g,s,h,e,w;if(k===b||k.Dc===b.Dc&&b.Ec===b.Ec&&k.scale===b.scale&&k.g===b.g&&k.bd===b.bd){if(!d.Oa.lu(a.Oa)||!d.Sb.ko(a.Sb)||d.$h&&a.$h)return!1; if(d.$h)return this.Wp(d,a);if(a.$h)return this.Wp(a,d);e=d.ka&&!d.ka.Sf();f=a.ka&&!a.ka.Sf();if(!e&&!f)return!0;e?(d.ka.If(d.width,d.height,d.g),e=d.ka):(this.Yc.pg(d.Sb,d.x,d.y,d.width,d.height),e=this.Yc);f?(a.ka.If(a.width,a.height,a.g),w=a.ka):(this.Yc.pg(a.Sb,a.x,a.y,a.width,a.height),w=this.Yc);return e.ah(w,a.x-d.x,a.y-d.y)}e=d.ka&&!d.ka.Sf();f=a.ka&&!a.ka.Sf();e?(d.ka.If(d.width,d.height,d.g),this.Yc.Lp(d.ka)):this.Yc.pg(d.Sb,d.x,d.y,d.width,d.height);e=this.Yc;f?(a.ka.If(a.width,a.height, a.g),this.tm.Lp(a.ka)):this.tm.pg(a.Sb,a.x,a.y,a.width,a.height);w=this.tm;f=0;for(l=e.Vc;f<l;f++)c=2*f,g=c+1,s=e.$a[c],h=e.$a[g],e.$a[c]=k.Fb(s+d.x,h+d.y,!0),e.$a[g]=k.Fb(s+d.x,h+d.y,!1);e.xa();f=0;for(l=w.Vc;f<l;f++)c=2*f,g=c+1,s=w.$a[c],h=w.$a[g],w.$a[c]=b.Fb(s+a.x,h+a.y,!0),w.$a[g]=b.Fb(s+a.x,h+a.y,!1);w.xa();return e.ah(w,0,0)};var y=new va;new ua(0,0,0,0);var D=[];m.prototype.Wp=function(d,a){var k,f,b,l,c=a.Oa,g=d.x,s=d.y;d.Gw(c,D);var h=a.ka&&!a.ka.Sf();k=0;for(f=D.length;k<f;++k)if(b=D[k], l=b.Qw,c.mu(l,g,s)&&(y.Sh(l),y.offset(g,s),y.ko(a.Sb)))if(h)if(a.ka.If(a.width,a.height,a.g),b.Zl){if(b.Zl.ah(a.ka,a.x-(g+l.left),a.y-(s+l.top)))return D.length=0,!0}else{if(this.Yc.pg(y,0,0,l.right-l.left,l.bottom-l.top),this.Yc.ah(a.ka,a.x,a.y))return D.length=0,!0}else if(b.Zl){if(this.Yc.pg(a.Sb,0,0,a.width,a.height),b.Zl.ah(this.Yc,-(g+l.left),-(s+l.top)))return D.length=0,!0}else return D.length=0,!0;D.length=0;return!1};m.prototype.cq=function(d,a){if(!a)return!1;var k,b,f,l,c;k=0;for(b=d.Ha.length;k< b;k++)if(d.Ha[k].behavior instanceof a)return!0;if(!d.F)for(k=0,b=d.za.length;k<b;k++)for(c=d.za[k],f=0,l=c.Ha.length;f<l;f++)if(c.Ha[f].behavior instanceof a)return!0;return!1};m.prototype.dq=function(d){return this.cq(d,cc.aw)};m.prototype.Am=function(d){return this.cq(d,cc.bw)};m.prototype.ts=function(d,a){var k,b,f;k=0;for(b=this.dm.length;k<b;k++)if(f=this.dm[k],f[0]==d&&f[1]==a||f[0]==a&&f[1]==d)return!0;return!1};var k=-1;m.prototype.trigger=function(d,a,n){if(!this.ra)return!1;var b=this.ra.Qe; if(!b)return!1;var f=!1,l,c,g;k++;var s=b.Jk;c=0;for(g=s.length;c<g;++c)l=this.$p(d,a,s[c],n),f=f||l;l=this.$p(d,a,b,n);k--;return f||l};m.prototype.$p=function(d,a,k,b){var f=!1,l,c,g,s;if(a)for(g=this.ym(d,a,a.type.name,k,b),f=f||g,s=a.type.za,l=0,c=s.length;l<c;++l)g=this.ym(d,a,s[l].name,k,b),f=f||g;else g=this.ym(d,a,"system",k,b),f=f||g;return f};m.prototype.ym=function(d,a,k,f,b){var l,c=!1,g=!1,g="undefined"!==typeof b,s=(g?f.Jn:f.aq)[k];if(!s)return c;var h=null;f=0;for(l=s.length;f<l;++f)if(s[f].method== d){h=s[f].Kg;break}if(!h)return c;d=g?h[b]:h;if(!d)return null;f=0;for(l=d.length;f<l;f++)b=d[f][0],g=d[f][1],g=this.xt(a,k,b,g),c=c||g;return c};m.prototype.xt=function(d,a,n,f){var b,l,c=!1;this.zm++;var g=this.hb().fb;g&&this.Lh(g.Ce);var s=1<this.zm;this.Lh(n.Ce);s&&this.Yu();var h=this.Hj(n);h.fb=n;d&&(b=this.types[a].H(),b.O=!1,b.c.length=1,b.c[0]=d,this.types[a].qc());d=!0;if(n.parent){a=h.Vp;for(b=n.parent;b;)a.push(b),b=b.parent;a.reverse();b=0;for(l=a.length;b<l;b++)if(!a[b].hv()){d=!1; break}}d&&(this.Lg++,n.Uc?n.gv(f):n.Ka(),c=c||h.kf);this.Cj();s&&this.Ru();this.rd(n.Ce);g&&this.rd(g.Ce);this.se&&0===this.Rc&&0===k&&!this.rl&&this.wb();this.zm--;return c};m.prototype.Rg=function(){var d=this.hb();return d.fb.Ta[d.Ia]};m.prototype.Yu=function(){this.qj++;this.qj>=this.El.length&&this.El.push([])};m.prototype.Ru=function(){this.qj--};m.prototype.Rn=function(){return this.El[this.qj]};m.prototype.Hj=function(d){this.Mi++;this.Mi>=this.Mk.length&&this.Mk.push(new Pb);var a=this.hb(); a.reset(d);return a};m.prototype.Cj=function(){this.Mi--};m.prototype.hb=function(){return this.Mk[this.Mi]};m.prototype.Ap=function(){this.rj++;this.rj>=this.Gl.length&&this.Gl.push(aa({name:void 0,index:0,bb:!1}));var d=this.It();d.name=void 0;d.index=0;d.bb=!1;return d};m.prototype.vp=function(){this.rj--};m.prototype.It=function(){return this.Gl[this.rj]};m.prototype.Sn=function(d,a){for(var k,b,f,l,c,g;a;){k=0;for(b=a.Hc.length;k<b;k++)if(g=a.Hc[k],g instanceof Qb&&kb(d,g.name))return g;a=a.parent}k= 0;for(b=this.Hd.length;k<b;k++)for(c=this.Hd[k],f=0,l=c.qe.length;f<l;f++)if(g=c.qe[f],g instanceof Qb&&kb(d,g.name))return g;return null};m.prototype.Vn=function(d){var a,k;a=0;for(k=this.Tc.length;a<k;a++)if(this.Tc[a].Z===d)return this.Tc[a];return null};m.prototype.Xi=function(d){var a,k;a=0;for(k=this.q.length;a<k;a++)if(this.q[a].Z===d)return this.q[a];return null};m.prototype.Jt=function(d){var a,k;a=0;for(k=this.fe.length;a<k;a++)if(this.fe[a].Z===d)return this.fe[a];return null};m.prototype.fu= function(){var d=this,a=this.km,k=this.Nd,f=this.lj,l=!1;this.Qp&&(l=!0,a="__c2_continuouspreview",this.Qp=!1);if(a.length){this.wb();k=this.nv();if(window.indexedDB&&!this.nc)v(a,k,function(){E("Saved state to IndexedDB storage ("+k.length+" bytes)");d.Nd=k;d.trigger(W.prototype.d.ok,null);d.Nd="";l&&b()},function(f){try{localStorage.setItem("__c2save_"+a,k),E("Saved state to WebStorage ("+k.length+" bytes)"),d.Nd=k,d.trigger(W.prototype.d.ok,null),d.Nd="",l&&b()}catch(c){E("Failed to save game state: "+ f+"; "+c)}});else try{localStorage.setItem("__c2save_"+a,k),E("Saved state to WebStorage ("+k.length+" bytes)"),d.Nd=k,this.trigger(W.prototype.d.ok,null),d.Nd="",l&&b()}catch(g){E("Error saving to WebStorage: "+g)}this.Hb=this.lj=this.km=""}f.length&&(window.indexedDB&&!this.nc?c(f,function(a){a?(d.Hb=a,E("Loaded state from IndexedDB storage ("+d.Hb.length+" bytes)")):(d.Hb=localStorage.getItem("__c2save_"+f)||"",E("Loaded state from WebStorage ("+d.Hb.length+" bytes)"));d.Wh=!1;d.Hb.length||d.trigger(W.prototype.d.mk, null)},function(){d.Hb=localStorage.getItem("__c2save_"+f)||"";E("Loaded state from WebStorage ("+d.Hb.length+" bytes)");d.Wh=!1;d.Hb.length||d.trigger(W.prototype.d.mk,null)}):(this.Hb=localStorage.getItem("__c2save_"+f)||"",E("Loaded state from WebStorage ("+this.Hb.length+" bytes)"),this.Wh=!1,d.Hb.length||d.trigger(W.prototype.d.mk,null)),this.km=this.lj="");this.Hb.length&&(this.wb(),this.Bu(this.Hb),this.Nd=this.Hb,this.trigger(W.prototype.d.rr,null),this.Hb=this.Nd="")};m.prototype.nv=function(){var d, a,k,f,b,l,c,g={c2save:!0,version:1,rt:{time:this.Wb.X,walltime:this.yd.X,timescale:this.Af,tickcount:this.zf,execcount:this.Lg,next_uid:this.Dh,running_layout:this.ra.Z,start_time_offset:Date.now()-this.Tj},types:{},layouts:{},events:{groups:{},cnds:{},acts:{},vars:{}}};d=0;for(a=this.q.length;d<a;d++)if(b=this.q[d],!b.F&&!this.dq(b)){l={instances:[]};Ta(b.N)&&(l.ex=h(b.N));k=0;for(f=b.c.length;k<f;k++)l.instances.push(this.jm(b.c[k]));g.types[b.Z.toString()]=l}d=0;for(a=this.Tc.length;d<a;d++)k= this.Tc[d],g.layouts[k.Z.toString()]=k.Ib();f=g.events.groups;d=0;for(a=this.fe.length;d<a;d++)k=this.fe[d],f[k.Z.toString()]=this.Xg[k.Wg].Qf;a=g.events.cnds;for(c in this.Lf)this.Lf.hasOwnProperty(c)&&(d=this.Lf[c],Ta(d.N)&&(a[c]={ex:h(d.N)}));a=g.events.acts;for(c in this.Gf)this.Gf.hasOwnProperty(c)&&(d=this.Gf[c],Ta(d.N)&&(a[c]={ex:d.N}));a=g.events.vars;for(c in this.xg)this.xg.hasOwnProperty(c)&&(d=this.xg[c],d.cj||d.parent&&!d.kh||(a[c]=d.data));g.system=this.vd.Ib();return JSON.stringify(g)}; m.prototype.Cp=function(){var d,a,k,f,b,l;this.Pd={};d=0;for(a=this.q.length;d<a;d++)if(k=this.q[d],!k.F)for(f=0,b=k.c.length;f<b;f++)l=k.c[f],this.Pd[l.uid.toString()]=l};m.prototype.Bu=function(d){d=JSON.parse(d);if(d.c2save&&!(1<d.version)){var a=d.rt;this.Wb.reset();this.Wb.X=a.time;this.yd.reset();this.yd.X=a.walltime||0;this.Af=a.timescale;this.zf=a.tickcount;this.Lg=a.execcount;this.Tj=Date.now()-a.start_time_offset;var k=a.running_layout;if(k!==this.ra.Z)if(k=this.Vn(k))this.Fn(k);else return; var f,b,l,c,g,s,h;s=d.types;for(b in s)if(s.hasOwnProperty(b)&&(c=this.Xi(parseInt(b,10)))&&!c.F&&!this.dq(c)){s[b].ex?c.N=s[b].ex:Ua(c.N);g=c.c;l=s[b].instances;k=0;for(f=qa(g.length,l.length);k<f;k++)this.mj(g[k],l[k]);k=l.length;for(f=g.length;k<f;k++)this.be(g[k]);k=g.length;for(f=l.length;k<f;k++){g=null;if(c.ta.ve&&(g=this.ra.Wi(l[k].w.l),!g))continue;g=this.ne(c.uc,g,!1,0,0,!0);this.mj(g,l[k])}c.rg=!0}this.wb();this.Cp();f=d.layouts;for(b in f)f.hasOwnProperty(b)&&(k=this.Vn(parseInt(b,10)))&& k.Zb(f[b]);f=d.events.groups;for(b in f)f.hasOwnProperty(b)&&(k=this.Jt(parseInt(b,10)))&&this.Xg[k.Wg]&&this.Xg[k.Wg].Jp(f[b]);k=d.events.cnds;for(b in k)k.hasOwnProperty(b)&&this.Lf.hasOwnProperty(b)&&(this.Lf[b].N=k[b].ex);k=d.events.acts;for(b in k)k.hasOwnProperty(b)&&this.Gf.hasOwnProperty(b)&&(this.Gf[b].N=k[b].ex);k=d.events.vars;for(b in k)k.hasOwnProperty(b)&&this.xg.hasOwnProperty(b)&&(this.xg[b].data=k[b]);this.Dh=a.next_uid;this.vd.Zb(d.system);k=0;for(f=this.q.length;k<f;k++)if(c=this.q[k], !c.F)for(b=0,d=c.c.length;b<d;b++){g=c.c[b];if(c.Lb)for(s=g.Vg(),a=g.siblings.length=0,l=c.Tb.length;a<l;a++)h=c.Tb[a],c!==h&&g.siblings.push(h.c[s]);g.cd&&g.cd();if(g.S)for(a=0,l=g.S.length;a<l;a++)s=g.S[a],s.cd&&s.cd()}this.ga=!0}};m.prototype.jm=function(d,a){var k,b,f,l,c;l=d.type;f=l.ta;var g={};a?g.c2=!0:g.uid=d.uid;Ta(d.N)&&(g.ex=h(d.N));if(d.Wa&&d.Wa.length)for(g.ivs={},k=0,b=d.Wa.length;k<b;k++)g.ivs[d.type.ml[k].toString()]=d.Wa[k];if(f.ve){f={x:d.x,y:d.y,w:d.width,h:d.height,l:d.k.Z,zi:d.jd()}; 0!==d.g&&(f.a=d.g);1!==d.opacity&&(f.o=d.opacity);.5!==d.Db&&(f.hX=d.Db);.5!==d.Eb&&(f.hY=d.Eb);0!==d.Kb&&(f.bm=d.Kb);d.visible||(f.v=d.visible);d.Le||(f.ce=d.Le);-1!==d.Ch&&(f.mts=d.Ch);if(l.L.length)for(f.fx=[],k=0,b=l.L.length;k<b;k++)c=l.L[k],f.fx.push({name:c.name,active:d.ee[c.index],params:d.Ba[c.index]});g.w=f}if(d.S&&d.S.length)for(g.behs={},k=0,b=d.S.length;k<b;k++)l=d.S[k],l.Ib&&(g.behs[l.type.Z.toString()]=l.Ib());d.Ib&&(g.data=d.Ib());return g};m.prototype.Lt=function(d,a){var k,b;k= 0;for(b=d.ml.length;k<b;k++)if(d.ml[k]===a)return k;return-1};m.prototype.Gt=function(d,a){var k,b;k=0;for(b=d.S.length;k<b;k++)if(d.S[k].type.Z===a)return k;return-1};m.prototype.mj=function(d,a,k){var b,f,l,c,g;g=d.type;l=g.ta;if(k){if(!a.c2)return}else d.uid=a.uid;a.ex?d.N=a.ex:Ua(d.N);if(f=a.ivs)for(b in f)f.hasOwnProperty(b)&&(k=this.Lt(g,parseInt(b,10)),0>k||k>=d.Wa.length||(d.Wa[k]=f[b]));if(l.ve){l=a.w;d.k.Z!==l.l&&(k=d.k,d.k=this.ra.Wi(l.l),d.k?(k.kg(d,!0),d.k.Bg(d,!0),d.Da(),d.k.Rh(0)): (d.k=k,this.be(d)));d.x=l.x;d.y=l.y;d.width=l.w;d.height=l.h;d.ad=l.zi;d.g=l.hasOwnProperty("a")?l.a:0;d.opacity=l.hasOwnProperty("o")?l.o:1;d.Db=l.hasOwnProperty("hX")?l.hX:.5;d.Eb=l.hasOwnProperty("hY")?l.hY:.5;d.visible=l.hasOwnProperty("v")?l.v:!0;d.Le=l.hasOwnProperty("ce")?l.ce:!0;d.Ch=l.hasOwnProperty("mts")?l.mts:-1;d.Kb=l.hasOwnProperty("bm")?l.bm:0;d.Gg=hb(d.Kb);this.n&&ib(d,d.Kb,this.n);d.Da();if(l.hasOwnProperty("fx"))for(k=0,f=l.fx.length;k<f;k++)c=g.Yk(l.fx[k].name),0>c||(d.ee[c]=l.fx[k].active, d.Ba[c]=l.fx[k].params);d.Zd()}if(g=a.behs)for(b in g)g.hasOwnProperty(b)&&(l=this.Gt(d,parseInt(b,10)),0>l||d.S[l].Zb(g[b]));a.data&&d.Zb(a.data)};Rb=function(d){return new m(document.getElementById(d))};Sb=function(d,a){return new m({dc:!0,width:d,height:a})};window.cr_createRuntime=Rb;window.cr_createDCRuntime=Sb;window.createCocoonJSRuntime=function(){window.c2cocoonjs=!0;var d=document.createElement("screencanvas")||document.createElement("canvas");d.Sw=!0;document.body.appendChild(d);d=new m(d); window.c2runtime=d;window.addEventListener("orientationchange",function(){window.c2runtime.setSize(window.innerWidth,window.innerHeight)});window.c2runtime.setSize(window.innerWidth,window.innerHeight);return d};window.createEjectaRuntime=function(){var d=new m(document.getElementById("canvas"));window.c2runtime=d;window.c2runtime.setSize(window.innerWidth,window.innerHeight);return d}})(); window.cr_getC2Runtime=function(){var e=document.getElementById("c2canvas");return e?e.c2runtime:window.c2runtime?window.c2runtime:null};window.cr_sizeCanvas=function(e,r){if(0!==e&&0!==r){var m=window.cr_getC2Runtime();m&&m.setSize(e,r)}};window.cr_setSuspended=function(e){var r=window.cr_getC2Runtime();r&&r.setSuspended(e)}; (function(){function e(a,b){this.b=a;this.Qe=null;this.scrollX=this.b.Za/2;this.scrollY=this.b.Ya/2;this.scale=1;this.g=0;this.Of=!0;this.name=b[0];this.width=b[1];this.height=b[2];this.fq=b[3];this.Op=b[4];this.Z=b[5];var c=b[6],f,g;this.T=[];this.$g=[];f=0;for(g=c.length;f<g;f++){var h=new Tb(this,c[f]);h.$o=f;this.T.push(h)}c=b[7];this.Ze=[];f=0;for(g=c.length;f<g;f++){var h=c[f],e=this.b.q[h[1]];e.uc||(e.uc=h);this.Ze.push(h);-1===this.$g.indexOf(e)&&this.$g.push(e)}this.L=[];this.ja=[];this.Ba= [];f=0;for(g=b[8].length;f<g;f++)this.L.push({id:b[8][f][0],name:b[8][f][1],tb:-1,xb:!0,index:f}),this.Ba.push(b[8][f][2].slice(0));this.Zd();this.Nh=new ua(0,0,1,1);this.cm=new ua(0,0,1,1);this.xe={}}function r(a,b){return a.ad-b.ad}function m(a,b){this.jb=a;this.b=a.b;this.c=[];this.scale=1;this.g=0;this.Oe=!1;this.Xd=new ua(0,0,0,0);this.Zp=new va;this.ob=this.Na=this.pb=this.Ma=0;this.Cf=!1;this.ae=-1;this.name=b[0];this.index=b[1];this.Z=b[2];this.visible=b[3];this.he=b[4];this.Yd=b[5];this.Dc= b[6];this.Ec=b[7];this.opacity=b[8];this.Sk=b[9];this.$c=b[10];this.bd=b[11];this.Kb=b[12];this.Rs=b[13];this.Gg="source-over";this.zb=this.Ab=0;this.cc=null;this.Yf=p();this.Sd=!0;this.hj=new ua(0,0,-1,-1);this.sc=new ua(0,0,-1,-1);this.$c&&(this.cc=new gb(this.b.Za,this.b.Ya));this.ye=!1;var c=b[14],f,g;this.Tp=[];this.mc=[];this.Hg=[];f=0;for(g=c.length;f<g;f++){var h=c[f],e=this.b.q[h[1]];e.uc||(e.uc=h,e.zs=this.index);this.mc.push(h);-1===this.jb.$g.indexOf(e)&&this.jb.$g.push(e)}Ba(this.Tp, this.mc);this.L=[];this.ja=[];this.Ba=[];f=0;for(g=b[15].length;f<g;f++)this.L.push({id:b[15][f][0],name:b[15][f][1],tb:-1,xb:!0,index:f}),this.Ba.push(b[15][f][2].slice(0));this.Zd();this.Nh=new ua(0,0,1,1);this.cm=new ua(0,0,1,1)}function p(){return h.length?h.pop():[]}function v(a){a.length=0;h.push(a)}e.prototype.lv=function(a){var b=a.type.Z.toString();this.xe.hasOwnProperty(b)||(this.xe[b]=[]);this.xe[b].push(this.b.jm(a))};e.prototype.ao=function(){var a=this.T[0];return!a.Yd&&1===a.opacity&& !a.Sk&&a.visible};e.prototype.Zd=function(){this.ja.length=0;var a,b,c;a=0;for(b=this.L.length;a<b;a++)c=this.L[a],c.xb&&this.ja.push(c)};e.prototype.Xk=function(a){var b,c,f;b=0;for(c=this.L.length;b<c;b++)if(f=this.L[b],f.name===a)return f;return null};var c=[],b=!0;e.prototype.qm=function(){this.Op&&(this.Qe=this.b.Nk[this.Op],this.Qe.Bm());this.b.ra=this;this.scrollX=this.b.Za/2;this.scrollY=this.b.Ya/2;var a,l,g,f,s,h,e;a=0;for(g=this.b.q.length;a<g;a++)if(l=this.b.q[a],!l.F)for(s=l.c,l=0,f= s.length;l<f;l++)if(h=s[l],h.k){var k=h.k.$o;k>=this.T.length&&(k=this.T.length-1);h.k=this.T[k];-1===h.k.c.indexOf(h)&&h.k.c.push(h);h.k.Cf=!0}if(!b)for(a=0,g=this.T.length;a<g;++a)this.T[a].c.sort(r);c.length=0;this.qs();a=0;for(g=this.T.length;a<g;a++)h=this.T[a],h.xs(),h.Dm();s=!1;if(!this.Of){for(e in this.xe)if(this.xe.hasOwnProperty(e)&&(l=this.b.Xi(parseInt(e,10)))&&!l.F&&this.b.Am(l)){f=this.xe[e];a=0;for(g=f.length;a<g;a++){h=null;if(l.ta.ve&&(h=this.Wi(f[a].w.l),!h))continue;h=this.b.ne(l.uc, h,!1,0,0,!0);this.b.mj(h,f[a]);s=!0;c.push(h)}f.length=0}a=0;for(g=this.T.length;a<g;a++)this.T[a].c.sort(r),this.T[a].Cf=!0}s&&(this.b.wb(),this.b.Cp());for(a=0;a<c.length;a++)if(h=c[a],h.type.Lb)for(g=h.Vg(),l=0,f=h.type.Tb.length;l<f;l++)e=h.type.Tb[l],h.type!==e&&(e.c.length>g?h.siblings.push(e.c[g]):e.uc&&(s=this.b.ne(e.uc,h.k,!0,h.x,h.y,!0),this.b.wb(),e.gk(),h.siblings.push(s),c.push(s)));a=0;for(g=this.Ze.length;a<g;a++)this.b.ne(this.Ze[a],null,!0);this.b.Bd=null;this.b.wb();if(this.b.qa&& !this.b.Aa)for(a=0,g=this.b.q.length;a<g;a++)e=this.b.q[a],!e.F&&e.c.length&&e.Fj&&e.Fj(this.b.qa);a=0;for(g=c.length;a<g;a++)h=c[a],this.b.trigger(Object.getPrototypeOf(h.type.ta).d.kk,h);c.length=0;this.b.trigger(W.prototype.d.Qm,null);this.Of=!1};e.prototype.ws=function(){var a,b,c,f,g;b=a=0;for(c=this.Ze.length;a<c;a++)f=this.Ze[a],g=this.b.q[f[1]],g.global?this.b.ne(f,null,!0):(this.Ze[b]=f,b++);this.Ze.length=b};e.prototype.uv=function(){this.b.trigger(W.prototype.d.Pm,null);this.b.vd.Pb.length= 0;var a,c,g,f,h,e;if(!this.Of)for(a=0,c=this.T.length;a<c;a++)for(this.T[a].Em(),h=this.T[a].c,g=0,f=h.length;g<f;g++)e=h[g],e.type.global||this.b.Am(e.type)&&this.lv(e);a=0;for(c=this.T.length;a<c;a++){h=this.T[a].c;g=0;for(f=h.length;g<f;g++)e=h[g],e.type.global||this.b.be(e);this.b.wb();h.length=0;this.T[a].Cf=!0}a=0;for(c=this.b.q.length;a<c;a++)if(h=this.b.q[a],!(h.global||h.ta.ve||h.ta.Rj||h.F)){g=0;for(f=h.c.length;g<f;g++)this.b.be(h.c[g]);this.b.wb()}b=!1};new ua(0,0,0,0);e.prototype.Gd= function(a){var b,c=a,f=!1,g=!this.b.xc;g&&(this.b.kj||(this.b.kj=document.createElement("canvas"),b=this.b.kj,b.width=this.b.W,b.height=this.b.V,this.b.Ao=b.getContext("2d"),f=!0),b=this.b.kj,c=this.b.Ao,b.width!==this.b.W&&(b.width=this.b.W,f=!0),b.height!==this.b.V&&(b.height=this.b.V,f=!0),f&&(c.webkitImageSmoothingEnabled=this.b.ea,c.mozImageSmoothingEnabled=this.b.ea,c.msImageSmoothingEnabled=this.b.ea,c.imageSmoothingEnabled=this.b.ea));c.globalAlpha=1;c.globalCompositeOperation="source-over"; this.b.uk&&!this.ao()&&c.clearRect(0,0,this.b.W,this.b.V);var h,e,f=0;for(h=this.T.length;f<h;f++)e=this.T[f],e.visible&&0<e.opacity&&11!==e.Kb&&(e.c.length||!e.Yd)?e.Gd(c):e.Dm();g&&a.drawImage(b,0,0,this.b.width,this.b.height)};e.prototype.wc=function(a){var b=0<this.ja.length||this.b.vg||!this.b.xc;if(b){this.b.Yb||(this.b.Yb=a.me(this.b.W,this.b.V,this.b.ea));if(this.b.Yb.Eg!==this.b.W||this.b.Yb.Dg!==this.b.V)a.deleteTexture(this.b.Yb),this.b.Yb=a.me(this.b.W,this.b.V,this.b.ea);a.td(this.b.Yb); this.b.xc||a.Be(this.b.W,this.b.V)}else this.b.Yb&&(a.td(null),a.deleteTexture(this.b.Yb),this.b.Yb=null);this.b.uk&&!this.ao()&&a.clear(0,0,0,0);var c,f,g;c=0;for(f=this.T.length;c<f;c++)g=this.T[c],g.visible&&0<g.opacity&&(g.c.length||!g.Yd)?g.wc(a):g.Dm();b&&(0===this.ja.length||1===this.ja.length&&this.b.xc?(1===this.ja.length?(b=this.ja[0].index,a.ud(this.ja[0].tb),a.ng(null,1/this.b.W,1/this.b.V,0,0,1,1,this.scale,this.g,0,0,this.b.W/2,this.b.V/2,this.Ba[b]),a.Gj(this.ja[0].tb)&&(this.b.ga= !0)):a.ud(0),this.b.xc||a.Be(this.b.width,this.b.height),a.td(null),a.wf(1),a.ec(this.b.Yb),a.Ip(),a.ze(),a.Ge(),b=this.b.width/2,c=this.b.height/2,a.Ij(-b,c,b,c,b,-c,-b,-c),a.ec(null)):this.em(a,null,null,null))};e.prototype.Ug=function(){return 0<this.ja.length||this.b.vg||!this.b.xc?this.b.Yb:null};e.prototype.Wn=function(){var a=this.T[0].Qc(),b,c,f;b=1;for(c=this.T.length;b<c;b++)f=this.T[b],(0!==f.Dc||0!==f.Ec)&&f.Qc()<a&&(a=f.Qc());return a};e.prototype.Gp=function(a){if(!this.fq){var b=1/ this.Wn()*this.b.W/2;a>this.width-b&&(a=this.width-b);a<b&&(a=b)}this.scrollX!==a&&(this.scrollX=a,this.b.ga=!0)};e.prototype.Hp=function(a){if(!this.fq){var b=1/this.Wn()*this.b.V/2;a>this.height-b&&(a=this.height-b);a<b&&(a=b)}this.scrollY!==a&&(this.scrollY=a,this.b.ga=!0)};e.prototype.qs=function(){this.Gp(this.scrollX);this.Hp(this.scrollY)};e.prototype.em=function(a,b,c,f){var g=c?c.ja:b?b.ja:this.ja,h=1,e=0,k=0,d=0,q=this.b.W,n=this.b.V;c?(h=c.k.Qc(),e=c.k.gb(),k=c.k.Ma,d=c.k.Na,q=c.k.pb,n= c.k.ob):b&&(h=b.Qc(),e=b.gb(),k=b.Ma,d=b.Na,q=b.pb,n=b.ob);var u=this.b.Vk,m,t,r,p,v=0,x=1,R,O=this.b.W,I=this.b.V,N=O/2,z=I/2,K=b?b.Nh:this.Nh,A=b?b.cm:this.cm,B=0,P=0,J=0,G=0,H=O,ga=O,M=I,na=I,ha=r=0,wa=c?c.k.gb():0;if(c){m=0;for(t=g.length;m<t;m++)r+=a.Pt(g[m].tb),ha+=a.Qt(g[m].tb);p=c.Oa;B=b.Fb(p.left,p.top,!0,!0);J=b.Fb(p.left,p.top,!1,!0);H=b.Fb(p.right,p.bottom,!0,!0);M=b.Fb(p.right,p.bottom,!1,!0);0!==wa&&(m=b.Fb(p.right,p.top,!0,!0),t=b.Fb(p.right,p.top,!1,!0),P=b.Fb(p.left,p.bottom,!0,!0), G=b.Fb(p.left,p.bottom,!1,!0),p=Math.min(B,H,m,P),H=Math.max(B,H,m,P),B=p,p=Math.min(J,M,t,G),M=Math.max(J,M,t,G),J=p);B-=r;J-=ha;H+=r;M+=ha;A.left=B/O;A.top=1-J/I;A.right=H/O;A.bottom=1-M/I;P=B=T(B);G=J=T(J);ga=H=sa(H);na=M=sa(M);P-=r;G-=ha;ga+=r;na+=ha;0>B&&(B=0);0>J&&(J=0);H>O&&(H=O);M>I&&(M=I);0>P&&(P=0);0>G&&(G=0);ga>O&&(ga=O);na>I&&(na=I);K.left=B/O;K.top=1-J/I;K.right=H/O;K.bottom=1-M/I}else K.left=A.left=0,K.top=A.top=0,K.right=A.right=1,K.bottom=A.bottom=1;ha=c&&((c.g||wa)&&a.Kh(g[0].tb)|| 0!==r||0!==ha||1!==c.opacity||c.type.ta.Vo)||b&&!c&&1!==b.opacity;a.Ip();if(ha){u[v]||(u[v]=a.me(O,I,this.b.ea));if(u[v].Eg!==O||u[v].Dg!==I)a.deleteTexture(u[v]),u[v]=a.me(O,I,this.b.ea);a.ud(0);a.td(u[v]);R=na-G;a.clearRect(P,I-G-R,ga-P,R);c?c.wc(a):(a.ec(this.b.pc),a.wf(b.opacity),a.ze(),a.translate(-N,-z),a.Ge(),a.sd(B,M,H,M,H,J,B,J,K));A.left=A.top=0;A.right=A.bottom=1;c&&(p=K.top,K.top=K.bottom,K.bottom=p);v=1;x=0}a.wf(1);r=g.length-1;var wa=a.$l(g[r].tb)||!b&&!c&&!this.b.xc,xa=0;m=0;for(t= g.length;m<t;m++){u[v]||(u[v]=a.me(O,I,this.b.ea));if(u[v].Eg!==O||u[v].Dg!==I)a.deleteTexture(u[v]),u[v]=a.me(O,I,this.b.ea);a.ud(g[m].tb);xa=g[m].index;a.Gj(g[m].tb)&&(this.b.ga=!0);0!=m||ha?(a.ng(f,1/O,1/I,A.left,A.top,A.right,A.bottom,h,e,k,d,(k+q)/2,(d+n)/2,c?c.Ba[xa]:b?b.Ba[xa]:this.Ba[xa]),a.ec(null),m!==r||wa?(a.td(u[v]),R=na-G,p=I-G-R,a.clearRect(P,p,ga-P,R)):(c?a.Ae(c.Ab,c.zb):b&&a.Ae(b.Ab,b.zb),a.td(f)),a.ec(u[x]),a.ze(),a.translate(-N,-z),a.Ge(),a.sd(B,M,H,M,H,J,B,J,K),m!==r||wa||a.ec(null)): (a.td(u[v]),R=na-G,p=I-G-R,a.clearRect(P,p,ga-P,R),c?(a.ng(f,1/c.width,1/c.height,A.left,A.top,A.right,A.bottom,h,e,k,d,(k+q)/2,(d+n)/2,c.Ba[xa]),c.wc(a)):(a.ng(f,1/O,1/I,0,0,1,1,h,e,k,d,(k+q)/2,(d+n)/2,b?b.Ba[xa]:this.Ba[xa]),a.ec(b?this.b.pc:this.b.Yb),a.ze(),a.translate(-N,-z),a.Ge(),a.sd(B,M,H,M,H,J,B,J,K)),A.left=A.top=0,A.right=A.bottom=1,c&&!wa&&(p=M,M=J,J=p));v=0===v?1:0;x=0===v?1:0}wa&&(a.ud(0),c?a.Ae(c.Ab,c.zb):b?a.Ae(b.Ab,b.zb):this.b.xc||(a.Be(this.b.width,this.b.height),N=this.b.width/ 2,z=this.b.height/2,J=B=0,H=this.b.width,M=this.b.height),a.td(f),a.ec(u[x]),a.ze(),a.translate(-N,-z),a.Ge(),c&&1===g.length&&!ha?a.sd(B,J,H,J,H,M,B,M,K):a.sd(B,M,H,M,H,J,B,J,K),a.ec(null))};e.prototype.Wi=function(a){var b,c;b=0;for(c=this.T.length;b<c;b++)if(this.T[b].Z===a)return this.T[b];return null};e.prototype.Ib=function(){var a,b,c,f={sx:this.scrollX,sy:this.scrollY,s:this.scale,a:this.g,w:this.width,h:this.height,fv:this.Of,persist:this.xe,fx:[],layers:{}};a=0;for(b=this.L.length;a<b;a++)c= this.L[a],f.fx.push({name:c.name,active:c.xb,params:this.Ba[c.index]});a=0;for(b=this.T.length;a<b;a++)c=this.T[a],f.layers[c.Z.toString()]=c.Ib();return f};e.prototype.Zb=function(a){var b,c,f,g;this.scrollX=a.sx;this.scrollY=a.sy;this.scale=a.s;this.g=a.a;this.width=a.w;this.height=a.h;this.xe=a.persist;"undefined"!==typeof a.fv&&(this.Of=a.fv);var h=a.fx;b=0;for(c=h.length;b<c;b++)if(f=this.Xk(h[b].name))f.xb=h[b].active,this.Ba[f.index]=h[b].params;this.Zd();b=a.layers;for(g in b)b.hasOwnProperty(g)&& (a=this.Wi(parseInt(g,10)))&&a.Zb(b[g])};Fb=e;m.prototype.Zd=function(){this.ja.length=0;var a,b,c;a=0;for(b=this.L.length;a<b;a++)c=this.L[a],c.xb&&this.ja.push(c)};m.prototype.Xk=function(a){var b,c,f;b=0;for(c=this.L.length;b<c;b++)if(f=this.L[b],f.name===a)return f;return null};m.prototype.xs=function(){var a,b,g,f,h,e;b=a=0;for(g=this.mc.length;a<g;a++){f=this.mc[a];h=this.b.q[f[1]];e=this.b.Am(h);h=!0;if(!e||this.jb.Of)f=this.b.ne(f,this,!0),c.push(f),f.type.global&&(h=!1,this.Hg.push(f.uid)); h&&(this.mc[b]=this.mc[a],b++)}this.mc.length=b;this.b.wb();!this.b.B&&this.L.length&&(this.Kb=this.Rs);this.Gg=hb(this.Kb);this.b.n&&ib(this,this.Kb,this.b.n);this.Sd=!0};m.prototype.kg=function(a,b){var c=Da(this.c,a);0>c||(b&&this.$c&&a.Nb&&a.Nb.right>=a.Nb.left&&(a.xa(),this.cc.update(a,a.Nb,null),a.Nb.set(0,0,-1,-1)),c===this.c.length-1?this.c.pop():(Aa(this.c,c),this.Rh(c)),this.Sd=!0)};m.prototype.Bg=function(a,b){a.ad=this.c.length;this.c.push(a);b&&this.$c&&a.Nb&&a.Da();this.Sd=!0};m.prototype.Vu= function(a){this.c.unshift(a);this.Rh(0)};m.prototype.Gu=function(a,b,c){var f=a.jd();b=b.jd();Aa(this.c,f);f<b&&b--;c&&b++;b===this.c.length?this.c.push(a):this.c.splice(b,0,a);this.Rh(f<b?f:b)};m.prototype.Rh=function(a){-1===this.ae?this.ae=a:a<this.ae&&(this.ae=a);this.Sd=this.Cf=!0};m.prototype.Em=function(){if(this.Cf){-1===this.ae&&(this.ae=0);var a,b,c;if(this.$c)for(a=this.ae,b=this.c.length;a<b;++a)c=this.c[a],c.ad=a,this.cc.Du(c.Nb);else for(a=this.ae,b=this.c.length;a<b;++a)this.c[a].ad= a;this.Cf=!1;this.ae=-1}};m.prototype.Qc=function(a){return this.Mt()*(this.b.xc||a?this.b.Cg:1)};m.prototype.Mt=function(){return(this.scale*this.jb.scale-1)*this.bd+1};m.prototype.gb=function(){return this.Oe?0:Ia(this.jb.g+this.g)};var h=[],t=[],g=[];m.prototype.Xn=function(){this.Em();this.cc.Jj(this.Ma,this.Na,this.pb,this.ob,g);if(!g.length)return p();if(1===g.length){var a=p();Ba(a,g[0]);g.length=0;return a}for(var b=!0;1<g.length;){for(var a=g,c=void 0,f=void 0,h=void 0,e=void 0,m=void 0, c=0,f=a.length;c<f-1;c+=2){var h=a[c],e=a[c+1],m=p(),k=h,d=e,q=m,n=0,u=0,r=0,S=k.length,C=d.length,oa=void 0,fa=void 0;for(q.length=S+C;n<S&&u<C;++r)oa=k[n],fa=d[u],oa.ad<fa.ad?(q[r]=oa,++n):(q[r]=fa,++u);for(;n<S;++n,++r)q[r]=k[n];for(;u<C;++u,++r)q[r]=d[u];b||(v(h),v(e));t.push(m)}1===f%2&&(b?(h=p(),Ba(h,a[f-1]),t.push(h)):t.push(a[f-1]));Ba(a,t);t.length=0;b=!1}a=g[0];g.length=0;return a};m.prototype.Gd=function(a){this.ye=this.Sk||1!==this.opacity||0!==this.Kb;var b=this.b.canvas,c=a,f=!1;this.ye&& (this.b.jj||(this.b.jj=document.createElement("canvas"),b=this.b.jj,b.width=this.b.W,b.height=this.b.V,this.b.zo=b.getContext("2d"),f=!0),b=this.b.jj,c=this.b.zo,b.width!==this.b.W&&(b.width=this.b.W,f=!0),b.height!==this.b.V&&(b.height=this.b.V,f=!0),f&&(c.webkitImageSmoothingEnabled=this.b.ea,c.mozImageSmoothingEnabled=this.b.ea,c.msImageSmoothingEnabled=this.b.ea,c.imageSmoothingEnabled=this.b.ea),this.Yd&&c.clearRect(0,0,this.b.W,this.b.V));c.globalAlpha=1;c.globalCompositeOperation="source-over"; this.Yd||(c.fillStyle="rgb("+this.he[0]+","+this.he[1]+","+this.he[2]+")",c.fillRect(0,0,this.b.W,this.b.V));c.save();this.Oe=!0;var f=this.Bb(0,0,!0,!0),g=this.Bb(0,0,!1,!0);this.Oe=!1;this.b.qd&&(f=Math.round(f),g=Math.round(g));this.gm(f,g,c);var h=this.Qc();c.scale(h,h);c.translate(-f,-g);this.$c?(this.sc.left=this.cc.gc(this.Ma),this.sc.top=this.cc.hc(this.Na),this.sc.right=this.cc.gc(this.pb),this.sc.bottom=this.cc.hc(this.ob),this.Sd||!this.sc.Li(this.hj)?(v(this.Yf),f=this.Xn(),this.Sd=!1, this.hj.Bi(this.sc)):f=this.Yf):f=this.c;for(var e,k=null,g=0,h=f.length;g<h;++g)e=f[g],e!==k&&(this.Os(e,c),k=e);this.$c&&(this.Yf=f);c.restore();this.ye&&(a.globalCompositeOperation=this.Gg,a.globalAlpha=this.opacity,a.drawImage(b,0,0))};m.prototype.Os=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.xa();var c=a.Oa;c.right<this.Ma||c.bottom<this.Na||c.left>this.pb||c.top>this.ob||(b.globalCompositeOperation=a.Gg,a.Gd(b))}};m.prototype.Dm=function(){this.Oe=!0;var a=this.Bb(0,0,!0,!0),b= this.Bb(0,0,!1,!0);this.Oe=!1;this.b.qd&&(a=Math.round(a),b=Math.round(b));this.gm(a,b,null)};m.prototype.gm=function(a,b,c){var f=this.Qc();this.Ma=a;this.Na=b;this.pb=a+1/f*this.b.W;this.ob=b+1/f*this.b.V;a=this.gb();0!==a&&(c&&(c.translate(this.b.W/2,this.b.V/2),c.rotate(-a),c.translate(this.b.W/-2,this.b.V/-2)),this.Xd.set(this.Ma,this.Na,this.pb,this.ob),this.Xd.offset((this.Ma+this.pb)/-2,(this.Na+this.ob)/-2),this.Zp.Mp(this.Xd,a),this.Zp.qn(this.Xd),this.Xd.offset((this.Ma+this.pb)/2,(this.Na+ this.ob)/2),this.Ma=this.Xd.left,this.Na=this.Xd.top,this.pb=this.Xd.right,this.ob=this.Xd.bottom)};m.prototype.wc=function(a){var b=0,c=0;if(this.ye=this.Sk||1!==this.opacity||0<this.ja.length||0!==this.Kb){this.b.pc||(this.b.pc=a.me(this.b.W,this.b.V,this.b.ea));if(this.b.pc.Eg!==this.b.W||this.b.pc.Dg!==this.b.V)a.deleteTexture(this.b.pc),this.b.pc=a.me(this.b.W,this.b.V,this.b.ea);a.td(this.b.pc);this.Yd&&a.clear(0,0,0,0)}this.Yd||a.clear(this.he[0]/255,this.he[1]/255,this.he[2]/255,1);this.Oe= !0;var f=this.Bb(0,0,!0,!0),b=this.Bb(0,0,!1,!0);this.Oe=!1;this.b.qd&&(f=Math.round(f),b=Math.round(b));this.gm(f,b,null);f=this.Qc();a.ze();a.scale(f,f);a.Ep(-this.gb());a.translate((this.Ma+this.pb)/-2,(this.Na+this.ob)/-2);a.Ge();this.$c?(this.sc.left=this.cc.gc(this.Ma),this.sc.top=this.cc.hc(this.Na),this.sc.right=this.cc.gc(this.pb),this.sc.bottom=this.cc.hc(this.ob),this.Sd||!this.sc.Li(this.hj)?(v(this.Yf),b=this.Xn(),this.Sd=!1,this.hj.Bi(this.sc)):b=this.Yf):b=this.c;var g,h,e=null,c=0; for(g=b.length;c<g;++c)h=b[c],h!==e&&(this.Ps(b[c],a),e=h);this.$c&&(this.Yf=b);this.ye&&(b=this.ja.length?this.ja[0].tb:0,c=this.ja.length?this.ja[0].index:0,0===this.ja.length||1===this.ja.length&&!a.$l(b)&&1===this.opacity?(1===this.ja.length?(a.ud(b),a.ng(this.jb.Ug(),1/this.b.W,1/this.b.V,0,0,1,1,f,this.gb(),this.Ma,this.Na,(this.Ma+this.pb)/2,(this.Na+this.ob)/2,this.Ba[c]),a.Gj(b)&&(this.b.ga=!0)):a.ud(0),a.td(this.jb.Ug()),a.wf(this.opacity),a.ec(this.b.pc),a.Ae(this.Ab,this.zb),a.ze(),a.Ge(), f=this.b.W/2,b=this.b.V/2,a.Ij(-f,b,f,b,f,-b,-f,-b),a.ec(null)):this.jb.em(a,this,null,this.jb.Ug()))};m.prototype.Ps=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.xa();var c=a.Oa;c.right<this.Ma||c.bottom<this.Na||c.left>this.pb||c.top>this.ob||(a.mq?this.Qs(a,b):(b.ud(0),b.Ae(a.Ab,a.zb),a.wc(b)))}};m.prototype.Qs=function(a,b){var c=a.ja[0].tb,f=a.ja[0].index,g=this.Qc();if(1!==a.ja.length||b.$l(c)||b.Xu(c)||(a.g||a.k.gb())&&b.Kh(c)||1!==a.opacity||a.type.ta.Vo)this.jb.em(b,this,a,this.ye? this.b.pc:this.jb.Ug()),b.ze(),b.scale(g,g),b.Ep(-this.gb()),b.translate((this.Ma+this.pb)/-2,(this.Na+this.ob)/-2),b.Ge();else{b.ud(c);b.Ae(a.Ab,a.zb);b.Gj(c)&&(this.b.ga=!0);var h=0,e=0,k=0,d=0;b.Kh(c)&&(c=a.Oa,h=this.Fb(c.left,c.top,!0,!0),e=this.Fb(c.left,c.top,!1,!0),k=this.Fb(c.right,c.bottom,!0,!0),c=this.Fb(c.right,c.bottom,!1,!0),h/=windowWidth,e=1-e/windowHeight,k/=windowWidth,d=1-c/windowHeight);b.ng(this.ye?this.b.pc:this.jb.Ug(),1/a.width,1/a.height,h,e,k,d,g,this.gb(),this.Ma,this.Na, (this.Ma+this.pb)/2,(this.Na+this.ob)/2,a.Ba[f]);a.wc(b)}};m.prototype.Bb=function(a,b,c,f){var g=this.b.devicePixelRatio;this.b.df&&(a*=g,b*=g);var g=this.b.rp,h=this.b.sp,g=(this.jb.scrollX-g)*this.Dc+g,h=(this.jb.scrollY-h)*this.Ec+h,e=g,k=h,d=1/this.Qc(!f);f?(e-=this.b.W*d/2,k-=this.b.V*d/2):(e-=this.b.width*d/2,k-=this.b.height*d/2);e+=a*d;k+=b*d;b=this.gb();0!==b&&(e-=g,k-=h,a=Math.cos(b),b=Math.sin(b),f=e*a-k*b,k=k*a+e*b,e=f+g,k+=h);return c?e:k};m.prototype.Fb=function(a,b,c,f){var g=this.b.rp, h=this.b.sp,e=(this.jb.scrollX-g)*this.Dc+g,k=(this.jb.scrollY-h)*this.Ec+h,h=e,g=k,d=this.gb();if(0!==d){a-=e;b-=k;var q=Math.cos(-d),d=Math.sin(-d),n=a*q-b*d;b=b*q+a*d;a=n+e;b+=k}e=1/this.Qc(!f);f?(h-=this.b.W*e/2,g-=this.b.V*e/2):(h-=this.b.width*e/2,g-=this.b.height*e/2);h=(a-h)/e;g=(b-g)/e;a=this.b.devicePixelRatio;this.b.df&&!f&&(h/=a,g/=a);return c?h:g};m.prototype.Ib=function(){var a,b,c,f={s:this.scale,a:this.g,vl:this.Ma,vt:this.Na,vr:this.pb,vb:this.ob,v:this.visible,bc:this.he,t:this.Yd, px:this.Dc,py:this.Ec,o:this.opacity,zr:this.bd,fx:[],cg:this.Hg,instances:[]};a=0;for(b=this.L.length;a<b;a++)c=this.L[a],f.fx.push({name:c.name,active:c.xb,params:this.Ba[c.index]});return f};m.prototype.Zb=function(a){var b,c,f;this.scale=a.s;this.g=a.a;this.Ma=a.vl;this.Na=a.vt;this.pb=a.vr;this.ob=a.vb;this.visible=a.v;this.he=a.bc;this.Yd=a.t;this.Dc=a.px;this.Ec=a.py;this.opacity=a.o;this.bd=a.zr;this.Hg=a.cg||[];Ba(this.mc,this.Tp);var g=new ca;b=0;for(f=this.Hg.length;b<f;++b)g.add(this.Hg[b]); c=b=0;for(f=this.mc.length;b<f;++b)g.contains(this.mc[b][2])||(this.mc[c]=this.mc[b],++c);this.mc.length=c;c=a.fx;b=0;for(f=c.length;b<f;b++)if(a=this.Xk(c[b].name))a.xb=c[b].active,this.Ba[a.index]=c[b].params;this.Zd();this.c.sort(r);this.Cf=!0};Tb=m})(); (function(){function e(a,d){var b,c=a.length;switch(c){case 0:return!0;case 1:return a[0]===d[0];case 2:return a[0]===d[0]&&a[1]===d[1];default:for(b=0;b<c;b++)if(a[b]!==d[b])return!1;return!0}}function r(a,d){return a.index-d.index}function m(a){var d,b,c,f;2===a.length?a[0].index>a[1].index&&(d=a[0],a[0]=a[1],a[1]=d):2<a.length&&a.sort(r);a.length>=s.length&&(s.length=a.length+1);s[a.length]||(s[a.length]=[]);f=s[a.length];d=0;for(b=f.length;d<b;d++)if(c=f[d],e(a,c))return c;f.push(a);return a} function p(a,d){this.b=a;this.aq={};this.Jn={};this.hl=!1;this.eo=new ca;this.Jk=[];this.vk=[];this.name=d[0];var b=d[1];this.qe=[];var c,f;c=0;for(f=b.length;c<f;c++)this.ho(b[c],null,this.qe)}function v(a){this.type=a;this.c=[];this.da=[];this.O=!0}function c(a,d,b){this.sheet=a;this.parent=d;this.b=a.b;this.ca=[];this.Ce=[];this.bo=this.ck=this.xm=this.$i=this.group=this.pm=!1;this.Ta=[];this.Jc=[];this.Hc=[];this.Wg="";this.Qf=this.$i=this.group=!1;this.yi=null;b[1]&&(this.Wg=b[1][1].toLowerCase(), this.group=!0,this.$i=!!b[1][0],this.yi=[],this.Qf=this.$i,this.b.fe.push(this),this.b.Xg[this.Wg]=this);this.Uc=b[2];this.Z=b[4];this.group||(this.b.pn[this.Z.toString()]=this);var c=b[5];a=0;for(d=c.length;a<d;a++){var f=new Ub(this,c[a]);f.index=a;this.Ta.push(f);this.hn(f.type)}c=b[6];a=0;for(d=c.length;a<d;a++)f=new Vb(this,c[a]),f.index=a,this.Jc.push(f);if(8===b.length)for(b=b[7],a=0,d=b.length;a<d;a++)this.sheet.ho(b[a],this,this.Hc);this.dj=!1;this.Ta.length&&(this.dj=null==this.Ta[0].type&& this.Ta[0].qb==W.prototype.d.Jq)}function b(a,d){var b,c,f;if(a&&(-1===d.indexOf(a)&&d.push(a),a.Lb))for(b=0,c=a.Tb.length;b<c;b++)f=a.Tb[b],a!==f&&-1===d.indexOf(f)&&d.push(f)}function h(a,d){this.ic=a;this.sheet=a.sheet;this.b=a.b;this.R=[];this.Ca=[];this.N={};this.index=-1;this.zg=!1;this.qb=this.b.de(d[1]);this.trigger=0<d[3];this.In=2===d[3];this.md=d[4];this.nl=d[5];this.yu=d[6];this.Z=d[7];this.b.Lf[this.Z.toString()]=this;-1===d[0]?(this.type=null,this.Ka=this.im,this.Ke=null,this.Mc=-1): (this.type=this.b.q[d[0]],this.Ka=this.yu?this.jv:this.hm,d[2]?(this.Ke=this.type.Ui(d[2]),this.Mc=this.type.Wk(d[2])):(this.Ke=null,this.Mc=-1),this.ic.parent&&this.ic.parent.Qj());this.In&&(this.Ka=this.kv);if(10===d.length){var b,c,f=d[9];b=0;for(c=f.length;b<c;b++){var g=new Wb(this,f[b]);this.R.push(g)}this.Ca.length=f.length}}function t(a,d){this.ic=a;this.sheet=a.sheet;this.b=a.b;this.R=[];this.Ca=[];this.N={};this.index=-1;this.zg=!1;this.qb=this.b.de(d[1]);-1===d[0]?(this.type=null,this.Ka= this.im,this.Ke=null,this.Mc=-1):(this.type=this.b.q[d[0]],this.Ka=this.hm,d[2]?(this.Ke=this.type.Ui(d[2]),this.Mc=this.type.Wk(d[2])):(this.Ke=null,this.Mc=-1));this.Z=d[3];this.b.Gf[this.Z.toString()]=this;if(6===d.length){var b,c,f=d[5];b=0;for(c=f.length;b<c;b++){var g=new Wb(this,f[b]);this.R.push(g)}this.Ca.length=f.length}}function g(){D++;y.length===D&&y.push(new Xb);return y[D]}function a(a,d){this.Cc=a;this.ic=a.ic;this.sheet=a.sheet;this.b=a.b;this.type=d[0];this.gd=null;this.Wd=0;this.get= null;this.yn=0;this.jb=null;this.key=0;this.object=null;this.index=0;this.bi=this.xf=this.bi=this.xf=this.Kn=this.Re=this.ci=null;this.Ic=!1;var b,c,f;switch(d[0]){case 0:case 7:this.gd=new Yb(this,d[1]);this.Wd=0;this.get=this.Vt;break;case 1:this.gd=new Yb(this,d[1]);this.Wd=0;this.get=this.Wt;break;case 5:this.gd=new Yb(this,d[1]);this.Wd=0;this.get=this.$t;break;case 3:case 8:this.yn=d[1];this.get=this.Tt;break;case 6:this.jb=this.b.Zf[d[1]];this.get=this.au;break;case 9:this.key=d[1];this.get= this.Zt;break;case 4:this.object=this.b.q[d[1]];this.get=this.bu;this.ic.hn(this.object);this.Cc instanceof Vb?this.ic.Qj():this.ic.parent&&this.ic.parent.Qj();break;case 10:this.index=d[1];a.type.F?(this.get=this.Xt,this.Ic=!0):this.get=this.Yt;break;case 11:this.ci=d[1];this.Re=null;this.get=this.Ut;break;case 2:case 12:this.Kn=d[1];this.get=this.St;break;case 13:for(this.get=this.cu,this.xf=[],this.bi=[],b=1,c=d.length;b<c;b++)f=new Wb(this.Cc,d[b]),this.xf.push(f),this.bi.push(0)}}function l(a, d,b){this.sheet=a;this.parent=d;this.b=a.b;this.ca=[];this.name=b[1];this.di=b[2];this.kl=b[3];this.kh=!!b[4];this.cj=!!b[5];this.Z=b[6];this.b.xg[this.Z.toString()]=this;this.data=this.kl;this.parent?(this.qf=this.kh||this.cj?-1:this.b.sv++,this.b.ks.push(this)):(this.qf=-1,this.b.js.push(this))}function w(a,d,b){this.sheet=a;this.parent=d;this.b=a.b;this.ca=[];this.Zg=null;this.iu=b[1];this.xb=!0}function f(){this.Vp=[];this.reset(null)}var s=[];p.prototype.toString=function(){return this.name}; p.prototype.ho=function(a,d,b){switch(a[0]){case 0:a=new Zb(this,d,a);if(a.Uc)for(b.push(a),b=0,d=a.Ta.length;b<d;b++)a.Ta[b].trigger&&this.io(a,b);else a.so()?this.io(a,0):b.push(a);break;case 1:a=new Qb(this,d,a);b.push(a);break;case 2:a=new $b(this,d,a),b.push(a)}};p.prototype.Ga=function(){var a,d;a=0;for(d=this.qe.length;a<d;a++)this.qe[a].Ga(a<d-1&&this.qe[a+1].dj)};p.prototype.Bm=function(){this.Jk.length=0;this.vk.length=0;this.gn(this);this.vk.length=0};p.prototype.gn=function(a){var d,b, c,f,g=a.Jk,h=a.vk,e=this.eo.He();d=0;for(b=e.length;d<b;++d)c=e[d],f=c.Zg,!c.xb||a===f||-1<h.indexOf(f)||(h.push(f),f.gn(a),g.push(f))};p.prototype.Ka=function(a){this.b.Rw||(this.hl=!0,a||(this.b.rl=!0));var d,b;d=0;for(b=this.qe.length;d<b;d++){var c=this.qe[d];c.Ka();this.b.Dk(c.ca);this.b.se&&this.b.wb()}a||(this.b.rl=!1)};p.prototype.io=function(a,d){a.Uc||this.b.ek.push(a);var b,c,f=a.Ta[d],g;g=f.type?f.type.name:"system";var h=(b=f.In)?this.Jn:this.aq;h[g]||(h[g]=[]);g=h[g];h=f.qb;if(b){if(f.R.length&& (f=f.R[0],1===f.type&&2===f.gd.type)){f=f.gd.value.toLowerCase();b=0;for(c=g.length;b<c;b++)if(g[b].method==h){b=g[b].Kg;b[f]?b[f].push([a,d]):b[f]=[[a,d]];return}b={};b[f]=[[a,d]];g.push({method:h,Kg:b})}}else{b=0;for(c=g.length;b<c;b++)if(g[b].method==h){g[b].Kg.push([a,d]);return}X&&h===X.prototype.d.Ff?g.unshift({method:h,Kg:[[a,d]]}):g.push({method:h,Kg:[[a,d]]})}};Gb=p;v.prototype.gl=function(){return this.O?this.type.c.length:this.c.length};v.prototype.Cb=function(){return this.O?this.type.c: this.c};v.prototype.Ih=function(a){a&&(a.b.hb().fb.Uc?(this.O&&(this.c.length=0,Ba(this.da,a.type.c),this.O=!1),a=this.da.indexOf(a),-1!==a&&(this.c.push(this.da[a]),this.da.splice(a,1))):(this.O=!1,this.c.length=1,this.c[0]=a))};ob=v;window._c2hh_="CFF39BA4132C0EA6E8A7303A5381A8E04976E3E3";c.prototype.Ga=function(a){var d,b=this.parent;if(this.group)for(this.ck=!0;b;){if(!b.group){this.ck=!1;break}b=b.parent}this.xm=!this.so()&&(!this.parent||this.parent.group&&this.parent.ck);this.bo=!!a;this.Ce= this.ca.slice(0);for(b=this.parent;b;){a=0;for(d=b.ca.length;a<d;a++)this.hs(b.ca[a]);b=b.parent}this.ca=m(this.ca);this.Ce=m(this.Ce);a=0;for(d=this.Ta.length;a<d;a++)this.Ta[a].Ga();a=0;for(d=this.Jc.length;a<d;a++)this.Jc[a].Ga();a=0;for(d=this.Hc.length;a<d;a++)this.Hc[a].Ga(a<d-1&&this.Hc[a+1].dj)};c.prototype.Jp=function(a){if(this.Qf!==!!a){this.Qf=!!a;var d;a=0;for(d=this.yi.length;a<d;++a)this.yi[a].hq();0<d&&this.b.ra.Qe&&this.b.ra.Qe.Bm()}};c.prototype.hn=function(a){b(a,this.ca)};c.prototype.hs= function(a){b(a,this.Ce)};c.prototype.Qj=function(){this.pm=!0;this.parent&&this.parent.Qj()};c.prototype.so=function(){return this.Ta.length?this.Ta[0].trigger:!1};c.prototype.Ka=function(){var a,d=!1,b,c=this.b,f=this.b.hb();f.fb=this;var g=this.Ta;this.dj||(f.Lk=!1);if(this.Uc){0===g.length&&(d=!0);f.Ia=0;for(a=g.length;f.Ia<a;f.Ia++)g[f.Ia].trigger||(b=g[f.Ia].Ka())&&(d=!0);(f.kf=d)&&this.Lj()}else{f.Ia=0;for(a=g.length;f.Ia<a;f.Ia++)if(b=g[f.Ia].Ka(),!b){f.kf=!1;this.xm&&c.se&&c.wb();return}f.kf= !0;this.Lj()}this.Ts(f)};c.prototype.Ts=function(a){a.kf&&this.bo&&(a.Lk=!0);this.xm&&this.b.se&&this.b.wb()};c.prototype.gv=function(a){this.b.hb().fb=this;this.Ta[a].Ka()&&(this.Lj(),this.b.hb().kf=!0)};c.prototype.Lj=function(){var a=this.b.hb(),d;a.Qb=0;for(d=this.Jc.length;a.Qb<d;a.Qb++)if(this.Jc[a.Qb].Ka())return;this.Fp()};c.prototype.cv=function(){var a=this.b.hb(),d;for(d=this.Jc.length;a.Qb<d;a.Qb++)if(this.Jc[a.Qb].Ka())return;this.Fp()};c.prototype.Fp=function(){if(this.Hc.length){var a, d,b,c,f=this.Hc.length-1;this.b.Hj(this);if(this.pm)for(a=0,d=this.Hc.length;a<d;a++)b=this.Hc[a],(c=!this.ck||!this.group&&a<f)&&this.b.vf(b.ca),b.Ka(),c?this.b.rd(b.ca):this.b.Dk(b.ca);else for(a=0,d=this.Hc.length;a<d;a++)this.Hc[a].Ka();this.b.Cj()}};c.prototype.hv=function(){var a=this.b.hb();a.fb=this;var d=!1,b;a.Ia=0;for(b=this.Ta.length;a.Ia<b;a.Ia++)if(this.Ta[a.Ia].Ka())d=!0;else if(!this.Uc)return!1;return this.Uc?d:!0};c.prototype.lg=function(){this.b.Lg++;var a=this.b.hb().Ia,d=this.b.Hj(this); if(!this.Uc)for(d.Ia=a+1,a=this.Ta.length;d.Ia<a;d.Ia++)if(!this.Ta[d.Ia].Ka()){this.b.Cj();return}this.Lj();this.b.Cj()};c.prototype.ru=function(a){var d=a.index;if(0===d)return!0;for(--d;0<=d;--d)if(this.Ta[d].type===a.type)return!1;return!0};Zb=c;h.prototype.Ga=function(){var a,d,b;a=0;for(d=this.R.length;a<d;a++)b=this.R[a],b.Ga(),b.Ic&&(this.zg=!0)};h.prototype.kv=function(){return!0};h.prototype.im=function(){var a,d;a=0;for(d=this.R.length;a<d;a++)this.Ca[a]=this.R[a].get();return Ra(this.qb.apply(this.b.vd, this.Ca),this.nl)};h.prototype.jv=function(){var a,d;a=0;for(d=this.R.length;a<d;a++)this.Ca[a]=this.R[a].get();a=this.qb.apply(this.Ke?this.Ke:this.type,this.Ca);this.type.qc();return a};h.prototype.hm=function(){var a,d,b,c,f,g,h,e,l=this.type,s=l.H(),m=this.ic.Uc&&!this.trigger;d=0;var t=l.Lb,r=l.F,p=l.Id,y=this.Mc,w=-1<y,v=this.zg,D=this.R,B=this.Ca,P=this.nl,J=this.qb,G;if(v)for(d=0,f=D.length;d<f;++d)g=D[d],g.Ic||(B[d]=g.get(0));else for(d=0,f=D.length;d<f;++d)B[d]=D[d].get(0);if(s.O){s.c.length= 0;s.da.length=0;G=l.c;a=0;for(c=G.length;a<c;++a){e=G[a];if(v)for(d=0,f=D.length;d<f;++d)g=D[d],g.Ic&&(B[d]=g.get(a));w?(d=0,r&&(d=e.type.Nf[p]),d=J.apply(e.S[y+d],B)):d=J.apply(e,B);(h=Ra(d,P))?s.c.push(e):m&&s.da.push(e)}l.finish&&l.finish(!0);s.O=!1;l.qc();return s.gl()}b=0;G=(h=m&&!this.ic.ru(this))?s.da:s.c;var H=!1;a=0;for(c=G.length;a<c;++a){e=G[a];if(v)for(d=0,f=D.length;d<f;++d)g=D[d],g.Ic&&(B[d]=g.get(a));w?(d=0,r&&(d=e.type.Nf[p]),d=J.apply(e.S[y+d],B)):d=J.apply(e,B);if(Ra(d,P))if(H=!0, h){if(s.c.push(e),t)for(d=0,f=e.siblings.length;d<f;d++)g=e.siblings[d],g.type.H().c.push(g)}else{G[b]=e;if(t)for(d=0,f=e.siblings.length;d<f;d++)g=e.siblings[d],g.type.H().c[b]=g;b++}else if(h){G[b]=e;if(t)for(d=0,f=e.siblings.length;d<f;d++)g=e.siblings[d],g.type.H().da[b]=g;b++}else if(m&&(s.da.push(e),t))for(d=0,f=e.siblings.length;d<f;d++)g=e.siblings[d],g.type.H().da.push(g)}G.length=b;if(t)for(r=l.Tb,a=0,c=r.length;a<c;a++)e=r[a].H(),h?e.da.length=b:e.c.length=b;b=H;if(h&&!H)for(a=0,c=s.c.length;a< c;a++){e=s.c[a];if(v)for(d=0,f=D.length;d<f;d++)g=D[d],g.Ic&&(B[d]=g.get(a));d=w?J.apply(e.S[y],B):J.apply(e,B);if(Ra(d,P)){H=!0;break}}l.finish&&l.finish(b||m);return m?H:s.gl()};Ub=h;t.prototype.Ga=function(){var a,d,b;a=0;for(d=this.R.length;a<d;a++)b=this.R[a],b.Ga(),b.Ic&&(this.zg=!0)};t.prototype.im=function(){var a=this.b,d,b,c=this.R,f=this.Ca;d=0;for(b=c.length;d<b;++d)f[d]=c[d].get();return this.qb.apply(a.vd,f)};t.prototype.hm=function(){var a=this.type,d=this.Mc,b=a.Id,c=this.zg,f=this.R, g=this.Ca,h=this.qb,e=a.H().Cb(),a=a.F,l=-1<d,s,m,t,r,p,y;if(c)for(m=0,r=f.length;m<r;++m)p=f[m],p.Ic||(g[m]=p.get(0));else for(m=0,r=f.length;m<r;++m)g[m]=f[m].get(0);s=0;for(t=e.length;s<t;++s){y=e[s];if(c)for(m=0,r=f.length;m<r;++m)p=f[m],p.Ic&&(g[m]=p.get(s));l?(m=0,a&&(m=y.type.Nf[b]),h.apply(y.S[d+m],g)):h.apply(y,g)}return!1};Vb=t;var y=[],D=-1;a.prototype.Ga=function(){var a,d;if(11===this.type)this.Re=this.b.Sn(this.ci,this.ic.parent);else if(13===this.type)for(a=0,d=this.xf.length;a<d;a++)this.xf[a].Ga(); this.gd&&this.gd.Ga()};a.prototype.Fu=function(a){this.Ic||!a||a.ta.Rj||(this.Ic=!0)};a.prototype.Kp=function(){this.Ic=!0};a.prototype.Vt=function(a){this.Wd=a||0;a=g();this.gd.get(a);D--;return a.data};a.prototype.Wt=function(a){this.Wd=a||0;a=g();this.gd.get(a);D--;return Q(a.data)?a.data:""};a.prototype.bu=function(){return this.object};a.prototype.Tt=function(){return this.yn};a.prototype.$t=function(a){this.Wd=a||0;a=g();this.gd.get(a);D--;return a.Xa()?this.b.Sg(a.data):this.b.$k(a.data)}; a.prototype.au=function(){return this.jb};a.prototype.Zt=function(){return this.key};a.prototype.Yt=function(){return this.index};a.prototype.Xt=function(a){a=a||0;var d=this.Cc.type,b=null,b=d.H(),c=b.Cb();if(c.length)b=c[a%c.length].type;else if(b.da.length)b=b.da[a%b.da.length].type;else if(d.c.length)b=d.c[a%d.c.length].type;else return 0;return this.index+b.Oi[d.Id]};a.prototype.Ut=function(){return this.Re};a.prototype.St=function(){return this.Kn};a.prototype.cu=function(){var a,d;a=0;for(d= this.xf.length;a<d;a++)this.bi[a]=this.xf[a].get();return this.bi};Wb=a;l.prototype.Ga=function(){this.ca=m(this.ca)};l.prototype.Vd=function(a){var d=this.b.Rn();this.parent&&!this.kh&&d?(this.qf>=d.length&&(d.length=this.qf+1),d[this.qf]=a):this.data=a};l.prototype.Ue=function(){var a=this.b.Rn();return!this.parent||this.kh||!a||this.cj?this.data:this.qf>=a.length||"undefined"===typeof a[this.qf]?this.kl:a[this.qf]};l.prototype.Ka=function(){!this.parent||this.kh||this.cj||this.Vd(this.kl)};Qb= l;w.prototype.toString=function(){return"include:"+this.Zg.toString()};w.prototype.Ga=function(){this.Zg=this.b.Nk[this.iu];this.sheet.eo.add(this);this.ca=m(this.ca);for(var a=this.parent;a;)a.group&&a.yi.push(this),a=a.parent;this.hq()};w.prototype.Ka=function(){this.parent&&this.b.Lh(this.b.q);this.Zg.hl||this.Zg.Ka(!0);this.parent&&this.b.rd(this.b.q)};w.prototype.hq=function(){for(var a=this.parent;a;){if(a.group&&!a.Qf){this.xb=!1;return}a=a.parent}this.xb=!0};$b=w;f.prototype.reset=function(a){this.fb= a;this.Qb=this.Ia=0;this.Vp.length=0;this.Lk=this.kf=!1};f.prototype.no=function(){return this.fb.pm?!0:this.Ia<this.fb.Ta.length-1?!!this.fb.ca.length:!1};Pb=f})(); (function(){function e(b,c){this.Cc=b;this.b=b.b;this.type=c[0];this.get=[this.gt,this.ct,this.pt,this.ut,this.Vs,this.qt,this.kt,this.Zs,this.jt,this.ot,this.Ws,this.nt,this.$s,this.lt,this.ht,this.it,this.dt,this.et,this.Ys,this.tt,this.mt,this.ft,this.Xs,this.bt][this.type];var e=null;this.Od=this.R=this.Ca=this.qb=this.$j=this.nb=this.first=this.value=null;this.Mc=-1;this.te=null;this.oq=-1;this.Re=this.ci=null;this.mg=!1;switch(this.type){case 0:case 1:case 2:this.value=c[1];break;case 3:this.first= new Yb(b,c[1]);break;case 18:this.first=new Yb(b,c[1]);this.nb=new Yb(b,c[2]);this.$j=new Yb(b,c[3]);break;case 19:this.qb=this.b.de(c[1]);this.qb!==W.prototype.Y.random&&this.qb!==W.prototype.Y.xn||this.Cc.Kp();this.Ca=[];this.R=[];3===c.length?(e=c[2],this.Ca.length=e.length+1):this.Ca.length=1;break;case 20:this.Od=this.b.q[c[1]];this.Mc=-1;this.qb=this.b.de(c[2]);this.mg=c[3];lc&&this.qb===lc.prototype.Y.wq&&this.Cc.Kp();this.te=c[4]?new Yb(b,c[4]):null;this.Ca=[];this.R=[];6===c.length?(e=c[5], this.Ca.length=e.length+1):this.Ca.length=1;break;case 21:this.Od=this.b.q[c[1]];this.mg=c[2];this.te=c[3]?new Yb(b,c[3]):null;this.oq=c[4];break;case 22:this.Od=this.b.q[c[1]];this.Od.Ui(c[2]);this.Mc=this.Od.Wk(c[2]);this.qb=this.b.de(c[3]);this.mg=c[4];this.te=c[5]?new Yb(b,c[5]):null;this.Ca=[];this.R=[];7===c.length?(e=c[6],this.Ca.length=e.length+1):this.Ca.length=1;break;case 23:this.ci=c[1],this.Re=null}this.Cc.Fu(this.Od);4<=this.type&&17>=this.type&&(this.first=new Yb(b,c[1]),this.nb=new Yb(b, c[2]));if(e){var g,a;g=0;for(a=e.length;g<a;g++)this.R.push(new Yb(b,e[g]))}}function r(){++c;v.length===c&&v.push(new Xb);return v[c]}function m(b,c,e){var g,a;g=0;for(a=b.length;g<a;++g)b[g].get(e),c[g+1]=e.data}function p(b,c){this.type=b||ac.Ef;this.data=c||0;this.sf=null;this.type==ac.Ef&&(this.data=Math.floor(this.data))}e.prototype.Ga=function(){23===this.type&&(this.Re=this.Cc.b.Sn(this.ci,this.Cc.ic.parent));this.first&&this.first.Ga();this.nb&&this.nb.Ga();this.$j&&this.$j.Ga();this.te&& this.te.Ga();if(this.R){var b,c;b=0;for(c=this.R.length;b<c;b++)this.R[b].Ga()}};var v=[],c=-1;e.prototype.tt=function(b){var h=this.R,e=this.Ca;e[0]=b;b=r();m(h,e,b);--c;this.qb.apply(this.b.vd,e)};e.prototype.mt=function(b){var h=this.Od,e=this.Ca,g=this.R,a=this.te,l=this.qb,p=this.Cc.Wd,f=h.H(),s=f.Cb();if(!s.length)if(f.da.length)s=f.da;else{this.mg?b.La(""):b.ha(0);return}e[0]=b;b.sf=h;b=r();m(g,e,b);a&&(a.get(b),b.Xa()&&(p=b.data,s=h.c));--c;h=s.length;if(p>=h||p<=-h)p%=h;0>p&&(p+=h);l.apply(s[p], e)};e.prototype.Xs=function(b){var h=this.Od,e=this.Ca,g=this.R,a=this.te,l=this.Mc,p=this.qb,f=this.Cc.Wd,s=h.H(),y=s.Cb();if(!y.length)if(s.da.length)y=s.da;else{this.mg?b.La(""):b.ha(0);return}e[0]=b;b.sf=h;b=r();m(g,e,b);a&&(a.get(b),b.Xa()&&(f=b.data,y=h.c));--c;g=y.length;if(f>=g||f<=-g)f%=g;0>f&&(f+=g);f=y[f];y=0;h.F&&(y=f.type.Nf[h.Id]);p.apply(f.S[l+y],e)};e.prototype.ft=function(b){var h=this.te,e=this.Od,g=this.oq,a=this.Cc.Wd,l=e.H(),m=l.Cb();if(!m.length)if(l.da.length)m=l.da;else{this.mg? b.La(""):b.ha(0);return}if(h){l=r();h.get(l);if(l.Xa()){a=l.data;e=e.c;a%=e.length;0>a&&(a+=e.length);g=e[a].Wa[g];Q(g)?b.La(g):b.D(g);--c;return}--c}h=m.length;if(a>=h||a<=-h)a%=h;0>a&&(a+=h);a=m[a];m=0;e.F&&(m=a.type.Oi[e.Id]);g=a.Wa[g+m];Q(g)?b.La(g):b.D(g)};e.prototype.gt=function(b){b.type=ac.Ef;b.data=this.value};e.prototype.ct=function(b){b.type=ac.Df;b.data=this.value};e.prototype.pt=function(b){b.type=ac.String;b.data=this.value};e.prototype.ut=function(b){this.first.get(b);b.Xa()&&(b.data= -b.data)};e.prototype.Vs=function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data+=e.data,e.Tf()&&b.dg());--c};e.prototype.qt=function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data-=e.data,e.Tf()&&b.dg());--c};e.prototype.kt=function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data*=e.data,e.Tf()&&b.dg());--c};e.prototype.Zs=function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data/=e.data,b.dg());--c};e.prototype.jt= function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data%=e.data,e.Tf()&&b.dg());--c};e.prototype.ot=function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data=Math.pow(b.data,e.data),e.Tf()&&b.dg());--c};e.prototype.Ws=function(b){this.first.get(b);var e=r();this.nb.get(e);b.Xa()?e.ej()?b.La(b.data.toString()+e.data):b.data&&e.data?b.ha(1):b.ha(0):b.ej()&&(b.data=e.ej()?b.data+e.data:b.data+(Math.round(1E10*e.data)/1E10).toString());--c};e.prototype.nt=function(b){this.first.get(b); var e=r();this.nb.get(e);b.Xa()&&e.Xa()&&(b.data||e.data?b.ha(1):b.ha(0));--c};e.prototype.Ys=function(b){this.first.get(b);b.data?this.nb.get(b):this.$j.get(b)};e.prototype.$s=function(b){this.first.get(b);var e=r();this.nb.get(e);b.ha(b.data===e.data?1:0);--c};e.prototype.lt=function(b){this.first.get(b);var e=r();this.nb.get(e);b.ha(b.data!==e.data?1:0);--c};e.prototype.ht=function(b){this.first.get(b);var e=r();this.nb.get(e);b.ha(b.data<e.data?1:0);--c};e.prototype.it=function(b){this.first.get(b); var e=r();this.nb.get(e);b.ha(b.data<=e.data?1:0);--c};e.prototype.dt=function(b){this.first.get(b);var e=r();this.nb.get(e);b.ha(b.data>e.data?1:0);--c};e.prototype.et=function(b){this.first.get(b);var e=r();this.nb.get(e);b.ha(b.data>=e.data?1:0);--c};e.prototype.bt=function(b){var c=this.Re.Ue();L(c)?b.D(c):b.La(c)};Yb=e;p.prototype.Tf=function(){return this.type===ac.Df};p.prototype.Xa=function(){return this.type===ac.Ef||this.type===ac.Df};p.prototype.ej=function(){return this.type===ac.String}; p.prototype.dg=function(){this.Tf()||(this.ej()&&(this.data=parseFloat(this.data)),this.type=ac.Df)};p.prototype.ha=function(b){this.type=ac.Ef;this.data=Math.floor(b)};p.prototype.D=function(b){this.type=ac.Df;this.data=b};p.prototype.La=function(b){this.type=ac.String;this.data=b};p.prototype.mm=function(b){L(b)?(this.type=ac.Df,this.data=b):Q(b)?(this.type=ac.String,this.data=b.toString()):(this.type=ac.Ef,this.data=0)};Xb=p;ac={Ef:0,Df:1,String:2}})();function W(e){this.b=e;this.Pb=[]} W.prototype.Ib=function(){var e={},r,m,p,v,c,b,h,t;e.waits=[];var g=e.waits,a;r=0;for(m=this.Pb.length;r<m;r++){b=this.Pb[r];a={t:b.time,st:b.Rp,s:b.om,ev:b.Mf.Z,sm:[],sols:{}};b.Mf.Jc[b.Qb]&&(a.act=b.Mf.Jc[b.Qb].Z);p=0;for(v=b.ca.length;p<v;p++)a.sm.push(b.ca[p].Z);for(c in b.Jb)if(b.Jb.hasOwnProperty(c)){h=this.b.q[parseInt(c,10)];t={sa:b.Jb[c].Mj,insts:[]};p=0;for(v=b.Jb[c].Ld.length;p<v;p++)t.insts.push(b.Jb[c].Ld[p].uid);a.sols[h.Z.toString()]=t}g.push(a)}return e}; W.prototype.Zb=function(e){e=e.waits;var r,m,p,v,c,b,h,t,g,a,l;r=this.Pb.length=0;for(m=e.length;r<m;r++)if(b=e[r],t=this.b.pn[b.ev.toString()]){g=-1;p=0;for(v=t.Jc.length;p<v;p++)if(t.Jc[p].Z===b.act){g=p;break}if(-1!==g){h={Jb:{},ca:[],Kk:!1};h.time=b.t;h.Rp=b.st||"";h.om=!!b.s;h.Mf=t;h.Qb=g;p=0;for(v=b.sm.length;p<v;p++)(t=this.b.Xi(b.sm[p]))&&h.ca.push(t);for(c in b.sols)if(b.sols.hasOwnProperty(c)&&(t=this.b.Xi(parseInt(c,10)))){g=b.sols[c];a={Mj:g.sa,Ld:[]};p=0;for(v=g.insts.length;p<v;p++)(l= this.b.Tg(g.insts[p]))&&a.Ld.push(l);h.Jb[t.index.toString()]=a}this.Pb.push(h)}}}; (function(){function e(){}function r(b,a){var c=b.N.c2_feo_val,e=a.N.c2_feo_val;if(L(c)&&L(e))return c-e;c=""+c;e=""+e;return c<e?-1:c>e?1:0}function m(){}function p(){}var v=W.prototype;e.prototype.Lq=function(){return!0};e.prototype.Qm=function(){return!0};e.prototype.Pm=function(){return!0};e.prototype.Aq=function(b,a,c){return bc(b,a,c)};var c=[],b=-1;e.prototype.Mq=function(g){var a=g.H();b++;c.length===b&&c.push([]);var e=c[b];Ba(e,a.Cb());var h=this.b.hb(),f=h.fb,s=h.no(),h=this.b.Ap(),m,p, k,d,q,n,r=g.Lb;if(s)for(s=0,m=e.length;s<m&&!h.bb;s++){this.b.vf(f.ca);d=e[s];a=g.H();a.O=!1;a.c.length=1;a.c[0]=d;if(r)for(p=0,k=d.siblings.length;p<k;p++)q=d.siblings[p],n=q.type.H(),n.O=!1,n.c.length=1,n.c[0]=q;h.index=s;f.lg();this.b.rd(f.ca)}else for(a.O=!1,a.c.length=1,s=0,m=e.length;s<m&&!h.bb;s++){d=e[s];a.c[0]=d;if(r)for(p=0,k=d.siblings.length;p<k;p++)q=d.siblings[p],n=q.type.H(),n.O=!1,n.c.length=1,n.c[0]=q;h.index=s;f.lg()}e.length=0;this.b.vp();b--;return!1};e.prototype.Nq=function(g, a,e){a=g.H();b++;c.length===b&&c.push([]);var h=c[b];Ba(h,a.Cb());var f=this.b.hb(),s=f.fb,m=this.b.Rg(),p=f.no(),f=this.b.Ap(),k,d,q,n,t;k=0;for(d=h.length;k<d;k++)h[k].N.c2_feo_val=m.R[1].get(k);h.sort(r);1===e&&h.reverse();e=g.Lb;if(p)for(k=0,d=h.length;k<d&&!f.bb;k++){this.b.vf(s.ca);q=h[k];a=g.H();a.O=!1;a.c.length=1;a.c[0]=q;if(e)for(m=0,p=q.siblings.length;m<p;m++)n=q.siblings[m],t=n.type.H(),t.O=!1,t.c.length=1,t.c[0]=n;f.index=k;s.lg();this.b.rd(s.ca)}else for(a.O=!1,a.c.length=1,k=0,d=h.length;k< d&&!f.bb;k++){q=h[k];a.c[0]=q;if(e)for(m=0,p=q.siblings.length;m<p;m++)n=q.siblings[m],t=n.type.H(),t.O=!1,t.c.length=1,t.c[0]=n;f.index=k;s.lg()}h.length=0;this.b.vp();b--;return!1};e.prototype.Zr=function(){var b=this.b.Rg().N;"undefined"===typeof b.TriggerOnce_lastTick&&(b.TriggerOnce_lastTick=-1);var a=b.TriggerOnce_lastTick,c=this.b.zf;b.TriggerOnce_lastTick=c;return this.b.zl||a!==c-1};e.prototype.Kq=function(b){var a=this.b.Rg(),c=a.N.Every_lastTime||0,e=this.b.Wb.X;"undefined"===typeof a.N.Every_seconds&& (a.N.Every_seconds=b);var f=a.N.Every_seconds;if(e>=c+f)return a.N.Every_lastTime=c+f,e>=a.N.Every_lastTime+.04&&(a.N.Every_lastTime=e),a.N.Every_seconds=b,!0;e<c-.1&&(a.N.Every_lastTime=e);return!1};e.prototype.Eq=function(b,a,c){return bc(b.Ue(),a,c)};e.prototype.Uq=function(b){return(b=this.b.Xg[b.toLowerCase()])&&b.Qf};e.prototype.Bq=function(b,a,c){return b>=a&&b<=c};e.prototype.Jq=function(){var b=this.b.hb();return b.Lk?!1:!b.kf};e.prototype.nk=function(){return!0};e.prototype.fr=function(){return!0}; e.prototype.ok=function(){return!0};e.prototype.rr=function(){return!0};e.prototype.mk=function(){return!0};e.prototype.uq=function(b,a,c){return Ma(V(b),V(c))<=V(a)};e.prototype.Tq=function(b,a){return Oa(V(b),V(a))};e.prototype.Sq=function(b,a,c){b=Ka(b);a=Ka(a);c=Ka(c);return Oa(c,a)?Oa(b,a)&&!Oa(b,c):!(!Oa(b,a)&&Oa(b,c))};v.d=new e;m.prototype.Oq=function(b){this.b.gf||this.b.Bd||(this.b.Bd=b)};m.prototype.Iq=function(b,a,c,e){if(a&&b&&(a=this.b.An(b,a,c,e))){this.b.Rc++;var f;this.b.trigger(Object.getPrototypeOf(b.ta).d.kk, a);if(a.Lb)for(c=0,e=a.siblings.length;c<e;c++)f=a.siblings[c],this.b.trigger(Object.getPrototypeOf(f.type.ta).d.kk,f);this.b.Rc--;b=b.H();b.O=!1;b.c.length=1;b.c[0]=a;if(a.Lb)for(c=0,e=a.siblings.length;c<e;c++)f=a.siblings[c],b=f.type.H(),b.O=!1,b.c.length=1,b.c[0]=f}};m.prototype.Rr=function(b,a){0===b.di?L(a)?b.Vd(a):b.Vd(parseFloat(a)):1===b.di&&b.Vd(a.toString())};m.prototype.tq=function(b,a){0===b.di?L(a)?b.Vd(b.Ue()+a):b.Vd(b.Ue()+parseFloat(a)):1===b.di&&b.Vd(b.Ue()+a.toString())};m.prototype.Xr= function(b,a){0===b.di&&(L(a)?b.Vd(b.Ue()-a):b.Vd(b.Ue()-parseFloat(a)))};m.prototype.Qr=function(b){0>b&&(b=0);this.b.Af=b};var h=[],t=[];m.prototype.$r=function(b){if(!(0>b)){var a,c,e,f=this.b.hb(),s;s=h.length?h.pop():{Jb:{},ca:[]};s.Kk=!1;s.time=this.b.Wb.X+b;s.Rp="";s.om=!1;s.Mf=f.fb;s.Qb=f.Qb+1;b=0;for(a=this.b.q.length;b<a;b++)e=this.b.q[b],c=e.H(),c.O&&-1===f.fb.ca.indexOf(e)||(s.ca.push(e),e=void 0,e=t.length?t.pop():{Ld:[]},e.Mj=!1,e.Mj=c.O,Ba(e.Ld,c.c),s.Jb[b.toString()]=e);this.Pb.push(s); return!0}};m.prototype.Pq=function(b){if(!this.b.gf&&!this.b.Bd)for(var a in this.b.Zf)if(this.b.Zf.hasOwnProperty(a)&&kb(a,b)){this.b.Bd=this.b.Zf[a];break}};m.prototype.Hr=function(){if(!this.b.gf&&!this.b.Bd&&this.b.ra){this.b.Bd=this.b.ra;var b,a,c;b=0;for(a=this.b.fe.length;b<a;b++)c=this.b.fe[b],c.Jp(c.$i)}};v.u=new m;p.prototype["int"]=function(b,a){Q(a)?(b.ha(parseInt(a,10)),isNaN(b.data)&&(b.data=0)):b.ha(a)};p.prototype["float"]=function(b,a){Q(a)?(b.D(parseFloat(a)),isNaN(b.data)&&(b.data= 0)):b.D(a)};p.prototype.random=function(b,a,c){void 0===c?b.D(Math.random()*a):b.D(Math.random()*(c-a)+a)};p.prototype.sqrt=function(b,a){b.D(Math.sqrt(a))};p.prototype.abs=function(b,a){b.D(Math.abs(a))};p.prototype.round=function(b,a){b.ha(Math.round(a))};p.prototype.floor=function(b,a){b.ha(Math.floor(a))};p.prototype.ceil=function(b,a){b.ha(Math.ceil(a))};p.prototype.sin=function(b,a){b.D(Math.sin(V(a)))};p.prototype.cos=function(b,a){b.D(Math.cos(V(a)))};p.prototype.tan=function(b,a){b.D(Math.tan(V(a)))}; p.prototype.asin=function(b,a){b.D(Ga(Math.asin(a)))};p.prototype.acos=function(b,a){b.D(Ga(Math.acos(a)))};p.prototype.atan=function(b,a){b.D(Ga(Math.atan(a)))};p.prototype.exp=function(b,a){b.D(Math.exp(a))};p.prototype.log10=function(b,a){b.D(Math.log(a)/Math.LN10)};p.prototype.max=function(b){var a=arguments[1];"number"!==typeof a&&(a=0);var c,e,f;c=2;for(e=arguments.length;c<e;c++)f=arguments[c],"number"===typeof f&&a<f&&(a=f);b.D(a)};p.prototype.min=function(b){var a=arguments[1];"number"!== typeof a&&(a=0);var c,e,f;c=2;for(e=arguments.length;c<e;c++)f=arguments[c],"number"===typeof f&&a>f&&(a=f);b.D(a)};p.prototype.oe=function(b){b.D(this.b.oe)};p.prototype.Af=function(b){b.D(this.b.Af)};p.prototype.time=function(b){b.D(this.b.Wb.X)};p.prototype.zf=function(b){b.ha(this.b.zf)};p.prototype.uj=function(b){b.ha(this.b.uj)};p.prototype.Tk=function(b){b.ha(this.b.Tk)};p.prototype.g=function(b,a,c,e,f){b.D(Ga(La(a,c,e,f)))};p.prototype.Au=function(b,a,c,e){b.D(Sa(a,c,e))};p.prototype.find= function(b,a,c){Q(a)&&Q(c)?b.ha(a.search(new RegExp(db(c),"i"))):b.ha(-1)};p.prototype.left=function(b,a,c){b.La(Q(a)?a.substr(0,c):"")};p.prototype.right=function(b,a,c){b.La(Q(a)?a.substr(a.length-c):"")};p.prototype.replace=function(b,a,c,e){Q(a)&&Q(c)&&Q(e)?b.La(a.replace(new RegExp(db(c),"gi"),e)):b.La(Q(a)?a:"")};p.prototype.trim=function(b,a){b.La(Q(a)?a.trim():"")};p.prototype.xn=function(b){var a=T(Math.random()*(arguments.length-1));b.mm(arguments[a+1])};p.prototype.Fk=function(b){b.D(this.b.Fk/ 1E3)};p.prototype.nf=function(b){b.D(this.b.nf)};v.Y=new p;v.dv=function(){var b,a,c,e,f,s,m=this.b.hb();b=0;for(c=this.Pb.length;b<c;b++){e=this.Pb[b];if(-1===e.time){if(!e.om)continue}else if(e.time>this.b.Wb.X)continue;m.fb=e.Mf;m.Qb=e.Qb;m.Ia=0;for(a in e.Jb)e.Jb.hasOwnProperty(a)&&(f=this.b.q[parseInt(a,10)].H(),s=e.Jb[a],f.O=s.Mj,Ba(f.c,s.Ld),f=s,f.Ld.length=0,t.push(f));e.Mf.cv();this.b.Dk(e.ca);e.Kk=!0}a=b=0;for(c=this.Pb.length;b<c;b++)e=this.Pb[b],this.Pb[a]=e,e.Kk?(Ua(e.Jb),e.ca.length= 0,h.push(e)):a++;this.Pb.length=a}})(); (function(){nb=function(e,m){var p=e[1],v=e[3],c=e[4],b=e[5],h=e[6],t=e[7],g=e[8];m.d||(m.d={});m.u||(m.u={});m.Y||(m.Y={});var a=m.d,l=m.u,w=m.Y;v&&(a.ik=function(a,b){return bc(this.x,a,b)},a.Gq=function(a,b){return bc(this.y,a,b)},a.Tv=function(){var a=this.k;this.xa();var b=this.Oa;return!(b.right<a.Ma||b.bottom<a.Na||b.left>a.pb||b.top>a.ob)},a.Uv=function(){this.xa();var a=this.Oa,b=this.b.ra;return 0>a.right||0>a.bottom||a.left>b.width||a.top>b.height},a.ew=function(a,b,c){var e=this.H(),k= e.Cb();if(!k.length)return!1;var d=k[0],g=d,n=Qa(d.x,d.y,b,c),h,l,m;h=1;for(l=k.length;h<l;h++)if(d=k[h],m=Qa(d.x,d.y,b,c),0===a&&m<n||1===a&&m>n)n=m,g=d;e.Ih(g);return!0},l.sk=function(a){this.x!==a&&(this.x=a,this.Da())},l.Zm=function(a){this.y!==a&&(this.y=a,this.Da())},l.Nr=function(a,b){if(this.x!==a||this.y!==b)this.x=a,this.y=b,this.Da()},l.rw=function(a,b){var c=a.Nt(this);if(c){var e;c.Zk?(e=c.Zk(b,!0),c=c.Zk(b,!1)):(e=c.x,c=c.y);if(this.x!==e||this.y!==c)this.x=e,this.y=c,this.Da()}},l.Zv= function(a){0!==a&&(this.x+=Math.cos(this.g)*a,this.y+=Math.sin(this.g)*a,this.Da())},l.Yv=function(a,b){0!==b&&(this.x+=Math.cos(V(a))*b,this.y+=Math.sin(V(a))*b,this.Da())},w.an=function(a){a.D(this.x)},w.bn=function(a){a.D(this.y)},w.oe=function(a){a.D(this.b.Vi(this))});c&&(a.Fq=function(a,b){return bc(this.width,a,b)},a.Ov=function(a,b){return bc(this.height,a,b)},l.vw=function(a){this.width!==a&&(this.width=a,this.Da())},l.qw=function(a){this.height!==a&&(this.height=a,this.Da())},l.rk=function(a, b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.Da()},w.$m=function(a){a.D(this.width)},w.Mm=function(a){a.D(this.height)},w.Lv=function(a){this.xa();a.D(this.Oa.left)},w.Nv=function(a){this.xa();a.D(this.Oa.top)},w.Mv=function(a){this.xa();a.D(this.Oa.right)},w.Kv=function(a){this.xa();a.D(this.Oa.bottom)});b&&(a.uq=function(a,b){return Ma(this.g,V(b))<=V(a)},a.Tq=function(a){return Oa(this.g,V(a))},a.Sq=function(a,b){var c=Ka(a),e=Ka(b),k=Ia(this.g);return Oa(e,c)?Oa(k,c)&& !Oa(k,e):!(!Oa(k,c)&&Oa(k,e))},l.lw=function(a){a=V(Ha(a));isNaN(a)||this.g===a||(this.g=a,this.Da())},l.hw=function(a){0===a||isNaN(a)||(this.g+=V(a),this.g=Ia(this.g),this.Da())},l.iw=function(a){0===a||isNaN(a)||(this.g-=V(a),this.g=Ia(this.g),this.Da())},l.jw=function(a,b){var c=Na(this.g,V(b),V(a));isNaN(c)||this.g===c||(this.g=c,this.Da())},l.kw=function(a,b,c){a=Na(this.g,Math.atan2(c-this.y,b-this.x),V(a));isNaN(a)||this.g===a||(this.g=a,this.Da())},l.sw=function(a,b){var c=Math.atan2(b-this.y, a-this.x);isNaN(c)||this.g===c||(this.g=c,this.Da())},w.Jv=function(a){a.D(Ja(this.g))});p||(a.Dq=function(a,b,c){return bc(this.Wa[a],b,c)},a.Rv=function(a){return this.Wa[a]},a.fw=function(a,b){var c=this.H(),e=c.Cb();if(!e.length)return!1;var k=e[0],d=k,g=k.Wa[b],n,h,l;n=1;for(h=e.length;n<h;n++)if(k=e[n],l=k.Wa[b],0===a&&l<g||1===a&&l>g)g=l,d=k;c.Ih(d);return!0},a.dw=function(a){var b,c,e,k,d;if(this.b.Rg().nl){d=this.H();if(d.O)for(d.O=!1,d.c.length=0,d.da.length=0,e=this.c,b=0,c=e.length;b< c;b++)k=e[b],k.uid===a?d.da.push(k):d.c.push(k);else{e=b=0;for(c=d.c.length;b<c;b++)k=d.c[b],d.c[e]=k,k.uid===a?d.da.push(k):e++;d.c.length=e}this.qc();return!!d.c.length}k=this.b.Tg(a);if(!k)return!1;d=this.H();if(!d.O&&-1===d.c.indexOf(k))return!1;if(this.F)for(a=k.type.za,b=0,c=a.length;b<c;b++){if(a[b]===this)return d.Ih(k),this.qc(),!0}else if(k.type===this)return d.Ih(k),this.qc(),!0;return!1},a.kk=function(){return!0},a.hr=function(){return!0},l.Mr=function(a,b){var c=this.Wa;L(c[a])?c[a]= L(b)?b:parseFloat(b):Q(c[a])&&(c[a]=Q(b)?b:b.toString())},l.sq=function(a,b){var c=this.Wa;L(c[a])?c[a]=L(b)?c[a]+b:c[a]+parseFloat(b):Q(c[a])&&(c[a]=Q(b)?c[a]+b:c[a]+b.toString())},l.ww=function(a,b){var c=this.Wa;L(c[a])&&(c[a]=L(b)?c[a]-b:c[a]-parseFloat(b))},l.mw=function(a,b){this.Wa[a]=b?1:0},l.xw=function(a){this.Wa[a]=1-this.Wa[a]},l.Lm=function(){this.b.be(this)},l.Yq||(l.Yq=function(a){var b,c;try{b=JSON.parse(a)}catch(e){return}this.b.mj(this,b,!0);this.cd&&this.cd();if(this.S)for(a=0, b=this.S.length;a<b;++a)c=this.S[a],c.cd&&c.cd()}),w.Hq=function(a){var b=a.sf.c.length,c,e,k;c=0;for(e=this.b.Oc.length;c<e;c++)k=this.b.Oc[c],a.sf.F?0<=k.type.za.indexOf(a.sf)&&b++:k.type===a.sf&&b++;a.ha(b)},w.gw=function(a){a.ha(a.sf.H().Cb().length)},w.yw=function(a){a.ha(this.uid)},w.Qv=function(a){a.ha(this.Vg())},w.gi||(w.gi=function(a){a.La(JSON.stringify(this.b.jm(this,!0)))}));h&&(a.Vv=function(){return this.visible},l.uw=function(a){!a!==!this.visible&&(this.visible=a,this.b.ga=!0)},a.Pv= function(a,b){return bc(jb(100*this.opacity),a,b)},l.Xm=function(a){a/=100;0>a?a=0:1<a&&(a=1);a!==this.opacity&&(this.opacity=a,this.b.ga=!0)},w.Opacity=function(a){a.D(jb(100*this.opacity))});t&&(a.Sv=function(a){return a?this.k===a:!1},a.Dr=function(a){var b=this.H(),c=b.Cb();if(!c.length)return!1;var e=c[0],k=e,d,g;d=1;for(g=c.length;d<g;d++)if(e=c[d],0===a){if(e.k.index>k.k.index||e.k.index===k.k.index&&e.jd()>k.jd())k=e}else if(e.k.index<k.k.index||e.k.index===k.k.index&&e.jd()<k.jd())k=e;b.Ih(k); return!0},l.Om=function(){var a=this.k,b=a.c;b.length&&b[b.length-1]===this||(a.kg(this,!1),a.Bg(this,!1),this.b.ga=!0)},l.br=function(){var a=this.k,b=a.c;b.length&&b[0]===this||(a.kg(this,!1),a.Vu(this),this.b.ga=!0)},l.$v=function(a){a&&a!=this.k&&(this.k.kg(this,!0),this.k=a,a.Bg(this,!0),this.b.ga=!0)},l.Aw=function(a,b){var c=0===a;if(b){var e=b.Tn(this);e&&e.uid!==this.uid&&(this.k.index!==e.k.index&&(this.k.kg(this,!0),this.k=e.k,e.k.Bg(this,!0)),this.k.Gu(this,e,c),this.b.ga=!0)}},w.Xv=function(a){a.ha(this.k.$o)}, w.Wv=function(a){a.La(this.k.name)},w.zw=function(a){a.ha(this.jd())});g&&(l.ow=function(a,b){if(this.b.B){var c=this.type.Yk(b);if(!(0>c)){var e=1===a;this.ee[c]!==e&&(this.ee[c]=e,this.Zd(),this.b.ga=!0)}}},l.pw=function(a,b,c){if(this.b.B){var e=this.type.Yk(a);0>e||(a=this.type.L[e],e=this.Ba[e],b=Math.floor(b),0>b||b>=e.length||(1===this.b.B.Rt(a.tb,b)&&(c/=100),e[b]!==c&&(e[b]=c,a.xb&&(this.b.ga=!0))))}})};Hb=function(){this.Ak=this.xk=!0;this.type.ii=!0;this.b.ga=!0;var e,m,p=this.yk;e=0;for(m= p.length;e<m;++e)p[e](this);this.k.$c&&this.xa()};Ib=function(e){e&&this.yk.push(e)};Kb=function(){if(this.xk){var e=this.Oa,m=this.Sb;e.set(this.x,this.y,this.x+this.width,this.y+this.height);e.offset(-this.Db*this.width,-this.Eb*this.height);this.g?(e.offset(-this.x,-this.y),m.Mp(e,this.g),m.offset(this.x,this.y),m.qn(e)):m.Sh(e);e.normalize();this.xk=!1;this.Cv()}};var e=new ua(0,0,0,0);Lb=function(){if(this.k.$c){var r=this.k.cc,m=this.Oa;e.set(r.gc(m.left),r.hc(m.top),r.gc(m.right),r.hc(m.bottom)); this.Nb.Li(e)||(this.Nb.right<this.Nb.left?r.update(this,null,e):r.update(this,this.Nb,e),this.Nb.Bi(e),this.k.Sd=!0)}};Mb=function(){if(this.Ak&&this.Le){this.xa();var r=this.type.xi,m=this.Oa;e.set(r.gc(m.left),r.hc(m.top),r.gc(m.right),r.hc(m.bottom));this.le.Li(e)||(this.le.right<this.le.left?r.update(this,null,e):r.update(this,this.le,e),this.le.Bi(e),this.Ak=!1)}};Jb=function(e,m){return this.Oa.yb(e,m)&&this.Sb.yb(e,m)?this.ka&&!this.ka.Sf()?(this.ka.If(this.width,this.height,this.g),this.ka.yb(e- this.x,m-this.y)):!0:!1};Db=function(){this.type.gk();return this.Xe};Nb=function(){this.k.Em();return this.ad};Ob=function(){this.ja.length=0;var e,m;e=0;for(m=this.ee.length;e<m;e++)this.ee[e]&&this.ja.push(this.type.L[e]);this.mq=!!this.ja.length};Eb=function(){return"Inst"+this.zp};qb=function(e){if(e&&e.Lb&&e.type!=this){var m,p,v;m=0;for(p=e.siblings.length;m<p;m++)if(v=e.siblings[m],v.type==this)return v}e=this.H().Cb();return e.length?e[0]:null};rb=function(e){var m=this.H().Cb();return m.length? m[e.Vg()%m.length]:null};pb=function(){if(this.rg&&!this.F){var e,m;e=0;for(m=this.c.length;e<m;e++)this.c[e].Xe=e;var p=e,v=this.b.Oc;e=0;for(m=v.length;e<m;++e)v[e].type===this&&(v[e].Xe=p++);this.rg=!1}};Bb=function(e){if(e<this.c.length)return this.c[e];e-=this.c.length;var m=this.b.Oc,p,v;p=0;for(v=m.length;p<v;++p)if(m[p].type===this){if(0===e)return m[p];--e}return null};sb=function(){return this.De[this.Fd]};tb=function(){this.Fd++;this.Fd===this.De.length?this.De.push(new ob(this)):this.De[this.Fd].O= !0};ub=function(){this.Fd++;this.Fd===this.De.length&&this.De.push(new ob(this));var e=this.De[this.Fd],m=this.De[this.Fd-1];m.O?e.O=!0:(e.O=!1,Ba(e.c,m.c),Ba(e.da,m.da))};vb=function(){this.Fd--};wb=function(e){var m,p,v,c,b,h=0;if(!this.F)for(m=0,p=this.za.length;m<p;m++)for(b=this.za[m],v=0,c=b.Ha.length;v<c;v++){if(e===b.Ha[v].name)return this.N.lastBehIndex=h,b.Ha[v];h++}m=0;for(p=this.Ha.length;m<p;m++){if(e===this.Ha[m].name)return this.N.lastBehIndex=h,this.Ha[m];h++}return null};yb=function(e){return this.Ui(e)? this.N.lastBehIndex:-1};zb=function(e){var m,p;m=0;for(p=this.L.length;m<p;m++)if(this.L[m].name===e)return m;return-1};Ab=function(){if(this.Lb&&!this.F){var e,m,p,v,c,b,h;this.gk();b=this.H();var t=b.O,g=(e=this.b.hb())&&e.fb&&e.fb.Uc;e=0;for(m=this.Tb.length;e<m;e++)if(c=this.Tb[e],c!==this&&(c.gk(),h=c.H(),h.O=t,!t)){h.c.length=b.c.length;p=0;for(v=b.c.length;p<v;p++)h.c[p]=c.Un(b.c[p].Xe);if(g)for(h.da.length=b.da.length,p=0,v=b.da.length;p<v;p++)h.da[p]=c.Un(b.da[p].Xe)}}};Cb=function(){return"Type"+ this.Z};bc=function(e,m,p){if("undefined"===typeof e||"undefined"===typeof p)return!1;switch(m){case 0:return e===p;case 1:return e!==p;case 2:return e<p;case 3:return e<=p;case 4:return e>p;case 5:return e>=p;default:return!1}}})();var jc={};function mc(e){this.b=e} (function(){function e(){return h.length?h.pop():[]}function r(b){var c,a;c=0;for(a=b.length;c<a;c++)Array.isArray(b[c])&&r(b[c]);b.length=0;h.push(b)}function m(){}function p(){}function v(){}var c=mc.prototype;c.ua=function(b){this.ta=b;this.b=b.b};c.ua.prototype.U=function(){};c.la=function(b){this.type=b;this.b=b.b};var b=c.la.prototype,h=[];Array.isArray||(Array.isArray=function(b){return"[object Array]"===Object.prototype.toString.call(b)});b.U=function(){this.kc=this.A[0];this.tc=this.A[1]; this.Pc=this.A[2];this.ac||(this.ed=e());var b=this.ed;b.length=this.kc;var c,a,h;for(c=0;c<this.kc;c++)for(b[c]||(b[c]=e()),b[c].length=this.tc,a=0;a<this.tc;a++)for(b[c][a]||(b[c][a]=e()),b[c][a].length=this.Pc,h=0;h<this.Pc;h++)b[c][a][h]=0;this.Mn=[];this.Nn=[];this.On=[];this.Jd=-1};b.tf=function(){var b;for(b=0;b<this.kc;b++)r(this.ed[b]);this.ed.length=0};b.Lc=function(b,c,a){b=Math.floor(b);c=Math.floor(c);a=Math.floor(a);return isNaN(b)||0>b||b>this.kc-1||isNaN(c)||0>c||c>this.tc-1||isNaN(a)|| 0>a||a>this.Pc-1?0:this.ed[b][c][a]};b.set=function(b,c,a,e){b=Math.floor(b);c=Math.floor(c);a=Math.floor(a);isNaN(b)||0>b||b>this.kc-1||isNaN(c)||0>c||c>this.tc-1||isNaN(a)||0>a||a>this.Pc-1||(this.ed[b][c][a]=e)};b.Ft=function(){return JSON.stringify({c2array:!0,size:[this.kc,this.tc,this.Pc],data:this.ed})};b.Ib=function(){return{size:[this.kc,this.tc,this.Pc],data:this.ed}};b.Zb=function(b){var c=b.size;this.kc=c[0];this.tc=c[1];this.Pc=c[2];this.ed=b.data};b.Be=function(b,c,a){0>b&&(b=0);0>c&& (c=0);0>a&&(a=0);if(this.kc!==b||this.tc!==c||this.Pc!==a){this.kc=b;this.tc=c;this.Pc=a;var h,m,f=this.ed;f.length=b;for(b=0;b<this.kc;b++)for(ia(f[b])&&(f[b]=e()),f[b].length=c,h=0;h<this.tc;h++)for(ia(f[b][h])&&(f[b][h]=e()),f[b][h].length=a,m=0;m<this.Pc;m++)ia(f[b][h][m])&&(f[b][h][m]=0)}};b.Iw=function(){return 0<=this.Jd&&this.Jd<this.Mn.length?this.Mn[this.Jd]:0};b.Jw=function(){return 0<=this.Jd&&this.Jd<this.Nn.length?this.Nn[this.Jd]:0};b.Kw=function(){return 0<=this.Jd&&this.Jd<this.On.length? this.On[this.Jd]:0};m.prototype.ik=function(b,c,a){return bc(this.Lc(b,0,0),c,a)};b.Dw=function(b){this.b.vf(b.ca);b.lg();this.b.rd(b.ca)};c.d=new m;p.prototype.rk=function(b,c,a){this.Be(b,c,a)};p.prototype.sk=function(b,c){this.set(b,0,0,c)};p.prototype.Nm=function(b){var c;try{c=JSON.parse(b)}catch(a){return}c.c2array&&(b=c.size,this.kc=b[0],this.tc=b[1],this.Pc=b[2],this.ed=c.data)};c.u=new p;v.prototype.vq=function(b,c,a,e){b.mm(this.Lc(c,a||0,e||0))};v.prototype.$m=function(b){b.ha(this.kc)}; v.prototype.Mm=function(b){b.ha(this.tc)};v.prototype.gi=function(b){b.La(this.Ft())};c.Y=new v})();function nc(e){this.b=e} (function(){function e(a){a=Math.pow(10,a/20);0>a&&(a=0);1<a&&(a=1);return a}function r(a){0>a&&(a=0);1<a&&(a=1);return Math.log(a)/Math.log(10)*20}function m(a){a=a.toLowerCase();return U.hasOwnProperty(a)&&U[a].length?U[a][0].lc():z.destination}function p(){return z.createGain?z.createGain():z.createGainNode()}function v(a){return z.createDelay?z.createDelay(a):z.createDelayNode(a)}function c(a){a.start?a.start(0):a.noteOn(0)}function b(a,b,d){a.start?a.start(0,b):a.noteGrainOn(0,b,d-b)}function h(a){try{a.stop? a.stop(0):a.noteOff(0)}catch(b){}}function t(a,b,d,c,e,f){this.type="filter";this.sb=[a,b,d,c,e,f];this.ba=p();this.K=p();this.K.gain.value=f;this.I=p();this.I.gain.value=1-f;this.Ja=z.createBiquadFilter();this.Ja.type="number"===typeof this.Ja.type?a:xc[a];this.Ja.frequency.value=b;this.Ja.detune&&(this.Ja.detune.value=d);this.Ja.Q.value=c;this.Ja.gain.value=e;this.ba.connect(this.Ja);this.ba.connect(this.I);this.Ja.connect(this.K)}function g(a,b,d){this.type="delay";this.sb=[a,b,d];this.ba=p(); this.K=p();this.K.gain.value=d;this.I=p();this.I.gain.value=1-d;this.Ah=p();this.vc=v(a);this.vc.delayTime.value=a;this.Ii=p();this.Ii.gain.value=b;this.ba.connect(this.Ah);this.ba.connect(this.I);this.Ah.connect(this.K);this.Ah.connect(this.vc);this.vc.connect(this.Ii);this.Ii.connect(this.Ah)}function a(a,b,d,c){this.type="convolve";this.sb=[b,d,c];this.ba=p();this.K=p();this.K.gain.value=d;this.I=p();this.I.gain.value=1-d;this.Me=z.createConvolver();a&&(this.Me.normalize=b,this.Me.buffer=a);this.ba.connect(this.Me); this.ba.connect(this.I);this.Me.connect(this.K)}function l(a,b,d,e,f){this.type="flanger";this.sb=[a,b,d,e,f];this.ba=p();this.I=p();this.I.gain.value=1-f/2;this.K=p();this.K.gain.value=f/2;this.Pi=p();this.Pi.gain.value=e;this.vc=v(a+b);this.vc.delayTime.value=a;this.lb=z.createOscillator();this.lb.frequency.value=d;this.$b=p();this.$b.gain.value=b;this.ba.connect(this.vc);this.ba.connect(this.I);this.vc.connect(this.K);this.vc.connect(this.Pi);this.Pi.connect(this.vc);this.lb.connect(this.$b);this.$b.connect(this.vc.delayTime); c(this.lb)}function w(a,b,d,e,f,k){this.type="phaser";this.sb=[a,b,d,e,f,k];this.ba=p();this.I=p();this.I.gain.value=1-k/2;this.K=p();this.K.gain.value=k/2;this.Ja=z.createBiquadFilter();this.Ja.type="number"===typeof this.Ja.type?7:"allpass";this.Ja.frequency.value=a;this.Ja.detune&&(this.Ja.detune.value=b);this.Ja.Q.value=d;this.lb=z.createOscillator();this.lb.frequency.value=f;this.$b=p();this.$b.gain.value=e;this.ba.connect(this.Ja);this.ba.connect(this.I);this.Ja.connect(this.K);this.lb.connect(this.$b); this.$b.connect(this.Ja.frequency);c(this.lb)}function f(a){this.type="gain";this.sb=[a];this.fa=p();this.fa.gain.value=a}function s(a,b){this.type="tremolo";this.sb=[a,b];this.fa=p();this.fa.gain.value=1-b/2;this.lb=z.createOscillator();this.lb.frequency.value=a;this.$b=p();this.$b.gain.value=b/2;this.lb.connect(this.$b);this.$b.connect(this.fa.gain);c(this.lb)}function y(a,b){this.type="ringmod";this.sb=[a,b];this.ba=p();this.K=p();this.K.gain.value=b;this.I=p();this.I.gain.value=1-b;this.Ph=p(); this.Ph.gain.value=0;this.lb=z.createOscillator();this.lb.frequency.value=a;this.lb.connect(this.Ph.gain);c(this.lb);this.ba.connect(this.Ph);this.ba.connect(this.I);this.Ph.connect(this.K)}function D(a,b,d,c,e){this.type="distortion";this.sb=[a,b,d,c,e];this.ba=p();this.Ej=p();this.Dj=p();this.ov(d,Math.pow(10,c/20));this.K=p();this.K.gain.value=e;this.I=p();this.I.gain.value=1-e;this.hk=z.createWaveShaper();this.Gi=new Float32Array(65536);this.Dt(a,b);this.hk.Gi=this.Gi;this.ba.connect(this.Ej); this.ba.connect(this.I);this.Ej.connect(this.hk);this.hk.connect(this.Dj);this.Dj.connect(this.K)}function k(a,b,d,c,e){this.type="compressor";this.sb=[a,b,d,c,e];this.fa=z.createDynamicsCompressor();try{this.fa.threshold.value=a,this.fa.knee.value=b,this.fa.ratio.value=d,this.fa.attack.value=c,this.fa.release.value=e}catch(f){}}function d(a,b){this.type="analyser";this.sb=[a,b];this.fa=z.createAnalyser();this.fa.fftSize=a;this.fa.smoothingTimeConstant=b;this.Bt=new Float32Array(this.fa.frequencyBinCount); this.Pp=new Uint8Array(a);this.Hh=0}function q(){this.J=null;this.oj=0;this.Ee=[];this.Ll=this.gj=this.fj=0}function n(a,b){this.src=a;this.P=N;this.Sc=b;this.kn=!1;var d=this;this.Jl=this.Vl=null;this.jg=[];this.Nj=0;this.Im=this.Qk=this.Up=this.yj=!1;1===N&&b&&(this.P=0,this.Vl=p());this.Je=this.ma=null;var c;switch(this.P){case 0:this.ma=new Audio;this.ma.addEventListener("canplaythrough",function(){d.Im=!0});1===N&&z.createMediaElementSource&&!/wiiu/i.test(navigator.userAgent)&&(this.Up=!0,this.ma.addEventListener("canplay", function(){d.Jl||(d.Jl=z.createMediaElementSource(d.ma),d.Jl.connect(d.Vl))}));this.ma.autoplay=!1;this.ma.Ow="auto";this.ma.src=a;break;case 1:c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(){d.Je=c.response;d.ys()};c.onerror=function(){d.Qk=!0};c.send();break;case 2:this.ma=!0;break;case 3:this.ma=!0}}function u(a,b){var d=this;this.tag=b;this.bb=this.hd=!0;this.src=a.src;this.buffer=a;this.P=N;this.Sc=a.Sc;this.playbackRate=1;this.Ek=!0;this.zc=this.Td=!1; this.Ob=0;this.jh=this.Uf=this.md=!1;this.volume=1;this.ef=1===J&&!this.Sc||2===J;this.fg=1;this.startTime=this.ef?x.Wb.X:x.yd.X;this.Fa=this.Ua=null;this.nd=!1;this.Ea=null;this.op=this.np=this.mp=this.lp=this.qp=this.pp=0;this.j=null;var c=!1;1!==this.P||0!==this.buffer.P||this.buffer.Up||(this.P=0);switch(this.P){case 0:this.Sc?(this.j=a.ma,c=!a.kn,a.kn=!0):(this.j=new Audio,this.j.autoplay=!1,this.j.src=a.ma.src,c=!0);c&&this.j.addEventListener("ended",function(){O=d.tag;d.bb=!0;x.trigger(nc.prototype.d.lk, R)});break;case 1:this.Ua=p();this.Ua.connect(m(b));1===this.buffer.P?a.ma&&(this.j=z.createBufferSource(),this.j.buffer=a.ma,this.j.connect(this.Ua)):(this.j=this.buffer.ma,this.buffer.Vl.connect(this.Ua));break;case 2:this.j=new window.Media(I+this.src,null,null,function(a){a===window.Media.MEDIA_STOPPED&&(d.Ek=!0,d.bb=!0,O=d.tag,x.trigger(nc.prototype.d.lk,R))});break;case 3:this.j=!0}}function F(a){ya.length=0;if(a.length){var b,d,c;b=0;for(d=A.length;b<d;b++)c=A[b],kb(a,c.tag)&&ya.push(c)}else B&& !B.We()&&(ya.length=1,ya[0]=B)}function S(a,b){U.hasOwnProperty(a)?U[a].push(b):U[a]=[b];var d,c,e,f,k=z.destination;if(U.hasOwnProperty(a)&&(e=U[a],e.length))for(k=e[0].lc(),d=0,c=e.length;d<c;d++)f=e[d],d+1===c?f.rc(z.destination):f.rc(e[d+1].lc());F(a);d=0;for(c=ya.length;d<c;d++)ya[d].Zu(k);Fa&&xb===a&&(Fa.disconnect(),Fa.connect(k))}function C(){}function oa(){}var fa=nc.prototype;fa.ua=function(a){this.ta=a;this.b=a.b};fa.ua.prototype.U=function(){};var x=null,R=null,O="",I="",N=0,z=null,K= [],A=[],B=null,P=!1,J=0,G=!1,H=1,ga=0,M=0,na=1,ha=1,wa=10,xa=1E4,uc=1,Fa=null,xb="",Va=!1,Wa=[],U={},xc="lowpass highpass bandpass lowshelf highshelf peaking notch allpass".split(" ");t.prototype.rc=function(a){this.K.disconnect();this.K.connect(a);this.I.disconnect();this.I.connect(a)};t.prototype.remove=function(){this.ba.disconnect();this.Ja.disconnect();this.K.disconnect();this.I.disconnect()};t.prototype.lc=function(){return this.ba};g.prototype.rc=function(a){this.K.disconnect();this.K.connect(a); this.I.disconnect();this.I.connect(a)};g.prototype.remove=function(){this.ba.disconnect();this.Ah.disconnect();this.vc.disconnect();this.Ii.disconnect();this.K.disconnect();this.I.disconnect()};g.prototype.lc=function(){return this.ba};a.prototype.rc=function(a){this.K.disconnect();this.K.connect(a);this.I.disconnect();this.I.connect(a)};a.prototype.remove=function(){this.ba.disconnect();this.Me.disconnect();this.K.disconnect();this.I.disconnect()};a.prototype.lc=function(){return this.ba};l.prototype.rc= function(a){this.I.disconnect();this.I.connect(a);this.K.disconnect();this.K.connect(a)};l.prototype.remove=function(){this.ba.disconnect();this.vc.disconnect();this.lb.disconnect();this.$b.disconnect();this.I.disconnect();this.K.disconnect();this.Pi.disconnect()};l.prototype.lc=function(){return this.ba};w.prototype.rc=function(a){this.I.disconnect();this.I.connect(a);this.K.disconnect();this.K.connect(a)};w.prototype.remove=function(){this.ba.disconnect();this.Ja.disconnect();this.lb.disconnect(); this.$b.disconnect();this.I.disconnect();this.K.disconnect()};w.prototype.lc=function(){return this.ba};f.prototype.rc=function(a){this.fa.disconnect();this.fa.connect(a)};f.prototype.remove=function(){this.fa.disconnect()};f.prototype.lc=function(){return this.fa};s.prototype.rc=function(a){this.fa.disconnect();this.fa.connect(a)};s.prototype.remove=function(){this.lb.disconnect();this.$b.disconnect();this.fa.disconnect()};s.prototype.lc=function(){return this.fa};y.prototype.rc=function(a){this.K.disconnect(); this.K.connect(a);this.I.disconnect();this.I.connect(a)};y.prototype.remove=function(){this.lb.disconnect();this.Ph.disconnect();this.ba.disconnect();this.K.disconnect();this.I.disconnect()};y.prototype.lc=function(){return this.ba};D.prototype.ov=function(a,b){.01>a&&(a=.01);this.Ej.gain.value=a;this.Dj.gain.value=Math.pow(1/a,.6)*b};D.prototype.shape=function(a,b,d){var c=1.05*d*b-b;d=0>a?-1:1;a=0>a?-a:a;b=a<b?a:b+c*(1-Math.exp(-(1/c)*(a-b)));return b*d};D.prototype.Dt=function(a,b){for(var d=Math.pow(10, a/20),c=Math.pow(10,b/20),e=0,f=0;32768>f;++f)e=f/32768,e=this.shape(e,d,c),this.Gi[32768+f]=e,this.Gi[32768-f-1]=-e};D.prototype.rc=function(a){this.K.disconnect();this.K.connect(a);this.I.disconnect();this.I.connect(a)};D.prototype.remove=function(){this.ba.disconnect();this.Ej.disconnect();this.hk.disconnect();this.Dj.disconnect();this.K.disconnect();this.I.disconnect()};D.prototype.lc=function(){return this.ba};k.prototype.rc=function(a){this.fa.disconnect();this.fa.connect(a)};k.prototype.remove= function(){this.fa.disconnect()};k.prototype.lc=function(){return this.fa};d.prototype.ub=function(){this.fa.getFloatFrequencyData(this.Bt);this.fa.getByteTimeDomainData(this.Pp);for(var a=this.fa.fftSize,b=0,d=this.Hh=0,c=0;b<a;b++)c=(this.Pp[b]-128)/128,0>c&&(c=-c),this.Hh<c&&(this.Hh=c),d+=c*c;this.Hh=r(this.Hh);r(Math.sqrt(d/a))};d.prototype.rc=function(a){this.fa.disconnect();this.fa.connect(a)};d.prototype.remove=function(){this.fa.disconnect()};d.prototype.lc=function(){return this.fa};q.prototype.Qh= function(a){if(this.J=a)this.fj=this.J.x,this.gj=this.J.y;this.Ee.length=0};q.prototype.Yi=function(){return!!this.J};q.prototype.ub=function(a){this.J&&0!==a&&(this.Ll=La(this.fj,this.gj,this.J.x,this.J.y),a=Qa(this.fj,this.gj,this.J.x,this.J.y)/a,4>this.Ee.length||this.Ee.shift(),this.Ee.push(a),this.fj=this.J.x,this.gj=this.J.y)};q.prototype.Yn=function(){if(!this.Ee.length)return 0;var a,b,d=0;a=0;for(b=this.Ee.length;a<b;a++)d+=this.Ee[a];return d/this.Ee.length};q.prototype.cl=function(){return Math.cos(this.Ll)* this.Yn()};q.prototype.dl=function(){return Math.sin(this.Ll)*this.Yn()};var vc=!1;n.prototype.ys=function(){if(!this.ma&&this.Je){var a=this;if(z.decodeAudioData)z.decodeAudioData(this.Je,function(b){a.ma=b;a.Je=null;var d,c,e;if(ia(a.Aj)||G)ia(a.Ai)||(d=a.Ai.Me,d.normalize=a.Zo,d.buffer=b);else if(a.jg.length){d=0;for(c=a.jg.length;d<c;d++){b=a.jg[d];e=new u(a,b.Xp);e.Oj(!0);if("undefined"!==typeof b.bp&&(b.J=x.Tg(b.bp),!b.J))continue;if(b.J){var f=Pa(b.J.x,b.J.y,-b.J.k.gb(),ga,M,!0),k=Pa(b.J.x, b.J.y,-b.J.k.gb(),ga,M,!1);e.lm(f,k,Ga(b.J.g-b.J.k.gb()),b.il,b.Nl,b.Ql);e.Qh(b.J)}else e.lm(b.x,b.y,b.cs,b.il,b.Nl,b.Ql);e.play(a.Fl,a.Hm,a.Nj);a.yj&&e.pause();A.push(e)}a.jg.length=0}else e=new u(a,a.Aj),e.play(a.Fl,a.Hm,a.Nj),a.yj&&e.pause(),A.push(e)},function(){a.Qk=!0});else if(this.ma=z.createBuffer(this.Je,!1),this.Je=null,ia(this.Aj)||G)ia(this.Ai)||(b=this.Ai.Me,b.normalize=this.Zo,b.buffer=this.ma);else{var b=new u(this,this.Aj);b.play(this.Fl,this.Hm,this.Nj);this.yj&&b.pause();A.push(b)}}}; n.prototype.lo=function(){switch(this.P){case 0:var a=4<=this.ma.readyState;a&&(this.Im=!0);return a||this.Im;case 1:return!!this.Je||!!this.ma;case 2:return!0;case 3:return!0}return!1};n.prototype.su=function(){switch(this.P){case 0:return this.lo();case 1:return!!this.ma;case 2:return!0;case 3:return!0}return!1};n.prototype.hu=function(){switch(this.P){case 0:return!!this.ma.error;case 1:return this.Qk}return!1};u.prototype.We=function(){var a;switch(this.P){case 0:return this.j.ended;case 1:if(1=== this.buffer.P){if(!this.hd&&!this.bb&&this.j.loop||this.zc)return!1;a=this.ef?x.Wb.X:x.yd.X;var b=this.playbackRate;0===b&&(b=1E-6);return a-this.startTime>this.buffer.ma.duration/b}return this.j.ended;case 2:return this.Ek;case 3:!0}return!0};u.prototype.ss=function(){return this.hd||this.bb?!0:this.We()};u.prototype.Oj=function(a){1===N&&(!this.nd&&a?this.Ua&&(this.Fa||(this.Fa=z.createPanner(),this.Fa.panningModel="number"===typeof this.Fa.panningModel?na:["equalpower","HRTF","soundfield"][na], this.Fa.distanceModel="number"===typeof this.Fa.distanceModel?ha:["linear","inverse","exponential"][ha],this.Fa.refDistance=wa,this.Fa.maxDistance=xa,this.Fa.rolloffFactor=uc),this.Ua.disconnect(),this.Ua.connect(this.Fa),this.Fa.connect(m(this.tag)),this.nd=!0):this.nd&&!a&&this.Ua&&(this.Fa.disconnect(),this.Ua.disconnect(),this.Ua.connect(m(this.tag)),this.nd=!1))};u.prototype.lm=function(a,b,d,c,e,f){this.nd&&1===N&&(this.Fa.setPosition(a,b,0),this.Fa.setOrientation(Math.cos(V(d)),Math.sin(V(d)), 0),this.Fa.coneInnerAngle=c,this.Fa.coneOuterAngle=e,this.Fa.coneOuterGain=f,this.pp=a,this.qp=b,this.lp=d,this.mp=c,this.np=e,this.op=f)};u.prototype.Qh=function(a){this.nd&&1===N&&(this.Ea||(this.Ea=new q),this.Ea.Qh(a))};u.prototype.ub=function(a){if(this.nd&&1===N&&this.Ea&&this.Ea.Yi()&&this.cf()){this.Ea.ub(a);a=this.Ea.J;var b=Pa(a.x,a.y,-a.k.gb(),ga,M,!0),d=Pa(a.x,a.y,-a.k.gb(),ga,M,!1);this.Fa.setPosition(b,d,0);b=0;"undefined"!==typeof this.Ea.J.g&&(b=a.g-a.k.gb(),this.Fa.setOrientation(Math.cos(b), Math.sin(b),0));b=Pa(this.Ea.cl(),this.Ea.dl(),-a.k.gb(),0,0,!0);d=Pa(this.Ea.cl(),this.Ea.dl(),-a.k.gb(),0,0,!1);this.Fa.setVelocity(b,d,0)}};u.prototype.play=function(a,d,e){var f=this.j;this.md=a;this.volume=d;e=e||0;switch(this.P){case 0:1!==f.playbackRate&&(f.playbackRate=1);f.volume!==d*H&&(f.volume=d*H);f.loop!==a&&(f.loop=a);f.muted&&(f.muted=!1);if(f.currentTime!==e)try{f.currentTime=e}catch(k){}if(this.Sc&&Va&&!x.ld)Wa.push(this);else try{this.j.play()}catch(n){console&&console.log&&console.log("[C2] WARNING: exception trying to play audio '"+ this.buffer.src+"': ",n)}break;case 1:this.muted=!1;this.fg=1;if(1===this.buffer.P)this.Ua.gain.value=d*H,this.hd||(this.j=z.createBufferSource(),this.j.buffer=this.buffer.ma,this.j.connect(this.Ua)),this.j.loop=a,0===e?c(this.j):b(this.j,e,this.Te());else{1!==f.playbackRate&&(f.playbackRate=1);f.loop!==a&&(f.loop=a);f.volume=d*H;if(f.currentTime!==e)try{f.currentTime=e}catch(g){}this.Sc&&Va&&!x.ld?Wa.push(this):f.play()}break;case 2:(!this.hd&&this.bb||0!==e)&&f.seekTo(e);f.play();this.Ek=!1;break; case 3:x.ib?AppMobi.context.playSound(this.src,a):AppMobi.player.playSound(this.src,a)}this.playbackRate=1;this.startTime=(this.ef?x.Wb.X:x.yd.X)-e;this.zc=this.bb=this.hd=!1};u.prototype.stop=function(){switch(this.P){case 0:this.j.paused||this.j.pause();break;case 1:1===this.buffer.P?h(this.j):this.j.paused||this.j.pause();break;case 2:this.j.stop();break;case 3:x.ib&&AppMobi.context.stopSound(this.src)}this.bb=!0;this.zc=!1};u.prototype.pause=function(){if(!(this.hd||this.bb||this.We()||this.zc)){switch(this.P){case 0:this.j.paused|| this.j.pause();break;case 1:1===this.buffer.P?(this.Ob=this.al(),this.md&&(this.Ob%=this.Te()),h(this.j)):this.j.paused||this.j.pause();break;case 2:this.j.pause();break;case 3:x.ib&&AppMobi.context.stopSound(this.src)}this.zc=!0}};u.prototype.bv=function(){if(!(this.hd||this.bb||this.We())&&this.zc){switch(this.P){case 0:this.j.play();break;case 1:1===this.buffer.P?(this.j=z.createBufferSource(),this.j.buffer=this.buffer.ma,this.j.connect(this.Ua),this.j.loop=this.md,this.Ua.gain.value=H*this.volume* this.fg,this.startTime=(this.ef?x.Wb.X:x.yd.X)-this.Ob,b(this.j,this.Ob,this.Te())):this.j.play();break;case 2:this.j.play();break;case 3:x.ib&&AppMobi.context.resumeSound(this.src)}this.zc=!1}};u.prototype.seek=function(a){if(!(this.hd||this.bb||this.We()))switch(this.P){case 0:try{this.j.currentTime=a}catch(b){}break;case 1:if(1===this.buffer.P)this.zc?this.Ob=a:(this.pause(),this.Ob=a,this.bv());else try{this.j.currentTime=a}catch(d){}break;case 3:x.ib&&AppMobi.context.seekSound(this.src,a)}}; u.prototype.Zu=function(a){1===this.P&&(this.nd?(this.Fa.disconnect(),this.Fa.connect(a)):(this.Ua.disconnect(),this.Ua.connect(a)))};u.prototype.Te=function(){switch(this.P){case 0:if("undefined"!==typeof this.j.duration)return this.j.duration;break;case 1:return this.buffer.ma.duration;case 2:return this.j.getDuration();case 3:if(x.ib)return AppMobi.context.getDurationSound(this.src)}return 0};u.prototype.al=function(){var a=this.Te(),b=0;switch(this.P){case 0:"undefined"!==typeof this.j.currentTime&& (b=this.j.currentTime);break;case 1:if(1===this.buffer.P){if(this.zc)return this.Ob;b=(this.ef?x.Wb.X:x.yd.X)-this.startTime}else"undefined"!==typeof this.j.currentTime&&(b=this.j.currentTime);break;case 3:x.ib&&(b=AppMobi.context.getPlaybackTimeSound(this.src))}!this.md&&b>a&&(b=a);return b};u.prototype.cf=function(){return!this.zc&&!this.hd&&!this.bb&&!this.We()};u.prototype.Av=function(){var a=this.volume*H;switch(this.P){case 0:"undefined"!==typeof this.j.volume&&this.j.volume!==a&&(this.j.volume= a);break;case 1:1===this.buffer.P?this.Ua.gain.value=a*this.fg:"undefined"!==typeof this.j.volume&&this.j.volume!==a&&(this.j.volume=a)}};u.prototype.Ki=function(a){switch(this.P){case 0:this.j.muted!==!!a&&(this.j.muted=!!a);break;case 1:1===this.buffer.P?(this.fg=a?0:1,this.Ua.gain.value=H*this.volume*this.fg):this.j.muted!==!!a&&(this.j.muted=!!a)}};u.prototype.pv=function(){this.Uf=!0;this.Ki(this.Uf||this.jh)};u.prototype.Pj=function(a){this.jh=!!a;this.Ki(this.Uf||this.jh)};u.prototype.kq=function(){var a= this.playbackRate;this.ef&&(a*=x.Af);switch(this.P){case 0:this.j.playbackRate!==a&&(this.j.playbackRate=a);break;case 1:1===this.buffer.P?this.j.playbackRate.value!==a&&(this.j.playbackRate.value=a):this.j.playbackRate!==a&&(this.j.playbackRate=a)}};u.prototype.rv=function(a){switch(this.P){case 0:a?this.cf()?(this.j.pause(),this.Td=!0):this.Td=!1:this.Td&&this.j.play();break;case 1:a?this.cf()?(1===this.buffer.P?(this.Ob=this.al(),this.md&&(this.Ob%=this.Te()),h(this.j)):this.j.pause(),this.Td= !0):this.Td=!1:this.Td&&(1===this.buffer.P?(this.j=z.createBufferSource(),this.j.buffer=this.buffer.ma,this.j.connect(this.Ua),this.j.loop=this.md,this.Ua.gain.value=H*this.volume*this.fg,this.startTime=(this.ef?x.Wb.X:x.yd.X)-this.Ob,b(this.j,this.Ob,this.Te())):this.j.play());break;case 2:a?this.cf()?(this.j.pause(),this.Td=!0):this.Td=!1:this.Td&&this.j.play()}};fa.la=function(a){this.type=a;x=this.b=a.b;R=this;this.Gb=null;this.rh=-600;!(this.b.mh||this.b.bh&&(this.b.dh||this.b.bj))||this.b.eh|| this.b.Aa||this.b.ol||(Va=!0);z=null;"undefined"!==typeof AudioContext?(N=1,z=new AudioContext):"undefined"!==typeof webkitAudioContext&&(N=1,z=new webkitAudioContext);(this.b.mh&&1===N||Va)&&document.addEventListener("touchstart",function(){var a,b,d;!vc&&z&&(a=z.createBuffer(1,1,22050),b=z.createBufferSource(),b.buffer=a,b.connect(z.destination),c(b),vc=!0);if(Va){if(!G)for(a=0,b=Wa.length;a<b;++a)d=Wa[a],d.bb||d.zc||d.j.play();Wa.length=0}},!0);1!==N&&(this.b.oc&&"undefined"!==typeof window.Media? N=2:this.b.Rf&&(N=3));2===N&&(I=location.href,a=I.lastIndexOf("/"),-1<a&&(I=I.substr(0,a+1)),I=I.replace("file://",""));if(this.b.oo&&this.b.tu&&"undefined"===typeof Audio)alert("It looks like you're using Safari for Windows without Quicktime. Audio cannot be played until Quicktime is installed."),this.b.be(this);else{if(this.b.ib)P=this.b.bh;else try{P=!!(new Audio).canPlayType('audio/ogg; codecs="vorbis"')}catch(b){P=!1}this.b.bk(this)}};var pa=fa.la.prototype;pa.U=function(){this.b.Hf=this;J= this.A[0];this.Ud=this.A[1];this.Pu=0!==this.A[2];na=this.A[3];ha=this.A[4];this.rh=-this.A[5];wa=this.A[6];xa=this.A[7];uc=this.A[8];this.Gb=new q;var a=this.b.W||this.b.width,b=this.b.V||this.b.height;1===N&&("undefined"!==typeof z.listener.dopplerFactor&&(z.listener.dopplerFactor=0),z.listener.setPosition(a/2,b/2,this.rh),z.listener.setOrientation(0,0,1,0,-1,0),window.c2OnAudioMicStream=function(a,b){Fa&&Fa.disconnect();xb=b.toLowerCase();Fa=z.createMediaStreamSource(a);Fa.connect(m(xb))});this.b.jn(function(a){R.Nu(a)}); var d=this;this.b.tk(function(a){d.Rl(a)})};pa.Rl=function(a){var b,d,c;b=0;for(d=A.length;b<d;b++)c=A[b],c.Ea&&c.Ea.J===a&&(c.Ea.J=null,c.nd&&c.cf()&&c.md&&c.stop());this.Gb.J===a&&(this.Gb.J=null)};pa.Ib=function(){var a={silent:G,masterVolume:H,listenerZ:this.rh,listenerUid:this.Gb.Yi()?this.Gb.J.uid:-1,playing:[],effects:{}},b=a.playing,d,c,e,f,k,n;d=0;for(c=A.length;d<c;d++)e=A[d],!e.cf()||3===this.Ud||e.Sc&&1===this.Ud||!e.Sc&&2===this.Ud||(f=e.al(),e.md&&(f%=e.Te()),f={tag:e.tag,buffersrc:e.buffer.src, is_music:e.Sc,playbackTime:f,volume:e.volume,looping:e.md,muted:e.Uf,playbackRate:e.playbackRate,paused:e.zc,resume_position:e.Ob},e.nd&&(f.pan={},n=f.pan,e.Ea&&e.Ea.Yi()?n.objUid=e.Ea.J.uid:(n.x=e.pp,n.y=e.qp,n.a=e.lp),n.ia=e.mp,n.oa=e.np,n.og=e.op),b.push(f));b=a.effects;for(k in U)if(U.hasOwnProperty(k)){e=[];d=0;for(c=U[k].length;d<c;d++)e.push({type:U[k][d].type,params:U[k][d].sb});b[k]=e}return a};var Xa=[];pa.Zb=function(b){var c=b.silent;H=b.masterVolume;this.rh=b.listenerZ;this.Gb.Qh(null); var e=b.listenerUid;-1!==e&&(this.Gb.oj=e,Xa.push(this.Gb));var e=b.playing,n,h,m,p,u,r,v,F,C,x,z;if(3!==this.Ud)for(n=0,h=A.length;n<h;n++)C=A[n],C.Sc&&1===this.Ud||(C.Sc||2!==this.Ud)&&C.stop();for(u in U)if(U.hasOwnProperty(u))for(n=0,h=U[u].length;n<h;n++)U[u][n].remove();Ua(U);for(u in b.effects)if(b.effects.hasOwnProperty(u))for(r=b.effects[u],n=0,h=r.length;n<h;n++)switch(m=r[n].type,x=r[n].params,m){case "filter":S(u,new t(x[0],x[1],x[2],x[3],x[4],x[5]));break;case "delay":S(u,new g(x[0], x[1],x[2]));break;case "convolve":m=x[2];C=this.Si(m,!1);C.ma?m=new a(C.ma,x[0],x[1],m):(m=new a(null,x[0],x[1],m),C.Zo=x[0],C.Ai=m);S(u,m);break;case "flanger":S(u,new l(x[0],x[1],x[2],x[3],x[4]));break;case "phaser":S(u,new w(x[0],x[1],x[2],x[3],x[4],x[5]));break;case "gain":S(u,new f(x[0]));break;case "tremolo":S(u,new s(x[0],x[1]));break;case "ringmod":S(u,new y(x[0],x[1]));break;case "distortion":S(u,new D(x[0],x[1],x[2],x[3],x[4]));break;case "compressor":S(u,new k(x[0],x[1],x[2],x[3],x[4])); break;case "analyser":S(u,new d(x[0],x[1]))}n=0;for(h=e.length;n<h;n++)3===this.Ud||(b=e[n],m=b.buffersrc,p=b.is_music,u=b.tag,r=b.playbackTime,v=b.looping,F=b.volume,z=(x=b.pan)&&x.hasOwnProperty("objUid")?x.objUid:-1,p&&1===this.Ud)||!p&&2===this.Ud||((C=this.Ti(m,u,p,v,F))?(C.Ob=b.resume_position,C.Oj(!!x),C.play(v,F,r),C.kq(),C.Av(),C.Ki(C.Uf||C.jh),b.paused&&C.pause(),b.muted&&C.pv(),C.Ki(C.Uf||C.jh),x&&(-1!==z?(C.Ea=C.Ea||new q,C.Ea.oj=z,Xa.push(C.Ea)):C.lm(x.x,x.y,x.a,x.ia,x.oa,x.og))):(C= this.Si(m,p),C.Nj=r,C.yj=b.paused,x&&(-1!==z?C.jg.push({bp:z,il:x.ia,Nl:x.oa,Ql:x.og,Xp:u}):C.jg.push({x:x.x,y:x.y,cs:x.a,il:x.ia,Nl:x.oa,Ql:x.og,Xp:u}))));if(c&&!G){n=0;for(h=A.length;n<h;n++)A[n].Pj(!0);G=!0}else if(!c&&G){n=0;for(h=A.length;n<h;n++)A[n].Pj(!1);G=!1}};pa.cd=function(){var a,b,d,c;a=0;for(b=Xa.length;a<b;a++)d=Xa[a],c=this.b.Tg(d.oj),d.Qh(c),d.oj=-1,c&&(ga=c.x,M=c.y);Xa.length=0};pa.Nu=function(a){if(!this.Pu){!a&&z&&z.resume&&z.resume();var b,d;b=0;for(d=A.length;b<d;b++)A[b].rv(a); a&&z&&z.suspend&&z.suspend()}};pa.ub=function(){var a=this.b.oe,b,d,c;b=0;for(d=A.length;b<d;b++)c=A[b],c.ub(a),0===c.P||3===c.P||c.hd||c.bb||!c.We()||(c.bb=!0,O=c.tag,x.trigger(nc.prototype.d.lk,R)),0!==J&&c.kq();var e,f;for(e in U)if(U.hasOwnProperty(e))for(c=U[e],b=0,d=c.length;b<d;b++)f=c[b],f.ub&&f.ub();1===N&&this.Gb.Yi()&&(this.Gb.ub(a),ga=this.Gb.J.x,M=this.Gb.J.y,z.listener.setPosition(this.Gb.J.x,this.Gb.J.y,this.rh),z.listener.setVelocity(this.Gb.cl(),this.Gb.dl(),0))};var Ya=[];pa.qv= function(a){var b,d,c,e,f,k=0;b=0;for(d=a.length;b<d;++b)if(c=a[b],e=c[0],c=2*c[1],(f=4<e.length&&".ogg"===e.substr(e.length-4))&&P||!f&&!P)Ya.push({filename:e,size:c,J:null}),k+=c;return k};pa.tv=function(){var a,b,d,c;a=0;for(b=Ya.length;a<b;++a)d=Ya[a],c=this.b.Og+d.filename,d.J=this.Si(c,!1)};pa.Ot=function(){var a=0,b,d,c;b=0;for(d=Ya.length;b<d;++b)c=Ya[b],c.J.su()||c.J.hu()||this.b.Aa||this.b.bj?a+=c.size:c.J.lo()&&(a+=Math.floor(c.size/2));return a};pa.Si=function(a,b){var d,c,e,f=null;d= 0;for(c=K.length;d<c;d++)if(e=K[d],e.src===a){f=e;break}f||(f=new n(a,b),K.push(f));return f};pa.Ti=function(a,b,d,c,e){var f,k,n;f=0;for(k=A.length;f<k;f++)if(n=A[f],n.src===a&&(n.ss()||d))return n.tag=b,n;a=this.Si(a,d);if(!a.ma)return"<preload>"!==b&&(a.Aj=b,a.Fl=c,a.Hm=e),null;n=new u(a,b);A.push(n);return n};var ya=[];C.prototype.lk=function(a){return kb(O,a)};C.prototype.Vq=function(a){F(a);var b;a=0;for(b=ya.length;a<b;a++)if(ya[a].cf())return!0;return!1};fa.d=new C;oa.prototype.Play=function(a, b,d,c){!G&&(d=e(d),B=this.Ti(this.b.Og+a[0]+(P?".ogg":".m4a"),c,a[1],0!==b,d))&&(B.Oj(!1),B.play(0!==b,d))};oa.prototype.Fr=function(a,b,d,c,f){!G&&(c=e(c),B=this.Ti(this.b.Og+b.toLowerCase()+(P?".ogg":".m4a"),f,1===a,0!==d,c))&&(B.Oj(!1),B.play(0!==d,c))};oa.prototype.Gr=function(a){if(!G){var b=a[1];a=this.b.Og+a[0]+(P?".ogg":".m4a");3===N?this.b.ib?AppMobi.context.loadSound(a):AppMobi.player.loadSound(a):2!==N&&this.Ti(a,"<preload>",b,!1)}};oa.prototype.Ur=function(a){F(a);var b;a=0;for(b=ya.length;a< b;a++)ya[a].stop()};oa.prototype.Or=function(a){var b;2===a&&(a=G?1:0);if(0===a&&!G){a=0;for(b=A.length;a<b;a++)A[a].Pj(!0);G=!0}else if(1===a&&G){a=0;for(b=A.length;a<b;a++)A[a].Pj(!1);G=!1}};fa.u=new oa;fa.Y=new function(){}})();function Y(e){this.b=e} (function(){function e(){}function r(){}function m(){}var p=Y.prototype;p.ua=function(e){this.ta=e;this.b=e.b};p.ua.prototype.U=function(){};p.la=function(e){this.type=e;this.b=e.b};p.la.prototype.U=function(){var e=this;window.addEventListener("resize",function(){e.b.trigger(Y.prototype.d.xr,e)});"undefined"!==typeof navigator.onLine&&(window.addEventListener("online",function(){e.b.trigger(Y.prototype.d.tr,e)}),window.addEventListener("offline",function(){e.b.trigger(Y.prototype.d.sr,e)}));"undefined"!== typeof window.applicationCache&&(window.applicationCache.addEventListener("updateready",function(){e.b.nf=1;e.b.trigger(Y.prototype.d.Wm,e)}),window.applicationCache.addEventListener("progress",function(c){e.b.nf=c.loaded/c.total}));this.b.ib||(document.addEventListener("appMobi.device.update.available",function(){e.b.trigger(Y.prototype.d.Wm,e)}),document.addEventListener("backbutton",function(){e.b.trigger(Y.prototype.d.jk,e)}),document.addEventListener("menubutton",function(){e.b.trigger(Y.prototype.d.Rm, e)}),document.addEventListener("searchbutton",function(){e.b.trigger(Y.prototype.d.yr,e)}),document.addEventListener("tizenhwkey",function(c){var b;switch(c.keyName){case "back":b=e.b.trigger(Y.prototype.d.jk,e);!b&&window.tizen&&window.tizen.application.getCurrentApplication().exit();break;case "menu":(b=e.b.trigger(Y.prototype.d.Rm,e))||c.preventDefault()}}));this.b.ih&&(WinJS.Application.onbackclick=function(){return!!e.b.trigger(Y.prototype.d.jk,e)});this.b.jn(function(c){c?e.b.trigger(Y.prototype.d.ur, e):e.b.trigger(Y.prototype.d.wr,e)});this.wu="undefined"!==typeof window.is_scirra_arcade};e.prototype.tr=function(){return!0};e.prototype.sr=function(){return!0};e.prototype.Wm=function(){return!0};e.prototype.wr=function(){return!0};e.prototype.ur=function(){return!0};e.prototype.xr=function(){return!0};e.prototype.jk=function(){return!0};e.prototype.Rm=function(){return!0};e.prototype.yr=function(){return!0};p.d=new e;r.prototype.Qq=function(e,c){this.b.nc?CocoonJS.App.openURL(e):this.b.yc?ejecta.openURL(e): this.b.sl?Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(e)):navigator.app&&navigator.app.loadUrl?navigator.app.loadUrl(e,{openExternal:!0}):this.b.oc?window.open(e,"_system"):this.wu||this.b.Aa||window.open(e,c)};p.u=new r;m.prototype.URL=function(e){e.La(this.b.Aa?"":window.location.toString())};m.prototype.Jr=function(e){e.ha(screen.width)};m.prototype.Ir=function(e){e.ha(screen.height)};p.Y=new m})();function lc(e){this.b=e} (function(){function e(){this.name="";this.Oh=0;this.sb=[]}function r(){h++;h===b.length&&b.push(new e);return b[h]}function m(){}function p(){}function v(){}var c=lc.prototype;c.ua=function(b){this.ta=b;this.b=b.b};c.ua.prototype.U=function(){};c.la=function(b){this.type=b;this.b=b.b};var b=[],h=-1;c.la.prototype.U=function(){var b=this;window.c2_callFunction=function(c,a){var e,m,f,p=r();p.name=c.toLowerCase();p.Oh=0;if(a)for(p.sb.length=a.length,e=0,m=a.length;e<m;++e)f=a[e],p.sb[e]="number"=== typeof f||"string"===typeof f?f:"boolean"===typeof f?f?1:0:0;else p.sb.length=0;b.b.trigger(lc.prototype.d.hi,b,p.name);h--;return p.Oh}};m.prototype.hi=function(c){var e=0>h?null:b[h];return e?kb(c,e.name):!1};c.d=new m;p.prototype.CallFunction=function(b,c){var a=r();a.name=b.toLowerCase();a.Oh=0;Ba(a.sb,c);this.b.trigger(lc.prototype.d.hi,this,a.name);h--};c.u=new p;v.prototype.wq=function(b,c){var a=r();a.name=c.toLowerCase();a.Oh=0;a.sb.length=0;var e,m;e=2;for(m=arguments.length;e<m;e++)a.sb.push(arguments[e]); this.b.trigger(lc.prototype.d.hi,this,a.name);h--;b.mm(a.Oh)};c.Y=new v})();function X(e){this.b=e} (function(){function e(){if(0===this.Ik.length){var a=document.createElement("canvas");a.width=this.width;a.height=this.height;var b=a.getContext("2d");this.qg?b.drawImage(this.G,this.hg,this.ig,this.width,this.height,0,0,this.width,this.height):b.drawImage(this.G,0,0,this.width,this.height);this.Ik=a.toDataURL("image/png")}return this.Ik}function r(){}function m(a){a[0]=0;a[1]=0;a[2]=0;w.push(a)}function p(a,b){return a<b?""+a+","+b:""+b+","+a}function v(a,b,c,e){b=b.uid;c=c.uid;var f=p(b,c);if(a.hasOwnProperty(f))a[f][2]= e;else{var g=w.length?w.pop():[0,0,0];g[0]=b;g[1]=c;g[2]=e;a[f]=g}}function c(a,b,c){b=p(b.uid,c.uid);a.hasOwnProperty(b)&&(m(a[b]),delete a[b])}function b(a,b,c){b=p(b.uid,c.uid);if(a.hasOwnProperty(b))return f=a[b][2],!0;f=-2;return!1}function h(){}var t=X.prototype;t.ua=function(a){this.ta=a;this.b=a.b};var g=t.ua.prototype;g.U=function(){if(!this.F){var a,b,c,f,g,h,m,l,p;this.Kc=[];this.Yg=!1;a=0;for(b=this.Rb.length;a<b;a++){g=this.Rb[a];m={};m.name=g[0];m.speed=g[1];m.loop=g[2];m.fm=g[3];m.Kj= g[4];m.tp=g[5];m.Z=g[6];m.frames=[];c=0;for(f=g[7].length;c<f;c++)h=g[7][c],l={},l.Yj=h[0],l.vm=h[1],l.hg=h[2],l.ig=h[3],l.width=h[4],l.height=h[5],l.duration=h[6],l.Db=h[7],l.Eb=h[8],l.jl=h[9],l.Bj=h[10],l.up=h[11],l.qg=0!==l.width,l.Ik="",l.Hw=e,p={left:0,top:0,right:1,bottom:1},l.nm=p,l.M=null,(p=this.b.zt(h[0]))?l.G=p:(l.G=new Image,l.G.vs=h[0],l.G.zn=h[1],l.G.rs=null,this.b.qq(l.G,h[0])),m.frames.push(l),this.Kc.push(l);this.Rb[a]=m}}};g.jq=function(){var a,b,c;a=0;for(b=this.c.length;a<b;a++)c= this.c[a],c.Ei=c.jc.M};g.vj=function(){if(!this.F){var a,b,c;a=0;for(b=this.Kc.length;a<b;++a)c=this.Kc[a],c.G.rs=null,c.M=null;this.Yg=!1;this.jq()}};g.xj=function(){if(!this.F&&this.c.length){var a,b,c;a=0;for(b=this.Kc.length;a<b;++a)c=this.Kc[a],c.M=this.b.B.$f(c.G,!1,this.b.ea,c.up);this.jq()}};g.Al=function(){if(!this.F&&!this.Yg&&this.b.B){var a,b,c;a=0;for(b=this.Kc.length;a<b;++a)c=this.Kc[a],c.M=this.b.B.$f(c.G,!1,this.b.ea,c.up);this.Yg=!0}};g.fk=function(){if(!this.F&&!this.c.length&& this.Yg){var a,b,c;a=0;for(b=this.Kc.length;a<b;++a)c=this.Kc[a],this.b.B.deleteTexture(c.M),c.M=null;this.Yg=!1}};var a=[];g.Fj=function(b){var d,c,e;d=a.length=0;for(c=this.Kc.length;d<c;++d)e=this.Kc[d].G,-1===a.indexOf(e)&&(b.drawImage(e,0,0),a.push(e))};t.la=function(a){this.type=a;this.b=a.b;a=this.type.Rb[0].frames[0].Bj;this.ac?this.ka.Th(a):this.ka=new eb(a)};var l=t.la.prototype;l.U=function(){this.visible=0===this.A[0];this.Zi=this.hh=!1;this.Le=0!==this.A[3];1===this.type.Rb.length&&1=== this.type.Rb[0].frames.length||0===this.type.Rb[0].speed||(this.b.bk(this),this.hh=!0);this.ya=this.Qn(this.A[1])||this.type.Rb[0];this.C=this.A[2];0>this.C&&(this.C=0);this.C>=this.ya.frames.length&&(this.C=this.ya.frames.length-1);var a=this.ya.frames[this.C];this.ka.Th(a.Bj);this.Db=a.Db;this.Eb=a.Eb;this.Ig=this.ya.speed;this.ac?this.dd.reset():this.dd=new cb;this.Kd=this.dd.X;this.ge=!0;this.zd=0;this.Ie=!0;this.Jf=this.ln="";this.wn=0;this.si=-1;this.type.Al();var b,c,e,f,g,h,l,a=0;for(b=this.type.Rb.length;a< b;a++)for(f=this.type.Rb[a],c=0,e=f.frames.length;c<e;c++)g=f.frames[c],0===g.width&&(g.width=g.G.width,g.height=g.G.height),g.qg&&(l=g.G,h=g.nm,h.left=g.hg/l.width,h.top=g.ig/l.height,h.right=(g.hg+g.width)/l.width,h.bottom=(g.ig+g.height)/l.height,0===g.hg&&0===g.ig&&g.width===l.width&&g.height===l.height&&(g.qg=!1));this.jc=this.ya.frames[this.C];this.Ei=this.jc.M};l.Ib=function(){var a={a:this.ya.Z,f:this.C,cas:this.Ig,fs:this.Kd,ar:this.zd,at:this.dd.X};this.ge||(a.ap=this.ge);this.Ie||(a.af= this.Ie);return a};l.Zb=function(a){var b=this.Et(a.a);b&&(this.ya=b);this.C=a.f;0>this.C&&(this.C=0);this.C>=this.ya.frames.length&&(this.C=this.ya.frames.length-1);this.Ig=a.cas;this.Kd=a.fs;this.zd=a.ar;this.dd.reset();this.dd.X=a.at;this.ge=a.hasOwnProperty("ap")?a.ap:!0;this.Ie=a.hasOwnProperty("af")?a.af:!0;this.jc=this.ya.frames[this.C];this.Ei=this.jc.M;this.ka.Th(this.jc.Bj);this.Db=this.jc.Db;this.Eb=this.jc.Eb};l.wk=function(a){this.C=a?0:this.ya.frames.length-1;this.ge=!1;this.ln=this.ya.name; this.Zi=!0;this.b.trigger(X.prototype.d.dr,this);this.b.trigger(X.prototype.d.cr,this);this.Zi=!1;this.zd=0};l.Mw=function(){return this.dd.X};l.ub=function(){this.dd.add(this.b.Vi(this));this.Jf.length&&this.Dn();0<=this.si&&this.En();var a=this.dd.X,b=this.ya,c=b.frames[this.C],e=c.duration/this.Ig;this.ge&&a>=this.Kd+e&&(this.Ie?this.C++:this.C--,this.Kd+=e,this.C>=b.frames.length&&(b.tp?(this.Ie=!1,this.C=b.frames.length-2):b.loop?this.C=b.Kj:(this.zd++,this.zd>=b.fm?this.wk(!1):this.C=b.Kj)), 0>this.C&&(b.tp?(this.C=1,this.Ie=!0,b.loop||(this.zd++,this.zd>=b.fm&&this.wk(!0))):b.loop?this.C=b.Kj:(this.zd++,this.zd>=b.fm?this.wk(!0):this.C=b.Kj)),0>this.C?this.C=0:this.C>=b.frames.length&&(this.C=b.frames.length-1),a>this.Kd+b.frames[this.C].duration/this.Ig&&(this.Kd=a),a=b.frames[this.C],this.Ff(c,a),this.b.ga=!0)};l.Qn=function(a){var b,c,e;b=0;for(c=this.type.Rb.length;b<c;b++)if(e=this.type.Rb[b],kb(e.name,a))return e;return null};l.Et=function(a){var b,c,e;b=0;for(c=this.type.Rb.length;b< c;b++)if(e=this.type.Rb[b],e.Z===a)return e;return null};l.Dn=function(){var a=this.ya.frames[this.C],b=this.Qn(this.Jf);this.Jf="";!b||kb(b.name,this.ya.name)&&this.ge||(this.ya=b,this.Ig=b.speed,0>this.C&&(this.C=0),this.C>=this.ya.frames.length&&(this.C=this.ya.frames.length-1),1===this.wn&&(this.C=0),this.ge=!0,this.Kd=this.dd.X,this.Ie=!0,this.Ff(a,this.ya.frames[this.C]),this.b.ga=!0)};l.En=function(){var a=this.ya.frames[this.C],b=this.C;this.C=T(this.si);0>this.C&&(this.C=0);this.C>=this.ya.frames.length&& (this.C=this.ya.frames.length-1);b!==this.C&&(this.Ff(a,this.ya.frames[this.C]),this.Kd=this.dd.X,this.b.ga=!0);this.si=-1};l.Ff=function(a,b){var c=a.width,e=a.height,f=b.width,g=b.height;c!=f&&(this.width*=f/c);e!=g&&(this.height*=g/e);this.Db=b.Db;this.Eb=b.Eb;this.ka.Th(b.Bj);this.Da();this.jc=b;this.Ei=b.M;c=0;for(e=this.S.length;c<e;c++)f=this.S[c],f.hp&&f.hp(a,b);this.b.trigger(X.prototype.d.Ff,this)};l.Gd=function(a){a.globalAlpha=this.opacity;var b=this.jc,c=b.qg,e=b.G,f=this.x,g=this.y, h=this.width,l=this.height;if(0===this.g&&0<=h&&0<=l)f-=this.Db*h,g-=this.Eb*l,this.b.qd&&(f=Math.round(f),g=Math.round(g)),c?a.drawImage(e,b.hg,b.ig,b.width,b.height,f,g,h,l):a.drawImage(e,f,g,h,l);else{this.b.qd&&(f=Math.round(f),g=Math.round(g));a.save();var m=0<h?1:-1,p=0<l?1:-1;a.translate(f,g);1===m&&1===p||a.scale(m,p);a.rotate(this.g*m*p);f=0-this.Db*la(h);g=0-this.Eb*la(l);c?a.drawImage(e,b.hg,b.ig,b.width,b.height,f,g,la(h),la(l)):a.drawImage(e,f,g,la(h),la(l));a.restore()}};l.wc=function(a){a.ec(this.Ei); a.wf(this.opacity);var b=this.jc,c=this.Sb;if(this.b.qd){var e=Math.round(this.x)-this.x,f=Math.round(this.y)-this.y;b.qg?a.sd(c.va+e,c.wa+f,c.cb+e,c.eb+f,c.Ra+e,c.Sa+f,c.Pa+e,c.Qa+f,b.nm):a.Ij(c.va+e,c.wa+f,c.cb+e,c.eb+f,c.Ra+e,c.Sa+f,c.Pa+e,c.Qa+f)}else b.qg?a.sd(c.va,c.wa,c.cb,c.eb,c.Ra,c.Sa,c.Pa,c.Qa,b.nm):a.Ij(c.va,c.wa,c.cb,c.eb,c.Ra,c.Sa,c.Pa,c.Qa)};l.Kt=function(a){var b=this.jc,c,e;c=0;for(e=b.jl.length;c<e;c++)if(kb(a,b.jl[c][0]))return c;return-1};l.Zk=function(a,b){var c=this.jc,e=c.jl, f;f=Q(a)?this.Kt(a):a-1;f=T(f);if(0>f||f>=e.length)return b?this.x:this.y;var g=(e[f][1]-c.Db)*this.width,e=e[f][2],e=(e-c.Eb)*this.height,c=Math.cos(this.g);f=Math.sin(this.g);var h=g*c-e*f,e=e*c+g*f,g=h+this.x,e=e+this.y;return b?g:e};var w=[],f=-2,s=[];r.prototype.gr=function(a){if(!a)return!1;var d=this.b,e=d.Rg(),g=e.type;e.N.collmemory||(e.N.collmemory={},d.tk(function(a){return function(b){b=b.uid;var d,c;for(d in a)a.hasOwnProperty(d)&&(c=a[d],c[0]===b||c[1]===b)&&(m(a[d]),delete a[d])}}(e.N.collmemory))); var e=e.N.collmemory,h=g.H(),l=a.H(),h=h.Cb(),p,r,t,y,x,w,D,I=this.b.zf,N=I-1,z=d.hb().fb;for(r=0;r<h.length;r++){t=h[r];l.O?(t.xa(),this.b.Ht(t.k,a,t.Oa,s),p=s):p=l.Cb();for(y=0;y<p.length;y++)x=p[y],d.vv(t,x)||d.ts(t,x)?(w=b(e,t,x),w=!w||f<N,v(e,t,x,I),w&&(d.vf(z.ca),w=g.H(),D=a.H(),w.O=!1,D.O=!1,g===a?(w.c.length=2,w.c[0]=t,w.c[1]=x,g.qc()):(w.c.length=1,D.c.length=1,w.c[0]=t,D.c[0]=x,g.qc(),a.qc()),z.lg(),d.rd(z.ca))):c(e,t,x);s.length=0}return!1};var y=new ca,D=!1;new ua(0,0,0,0);g.finish=function(a){if(D){if(a){var b= this.b.hb().fb.Uc;a=null.H();var c=y.He(),e,f;if(a.O){a.O=!1;a.c.length=c.length;e=0;for(f=c.length;e<f;e++)a.c[e]=c[e];if(b)for(e=a.da.length=0,f=null.c.length;e<f;e++)c=null.c[e],y.contains(c)||a.da.push(c)}else if(b)for(b=a.c.length,a.c.length=b+c.length,e=0,f=c.length;e<f;e++)a.c[b+e]=c[e],Ea(a.da,c[e]);else Ba(a.c,c);null.qc()}y.clear();D=!1}};r.prototype.Rq=function(a){return this.Jf.length?kb(this.Jf,a):kb(this.ya.name,a)};r.prototype.Cq=function(a,b){return bc(this.C,a,b)};r.prototype.cr= function(a){return kb(this.ln,a)};r.prototype.dr=function(){return!0};r.prototype.Ff=function(){return!0};t.d=new r;h.prototype.Vr=function(){this.ge=!1};h.prototype.Kr=function(a,b){this.Jf=a;this.wn=b;this.hh||(this.b.bk(this),this.hh=!0);this.Zi||this.Dn()};h.prototype.Lr=function(a){this.si=a;this.hh||(this.b.bk(this),this.hh=!0);this.Zi||this.En()};h.prototype.Ym=function(a){var b=this.jc,c=b.width*a*(0>this.width?-1:1);a=b.height*a*(0>this.height?-1:1);if(this.width!==c||this.height!==a)this.width= c,this.height=a,this.Da()};t.u=new h;t.Y=new function(){}})();function oc(e){this.b=e} (function(){function e(a,b){return a.length?a.pop():new b}function r(a,b,c){if(c){var e;c=0;for(e=b.length;c<e;c++)a.length<h&&a.push(b[c]);b.length=0}else for(e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a.length<h&&a.push(b[e]),delete b[e])}function m(a,b,c){var g=a.mf;c=c.replace(/\s\s*$/,"");b>=g.length&&g.push(e(t,Object));b=g[b];b.text=c;b.width=a.Il(c);a.sg=ma(a.sg,b.width)}function p(){}function v(){}var c=oc.prototype;c.U=function(){};c.ua=function(a){this.ta=a;this.b=a.b};var b=c.ua.prototype; b.U=function(){this.F||(this.G=new Image,this.G.idtkLoadDisposed=!0,this.G.src=this.Yj,this.b.Bf.push(this.G),this.M=null)};b.vj=function(){this.F||(this.M=null)};b.xj=function(){if(!this.F&&this.c.length){this.M||(this.M=this.b.B.$f(this.G,!1,this.b.ea,this.Zh));var a,b;a=0;for(b=this.c.length;a<b;a++)this.c[a].M=this.M}};b.fk=function(){this.F||this.c.length||!this.M||(this.b.B.deleteTexture(this.M),this.M=null)};b.Fj=function(a){a.drawImage(this.G,0,0)};c.la=function(a){this.type=a;this.b=a.b}; b=c.la.prototype;b.tf=function(){r(t,this.mf,!0);r(g,this.vi,!1);r(a,this.wi,!1);Ua(this.Nc)};b.U=function(){this.G=this.type.G;this.ti=this.A[0];this.ke=this.A[1];this.characterSet=this.A[2];this.text=this.A[3];this.fd=this.A[4];this.visible=0===this.A[5];this.$n=this.A[6]/2;this.nq=this.A[7]/2;this.Iv=0===this.A[9];this.Kf=this.A[10];this.lineHeight=this.A[11];this.yf=this.sg=0;this.Fg=this.A[12];this.Sp=this.A[13];console.log(this.Fg);this.ac?(this.mf.length=0,Ua(this.vi),Ua(this.wi),Ua(this.Nc)): (this.mf=[],this.vi={},this.wi={},this.Nc={});try{if(this.Fg)if(-1!==this.Fg.indexOf('""c2array""'))for(var a=jQuery.parseJSON(this.Fg.replace(/""/g,'"')),b=a.size[1],c=0;c<b;c++)for(var e=a.data[1][c][0],g=a.data[0][c][0],d=0;d<e.length;d++)this.Nc[e.charAt(d)]=g;else for(a=jQuery.parseJSON(this.Fg),b=a.length,c=0;c<b;c++)for(e=a[c][1],g=a[c][0],d=0;d<e.length;d++)this.Nc[e.charAt(d)]=g;-1!==this.Sp&&(this.Nc[" "]=this.Sp)}catch(h){window.console&&window.console.log&&window.console.log("SpriteFont+ Failure: "+ h)}this.tg=!0;this.yl=this.width;this.b.B&&(this.type.M||(this.type.M=this.b.B.$f(this.type.G,!1,this.b.ea,this.type.Zh)),this.M=this.type.M);this.Sr()};b.Ib=function(){var a={t:this.text,csc:this.fd,csp:this.Kf,lh:this.lineHeight,tw:this.sg,th:this.yf,lrt:this.zu,cw:{}},b;for(b in this.Nc)a.cw[b]=this.Nc[b];return a};b.Zb=function(a){this.text=a.t;this.fd=a.csc;this.Kf=a.csp;this.lineHeight=a.lh;this.sg=a.tw;this.yf=a.th;this.zu=a.lrt;for(var b in a.cw)this.Nc[b]=a.cw[b];this.tg=!0;this.yl=this.width}; var h=1E3,t=[],g=[],a=[];b.Sr=function(){for(var b=this.G,c=b.width,h=b.height,b=this.ti,l=this.ke,k=b/c,d=l/h,m=this.characterSet,c=Math.floor(c/b),h=Math.floor(h/l),n=0;n<m.length&&!(n>=c*h);n++){var p=n%c,r=Math.floor(n/c),t=m.charAt(n);if(this.b.B){var v=this.wi,w=p*k,fa=r*d,p=(p+1)*k,r=(r+1)*d;void 0===v[t]&&(v[t]=e(a,ua));v[t].left=w;v[t].top=fa;v[t].right=p;v[t].bottom=r}else v=this.vi,p*=b,r*=l,w=b,fa=l,void 0===v[t]&&(v[t]=e(g,Object)),v[t].x=p,v[t].y=r,v[t].pq=w,v[t].Zn=fa}};var l=[];c.Yr= function(a){l.length=0;for(var b="",c,e=0;e<a.length;)if(c=a.charAt(e),"\n"===c)b.length&&(l.push(b),b=""),l.push("\n"),++e;else if(" "===c||"\t"===c||"-"===c){do b+=a.charAt(e),e++;while(e<a.length&&(" "===a.charAt(e)||"\t"===a.charAt(e)));l.push(b);b=""}else e<a.length&&(b+=c,e++);b.length&&l.push(b)};c.as=function(a){var b=a.text,c=a.mf;if(b&&b.length){var g=a.width;if(2>=g)r(t,c,!0);else{var h=a.fd,d=a.Kf;if(b.length*(a.ti*h+d)-d<=g&&-1===b.indexOf("\n")&&(d=a.Il(b),d<=g)){r(t,c,!0);c.push(e(t, Object));c[0].text=b;c[0].width=d;a.sg=d;a.yf=a.ke*h+a.lineHeight;return}this.bs(a);a.yf=c.length*(a.ke*h+a.lineHeight)}}else r(t,c,!0)};c.bs=function(a){var b=a.Iv,c=a.text,e=a.mf,g=a.width;b&&(this.Yr(c),c=l);var d="",p,n,r,v=0,w=!1;for(r=0;r<c.length;r++)"\n"===c[r]?(!0===w?w=!1:(m(a,v,d),v++),d=""):(w=!1,p=d,d+=c[r],n=a.Il(d.replace(/\s\s*$/,"")),n>g&&(""===p?(m(a,v,d),d="",w=!0):(m(a,v,p),d=c[r]),v++,b||" "!==d||(d="")));d.replace(/\s\s*$/,"").length&&(m(a,v,d),v++);for(r=v;r<e.length;r++)t.length< h&&t.push(e[r]);e.length=v};b.Il=function(a){for(var b=this.Kf,c=a.length,e=0,g=0;g<c;g++)e+=this.Qg(a.charAt(g))*this.fd+b;return e-(0<e?b:0)};b.Qg=function(a){var b=this.Nc;return void 0!==b[a]?b[a]:this.ti};b.Bp=function(){if(this.tg||this.width!==this.yl)this.yf=this.sg=0,this.type.ta.as(this),this.tg=!1,this.yl=this.width};b.Gd=function(a){var b=this.G;if(""!==this.text&&null!=b&&(this.Bp(),!(this.height<this.ke*this.fd+this.lineHeight))){a.globalAlpha=this.opacity;var b=this.x,c=this.y;this.b.qd&& (b=b+.5|0,c=c+.5|0);a.save();a.translate(b,c);a.rotate(this.g);for(var b=this.$n,c=this.fd,e=this.ke*c,g=this.lineHeight,d=this.Kf,h=this.mf,n,l=-(this.Db*this.width),m=-(this.Eb*this.height),m=m+this.nq*ma(0,this.height-this.yf),p=0;p<h.length;p++){var r=h[p].text;n=b*ma(0,this.width-h[p].width);n=l+n;for(var m=m+g,t=0;t<r.length;t++){var v=r.charAt(t),x=this.vi[v];if(n+this.Qg(v)*c>this.width+1E-5)break;void 0!==x&&a.drawImage(this.G,x.x,x.y,x.pq,x.Zn,Math.round(n),Math.round(m),x.pq*c,x.Zn*c); n+=this.Qg(v)*c+d}m+=e;if(m+e+g>this.height)break}a.restore()}};var w=new va;b.wc=function(a){a.ec(this.M);a.wf(this.opacity);if(""!==this.text&&(this.Bp(),!(this.height<this.ke*this.fd+this.lineHeight))){this.xa();var b=this.Sb,c=0,e=0;this.b.qd&&(c=(this.x+.5|0)-this.x,e=(this.y+.5|0)-this.y);var g=this.g,d=this.$n,h=this.nq,n=this.fd,l=this.ke*n,m=this.lineHeight,p=this.Kf,r=this.mf,t=this.yf,v,x;0!==g&&(v=Math.cos(g),x=Math.sin(g));for(var R,c=b.va+c,b=b.wa+e,h=h*ma(0,this.height-t),t=0;t<r.length;t++){e= r[t].text;R=d*ma(0,this.width-r[t].width);for(var h=h+m,O=0;O<e.length;O++){var I=e.charAt(O),N=this.wi[I];if(R+this.Qg(I)*n>this.width+1E-5)break;if(void 0!==N){var z=this.ti*n,K=this.ke*n;w.va=R;w.wa=h;w.cb=R+z;w.eb=h;w.Pa=R;w.Qa=h+K;w.Ra=R+z;w.Sa=h+K;if(0!==g){var z=w,K=v,A=x,B=void 0,B=z.va*K-z.wa*A;z.wa=z.wa*K+z.va*A;z.va=B;B=z.cb*K-z.eb*A;z.eb=z.eb*K+z.cb*A;z.cb=B;B=z.Pa*K-z.Qa*A;z.Qa=z.Qa*K+z.Pa*A;z.Pa=B;B=z.Ra*K-z.Sa*A;z.Sa=z.Sa*K+z.Ra*A;z.Ra=B}w.offset(c,b);a.sd(w.va,w.wa,w.cb,w.eb,w.Ra, w.Sa,w.Pa,w.Qa,N)}R+=this.Qg(I)*n+p}h+=l;if(h+l+m>this.height)break}}};c.d=new function(){};p.prototype.Pr=function(a){L(a)&&1E9>a&&(a=Math.round(1E10*a)/1E10);a=a.toString();this.text!==a&&(this.text=a,this.tg=!0,this.b.ga=!0)};p.prototype.Ym=function(a){a!==this.fd&&(this.fd=a,this.tg=!0,this.b.ga=!0)};b.nw=function(a,b){var c=parseInt(b,10);this.Nc[a]!==c&&(this.Nc[a]=c,this.tg=!0,this.b.ga=!0)};c.u=new p;v.prototype.Text=function(a){a.La(this.text)};c.Y=new v})();function pc(e){this.b=e} (function(){var e=pc.prototype;e.ua=function(e){this.ta=e;this.b=e.b};var r=e.ua.prototype;r.U=function(){this.F||(this.G=new Image,this.G.zn=this.vm,this.b.qq(this.G,this.Yj),this.M=this.pattern=null)};r.vj=function(){this.F||(this.M=null)};r.xj=function(){if(!this.F&&this.c.length){this.M||(this.M=this.b.B.$f(this.G,!0,this.b.ea,this.Zh));var e,p;e=0;for(p=this.c.length;e<p;e++)this.c[e].M=this.M}};r.Al=function(){this.F||this.M||!this.b.B||(this.M=this.b.B.$f(this.G,!0,this.b.ea,this.Zh))};r.fk= function(){this.F||this.c.length||!this.M||(this.b.B.deleteTexture(this.M),this.M=null)};r.Fj=function(e){e.drawImage(this.G,0,0)};e.la=function(e){this.type=e;this.b=e.b};r=e.la.prototype;r.U=function(){this.visible=0===this.A[0];this.Nh=new ua(0,0,0,0);this.co=!1;this.G=this.type.G;this.b.B?(this.type.Al(),this.M=this.type.M):(this.type.pattern||(this.type.pattern=this.b.qa.createPattern(this.type.G,"repeat")),this.pattern=this.type.pattern)};r.cd=function(){this.co=!1;this.G=this.type.G};r.tf= function(){this.b.B&&this.co&&this.M&&(this.b.B.deleteTexture(this.M),this.M=null)};r.Gd=function(e){e.globalAlpha=this.opacity;e.save();e.fillStyle=this.pattern;var p=this.x,r=this.y;this.b.qd&&(p=Math.round(p),r=Math.round(r));var c=-(this.Db*this.width),b=-(this.Eb*this.height),h=c%this.G.width,t=b%this.G.height;0>h&&(h+=this.G.width);0>t&&(t+=this.G.height);e.translate(p,r);e.rotate(this.g);e.translate(h,t);e.fillRect(c-h,b-t,this.width,this.height);e.restore()};r.wc=function(e){e.ec(this.M); e.wf(this.opacity);var p=this.Nh;p.right=this.width/this.G.width;p.bottom=this.height/this.G.height;var r=this.Sb;if(this.b.qd){var c=Math.round(this.x)-this.x,b=Math.round(this.y)-this.y;e.sd(r.va+c,r.wa+b,r.cb+c,r.eb+b,r.Ra+c,r.Sa+b,r.Pa+c,r.Qa+b,p)}else e.sd(r.va,r.wa,r.cb,r.eb,r.Ra,r.Sa,r.Pa,r.Qa,p)};e.d=new function(){};e.u=new function(){};e.Y=new function(){}})();function Z(e){this.b=e} (function(){function e(b){g=b.x;a=b.y;l=b.z}function r(a){w=a.x;f=a.y;s=a.z}function m(a,b,c,d){var e;e=y.length?y.pop():new p;e.init(a,b,c,d);return e}function p(){this.Vh=this.id=this.y=this.x=this.Vj=this.Uj=this.xl=this.time=this.rm=0;this.ai=this.dk=!1}function v(){}function c(){}var b=Z.prototype;b.ua=function(a){this.ta=a;this.b=a.b};b.ua.prototype.U=function(){};b.la=function(a){this.type=a;this.b=a.b;this.touches=[];this.Kl=!1};var h=b.la.prototype,t={left:0,top:0};h.Pg=function(a){var b, c;b=0;for(c=this.touches.length;b<c;b++)if(this.touches[b].id===a)return b;return-1};var g=0,a=0,l=0,w=0,f=0,s=0,y=[];p.prototype.init=function(a,b,c,d){var e=Za();this.rm=this.xl=this.time=e;this.Uj=a;this.Vj=b;this.x=a;this.y=b;this.id=c;this.Vh=d;this.ai=this.dk=!1};p.prototype.update=function(a,b,c){this.xl=this.time;this.time=a;this.x=b;this.y=c;!this.ai&&15<=Qa(this.Uj,this.Vj,this.x,this.y)&&(this.ai=!0)};p.prototype.Eu=function(a,b){!this.dk&&500<=Za()-this.rm&&!this.ai&&15>Qa(this.Uj,this.Vj, this.x,this.y)&&(this.dk=!0,a.wd=this.Vh,a.ug=this.id,a.Pf=b,a.b.trigger(Z.prototype.d.mr,a),a.Dd=this.x,a.Ed=this.y,a.b.trigger(Z.prototype.d.nr,a),a.Pf=0)};var D=-1E3,k=-1E3,d=-1E4;p.prototype.So=function(a,b){if(!this.dk){var c=Za();333>=c-this.rm&&!this.ai&&15>Qa(this.Uj,this.Vj,this.x,this.y)&&(a.wd=this.Vh,a.ug=this.id,a.Pf=b,666>=c-d&&25>Qa(D,k,this.x,this.y)?(a.b.trigger(Z.prototype.d.ir,a),a.Dd=this.x,a.Ed=this.y,a.b.trigger(Z.prototype.d.jr,a),k=D=-1E3,d=-1E4):(a.b.trigger(Z.prototype.d.Ar, a),a.Dd=this.x,a.Ed=this.y,a.b.trigger(Z.prototype.d.Br,a),D=this.x,k=this.y,d=c),a.Pf=0)}};h.U=function(){this.uu=!("undefined"===typeof window.c2isWindows8||!window.c2isWindows8);this.Pf=this.ug=this.wd=this.Ed=this.Dd=this.en=this.dn=this.cn=this.gs=this.es=this.ds=this.Gh=this.Fh=this.Eh=0;this.Ev=0!==this.A[0];var a=0<this.b.Ub?document:this.b.canvas,b=document;this.b.ib?b=a=window.Canvas:this.b.nc&&(b=a=window);var c=this;window.navigator.pointerEnabled?(a.addEventListener("pointerdown",function(a){c.gp(a)}, !1),a.addEventListener("pointermove",function(a){c.fp(a)},!1),b.addEventListener("pointerup",function(a){c.wj(a,!1)},!1),b.addEventListener("pointercancel",function(a){c.wj(a,!0)},!1),this.b.canvas&&(this.b.canvas.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),document.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),this.b.canvas.addEventListener("gesturehold",function(a){a.preventDefault()},!1),document.addEventListener("gesturehold",function(a){a.preventDefault()}, !1))):window.navigator.msPointerEnabled?(a.addEventListener("MSPointerDown",function(a){c.gp(a)},!1),a.addEventListener("MSPointerMove",function(a){c.fp(a)},!1),b.addEventListener("MSPointerUp",function(a){c.wj(a,!1)},!1),b.addEventListener("MSPointerCancel",function(a){c.wj(a,!0)},!1),this.b.canvas&&(this.b.canvas.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),document.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1))):(a.addEventListener("touchstart",function(a){c.jp(a)}, !1),a.addEventListener("touchmove",function(a){c.ip(a)},!1),b.addEventListener("touchend",function(a){c.Tl(a,!1)},!1),b.addEventListener("touchcancel",function(a){c.Tl(a,!0)},!1));if(this.uu){var d=function(a){a=a.reading;c.cn=a.accelerationX;c.dn=a.accelerationY;c.en=a.accelerationZ},f=function(a){a=a.reading;c.Eh=a.yawDegrees;c.Fh=a.pitchDegrees;c.Gh=a.rollDegrees},g=Windows.Devices.Sensors.Accelerometer.getDefault();g&&(g.reportInterval=Math.max(g.minimumReportInterval,16),g.addEventListener("readingchanged", d));var h=Windows.Devices.Sensors.Inclinometer.getDefault();h&&(h.reportInterval=Math.max(h.minimumReportInterval,16),h.addEventListener("readingchanged",f));document.addEventListener("visibilitychange",function(){document.hidden||document.msHidden?(g&&g.removeEventListener("readingchanged",d),h&&h.removeEventListener("readingchanged",f)):(g&&g.addEventListener("readingchanged",d),h&&h.addEventListener("readingchanged",f))},!1)}else window.addEventListener("deviceorientation",function(a){c.Eh=a.alpha|| 0;c.Fh=a.beta||0;c.Gh=a.gamma||0},!1),window.addEventListener("devicemotion",function(a){a.accelerationIncludingGravity&&(c.ds=a.accelerationIncludingGravity.x||0,c.es=a.accelerationIncludingGravity.y||0,c.gs=a.accelerationIncludingGravity.z||0);a.acceleration&&(c.cn=a.acceleration.x||0,c.dn=a.acceleration.y||0,c.en=a.acceleration.z||0)},!1);this.Ev&&!this.b.Aa&&(jQuery(document).mousemove(function(a){c.Lu(a)}),jQuery(document).mousedown(function(a){c.Ku(a)}),jQuery(document).mouseup(function(a){c.Mu(a)})); this.b.Rf&&!this.b.ib&&AppMobi.accelerometer.watchAcceleration(e,{frequency:40,adjustForRotation:!0});this.b.oc&&navigator.accelerometer&&navigator.accelerometer.watchAcceleration&&navigator.accelerometer.watchAcceleration(r,null,{frequency:40});this.b.wv(this)};h.fp=function(a){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&a.preventDefault();var b=this.Pg(a.pointerId),c=Za();if(0<=b){var d=this.b.Aa?t:jQuery(this.b.canvas).offset(),b=this.touches[b];2>c-b.time|| b.update(c,a.pageX-d.left,a.pageY-d.top)}}};h.gp=function(a){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&lb(a)&&a.preventDefault();var b=this.b.Aa?t:jQuery(this.b.canvas).offset(),c=a.pageX-b.left,b=a.pageY-b.top;Za();this.wd=this.touches.length;this.ug=a.pointerId;this.touches.push(m(c,b,a.pointerId,this.wd));this.b.ld=!0;this.b.trigger(Z.prototype.d.Tm,this);this.b.trigger(Z.prototype.d.qk,this);this.Dd=c;this.Ed=b;this.b.trigger(Z.prototype.d.pk,this); this.b.ld=!1}};h.wj=function(a,b){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&lb(a)&&a.preventDefault();var c=this.Pg(a.pointerId);this.wd=0<=c?this.touches[c].Vh:-1;this.ug=0<=c?this.touches[c].id:-1;this.b.ld=!0;this.b.trigger(Z.prototype.d.Sm,this);this.b.trigger(Z.prototype.d.Vm,this);0<=c&&(b||this.touches[c].So(this,c),100>y.length&&y.push(this.touches[c]),this.touches.splice(c,1));this.b.ld=!1}};h.ip=function(a){a.preventDefault&&a.preventDefault(); var b=Za(),c,d,e,f;c=0;for(d=a.changedTouches.length;c<d;c++)if(e=a.changedTouches[c],f=this.Pg(e.identifier),0<=f){var g=this.b.Aa?t:jQuery(this.b.canvas).offset();f=this.touches[f];2>b-f.time||f.update(b,e.pageX-g.left,e.pageY-g.top)}};h.jp=function(a){a.preventDefault&&lb(a)&&a.preventDefault();var b=this.b.Aa?t:jQuery(this.b.canvas).offset();Za();this.b.ld=!0;var c,d,e,f;c=0;for(d=a.changedTouches.length;c<d;c++)if(e=a.changedTouches[c],f=this.Pg(e.identifier),-1===f){f=e.pageX-b.left;var g=e.pageY- b.top;this.wd=this.touches.length;this.ug=e.identifier;this.touches.push(m(f,g,e.identifier,this.wd));this.b.trigger(Z.prototype.d.Tm,this);this.b.trigger(Z.prototype.d.qk,this);this.Dd=f;this.Ed=g;this.b.trigger(Z.prototype.d.pk,this)}this.b.ld=!1};h.Tl=function(a,b){a.preventDefault&&lb(a)&&a.preventDefault();this.b.ld=!0;var c,d,e;c=0;for(d=a.changedTouches.length;c<d;c++)e=a.changedTouches[c],e=this.Pg(e.identifier),0<=e&&(this.wd=this.touches[e].Vh,this.ug=this.touches[e].id,this.b.trigger(Z.prototype.d.Sm, this),this.b.trigger(Z.prototype.d.Vm,this),b||this.touches[e].So(this,e),100>y.length&&y.push(this.touches[e]),this.touches.splice(e,1));this.b.ld=!1};h.Ew=function(){return this.b.Rf&&0===this.Eh&&0!==l?90*l:this.b.oc&&0===this.Eh&&0!==s?90*s:this.Eh};h.Fw=function(){return this.b.Rf&&0===this.Fh&&0!==a?-90*a:this.b.oc&&0===this.Fh&&0!==f?90*f:this.Fh};h.Lw=function(){return this.b.Rf&&0===this.Gh&&0!==g?90*g:this.b.oc&&0===this.Gh&&0!==w?90*w:this.Gh};h.Ku=function(a){a.preventDefault&&this.b.fl&& !this.b.bf&&a.preventDefault();this.jp({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]});this.Kl=!0};h.Lu=function(a){this.Kl&&this.ip({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]})};h.Mu=function(a){a.preventDefault&&this.b.fl&&!this.b.bf&&a.preventDefault();this.b.fl=!0;this.Tl({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]});this.Kl=!1};h.ak=function(){var a,b,c,d=Za();a=0;for(b=this.touches.length;a<b;++a)c=this.touches[a],c.time<=d-50&&(c.xl=d),c.Eu(this, a)};v.prototype.qk=function(){return!0};v.prototype.Vm=function(){return!0};v.prototype.pk=function(a){return a?this.b.Xj(a,this.Dd,this.Ed):!1};var q=[];v.prototype.Wq=function(a){if(!a)return!1;var b=a.H(),c=b.Cb(),d,e,f,g,h,k;f=0;for(g=c.length;f<g;f++){var l=c[f];l.xa();h=0;for(k=this.touches.length;h<k;h++)if(e=this.touches[h],d=l.k.Bb(e.x,e.y,!0),e=l.k.Bb(e.x,e.y,!1),l.yb(d,e)){q.push(l);break}}return q.length?(b.O=!1,Ba(b.c,q),a.qc(),q.length=0,!0):!1};v.prototype.Tm=function(a){a=Math.floor(a); return a===this.wd};v.prototype.Sm=function(a){a=Math.floor(a);return a===this.wd};v.prototype.mr=function(){return!0};v.prototype.Ar=function(){return!0};v.prototype.ir=function(){return!0};v.prototype.nr=function(a){return a?this.b.Xj(a,this.Dd,this.Ed):!1};v.prototype.Br=function(a){return a?this.b.Xj(a,this.Dd,this.Ed):!1};v.prototype.jr=function(a){return a?this.b.Xj(a,this.Dd,this.Ed):!1};b.d=new v;c.prototype.an=function(a,b){var c=this.Pf;if(0>c||c>=this.touches.length)a.D(0);else{var d,e, f,g,h;ia(b)?(d=this.b.Sg(0),e=d.scale,f=d.bd,g=d.Dc,h=d.g,d.scale=1,d.bd=1,d.Dc=1,d.g=0,a.D(d.Bb(this.touches[c].x,this.touches[c].y,!0)),d.scale=e,d.bd=f,d.Dc=g,d.g=h):(d=L(b)?this.b.Sg(b):this.b.$k(b))?a.D(d.Bb(this.touches[c].x,this.touches[c].y,!0)):a.D(0)}};c.prototype.bn=function(a,b){var c=this.Pf;if(0>c||c>=this.touches.length)a.D(0);else{var d,e,f,g,h;ia(b)?(d=this.b.Sg(0),e=d.scale,f=d.bd,g=d.Ec,h=d.g,d.scale=1,d.bd=1,d.Ec=1,d.g=0,a.D(d.Bb(this.touches[c].x,this.touches[c].y,!1)),d.scale= e,d.bd=f,d.Ec=g,d.g=h):(d=L(b)?this.b.Sg(b):this.b.$k(b))?a.D(d.Bb(this.touches[c].x,this.touches[c].y,!1)):a.D(0)}};b.Y=new c})();function qc(e){this.b=e} (function(){function e(){}function r(){}function m(){}var p=qc.prototype;p.ua=function(b){this.ta=b;this.b=b.b};p.ua.prototype.U=function(){};p.la=function(b){this.type=b;this.b=b.b};var v=p.la.prototype,c="",b="undefined"!==typeof window.is_scirra_arcade;b&&(c="arcade"+window.scirra_arcade_id);v.U=function(){"undefined"===typeof localStorage&&E("[Construct 2] Webstorage plugin: local storage is not supported on this platform.");"undefined"===typeof sessionStorage&&E("[Construct 2] Webstorage plugin: session storage is not supported on this platform.")}; e.prototype.Zq=function(b){return"undefined"===typeof localStorage?!1:null!=localStorage.getItem(c+b)};e.prototype.Um=function(){return!0};p.d=new e;r.prototype.Wr=function(b,e){if("undefined"!==typeof localStorage)try{localStorage.setItem(c+b,e)}catch(g){this.b.trigger(qc.prototype.d.Um,this)}};r.prototype.zq=function(){"undefined"!==typeof localStorage&&(b||localStorage.clear())};r.prototype.Nm=function(e,m){if("undefined"!==typeof localStorage){var g;try{g=JSON.parse(e)}catch(a){return}if(g.c2dictionary){g= g.data;0!==m||b||localStorage.clear();for(var l in g)if(g.hasOwnProperty(l))try{localStorage.setItem(c+l,g[l])}catch(p){this.b.trigger(qc.prototype.d.Um,this);break}}}};p.u=new r;m.prototype.$q=function(b,e){"undefined"===typeof localStorage?b.La(""):b.La(localStorage.getItem(c+e)||"")};m.prototype.gi=function(e){if("undefined"===typeof localStorage)e.La("");else{var m={},g,a,l;g=0;for(a=localStorage.length;g<a;g++)l=localStorage.key(g),b?l.substr(0,c.length)===c&&(m[l.substr(c.length)]=localStorage.getItem(l)): m[l]=localStorage.getItem(l);e.La(JSON.stringify({c2dictionary:!0,data:m}))}};p.Y=new m})();function rc(e){this.b=e} (function(){function e(){}var r=rc.prototype;r.ua=function(e){this.ta=e;this.b=e.b};r.ua.prototype.U=function(){};r.la=function(e){this.type=e;this.b=e.b};r.la.prototype.U=function(){if(window.admob){this.yg=window.admob;var e=0!==this.A[0],p=0!==this.A[1];this.ls=this.A[2];this.ms=this.A[3];this.nu=this.A[4];this.ou=this.A[5];this.Gv=this.A[6];this.Hv=this.A[7];this.b.bh?(this.ki=this.ls,this.aj=this.ms):this.b.mh?(this.ki=this.nu,this.aj=this.ou):this.b.ff||this.b.ih?(this.ki=this.Gv,this.aj=this.Hv): this.aj=this.ki="";this.po=!1;this.yg.setUp(this.ki,this.aj,e,p);var r=this;this.yg.onFullScreenAdLoaded=function(){r.b.trigger(rc.prototype.d.qr,r)};this.yg.onFullScreenAdShown=function(){r.po=!0;r.b.trigger(rc.prototype.d.pr,r)};this.yg.onFullScreenAdClosed=function(){r.po=!1;r.b.trigger(rc.prototype.d.or,r)};this.yg.onBannerAdPreloaded=function(){r.b.trigger(rc.prototype.d.er,r)}}else E("[Construct 2] com.cranberrygame.phonegap.plugin.ad.admob plugin is required to show Admob ads with Cordova; other platforms are not supported")}; e.prototype.qr=function(){return!0};e.prototype.pr=function(){return!0};e.prototype.or=function(){return!0};e.prototype.er=function(){return!0};r.d=new e;r.u=new function(){};r.Y=new function(){}})();function sc(e){this.b=e} (function(){function e(){}function r(){}var m=sc.prototype;m.ua=function(e){this.behavior=e;this.b=e.b};m.ua.prototype.U=function(){};m.la=function(e,c){this.type=e;this.behavior=e.behavior;this.e=c;this.b=e.b};var p=m.la.prototype;p.U=function(){var e=1===this.A[0];this.Mg=this.A[1];this.fi=this.A[2];this.Ni=this.A[3];this.As=this.A[4];this.fc=e?0:3;this.ac?this.Fc.reset():this.Fc=new cb;this.rf=this.e.opacity?this.e.opacity:1;e&&(0===this.Mg?(this.fc=1,0===this.fi&&(this.fc=2)):(this.e.opacity= 0,this.b.ga=!0))};p.Ib=function(){return{fit:this.Mg,wt:this.fi,fot:this.Ni,s:this.fc,st:this.Fc.X,mo:this.rf}};p.Zb=function(e){this.Mg=e.fit;this.fi=e.wt;this.Ni=e.fot;this.fc=e.s;this.Fc.reset();this.Fc.X=e.st;this.rf=e.mo};p.ub=function(){this.Fc.add(this.b.Vi(this.e));0===this.fc&&(this.e.opacity=this.Fc.X/this.Mg*this.rf,this.b.ga=!0,this.e.opacity>=this.rf&&(this.e.opacity=this.rf,this.fc=1,this.Fc.reset(),this.b.trigger(sc.prototype.d.kr,this.e)));1===this.fc&&this.Fc.X>=this.fi&&(this.fc= 2,this.Fc.reset(),this.b.trigger(sc.prototype.d.Cr,this.e));2===this.fc&&0!==this.Ni&&(this.e.opacity=this.rf-this.Fc.X/this.Ni*this.rf,this.b.ga=!0,0>this.e.opacity&&(this.e.opacity=0,this.fc=3,this.Fc.reset(),this.b.trigger(sc.prototype.d.lr,this.e),1===this.As&&this.b.be(this.e)))};p.Ls=function(){this.fc=0;this.Fc.reset();0===this.Mg?(this.fc=1,0===this.fi&&(this.fc=2)):(this.e.opacity=0,this.b.ga=!0)};e.prototype.lr=function(){return!0};e.prototype.kr=function(){return!0};e.prototype.Cr=function(){return!0}; m.d=new e;r.prototype.Tr=function(){3===this.fc&&this.Ls()};m.u=new r;m.Y=new function(){}})();function tc(e){this.b=e} (function(){function e(){}var r=tc.prototype;r.ua=function(e){this.behavior=e;this.b=e.b};r.ua.prototype.U=function(){};r.la=function(e,m){this.type=e;this.behavior=e.behavior;this.e=m;this.b=e.b};var m=r.la.prototype;m.U=function(){this.mb=null;this.zj=-1;this.mode=this.Xf=this.Zj=this.gg=this.Rd=this.Jh=0;var e=this;this.ac||(this.Wo=function(m){e.Rl(m)});this.b.tk(this.Wo)};m.Ib=function(){return{uid:this.mb?this.mb.uid:-1,pa:this.Jh,pd:this.Rd,msa:this.gg,tsa:this.Zj,lka:this.Xf,m:this.mode}}; m.Zb=function(e){this.zj=e.uid;this.Jh=e.pa;this.Rd=e.pd;this.gg=e.msa;this.Zj=e.tsa;this.Xf=e.lka;this.mode=e.m};m.cd=function(){this.mb=-1===this.zj?null:this.b.Tg(this.zj);this.zj=-1};m.Rl=function(e){this.mb==e&&(this.mb=null)};m.tf=function(){this.mb=null;this.b.$u(this.Wo)};m.ub=function(){};m.ak=function(){if(this.mb){this.Xf!==this.e.g&&(this.gg=Ia(this.gg+(this.e.g-this.Xf)));var e=this.e.x,m=this.e.y;if(3===this.mode||4===this.mode){var c=Qa(this.e.x,this.e.y,this.mb.x,this.mb.y);if(c>this.Rd|| 4===this.mode&&c<this.Rd)m=La(this.mb.x,this.mb.y,this.e.x,this.e.y),e=this.mb.x+Math.cos(m)*this.Rd,m=this.mb.y+Math.sin(m)*this.Rd}else e=this.mb.x+Math.cos(this.mb.g+this.Jh)*this.Rd,m=this.mb.y+Math.sin(this.mb.g+this.Jh)*this.Rd;this.Xf=c=Ia(this.gg+(this.mb.g-this.Zj));0!==this.mode&&1!==this.mode&&3!==this.mode&&4!==this.mode||this.e.x===e&&this.e.y===m||(this.e.x=e,this.e.y=m,this.e.Da());0!==this.mode&&2!==this.mode||this.e.g===c||(this.e.g=c,this.e.Da())}};r.d=new function(){};e.prototype.Er= function(e,m){if(e){var c=e.Tn(this.e);c&&(this.mb=c,this.Jh=La(c.x,c.y,this.e.x,this.e.y)-c.g,this.Rd=Qa(c.x,c.y,this.e.x,this.e.y),this.Xf=this.gg=this.e.g,this.Zj=c.g,this.mode=m)}};r.u=new e;r.Y=new function(){}})();function wc(e){this.b=e} (function(){var e=wc.prototype;e.ua=function(c){this.behavior=c;this.b=c.b};e.ua.prototype.U=function(){};e.la=function(c,b){this.type=c;this.behavior=c.behavior;this.e=b;this.b=c.b;this.Va=0};var r=e.la.prototype,m=2*Math.PI,p=Math.PI/2,v=3*Math.PI/2;r.U=function(){this.xb=1===this.A[0];this.Bh=this.A[1];this.Jm=this.A[2];this.Qd=this.A[3];this.Qd+=Math.random()*this.A[4];0===this.Qd?this.Va=0:(this.Va=this.A[5]/this.Qd*m,this.Va+=Math.random()*this.A[6]/this.Qd*m);this.Mb=this.A[7];this.Mb+=Math.random()* this.A[8];this.Mh=this.Ye=this.aa=0;this.init()};r.Ib=function(){return{i:this.Va,a:this.xb,mv:this.Bh,w:this.Jm,p:this.Qd,mag:this.Mb,iv:this.aa,iv2:this.Ye,r:this.Mh,lkv:this.Xb,lkv2:this.nh}};r.Zb=function(c){this.Va=c.i;this.xb=c.a;this.Bh=c.mv;this.Jm=c.w;this.Qd=c.p;this.Mb=c.mag;this.aa=c.iv;this.Ye=c.iv2||0;this.Mh=c.r;this.Xb=c.lkv;this.nh=c.lkv2||0};r.init=function(){switch(this.Bh){case 0:this.aa=this.e.x;break;case 1:this.aa=this.e.y;break;case 2:this.aa=this.e.width;this.Mh=this.e.height/ this.e.width;break;case 3:this.aa=this.e.width;break;case 4:this.aa=this.e.height;break;case 5:this.aa=this.e.g;this.Mb=V(this.Mb);break;case 6:this.aa=this.e.opacity;break;case 7:this.aa=0;break;case 8:this.aa=this.e.x,this.Ye=this.e.y}this.Xb=this.aa;this.nh=this.Ye};r.$d=function(c){c%=m;switch(this.Jm){case 0:return Math.sin(c);case 1:return c<=p?c/p:c<=v?1-2*(c-p)/Math.PI:(c-v)/p-1;case 2:return 2*c/m-1;case 3:return-2*c/m+1;case 4:return c<Math.PI?-1:1}return 0};r.ub=function(){var c=this.b.Vi(this.e); if(this.xb&&0!==c){0===this.Qd?this.Va=0:(this.Va+=c/this.Qd*m,this.Va%=m);switch(this.Bh){case 0:this.e.x!==this.Xb&&(this.aa+=this.e.x-this.Xb);this.e.x=this.aa+this.$d(this.Va)*this.Mb;this.Xb=this.e.x;break;case 1:this.e.y!==this.Xb&&(this.aa+=this.e.y-this.Xb);this.e.y=this.aa+this.$d(this.Va)*this.Mb;this.Xb=this.e.y;break;case 2:this.e.width=this.aa+this.$d(this.Va)*this.Mb;this.e.height=this.e.width*this.Mh;break;case 3:this.e.width=this.aa+this.$d(this.Va)*this.Mb;break;case 4:this.e.height= this.aa+this.$d(this.Va)*this.Mb;break;case 5:this.e.g!==this.Xb&&(this.aa=Ia(this.aa+(this.e.g-this.Xb)));this.e.g=Ia(this.aa+this.$d(this.Va)*this.Mb);this.Xb=this.e.g;break;case 6:this.e.opacity=this.aa+this.$d(this.Va)*this.Mb/100;0>this.e.opacity?this.e.opacity=0:1<this.e.opacity&&(this.e.opacity=1);break;case 8:this.e.x!==this.Xb&&(this.aa+=this.e.x-this.Xb),this.e.y!==this.nh&&(this.Ye+=this.e.y-this.nh),this.e.x=this.aa+Math.cos(this.e.g)*this.$d(this.Va)*this.Mb,this.e.y=this.Ye+Math.sin(this.e.g)* this.$d(this.Va)*this.Mb,this.Xb=this.e.x,this.nh=this.e.y}this.e.Da()}};r.hp=function(c,b){switch(this.Bh){case 2:this.aa*=b.width/c.width;this.Mh=b.height/b.width;break;case 3:this.aa*=b.width/c.width;break;case 4:this.aa*=b.height/c.height}};e.d=new function(){};e.u=new function(){};e.Y=new function(){}})(); function kc(){return[rc,nc,mc,Y,lc,X,oc,pc,qc,Z,tc,wc,sc,W.prototype.d.Uq,Z.prototype.d.pk,W.prototype.u.tq,nc.prototype.u.Play,W.prototype.d.Eq,W.prototype.d.Zr,nc.prototype.u.Or,X.prototype.u.Lr,W.prototype.u.Rr,X.prototype.d.Dq,X.prototype.u.Mr,W.prototype.u.$r,W.prototype.u.Oq,Y.prototype.u.Qq,W.prototype.d.Qm,pc.prototype.u.rk,Y.prototype.Y.Jr,Y.prototype.Y.Ir,tc.prototype.u.Er,X.prototype.u.Zm,W.prototype.Y.Au,X.prototype.Y.bn,W.prototype.Y.oe,X.prototype.u.sk,X.prototype.Y.an,X.prototype.d.Gq, qc.prototype.d.Zq,mc.prototype.u.Nm,qc.prototype.Y.$q,qc.prototype.u.zq,W.prototype.u.Hr,nc.prototype.d.Vq,nc.prototype.u.Ur,pc.prototype.u.Om,pc.prototype.u.Nr,mc.prototype.d.ik,mc.prototype.u.sk,W.prototype.d.Mq,X.prototype.d.Cq,W.prototype.u.Pq,W.prototype.u.Iq,X.prototype.u.Lm,W.prototype.d.Lq,oc.prototype.u.Pr,W.prototype.d.Aq,X.prototype.d.gr,W.prototype.u.Xr,X.prototype.u.Ym,lc.prototype.u.CallFunction,W.prototype.Y.xn,W.prototype.Y.max,mc.prototype.Y.vq,X.prototype.d.Dr,Z.prototype.d.Wq,X.prototype.d.Rq, nc.prototype.u.Fr,X.prototype.u.Kr,X.prototype.u.br,sc.prototype.u.Tr,Z.prototype.d.qk,X.prototype.Y.Hq,W.prototype.u.Qr,pc.prototype.u.Lm,pc.prototype.u.Xm,lc.prototype.d.hi,X.prototype.u.Vr,oc.prototype.u.Zm,X.prototype.u.rk,X.prototype.Y.$m,X.prototype.Y.Mm,X.prototype.d.Fq,X.prototype.u.sq,W.prototype.d.Nq,X.prototype.u.Om,X.prototype.d.ik,W.prototype.d.Kq,W.prototype.d.Bq,X.prototype.u.Xm,W.prototype.d.Pm,qc.prototype.u.Wr,mc.prototype.Y.gi,nc.prototype.u.Gr,W.prototype.d.nk,W.prototype.Y.floor, W.prototype.Y.nf]}; home/jogoso94/public_html/jogos/gun_bullets/c2runtime.js 0000644 00003416024 15043360372 0017402 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: https://www.construct.net var cr = {}; cr.plugins_ = {}; cr.behaviors = {}; if (typeof Object.getPrototypeOf !== "function") { if (typeof "test".__proto__ === "object") { Object.getPrototypeOf = function(object) { return object.__proto__; }; } else { Object.getPrototypeOf = function(object) { return object.constructor.prototype; }; } } (function() { cr.logexport = function(msg) { if (window.console && window.console.log) window.console.log(msg); }; cr.logerror = function(msg) { if (window.console && window.console.error) window.console.error(msg); }; cr.seal = function(x) { return x; }; cr.freeze = function(x) { return x; }; cr.is_undefined = function(x) { return typeof x === "undefined"; }; cr.is_number = function(x) { return typeof x === "number"; }; cr.is_string = function(x) { return typeof x === "string"; }; cr.isPOT = function(x) { return x > 0 && ((x - 1) & x) === 0; }; cr.nextHighestPowerOfTwo = function(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } cr.abs = function(x) { return (x < 0 ? -x : x); }; cr.max = function(a, b) { return (a > b ? a : b); }; cr.min = function(a, b) { return (a < b ? a : b); }; cr.PI = Math.PI; cr.round = function(x) { return (x + 0.5) | 0; }; cr.floor = function(x) { if (x >= 0) return x | 0; else return (x | 0) - 1; // correctly round down when negative }; cr.ceil = function(x) { var f = x | 0; return (f === x ? f : f + 1); }; function Vector2(x, y) { this.x = x; this.y = y; cr.seal(this); }; Vector2.prototype.offset = function(px, py) { this.x += px; this.y += py; return this; }; Vector2.prototype.mul = function(px, py) { this.x *= px; this.y *= py; return this; }; cr.vector2 = Vector2; cr.segments_intersect = function(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { var max_ax, min_ax, max_ay, min_ay, max_bx, min_bx, max_by, min_by; if (a1x < a2x) { min_ax = a1x; max_ax = a2x; } else { min_ax = a2x; max_ax = a1x; } if (b1x < b2x) { min_bx = b1x; max_bx = b2x; } else { min_bx = b2x; max_bx = b1x; } if (max_ax < min_bx || min_ax > max_bx) return false; if (a1y < a2y) { min_ay = a1y; max_ay = a2y; } else { min_ay = a2y; max_ay = a1y; } if (b1y < b2y) { min_by = b1y; max_by = b2y; } else { min_by = b2y; max_by = b1y; } if (max_ay < min_by || min_ay > max_by) return false; var dpx = b1x - a1x + b2x - a2x; var dpy = b1y - a1y + b2y - a2y; var qax = a2x - a1x; var qay = a2y - a1y; var qbx = b2x - b1x; var qby = b2y - b1y; var d = cr.abs(qay * qbx - qby * qax); var la = qbx * dpy - qby * dpx; if (cr.abs(la) > d) return false; var lb = qax * dpy - qay * dpx; return cr.abs(lb) <= d; }; function Rect(left, top, right, bottom) { this.set(left, top, right, bottom); cr.seal(this); }; Rect.prototype.set = function(left, top, right, bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; }; Rect.prototype.copy = function(r) { this.left = r.left; this.top = r.top; this.right = r.right; this.bottom = r.bottom; }; Rect.prototype.width = function() { return this.right - this.left; }; Rect.prototype.height = function() { return this.bottom - this.top; }; Rect.prototype.offset = function(px, py) { this.left += px; this.top += py; this.right += px; this.bottom += py; return this; }; Rect.prototype.normalize = function() { var temp = 0; if (this.left > this.right) { temp = this.left; this.left = this.right; this.right = temp; } if (this.top > this.bottom) { temp = this.top; this.top = this.bottom; this.bottom = temp; } }; Rect.prototype.intersects_rect = function(rc) { return !(rc.right < this.left || rc.bottom < this.top || rc.left > this.right || rc.top > this.bottom); }; Rect.prototype.intersects_rect_off = function(rc, ox, oy) { return !(rc.right + ox < this.left || rc.bottom + oy < this.top || rc.left + ox > this.right || rc.top + oy > this.bottom); }; Rect.prototype.contains_pt = function(x, y) { return (x >= this.left && x <= this.right) && (y >= this.top && y <= this.bottom); }; Rect.prototype.equals = function(r) { return this.left === r.left && this.top === r.top && this.right === r.right && this.bottom === r.bottom; }; cr.rect = Rect; function Quad() { this.tlx = 0; this.tly = 0; this.trx = 0; this.try_ = 0; // is a keyword otherwise! this.brx = 0; this.bry = 0; this.blx = 0; this.bly = 0; cr.seal(this); }; Quad.prototype.set_from_rect = function(rc) { this.tlx = rc.left; this.tly = rc.top; this.trx = rc.right; this.try_ = rc.top; this.brx = rc.right; this.bry = rc.bottom; this.blx = rc.left; this.bly = rc.bottom; }; Quad.prototype.set_from_rotated_rect = function(rc, a) { if (a === 0) { this.set_from_rect(rc); } else { var sin_a = Math.sin(a); var cos_a = Math.cos(a); var left_sin_a = rc.left * sin_a; var top_sin_a = rc.top * sin_a; var right_sin_a = rc.right * sin_a; var bottom_sin_a = rc.bottom * sin_a; var left_cos_a = rc.left * cos_a; var top_cos_a = rc.top * cos_a; var right_cos_a = rc.right * cos_a; var bottom_cos_a = rc.bottom * cos_a; this.tlx = left_cos_a - top_sin_a; this.tly = top_cos_a + left_sin_a; this.trx = right_cos_a - top_sin_a; this.try_ = top_cos_a + right_sin_a; this.brx = right_cos_a - bottom_sin_a; this.bry = bottom_cos_a + right_sin_a; this.blx = left_cos_a - bottom_sin_a; this.bly = bottom_cos_a + left_sin_a; } }; Quad.prototype.offset = function(px, py) { this.tlx += px; this.tly += py; this.trx += px; this.try_ += py; this.brx += px; this.bry += py; this.blx += px; this.bly += py; return this; }; var minresult = 0; var maxresult = 0; function minmax4(a, b, c, d) { if (a < b) { if (c < d) { if (a < c) minresult = a; else minresult = c; if (b > d) maxresult = b; else maxresult = d; } else { if (a < d) minresult = a; else minresult = d; if (b > c) maxresult = b; else maxresult = c; } } else { if (c < d) { if (b < c) minresult = b; else minresult = c; if (a > d) maxresult = a; else maxresult = d; } else { if (b < d) minresult = b; else minresult = d; if (a > c) maxresult = a; else maxresult = c; } } }; Quad.prototype.bounding_box = function(rc) { minmax4(this.tlx, this.trx, this.brx, this.blx); rc.left = minresult; rc.right = maxresult; minmax4(this.tly, this.try_, this.bry, this.bly); rc.top = minresult; rc.bottom = maxresult; }; Quad.prototype.contains_pt = function(x, y) { var tlx = this.tlx; var tly = this.tly; var v0x = this.trx - tlx; var v0y = this.try_ - tly; var v1x = this.brx - tlx; var v1y = this.bry - tly; var v2x = x - tlx; var v2y = y - tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y var dot11 = v1x * v1x + v1y * v1y var dot12 = v1x * v2x + v1y * v2y var invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); var u = (dot11 * dot02 - dot01 * dot12) * invDenom; var v = (dot00 * dot12 - dot01 * dot02) * invDenom; if ((u >= 0.0) && (v > 0.0) && (u + v < 1)) return true; v0x = this.blx - tlx; v0y = this.bly - tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); u = (dot11 * dot02 - dot01 * dot12) * invDenom; v = (dot00 * dot12 - dot01 * dot02) * invDenom; return (u >= 0.0) && (v > 0.0) && (u + v < 1); }; Quad.prototype.at = function(i, xory) { if (xory) { switch (i) { case 0: return this.tlx; case 1: return this.trx; case 2: return this.brx; case 3: return this.blx; case 4: return this.tlx; default: return this.tlx; } } else { switch (i) { case 0: return this.tly; case 1: return this.try_; case 2: return this.bry; case 3: return this.bly; case 4: return this.tly; default: return this.tly; } } }; Quad.prototype.midX = function() { return (this.tlx + this.trx + this.brx + this.blx) / 4; }; Quad.prototype.midY = function() { return (this.tly + this.try_ + this.bry + this.bly) / 4; }; Quad.prototype.intersects_segment = function(x1, y1, x2, y2) { if (this.contains_pt(x1, y1) || this.contains_pt(x2, y2)) return true; var a1x, a1y, a2x, a2y; var i; for (i = 0; i < 4; i++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; Quad.prototype.intersects_quad = function(rhs) { var midx = rhs.midX(); var midy = rhs.midY(); if (this.contains_pt(midx, midy)) return true; midx = this.midX(); midy = this.midY(); if (rhs.contains_pt(midx, midy)) return true; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; var i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); b1x = rhs.at(j, true); b1y = rhs.at(j, false); b2x = rhs.at(j + 1, true); b2y = rhs.at(j + 1, false); if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; cr.quad = Quad; cr.RGB = function(red, green, blue) { return Math.max(Math.min(red, 255), 0) | (Math.max(Math.min(green, 255), 0) << 8) | (Math.max(Math.min(blue, 255), 0) << 16); }; cr.GetRValue = function(rgb) { return rgb & 0xFF; }; cr.GetGValue = function(rgb) { return (rgb & 0xFF00) >> 8; }; cr.GetBValue = function(rgb) { return (rgb & 0xFF0000) >> 16; }; cr.shallowCopy = function(a, b, allowOverwrite) { var attr; for (attr in b) { if (b.hasOwnProperty(attr)) {; a[attr] = b[attr]; } } return a; }; cr.arrayRemove = function(arr, index) { var i, len; index = cr.floor(index); if (index < 0 || index >= arr.length) return; // index out of bounds for (i = index, len = arr.length - 1; i < len; i++) arr[i] = arr[i + 1]; cr.truncateArray(arr, len); }; cr.truncateArray = function(arr, index) { arr.length = index; }; cr.clearArray = function(arr) { cr.truncateArray(arr, 0); }; cr.shallowAssignArray = function(dest, src) { cr.clearArray(dest); var i, len; for (i = 0, len = src.length; i < len; ++i) dest[i] = src[i]; }; cr.appendArray = function(a, b) { a.push.apply(a, b); }; cr.fastIndexOf = function(arr, item) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { if (arr[i] === item) return i; } return -1; }; cr.arrayFindRemove = function(arr, item) { var index = cr.fastIndexOf(arr, item); if (index !== -1) cr.arrayRemove(arr, index); }; cr.clamp = function(x, a, b) { if (x < a) return a; else if (x > b) return b; else return x; }; cr.to_radians = function(x) { return x / (180.0 / cr.PI); }; cr.to_degrees = function(x) { return x * (180.0 / cr.PI); }; cr.clamp_angle_degrees = function(a) { a %= 360; // now in (-360, 360) range if (a < 0) a += 360; // now in [0, 360) range return a; }; cr.clamp_angle = function(a) { a %= 2 * cr.PI; // now in (-2pi, 2pi) range if (a < 0) a += 2 * cr.PI; // now in [0, 2pi) range return a; }; cr.to_clamped_degrees = function(x) { return cr.clamp_angle_degrees(cr.to_degrees(x)); }; cr.to_clamped_radians = function(x) { return cr.clamp_angle(cr.to_radians(x)); }; cr.angleTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.atan2(dy, dx); }; cr.angleDiff = function(a1, a2) { if (a1 === a2) return 0; var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); var n = s1 * s2 + c1 * c2; if (n >= 1) return 0; if (n <= -1) return cr.PI; return Math.acos(n); }; cr.angleRotate = function(start, end, step) { var ss = Math.sin(start); var cs = Math.cos(start); var se = Math.sin(end); var ce = Math.cos(end); if (Math.acos(ss * se + cs * ce) > step) { if (cs * se - ss * ce > 0) return cr.clamp_angle(start + step); else return cr.clamp_angle(start - step); } else return cr.clamp_angle(end); }; cr.angleClockwise = function(a1, a2) { var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); return c1 * s2 - s1 * c2 <= 0; }; cr.rotatePtAround = function(px, py, a, ox, oy, getx) { if (a === 0) return getx ? px : py; var sin_a = Math.sin(a); var cos_a = Math.cos(a); px -= ox; py -= oy; var left_sin_a = px * sin_a; var top_sin_a = py * sin_a; var left_cos_a = px * cos_a; var top_cos_a = py * cos_a; px = left_cos_a - top_sin_a; py = top_cos_a + left_sin_a; px += ox; py += oy; return getx ? px : py; } cr.distanceTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.sqrt(dx * dx + dy * dy); }; cr.xor = function(x, y) { return !x !== !y; }; cr.lerp = function(a, b, x) { return a + (b - a) * x; }; cr.unlerp = function(a, b, c) { if (a === b) return 0; // avoid divide by 0 return (c - a) / (b - a); }; cr.anglelerp = function(a, b, x) { var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { return a + diff * x; } else { return a - diff * x; } }; cr.qarp = function(a, b, c, x) { return cr.lerp(cr.lerp(a, b, x), cr.lerp(b, c, x), x); }; cr.cubic = function(a, b, c, d, x) { return cr.lerp(cr.qarp(a, b, c, x), cr.qarp(b, c, d, x), x); }; cr.cosp = function(a, b, x) { return (a + b + (a - b) * Math.cos(x * Math.PI)) / 2; }; cr.hasAnyOwnProperty = function(o) { var p; for (p in o) { if (o.hasOwnProperty(p)) return true; } return false; }; cr.wipe = function(obj) { var p; for (p in obj) { if (obj.hasOwnProperty(p)) delete obj[p]; } }; var startup_time = +(new Date()); cr.performance_now = function() { if (typeof window["performance"] !== "undefined") { var winperf = window["performance"]; if (typeof winperf.now !== "undefined") return winperf.now(); else if (typeof winperf["webkitNow"] !== "undefined") return winperf["webkitNow"](); else if (typeof winperf["mozNow"] !== "undefined") return winperf["mozNow"](); else if (typeof winperf["msNow"] !== "undefined") return winperf["msNow"](); } return Date.now() - startup_time; }; var isChrome = false; var isSafari = false; var isiOS = false; var isEjecta = false; if (typeof window !== "undefined") // not c2 editor { isChrome = /chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent); isSafari = !isChrome && /safari/i.test(navigator.userAgent); isiOS = /(iphone|ipod|ipad)/i.test(navigator.userAgent); isEjecta = window["c2ejecta"]; } var supports_set = ((!isSafari && !isEjecta && !isiOS) && (typeof Set !== "undefined" && typeof Set.prototype["forEach"] !== "undefined")); function ObjectSet_() { this.s = null; this.items = null; // lazy allocated (hopefully results in better GC performance) this.item_count = 0; if (supports_set) { this.s = new Set(); } this.values_cache = []; this.cache_valid = true; cr.seal(this); }; ObjectSet_.prototype.contains = function(x) { if (this.isEmpty()) return false; if (supports_set) return this.s["has"](x); else return (this.items && this.items.hasOwnProperty(x)); }; ObjectSet_.prototype.add = function(x) { if (supports_set) { if (!this.s["has"](x)) { this.s["add"](x); this.cache_valid = false; } } else { var str = x.toString(); var items = this.items; if (!items) { this.items = {}; this.items[str] = x; this.item_count = 1; this.cache_valid = false; } else if (!items.hasOwnProperty(str)) { items[str] = x; this.item_count++; this.cache_valid = false; } } }; ObjectSet_.prototype.remove = function(x) { if (this.isEmpty()) return; if (supports_set) { if (this.s["has"](x)) { this.s["delete"](x); this.cache_valid = false; } } else if (this.items) { var str = x.toString(); var items = this.items; if (items.hasOwnProperty(str)) { delete items[str]; this.item_count--; this.cache_valid = false; } } }; ObjectSet_.prototype.clear = function( /*wipe_*/ ) { if (this.isEmpty()) return; if (supports_set) { this.s["clear"](); // best! } else { this.items = null; // creates garbage; will lazy allocate on next add() this.item_count = 0; } cr.clearArray(this.values_cache); this.cache_valid = true; }; ObjectSet_.prototype.isEmpty = function() { return this.count() === 0; }; ObjectSet_.prototype.count = function() { if (supports_set) return this.s["size"]; else return this.item_count; }; var current_arr = null; var current_index = 0; function set_append_to_arr(x) { current_arr[current_index++] = x; }; ObjectSet_.prototype.update_cache = function() { if (this.cache_valid) return; if (supports_set) { cr.clearArray(this.values_cache); current_arr = this.values_cache; current_index = 0; this.s["forEach"](set_append_to_arr);; current_arr = null; current_index = 0; } else { var values_cache = this.values_cache; cr.clearArray(values_cache); var p, n = 0, items = this.items; if (items) { for (p in items) { if (items.hasOwnProperty(p)) values_cache[n++] = items[p]; } }; } this.cache_valid = true; }; ObjectSet_.prototype.valuesRef = function() { this.update_cache(); return this.values_cache; }; cr.ObjectSet = ObjectSet_; var tmpSet = new cr.ObjectSet(); cr.removeArrayDuplicates = function(arr) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { tmpSet.add(arr[i]); } cr.shallowAssignArray(arr, tmpSet.valuesRef()); tmpSet.clear(); }; cr.arrayRemoveAllFromObjectSet = function(arr, remset) { if (supports_set) cr.arrayRemoveAll_set(arr, remset.s); else cr.arrayRemoveAll_arr(arr, remset.valuesRef()); }; cr.arrayRemoveAll_set = function(arr, s) { var i, j, len, item; for (i = 0, j = 0, len = arr.length; i < len; ++i) { item = arr[i]; if (!s["has"](item)) // not an item to remove arr[j++] = item; // keep it } cr.truncateArray(arr, j); }; cr.arrayRemoveAll_arr = function(arr, rem) { var i, j, len, item; for (i = 0, j = 0, len = arr.length; i < len; ++i) { item = arr[i]; if (cr.fastIndexOf(rem, item) === -1) // not an item to remove arr[j++] = item; // keep it } cr.truncateArray(arr, j); }; function KahanAdder_() { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; cr.seal(this); }; KahanAdder_.prototype.add = function(v) { this.y = v - this.c; this.t = this.sum + this.y; this.c = (this.t - this.sum) - this.y; this.sum = this.t; }; KahanAdder_.prototype.reset = function() { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; }; cr.KahanAdder = KahanAdder_; cr.regexp_escape = function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }; function CollisionPoly_(pts_array_) { this.pts_cache = []; this.bboxLeft = 0; this.bboxTop = 0; this.bboxRight = 0; this.bboxBottom = 0; this.convexpolys = null; // for physics behavior to cache separated polys this.set_pts(pts_array_); cr.seal(this); }; CollisionPoly_.prototype.set_pts = function(pts_array_) { this.pts_array = pts_array_; this.pts_count = pts_array_.length / 2; // x, y, x, y... in array this.pts_cache.length = pts_array_.length; this.cache_width = -1; this.cache_height = -1; this.cache_angle = 0; }; CollisionPoly_.prototype.is_empty = function() { return !this.pts_array.length; }; CollisionPoly_.prototype.update_bbox = function() { var myptscache = this.pts_cache; var bboxLeft_ = myptscache[0]; var bboxRight_ = bboxLeft_; var bboxTop_ = myptscache[1]; var bboxBottom_ = bboxTop_; var x, y, i = 1, i2, len = this.pts_count; for (; i < len; ++i) { i2 = i * 2; x = myptscache[i2]; y = myptscache[i2 + 1]; if (x < bboxLeft_) bboxLeft_ = x; if (x > bboxRight_) bboxRight_ = x; if (y < bboxTop_) bboxTop_ = y; if (y > bboxBottom_) bboxBottom_ = y; } this.bboxLeft = bboxLeft_; this.bboxRight = bboxRight_; this.bboxTop = bboxTop_; this.bboxBottom = bboxBottom_; }; CollisionPoly_.prototype.set_from_rect = function(rc, offx, offy) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = rc.left - offx; myptscache[1] = rc.top - offy; myptscache[2] = rc.right - offx; myptscache[3] = rc.top - offy; myptscache[4] = rc.right - offx; myptscache[5] = rc.bottom - offy; myptscache[6] = rc.left - offx; myptscache[7] = rc.bottom - offy; this.cache_width = rc.right - rc.left; this.cache_height = rc.bottom - rc.top; this.update_bbox(); }; CollisionPoly_.prototype.set_from_quad = function(q, offx, offy, w, h) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = q.tlx - offx; myptscache[1] = q.tly - offy; myptscache[2] = q.trx - offx; myptscache[3] = q.try_ - offy; myptscache[4] = q.brx - offx; myptscache[5] = q.bry - offy; myptscache[6] = q.blx - offx; myptscache[7] = q.bly - offy; this.cache_width = w; this.cache_height = h; this.update_bbox(); }; CollisionPoly_.prototype.set_from_poly = function(r) { this.pts_count = r.pts_count; cr.shallowAssignArray(this.pts_cache, r.pts_cache); this.bboxLeft = r.bboxLeft; this.bboxTop = r.bboxTop; this.bboxRight = r.bboxRight; this.bboxBottom = r.bboxBottom; }; CollisionPoly_.prototype.cache_poly = function(w, h, a) { if (this.cache_width === w && this.cache_height === h && this.cache_angle === a) return; // cache up-to-date this.cache_width = w; this.cache_height = h; this.cache_angle = a; var i, i2, i21, len, x, y; var sina = 0; var cosa = 1; var myptsarray = this.pts_array; var myptscache = this.pts_cache; if (a !== 0) { sina = Math.sin(a); cosa = Math.cos(a); } for (i = 0, len = this.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = myptsarray[i2] * w; y = myptsarray[i21] * h; myptscache[i2] = (x * cosa) - (y * sina); myptscache[i21] = (y * cosa) + (x * sina); } this.update_bbox(); }; CollisionPoly_.prototype.contains_pt = function(a2x, a2y) { var myptscache = this.pts_cache; if (a2x === myptscache[0] && a2y === myptscache[1]) return true; var i, i2, imod, len = this.pts_count; var a1x = this.bboxLeft - 110; var a1y = this.bboxTop - 101; var a3x = this.bboxRight + 131 var a3y = this.bboxBottom + 120; var b1x, b1y, b2x, b2y; var count1 = 0, count2 = 0; for (i = 0; i < len; i++) { i2 = i * 2; imod = ((i + 1) % len) * 2; b1x = myptscache[i2]; b1y = myptscache[i2 + 1]; b2x = myptscache[imod]; b2y = myptscache[imod + 1]; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) count1++; if (cr.segments_intersect(a3x, a3y, a2x, a2y, b1x, b1y, b2x, b2y)) count2++; } return (count1 % 2 === 1) || (count2 % 2 === 1); }; CollisionPoly_.prototype.intersects_poly = function(rhs, offx, offy) { var rhspts = rhs.pts_cache; var mypts = this.pts_cache; if (this.contains_pt(rhspts[0] + offx, rhspts[1] + offy)) return true; if (rhs.contains_pt(mypts[0] - offx, mypts[1] - offy)) return true; var i, i2, imod, leni, j, j2, jmod, lenj; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i * 2; imod = ((i + 1) % leni) * 2; a1x = mypts[i2]; a1y = mypts[i2 + 1]; a2x = mypts[imod]; a2y = mypts[imod + 1]; for (j = 0, lenj = rhs.pts_count; j < lenj; j++) { j2 = j * 2; jmod = ((j + 1) % lenj) * 2; b1x = rhspts[j2] + offx; b1y = rhspts[j2 + 1] + offy; b2x = rhspts[jmod] + offx; b2y = rhspts[jmod + 1] + offy; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; CollisionPoly_.prototype.intersects_segment = function(offx, offy, x1, y1, x2, y2) { var mypts = this.pts_cache; if (this.contains_pt(x1 - offx, y1 - offy)) return true; var i, leni, i2, imod; var a1x, a1y, a2x, a2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i * 2; imod = ((i + 1) % leni) * 2; a1x = mypts[i2] + offx; a1y = mypts[i2 + 1] + offy; a2x = mypts[imod] + offx; a2y = mypts[imod + 1] + offy; if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; CollisionPoly_.prototype.mirror = function(px) { var i, leni, i2; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i * 2; this.pts_cache[i2] = px * 2 - this.pts_cache[i2]; } }; CollisionPoly_.prototype.flip = function(py) { var i, leni, i21; for (i = 0, leni = this.pts_count; i < leni; ++i) { i21 = i * 2 + 1; this.pts_cache[i21] = py * 2 - this.pts_cache[i21]; } }; CollisionPoly_.prototype.diag = function() { var i, leni, i2, i21, temp; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i * 2; i21 = i2 + 1; temp = this.pts_cache[i2]; this.pts_cache[i2] = this.pts_cache[i21]; this.pts_cache[i21] = temp; } }; cr.CollisionPoly = CollisionPoly_; function SparseGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; SparseGrid_.prototype.totalCellCount = 0; SparseGrid_.prototype.getCell = function(x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; SparseGrid_.prototype.XToCell = function(x_) { return cr.floor(x_ / this.cellwidth); }; SparseGrid_.prototype.YToCell = function(y_) { return cr.floor(y_ / this.cellheight); }; SparseGrid_.prototype.update = function(inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeGridCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; SparseGrid_.prototype.queryRange = function(rc, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(rc.left); ystart = this.YToCell(rc.top); lenx = this.XToCell(rc.right); leny = this.YToCell(rc.bottom); for (; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; cr.SparseGrid = SparseGrid_; function RenderGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; RenderGrid_.prototype.totalCellCount = 0; RenderGrid_.prototype.getCell = function(x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocRenderCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocRenderCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; RenderGrid_.prototype.XToCell = function(x_) { return cr.floor(x_ / this.cellwidth); }; RenderGrid_.prototype.YToCell = function(y_) { return cr.floor(y_ / this.cellheight); }; RenderGrid_.prototype.update = function(inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeRenderCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; RenderGrid_.prototype.queryRange = function(left, top, right, bottom, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(left); ystart = this.YToCell(top); lenx = this.XToCell(right); leny = this.YToCell(bottom); for (; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; RenderGrid_.prototype.markRangeChanged = function(rc) { var x, lenx, ystart, y, leny, cell; x = rc.left; ystart = rc.top; lenx = rc.right; leny = rc.bottom; for (; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.is_sorted = false; } } }; cr.RenderGrid = RenderGrid_; var gridcellcache = []; function allocGridCell(grid_, x_, y_) { var ret; SparseGrid_.prototype.totalCellCount++; if (gridcellcache.length) { ret = gridcellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.GridCell(grid_, x_, y_); }; function freeGridCell(c) { SparseGrid_.prototype.totalCellCount--; c.objects.clear(); if (gridcellcache.length < 1000) gridcellcache.push(c); }; function GridCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = new cr.ObjectSet(); }; GridCell_.prototype.isEmpty = function() { return this.objects.isEmpty(); }; GridCell_.prototype.insert = function(inst) { this.objects.add(inst); }; GridCell_.prototype.remove = function(inst) { this.objects.remove(inst); }; GridCell_.prototype.dump = function(result) { cr.appendArray(result, this.objects.valuesRef()); }; cr.GridCell = GridCell_; var rendercellcache = []; function allocRenderCell(grid_, x_, y_) { var ret; RenderGrid_.prototype.totalCellCount++; if (rendercellcache.length) { ret = rendercellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.RenderCell(grid_, x_, y_); }; function freeRenderCell(c) { RenderGrid_.prototype.totalCellCount--; c.reset(); if (rendercellcache.length < 1000) rendercellcache.push(c); }; function RenderCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = []; // array which needs to be sorted by Z order this.is_sorted = true; // whether array is in correct sort order or not this.pending_removal = new cr.ObjectSet(); this.any_pending_removal = false; }; RenderCell_.prototype.isEmpty = function() { if (!this.objects.length) {;; return true; } if (this.objects.length > this.pending_removal.count()) return false;; this.flush_pending(); // takes fast path and just resets state return true; }; RenderCell_.prototype.insert = function(inst) { if (this.pending_removal.contains(inst)) { this.pending_removal.remove(inst); if (this.pending_removal.isEmpty()) this.any_pending_removal = false; return; } if (this.objects.length) { var top = this.objects[this.objects.length - 1]; if (top.get_zindex() > inst.get_zindex()) this.is_sorted = false; // 'inst' should be somewhere beneath 'top' this.objects.push(inst); } else { this.objects.push(inst); this.is_sorted = true; }; }; RenderCell_.prototype.remove = function(inst) { this.pending_removal.add(inst); this.any_pending_removal = true; if (this.pending_removal.count() >= 30) this.flush_pending(); }; RenderCell_.prototype.flush_pending = function() {; if (!this.any_pending_removal) return; // not changed if (this.pending_removal.count() === this.objects.length) { this.reset(); return; } cr.arrayRemoveAllFromObjectSet(this.objects, this.pending_removal); this.pending_removal.clear(); this.any_pending_removal = false; }; function sortByInstanceZIndex(a, b) { return a.zindex - b.zindex; }; RenderCell_.prototype.ensure_sorted = function() { if (this.is_sorted) return; // already sorted this.objects.sort(sortByInstanceZIndex); this.is_sorted = true; }; RenderCell_.prototype.reset = function() { cr.clearArray(this.objects); this.is_sorted = true; this.pending_removal.clear(); this.any_pending_removal = false; }; RenderCell_.prototype.dump = function(result) { this.flush_pending(); this.ensure_sorted(); if (this.objects.length) result.push(this.objects); }; cr.RenderCell = RenderCell_; var fxNames = ["lighter", "xor", "copy", "destination-over", "source-in", "destination-in", "source-out", "destination-out", "source-atop", "destination-atop" ]; cr.effectToCompositeOp = function(effect) { if (effect <= 0 || effect >= 11) return "source-over"; return fxNames[effect - 1]; // not including "none" so offset by 1 }; cr.setGLBlend = function(this_, effect, gl) { if (!gl) return; this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; switch (effect) { case 1: // lighter (additive) this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE; break; case 2: // xor break; // todo case 3: // copy this_.srcBlend = gl.ONE; this_.destBlend = gl.ZERO; break; case 4: // destination-over this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ONE; break; case 5: // source-in this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ZERO; break; case 6: // destination-in this_.srcBlend = gl.ZERO; this_.destBlend = gl.SRC_ALPHA; break; case 7: // source-out this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ZERO; break; case 8: // destination-out this_.srcBlend = gl.ZERO; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 9: // source-atop this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 10: // destination-atop this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.SRC_ALPHA; break; } }; cr.round6dp = function(x) { return Math.round(x * 1000000) / 1000000; }; /* var localeCompare_options = { "usage": "search", "sensitivity": "accent" }; var has_localeCompare = !!"a".localeCompare; var localeCompare_works1 = (has_localeCompare && "a".localeCompare("A", undefined, localeCompare_options) === 0); var localeCompare_works2 = (has_localeCompare && "a".localeCompare("á", undefined, localeCompare_options) !== 0); var supports_localeCompare = (has_localeCompare && localeCompare_works1 && localeCompare_works2); */ cr.equals_nocase = function(a, b) { if (typeof a !== "string" || typeof b !== "string") return false; if (a.length !== b.length) return false; if (a === b) return true; /* if (supports_localeCompare) { return (a.localeCompare(b, undefined, localeCompare_options) === 0); } else { */ return a.toLowerCase() === b.toLowerCase(); }; cr.isCanvasInputEvent = function(e) { var target = e.target; if (!target) return true; if (target === document || target === window) return true; if (document && document.body && target === document.body) return true; if (cr.equals_nocase(target.tagName, "canvas")) return true; return false; }; }()); var MatrixArray = typeof Float32Array !== "undefined" ? Float32Array : Array, glMatrixArrayType = MatrixArray, vec3 = {}, mat3 = {}, mat4 = {}, quat4 = {}; vec3.create = function(a) { var b = new MatrixArray(3); a && (b[0] = a[0], b[1] = a[1], b[2] = a[2]); return b }; vec3.set = function(a, b) { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; return b }; vec3.add = function(a, b, c) { if (!c || a === c) return a[0] += b[0], a[1] += b[1], a[2] += b[2], a; c[0] = a[0] + b[0]; c[1] = a[1] + b[1]; c[2] = a[2] + b[2]; return c }; vec3.subtract = function(a, b, c) { if (!c || a === c) return a[0] -= b[0], a[1] -= b[1], a[2] -= b[2], a; c[0] = a[0] - b[0]; c[1] = a[1] - b[1]; c[2] = a[2] - b[2]; return c }; vec3.negate = function(a, b) { b || (b = a); b[0] = -a[0]; b[1] = -a[1]; b[2] = -a[2]; return b }; vec3.scale = function(a, b, c) { if (!c || a === c) return a[0] *= b, a[1] *= b, a[2] *= b, a; c[0] = a[0] * b; c[1] = a[1] * b; c[2] = a[2] * b; return c }; vec3.normalize = function(a, b) { b || (b = a); var c = a[0], d = a[1], e = a[2], g = Math.sqrt(c * c + d * d + e * e); if (g) { if (g === 1) return b[0] = c, b[1] = d, b[2] = e, b } else return b[0] = 0, b[1] = 0, b[2] = 0, b; g = 1 / g; b[0] = c * g; b[1] = d * g; b[2] = e * g; return b }; vec3.cross = function(a, b, c) { c || (c = a); var d = a[0], e = a[1], a = a[2], g = b[0], f = b[1], b = b[2]; c[0] = e * b - a * f; c[1] = a * g - d * b; c[2] = d * f - e * g; return c }; vec3.length = function(a) { var b = a[0], c = a[1], a = a[2]; return Math.sqrt(b * b + c * c + a * a) }; vec3.dot = function(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] }; vec3.direction = function(a, b, c) { c || (c = a); var d = a[0] - b[0], e = a[1] - b[1], a = a[2] - b[2], b = Math.sqrt(d * d + e * e + a * a); if (!b) return c[0] = 0, c[1] = 0, c[2] = 0, c; b = 1 / b; c[0] = d * b; c[1] = e * b; c[2] = a * b; return c }; vec3.lerp = function(a, b, c, d) { d || (d = a); d[0] = a[0] + c * (b[0] - a[0]); d[1] = a[1] + c * (b[1] - a[1]); d[2] = a[2] + c * (b[2] - a[2]); return d }; vec3.str = function(a) { return "[" + a[0] + ", " + a[1] + ", " + a[2] + "]" }; mat3.create = function(a) { var b = new MatrixArray(9); a && (b[0] = a[0], b[1] = a[1], b[2] = a[2], b[3] = a[3], b[4] = a[4], b[5] = a[5], b[6] = a[6], b[7] = a[7], b[8] = a[8]); return b }; mat3.set = function(a, b) { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; b[4] = a[4]; b[5] = a[5]; b[6] = a[6]; b[7] = a[7]; b[8] = a[8]; return b }; mat3.identity = function(a) { a[0] = 1; a[1] = 0; a[2] = 0; a[3] = 0; a[4] = 1; a[5] = 0; a[6] = 0; a[7] = 0; a[8] = 1; return a }; mat3.transpose = function(a, b) { if (!b || a === b) { var c = a[1], d = a[2], e = a[5]; a[1] = a[3]; a[2] = a[6]; a[3] = c; a[5] = a[7]; a[6] = d; a[7] = e; return a } b[0] = a[0]; b[1] = a[3]; b[2] = a[6]; b[3] = a[1]; b[4] = a[4]; b[5] = a[7]; b[6] = a[2]; b[7] = a[5]; b[8] = a[8]; return b }; mat3.toMat4 = function(a, b) { b || (b = mat4.create()); b[15] = 1; b[14] = 0; b[13] = 0; b[12] = 0; b[11] = 0; b[10] = a[8]; b[9] = a[7]; b[8] = a[6]; b[7] = 0; b[6] = a[5]; b[5] = a[4]; b[4] = a[3]; b[3] = 0; b[2] = a[2]; b[1] = a[1]; b[0] = a[0]; return b }; mat3.str = function(a) { return "[" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + "]" }; mat4.create = function(a) { var b = new MatrixArray(16); a && (b[0] = a[0], b[1] = a[1], b[2] = a[2], b[3] = a[3], b[4] = a[4], b[5] = a[5], b[6] = a[6], b[7] = a[7], b[8] = a[8], b[9] = a[9], b[10] = a[10], b[11] = a[11], b[12] = a[12], b[13] = a[13], b[14] = a[14], b[15] = a[15]); return b }; mat4.set = function(a, b) { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; b[4] = a[4]; b[5] = a[5]; b[6] = a[6]; b[7] = a[7]; b[8] = a[8]; b[9] = a[9]; b[10] = a[10]; b[11] = a[11]; b[12] = a[12]; b[13] = a[13]; b[14] = a[14]; b[15] = a[15]; return b }; mat4.identity = function(a) { a[0] = 1; a[1] = 0; a[2] = 0; a[3] = 0; a[4] = 0; a[5] = 1; a[6] = 0; a[7] = 0; a[8] = 0; a[9] = 0; a[10] = 1; a[11] = 0; a[12] = 0; a[13] = 0; a[14] = 0; a[15] = 1; return a }; mat4.transpose = function(a, b) { if (!b || a === b) { var c = a[1], d = a[2], e = a[3], g = a[6], f = a[7], h = a[11]; a[1] = a[4]; a[2] = a[8]; a[3] = a[12]; a[4] = c; a[6] = a[9]; a[7] = a[13]; a[8] = d; a[9] = g; a[11] = a[14]; a[12] = e; a[13] = f; a[14] = h; return a } b[0] = a[0]; b[1] = a[4]; b[2] = a[8]; b[3] = a[12]; b[4] = a[1]; b[5] = a[5]; b[6] = a[9]; b[7] = a[13]; b[8] = a[2]; b[9] = a[6]; b[10] = a[10]; b[11] = a[14]; b[12] = a[3]; b[13] = a[7]; b[14] = a[11]; b[15] = a[15]; return b }; mat4.determinant = function(a) { var b = a[0], c = a[1], d = a[2], e = a[3], g = a[4], f = a[5], h = a[6], i = a[7], j = a[8], k = a[9], l = a[10], n = a[11], o = a[12], m = a[13], p = a[14], a = a[15]; return o * k * h * e - j * m * h * e - o * f * l * e + g * m * l * e + j * f * p * e - g * k * p * e - o * k * d * i + j * m * d * i + o * c * l * i - b * m * l * i - j * c * p * i + b * k * p * i + o * f * d * n - g * m * d * n - o * c * h * n + b * m * h * n + g * c * p * n - b * f * p * n - j * f * d * a + g * k * d * a + j * c * h * a - b * k * h * a - g * c * l * a + b * f * l * a }; mat4.inverse = function(a, b) { b || (b = a); var c = a[0], d = a[1], e = a[2], g = a[3], f = a[4], h = a[5], i = a[6], j = a[7], k = a[8], l = a[9], n = a[10], o = a[11], m = a[12], p = a[13], r = a[14], s = a[15], A = c * h - d * f, B = c * i - e * f, t = c * j - g * f, u = d * i - e * h, v = d * j - g * h, w = e * j - g * i, x = k * p - l * m, y = k * r - n * m, z = k * s - o * m, C = l * r - n * p, D = l * s - o * p, E = n * s - o * r, q = 1 / (A * E - B * D + t * C + u * z - v * y + w * x); b[0] = (h * E - i * D + j * C) * q; b[1] = (-d * E + e * D - g * C) * q; b[2] = (p * w - r * v + s * u) * q; b[3] = (-l * w + n * v - o * u) * q; b[4] = (-f * E + i * z - j * y) * q; b[5] = (c * E - e * z + g * y) * q; b[6] = (-m * w + r * t - s * B) * q; b[7] = (k * w - n * t + o * B) * q; b[8] = (f * D - h * z + j * x) * q; b[9] = (-c * D + d * z - g * x) * q; b[10] = (m * v - p * t + s * A) * q; b[11] = (-k * v + l * t - o * A) * q; b[12] = (-f * C + h * y - i * x) * q; b[13] = (c * C - d * y + e * x) * q; b[14] = (-m * u + p * B - r * A) * q; b[15] = (k * u - l * B + n * A) * q; return b }; mat4.toRotationMat = function(a, b) { b || (b = mat4.create()); b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; b[4] = a[4]; b[5] = a[5]; b[6] = a[6]; b[7] = a[7]; b[8] = a[8]; b[9] = a[9]; b[10] = a[10]; b[11] = a[11]; b[12] = 0; b[13] = 0; b[14] = 0; b[15] = 1; return b }; mat4.toMat3 = function(a, b) { b || (b = mat3.create()); b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[4]; b[4] = a[5]; b[5] = a[6]; b[6] = a[8]; b[7] = a[9]; b[8] = a[10]; return b }; mat4.toInverseMat3 = function(a, b) { var c = a[0], d = a[1], e = a[2], g = a[4], f = a[5], h = a[6], i = a[8], j = a[9], k = a[10], l = k * f - h * j, n = -k * g + h * i, o = j * g - f * i, m = c * l + d * n + e * o; if (!m) return null; m = 1 / m; b || (b = mat3.create()); b[0] = l * m; b[1] = (-k * d + e * j) * m; b[2] = (h * d - e * f) * m; b[3] = n * m; b[4] = (k * c - e * i) * m; b[5] = (-h * c + e * g) * m; b[6] = o * m; b[7] = (-j * c + d * i) * m; b[8] = (f * c - d * g) * m; return b }; mat4.multiply = function(a, b, c) { c || (c = a); var d = a[0], e = a[1], g = a[2], f = a[3], h = a[4], i = a[5], j = a[6], k = a[7], l = a[8], n = a[9], o = a[10], m = a[11], p = a[12], r = a[13], s = a[14], a = a[15], A = b[0], B = b[1], t = b[2], u = b[3], v = b[4], w = b[5], x = b[6], y = b[7], z = b[8], C = b[9], D = b[10], E = b[11], q = b[12], F = b[13], G = b[14], b = b[15]; c[0] = A * d + B * h + t * l + u * p; c[1] = A * e + B * i + t * n + u * r; c[2] = A * g + B * j + t * o + u * s; c[3] = A * f + B * k + t * m + u * a; c[4] = v * d + w * h + x * l + y * p; c[5] = v * e + w * i + x * n + y * r; c[6] = v * g + w * j + x * o + y * s; c[7] = v * f + w * k + x * m + y * a; c[8] = z * d + C * h + D * l + E * p; c[9] = z * e + C * i + D * n + E * r; c[10] = z * g + C * j + D * o + E * s; c[11] = z * f + C * k + D * m + E * a; c[12] = q * d + F * h + G * l + b * p; c[13] = q * e + F * i + G * n + b * r; c[14] = q * g + F * j + G * o + b * s; c[15] = q * f + F * k + G * m + b * a; return c }; mat4.multiplyVec3 = function(a, b, c) { c || (c = b); var d = b[0], e = b[1], b = b[2]; c[0] = a[0] * d + a[4] * e + a[8] * b + a[12]; c[1] = a[1] * d + a[5] * e + a[9] * b + a[13]; c[2] = a[2] * d + a[6] * e + a[10] * b + a[14]; return c }; mat4.multiplyVec4 = function(a, b, c) { c || (c = b); var d = b[0], e = b[1], g = b[2], b = b[3]; c[0] = a[0] * d + a[4] * e + a[8] * g + a[12] * b; c[1] = a[1] * d + a[5] * e + a[9] * g + a[13] * b; c[2] = a[2] * d + a[6] * e + a[10] * g + a[14] * b; c[3] = a[3] * d + a[7] * e + a[11] * g + a[15] * b; return c }; mat4.translate = function(a, b, c) { var d = b[0], e = b[1], b = b[2], g, f, h, i, j, k, l, n, o, m, p, r; if (!c || a === c) return a[12] = a[0] * d + a[4] * e + a[8] * b + a[12], a[13] = a[1] * d + a[5] * e + a[9] * b + a[13], a[14] = a[2] * d + a[6] * e + a[10] * b + a[14], a[15] = a[3] * d + a[7] * e + a[11] * b + a[15], a; g = a[0]; f = a[1]; h = a[2]; i = a[3]; j = a[4]; k = a[5]; l = a[6]; n = a[7]; o = a[8]; m = a[9]; p = a[10]; r = a[11]; c[0] = g; c[1] = f; c[2] = h; c[3] = i; c[4] = j; c[5] = k; c[6] = l; c[7] = n; c[8] = o; c[9] = m; c[10] = p; c[11] = r; c[12] = g * d + j * e + o * b + a[12]; c[13] = f * d + k * e + m * b + a[13]; c[14] = h * d + l * e + p * b + a[14]; c[15] = i * d + n * e + r * b + a[15]; return c }; mat4.scale = function(a, b, c) { var d = b[0], e = b[1], b = b[2]; if (!c || a === c) return a[0] *= d, a[1] *= d, a[2] *= d, a[3] *= d, a[4] *= e, a[5] *= e, a[6] *= e, a[7] *= e, a[8] *= b, a[9] *= b, a[10] *= b, a[11] *= b, a; c[0] = a[0] * d; c[1] = a[1] * d; c[2] = a[2] * d; c[3] = a[3] * d; c[4] = a[4] * e; c[5] = a[5] * e; c[6] = a[6] * e; c[7] = a[7] * e; c[8] = a[8] * b; c[9] = a[9] * b; c[10] = a[10] * b; c[11] = a[11] * b; c[12] = a[12]; c[13] = a[13]; c[14] = a[14]; c[15] = a[15]; return c }; mat4.rotate = function(a, b, c, d) { var e = c[0], g = c[1], c = c[2], f = Math.sqrt(e * e + g * g + c * c), h, i, j, k, l, n, o, m, p, r, s, A, B, t, u, v, w, x, y, z; if (!f) return null; f !== 1 && (f = 1 / f, e *= f, g *= f, c *= f); h = Math.sin(b); i = Math.cos(b); j = 1 - i; b = a[0]; f = a[1]; k = a[2]; l = a[3]; n = a[4]; o = a[5]; m = a[6]; p = a[7]; r = a[8]; s = a[9]; A = a[10]; B = a[11]; t = e * e * j + i; u = g * e * j + c * h; v = c * e * j - g * h; w = e * g * j - c * h; x = g * g * j + i; y = c * g * j + e * h; z = e * c * j + g * h; e = g * c * j - e * h; g = c * c * j + i; d ? a !== d && (d[12] = a[12], d[13] = a[13], d[14] = a[14], d[15] = a[15]) : d = a; d[0] = b * t + n * u + r * v; d[1] = f * t + o * u + s * v; d[2] = k * t + m * u + A * v; d[3] = l * t + p * u + B * v; d[4] = b * w + n * x + r * y; d[5] = f * w + o * x + s * y; d[6] = k * w + m * x + A * y; d[7] = l * w + p * x + B * y; d[8] = b * z + n * e + r * g; d[9] = f * z + o * e + s * g; d[10] = k * z + m * e + A * g; d[11] = l * z + p * e + B * g; return d }; mat4.rotateX = function(a, b, c) { var d = Math.sin(b), b = Math.cos(b), e = a[4], g = a[5], f = a[6], h = a[7], i = a[8], j = a[9], k = a[10], l = a[11]; c ? a !== c && (c[0] = a[0], c[1] = a[1], c[2] = a[2], c[3] = a[3], c[12] = a[12], c[13] = a[13], c[14] = a[14], c[15] = a[15]) : c = a; c[4] = e * b + i * d; c[5] = g * b + j * d; c[6] = f * b + k * d; c[7] = h * b + l * d; c[8] = e * -d + i * b; c[9] = g * -d + j * b; c[10] = f * -d + k * b; c[11] = h * -d + l * b; return c }; mat4.rotateY = function(a, b, c) { var d = Math.sin(b), b = Math.cos(b), e = a[0], g = a[1], f = a[2], h = a[3], i = a[8], j = a[9], k = a[10], l = a[11]; c ? a !== c && (c[4] = a[4], c[5] = a[5], c[6] = a[6], c[7] = a[7], c[12] = a[12], c[13] = a[13], c[14] = a[14], c[15] = a[15]) : c = a; c[0] = e * b + i * -d; c[1] = g * b + j * -d; c[2] = f * b + k * -d; c[3] = h * b + l * -d; c[8] = e * d + i * b; c[9] = g * d + j * b; c[10] = f * d + k * b; c[11] = h * d + l * b; return c }; mat4.rotateZ = function(a, b, c) { var d = Math.sin(b), b = Math.cos(b), e = a[0], g = a[1], f = a[2], h = a[3], i = a[4], j = a[5], k = a[6], l = a[7]; c ? a !== c && (c[8] = a[8], c[9] = a[9], c[10] = a[10], c[11] = a[11], c[12] = a[12], c[13] = a[13], c[14] = a[14], c[15] = a[15]) : c = a; c[0] = e * b + i * d; c[1] = g * b + j * d; c[2] = f * b + k * d; c[3] = h * b + l * d; c[4] = e * -d + i * b; c[5] = g * -d + j * b; c[6] = f * -d + k * b; c[7] = h * -d + l * b; return c }; mat4.frustum = function(a, b, c, d, e, g, f) { f || (f = mat4.create()); var h = b - a, i = d - c, j = g - e; f[0] = e * 2 / h; f[1] = 0; f[2] = 0; f[3] = 0; f[4] = 0; f[5] = e * 2 / i; f[6] = 0; f[7] = 0; f[8] = (b + a) / h; f[9] = (d + c) / i; f[10] = -(g + e) / j; f[11] = -1; f[12] = 0; f[13] = 0; f[14] = -(g * e * 2) / j; f[15] = 0; return f }; mat4.perspective = function(a, b, c, d, e) { a = c * Math.tan(a * Math.PI / 360); b *= a; return mat4.frustum(-b, b, -a, a, c, d, e) }; mat4.ortho = function(a, b, c, d, e, g, f) { f || (f = mat4.create()); var h = b - a, i = d - c, j = g - e; f[0] = 2 / h; f[1] = 0; f[2] = 0; f[3] = 0; f[4] = 0; f[5] = 2 / i; f[6] = 0; f[7] = 0; f[8] = 0; f[9] = 0; f[10] = -2 / j; f[11] = 0; f[12] = -(a + b) / h; f[13] = -(d + c) / i; f[14] = -(g + e) / j; f[15] = 1; return f }; mat4.lookAt = function(a, b, c, d) { d || (d = mat4.create()); var e, g, f, h, i, j, k, l, n = a[0], o = a[1], a = a[2]; g = c[0]; f = c[1]; e = c[2]; c = b[1]; j = b[2]; if (n === b[0] && o === c && a === j) return mat4.identity(d); c = n - b[0]; j = o - b[1]; k = a - b[2]; l = 1 / Math.sqrt(c * c + j * j + k * k); c *= l; j *= l; k *= l; b = f * k - e * j; e = e * c - g * k; g = g * j - f * c; (l = Math.sqrt(b * b + e * e + g * g)) ? (l = 1 / l, b *= l, e *= l, g *= l) : g = e = b = 0; f = j * g - k * e; h = k * b - c * g; i = c * e - j * b; (l = Math.sqrt(f * f + h * h + i * i)) ? (l = 1 / l, f *= l, h *= l, i *= l) : i = h = f = 0; d[0] = b; d[1] = f; d[2] = c; d[3] = 0; d[4] = e; d[5] = h; d[6] = j; d[7] = 0; d[8] = g; d[9] = i; d[10] = k; d[11] = 0; d[12] = -(b * n + e * o + g * a); d[13] = -(f * n + h * o + i * a); d[14] = -(c * n + j * o + k * a); d[15] = 1; return d }; mat4.fromRotationTranslation = function(a, b, c) { c || (c = mat4.create()); var d = a[0], e = a[1], g = a[2], f = a[3], h = d + d, i = e + e, j = g + g, a = d * h, k = d * i; d *= j; var l = e * i; e *= j; g *= j; h *= f; i *= f; f *= j; c[0] = 1 - (l + g); c[1] = k + f; c[2] = d - i; c[3] = 0; c[4] = k - f; c[5] = 1 - (a + g); c[6] = e + h; c[7] = 0; c[8] = d + i; c[9] = e - h; c[10] = 1 - (a + l); c[11] = 0; c[12] = b[0]; c[13] = b[1]; c[14] = b[2]; c[15] = 1; return c }; mat4.str = function(a) { return "[" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + ", " + a[9] + ", " + a[10] + ", " + a[11] + ", " + a[12] + ", " + a[13] + ", " + a[14] + ", " + a[15] + "]" }; quat4.create = function(a) { var b = new MatrixArray(4); a && (b[0] = a[0], b[1] = a[1], b[2] = a[2], b[3] = a[3]); return b }; quat4.set = function(a, b) { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; b[3] = a[3]; return b }; quat4.calculateW = function(a, b) { var c = a[0], d = a[1], e = a[2]; if (!b || a === b) return a[3] = -Math.sqrt(Math.abs(1 - c * c - d * d - e * e)), a; b[0] = c; b[1] = d; b[2] = e; b[3] = -Math.sqrt(Math.abs(1 - c * c - d * d - e * e)); return b }; quat4.inverse = function(a, b) { if (!b || a === b) return a[0] *= -1, a[1] *= -1, a[2] *= -1, a; b[0] = -a[0]; b[1] = -a[1]; b[2] = -a[2]; b[3] = a[3]; return b }; quat4.length = function(a) { var b = a[0], c = a[1], d = a[2], a = a[3]; return Math.sqrt(b * b + c * c + d * d + a * a) }; quat4.normalize = function(a, b) { b || (b = a); var c = a[0], d = a[1], e = a[2], g = a[3], f = Math.sqrt(c * c + d * d + e * e + g * g); if (f === 0) return b[0] = 0, b[1] = 0, b[2] = 0, b[3] = 0, b; f = 1 / f; b[0] = c * f; b[1] = d * f; b[2] = e * f; b[3] = g * f; return b }; quat4.multiply = function(a, b, c) { c || (c = a); var d = a[0], e = a[1], g = a[2], a = a[3], f = b[0], h = b[1], i = b[2], b = b[3]; c[0] = d * b + a * f + e * i - g * h; c[1] = e * b + a * h + g * f - d * i; c[2] = g * b + a * i + d * h - e * f; c[3] = a * b - d * f - e * h - g * i; return c }; quat4.multiplyVec3 = function(a, b, c) { c || (c = b); var d = b[0], e = b[1], g = b[2], b = a[0], f = a[1], h = a[2], a = a[3], i = a * d + f * g - h * e, j = a * e + h * d - b * g, k = a * g + b * e - f * d, d = -b * d - f * e - h * g; c[0] = i * a + d * -b + j * -h - k * -f; c[1] = j * a + d * -f + k * -b - i * -h; c[2] = k * a + d * -h + i * -f - j * -b; return c }; quat4.toMat3 = function(a, b) { b || (b = mat3.create()); var c = a[0], d = a[1], e = a[2], g = a[3], f = c + c, h = d + d, i = e + e, j = c * f, k = c * h; c *= i; var l = d * h; d *= i; e *= i; f *= g; h *= g; g *= i; b[0] = 1 - (l + e); b[1] = k + g; b[2] = c - h; b[3] = k - g; b[4] = 1 - (j + e); b[5] = d + f; b[6] = c + h; b[7] = d - f; b[8] = 1 - (j + l); return b }; quat4.toMat4 = function(a, b) { b || (b = mat4.create()); var c = a[0], d = a[1], e = a[2], g = a[3], f = c + c, h = d + d, i = e + e, j = c * f, k = c * h; c *= i; var l = d * h; d *= i; e *= i; f *= g; h *= g; g *= i; b[0] = 1 - (l + e); b[1] = k + g; b[2] = c - h; b[3] = 0; b[4] = k - g; b[5] = 1 - (j + e); b[6] = d + f; b[7] = 0; b[8] = c + h; b[9] = d - f; b[10] = 1 - (j + l); b[11] = 0; b[12] = 0; b[13] = 0; b[14] = 0; b[15] = 1; return b }; quat4.slerp = function(a, b, c, d) { d || (d = a); var e = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3], g, f; if (Math.abs(e) >= 1) return d !== a && (d[0] = a[0], d[1] = a[1], d[2] = a[2], d[3] = a[3]), d; g = Math.acos(e); f = Math.sqrt(1 - e * e); if (Math.abs(f) < 0.001) return d[0] = a[0] * 0.5 + b[0] * 0.5, d[1] = a[1] * 0.5 + b[1] * 0.5, d[2] = a[2] * 0.5 + b[2] * 0.5, d[3] = a[3] * 0.5 + b[3] * 0.5, d; e = Math.sin((1 - c) * g) / f; c = Math.sin(c * g) / f; d[0] = a[0] * e + b[0] * c; d[1] = a[1] * e + b[1] * c; d[2] = a[2] * e + b[2] * c; d[3] = a[3] * e + b[3] * c; return d }; quat4.str = function(a) { return "[" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + "]" }; (function() { var MAX_VERTICES = 8000; // equates to 2500 objects being drawn var MAX_INDICES = (MAX_VERTICES / 2) * 3; // 6 indices for every 4 vertices var MAX_POINTS = 8000; var MULTI_BUFFERS = 4; // cycle 4 buffers to try and avoid blocking var BATCH_NULL = 0; var BATCH_QUAD = 1; var BATCH_SETTEXTURE = 2; var BATCH_SETOPACITY = 3; var BATCH_SETBLEND = 4; var BATCH_UPDATEMODELVIEW = 5; var BATCH_RENDERTOTEXTURE = 6; var BATCH_CLEAR = 7; var BATCH_POINTS = 8; var BATCH_SETPROGRAM = 9; var BATCH_SETPROGRAMPARAMETERS = 10; var BATCH_SETTEXTURE1 = 11; var BATCH_SETCOLOR = 12; var BATCH_SETDEPTHTEST = 13; var BATCH_SETEARLYZMODE = 14; /* var lose_ext = null; window.lose_context = function () { if (!lose_ext) { console.log("WEBGL_lose_context not supported"); return; } lose_ext.loseContext(); }; window.restore_context = function () { if (!lose_ext) { console.log("WEBGL_lose_context not supported"); return; } lose_ext.restoreContext(); }; */ var tempMat4 = mat4.create(); function GLWrap_(gl, isMobile, enableFrontToBack) { this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent); this.width = 0; // not yet known, wait for call to setSize() this.height = 0; this.enableFrontToBack = !!enableFrontToBack; this.isEarlyZPass = false; this.isBatchInEarlyZPass = false; this.currentZ = 0; this.zNear = 1; this.zFar = 1000; this.zIncrement = ((this.zFar - this.zNear) / 32768); this.zA = this.zFar / (this.zFar - this.zNear); this.zB = this.zFar * this.zNear / (this.zNear - this.zFar); this.kzA = 65536 * this.zA; this.kzB = 65536 * this.zB; this.cam = vec3.create([0, 0, 100]); // camera position this.look = vec3.create([0, 0, 0]); // lookat position this.up = vec3.create([0, 1, 0]); // up vector this.worldScale = vec3.create([1, 1, 1]); // world scaling factor this.enable_mipmaps = true; this.matP = mat4.create(); // perspective matrix this.matMV = mat4.create(); // model view matrix this.lastMV = mat4.create(); this.currentMV = mat4.create(); this.gl = gl; this.version = (this.gl.getParameter(this.gl.VERSION).indexOf("WebGL 2") === 0 ? 2 : 1); this.initState(); }; GLWrap_.prototype.initState = function() { var gl = this.gl; var i, len; this.lastOpacity = 1; this.lastTexture0 = null; // last bound to TEXTURE0 this.lastTexture1 = null; // last bound to TEXTURE1 this.currentOpacity = 1; gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.disable(gl.CULL_FACE); gl.disable(gl.STENCIL_TEST); gl.disable(gl.DITHER); if (this.enableFrontToBack) { gl.enable(gl.DEPTH_TEST); gl.depthFunc(gl.LEQUAL); } else { gl.disable(gl.DEPTH_TEST); } this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); this.lastSrcBlend = gl.ONE; this.lastDestBlend = gl.ONE_MINUS_SRC_ALPHA; this.vertexData = new Float32Array(MAX_VERTICES * (this.enableFrontToBack ? 3 : 2)); this.texcoordData = new Float32Array(MAX_VERTICES * 2); this.pointData = new Float32Array(MAX_POINTS * 4); this.pointBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferData(gl.ARRAY_BUFFER, this.pointData.byteLength, gl.DYNAMIC_DRAW); this.vertexBuffers = new Array(MULTI_BUFFERS); this.texcoordBuffers = new Array(MULTI_BUFFERS); for (i = 0; i < MULTI_BUFFERS; i++) { this.vertexBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[i]); gl.bufferData(gl.ARRAY_BUFFER, this.vertexData.byteLength, gl.DYNAMIC_DRAW); this.texcoordBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[i]); gl.bufferData(gl.ARRAY_BUFFER, this.texcoordData.byteLength, gl.DYNAMIC_DRAW); } this.curBuffer = 0; this.indexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); var indexData = new Uint16Array(MAX_INDICES); i = 0, len = MAX_INDICES; var fv = 0; while (i < len) { indexData[i++] = fv; // top left indexData[i++] = fv + 1; // top right indexData[i++] = fv + 2; // bottom right (first tri) indexData[i++] = fv; // top left indexData[i++] = fv + 2; // bottom right indexData[i++] = fv + 3; // bottom left fv += 4; } gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW); this.vertexPtr = 0; this.texPtr = 0; this.pointPtr = 0; var fsSource, vsSource; this.shaderPrograms = []; fsSource = [ "varying mediump vec2 vTex;", "uniform lowp float opacity;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, vTex);", " gl_FragColor *= opacity;", "}" ].join("\n"); if (this.enableFrontToBack) { vsSource = [ "attribute highp vec3 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, aPos.z, 1.0);", " vTex = aTex;", "}" ].join("\n"); } else { vsSource = [ "attribute highp vec2 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " vTex = aTex;", "}" ].join("\n"); } var shaderProg = this.createShaderProgram({ src: fsSource }, vsSource, "<default>");; this.shaderPrograms.push(shaderProg); // Default shader is always shader 0 fsSource = [ "uniform mediump sampler2D samplerFront;", "varying lowp float opacity;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, gl_PointCoord);", " gl_FragColor *= opacity;", "}" ].join("\n"); var pointVsSource = [ "attribute vec4 aPos;", "varying float opacity;", "uniform mat4 matP;", "uniform mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " gl_PointSize = aPos.z;", " opacity = aPos.w;", "}" ].join("\n"); shaderProg = this.createShaderProgram({ src: fsSource }, pointVsSource, "<point>");; this.shaderPrograms.push(shaderProg); // Point shader is always shader 1 fsSource = [ "varying mediump vec2 vTex;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " if (texture2D(samplerFront, vTex).a < 1.0)", " discard;", // discarding non-opaque fragments "}" ].join("\n"); var shaderProg = this.createShaderProgram({ src: fsSource }, vsSource, "<earlyz>");; this.shaderPrograms.push(shaderProg); // Early-Z shader is always shader 2 fsSource = [ "uniform lowp vec4 colorFill;", "void main(void) {", " gl_FragColor = colorFill;", "}" ].join("\n"); var shaderProg = this.createShaderProgram({ src: fsSource }, vsSource, "<fill>");; this.shaderPrograms.push(shaderProg); // Fill-color shader is always shader 3 for (var shader_name in cr.shaders) { if (cr.shaders.hasOwnProperty(shader_name)) this.shaderPrograms.push(this.createShaderProgram(cr.shaders[shader_name], vsSource, shader_name)); } gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, null); this.batch = []; this.batchPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.lastProgram = -1; // start -1 so first switchProgram can do work this.currentProgram = -1; // current program during batch execution this.currentShader = null; this.fbo = gl.createFramebuffer(); this.renderToTex = null; this.depthBuffer = null; this.attachedDepthBuffer = false; // wait until first size call to attach, otherwise it has no storage if (this.enableFrontToBack) { this.depthBuffer = gl.createRenderbuffer(); } this.tmpVec3 = vec3.create([0, 0, 0]);; var pointsizes = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); this.minPointSize = pointsizes[0]; this.maxPointSize = pointsizes[1]; if (this.maxPointSize > 2048) this.maxPointSize = 2048;; this.switchProgram(0); cr.seal(this); }; function GLShaderProgram(gl, shaderProgram, name) { this.gl = gl; this.shaderProgram = shaderProgram; this.name = name; this.locAPos = gl.getAttribLocation(shaderProgram, "aPos"); this.locATex = gl.getAttribLocation(shaderProgram, "aTex"); this.locMatP = gl.getUniformLocation(shaderProgram, "matP"); this.locMatMV = gl.getUniformLocation(shaderProgram, "matMV"); this.locOpacity = gl.getUniformLocation(shaderProgram, "opacity"); this.locColorFill = gl.getUniformLocation(shaderProgram, "colorFill"); this.locSamplerFront = gl.getUniformLocation(shaderProgram, "samplerFront"); this.locSamplerBack = gl.getUniformLocation(shaderProgram, "samplerBack"); this.locDestStart = gl.getUniformLocation(shaderProgram, "destStart"); this.locDestEnd = gl.getUniformLocation(shaderProgram, "destEnd"); this.locSeconds = gl.getUniformLocation(shaderProgram, "seconds"); this.locPixelWidth = gl.getUniformLocation(shaderProgram, "pixelWidth"); this.locPixelHeight = gl.getUniformLocation(shaderProgram, "pixelHeight"); this.locLayerScale = gl.getUniformLocation(shaderProgram, "layerScale"); this.locLayerAngle = gl.getUniformLocation(shaderProgram, "layerAngle"); this.locViewOrigin = gl.getUniformLocation(shaderProgram, "viewOrigin"); this.locScrollPos = gl.getUniformLocation(shaderProgram, "scrollPos"); this.hasAnyOptionalUniforms = !!(this.locPixelWidth || this.locPixelHeight || this.locSeconds || this.locSamplerBack || this.locDestStart || this.locDestEnd || this.locLayerScale || this.locLayerAngle || this.locViewOrigin || this.locScrollPos); this.lpPixelWidth = -999; // set to something unlikely so never counts as cached on first set this.lpPixelHeight = -999; this.lpOpacity = 1; this.lpDestStartX = 0.0; this.lpDestStartY = 0.0; this.lpDestEndX = 1.0; this.lpDestEndY = 1.0; this.lpLayerScale = 1.0; this.lpLayerAngle = 0.0; this.lpViewOriginX = 0.0; this.lpViewOriginY = 0.0; this.lpScrollPosX = 0.0; this.lpScrollPosY = 0.0; this.lpSeconds = 0.0; this.lastCustomParams = []; this.lpMatMV = mat4.create(); if (this.locOpacity) gl.uniform1f(this.locOpacity, 1); if (this.locColorFill) gl.uniform4f(this.locColorFill, 1.0, 1.0, 1.0, 1.0); if (this.locSamplerFront) gl.uniform1i(this.locSamplerFront, 0); if (this.locSamplerBack) gl.uniform1i(this.locSamplerBack, 1); if (this.locDestStart) gl.uniform2f(this.locDestStart, 0.0, 0.0); if (this.locDestEnd) gl.uniform2f(this.locDestEnd, 1.0, 1.0); if (this.locLayerScale) gl.uniform1f(this.locLayerScale, 1.0); if (this.locLayerAngle) gl.uniform1f(this.locLayerAngle, 0.0); if (this.locViewOrigin) gl.uniform2f(this.locViewOrigin, 0.0, 0.0); if (this.locScrollPos) gl.uniform2f(this.locScrollPos, 0.0, 0.0); if (this.locSeconds) gl.uniform1f(this.locSeconds, 0.0); this.hasCurrentMatMV = false; // matMV needs updating }; function areMat4sEqual(a, b) { return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15]; }; GLShaderProgram.prototype.updateMatMV = function(mv) { if (areMat4sEqual(this.lpMatMV, mv)) return; // no change, save the expensive GL call mat4.set(mv, this.lpMatMV); this.gl.uniformMatrix4fv(this.locMatMV, false, mv); }; GLWrap_.prototype.createShaderProgram = function(shaderEntry, vsSource, name) { var gl = this.gl; var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, shaderEntry.src); gl.compileShader(fragmentShader); if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { var compilationlog = gl.getShaderInfoLog(fragmentShader); gl.deleteShader(fragmentShader); throw new Error("error compiling fragment shader: " + compilationlog); } var vertexShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader, vsSource); gl.compileShader(vertexShader); if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { var compilationlog = gl.getShaderInfoLog(vertexShader); gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); throw new Error("error compiling vertex shader: " + compilationlog); } var shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, fragmentShader); gl.attachShader(shaderProgram, vertexShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { var compilationlog = gl.getProgramInfoLog(shaderProgram); gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); gl.deleteProgram(shaderProgram); throw new Error("error linking shader program: " + compilationlog); } gl.useProgram(shaderProgram); gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); var ret = new GLShaderProgram(gl, shaderProgram, name); ret.extendBoxHorizontal = shaderEntry.extendBoxHorizontal || 0; ret.extendBoxVertical = shaderEntry.extendBoxVertical || 0; ret.crossSampling = !!shaderEntry.crossSampling; ret.preservesOpaqueness = !!shaderEntry.preservesOpaqueness; ret.animated = !!shaderEntry.animated; ret.parameters = shaderEntry.parameters || []; var i, len; for (i = 0, len = ret.parameters.length; i < len; i++) { ret.parameters[i][1] = gl.getUniformLocation(shaderProgram, ret.parameters[i][0]); ret.lastCustomParams.push(0); gl.uniform1f(ret.parameters[i][1], 0); } cr.seal(ret); return ret; }; GLWrap_.prototype.getShaderIndex = function(name_) { var i, len; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { if (this.shaderPrograms[i].name === name_) return i; } return -1; }; GLWrap_.prototype.project = function(x, y, out) { var mv = this.matMV; var proj = this.matP; var fTempo = [0, 0, 0, 0, 0, 0, 0, 0]; fTempo[0] = mv[0] * x + mv[4] * y + mv[12]; fTempo[1] = mv[1] * x + mv[5] * y + mv[13]; fTempo[2] = mv[2] * x + mv[6] * y + mv[14]; fTempo[3] = mv[3] * x + mv[7] * y + mv[15]; fTempo[4] = proj[0] * fTempo[0] + proj[4] * fTempo[1] + proj[8] * fTempo[2] + proj[12] * fTempo[3]; fTempo[5] = proj[1] * fTempo[0] + proj[5] * fTempo[1] + proj[9] * fTempo[2] + proj[13] * fTempo[3]; fTempo[6] = proj[2] * fTempo[0] + proj[6] * fTempo[1] + proj[10] * fTempo[2] + proj[14] * fTempo[3]; fTempo[7] = -fTempo[2]; if (fTempo[7] === 0.0) //The w value return; fTempo[7] = 1.0 / fTempo[7]; fTempo[4] *= fTempo[7]; fTempo[5] *= fTempo[7]; fTempo[6] *= fTempo[7]; out[0] = (fTempo[4] * 0.5 + 0.5) * this.width; out[1] = (fTempo[5] * 0.5 + 0.5) * this.height; }; GLWrap_.prototype.setSize = function(w, h, force) { if (this.width === w && this.height === h && !force) return; this.endBatch(); var gl = this.gl; this.width = w; this.height = h; gl.viewport(0, 0, w, h); mat4.lookAt(this.cam, this.look, this.up, this.matMV); if (this.enableFrontToBack) { mat4.ortho(-w / 2, w / 2, h / 2, -h / 2, this.zNear, this.zFar, this.matP); this.worldScale[0] = 1; this.worldScale[1] = 1; } else { mat4.perspective(45, w / h, this.zNear, this.zFar, this.matP); var tl = [0, 0]; var br = [0, 0]; this.project(0, 0, tl); this.project(1, 1, br); this.worldScale[0] = 1 / (br[0] - tl[0]); this.worldScale[1] = -1 / (br[1] - tl[1]); } var i, len, s; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { s = this.shaderPrograms[i]; s.hasCurrentMatMV = false; if (s.locMatP) { gl.useProgram(s.shaderProgram); gl.uniformMatrix4fv(s.locMatP, false, this.matP); } } gl.useProgram(this.shaderPrograms[this.lastProgram].shaderProgram); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE0); this.lastTexture0 = null; this.lastTexture1 = null; if (this.depthBuffer) { gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo); gl.bindRenderbuffer(gl.RENDERBUFFER, this.depthBuffer); gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, this.width, this.height); if (!this.attachedDepthBuffer) { gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.depthBuffer); this.attachedDepthBuffer = true; } gl.bindRenderbuffer(gl.RENDERBUFFER, null); gl.bindFramebuffer(gl.FRAMEBUFFER, null); this.renderToTex = null; } }; GLWrap_.prototype.resetModelView = function() { mat4.lookAt(this.cam, this.look, this.up, this.matMV); mat4.scale(this.matMV, this.worldScale); }; GLWrap_.prototype.translate = function(x, y) { if (x === 0 && y === 0) return; this.tmpVec3[0] = x; // * this.worldScale[0]; this.tmpVec3[1] = y; // * this.worldScale[1]; this.tmpVec3[2] = 0; mat4.translate(this.matMV, this.tmpVec3); }; GLWrap_.prototype.scale = function(x, y) { if (x === 1 && y === 1) return; this.tmpVec3[0] = x; this.tmpVec3[1] = y; this.tmpVec3[2] = 1; mat4.scale(this.matMV, this.tmpVec3); }; GLWrap_.prototype.rotateZ = function(a) { if (a === 0) return; mat4.rotateZ(this.matMV, a); }; GLWrap_.prototype.updateModelView = function() { if (areMat4sEqual(this.lastMV, this.matMV)) return; var b = this.pushBatch(); b.type = BATCH_UPDATEMODELVIEW; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(this.matMV); mat4.set(this.matMV, this.lastMV); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; /* var debugBatch = false; jQuery(document).mousedown( function(info) { if (info.which === 2) debugBatch = true; } ); */ GLWrap_.prototype.setEarlyZIndex = function(i) { if (!this.enableFrontToBack) return; if (i > 32760) i = 32760; this.currentZ = this.cam[2] - this.zNear - i * this.zIncrement; }; function GLBatchJob(type_, glwrap_) { this.type = type_; this.glwrap = glwrap_; this.gl = glwrap_.gl; this.opacityParam = 0; // for setOpacity() this.startIndex = 0; // for quad() this.indexCount = 0; // " this.texParam = null; // for setTexture() this.mat4param = null; // for updateModelView() this.shaderParams = []; // for user parameters cr.seal(this); }; GLBatchJob.prototype.doSetEarlyZPass = function() { var gl = this.gl; var glwrap = this.glwrap; if (this.startIndex !== 0) // enable { gl.depthMask(true); // enable depth writes gl.colorMask(false, false, false, false); // disable color writes gl.disable(gl.BLEND); // no color writes so disable blend gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); gl.clear(gl.DEPTH_BUFFER_BIT); // auto-clear depth buffer gl.bindFramebuffer(gl.FRAMEBUFFER, null); glwrap.isBatchInEarlyZPass = true; } else { gl.depthMask(false); // disable depth writes, only test existing depth values gl.colorMask(true, true, true, true); // enable color writes gl.enable(gl.BLEND); // turn blending back on glwrap.isBatchInEarlyZPass = false; } }; GLBatchJob.prototype.doSetTexture = function() { this.gl.bindTexture(this.gl.TEXTURE_2D, this.texParam); }; GLBatchJob.prototype.doSetTexture1 = function() { var gl = this.gl; gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); gl.activeTexture(gl.TEXTURE0); }; GLBatchJob.prototype.doSetOpacity = function() { var o = this.opacityParam; var glwrap = this.glwrap; glwrap.currentOpacity = o; var curProg = glwrap.currentShader; if (curProg.locOpacity && curProg.lpOpacity !== o) { curProg.lpOpacity = o; this.gl.uniform1f(curProg.locOpacity, o); } }; GLBatchJob.prototype.doQuad = function() { this.gl.drawElements(this.gl.TRIANGLES, this.indexCount, this.gl.UNSIGNED_SHORT, this.startIndex); }; GLBatchJob.prototype.doSetBlend = function() { this.gl.blendFunc(this.startIndex, this.indexCount); }; GLBatchJob.prototype.doUpdateModelView = function() { var i, len, s, shaderPrograms = this.glwrap.shaderPrograms, currentProgram = this.glwrap.currentProgram; for (i = 0, len = shaderPrograms.length; i < len; i++) { s = shaderPrograms[i]; if (i === currentProgram && s.locMatMV) { s.updateMatMV(this.mat4param); s.hasCurrentMatMV = true; } else s.hasCurrentMatMV = false; } mat4.set(this.mat4param, this.glwrap.currentMV); }; GLBatchJob.prototype.doRenderToTexture = function() { var gl = this.gl; var glwrap = this.glwrap; if (this.texParam) { if (glwrap.lastTexture1 === this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); glwrap.lastTexture1 = null; gl.activeTexture(gl.TEXTURE0); } gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); if (!glwrap.isBatchInEarlyZPass) { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texParam, 0); } } else { if (!glwrap.enableFrontToBack) { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); } gl.bindFramebuffer(gl.FRAMEBUFFER, null); } }; GLBatchJob.prototype.doClear = function() { var gl = this.gl; var mode = this.startIndex; if (mode === 0) // clear whole surface { gl.clearColor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clear(gl.COLOR_BUFFER_BIT); } else if (mode === 1) // clear rectangle { gl.enable(gl.SCISSOR_TEST); gl.scissor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.disable(gl.SCISSOR_TEST); } else // clear depth { gl.clear(gl.DEPTH_BUFFER_BIT); } }; GLBatchJob.prototype.doSetDepthTestEnabled = function() { var gl = this.gl; var enable = this.startIndex; if (enable !== 0) { gl.enable(gl.DEPTH_TEST); } else { gl.disable(gl.DEPTH_TEST); } }; GLBatchJob.prototype.doPoints = function() { var gl = this.gl; var glwrap = this.glwrap; if (glwrap.enableFrontToBack) gl.disable(gl.DEPTH_TEST); var s = glwrap.shaderPrograms[1]; gl.useProgram(s.shaderProgram); if (!s.hasCurrentMatMV && s.locMatMV) { s.updateMatMV(glwrap.currentMV); s.hasCurrentMatMV = true; } gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.pointBuffer); gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.POINTS, this.startIndex / 4, this.indexCount); s = glwrap.currentShader; gl.useProgram(s.shaderProgram); if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, glwrap.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } if (glwrap.enableFrontToBack) gl.enable(gl.DEPTH_TEST); }; GLBatchJob.prototype.doSetProgram = function() { var gl = this.gl; var glwrap = this.glwrap; var s = glwrap.shaderPrograms[this.startIndex]; // recycled param to save memory glwrap.currentProgram = this.startIndex; // current batch program glwrap.currentShader = s; gl.useProgram(s.shaderProgram); // switch to if (!s.hasCurrentMatMV && s.locMatMV) { s.updateMatMV(glwrap.currentMV); s.hasCurrentMatMV = true; } if (s.locOpacity && s.lpOpacity !== glwrap.currentOpacity) { s.lpOpacity = glwrap.currentOpacity; gl.uniform1f(s.locOpacity, glwrap.currentOpacity); } if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, glwrap.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } } GLBatchJob.prototype.doSetColor = function() { var s = this.glwrap.currentShader; var mat4param = this.mat4param; this.gl.uniform4f(s.locColorFill, mat4param[0], mat4param[1], mat4param[2], mat4param[3]); }; GLBatchJob.prototype.doSetProgramParameters = function() { var i, len, s = this.glwrap.currentShader; var gl = this.gl; var mat4param = this.mat4param; if (s.locSamplerBack && this.glwrap.lastTexture1 !== this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); this.glwrap.lastTexture1 = this.texParam; gl.activeTexture(gl.TEXTURE0); } var v = mat4param[0]; var v2; if (s.locPixelWidth && v !== s.lpPixelWidth) { s.lpPixelWidth = v; gl.uniform1f(s.locPixelWidth, v); } v = mat4param[1]; if (s.locPixelHeight && v !== s.lpPixelHeight) { s.lpPixelHeight = v; gl.uniform1f(s.locPixelHeight, v); } v = mat4param[2]; v2 = mat4param[3]; if (s.locDestStart && (v !== s.lpDestStartX || v2 !== s.lpDestStartY)) { s.lpDestStartX = v; s.lpDestStartY = v2; gl.uniform2f(s.locDestStart, v, v2); } v = mat4param[4]; v2 = mat4param[5]; if (s.locDestEnd && (v !== s.lpDestEndX || v2 !== s.lpDestEndY)) { s.lpDestEndX = v; s.lpDestEndY = v2; gl.uniform2f(s.locDestEnd, v, v2); } v = mat4param[6]; if (s.locLayerScale && v !== s.lpLayerScale) { s.lpLayerScale = v; gl.uniform1f(s.locLayerScale, v); } v = mat4param[7]; if (s.locLayerAngle && v !== s.lpLayerAngle) { s.lpLayerAngle = v; gl.uniform1f(s.locLayerAngle, v); } v = mat4param[8]; v2 = mat4param[9]; if (s.locViewOrigin && (v !== s.lpViewOriginX || v2 !== s.lpViewOriginY)) { s.lpViewOriginX = v; s.lpViewOriginY = v2; gl.uniform2f(s.locViewOrigin, v, v2); } v = mat4param[10]; v2 = mat4param[11]; if (s.locScrollPos && (v !== s.lpScrollPosX || v2 !== s.lpScrollPosY)) { s.lpScrollPosX = v; s.lpScrollPosY = v2; gl.uniform2f(s.locScrollPos, v, v2); } v = mat4param[12]; if (s.locSeconds && v !== s.lpSeconds) { s.lpSeconds = v; gl.uniform1f(s.locSeconds, v); } if (s.parameters.length) { for (i = 0, len = s.parameters.length; i < len; i++) { v = this.shaderParams[i]; if (v !== s.lastCustomParams[i]) { s.lastCustomParams[i] = v; gl.uniform1f(s.parameters[i][1], v); } } } }; GLWrap_.prototype.pushBatch = function() { if (this.batchPtr === this.batch.length) this.batch.push(new GLBatchJob(BATCH_NULL, this)); return this.batch[this.batchPtr++]; }; GLWrap_.prototype.endBatch = function() { if (this.batchPtr === 0) return; if (this.gl.isContextLost()) return; var gl = this.gl; if (this.pointPtr > 0) { gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.pointData.subarray(0, this.pointPtr)); if (s && s.locAPos >= 0 && s.name === "<point>") gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); } if (this.vertexPtr > 0) { var s = this.currentShader; gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[this.curBuffer]); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.vertexData.subarray(0, this.vertexPtr)); if (s && s.locAPos >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locAPos, this.enableFrontToBack ? 3 : 2, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[this.curBuffer]); gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.texcoordData.subarray(0, this.texPtr)); if (s && s.locATex >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } var i, len, b; for (i = 0, len = this.batchPtr; i < len; i++) { b = this.batch[i]; switch (b.type) { case 1: b.doQuad(); break; case 2: b.doSetTexture(); break; case 3: b.doSetOpacity(); break; case 4: b.doSetBlend(); break; case 5: b.doUpdateModelView(); break; case 6: b.doRenderToTexture(); break; case 7: b.doClear(); break; case 8: b.doPoints(); break; case 9: b.doSetProgram(); break; case 10: b.doSetProgramParameters(); break; case 11: b.doSetTexture1(); break; case 12: b.doSetColor(); break; case 13: b.doSetDepthTestEnabled(); break; case 14: b.doSetEarlyZPass(); break; } } this.batchPtr = 0; this.vertexPtr = 0; this.texPtr = 0; this.pointPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.isBatchInEarlyZPass = false; this.curBuffer++; if (this.curBuffer >= MULTI_BUFFERS) this.curBuffer = 0; }; GLWrap_.prototype.setOpacity = function(op) { if (op === this.lastOpacity) return; if (this.isEarlyZPass) return; // ignore var b = this.pushBatch(); b.type = BATCH_SETOPACITY; b.opacityParam = op; this.lastOpacity = op; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTexture = function(tex) { if (tex === this.lastTexture0) return;; var b = this.pushBatch(); b.type = BATCH_SETTEXTURE; b.texParam = tex; this.lastTexture0 = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setBlend = function(s, d) { if (s === this.lastSrcBlend && d === this.lastDestBlend) return; if (this.isEarlyZPass) return; // ignore var b = this.pushBatch(); b.type = BATCH_SETBLEND; b.startIndex = s; // recycle params to save memory b.indexCount = d; this.lastSrcBlend = s; this.lastDestBlend = d; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.isPremultipliedAlphaBlend = function() { return (this.lastSrcBlend === this.gl.ONE && this.lastDestBlend === this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setAlphaBlend = function() { this.setBlend(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setNoPremultiplyAlphaBlend = function() { this.setBlend(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA); }; var LAST_VERTEX = MAX_VERTICES * 2 - 8; GLWrap_.prototype.quad = function(tlx, tly, trx, try_, brx, bry, blx, bly) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = 0; td[t++] = 0; td[t++] = 1; td[t++] = 0; td[t++] = 1; td[t++] = 1; td[t++] = 0; td[t++] = 1; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.quadTex = function(tlx, tly, trx, try_, brx, bry, blx, bly, rcTex) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } var rc_left = rcTex.left; var rc_top = rcTex.top; var rc_right = rcTex.right; var rc_bottom = rcTex.bottom; if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = rc_left; td[t++] = rc_top; td[t++] = rc_right; td[t++] = rc_top; td[t++] = rc_right; td[t++] = rc_bottom; td[t++] = rc_left; td[t++] = rc_bottom; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.quadTexUV = function(tlx, tly, trx, try_, brx, bry, blx, bly, tlu, tlv, tru, trv, bru, brv, blu, blv) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var t = this.texPtr; var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array var currentZ = this.currentZ; if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = this.enableFrontToBack ? v : (v / 2) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } if (this.enableFrontToBack) { vd[v++] = tlx; vd[v++] = tly; vd[v++] = currentZ; vd[v++] = trx; vd[v++] = try_; vd[v++] = currentZ; vd[v++] = brx; vd[v++] = bry; vd[v++] = currentZ; vd[v++] = blx; vd[v++] = bly; vd[v++] = currentZ; } else { vd[v++] = tlx; vd[v++] = tly; vd[v++] = trx; vd[v++] = try_; vd[v++] = brx; vd[v++] = bry; vd[v++] = blx; vd[v++] = bly; } td[t++] = tlu; td[t++] = tlv; td[t++] = tru; td[t++] = trv; td[t++] = bru; td[t++] = brv; td[t++] = blu; td[t++] = blv; this.vertexPtr = v; this.texPtr = t; }; GLWrap_.prototype.convexPoly = function(pts) { var pts_count = pts.length / 2;; var tris = pts_count - 2; // 3 points = 1 tri, 4 points = 2 tris, 5 points = 3 tris etc. var last_tri = tris - 1; var p0x = pts[0]; var p0y = pts[1]; var i, i2, p1x, p1y, p2x, p2y, p3x, p3y; for (i = 0; i < tris; i += 2) // draw 2 triangles at a time { i2 = i * 2; p1x = pts[i2 + 2]; p1y = pts[i2 + 3]; p2x = pts[i2 + 4]; p2y = pts[i2 + 5]; if (i === last_tri) { this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p2x, p2y); } else { p3x = pts[i2 + 6]; p3y = pts[i2 + 7]; this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y); } } }; var LAST_POINT = MAX_POINTS - 4; GLWrap_.prototype.point = function(x_, y_, size_, opacity_) { if (this.pointPtr >= LAST_POINT) this.endBatch(); var p = this.pointPtr; // point cursor var pd = this.pointData; // point data array if (this.hasPointBatchTop) { this.batch[this.batchPtr - 1].indexCount++; } else { var b = this.pushBatch(); b.type = BATCH_POINTS; b.startIndex = p; b.indexCount = 1; this.hasPointBatchTop = true; this.hasQuadBatchTop = false; } pd[p++] = x_; pd[p++] = y_; pd[p++] = size_; pd[p++] = opacity_; this.pointPtr = p; }; GLWrap_.prototype.switchProgram = function(progIndex) { if (this.lastProgram === progIndex) return; // no change var shaderProg = this.shaderPrograms[progIndex]; if (!shaderProg) { if (this.lastProgram === 0) return; // already on default shader progIndex = 0; shaderProg = this.shaderPrograms[0]; } var b = this.pushBatch(); b.type = BATCH_SETPROGRAM; b.startIndex = progIndex; this.lastProgram = progIndex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.programUsesDest = function(progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd); }; GLWrap_.prototype.programUsesCrossSampling = function(progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd || s.crossSampling); }; GLWrap_.prototype.programPreservesOpaqueness = function(progIndex) { return this.shaderPrograms[progIndex].preservesOpaqueness; }; GLWrap_.prototype.programExtendsBox = function(progIndex) { var s = this.shaderPrograms[progIndex]; return s.extendBoxHorizontal !== 0 || s.extendBoxVertical !== 0; }; GLWrap_.prototype.getProgramBoxExtendHorizontal = function(progIndex) { return this.shaderPrograms[progIndex].extendBoxHorizontal; }; GLWrap_.prototype.getProgramBoxExtendVertical = function(progIndex) { return this.shaderPrograms[progIndex].extendBoxVertical; }; GLWrap_.prototype.getProgramParameterType = function(progIndex, paramIndex) { return this.shaderPrograms[progIndex].parameters[paramIndex][2]; }; GLWrap_.prototype.programIsAnimated = function(progIndex) { return this.shaderPrograms[progIndex].animated; }; GLWrap_.prototype.setProgramParameters = function(backTex, pixelWidth, pixelHeight, destStartX, destStartY, destEndX, destEndY, layerScale, layerAngle, viewOriginLeft, viewOriginTop, scrollPosX, scrollPosY, seconds, params) { var i, len; var s = this.shaderPrograms[this.lastProgram]; var b, mat4param, shaderParams; if (s.hasAnyOptionalUniforms || params.length) { b = this.pushBatch(); b.type = BATCH_SETPROGRAMPARAMETERS; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(); mat4param = b.mat4param; mat4param[0] = pixelWidth; mat4param[1] = pixelHeight; mat4param[2] = destStartX; mat4param[3] = destStartY; mat4param[4] = destEndX; mat4param[5] = destEndY; mat4param[6] = layerScale; mat4param[7] = layerAngle; mat4param[8] = viewOriginLeft; mat4param[9] = viewOriginTop; mat4param[10] = scrollPosX; mat4param[11] = scrollPosY; mat4param[12] = seconds; if (s.locSamplerBack) {; b.texParam = backTex; } else b.texParam = null; if (params.length) { shaderParams = b.shaderParams; shaderParams.length = params.length; for (i = 0, len = params.length; i < len; i++) shaderParams[i] = params[i]; } this.hasQuadBatchTop = false; this.hasPointBatchTop = false; } }; GLWrap_.prototype.clear = function(r, g, b_, a) { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 0; // clear all mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r; b.mat4param[1] = g; b.mat4param[2] = b_; b.mat4param[3] = a; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearRect = function(x, y, w, h) { if (w < 0 || h < 0) return; // invalid clear area var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 1; // clear rect mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = x; b.mat4param[1] = y; b.mat4param[2] = w; b.mat4param[3] = h; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearDepth = function() { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 2; // clear depth mode this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setEarlyZPass = function(e) { if (!this.enableFrontToBack) return; // no depth buffer in use e = !!e; if (this.isEarlyZPass === e) return; // no change var b = this.pushBatch(); b.type = BATCH_SETEARLYZMODE; b.startIndex = (e ? 1 : 0); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.isEarlyZPass = e; this.renderToTex = null; if (this.isEarlyZPass) { this.switchProgram(2); // early Z program } else { this.switchProgram(0); // normal rendering } }; GLWrap_.prototype.setDepthTestEnabled = function(e) { if (!this.enableFrontToBack) return; // no depth buffer in use var b = this.pushBatch(); b.type = BATCH_SETDEPTHTEST; b.startIndex = (e ? 1 : 0); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.fullscreenQuad = function() { mat4.set(this.lastMV, tempMat4); this.resetModelView(); this.updateModelView(); var halfw = this.width / 2; var halfh = this.height / 2; this.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); mat4.set(tempMat4, this.matMV); this.updateModelView(); }; GLWrap_.prototype.setColorFillMode = function(r_, g_, b_, a_) { this.switchProgram(3); var b = this.pushBatch(); b.type = BATCH_SETCOLOR; if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r_; b.mat4param[1] = g_; b.mat4param[2] = b_; b.mat4param[3] = a_; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTextureFillMode = function() {; this.switchProgram(0); }; GLWrap_.prototype.restoreEarlyZMode = function() {; this.switchProgram(2); }; GLWrap_.prototype.present = function() { this.endBatch(); this.gl.flush(); /* if (debugBatch) { ; debugBatch = false; } */ }; function nextHighestPowerOfTwo(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } var all_textures = []; var textures_by_src = {}; GLWrap_.prototype.contextLost = function() { cr.clearArray(all_textures); textures_by_src = {}; }; var BF_RGBA8 = 0; var BF_RGB8 = 1; var BF_RGBA4 = 2; var BF_RGB5_A1 = 3; var BF_RGB565 = 4; GLWrap_.prototype.loadTexture = function(img, tiling, linearsampling, pixelformat, tiletype, nomip) { tiling = !!tiling; linearsampling = !!linearsampling; var tex_key = img.src + "," + tiling + "," + linearsampling + (tiling ? ("," + tiletype) : ""); var webGL_texture = null; if (typeof img.src !== "undefined" && textures_by_src.hasOwnProperty(tex_key)) { webGL_texture = textures_by_src[tex_key]; webGL_texture.c2refcount++; return webGL_texture; } this.endBatch();; var gl = this.gl; var isPOT = (cr.isPOT(img.width) && cr.isPOT(img.height)); webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); var internalformat = gl.RGBA; var format = gl.RGBA; var type = gl.UNSIGNED_BYTE; if (pixelformat && !this.isIE) { switch (pixelformat) { case BF_RGB8: internalformat = gl.RGB; format = gl.RGB; break; case BF_RGBA4: type = gl.UNSIGNED_SHORT_4_4_4_4; break; case BF_RGB5_A1: type = gl.UNSIGNED_SHORT_5_5_5_1; break; case BF_RGB565: internalformat = gl.RGB; format = gl.RGB; type = gl.UNSIGNED_SHORT_5_6_5; break; } } if (this.version === 1 && !isPOT && tiling) { var canvas = document.createElement("canvas"); canvas.width = cr.nextHighestPowerOfTwo(img.width); canvas.height = cr.nextHighestPowerOfTwo(img.height); var ctx = canvas.getContext("2d"); if (typeof ctx["imageSmoothingEnabled"] !== "undefined") { ctx["imageSmoothingEnabled"] = linearsampling; } else { ctx["webkitImageSmoothingEnabled"] = linearsampling; ctx["mozImageSmoothingEnabled"] = linearsampling; ctx["msImageSmoothingEnabled"] = linearsampling; } ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, canvas); } else gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, img); if (tiling) { if (tiletype === "repeat-x") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } else if (tiletype === "repeat-y") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } if (linearsampling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); if ((isPOT || this.version >= 2) && this.enable_mipmaps && !nomip) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); gl.generateMipmap(gl.TEXTURE_2D); } else gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = img.width; webGL_texture.c2height = img.height; webGL_texture.c2refcount = 1; webGL_texture.c2texkey = tex_key; all_textures.push(webGL_texture); textures_by_src[tex_key] = webGL_texture; return webGL_texture; }; GLWrap_.prototype.createEmptyTexture = function(w, h, linearsampling, _16bit, tiling) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; var webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, null); if (tiling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = w; webGL_texture.c2height = h; all_textures.push(webGL_texture); return webGL_texture; }; GLWrap_.prototype.videoToTexture = function(video_, texture_, _16bit) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; gl.bindTexture(gl.TEXTURE_2D, texture_); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); try { gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, video_); } catch (e) { if (console && console.error) console.error("Error updating WebGL texture: ", e); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; }; GLWrap_.prototype.deleteTexture = function(tex) { if (!tex) return; if (typeof tex.c2refcount !== "undefined" && tex.c2refcount > 1) { tex.c2refcount--; return; } this.endBatch(); if (tex === this.lastTexture0) { this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.lastTexture0 = null; } if (tex === this.lastTexture1) { this.gl.activeTexture(this.gl.TEXTURE1); this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.gl.activeTexture(this.gl.TEXTURE0); this.lastTexture1 = null; } cr.arrayFindRemove(all_textures, tex); if (typeof tex.c2texkey !== "undefined") delete textures_by_src[tex.c2texkey]; this.gl.deleteTexture(tex); }; GLWrap_.prototype.estimateVRAM = function() { var total = this.width * this.height * 4 * 2; var i, len, t; for (i = 0, len = all_textures.length; i < len; i++) { t = all_textures[i]; total += (t.c2width * t.c2height * 4); } return total; }; GLWrap_.prototype.textureCount = function() { return all_textures.length; }; GLWrap_.prototype.setRenderingToTexture = function(tex) { if (tex === this.renderToTex) return;; var b = this.pushBatch(); b.type = BATCH_RENDERTOTEXTURE; b.texParam = tex; this.renderToTex = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; cr.GLWrap = GLWrap_; }());; (function() { var raf = window["requestAnimationFrame"] || window["mozRequestAnimationFrame"] || window["webkitRequestAnimationFrame"] || window["msRequestAnimationFrame"] || window["oRequestAnimationFrame"]; function Runtime(canvas) { if (!canvas || (!canvas.getContext && !canvas["dc"])) return; if (canvas["c2runtime"]) return; else canvas["c2runtime"] = this; var self = this; this.isCrosswalk = /crosswalk/i.test(navigator.userAgent) || /xwalk/i.test(navigator.userAgent) || !!(typeof window["c2isCrosswalk"] !== "undefined" && window["c2isCrosswalk"]); this.isCordova = this.isCrosswalk || (typeof window["device"] !== "undefined" && (typeof window["device"]["cordova"] !== "undefined" || typeof window["device"]["phonegap"] !== "undefined")) || (typeof window["c2iscordova"] !== "undefined" && window["c2iscordova"]); this.isPhoneGap = this.isCordova; this.isDirectCanvas = !!canvas["dc"]; this.isAppMobi = (typeof window["AppMobi"] !== "undefined" || this.isDirectCanvas); this.isCocoonJs = !!window["c2cocoonjs"]; this.isEjecta = !!window["c2ejecta"]; if (this.isCocoonJs) { CocoonJS["App"]["onSuspended"].addEventListener(function() { self["setSuspended"](true); }); CocoonJS["App"]["onActivated"].addEventListener(function() { self["setSuspended"](false); }); } if (this.isEjecta) { document.addEventListener("pagehide", function() { self["setSuspended"](true); }); document.addEventListener("pageshow", function() { self["setSuspended"](false); }); document.addEventListener("resize", function() { self["setSize"](window.innerWidth, window.innerHeight); }); } this.isDomFree = (this.isDirectCanvas || this.isCocoonJs || this.isEjecta); this.isMicrosoftEdge = /edge\//i.test(navigator.userAgent); this.isIE = (/msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent) || /iemobile/i.test(navigator.userAgent)) && !this.isMicrosoftEdge; this.isTizen = /tizen/i.test(navigator.userAgent); this.isAndroid = /android/i.test(navigator.userAgent) && !this.isTizen && !this.isIE && !this.isMicrosoftEdge; // IE mobile and Tizen masquerade as Android this.isiPhone = (/iphone/i.test(navigator.userAgent) || /ipod/i.test(navigator.userAgent)) && !this.isIE && !this.isMicrosoftEdge; // treat ipod as an iphone; IE mobile masquerades as iPhone this.isiPad = /ipad/i.test(navigator.userAgent); this.isiOS = this.isiPhone || this.isiPad || this.isEjecta; this.isiPhoneiOS6 = (this.isiPhone && /os\s6/i.test(navigator.userAgent)); this.isChrome = (/chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent)) && !this.isIE && !this.isMicrosoftEdge; // note true on Chromium-based webview on Android 4.4+; IE 'Edge' mode also pretends to be Chrome this.isAmazonWebApp = /amazonwebappplatform/i.test(navigator.userAgent); this.isFirefox = /firefox/i.test(navigator.userAgent); this.isSafari = /safari/i.test(navigator.userAgent) && !this.isChrome && !this.isIE && !this.isMicrosoftEdge; // Chrome and IE Mobile masquerade as Safari this.isWindows = /windows/i.test(navigator.userAgent); this.isNWjs = (typeof window["c2nodewebkit"] !== "undefined" || typeof window["c2nwjs"] !== "undefined" || /nodewebkit/i.test(navigator.userAgent) || /nwjs/i.test(navigator.userAgent)); this.isNodeWebkit = this.isNWjs; // old name for backwards compat this.isArcade = (typeof window["is_scirra_arcade"] !== "undefined"); this.isWindows8App = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.isWindows8Capable = !!(typeof window["c2isWindows8Capable"] !== "undefined" && window["c2isWindows8Capable"]); this.isWindowsPhone8 = !!(typeof window["c2isWindowsPhone8"] !== "undefined" && window["c2isWindowsPhone8"]); this.isWindowsPhone81 = !!(typeof window["c2isWindowsPhone81"] !== "undefined" && window["c2isWindowsPhone81"]); this.isWindows10 = !!window["cr_windows10"]; this.isWinJS = (this.isWindows8App || this.isWindows8Capable || this.isWindowsPhone81 || this.isWindows10); // note not WP8.0 this.isBlackberry10 = !!(typeof window["c2isBlackberry10"] !== "undefined" && window["c2isBlackberry10"]); this.isAndroidStockBrowser = (this.isAndroid && !this.isChrome && !this.isCrosswalk && !this.isFirefox && !this.isAmazonWebApp && !this.isDomFree); this.devicePixelRatio = 1; this.isMobile = (this.isCordova || this.isCrosswalk || this.isAppMobi || this.isCocoonJs || this.isAndroid || this.isiOS || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isBlackberry10 || this.isTizen || this.isEjecta); if (!this.isMobile) { this.isMobile = /(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent); } this.isWKWebView = !!(this.isiOS && this.isCordova && window["webkit"]); if (typeof cr_is_preview !== "undefined" && !this.isNWjs && (window.location.search === "?nw" || /nodewebkit/i.test(navigator.userAgent) || /nwjs/i.test(navigator.userAgent))) { this.isNWjs = true; } this.isDebug = (typeof cr_is_preview !== "undefined" && window.location.search.indexOf("debug") > -1); this.canvas = canvas; this.canvasdiv = document.getElementById("c2canvasdiv"); this.gl = null; this.glwrap = null; this.glUnmaskedRenderer = "(unavailable)"; this.enableFrontToBack = false; this.earlyz_index = 0; this.ctx = null; this.firstInFullscreen = false; this.oldWidth = 0; // for restoring non-fullscreen canvas after fullscreen this.oldHeight = 0; this.canvas.oncontextmenu = function(e) { if (e.preventDefault) e.preventDefault(); return false; }; this.canvas.onselectstart = function(e) { if (e.preventDefault) e.preventDefault(); return false; }; this.canvas.ontouchstart = function(e) { if (e.preventDefault) e.preventDefault(); return false; }; if (this.isDirectCanvas) window["c2runtime"] = this; if (this.isNWjs) { window["ondragover"] = function(e) { e.preventDefault(); return false; }; window["ondrop"] = function(e) { e.preventDefault(); return false; }; if (window["nwgui"] && window["nwgui"]["App"]["clearCache"]) window["nwgui"]["App"]["clearCache"](); } if (this.isAndroidStockBrowser && typeof jQuery !== "undefined") { jQuery("canvas").parents("*").css("overflow", "visible"); } this.width = canvas.width; this.height = canvas.height; this.draw_width = this.width; this.draw_height = this.height; this.cssWidth = this.width; this.cssHeight = this.height; this.lastWindowWidth = window.innerWidth; this.lastWindowHeight = window.innerHeight; this.forceCanvasAlpha = false; // note: now unused, left for backwards compat since plugins could modify it this.redraw = true; this.isSuspended = false; if (!Date.now) { Date.now = function now() { return +new Date(); }; } this.plugins = []; this.types = {}; this.types_by_index = []; this.behaviors = []; this.layouts = {}; this.layouts_by_index = []; this.eventsheets = {}; this.eventsheets_by_index = []; this.wait_for_textures = []; // for blocking until textures loaded this.triggers_to_postinit = []; this.all_global_vars = []; this.all_local_vars = []; this.solidBehavior = null; this.jumpthruBehavior = null; this.shadowcasterBehavior = null; this.deathRow = {}; this.hasPendingInstances = false; // true if anything exists in create row or death row this.isInClearDeathRow = false; this.isInOnDestroy = 0; // needs to support recursion so increments and decrements and is true if > 0 this.isRunningEvents = false; this.isEndingLayout = false; this.createRow = []; this.isLoadingState = false; this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = null; // set to string when there is something to try to load this.lastSaveJson = ""; this.signalledContinuousPreview = false; this.suspendDrawing = false; // for hiding display until continuous preview loads this.fireOnCreateAfterLoad = []; // for delaying "On create" triggers until loading complete this.dt = 0; this.dt1 = 0; this.minimumFramerate = 30; this.logictime = 0; // used to calculate CPUUtilisation this.cpuutilisation = 0; this.timescale = 1.0; this.kahanTime = new cr.KahanAdder(); this.wallTime = new cr.KahanAdder(); this.last_tick_time = 0; this.fps = 0; this.last_fps_time = 0; this.tickcount = 0; this.tickcount_nosave = 0; // same as tickcount but never saved/loaded this.execcount = 0; this.framecount = 0; // for fps this.objectcount = 0; this.changelayout = null; this.destroycallbacks = []; this.event_stack = []; this.event_stack_index = -1; this.localvar_stack = [ [] ]; this.localvar_stack_index = 0; this.trigger_depth = 0; // recursion depth for triggers this.pushEventStack(null); this.loop_stack = []; this.loop_stack_index = -1; this.next_uid = 0; this.next_puid = 0; // permanent unique ids this.layout_first_tick = true; this.family_count = 0; this.suspend_events = []; this.raf_id = -1; this.timeout_id = -1; this.isloading = true; this.loadingprogress = 0; this.isNodeFullscreen = false; this.stackLocalCount = 0; // number of stack-based local vars for recursion this.audioInstance = null; this.had_a_click = false; this.isInUserInputEvent = false; this.objects_to_pretick = new cr.ObjectSet(); this.objects_to_tick = new cr.ObjectSet(); this.objects_to_tick2 = new cr.ObjectSet(); this.registered_collisions = []; this.temp_poly = new cr.CollisionPoly([]); this.temp_poly2 = new cr.CollisionPoly([]); this.allGroups = []; // array of all event groups this.groups_by_name = {}; this.cndsBySid = {}; this.actsBySid = {}; this.varsBySid = {}; this.blocksBySid = {}; this.running_layout = null; // currently running layout this.layer_canvas = null; // for layers "render-to-texture" this.layer_ctx = null; this.layer_tex = null; this.layout_tex = null; this.layout_canvas = null; this.layout_ctx = null; this.is_WebGL_context_lost = false; this.uses_background_blending = false; // if any shader uses background blending, so entire layout renders to texture this.fx_tex = [null, null]; this.fullscreen_scaling = 0; this.files_subfolder = ""; // path with project files this.objectsByUid = {}; // maps every in-use UID (as a string) to its instance this.loaderlogos = null; this.snapshotCanvas = null; this.snapshotData = ""; this.objectRefTable = []; this.requestProjectData(); }; Runtime.prototype.requestProjectData = function() { var self = this; if (this.isWKWebView) { this.fetchLocalFileViaCordovaAsText("data.js", function(str) { self.loadProject(JSON.parse(str)); }, function(err) { alert("Error fetching data.js"); }); return; } var xhr; if (this.isWindowsPhone8) xhr = new ActiveXObject("Microsoft.XMLHTTP"); else xhr = new XMLHttpRequest(); var datajs_filename = "data.js"; if (this.isWindows8App || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isWindows10) datajs_filename = "data.json"; xhr.open("GET", datajs_filename, true); var supportsJsonResponse = false; if (!this.isDomFree && ("response" in xhr) && ("responseType" in xhr)) { try { xhr["responseType"] = "json"; supportsJsonResponse = (xhr["responseType"] === "json"); } catch (e) { supportsJsonResponse = false; } } if (!supportsJsonResponse && ("responseType" in xhr)) { try { xhr["responseType"] = "text"; } catch (e) {} } if ("overrideMimeType" in xhr) { try { xhr["overrideMimeType"]("application/json; charset=utf-8"); } catch (e) {} } if (this.isWindowsPhone8) { xhr.onreadystatechange = function() { if (xhr.readyState !== 4) return; self.loadProject(JSON.parse(xhr["responseText"])); }; } else { xhr.onload = function() { if (supportsJsonResponse) { self.loadProject(xhr["response"]); // already parsed by browser } else { if (self.isEjecta) { var str = xhr["responseText"]; str = str.substr(str.indexOf("{")); // trim any BOM self.loadProject(JSON.parse(str)); } else { self.loadProject(JSON.parse(xhr["responseText"])); // forced to sync parse JSON } } }; xhr.onerror = function(e) { cr.logerror("Error requesting " + datajs_filename + ":"); cr.logerror(e); }; } xhr.send(); }; Runtime.prototype.initRendererAndLoader = function() { var self = this; var i, len, j, lenj, k, lenk, t, s, l, y; this.isRetina = ((!this.isDomFree || this.isEjecta || this.isCordova) && this.useHighDpi && !this.isAndroidStockBrowser); if (this.fullscreen_mode === 0 && this.isiOS) this.isRetina = false; this.devicePixelRatio = (this.isRetina ? (window["devicePixelRatio"] || window["webkitDevicePixelRatio"] || window["mozDevicePixelRatio"] || window["msDevicePixelRatio"] || 1) : 1); if (typeof window["StatusBar"] === "object") window["StatusBar"]["hide"](); this.ClearDeathRow(); var attribs; if (this.fullscreen_mode > 0) this["setSize"](window.innerWidth, window.innerHeight, true); this.canvas.addEventListener("webglcontextlost", function(ev) { ev.preventDefault(); self.onContextLost(); cr.logexport("[Construct 2] WebGL context lost"); window["cr_setSuspended"](true); // stop rendering }, false); this.canvas.addEventListener("webglcontextrestored", function(ev) { self.glwrap.initState(); self.glwrap.setSize(self.glwrap.width, self.glwrap.height, true); self.layer_tex = null; self.layout_tex = null; self.fx_tex[0] = null; self.fx_tex[1] = null; self.onContextRestored(); self.redraw = true; cr.logexport("[Construct 2] WebGL context restored"); window["cr_setSuspended"](false); // resume rendering }, false); try { if (this.enableWebGL && (this.isCocoonJs || this.isEjecta || !this.isDomFree)) { attribs = { "alpha": true, "depth": false, "antialias": false, "powerPreference": "high-performance", "failIfMajorPerformanceCaveat": true }; if (!this.isAndroid) this.gl = this.canvas.getContext("webgl2", attribs); if (!this.gl) { this.gl = (this.canvas.getContext("webgl", attribs) || this.canvas.getContext("experimental-webgl", attribs)); } } } catch (e) {} if (this.gl) { var isWebGL2 = (this.gl.getParameter(this.gl.VERSION).indexOf("WebGL 2") === 0); var debug_ext = this.gl.getExtension("WEBGL_debug_renderer_info"); if (debug_ext) { var unmasked_vendor = this.gl.getParameter(debug_ext.UNMASKED_VENDOR_WEBGL); var unmasked_renderer = this.gl.getParameter(debug_ext.UNMASKED_RENDERER_WEBGL); this.glUnmaskedRenderer = unmasked_renderer + " [" + unmasked_vendor + "]"; } if (this.enableFrontToBack) this.glUnmaskedRenderer += " [front-to-back enabled]";; if (!this.isDomFree) { this.overlay_canvas = document.createElement("canvas"); jQuery(this.overlay_canvas).appendTo(this.canvas.parentNode); this.overlay_canvas.oncontextmenu = function(e) { return false; }; this.overlay_canvas.onselectstart = function(e) { return false; }; this.overlay_canvas.width = Math.round(this.cssWidth * this.devicePixelRatio); this.overlay_canvas.height = Math.round(this.cssHeight * this.devicePixelRatio); jQuery(this.overlay_canvas).css({ "width": this.cssWidth + "px", "height": this.cssHeight + "px" }); this.positionOverlayCanvas(); this.overlay_ctx = this.overlay_canvas.getContext("2d"); } this.glwrap = new cr.GLWrap(this.gl, this.isMobile, this.enableFrontToBack); this.glwrap.setSize(this.canvas.width, this.canvas.height); this.glwrap.enable_mipmaps = (this.downscalingQuality !== 0); this.ctx = null; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; for (j = 0, lenj = t.effect_types.length; j < lenj; j++) { s = t.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { l = this.layouts_by_index[i]; for (j = 0, lenj = l.effect_types.length; j < lenj; j++) { s = l.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); } l.updateActiveEffects(); // update preserves opaqueness flag for (j = 0, lenj = l.layers.length; j < lenj; j++) { y = l.layers[j]; for (k = 0, lenk = y.effect_types.length; k < lenk; k++) { s = y.effect_types[k]; s.shaderindex = this.glwrap.getShaderIndex(s.id); s.preservesOpaqueness = this.glwrap.programPreservesOpaqueness(s.shaderindex); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } y.updateActiveEffects(); // update preserves opaqueness flag } } } else { if (this.fullscreen_mode > 0 && this.isDirectCanvas) {; this.canvas = null; document.oncontextmenu = function(e) { return false; }; document.onselectstart = function(e) { return false; }; this.ctx = AppMobi["canvas"]["getContext"]("2d"); try { this.ctx["samplingMode"] = this.linearSampling ? "smooth" : "sharp"; this.ctx["globalScale"] = 1; this.ctx["HTML5CompatibilityMode"] = true; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } catch (e) {} if (this.width !== 0 && this.height !== 0) { this.ctx.width = this.width; this.ctx.height = this.height; } } if (!this.ctx) {; if (this.isCocoonJs) { attribs = { "antialias": !!this.linearSampling, "alpha": true }; this.ctx = this.canvas.getContext("2d", attribs); } else { attribs = { "alpha": true }; this.ctx = this.canvas.getContext("2d", attribs); } this.setCtxImageSmoothingEnabled(this.ctx, this.linearSampling); } this.overlay_canvas = null; this.overlay_ctx = null; } this.tickFunc = function(timestamp) { self.tick(false, timestamp); }; if (window != window.top && !this.isDomFree && !this.isWinJS && !this.isWindowsPhone8) { document.addEventListener("mousedown", function() { window.focus(); }, true); document.addEventListener("touchstart", function() { window.focus(); }, true); } if (typeof cr_is_preview !== "undefined") { if (this.isCocoonJs) console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"); if (window.location.search.indexOf("continuous") > -1) { cr.logexport("Reloading for continuous preview"); this.loadFromSlot = "__c2_continuouspreview"; this.suspendDrawing = true; } if (this.pauseOnBlur && !this.isMobile) { jQuery(window).focus(function() { self["setSuspended"](false); }); jQuery(window).blur(function() { var parent = window.parent; if (!parent || !parent.document.hasFocus()) self["setSuspended"](true); }); } } window.addEventListener("blur", function() { self.onWindowBlur(); }); if (!this.isDomFree) { var unfocusFormControlFunc = function(e) { if (cr.isCanvasInputEvent(e) && document["activeElement"] && document["activeElement"] !== document.getElementsByTagName("body")[0] && document["activeElement"].blur) { try { document["activeElement"].blur(); } catch (e) {} } } if (typeof PointerEvent !== "undefined") { document.addEventListener("pointerdown", unfocusFormControlFunc); } else if (window.navigator["msPointerEnabled"]) { document.addEventListener("MSPointerDown", unfocusFormControlFunc); } else { document.addEventListener("touchstart", unfocusFormControlFunc); } document.addEventListener("mousedown", unfocusFormControlFunc); } if (this.fullscreen_mode === 0 && this.isRetina && this.devicePixelRatio > 1) { this["setSize"](this.original_width, this.original_height, true); } this.tryLockOrientation(); this.getready(); // determine things to preload this.go(); // run loading screen this.extra = {}; cr.seal(this); }; var webkitRepaintFlag = false; Runtime.prototype["setSize"] = function(w, h, force) { var offx = 0, offy = 0; var neww = 0, newh = 0, intscale = 0; if (this.lastWindowWidth === w && this.lastWindowHeight === h && !force) return; this.lastWindowWidth = w; this.lastWindowHeight = h; var mode = this.fullscreen_mode; var orig_aspect, cur_aspect; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen) && !this.isCordova; if (!isfullscreen && this.fullscreen_mode === 0 && !force) return; // ignore size events when not fullscreen and not using a fullscreen-in-browser mode if (isfullscreen) mode = this.fullscreen_scaling; var dpr = this.devicePixelRatio; if (mode >= 4) { if (mode === 5 && dpr !== 1) // integer scaling { w += 1; h += 1; } orig_aspect = this.original_width / this.original_height; cur_aspect = w / h; if (cur_aspect > orig_aspect) { neww = h * orig_aspect; if (mode === 5) // integer scaling { intscale = (neww * dpr) / this.original_width; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offx = (w - neww) / 2; w = neww; } } else { newh = w / orig_aspect; if (mode === 5) // integer scaling { intscale = (newh * dpr) / this.original_height; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offy = (h - newh) / 2; h = newh; } } } else if (isfullscreen && mode === 0) { offx = Math.floor((w - this.original_width) / 2); offy = Math.floor((h - this.original_height) / 2); w = this.original_width; h = this.original_height; } if (mode < 2) this.aspect_scale = dpr; this.cssWidth = Math.round(w); this.cssHeight = Math.round(h); this.width = Math.round(w * dpr); this.height = Math.round(h * dpr); this.redraw = true; if (this.wantFullscreenScalingQuality) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { if ((this.width < this.original_width && this.height < this.original_height) || mode === 1) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { this.draw_width = this.original_width; this.draw_height = this.original_height; this.fullscreenScalingQuality = false; /*var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width;*/ if (mode === 2) // scale inner { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect < orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect > orig_aspect) this.draw_height = this.draw_width / cur_aspect; } else if (mode === 3) { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect > orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect < orig_aspect) this.draw_height = this.draw_width / cur_aspect; } } } if (this.canvasdiv && !this.isDomFree) { jQuery(this.canvasdiv).css({ "width": Math.round(w) + "px", "height": Math.round(h) + "px", "margin-left": Math.floor(offx) + "px", "margin-top": Math.floor(offy) + "px" }); if (typeof cr_is_preview !== "undefined") { jQuery("#borderwrap").css({ "width": Math.round(w) + "px", "height": Math.round(h) + "px" }); } } if (this.canvas) { this.canvas.width = Math.round(w * dpr); this.canvas.height = Math.round(h * dpr); if (this.isEjecta) { this.canvas.style.left = Math.floor(offx) + "px"; this.canvas.style.top = Math.floor(offy) + "px"; this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } else if (this.isRetina && !this.isDomFree) { this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } } if (this.overlay_canvas) { this.overlay_canvas.width = Math.round(w * dpr); this.overlay_canvas.height = Math.round(h * dpr); this.overlay_canvas.style.width = this.cssWidth + "px"; this.overlay_canvas.style.height = this.cssHeight + "px"; } if (this.glwrap) { this.glwrap.setSize(Math.round(w * dpr), Math.round(h * dpr)); } if (this.isDirectCanvas && this.ctx) { this.ctx.width = Math.round(w); this.ctx.height = Math.round(h); } if (this.ctx) { this.setCtxImageSmoothingEnabled(this.ctx, this.linearSampling); } this.tryLockOrientation(); if (this.isiPhone && !this.isCordova) { window.scrollTo(0, 0); } }; Runtime.prototype.tryLockOrientation = function() { if (!this.autoLockOrientation || this.orientations === 0) return; var orientation = "portrait"; if (this.orientations === 2) orientation = "landscape"; try { if (screen["orientation"] && screen["orientation"]["lock"]) screen["orientation"]["lock"](orientation).catch(function() {}); else if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); } catch (e) { if (console && console.warn) console.warn("Failed to lock orientation: ", e); } }; Runtime.prototype.onContextLost = function() { this.glwrap.contextLost(); this.is_WebGL_context_lost = true; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onLostWebGLContext) t.onLostWebGLContext(); } }; Runtime.prototype.onContextRestored = function() { this.is_WebGL_context_lost = false; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onRestoreWebGLContext) t.onRestoreWebGLContext(); } }; Runtime.prototype.positionOverlayCanvas = function() { if (this.isDomFree) return; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isCordova; var overlay_position = isfullscreen ? jQuery(this.canvas).offset() : jQuery(this.canvas).position(); overlay_position.position = "absolute"; jQuery(this.overlay_canvas).css(overlay_position); }; var caf = window["cancelAnimationFrame"] || window["mozCancelAnimationFrame"] || window["webkitCancelAnimationFrame"] || window["msCancelAnimationFrame"] || window["oCancelAnimationFrame"]; Runtime.prototype["setSuspended"] = function(s) { var i, len; var self = this; if (s && !this.isSuspended) { cr.logexport("[Construct 2] Suspending"); this.isSuspended = true; // next tick will be last if (this.raf_id !== -1 && caf) // note: CocoonJS does not implement cancelAnimationFrame caf(this.raf_id); if (this.timeout_id !== -1) clearTimeout(this.timeout_id); for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](true); } else if (!s && this.isSuspended) { cr.logexport("[Construct 2] Resuming"); this.isSuspended = false; this.last_tick_time = cr.performance_now(); // ensure first tick is a zero-dt one this.last_fps_time = cr.performance_now(); // reset FPS counter this.framecount = 0; this.logictime = 0; for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](false); this.tick(false); // kick off runtime again } }; Runtime.prototype.addSuspendCallback = function(f) { this.suspend_events.push(f); }; Runtime.prototype.GetObjectReference = function(i) {; return this.objectRefTable[i]; }; Runtime.prototype.loadProject = function(data_response) {; if (!data_response || !data_response["project"]) cr.logerror("Project model unavailable"); var pm = data_response["project"]; this.name = pm[0]; this.first_layout = pm[1]; this.fullscreen_mode = pm[12]; // 0 = off, 1 = crop, 2 = scale inner, 3 = scale outer, 4 = letterbox scale, 5 = integer letterbox scale this.fullscreen_mode_set = pm[12]; this.original_width = pm[10]; this.original_height = pm[11]; this.parallax_x_origin = this.original_width / 2; this.parallax_y_origin = this.original_height / 2; if (this.isDomFree && !this.isEjecta && (pm[12] >= 4 || pm[12] === 0)) { cr.logexport("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"); this.fullscreen_mode = 3; this.fullscreen_mode_set = 3; } this.uses_loader_layout = pm[18]; this.loaderstyle = pm[19]; if (this.loaderstyle === 0) { var loaderImage = new Image(); loaderImage.crossOrigin = "anonymous"; this.setImageSrc(loaderImage, "loading-logo.png"); this.loaderlogos = { logo: loaderImage }; } else if (this.loaderstyle === 4) // c2 splash { var loaderC2logo_1024 = new Image(); loaderC2logo_1024.src = ""; var loaderC2logo_512 = new Image(); loaderC2logo_512.src = ""; var loaderC2logo_256 = new Image(); loaderC2logo_256.src = ""; var loaderC2logo_128 = new Image(); loaderC2logo_128.src = ""; var loaderPowered_1024 = new Image(); loaderPowered_1024.src = ""; var loaderPowered_512 = new Image(); loaderPowered_512.src = ""; var loaderPowered_256 = new Image(); loaderPowered_256.src = ""; var loaderPowered_128 = new Image(); loaderPowered_128.src = ""; var loaderWebsite_1024 = new Image(); loaderWebsite_1024.src = ""; var loaderWebsite_512 = new Image(); loaderWebsite_512.src = ""; var loaderWebsite_256 = new Image(); loaderWebsite_256.src = ""; var loaderWebsite_128 = new Image(); loaderWebsite_128.src = ""; this.loaderlogos = { logo: [loaderC2logo_1024, loaderC2logo_512, loaderC2logo_256, loaderC2logo_128], powered: [loaderPowered_1024, loaderPowered_512, loaderPowered_256, loaderPowered_128], website: [loaderWebsite_1024, loaderWebsite_512, loaderWebsite_256, loaderWebsite_128] }; } this.next_uid = pm[21]; this.objectRefTable = cr.getObjectRefTable(); this.system = new cr.system_object(this); var i, len, j, lenj, k, lenk, idstr, m, b, t, f, p; var plugin, plugin_ctor; for (i = 0, len = pm[2].length; i < len; i++) { m = pm[2][i]; p = this.GetObjectReference(m[0]);; cr.add_common_aces(m, p.prototype); plugin = new p(this); plugin.singleglobal = m[1]; plugin.is_world = m[2]; plugin.is_rotatable = m[5]; plugin.must_predraw = m[9]; if (plugin.onCreate) plugin.onCreate(); // opportunity to override default ACEs cr.seal(plugin); this.plugins.push(plugin); } this.objectRefTable = cr.getObjectRefTable(); for (i = 0, len = pm[3].length; i < len; i++) { m = pm[3][i]; plugin_ctor = this.GetObjectReference(m[1]);; plugin = null; for (j = 0, lenj = this.plugins.length; j < lenj; j++) { if (this.plugins[j] instanceof plugin_ctor) { plugin = this.plugins[j]; break; } };; var type_inst = new plugin.Type(plugin);; type_inst.name = m[0]; type_inst.is_family = m[2]; type_inst.instvar_sids = m[3].slice(0); type_inst.vars_count = m[3].length; type_inst.behs_count = m[4]; type_inst.fx_count = m[5]; type_inst.sid = m[11]; if (type_inst.is_family) { type_inst.members = []; // types in this family type_inst.family_index = this.family_count++; type_inst.families = null; } else { type_inst.members = null; type_inst.family_index = -1; type_inst.families = []; // families this type belongs to } type_inst.family_var_map = null; type_inst.family_beh_map = null; type_inst.family_fx_map = null; type_inst.is_contained = false; type_inst.container = null; if (m[6]) { type_inst.texture_file = m[6][0]; type_inst.texture_filesize = m[6][1]; type_inst.texture_pixelformat = m[6][2]; } else { type_inst.texture_file = null; type_inst.texture_filesize = 0; type_inst.texture_pixelformat = 0; // rgba8 } if (m[7]) { type_inst.animations = m[7]; } else { type_inst.animations = null; } type_inst.index = i; // save index in to types array in type type_inst.instances = []; // all instances of this type type_inst.deadCache = []; // destroyed instances to recycle next create type_inst.solstack = [new cr.selection(type_inst)]; // initialise SOL stack with one empty SOL type_inst.cur_sol = 0; type_inst.default_instance = null; type_inst.default_layerindex = 0; type_inst.stale_iids = true; type_inst.updateIIDs = cr.type_updateIIDs; type_inst.getFirstPicked = cr.type_getFirstPicked; type_inst.getPairedInstance = cr.type_getPairedInstance; type_inst.getCurrentSol = cr.type_getCurrentSol; type_inst.pushCleanSol = cr.type_pushCleanSol; type_inst.pushCopySol = cr.type_pushCopySol; type_inst.popSol = cr.type_popSol; type_inst.getBehaviorByName = cr.type_getBehaviorByName; type_inst.getBehaviorIndexByName = cr.type_getBehaviorIndexByName; type_inst.getEffectIndexByName = cr.type_getEffectIndexByName; type_inst.applySolToContainer = cr.type_applySolToContainer; type_inst.getInstanceByIID = cr.type_getInstanceByIID; type_inst.collision_grid = new cr.SparseGrid(this.original_width, this.original_height); type_inst.any_cell_changed = true; type_inst.any_instance_parallaxed = false; type_inst.extra = {}; type_inst.toString = cr.type_toString; type_inst.behaviors = []; for (j = 0, lenj = m[8].length; j < lenj; j++) { b = m[8][j]; var behavior_ctor = this.GetObjectReference(b[1]); var behavior_plugin = null; for (k = 0, lenk = this.behaviors.length; k < lenk; k++) { if (this.behaviors[k] instanceof behavior_ctor) { behavior_plugin = this.behaviors[k]; break; } } if (!behavior_plugin) { behavior_plugin = new behavior_ctor(this); behavior_plugin.my_types = []; // types using this behavior behavior_plugin.my_instances = new cr.ObjectSet(); // instances of this behavior if (behavior_plugin.onCreate) behavior_plugin.onCreate(); cr.seal(behavior_plugin); this.behaviors.push(behavior_plugin); if (cr.behaviors.solid && behavior_plugin instanceof cr.behaviors.solid) this.solidBehavior = behavior_plugin; if (cr.behaviors.jumpthru && behavior_plugin instanceof cr.behaviors.jumpthru) this.jumpthruBehavior = behavior_plugin; if (cr.behaviors.shadowcaster && behavior_plugin instanceof cr.behaviors.shadowcaster) this.shadowcasterBehavior = behavior_plugin; } if (behavior_plugin.my_types.indexOf(type_inst) === -1) behavior_plugin.my_types.push(type_inst); var behavior_type = new behavior_plugin.Type(behavior_plugin, type_inst); behavior_type.name = b[0]; behavior_type.sid = b[2]; behavior_type.onCreate(); cr.seal(behavior_type); type_inst.behaviors.push(behavior_type); } type_inst.global = m[9]; type_inst.isOnLoaderLayout = m[10]; type_inst.effect_types = []; for (j = 0, lenj = m[12].length; j < lenj; j++) { type_inst.effect_types.push({ id: m[12][j][0], name: m[12][j][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: j }); } type_inst.tile_poly_data = m[13]; if (!this.uses_loader_layout || type_inst.is_family || type_inst.isOnLoaderLayout || !plugin.is_world) { type_inst.onCreate(); cr.seal(type_inst); } if (type_inst.name) this.types[type_inst.name] = type_inst; this.types_by_index.push(type_inst); if (plugin.singleglobal) { var instance = new plugin.Instance(type_inst); instance.uid = this.next_uid++; instance.puid = this.next_puid++; instance.iid = 0; instance.get_iid = cr.inst_get_iid; instance.toString = cr.inst_toString; instance.properties = m[14]; instance.onCreate(); cr.seal(instance); type_inst.instances.push(instance); this.objectsByUid[instance.uid.toString()] = instance; } } for (i = 0, len = pm[4].length; i < len; i++) { var familydata = pm[4][i]; var familytype = this.types_by_index[familydata[0]]; var familymember; for (j = 1, lenj = familydata.length; j < lenj; j++) { familymember = this.types_by_index[familydata[j]]; familymember.families.push(familytype); familytype.members.push(familymember); } } for (i = 0, len = pm[28].length; i < len; i++) { var containerdata = pm[28][i]; var containertypes = []; for (j = 0, lenj = containerdata.length; j < lenj; j++) containertypes.push(this.types_by_index[containerdata[j]]); for (j = 0, lenj = containertypes.length; j < lenj; j++) { containertypes[j].is_contained = true; containertypes[j].container = containertypes; } } if (this.family_count > 0) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.is_family || !t.families.length) continue; t.family_var_map = new Array(this.family_count); t.family_beh_map = new Array(this.family_count); t.family_fx_map = new Array(this.family_count); var all_fx = []; var varsum = 0; var behsum = 0; var fxsum = 0; for (j = 0, lenj = t.families.length; j < lenj; j++) { f = t.families[j]; t.family_var_map[f.family_index] = varsum; varsum += f.vars_count; t.family_beh_map[f.family_index] = behsum; behsum += f.behs_count; t.family_fx_map[f.family_index] = fxsum; fxsum += f.fx_count; for (k = 0, lenk = f.effect_types.length; k < lenk; k++) all_fx.push(cr.shallowCopy({}, f.effect_types[k])); } t.effect_types = all_fx.concat(t.effect_types); for (j = 0, lenj = t.effect_types.length; j < lenj; j++) t.effect_types[j].index = j; } } for (i = 0, len = pm[5].length; i < len; i++) { m = pm[5][i]; var layout = new cr.layout(this, m); cr.seal(layout); this.layouts[layout.name] = layout; this.layouts_by_index.push(layout); } for (i = 0, len = pm[6].length; i < len; i++) { m = pm[6][i]; var sheet = new cr.eventsheet(this, m); cr.seal(sheet); this.eventsheets[sheet.name] = sheet; this.eventsheets_by_index.push(sheet); } for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].postInit(); for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].updateDeepIncludes(); for (i = 0, len = this.triggers_to_postinit.length; i < len; i++) this.triggers_to_postinit[i].postInit(); cr.clearArray(this.triggers_to_postinit) this.audio_to_preload = pm[7]; this.files_subfolder = pm[8]; this.pixel_rounding = pm[9]; this.aspect_scale = 1.0; this.enableWebGL = pm[13]; this.linearSampling = pm[14]; this.clearBackground = pm[15]; this.versionstr = pm[16]; this.useHighDpi = pm[17]; this.orientations = pm[20]; // 0 = any, 1 = portrait, 2 = landscape this.autoLockOrientation = (this.orientations > 0); this.pauseOnBlur = pm[22]; this.wantFullscreenScalingQuality = pm[23]; // false = low quality, true = high quality this.fullscreenScalingQuality = this.wantFullscreenScalingQuality; this.downscalingQuality = pm[24]; // 0 = low (mips off), 1 = medium (mips on, dense spritesheet), 2 = high (mips on, sparse spritesheet) this.preloadSounds = pm[25]; // 0 = no, 1 = yes this.projectName = pm[26]; this.enableFrontToBack = pm[27] && !this.isIE; // front-to-back renderer disabled in IE (but not Edge) this.start_time = Date.now(); cr.clearArray(this.objectRefTable); this.initRendererAndLoader(); }; var anyImageHadError = false; var MAX_PARALLEL_IMAGE_LOADS = 100; var currentlyActiveImageLoads = 0; var imageLoadQueue = []; // array of [img, srcToSet] Runtime.prototype.queueImageLoad = function(img_, src_) { var self = this; var doneFunc = function() { currentlyActiveImageLoads--; self.maybeLoadNextImages(); }; img_.addEventListener("load", doneFunc); img_.addEventListener("error", doneFunc); imageLoadQueue.push([img_, src_]); this.maybeLoadNextImages(); }; Runtime.prototype.maybeLoadNextImages = function() { var next; while (imageLoadQueue.length && currentlyActiveImageLoads < MAX_PARALLEL_IMAGE_LOADS) { currentlyActiveImageLoads++; next = imageLoadQueue.shift(); this.setImageSrc(next[0], next[1]); } }; Runtime.prototype.waitForImageLoad = function(img_, src_) { img_["cocoonLazyLoad"] = true; img_.onerror = function(e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error loading image '" + img_.src + "': ", e); }; if (this.isEjecta) { img_.src = src_; } else if (!img_.src) { if (typeof XAPKReader !== "undefined") { XAPKReader.get(src_, function(expanded_url) { img_.src = expanded_url; }, function(e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error extracting image '" + src_ + "' from expansion file: ", e); }); } else { img_.crossOrigin = "anonymous"; // required for Arcade sandbox compatibility this.queueImageLoad(img_, src_); // use a queue to avoid requesting all images simultaneously } } this.wait_for_textures.push(img_); }; Runtime.prototype.findWaitingTexture = function(src_) { var i, len; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { if (this.wait_for_textures[i].cr_src === src_) return this.wait_for_textures[i]; } return null; }; var audio_preload_totalsize = 0; var audio_preload_started = false; Runtime.prototype.getready = function() { if (!this.audioInstance) return; audio_preload_totalsize = this.audioInstance.setPreloadList(this.audio_to_preload); }; Runtime.prototype.areAllTexturesAndSoundsLoaded = function() { var totalsize = audio_preload_totalsize; var completedsize = 0; var audiocompletedsize = 0; var ret = true; var i, len, img; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { img = this.wait_for_textures[i]; var filesize = img.cr_filesize; if (!filesize || filesize <= 0) filesize = 50000; totalsize += filesize; if (!!img.src && (img.complete || img["loaded"]) && !img.c2error) completedsize += filesize; else ret = false; // not all textures loaded } if (ret && this.preloadSounds && this.audioInstance) { if (!audio_preload_started) { this.audioInstance.startPreloads(); audio_preload_started = true; } audiocompletedsize = this.audioInstance.getPreloadedSize(); completedsize += audiocompletedsize; if (audiocompletedsize < audio_preload_totalsize) ret = false; // not done yet } if (totalsize == 0) this.progress = 1; // indicate to C2 splash loader that it can finish now else this.progress = (completedsize / totalsize); return ret; }; var isC2SplashDone = false; Runtime.prototype.go = function() { if (!this.ctx && !this.glwrap) return; var ctx = this.ctx || this.overlay_ctx; if (this.overlay_canvas) this.positionOverlayCanvas(); var curwidth = window.innerWidth; var curheight = window.innerHeight; if (this.lastWindowWidth !== curwidth || this.lastWindowHeight !== curheight) { this["setSize"](curwidth, curheight); } this.progress = 0; this.last_progress = -1; var self = this; if (this.areAllTexturesAndSoundsLoaded() && (this.loaderstyle !== 4 || isC2SplashDone)) { this.go_loading_finished(); } else { var ms_elapsed = Date.now() - this.start_time; if (ctx) { var overlay_width = this.width; var overlay_height = this.height; var dpr = this.devicePixelRatio; if (this.loaderstyle < 3 && (this.isCocoonJs || (ms_elapsed >= 500 && this.last_progress != this.progress))) { ctx.clearRect(0, 0, overlay_width, overlay_height); var mx = overlay_width / 2; var my = overlay_height / 2; var haslogo = (this.loaderstyle === 0 && this.loaderlogos.logo.complete); var hlw = 40 * dpr; var hlh = 0; var logowidth = 80 * dpr; var logoheight; if (haslogo) { var loaderLogoImage = this.loaderlogos.logo; logowidth = loaderLogoImage.width * dpr; logoheight = loaderLogoImage.height * dpr; hlw = logowidth / 2; hlh = logoheight / 2; ctx.drawImage(loaderLogoImage, cr.floor(mx - hlw), cr.floor(my - hlh), logowidth, logoheight); } if (this.loaderstyle <= 1) { my += hlh + (haslogo ? 12 * dpr : 0); mx -= hlw; mx = cr.floor(mx) + 0.5; my = cr.floor(my) + 0.5; ctx.fillStyle = anyImageHadError ? "red" : "DodgerBlue"; ctx.fillRect(mx, my, Math.floor(logowidth * this.progress), 6 * dpr); ctx.strokeStyle = "black"; ctx.strokeRect(mx, my, logowidth, 6 * dpr); ctx.strokeStyle = "white"; ctx.strokeRect(mx - 1 * dpr, my - 1 * dpr, logowidth + 2 * dpr, 8 * dpr); } else if (this.loaderstyle === 2) { ctx.font = (this.isEjecta ? "12pt ArialMT" : "12pt Arial"); ctx.fillStyle = anyImageHadError ? "#f00" : "#999"; ctx.textBaseLine = "middle"; var percent_text = Math.round(this.progress * 100) + "%"; var text_dim = ctx.measureText ? ctx.measureText(percent_text) : null; var text_width = text_dim ? text_dim.width : 0; ctx.fillText(percent_text, mx - (text_width / 2), my); } this.last_progress = this.progress; } else if (this.loaderstyle === 4) { this.draw_c2_splash_loader(ctx); if (raf) raf(function() { self.go(); }); else setTimeout(function() { self.go(); }, 16); return; } } setTimeout(function() { self.go(); }, (this.isCocoonJs ? 10 : 100)); } }; var splashStartTime = -1; var splashFadeInDuration = 300; var splashFadeOutDuration = 300; var splashAfterFadeOutWait = (typeof cr_is_preview === "undefined" ? 200 : 0); var splashIsFadeIn = true; var splashIsFadeOut = false; var splashFadeInFinish = 0; var splashFadeOutStart = 0; var splashMinDisplayTime = (typeof cr_is_preview === "undefined" ? 3000 : 0); var renderViaCanvas = null; var renderViaCtx = null; var splashFrameNumber = 0; function maybeCreateRenderViaCanvas(w, h) { if (!renderViaCanvas || renderViaCanvas.width !== w || renderViaCanvas.height !== h) { renderViaCanvas = document.createElement("canvas"); renderViaCanvas.width = w; renderViaCanvas.height = h; renderViaCtx = renderViaCanvas.getContext("2d"); } }; function mipImage(arr, size) { if (size <= 128) return arr[3]; else if (size <= 256) return arr[2]; else if (size <= 512) return arr[1]; else return arr[0]; }; Runtime.prototype.draw_c2_splash_loader = function(ctx) { if (isC2SplashDone) return; var w = Math.ceil(this.width); var h = Math.ceil(this.height); var dpr = this.devicePixelRatio; var logoimages = this.loaderlogos.logo; var poweredimages = this.loaderlogos.powered; var websiteimages = this.loaderlogos.website; for (var i = 0; i < 4; ++i) { if (!logoimages[i].complete || !poweredimages[i].complete || !websiteimages[i].complete) return; } if (splashFrameNumber === 0) splashStartTime = Date.now(); var nowTime = Date.now(); var isRenderingVia = false; var renderToCtx = ctx; var drawW, drawH; if (splashIsFadeIn || splashIsFadeOut) { ctx.clearRect(0, 0, w, h); maybeCreateRenderViaCanvas(w, h); renderToCtx = renderViaCtx; isRenderingVia = true; if (splashIsFadeIn && splashFrameNumber === 1) splashStartTime = Date.now(); } else { ctx.globalAlpha = 1; } renderToCtx.fillStyle = "#333333"; renderToCtx.fillRect(0, 0, w, h); if (this.cssHeight > 256) { drawW = cr.clamp(h * 0.22, 105, w * 0.6); drawH = drawW * 0.25; renderToCtx.drawImage(mipImage(poweredimages, drawW), w * 0.5 - drawW / 2, h * 0.2 - drawH / 2, drawW, drawH); drawW = Math.min(h * 0.395, w * 0.95); drawH = drawW; renderToCtx.drawImage(mipImage(logoimages, drawW), w * 0.5 - drawW / 2, h * 0.485 - drawH / 2, drawW, drawH); drawW = cr.clamp(h * 0.22, 105, w * 0.6); drawH = drawW * 0.25; renderToCtx.drawImage(mipImage(websiteimages, drawW), w * 0.5 - drawW / 2, h * 0.868 - drawH / 2, drawW, drawH); renderToCtx.fillStyle = "#3C3C3C"; drawW = w; drawH = Math.max(h * 0.005, 2); renderToCtx.fillRect(0, h * 0.8 - drawH / 2, drawW, drawH); renderToCtx.fillStyle = anyImageHadError ? "red" : "#E0FF65"; drawW = w * this.progress; renderToCtx.fillRect(w * 0.5 - drawW / 2, h * 0.8 - drawH / 2, drawW, drawH); } else { drawW = h * 0.55; drawH = drawW; renderToCtx.drawImage(mipImage(logoimages, drawW), w * 0.5 - drawW / 2, h * 0.45 - drawH / 2, drawW, drawH); renderToCtx.fillStyle = "#3C3C3C"; drawW = w; drawH = Math.max(h * 0.005, 2); renderToCtx.fillRect(0, h * 0.85 - drawH / 2, drawW, drawH); renderToCtx.fillStyle = anyImageHadError ? "red" : "#E0FF65"; drawW = w * this.progress; renderToCtx.fillRect(w * 0.5 - drawW / 2, h * 0.85 - drawH / 2, drawW, drawH); } if (isRenderingVia) { if (splashIsFadeIn) { if (splashFrameNumber === 0) ctx.globalAlpha = 0; else ctx.globalAlpha = Math.min((nowTime - splashStartTime) / splashFadeInDuration, 1); } else if (splashIsFadeOut) { ctx.globalAlpha = Math.max(1 - (nowTime - splashFadeOutStart) / splashFadeOutDuration, 0); } ctx.drawImage(renderViaCanvas, 0, 0, w, h); } if (splashIsFadeIn && nowTime - splashStartTime >= splashFadeInDuration && splashFrameNumber >= 2) { splashIsFadeIn = false; splashFadeInFinish = nowTime; } if (!splashIsFadeIn && nowTime - splashFadeInFinish >= splashMinDisplayTime && !splashIsFadeOut && this.progress >= 1) { splashIsFadeOut = true; splashFadeOutStart = nowTime; } if ((splashIsFadeOut && nowTime - splashFadeOutStart >= splashFadeOutDuration + splashAfterFadeOutWait) || (typeof cr_is_preview !== "undefined" && this.progress >= 1 && Date.now() - splashStartTime < 500)) { isC2SplashDone = true; splashIsFadeIn = false; splashIsFadeOut = false; renderViaCanvas = null; renderViaCtx = null; this.loaderlogos = null; } ++splashFrameNumber; }; Runtime.prototype.go_loading_finished = function() { if (this.overlay_canvas) { this.canvas.parentNode.removeChild(this.overlay_canvas); this.overlay_ctx = null; this.overlay_canvas = null; } this.start_time = Date.now(); this.last_fps_time = cr.performance_now(); // for counting framerate var i, len, t; if (this.uses_loader_layout) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (!t.is_family && !t.isOnLoaderLayout && t.plugin.is_world) { t.onCreate(); cr.seal(t); } } } else this.isloading = false; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { this.layouts_by_index[i].createGlobalNonWorlds(); } if (this.fullscreen_mode >= 2) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width; } if (this.first_layout) this.layouts[this.first_layout].startRunning(); else this.layouts_by_index[0].startRunning();; if (!this.uses_loader_layout) { this.loadingprogress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); if (window["C2_RegisterSW"]) // note not all platforms use SW window["C2_RegisterSW"](); } if (navigator["splashscreen"] && navigator["splashscreen"]["hide"]) navigator["splashscreen"]["hide"](); for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onAppBegin) t.onAppBegin(); } if (document["hidden"] || document["webkitHidden"] || document["mozHidden"] || document["msHidden"]) { window["cr_setSuspended"](true); // stop rendering } else { this.tick(false); } if (this.isDirectCanvas) AppMobi["webview"]["execute"]("onGameReady();"); }; Runtime.prototype.tick = function(background_wake, timestamp, debug_step) { if (!this.running_layout) return; var nowtime = cr.performance_now(); var logic_start = nowtime; if (!debug_step && this.isSuspended && !background_wake) return; if (!background_wake) { if (raf) this.raf_id = raf(this.tickFunc); else { this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16); } } var raf_time = timestamp || nowtime; var fsmode = this.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"]) && !this.isCordova; if ((isfullscreen || this.isNodeFullscreen) && this.fullscreen_scaling > 0) fsmode = this.fullscreen_scaling; if (fsmode > 0) // r222: experimentally enabling this workaround for all platforms { var curwidth = window.innerWidth; var curheight = window.innerHeight; if (this.lastWindowWidth !== curwidth || this.lastWindowHeight !== curheight) { this["setSize"](curwidth, curheight); } } if (!this.isDomFree) { if (isfullscreen) { if (!this.firstInFullscreen) this.firstInFullscreen = true; } else { if (this.firstInFullscreen) { this.firstInFullscreen = false; if (this.fullscreen_mode === 0) { this["setSize"](Math.round(this.oldWidth / this.devicePixelRatio), Math.round(this.oldHeight / this.devicePixelRatio), true); } } else { this.oldWidth = this.width; this.oldHeight = this.height; } } } if (this.isloading) { var done = this.areAllTexturesAndSoundsLoaded(); // updates this.progress this.loadingprogress = this.progress; if (done) { this.isloading = false; this.progress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); if (window["C2_RegisterSW"]) window["C2_RegisterSW"](); } } this.logic(raf_time); if ((this.redraw || this.isCocoonJs) && !this.is_WebGL_context_lost && !this.suspendDrawing && !background_wake) { this.redraw = false; if (this.glwrap) this.drawGL(); else this.draw(); if (this.snapshotCanvas) { if (this.canvas && this.canvas.toDataURL) { this.snapshotData = this.canvas.toDataURL(this.snapshotCanvas[0], this.snapshotCanvas[1]); if (window["cr_onSnapshot"]) window["cr_onSnapshot"](this.snapshotData); this.trigger(cr.system_object.prototype.cnds.OnCanvasSnapshot, null); } this.snapshotCanvas = null; } } if (!this.hit_breakpoint) { this.tickcount++; this.tickcount_nosave++; this.execcount++; this.framecount++; } this.logictime += cr.performance_now() - logic_start; }; Runtime.prototype.logic = function(cur_time) { var i, leni, j, lenj, k, lenk, type, inst, binst; if (cur_time - this.last_fps_time >= 1000) // every 1 second { this.last_fps_time += 1000; if (cur_time - this.last_fps_time >= 1000) this.last_fps_time = cur_time; this.fps = this.framecount; this.framecount = 0; this.cpuutilisation = this.logictime; this.logictime = 0; } var wallDt = 0; if (this.last_tick_time !== 0) { var ms_diff = cur_time - this.last_tick_time; if (ms_diff < 0) ms_diff = 0; wallDt = ms_diff / 1000.0; // dt measured in seconds this.dt1 = wallDt; if (this.dt1 > 0.5) this.dt1 = 0; else if (this.dt1 > 1 / this.minimumFramerate) this.dt1 = 1 / this.minimumFramerate; } this.last_tick_time = cur_time; this.dt = this.dt1 * this.timescale; this.kahanTime.add(this.dt); this.wallTime.add(wallDt); // prevent min/max framerate affecting wall clock var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isCordova; if (this.fullscreen_mode >= 2 /* scale */ || (isfullscreen && this.fullscreen_scaling > 0)) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; var mode = this.fullscreen_mode; if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; if ((mode !== 2 && cur_aspect > orig_aspect) || (mode === 2 && cur_aspect < orig_aspect)) { this.aspect_scale = this.height / this.original_height; } else { this.aspect_scale = this.width / this.original_width; } if (this.running_layout) { this.running_layout.scrollToX(this.running_layout.scrollX); this.running_layout.scrollToY(this.running_layout.scrollY); } } else this.aspect_scale = (this.isRetina ? this.devicePixelRatio : 1); this.ClearDeathRow(); this.isInOnDestroy++; this.system.runWaits(); // prevent instance list changing this.isInOnDestroy--; this.ClearDeathRow(); // allow instance list changing this.isInOnDestroy++; var tickarr = this.objects_to_pretick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].pretick(); for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { inst.behavior_insts[k].tick(); } } } for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.posttick) binst.posttick(); } } } tickarr = this.objects_to_tick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick(); this.isInOnDestroy--; // end preventing instance lists from being changed this.handleSaveLoad(); // save/load now if queued i = 0; while (this.changelayout && i++ < 10) { this.doChangeLayout(this.changelayout); } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) this.eventsheets_by_index[i].hasRun = false; if (this.running_layout.event_sheet) this.running_layout.event_sheet.run(); cr.clearArray(this.registered_collisions); this.layout_first_tick = false; this.isInOnDestroy++; // prevent instance lists from being changed for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { var inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.tick2) binst.tick2(); } } } tickarr = this.objects_to_tick2.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick2(); this.isInOnDestroy--; // end preventing instance lists from being changed }; Runtime.prototype.onWindowBlur = function() { var i, leni, j, lenj, k, lenk, type, inst, binst; for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (inst.onWindowBlur) inst.onWindowBlur(); if (!inst.behavior_insts) continue; // single-globals don't have behavior_insts for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.onWindowBlur) binst.onWindowBlur(); } } } }; Runtime.prototype.doChangeLayout = function(changeToLayout) { var prev_layout = this.running_layout; this.running_layout.stopRunning(); var i, len, j, lenj, k, lenk, type, inst, binst; if (this.glwrap) { for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; if (type.unloadTextures && (!type.global || type.instances.length === 0) && changeToLayout.initial_types.indexOf(type) === -1) { type.unloadTextures(); } } } if (prev_layout == changeToLayout) cr.clearArray(this.system.waits); cr.clearArray(this.registered_collisions); this.runLayoutChangeMethods(true); changeToLayout.startRunning(); this.runLayoutChangeMethods(false); this.redraw = true; this.layout_first_tick = true; this.ClearDeathRow(); }; Runtime.prototype.runLayoutChangeMethods = function(isBeforeChange) { var i, len, beh, type, j, lenj, inst, k, lenk, binst; for (i = 0, len = this.behaviors.length; i < len; i++) { beh = this.behaviors[i]; if (isBeforeChange) { if (beh.onBeforeLayoutChange) beh.onBeforeLayoutChange(); } else { if (beh.onLayoutChange) beh.onLayoutChange(); } } for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (!type.global && !type.plugin.singleglobal) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (isBeforeChange) { if (inst.onBeforeLayoutChange) inst.onBeforeLayoutChange(); } else { if (inst.onLayoutChange) inst.onLayoutChange(); } if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (isBeforeChange) { if (binst.onBeforeLayoutChange) binst.onBeforeLayoutChange(); } else { if (binst.onLayoutChange) binst.onLayoutChange(); } } } } } }; Runtime.prototype.pretickMe = function(inst) { this.objects_to_pretick.add(inst); }; Runtime.prototype.unpretickMe = function(inst) { this.objects_to_pretick.remove(inst); }; Runtime.prototype.tickMe = function(inst) { this.objects_to_tick.add(inst); }; Runtime.prototype.untickMe = function(inst) { this.objects_to_tick.remove(inst); }; Runtime.prototype.tick2Me = function(inst) { this.objects_to_tick2.add(inst); }; Runtime.prototype.untick2Me = function(inst) { this.objects_to_tick2.remove(inst); }; Runtime.prototype.getDt = function(inst) { if (!inst || inst.my_timescale === -1.0) return this.dt; return this.dt1 * inst.my_timescale; }; Runtime.prototype.draw = function() { this.running_layout.draw(this.ctx); if (this.isDirectCanvas) this.ctx["present"](); }; Runtime.prototype.drawGL = function() { if (this.enableFrontToBack) { this.earlyz_index = 1; // start from front, 1-based to avoid exactly equalling near plane Z value this.running_layout.drawGL_earlyZPass(this.glwrap); } this.running_layout.drawGL(this.glwrap); this.glwrap.present(); }; Runtime.prototype.addDestroyCallback = function(f) { if (f) this.destroycallbacks.push(f); }; Runtime.prototype.removeDestroyCallback = function(f) { cr.arrayFindRemove(this.destroycallbacks, f); }; Runtime.prototype.getObjectByUID = function(uid_) {; var uidstr = uid_.toString(); if (this.objectsByUid.hasOwnProperty(uidstr)) return this.objectsByUid[uidstr]; else return null; }; var objectset_cache = []; function alloc_objectset() { if (objectset_cache.length) return objectset_cache.pop(); else return new cr.ObjectSet(); }; function free_objectset(s) { s.clear(); objectset_cache.push(s); }; Runtime.prototype.DestroyInstance = function(inst) { var i, len; var type = inst.type; var typename = type.name; var has_typename = this.deathRow.hasOwnProperty(typename); var obj_set = null; if (has_typename) { obj_set = this.deathRow[typename]; if (obj_set.contains(inst)) return; // already had DestroyInstance called } else { obj_set = alloc_objectset(); this.deathRow[typename] = obj_set; } obj_set.add(inst); this.hasPendingInstances = true; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { this.DestroyInstance(inst.siblings[i]); } } if (this.isInClearDeathRow) obj_set.values_cache.push(inst); if (!this.isEndingLayout) { this.isInOnDestroy++; // support recursion this.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnDestroyed, inst); this.isInOnDestroy--; } }; Runtime.prototype.ClearDeathRow = function() { if (!this.hasPendingInstances) return; var inst, type, instances; var i, j, leni, lenj, obj_set; this.isInClearDeathRow = true; for (i = 0, leni = this.createRow.length; i < leni; ++i) { inst = this.createRow[i]; type = inst.type; type.instances.push(inst); for (j = 0, lenj = type.families.length; j < lenj; ++j) { type.families[j].instances.push(inst); type.families[j].stale_iids = true; } } cr.clearArray(this.createRow); this.IterateDeathRow(); // moved to separate function so for-in performance doesn't hobble entire function cr.wipe(this.deathRow); // all objectsets have already been recycled this.isInClearDeathRow = false; this.hasPendingInstances = false; }; Runtime.prototype.IterateDeathRow = function() { for (var p in this.deathRow) { if (this.deathRow.hasOwnProperty(p)) { this.ClearDeathRowForType(this.deathRow[p]); } } }; Runtime.prototype.ClearDeathRowForType = function(obj_set) { var arr = obj_set.valuesRef(); // get array of items from set ; var type = arr[0].type;;; var i, len, j, lenj, w, f, layer_instances, inst; cr.arrayRemoveAllFromObjectSet(type.instances, obj_set); type.stale_iids = true; if (type.instances.length === 0) type.any_instance_parallaxed = false; for (i = 0, len = type.families.length; i < len; ++i) { f = type.families[i]; cr.arrayRemoveAllFromObjectSet(f.instances, obj_set); f.stale_iids = true; } for (i = 0, len = this.system.waits.length; i < len; ++i) { w = this.system.waits[i]; if (w.sols.hasOwnProperty(type.index)) cr.arrayRemoveAllFromObjectSet(w.sols[type.index].insts, obj_set); if (!type.is_family) { for (j = 0, lenj = type.families.length; j < lenj; ++j) { f = type.families[j]; if (w.sols.hasOwnProperty(f.index)) cr.arrayRemoveAllFromObjectSet(w.sols[f.index].insts, obj_set); } } } var first_layer = arr[0].layer; if (first_layer) { if (first_layer.useRenderCells) { layer_instances = first_layer.instances; for (i = 0, len = layer_instances.length; i < len; ++i) { inst = layer_instances[i]; if (!obj_set.contains(inst)) continue; // not destroying this instance inst.update_bbox(); first_layer.render_grid.update(inst, inst.rendercells, null); inst.rendercells.set(0, 0, -1, -1); } } cr.arrayRemoveAllFromObjectSet(first_layer.instances, obj_set); first_layer.setZIndicesStaleFrom(0); } for (i = 0; i < arr.length; ++i) // check array length every time in case it changes { this.ClearDeathRowForSingleInstance(arr[i], type); } free_objectset(obj_set); this.redraw = true; }; Runtime.prototype.ClearDeathRowForSingleInstance = function(inst, type) { var i, len, binst; for (i = 0, len = this.destroycallbacks.length; i < len; ++i) this.destroycallbacks[i](inst); if (inst.collcells) { type.collision_grid.update(inst, inst.collcells, null); } var layer = inst.layer; if (layer) { layer.removeFromInstanceList(inst, true); // remove from both instance list and render grid } if (inst.behavior_insts) { for (i = 0, len = inst.behavior_insts.length; i < len; ++i) { binst = inst.behavior_insts[i]; if (binst.onDestroy) binst.onDestroy(); binst.behavior.my_instances.remove(inst); } } this.objects_to_pretick.remove(inst); this.objects_to_tick.remove(inst); this.objects_to_tick2.remove(inst); if (inst.onDestroy) inst.onDestroy(); if (this.objectsByUid.hasOwnProperty(inst.uid.toString())) delete this.objectsByUid[inst.uid.toString()]; this.objectcount--; if (type.deadCache.length < 100) type.deadCache.push(inst); }; Runtime.prototype.createInstance = function(type, layer, sx, sy) { if (type.is_family) { var i = cr.floor(Math.random() * type.members.length); return this.createInstance(type.members[i], layer, sx, sy); } if (!type.default_instance) { return null; } return this.createInstanceFromInit(type.default_instance, layer, false, sx, sy, false); }; var all_behaviors = []; Runtime.prototype.createInstanceFromInit = function(initial_inst, layer, is_startup_instance, sx, sy, skip_siblings) { var i, len, j, lenj, p, effect_fallback, x, y; if (!initial_inst) return null; var type = this.types_by_index[initial_inst[1]];;; var is_world = type.plugin.is_world;; if (this.isloading && is_world && !type.isOnLoaderLayout) return null; if (is_world && !this.glwrap && initial_inst[0][11] === 11) return null; var original_layer = layer; if (!is_world) layer = null; var inst; if (type.deadCache.length) { inst = type.deadCache.pop(); inst.recycled = true; type.plugin.Instance.call(inst, type); } else { inst = new type.plugin.Instance(type); inst.recycled = false; } if (is_startup_instance && !skip_siblings && !this.objectsByUid.hasOwnProperty(initial_inst[2].toString())) inst.uid = initial_inst[2]; else inst.uid = this.next_uid++; this.objectsByUid[inst.uid.toString()] = inst; inst.puid = this.next_puid++; inst.iid = type.instances.length; for (i = 0, len = this.createRow.length; i < len; ++i) { if (this.createRow[i].type === type) inst.iid++; } inst.get_iid = cr.inst_get_iid; inst.toString = cr.inst_toString; var initial_vars = initial_inst[3]; if (inst.recycled) { cr.wipe(inst.extra); } else { inst.extra = {}; if (typeof cr_is_preview !== "undefined") { inst.instance_var_names = []; inst.instance_var_names.length = initial_vars.length; for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_var_names[i] = initial_vars[i][1]; } inst.instance_vars = []; inst.instance_vars.length = initial_vars.length; } for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_vars[i] = initial_vars[i][0]; if (is_world) { var wm = initial_inst[0];; inst.x = cr.is_undefined(sx) ? wm[0] : sx; inst.y = cr.is_undefined(sy) ? wm[1] : sy; inst.z = wm[2]; inst.width = wm[3]; inst.height = wm[4]; inst.depth = wm[5]; inst.angle = wm[6]; inst.opacity = wm[7]; inst.hotspotX = wm[8]; inst.hotspotY = wm[9]; inst.blend_mode = wm[10]; effect_fallback = wm[11]; if (!this.glwrap && type.effect_types.length) // no WebGL renderer and shaders used inst.blend_mode = effect_fallback; // use fallback blend mode - destroy mode was handled above inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); if (inst.recycled) { for (i = 0, len = wm[12].length; i < len; i++) { for (j = 0, lenj = wm[12][i].length; j < lenj; j++) inst.effect_params[i][j] = wm[12][i][j]; } inst.bbox.set(0, 0, 0, 0); inst.collcells.set(0, 0, -1, -1); inst.rendercells.set(0, 0, -1, -1); inst.bquad.set_from_rect(inst.bbox); cr.clearArray(inst.bbox_changed_callbacks); } else { inst.effect_params = wm[12].slice(0); for (i = 0, len = inst.effect_params.length; i < len; i++) inst.effect_params[i] = wm[12][i].slice(0); inst.active_effect_types = []; inst.active_effect_flags = []; inst.active_effect_flags.length = type.effect_types.length; inst.bbox = new cr.rect(0, 0, 0, 0); inst.collcells = new cr.rect(0, 0, -1, -1); inst.rendercells = new cr.rect(0, 0, -1, -1); inst.bquad = new cr.quad(); inst.bbox_changed_callbacks = []; inst.set_bbox_changed = cr.set_bbox_changed; inst.add_bbox_changed_callback = cr.add_bbox_changed_callback; inst.contains_pt = cr.inst_contains_pt; inst.update_bbox = cr.update_bbox; inst.update_render_cell = cr.update_render_cell; inst.update_collision_cell = cr.update_collision_cell; inst.get_zindex = cr.inst_get_zindex; } inst.tilemap_exists = false; inst.tilemap_width = 0; inst.tilemap_height = 0; inst.tilemap_data = null; if (wm.length === 14) { inst.tilemap_exists = true; inst.tilemap_width = wm[13][0]; inst.tilemap_height = wm[13][1]; inst.tilemap_data = wm[13][2]; } for (i = 0, len = type.effect_types.length; i < len; i++) inst.active_effect_flags[i] = true; inst.shaders_preserve_opaqueness = true; inst.updateActiveEffects = cr.inst_updateActiveEffects; inst.updateActiveEffects(); inst.uses_shaders = !!inst.active_effect_types.length; inst.bbox_changed = true; inst.cell_changed = true; type.any_cell_changed = true; inst.visible = true; inst.my_timescale = -1.0; inst.layer = layer; inst.zindex = layer.instances.length; // will be placed at top of current layer inst.earlyz_index = 0; if (typeof inst.collision_poly === "undefined") inst.collision_poly = null; inst.collisionsEnabled = true; this.redraw = true; } var initial_props, binst; cr.clearArray(all_behaviors); for (i = 0, len = type.families.length; i < len; i++) { all_behaviors.push.apply(all_behaviors, type.families[i].behaviors); } all_behaviors.push.apply(all_behaviors, type.behaviors); if (inst.recycled) { for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; binst = inst.behavior_insts[i]; binst.recycled = true; btype.behavior.Instance.call(binst, btype, inst); initial_props = initial_inst[4][i]; for (j = 0, lenj = initial_props.length; j < lenj; j++) binst.properties[j] = initial_props[j]; binst.onCreate(); btype.behavior.my_instances.add(inst); } } else { inst.behavior_insts = []; for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; var binst = new btype.behavior.Instance(btype, inst); binst.recycled = false; binst.properties = initial_inst[4][i].slice(0); binst.onCreate(); cr.seal(binst); inst.behavior_insts.push(binst); btype.behavior.my_instances.add(inst); } } initial_props = initial_inst[5]; if (inst.recycled) { for (i = 0, len = initial_props.length; i < len; i++) inst.properties[i] = initial_props[i]; } else inst.properties = initial_props.slice(0); this.createRow.push(inst); this.hasPendingInstances = true; if (layer) {; layer.appendToInstanceList(inst, true); if (layer.parallaxX !== 1 || layer.parallaxY !== 1) type.any_instance_parallaxed = true; } this.objectcount++; if (type.is_contained) { inst.is_contained = true; if (inst.recycled) cr.clearArray(inst.siblings); else inst.siblings = []; // note: should not include self in siblings if (!is_startup_instance && !skip_siblings) // layout links initial instances { for (i = 0, len = type.container.length; i < len; i++) { if (type.container[i] === type) continue; if (!type.container[i].default_instance) { return null; } inst.siblings.push(this.createInstanceFromInit(type.container[i].default_instance, original_layer, false, is_world ? inst.x : sx, is_world ? inst.y : sy, true)); } for (i = 0, len = inst.siblings.length; i < len; i++) { inst.siblings[i].siblings.push(inst); for (j = 0; j < len; j++) { if (i !== j) inst.siblings[i].siblings.push(inst.siblings[j]); } } } } else { inst.is_contained = false; inst.siblings = null; } inst.onCreate(); if (!inst.recycled) cr.seal(inst); for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].postCreate) inst.behavior_insts[i].postCreate(); } return inst; }; Runtime.prototype.getLayerByName = function(layer_name) { var i, len; for (i = 0, len = this.running_layout.layers.length; i < len; i++) { var layer = this.running_layout.layers[i]; if (cr.equals_nocase(layer.name, layer_name)) return layer; } return null; }; Runtime.prototype.getLayerByNumber = function(index) { index = cr.floor(index); if (index < 0) index = 0; if (index >= this.running_layout.layers.length) index = this.running_layout.layers.length - 1; return this.running_layout.layers[index]; }; Runtime.prototype.getLayer = function(l) { if (cr.is_number(l)) return this.getLayerByNumber(l); else return this.getLayerByName(l.toString()); }; Runtime.prototype.clearSol = function(solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].getCurrentSol().select_all = true; } }; Runtime.prototype.pushCleanSol = function(solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCleanSol(); } }; Runtime.prototype.pushCopySol = function(solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCopySol(); } }; Runtime.prototype.popSol = function(solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].popSol(); } }; Runtime.prototype.updateAllCells = function(type) { if (!type.any_cell_changed) return; // all instances must already be up-to-date var i, len, instances = type.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].update_collision_cell(); } var createRow = this.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === type) createRow[i].update_collision_cell(); } type.any_cell_changed = false; }; Runtime.prototype.getCollisionCandidates = function(layer, rtype, bbox, candidates) { var i, len, t; var is_parallaxed = (layer ? (layer.parallaxX !== 1 || layer.parallaxY !== 1) : false); if (rtype.is_family) { for (i = 0, len = rtype.members.length; i < len; ++i) { t = rtype.members[i]; if (is_parallaxed || t.any_instance_parallaxed) { cr.appendArray(candidates, t.instances); } else { this.updateAllCells(t); t.collision_grid.queryRange(bbox, candidates); } } } else { if (is_parallaxed || rtype.any_instance_parallaxed) { cr.appendArray(candidates, rtype.instances); } else { this.updateAllCells(rtype); rtype.collision_grid.queryRange(bbox, candidates); } } }; Runtime.prototype.getTypesCollisionCandidates = function(layer, types, bbox, candidates) { var i, len; for (i = 0, len = types.length; i < len; ++i) { this.getCollisionCandidates(layer, types[i], bbox, candidates); } }; Runtime.prototype.getSolidCollisionCandidates = function(layer, bbox, candidates) { var solid = this.getSolidBehavior(); if (!solid) return null; this.getTypesCollisionCandidates(layer, solid.my_types, bbox, candidates); }; Runtime.prototype.getJumpthruCollisionCandidates = function(layer, bbox, candidates) { var jumpthru = this.getJumpthruBehavior(); if (!jumpthru) return null; this.getTypesCollisionCandidates(layer, jumpthru.my_types, bbox, candidates); }; Runtime.prototype.testAndSelectCanvasPointOverlap = function(type, ptx, pty, inverted) { var sol = type.getCurrentSol(); var i, j, inst, len; var orblock = this.getCurrentEventStack().current_event.orblock; var lx, ly, arr; if (sol.select_all) { if (!inverted) { sol.select_all = false; cr.clearArray(sol.instances); // clear contents } for (i = 0, len = type.instances.length; i < len; i++) { inst = type.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else sol.instances.push(inst); } else if (orblock) sol.else_instances.push(inst); } } else { j = 0; arr = (orblock ? sol.else_instances : sol.instances); for (i = 0, len = arr.length; i < len; i++) { inst = arr[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else if (orblock) sol.instances.push(inst); else { sol.instances[j] = sol.instances[i]; j++; } } } if (!inverted) arr.length = j; } type.applySolToContainer(); if (inverted) return true; // did not find anything overlapping else return sol.hasObjects(); }; Runtime.prototype.testOverlap = function(a, b) { if (!a || !b || a === b || !a.collisionsEnabled || !b.collisionsEnabled) return false; a.update_bbox(); b.update_bbox(); var layera = a.layer; var layerb = b.layer; var different_layers = (layera !== layerb && (layera.parallaxX !== layerb.parallaxX || layerb.parallaxY !== layerb.parallaxY || layera.scale !== layerb.scale || layera.angle !== layerb.angle || layera.zoomRate !== layerb.zoomRate)); var i, len, i2, i21, x, y, haspolya, haspolyb, polya, polyb; if (!different_layers) // same layers: easy check { if (!a.bbox.intersects_rect(b.bbox)) return false; if (!a.bquad.intersects_quad(b.bquad)) return false; if (a.tilemap_exists && b.tilemap_exists) return false; if (a.tilemap_exists) return this.testTilemapOverlap(a, b); if (b.tilemap_exists) return this.testTilemapOverlap(b, a); haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolya && !haspolyb) return true; if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); polya = a.collision_poly; } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); polya = this.temp_poly; } if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); polyb = b.collision_poly; } else { this.temp_poly.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); polyb = this.temp_poly; } return polya.intersects_poly(polyb, b.x - a.x, b.y - a.y); } else // different layers: need to do full translated check { haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); this.temp_poly.set_from_poly(a.collision_poly); } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); } polya = this.temp_poly; if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); this.temp_poly2.set_from_poly(b.collision_poly); } else { this.temp_poly2.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); } polyb = this.temp_poly2; for (i = 0, len = polya.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polya.pts_cache[i2]; y = polya.pts_cache[i21]; polya.pts_cache[i2] = layera.layerToCanvas(x + a.x, y + a.y, true); polya.pts_cache[i21] = layera.layerToCanvas(x + a.x, y + a.y, false); } polya.update_bbox(); for (i = 0, len = polyb.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polyb.pts_cache[i2]; y = polyb.pts_cache[i21]; polyb.pts_cache[i2] = layerb.layerToCanvas(x + b.x, y + b.y, true); polyb.pts_cache[i21] = layerb.layerToCanvas(x + b.x, y + b.y, false); } polyb.update_bbox(); return polya.intersects_poly(polyb, 0, 0); } }; var tmpQuad = new cr.quad(); var tmpRect = new cr.rect(0, 0, 0, 0); var collrect_candidates = []; Runtime.prototype.testTilemapOverlap = function(tm, a) { var i, len, c, rc; var bbox = a.bbox; var tmx = tm.x; var tmy = tm.y; tm.getCollisionRectCandidates(bbox, collrect_candidates); var collrects = collrect_candidates; var haspolya = (a.collision_poly && !a.collision_poly.is_empty()); for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; rc = c.rc; if (bbox.intersects_rect_off(rc, tmx, tmy)) { tmpQuad.set_from_rect(rc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_quad(a.bquad)) { if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); if (c.poly) { if (c.poly.intersects_poly(a.collision_poly, a.x - (tmx + rc.left), a.y - (tmy + rc.top))) { cr.clearArray(collrect_candidates); return true; } } else { this.temp_poly.set_from_quad(tmpQuad, 0, 0, rc.right - rc.left, rc.bottom - rc.top); if (this.temp_poly.intersects_poly(a.collision_poly, a.x, a.y)) { cr.clearArray(collrect_candidates); return true; } } } else { if (c.poly) { this.temp_poly.set_from_quad(a.bquad, 0, 0, a.width, a.height); if (c.poly.intersects_poly(this.temp_poly, -(tmx + rc.left), -(tmy + rc.top))) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } } } cr.clearArray(collrect_candidates); return false; }; Runtime.prototype.testRectOverlap = function(r, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; if (!b.bbox.intersects_rect(r)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(r, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (r.intersects_rect_off(tilerc, tmx, tmy)) { if (c.poly) { this.temp_poly.set_from_rect(r, 0, 0); if (c.poly.intersects_poly(this.temp_poly, -(tmx + tilerc.left), -(tmy + tilerc.top))) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } cr.clearArray(collrect_candidates); return false; } else { tmpQuad.set_from_rect(r); if (!b.bquad.intersects_quad(tmpQuad)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); tmpQuad.offset(-r.left, -r.top); this.temp_poly.set_from_quad(tmpQuad, 0, 0, 1, 1); return b.collision_poly.intersects_poly(this.temp_poly, r.left - b.x, r.top - b.y); } }; Runtime.prototype.testSegmentOverlap = function(x1, y1, x2, y2, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; tmpRect.set(cr.min(x1, x2), cr.min(y1, y2), cr.max(x1, x2), cr.max(y1, y2)); if (!b.bbox.intersects_rect(tmpRect)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(tmpRect, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (tmpRect.intersects_rect_off(tilerc, tmx, tmy)) { tmpQuad.set_from_rect(tilerc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_segment(x1, y1, x2, y2)) { if (c.poly) { if (c.poly.intersects_segment(tmx + tilerc.left, tmy + tilerc.top, x1, y1, x2, y2)) { cr.clearArray(collrect_candidates); return true; } } else { cr.clearArray(collrect_candidates); return true; } } } } cr.clearArray(collrect_candidates); return false; } else { if (!b.bquad.intersects_segment(x1, y1, x2, y2)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); return b.collision_poly.intersects_segment(b.x, b.y, x1, y1, x2, y2); } }; Runtime.prototype.typeHasBehavior = function(t, b) { if (!b) return false; var i, len, j, lenj, f; for (i = 0, len = t.behaviors.length; i < len; i++) { if (t.behaviors[i].behavior instanceof b) return true; } if (!t.is_family) { for (i = 0, len = t.families.length; i < len; i++) { f = t.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (f.behaviors[j].behavior instanceof b) return true; } } } return false; }; Runtime.prototype.typeHasNoSaveBehavior = function(t) { return this.typeHasBehavior(t, cr.behaviors.NoSave); }; Runtime.prototype.typeHasPersistBehavior = function(t) { return this.typeHasBehavior(t, cr.behaviors.Persist); }; Runtime.prototype.getSolidBehavior = function() { return this.solidBehavior; }; Runtime.prototype.getJumpthruBehavior = function() { return this.jumpthruBehavior; }; var candidates = []; Runtime.prototype.testOverlapSolid = function(inst) { var i, len, s; inst.update_bbox(); this.getSolidCollisionCandidates(inst.layer, inst.bbox, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra["solidEnabled"]) continue; if (this.testOverlap(inst, s)) { cr.clearArray(candidates); return s; } } cr.clearArray(candidates); return null; }; Runtime.prototype.testRectOverlapSolid = function(r) { var i, len, s; this.getSolidCollisionCandidates(null, r, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra["solidEnabled"]) continue; if (this.testRectOverlap(r, s)) { cr.clearArray(candidates); return s; } } cr.clearArray(candidates); return null; }; var jumpthru_array_ret = []; Runtime.prototype.testOverlapJumpThru = function(inst, all) { var ret = null; if (all) { ret = jumpthru_array_ret; cr.clearArray(ret); } inst.update_bbox(); this.getJumpthruCollisionCandidates(inst.layer, inst.bbox, candidates); var i, len, j; for (i = 0, len = candidates.length; i < len; ++i) { j = candidates[i]; if (!j.extra["jumpthruEnabled"]) continue; if (this.testOverlap(inst, j)) { if (all) ret.push(j); else { cr.clearArray(candidates); return j; } } } cr.clearArray(candidates); return ret; }; Runtime.prototype.pushOutSolid = function(inst, xdir, ydir, dist, include_jumpthrus, specific_jumpthru) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; var last_overlapped = null, secondlast_overlapped = null; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; if (!last_overlapped) { if (include_jumpthrus) { if (specific_jumpthru) last_overlapped = (this.testOverlap(inst, specific_jumpthru) ? specific_jumpthru : null); else last_overlapped = this.testOverlapJumpThru(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; } if (!last_overlapped) { if (secondlast_overlapped) this.pushInFractional(inst, xdir, ydir, secondlast_overlapped, 16); return true; } } } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushOutSolidAxis = function(inst, xdir, ydir, dist) { dist = dist || 50; var oldX = inst.x; var oldY = inst.y; var lastOverlapped = null; var secondLastOverlapped = null; var i, which, sign; for (i = 0; i < dist; ++i) { for (which = 0; which < 2; ++which) { sign = which * 2 - 1; // -1 or 1 inst.x = oldX + (xdir * i * sign); inst.y = oldY + (ydir * i * sign); inst.set_bbox_changed(); if (!this.testOverlap(inst, lastOverlapped)) { lastOverlapped = this.testOverlapSolid(inst); if (lastOverlapped) { secondLastOverlapped = lastOverlapped; } else { if (secondLastOverlapped) this.pushInFractional(inst, xdir * sign, ydir * sign, secondLastOverlapped, 16); return true; } } } } inst.x = oldX; inst.y = oldY; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushOut = function(inst, xdir, ydir, dist, otherinst) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, otherinst)) return true; } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushInFractional = function(inst, xdir, ydir, obj, limit) { var divisor = 2; var frac; var forward = false; var overlapping = false; var bestx = inst.x; var besty = inst.y; while (divisor <= limit) { frac = 1 / divisor; divisor *= 2; inst.x += xdir * frac * (forward ? 1 : -1); inst.y += ydir * frac * (forward ? 1 : -1); inst.set_bbox_changed(); if (this.testOverlap(inst, obj)) { forward = true; overlapping = true; } else { forward = false; overlapping = false; bestx = inst.x; besty = inst.y; } } if (overlapping) { inst.x = bestx; inst.y = besty; inst.set_bbox_changed(); } }; Runtime.prototype.pushOutSolidNearest = function(inst, max_dist_) { var max_dist = (cr.is_undefined(max_dist_) ? 100 : max_dist_); var dist = 0; var oldx = inst.x var oldy = inst.y; var dir = 0; var dx = 0, dy = 0; var last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; // already clear of solids while (dist <= max_dist) { switch (dir) { case 0: dx = 0; dy = -1; dist++; break; case 1: dx = 1; dy = -1; break; case 2: dx = 1; dy = 0; break; case 3: dx = 1; dy = 1; break; case 4: dx = 0; dy = 1; break; case 5: dx = -1; dy = 1; break; case 6: dx = -1; dy = 0; break; case 7: dx = -1; dy = -1; break; } dir = (dir + 1) % 8; inst.x = cr.floor(oldx + (dx * dist)); inst.y = cr.floor(oldy + (dy * dist)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.registerCollision = function(a, b) { if (!a.collisionsEnabled || !b.collisionsEnabled) return; this.registered_collisions.push([a, b]); }; Runtime.prototype.addRegisteredCollisionCandidates = function(inst, otherType, arr) { var i, len, r, otherInst; for (i = 0, len = this.registered_collisions.length; i < len; ++i) { r = this.registered_collisions[i]; if (r[0] === inst) otherInst = r[1]; else if (r[1] === inst) otherInst = r[0]; else continue; if (otherType.is_family) { if (otherType.members.indexOf(otherType) === -1) continue; } else { if (otherInst.type !== otherType) continue; } if (arr.indexOf(otherInst) === -1) arr.push(otherInst); } }; Runtime.prototype.checkRegisteredCollision = function(a, b) { var i, len, x; for (i = 0, len = this.registered_collisions.length; i < len; i++) { x = this.registered_collisions[i]; if ((x[0] === a && x[1] === b) || (x[0] === b && x[1] === a)) return true; } return false; }; Runtime.prototype.calculateSolidBounceAngle = function(inst, startx, starty, obj) { var objx = inst.x; var objy = inst.y; var radius = cr.max(10, cr.distanceTo(startx, starty, objx, objy)); var startangle = cr.angleTo(startx, starty, objx, objy); var firstsolid = obj || this.testOverlapSolid(inst); if (!firstsolid) return cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; var i, curangle, anticlockwise_free_angle, clockwise_free_angle; var increment = cr.to_radians(5); // 5 degree increments for (i = 1; i < 36; i++) { curangle = startangle - i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { anticlockwise_free_angle = curangle; break; } } } if (i === 36) anticlockwise_free_angle = cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; for (i = 1; i < 36; i++) { curangle = startangle + i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { clockwise_free_angle = curangle; break; } } } if (i === 36) clockwise_free_angle = cr.clamp_angle(startangle + cr.PI); inst.x = objx; inst.y = objy; inst.set_bbox_changed(); if (clockwise_free_angle === anticlockwise_free_angle) return clockwise_free_angle; var half_diff = cr.angleDiff(clockwise_free_angle, anticlockwise_free_angle) / 2; var normal; if (cr.angleClockwise(clockwise_free_angle, anticlockwise_free_angle)) { normal = cr.clamp_angle(anticlockwise_free_angle + half_diff + cr.PI); } else { normal = cr.clamp_angle(clockwise_free_angle + half_diff); }; var vx = Math.cos(startangle); var vy = Math.sin(startangle); var nx = Math.cos(normal); var ny = Math.sin(normal); var v_dot_n = vx * nx + vy * ny; var rx = vx - 2 * v_dot_n * nx; var ry = vy - 2 * v_dot_n * ny; return cr.angleTo(0, 0, rx, ry); }; var triggerSheetIndex = -1; Runtime.prototype.trigger = function(method, inst, value /* for fast triggers */ ) {; if (!this.running_layout) return false; var sheet = this.running_layout.event_sheet; if (!sheet) return false; // no event sheet active; nothing to trigger var ret = false; var r, i, len; triggerSheetIndex++; var deep_includes = sheet.deep_includes; for (i = 0, len = deep_includes.length; i < len; ++i) { r = this.triggerOnSheet(method, inst, deep_includes[i], value); ret = ret || r; } r = this.triggerOnSheet(method, inst, sheet, value); ret = ret || r; triggerSheetIndex--; return ret; }; Runtime.prototype.triggerOnSheet = function(method, inst, sheet, value) { var ret = false; var i, leni, r, families; if (!inst) { r = this.triggerOnSheetForTypeName(method, inst, "system", sheet, value); ret = ret || r; } else { r = this.triggerOnSheetForTypeName(method, inst, inst.type.name, sheet, value); ret = ret || r; families = inst.type.families; for (i = 0, leni = families.length; i < leni; ++i) { r = this.triggerOnSheetForTypeName(method, inst, families[i].name, sheet, value); ret = ret || r; } } return ret; // true if anything got triggered }; Runtime.prototype.triggerOnSheetForTypeName = function(method, inst, type_name, sheet, value) { var i, leni; var ret = false, ret2 = false; var trig, index; var fasttrigger = (typeof value !== "undefined"); var triggers = (fasttrigger ? sheet.fasttriggers : sheet.triggers); var obj_entry = triggers[type_name]; if (!obj_entry) return ret; var triggers_list = null; for (i = 0, leni = obj_entry.length; i < leni; ++i) { if (obj_entry[i].method == method) { triggers_list = obj_entry[i].evs; break; } } if (!triggers_list) return ret; var triggers_to_fire; if (fasttrigger) { triggers_to_fire = triggers_list[value]; } else { triggers_to_fire = triggers_list; } if (!triggers_to_fire) return null; for (i = 0, leni = triggers_to_fire.length; i < leni; i++) { trig = triggers_to_fire[i][0]; index = triggers_to_fire[i][1]; ret2 = this.executeSingleTrigger(inst, type_name, trig, index); ret = ret || ret2; } return ret; }; Runtime.prototype.executeSingleTrigger = function(inst, type_name, trig, index) { var i, leni; var ret = false; this.trigger_depth++; var current_event = this.getCurrentEventStack().current_event; if (current_event) this.pushCleanSol(current_event.solModifiersIncludingParents); var isrecursive = (this.trigger_depth > 1); // calling trigger from inside another trigger this.pushCleanSol(trig.solModifiersIncludingParents); if (isrecursive) this.pushLocalVarStack(); var event_stack = this.pushEventStack(trig); event_stack.current_event = trig; if (inst) { var sol = this.types[type_name].getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; this.types[type_name].applySolToContainer(); } var ok_to_run = true; if (trig.parent) { var temp_parents_arr = event_stack.temp_parents_arr; var cur_parent = trig.parent; while (cur_parent) { temp_parents_arr.push(cur_parent); cur_parent = cur_parent.parent; } temp_parents_arr.reverse(); for (i = 0, leni = temp_parents_arr.length; i < leni; i++) { if (!temp_parents_arr[i].run_pretrigger()) // parent event failed { ok_to_run = false; break; } } } if (ok_to_run) { this.execcount++; if (trig.orblock) trig.run_orblocktrigger(index); else trig.run(); ret = ret || event_stack.last_event_true; } this.popEventStack(); if (isrecursive) this.popLocalVarStack(); this.popSol(trig.solModifiersIncludingParents); if (current_event) this.popSol(current_event.solModifiersIncludingParents); if (this.hasPendingInstances && this.isInOnDestroy === 0 && triggerSheetIndex === 0 && !this.isRunningEvents) { this.ClearDeathRow(); } this.trigger_depth--; return ret; }; Runtime.prototype.getCurrentCondition = function() { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.conditions[evinfo.cndindex]; }; Runtime.prototype.getCurrentConditionObjectType = function() { var cnd = this.getCurrentCondition(); return cnd.type; }; Runtime.prototype.isCurrentConditionFirst = function() { var evinfo = this.getCurrentEventStack(); return evinfo.cndindex === 0; }; Runtime.prototype.getCurrentAction = function() { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.actions[evinfo.actindex]; }; Runtime.prototype.pushLocalVarStack = function() { this.localvar_stack_index++; if (this.localvar_stack_index >= this.localvar_stack.length) this.localvar_stack.push([]); }; Runtime.prototype.popLocalVarStack = function() {; this.localvar_stack_index--; }; Runtime.prototype.getCurrentLocalVarStack = function() { return this.localvar_stack[this.localvar_stack_index]; }; Runtime.prototype.pushEventStack = function(cur_event) { this.event_stack_index++; if (this.event_stack_index >= this.event_stack.length) this.event_stack.push(new cr.eventStackFrame()); var ret = this.getCurrentEventStack(); ret.reset(cur_event); return ret; }; Runtime.prototype.popEventStack = function() {; this.event_stack_index--; }; Runtime.prototype.getCurrentEventStack = function() { return this.event_stack[this.event_stack_index]; }; Runtime.prototype.pushLoopStack = function(name_) { this.loop_stack_index++; if (this.loop_stack_index >= this.loop_stack.length) { this.loop_stack.push(cr.seal({ name: name_, index: 0, stopped: false })); } var ret = this.getCurrentLoop(); ret.name = name_; ret.index = 0; ret.stopped = false; return ret; }; Runtime.prototype.popLoopStack = function() {; this.loop_stack_index--; }; Runtime.prototype.getCurrentLoop = function() { return this.loop_stack[this.loop_stack_index]; }; Runtime.prototype.getEventVariableByName = function(name, scope) { var i, leni, j, lenj, sheet, e; while (scope) { for (i = 0, leni = scope.subevents.length; i < leni; i++) { e = scope.subevents[i]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } scope = scope.parent; } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) { sheet = this.eventsheets_by_index[i]; for (j = 0, lenj = sheet.events.length; j < lenj; j++) { e = sheet.events[j]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } } return null; }; Runtime.prototype.getLayoutBySid = function(sid_) { var i, len; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { if (this.layouts_by_index[i].sid === sid_) return this.layouts_by_index[i]; } return null; }; Runtime.prototype.getObjectTypeBySid = function(sid_) { var i, len; for (i = 0, len = this.types_by_index.length; i < len; i++) { if (this.types_by_index[i].sid === sid_) return this.types_by_index[i]; } return null; }; Runtime.prototype.getGroupBySid = function(sid_) { var i, len; for (i = 0, len = this.allGroups.length; i < len; i++) { if (this.allGroups[i].sid === sid_) return this.allGroups[i]; } return null; }; Runtime.prototype.doCanvasSnapshot = function(format_, quality_) { this.snapshotCanvas = [format_, quality_]; this.redraw = true; // force redraw so snapshot is always taken }; function IsIndexedDBAvailable() { try { return !!window.indexedDB; } catch (e) { return false; } }; function makeSaveDb(e) { var db = e.target.result; db.createObjectStore("saves", { keyPath: "slot" }); }; function IndexedDB_WriteSlot(slot_, data_, oncomplete_, onerror_) { try { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function(e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"], "readwrite"); var objectStore = transaction.objectStore("saves"); var putReq = objectStore.put({ "slot": slot_, "data": data_ }); putReq.onsuccess = oncomplete_; }; } catch (err) { onerror_(err); } }; function IndexedDB_ReadSlot(slot_, oncomplete_, onerror_) { try { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function(e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"]); var objectStore = transaction.objectStore("saves"); var readReq = objectStore.get(slot_); readReq.onsuccess = function(e) { if (readReq.result) oncomplete_(readReq.result["data"]); else oncomplete_(null); }; }; } catch (err) { onerror_(err); } }; Runtime.prototype.signalContinuousPreview = function() { this.signalledContinuousPreview = true; }; function doContinuousPreviewReload() { cr.logexport("Reloading for continuous preview"); if (!!window["c2cocoonjs"]) { CocoonJS["App"]["reload"](); } else { if (window.location.search.indexOf("continuous") > -1) window.location.reload(true); else window.location = window.location + "?continuous"; } }; Runtime.prototype.handleSaveLoad = function() { var self = this; var savingToSlot = this.saveToSlot; var savingJson = this.lastSaveJson; var loadingFromSlot = this.loadFromSlot; var continuous = false; if (this.signalledContinuousPreview) { continuous = true; savingToSlot = "__c2_continuouspreview"; this.signalledContinuousPreview = false; } if (savingToSlot.length) { this.ClearDeathRow(); savingJson = this.saveToJSONString(); if (IsIndexedDBAvailable() && !this.isCocoonJs) { IndexedDB_WriteSlot(savingToSlot, savingJson, function() { cr.logexport("Saved state to IndexedDB storage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; savingJson = ""; if (continuous) doContinuousPreviewReload(); }, function(e) { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; savingJson = ""; if (continuous) doContinuousPreviewReload(); } catch (f) { cr.logexport("Failed to save game state: " + e + "; " + f); self.trigger(cr.system_object.prototype.cnds.OnSaveFailed, null); } }); } else { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; this.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; savingJson = ""; if (continuous) doContinuousPreviewReload(); } catch (e) { cr.logexport("Error saving to WebStorage: " + e); self.trigger(cr.system_object.prototype.cnds.OnSaveFailed, null); } } this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = null; } if (loadingFromSlot.length) { if (IsIndexedDBAvailable() && !this.isCocoonJs) { IndexedDB_ReadSlot(loadingFromSlot, function(result_) { if (result_) { self.loadFromJson = result_; cr.logexport("Loaded state from IndexedDB storage (" + self.loadFromJson.length + " bytes)"); } else { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); } self.suspendDrawing = false; if (!self.loadFromJson) { self.loadFromJson = null; self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } }, function(e) { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); self.suspendDrawing = false; if (!self.loadFromJson) { self.loadFromJson = null; self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } }); } else { try { this.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + this.loadFromJson.length + " bytes)"); } catch (e) { this.loadFromJson = null; } this.suspendDrawing = false; if (!self.loadFromJson) { self.loadFromJson = null; self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } } this.loadFromSlot = ""; this.saveToSlot = ""; } if (this.loadFromJson !== null) { this.ClearDeathRow(); var ok = this.loadFromJSONString(this.loadFromJson); if (ok) { this.lastSaveJson = this.loadFromJson; this.trigger(cr.system_object.prototype.cnds.OnLoadComplete, null); this.lastSaveJson = ""; } else { self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } this.loadFromJson = null; } }; function CopyExtraObject(extra) { var p, ret = {}; for (p in extra) { if (extra.hasOwnProperty(p)) { if (extra[p] instanceof cr.ObjectSet) continue; if (extra[p] && typeof extra[p].c2userdata !== "undefined") continue; if (p === "spriteCreatedDestroyCallback") continue; ret[p] = extra[p]; } } return ret; }; Runtime.prototype.saveToJSONString = function() { var i, len, j, lenj, type, layout, typeobj, g, c, a, v, p; var o = { "c2save": true, "version": 1, "rt": { "time": this.kahanTime.sum, "walltime": this.wallTime.sum, "timescale": this.timescale, "tickcount": this.tickcount, "execcount": this.execcount, "next_uid": this.next_uid, "running_layout": this.running_layout.sid, "start_time_offset": (Date.now() - this.start_time) }, "types": {}, "layouts": {}, "events": { "groups": {}, "cnds": {}, "acts": {}, "vars": {} } }; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; typeobj = { "instances": [] }; if (cr.hasAnyOwnProperty(type.extra)) typeobj["ex"] = CopyExtraObject(type.extra); for (j = 0, lenj = type.instances.length; j < lenj; j++) { typeobj["instances"].push(this.saveInstanceToJSON(type.instances[j])); } o["types"][type.sid.toString()] = typeobj; } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { layout = this.layouts_by_index[i]; o["layouts"][layout.sid.toString()] = layout.saveToJSON(); } var ogroups = o["events"]["groups"]; for (i = 0, len = this.allGroups.length; i < len; i++) { g = this.allGroups[i]; ogroups[g.sid.toString()] = this.groups_by_name[g.group_name].group_active; } var ocnds = o["events"]["cnds"]; for (p in this.cndsBySid) { if (this.cndsBySid.hasOwnProperty(p)) { c = this.cndsBySid[p]; if (cr.hasAnyOwnProperty(c.extra)) ocnds[p] = { "ex": CopyExtraObject(c.extra) }; } } var oacts = o["events"]["acts"]; for (p in this.actsBySid) { if (this.actsBySid.hasOwnProperty(p)) { a = this.actsBySid[p]; if (cr.hasAnyOwnProperty(a.extra)) oacts[p] = { "ex": CopyExtraObject(a.extra) }; } } var ovars = o["events"]["vars"]; for (p in this.varsBySid) { if (this.varsBySid.hasOwnProperty(p)) { v = this.varsBySid[p]; if (!v.is_constant && (!v.parent || v.is_static)) ovars[p] = v.data; } } o["system"] = this.system.saveToJSON(); return JSON.stringify(o); }; Runtime.prototype.refreshUidMap = function() { var i, len, type, j, lenj, inst; this.objectsByUid = {}; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; this.objectsByUid[inst.uid.toString()] = inst; } } }; Runtime.prototype.loadFromJSONString = function(str) { var o; try { o = JSON.parse(str); } catch (e) { return false; } if (!o["c2save"]) return false; // probably not a c2 save state if (o["version"] > 1) return false; // from future version of c2; assume not compatible this.isLoadingState = true; var rt = o["rt"]; this.kahanTime.reset(); this.kahanTime.sum = rt["time"]; this.wallTime.reset(); this.wallTime.sum = rt["walltime"] || 0; this.timescale = rt["timescale"]; this.tickcount = rt["tickcount"]; this.execcount = rt["execcount"]; this.start_time = Date.now() - rt["start_time_offset"]; var layout_sid = rt["running_layout"]; if (layout_sid !== this.running_layout.sid) { var changeToLayout = this.getLayoutBySid(layout_sid); if (changeToLayout) this.doChangeLayout(changeToLayout); else return; // layout that was saved on has gone missing (deleted?) } var i, len, j, lenj, k, lenk, p, type, existing_insts, load_insts, inst, binst, layout, layer, g, iid, t; var otypes = o["types"]; for (p in otypes) { if (otypes.hasOwnProperty(p)) { type = this.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || this.typeHasNoSaveBehavior(type)) continue; if (otypes[p]["ex"]) type.extra = otypes[p]["ex"]; else cr.wipe(type.extra); existing_insts = type.instances; load_insts = otypes[p]["instances"]; for (i = 0, len = cr.min(existing_insts.length, load_insts.length); i < len; i++) { this.loadInstanceFromJSON(existing_insts[i], load_insts[i]); } for (i = load_insts.length, len = existing_insts.length; i < len; i++) this.DestroyInstance(existing_insts[i]); for (i = existing_insts.length, len = load_insts.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.running_layout.getLayerBySid(load_insts[i]["w"]["l"]); if (!layer) continue; } inst = this.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.loadInstanceFromJSON(inst, load_insts[i]); } type.stale_iids = true; } } this.ClearDeathRow(); this.refreshUidMap(); var olayouts = o["layouts"]; for (p in olayouts) { if (olayouts.hasOwnProperty(p)) { layout = this.getLayoutBySid(parseInt(p, 10)); if (!layout) continue; // must've gone missing layout.loadFromJSON(olayouts[p]); } } var ogroups = o["events"]["groups"]; for (p in ogroups) { if (ogroups.hasOwnProperty(p)) { g = this.getGroupBySid(parseInt(p, 10)); if (g && this.groups_by_name[g.group_name]) this.groups_by_name[g.group_name].setGroupActive(ogroups[p]); } } var ocnds = o["events"]["cnds"]; for (p in this.cndsBySid) { if (this.cndsBySid.hasOwnProperty(p)) { if (ocnds.hasOwnProperty(p)) { this.cndsBySid[p].extra = ocnds[p]["ex"]; } else { this.cndsBySid[p].extra = {}; } } } var oacts = o["events"]["acts"]; for (p in this.actsBySid) { if (this.actsBySid.hasOwnProperty(p)) { if (oacts.hasOwnProperty(p)) { this.actsBySid[p].extra = oacts[p]["ex"]; } else { this.actsBySid[p].extra = {}; } } } var ovars = o["events"]["vars"]; for (p in ovars) { if (ovars.hasOwnProperty(p) && this.varsBySid.hasOwnProperty(p)) { this.varsBySid[p].data = ovars[p]; } } this.next_uid = rt["next_uid"]; this.isLoadingState = false; for (i = 0, len = this.fireOnCreateAfterLoad.length; i < len; ++i) { inst = this.fireOnCreateAfterLoad[i]; this.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnCreated, inst); } cr.clearArray(this.fireOnCreateAfterLoad); this.system.loadFromJSON(o["system"]); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (type.is_contained) { iid = inst.get_iid(); cr.clearArray(inst.siblings); for (k = 0, lenk = type.container.length; k < lenk; k++) { t = type.container[k]; if (type === t) continue;; inst.siblings.push(t.instances[iid]); } } if (inst.afterLoad) inst.afterLoad(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.afterLoad) binst.afterLoad(); } } } } this.redraw = true; return true; }; Runtime.prototype.saveInstanceToJSON = function(inst, state_only) { var i, len, world, behinst, et; var type = inst.type; var plugin = type.plugin; var o = {}; if (state_only) o["c2"] = true; // mark as known json data from Construct 2 else o["uid"] = inst.uid; if (cr.hasAnyOwnProperty(inst.extra)) o["ex"] = CopyExtraObject(inst.extra); if (inst.instance_vars && inst.instance_vars.length) { o["ivs"] = {}; for (i = 0, len = inst.instance_vars.length; i < len; i++) { o["ivs"][inst.type.instvar_sids[i].toString()] = inst.instance_vars[i]; } } if (plugin.is_world) { world = { "x": inst.x, "y": inst.y, "w": inst.width, "h": inst.height, "l": inst.layer.sid, "zi": inst.get_zindex() }; if (inst.angle !== 0) world["a"] = inst.angle; if (inst.opacity !== 1) world["o"] = inst.opacity; if (inst.hotspotX !== 0.5) world["hX"] = inst.hotspotX; if (inst.hotspotY !== 0.5) world["hY"] = inst.hotspotY; if (inst.blend_mode !== 0) world["bm"] = inst.blend_mode; if (!inst.visible) world["v"] = inst.visible; if (!inst.collisionsEnabled) world["ce"] = inst.collisionsEnabled; if (inst.my_timescale !== -1) world["mts"] = inst.my_timescale; if (type.effect_types.length) { world["fx"] = []; for (i = 0, len = type.effect_types.length; i < len; i++) { et = type.effect_types[i]; world["fx"].push({ "name": et.name, "active": inst.active_effect_flags[et.index], "params": inst.effect_params[et.index] }); } } o["w"] = world; } if (inst.behavior_insts && inst.behavior_insts.length) { o["behs"] = {}; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { behinst = inst.behavior_insts[i]; if (behinst.saveToJSON) o["behs"][behinst.type.sid.toString()] = behinst.saveToJSON(); } } if (inst.saveToJSON) o["data"] = inst.saveToJSON(); return o; }; Runtime.prototype.getInstanceVarIndexBySid = function(type, sid_) { var i, len; for (i = 0, len = type.instvar_sids.length; i < len; i++) { if (type.instvar_sids[i] === sid_) return i; } return -1; }; Runtime.prototype.getBehaviorIndexBySid = function(inst, sid_) { var i, len; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].type.sid === sid_) return i; } return -1; }; Runtime.prototype.loadInstanceFromJSON = function(inst, o, state_only) { var p, i, len, iv, oivs, world, fxindex, obehs, behindex, value; var oldlayer; var type = inst.type; var plugin = type.plugin; if (state_only) { if (!o["c2"]) return; } else inst.uid = o["uid"]; if (o["ex"]) inst.extra = o["ex"]; else cr.wipe(inst.extra); oivs = o["ivs"]; if (oivs) { for (p in oivs) { if (oivs.hasOwnProperty(p)) { iv = this.getInstanceVarIndexBySid(type, parseInt(p, 10)); if (iv < 0 || iv >= inst.instance_vars.length) continue; // must've gone missing value = oivs[p]; if (value === null) value = NaN; inst.instance_vars[iv] = value; } } } if (plugin.is_world) { world = o["w"]; if (inst.layer.sid !== world["l"]) { oldlayer = inst.layer; inst.layer = this.running_layout.getLayerBySid(world["l"]); if (inst.layer) { oldlayer.removeFromInstanceList(inst, true); inst.layer.appendToInstanceList(inst, true); inst.set_bbox_changed(); inst.layer.setZIndicesStaleFrom(0); } else { inst.layer = oldlayer; if (!state_only) this.DestroyInstance(inst); } } inst.x = world["x"]; inst.y = world["y"]; inst.width = world["w"]; inst.height = world["h"]; inst.zindex = world["zi"]; inst.angle = world.hasOwnProperty("a") ? world["a"] : 0; inst.opacity = world.hasOwnProperty("o") ? world["o"] : 1; inst.hotspotX = world.hasOwnProperty("hX") ? world["hX"] : 0.5; inst.hotspotY = world.hasOwnProperty("hY") ? world["hY"] : 0.5; inst.visible = world.hasOwnProperty("v") ? world["v"] : true; inst.collisionsEnabled = world.hasOwnProperty("ce") ? world["ce"] : true; inst.my_timescale = world.hasOwnProperty("mts") ? world["mts"] : -1; inst.blend_mode = world.hasOwnProperty("bm") ? world["bm"] : 0;; inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); inst.set_bbox_changed(); if (world.hasOwnProperty("fx")) { for (i = 0, len = world["fx"].length; i < len; i++) { fxindex = type.getEffectIndexByName(world["fx"][i]["name"]); if (fxindex < 0) continue; // must've gone missing inst.active_effect_flags[fxindex] = world["fx"][i]["active"]; inst.effect_params[fxindex] = world["fx"][i]["params"]; } } inst.updateActiveEffects(); } obehs = o["behs"]; if (obehs) { for (p in obehs) { if (obehs.hasOwnProperty(p)) { behindex = this.getBehaviorIndexBySid(inst, parseInt(p, 10)); if (behindex < 0) continue; // must've gone missing inst.behavior_insts[behindex].loadFromJSON(obehs[p]); } } } if (o["data"]) inst.loadFromJSON(o["data"]); }; Runtime.prototype.fetchLocalFileViaCordova = function(filename, successCallback, errorCallback) { var path = cordova["file"]["applicationDirectory"] + "www/" + filename; window["resolveLocalFileSystemURL"](path, function(entry) { entry.file(successCallback, errorCallback); }, errorCallback); }; Runtime.prototype.fetchLocalFileViaCordovaAsText = function(filename, successCallback, errorCallback) { this.fetchLocalFileViaCordova(filename, function(file) { var reader = new FileReader(); reader.onload = function(e) { successCallback(e.target.result); }; reader.onerror = errorCallback; reader.readAsText(file); }, errorCallback); }; var queuedArrayBufferReads = []; var activeArrayBufferReads = 0; var MAX_ARRAYBUFFER_READS = 8; Runtime.prototype.maybeStartNextArrayBufferRead = function() { if (!queuedArrayBufferReads.length) return; // none left if (activeArrayBufferReads >= MAX_ARRAYBUFFER_READS) return; // already got maximum number in-flight activeArrayBufferReads++; var job = queuedArrayBufferReads.shift(); this.doFetchLocalFileViaCordovaAsArrayBuffer(job.filename, job.successCallback, job.errorCallback); }; Runtime.prototype.fetchLocalFileViaCordovaAsArrayBuffer = function(filename, successCallback_, errorCallback_) { var self = this; queuedArrayBufferReads.push({ filename: filename, successCallback: function(result) { activeArrayBufferReads--; self.maybeStartNextArrayBufferRead(); successCallback_(result); }, errorCallback: function(err) { activeArrayBufferReads--; self.maybeStartNextArrayBufferRead(); errorCallback_(err); } }); this.maybeStartNextArrayBufferRead(); }; Runtime.prototype.doFetchLocalFileViaCordovaAsArrayBuffer = function(filename, successCallback, errorCallback) { this.fetchLocalFileViaCordova(filename, function(file) { var reader = new FileReader(); reader.onload = function(e) { successCallback(e.target.result); }; reader.readAsArrayBuffer(file); }, errorCallback); }; Runtime.prototype.fetchLocalFileViaCordovaAsURL = function(filename, successCallback, errorCallback) { var blobType = ""; var lowername = filename.toLowerCase(); var ext3 = lowername.substr(lowername.length - 4); var ext4 = lowername.substr(lowername.length - 5); if (ext3 === ".mp4") blobType = "video/mp4"; else if (ext4 === ".webm") blobType = "video/webm"; // use video type but hopefully works with audio too else if (ext3 === ".m4a") blobType = "audio/mp4"; else if (ext3 === ".mp3") blobType = "audio/mpeg"; this.fetchLocalFileViaCordovaAsArrayBuffer(filename, function(arrayBuffer) { var blob = new Blob([arrayBuffer], { type: blobType }); var url = URL.createObjectURL(blob); successCallback(url); }, errorCallback); }; Runtime.prototype.isAbsoluteUrl = function(url) { return /^(?:[a-z]+:)?\/\//.test(url) || url.substr(0, 5) === "data:" || url.substr(0, 5) === "blob:"; }; Runtime.prototype.setImageSrc = function(img, src) { if (this.isWKWebView && !this.isAbsoluteUrl(src)) { this.fetchLocalFileViaCordovaAsURL(src, function(url) { img.src = url; }, function(err) { alert("Failed to load image: " + err); }); } else { img.src = src; } }; Runtime.prototype.setCtxImageSmoothingEnabled = function(ctx, e) { if (typeof ctx["imageSmoothingEnabled"] !== "undefined") { ctx["imageSmoothingEnabled"] = e; } else { ctx["webkitImageSmoothingEnabled"] = e; ctx["mozImageSmoothingEnabled"] = e; ctx["msImageSmoothingEnabled"] = e; } }; cr.runtime = Runtime; cr.createRuntime = function(canvasid) { return new Runtime(document.getElementById(canvasid)); }; cr.createDCRuntime = function(w, h) { return new Runtime({ "dc": true, "width": w, "height": h }); }; window["cr_createRuntime"] = cr.createRuntime; window["cr_createDCRuntime"] = cr.createDCRuntime; window["createCocoonJSRuntime"] = function() { window["c2cocoonjs"] = true; var canvas = document.createElement("screencanvas") || document.createElement("canvas"); canvas.screencanvas = true; document.body.appendChild(canvas); var rt = new Runtime(canvas); window["c2runtime"] = rt; window.addEventListener("orientationchange", function() { window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); }); window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; window["createEjectaRuntime"] = function() { var canvas = document.getElementById("canvas"); var rt = new Runtime(canvas); window["c2runtime"] = rt; window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; }()); window["cr_getC2Runtime"] = function() { var canvas = document.getElementById("c2canvas"); if (canvas) return canvas["c2runtime"]; else if (window["c2runtime"]) return window["c2runtime"]; else return null; } window["cr_getSnapshot"] = function(format_, quality_) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime.doCanvasSnapshot(format_, quality_); } window["cr_sizeCanvas"] = function(w, h) { if (w === 0 || h === 0) return; var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSize"](w, h); } window["cr_setSuspended"] = function(s) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSuspended"](s); }; (function() { function Layout(runtime, m) { this.runtime = runtime; this.event_sheet = null; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); this.scale = 1.0; this.angle = 0; this.first_visit = true; this.name = m[0]; this.originalWidth = m[1]; this.originalHeight = m[2]; this.width = m[1]; this.height = m[2]; this.unbounded_scrolling = m[3]; this.sheetname = m[4]; this.sid = m[5]; var lm = m[6]; var i, len; this.layers = []; this.initial_types = []; for (i = 0, len = lm.length; i < len; i++) { var layer = new cr.layer(this, lm[i]); layer.number = i; cr.seal(layer); this.layers.push(layer); } var im = m[7]; this.initial_nonworld = []; for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]];; if (!type.default_instance) type.default_instance = inst; this.initial_nonworld.push(inst); if (this.initial_types.indexOf(type) === -1) this.initial_types.push(type); } this.effect_types = []; this.active_effect_types = []; this.shaders_preserve_opaqueness = true; this.effect_params = []; for (i = 0, len = m[8].length; i < len; i++) { this.effect_types.push({ id: m[8][i][0], name: m[8][i][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: i }); this.effect_params.push(m[8][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); this.persist_data = {}; }; Layout.prototype.saveObjectToPersist = function(inst) { var sidStr = inst.type.sid.toString(); if (!this.persist_data.hasOwnProperty(sidStr)) this.persist_data[sidStr] = []; var type_persist = this.persist_data[sidStr]; type_persist.push(this.runtime.saveInstanceToJSON(inst)); }; Layout.prototype.hasOpaqueBottomLayer = function() { var layer = this.layers[0]; return !layer.transparent && layer.opacity === 1.0 && !layer.forceOwnTexture && layer.visible; }; Layout.prototype.updateActiveEffects = function() { cr.clearArray(this.active_effect_types); this.shaders_preserve_opaqueness = true; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) { this.active_effect_types.push(et); if (!et.preservesOpaqueness) this.shaders_preserve_opaqueness = false; } } }; Layout.prototype.getEffectByName = function(name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; var created_instances = []; function sort_by_zindex(a, b) { return a.zindex - b.zindex; }; var first_layout = true; Layout.prototype.startRunning = function() { if (this.sheetname) { this.event_sheet = this.runtime.eventsheets[this.sheetname];; this.event_sheet.updateDeepIncludes(); } this.runtime.running_layout = this; this.width = this.originalWidth; this.height = this.originalHeight; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); var i, k, len, lenk, type, type_instances, initial_inst, inst, iid, t, s, p, q, type_data, layer; for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { type = this.runtime.types_by_index[i]; if (type.is_family) continue; // instances are only transferred for their real type type_instances = type.instances; for (k = 0, lenk = type_instances.length; k < lenk; k++) { inst = type_instances[k]; if (inst.layer) { var num = inst.layer.number; if (num >= this.layers.length) num = this.layers.length - 1; inst.layer = this.layers[num]; if (inst.layer.instances.indexOf(inst) === -1) inst.layer.instances.push(inst); inst.layer.zindices_stale = true; } } } if (!first_layout) { for (i = 0, len = this.layers.length; i < len; ++i) { this.layers[i].instances.sort(sort_by_zindex); } } var layer; cr.clearArray(created_instances); this.boundScrolling(); for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; layer.createInitialInstances(); // fills created_instances layer.updateViewport(null); } var uids_changed = false; if (!this.first_visit) { for (p in this.persist_data) { if (this.persist_data.hasOwnProperty(p)) { type = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || !this.runtime.typeHasPersistBehavior(type)) continue; type_data = this.persist_data[p]; for (i = 0, len = type_data.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.getLayerBySid(type_data[i]["w"]["l"]); if (!layer) continue; } inst = this.runtime.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.runtime.loadInstanceFromJSON(inst, type_data[i]); uids_changed = true; created_instances.push(inst); } cr.clearArray(type_data); } } for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].instances.sort(sort_by_zindex); this.layers[i].zindices_stale = true; // in case of duplicates/holes } } if (uids_changed) { this.runtime.ClearDeathRow(); this.runtime.refreshUidMap(); } for (i = 0; i < created_instances.length; i++) { inst = created_instances[i]; if (!inst.type.is_contained) continue; iid = inst.get_iid(); for (k = 0, lenk = inst.type.container.length; k < lenk; k++) { t = inst.type.container[k]; if (inst.type === t) continue; if (t.instances.length > iid) inst.siblings.push(t.instances[iid]); else { if (!t.default_instance) {} else { s = this.runtime.createInstanceFromInit(t.default_instance, inst.layer, true, inst.x, inst.y, true); this.runtime.ClearDeathRow(); t.updateIIDs(); inst.siblings.push(s); created_instances.push(s); // come back around and link up its own instances too } } } } for (i = 0, len = this.initial_nonworld.length; i < len; i++) { initial_inst = this.initial_nonworld[i]; type = this.runtime.types_by_index[initial_inst[1]]; if (!type.is_contained) { inst = this.runtime.createInstanceFromInit(this.initial_nonworld[i], null, true); }; } this.runtime.changelayout = null; this.runtime.ClearDeathRow(); if (this.runtime.ctx && !this.runtime.isDomFree) { for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; if (t.is_family || !t.instances.length || !t.preloadCanvas2D) continue; t.preloadCanvas2D(this.runtime.ctx); } } /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout start: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ if (this.runtime.isLoadingState) { cr.shallowAssignArray(this.runtime.fireOnCreateAfterLoad, created_instances); } else { for (i = 0, len = created_instances.length; i < len; i++) { inst = created_instances[i]; this.runtime.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnCreated, inst); } } cr.clearArray(created_instances); if (!this.runtime.isLoadingState) { this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutStart, null); } this.first_visit = false; }; Layout.prototype.createGlobalNonWorlds = function() { var i, k, len, initial_inst, inst, type; for (i = 0, k = 0, len = this.initial_nonworld.length; i < len; i++) { initial_inst = this.initial_nonworld[i]; type = this.runtime.types_by_index[initial_inst[1]]; if (type.global) { if (!type.is_contained) { inst = this.runtime.createInstanceFromInit(initial_inst, null, true); } } else { this.initial_nonworld[k] = initial_inst; k++; } } cr.truncateArray(this.initial_nonworld, k); }; Layout.prototype.stopRunning = function() {; /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout end: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ if (!this.runtime.isLoadingState) { this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutEnd, null); } this.runtime.isEndingLayout = true; cr.clearArray(this.runtime.system.waits); var i, leni, j, lenj; var layer_instances, inst, type; if (!this.first_visit) { for (i = 0, leni = this.layers.length; i < leni; i++) { this.layers[i].updateZIndices(); layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { if (this.runtime.typeHasPersistBehavior(inst.type)) this.saveObjectToPersist(inst); } } } } for (i = 0, leni = this.layers.length; i < leni; i++) { layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { this.runtime.DestroyInstance(inst); } } this.runtime.ClearDeathRow(); cr.clearArray(layer_instances); this.layers[i].zindices_stale = true; } for (i = 0, leni = this.runtime.types_by_index.length; i < leni; i++) { type = this.runtime.types_by_index[i]; if (type.global || type.plugin.is_world || type.plugin.singleglobal || type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) this.runtime.DestroyInstance(type.instances[j]); this.runtime.ClearDeathRow(); } first_layout = false; this.runtime.isEndingLayout = false; }; var temp_rect = new cr.rect(0, 0, 0, 0); Layout.prototype.recreateInitialObjects = function(type, x1, y1, x2, y2) { temp_rect.set(x1, y1, x2, y2); var i, len; for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].recreateInitialObjects(type, temp_rect); } }; Layout.prototype.draw = function(ctx) { var layout_canvas; var layout_ctx = ctx; var ctx_changed = false; var render_offscreen = !this.runtime.fullscreenScalingQuality; if (render_offscreen) { if (!this.runtime.layout_canvas) { this.runtime.layout_canvas = document.createElement("canvas"); layout_canvas = this.runtime.layout_canvas; layout_canvas.width = this.runtime.draw_width; layout_canvas.height = this.runtime.draw_height; this.runtime.layout_ctx = layout_canvas.getContext("2d"); ctx_changed = true; } layout_canvas = this.runtime.layout_canvas; layout_ctx = this.runtime.layout_ctx; if (layout_canvas.width !== this.runtime.draw_width) { layout_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layout_canvas.height !== this.runtime.draw_height) { layout_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { this.runtime.setCtxImageSmoothingEnabled(layout_ctx, this.runtime.linearSampling); } } layout_ctx.globalAlpha = 1; layout_ctx.globalCompositeOperation = "source-over"; if (this.runtime.clearBackground && !this.hasOpaqueBottomLayer()) layout_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && l.blend_mode !== 11 && (l.instances.length || !l.transparent)) l.draw(layout_ctx); else l.updateViewport(null); // even if not drawing, keep viewport up to date } if (render_offscreen) { ctx.drawImage(layout_canvas, 0, 0, this.runtime.width, this.runtime.height); } }; Layout.prototype.drawGL_earlyZPass = function(glw) { glw.setEarlyZPass(true); if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } var i, l; for (i = this.layers.length - 1; i >= 0; --i) { l = this.layers[i]; if (l.visible && l.opacity === 1 && l.shaders_preserve_opaqueness && l.blend_mode === 0 && (l.instances.length || !l.transparent)) { l.drawGL_earlyZPass(glw); } else { l.updateViewport(null); // even if not drawing, keep viewport up to date } } glw.setEarlyZPass(false); }; Layout.prototype.drawGL = function(glw) { var render_to_texture = (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality || this.runtime.enableFrontToBack); if (render_to_texture) { if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } } else { if (this.runtime.layout_tex) { glw.setRenderingToTexture(null); glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = null; } } if (this.runtime.clearBackground && !this.hasOpaqueBottomLayer()) glw.clear(0, 0, 0, 0); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && (l.instances.length || !l.transparent)) l.drawGL(glw); else l.updateViewport(null); // even if not drawing, keep viewport up to date } if (render_to_texture) { if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && this.runtime.fullscreenScalingQuality)) { if (this.active_effect_types.length === 1) { var etindex = this.active_effect_types[0].index; glw.switchProgram(this.active_effect_types[0].shaderindex); glw.setProgramParameters(null, // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd this.scale, // layerScale this.angle, // layerAngle 0.0, 0.0, // viewOrigin this.runtime.draw_width / 2, this.runtime.draw_height / 2, // scrollPos this.runtime.kahanTime.sum, // seconds this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(this.active_effect_types[0].shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); } glw.setRenderingToTexture(null); // to backbuffer glw.setDepthTestEnabled(false); // ignore depth buffer, copy full texture glw.setOpacity(1); glw.setTexture(this.runtime.layout_tex); glw.setAlphaBlend(); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.width / 2; var halfh = this.runtime.height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); glw.setDepthTestEnabled(true); // turn depth test back on } else { this.renderEffectChain(glw, null, null, null); } } }; Layout.prototype.getRenderTarget = function() { if (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality || this.runtime.enableFrontToBack) { return this.runtime.layout_tex; } else { return null; } }; Layout.prototype.getMinLayerScale = function() { var m = this.layers[0].getScale(); var i, len, l; for (i = 1, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.parallaxX === 0 && l.parallaxY === 0) continue; if (l.getScale() < m) m = l.getScale(); } return m; }; Layout.prototype.scrollToX = function(x) { if (!this.unbounded_scrolling) { var widthBoundary = (this.runtime.draw_width * (1 / this.getMinLayerScale()) / 2); if (x > this.width - widthBoundary) x = this.width - widthBoundary; if (x < widthBoundary) x = widthBoundary; } if (this.scrollX !== x) { this.scrollX = x; this.runtime.redraw = true; } }; Layout.prototype.scrollToY = function(y) { if (!this.unbounded_scrolling) { var heightBoundary = (this.runtime.draw_height * (1 / this.getMinLayerScale()) / 2); if (y > this.height - heightBoundary) y = this.height - heightBoundary; if (y < heightBoundary) y = heightBoundary; } if (this.scrollY !== y) { this.scrollY = y; this.runtime.redraw = true; } }; Layout.prototype.boundScrolling = function() { this.scrollToX(this.scrollX); this.scrollToY(this.scrollY); }; Layout.prototype.renderEffectChain = function(glw, layer, inst, rendertarget) { var active_effect_types = inst ? inst.active_effect_types : layer ? layer.active_effect_types : this.active_effect_types; var layerScale = 1, layerAngle = 0, viewOriginLeft = 0, viewOriginTop = 0, viewOriginRight = this.runtime.draw_width, viewOriginBottom = this.runtime.draw_height; if (inst) { layerScale = inst.layer.getScale(); layerAngle = inst.layer.getAngle(); viewOriginLeft = inst.layer.viewLeft; viewOriginTop = inst.layer.viewTop; viewOriginRight = inst.layer.viewRight; viewOriginBottom = inst.layer.viewBottom; } else if (layer) { layerScale = layer.getScale(); layerAngle = layer.getAngle(); viewOriginLeft = layer.viewLeft; viewOriginTop = layer.viewTop; viewOriginRight = layer.viewRight; viewOriginBottom = layer.viewBottom; } var fx_tex = this.runtime.fx_tex; var i, len, last, temp, fx_index = 0, other_fx_index = 1; var y, h; var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var halfw = windowWidth / 2; var halfh = windowHeight / 2; var rcTex = layer ? layer.rcTex : this.rcTex; var rcTex2 = layer ? layer.rcTex2 : this.rcTex2; var screenleft = 0, clearleft = 0; var screentop = 0, cleartop = 0; var screenright = windowWidth, clearright = windowWidth; var screenbottom = windowHeight, clearbottom = windowHeight; var boxExtendHorizontal = 0; var boxExtendVertical = 0; var inst_layer_angle = inst ? inst.layer.getAngle() : 0; if (inst) { for (i = 0, len = active_effect_types.length; i < len; i++) { boxExtendHorizontal += glw.getProgramBoxExtendHorizontal(active_effect_types[i].shaderindex); boxExtendVertical += glw.getProgramBoxExtendVertical(active_effect_types[i].shaderindex); } var bbox = inst.bbox; screenleft = layer.layerToCanvas(bbox.left, bbox.top, true, true); screentop = layer.layerToCanvas(bbox.left, bbox.top, false, true); screenright = layer.layerToCanvas(bbox.right, bbox.bottom, true, true); screenbottom = layer.layerToCanvas(bbox.right, bbox.bottom, false, true); if (inst_layer_angle !== 0) { var screentrx = layer.layerToCanvas(bbox.right, bbox.top, true, true); var screentry = layer.layerToCanvas(bbox.right, bbox.top, false, true); var screenblx = layer.layerToCanvas(bbox.left, bbox.bottom, true, true); var screenbly = layer.layerToCanvas(bbox.left, bbox.bottom, false, true); temp = Math.min(screenleft, screenright, screentrx, screenblx); screenright = Math.max(screenleft, screenright, screentrx, screenblx); screenleft = temp; temp = Math.min(screentop, screenbottom, screentry, screenbly); screenbottom = Math.max(screentop, screenbottom, screentry, screenbly); screentop = temp; } screenleft -= boxExtendHorizontal; screentop -= boxExtendVertical; screenright += boxExtendHorizontal; screenbottom += boxExtendVertical; rcTex2.left = screenleft / windowWidth; rcTex2.top = 1 - screentop / windowHeight; rcTex2.right = screenright / windowWidth; rcTex2.bottom = 1 - screenbottom / windowHeight; clearleft = screenleft = cr.floor(screenleft); cleartop = screentop = cr.floor(screentop); clearright = screenright = cr.ceil(screenright); clearbottom = screenbottom = cr.ceil(screenbottom); clearleft -= boxExtendHorizontal; cleartop -= boxExtendVertical; clearright += boxExtendHorizontal; clearbottom += boxExtendVertical; if (screenleft < 0) screenleft = 0; if (screentop < 0) screentop = 0; if (screenright > windowWidth) screenright = windowWidth; if (screenbottom > windowHeight) screenbottom = windowHeight; if (clearleft < 0) clearleft = 0; if (cleartop < 0) cleartop = 0; if (clearright > windowWidth) clearright = windowWidth; if (clearbottom > windowHeight) clearbottom = windowHeight; rcTex.left = screenleft / windowWidth; rcTex.top = 1 - screentop / windowHeight; rcTex.right = screenright / windowWidth; rcTex.bottom = 1 - screenbottom / windowHeight; } else { rcTex.left = rcTex2.left = 0; rcTex.top = rcTex2.top = 0; rcTex.right = rcTex2.right = 1; rcTex.bottom = rcTex2.bottom = 1; } var pre_draw = (inst && (glw.programUsesDest(active_effect_types[0].shaderindex) || boxExtendHorizontal !== 0 || boxExtendVertical !== 0 || inst.opacity !== 1 || inst.type.plugin.must_predraw)) || (layer && !inst && layer.opacity !== 1); glw.setAlphaBlend(); if (pre_draw) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(0); glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { inst.drawGL(glw); } else { glw.setTexture(this.runtime.layer_tex); glw.setOpacity(layer.opacity); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst) { temp = rcTex.top; rcTex.top = rcTex.bottom; rcTex.bottom = temp; } fx_index = 1; other_fx_index = 0; } glw.setOpacity(1); var last = active_effect_types.length - 1; var post_draw = glw.programUsesCrossSampling(active_effect_types[last].shaderindex) || (!layer && !inst && !this.runtime.fullscreenScalingQuality); var etindex = 0; for (i = 0, len = active_effect_types.length; i < len; i++) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(active_effect_types[i].shaderindex); etindex = active_effect_types[i].index; if (glw.programIsAnimated(active_effect_types[i].shaderindex)) this.runtime.redraw = true; if (i == 0 && !pre_draw) { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { var pixelWidth; var pixelHeight; if (inst.curFrame && inst.curFrame.texture_img) { var img = inst.curFrame.texture_img; pixelWidth = 1.0 / img.width; pixelHeight = 1.0 / img.height; } else { pixelWidth = 1.0 / inst.width; pixelHeight = 1.0 / inst.height; } glw.setProgramParameters(rendertarget, // backTex pixelWidth, pixelHeight, rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, inst.effect_params[etindex]); // fx params inst.drawGL(glw); } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, layer ? // fx params layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(layer ? this.runtime.layer_tex : this.runtime.layout_tex); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst && !post_draw) { temp = screenbottom; screenbottom = screentop; screentop = temp; } } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, (viewOriginLeft + viewOriginRight) / 2, (viewOriginTop + viewOriginBottom) / 2, this.runtime.kahanTime.sum, inst ? // fx params inst.effect_params[etindex] : layer ? layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(null); if (i === last && !post_draw) { if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); glw.setRenderingToTexture(rendertarget); } else { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); } glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); if (i === last && !post_draw) glw.setTexture(null); } fx_index = (fx_index === 0 ? 1 : 0); other_fx_index = (fx_index === 0 ? 1 : 0); // will be opposite to fx_index since it was just assigned } if (post_draw) { glw.switchProgram(0); if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); else { if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); halfw = this.runtime.width / 2; halfh = this.runtime.height / 2; screenleft = 0; screentop = 0; screenright = this.runtime.width; screenbottom = this.runtime.height; } } glw.setRenderingToTexture(rendertarget); glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); if (inst && active_effect_types.length === 1 && !pre_draw) glw.quadTex(screenleft, screentop, screenright, screentop, screenright, screenbottom, screenleft, screenbottom, rcTex); else glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); glw.setTexture(null); } }; Layout.prototype.getLayerBySid = function(sid_) { var i, len; for (i = 0, len = this.layers.length; i < len; i++) { if (this.layers[i].sid === sid_) return this.layers[i]; } return null; }; Layout.prototype.saveToJSON = function() { var i, len, layer, et; var o = { "sx": this.scrollX, "sy": this.scrollY, "s": this.scale, "a": this.angle, "w": this.width, "h": this.height, "fv": this.first_visit, // added r127 "persist": this.persist_data, "fx": [], "layers": {} }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({ "name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; o["layers"][layer.sid.toString()] = layer.saveToJSON(); } return o; }; Layout.prototype.loadFromJSON = function(o) { var i, j, len, fx, p, layer; this.scrollX = o["sx"]; this.scrollY = o["sy"]; this.scale = o["s"]; this.angle = o["a"]; this.width = o["w"]; this.height = o["h"]; this.persist_data = o["persist"]; if (typeof o["fv"] !== "undefined") this.first_visit = o["fv"]; var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); var olayers = o["layers"]; for (p in olayers) { if (olayers.hasOwnProperty(p)) { layer = this.getLayerBySid(parseInt(p, 10)); if (!layer) continue; // must've gone missing layer.loadFromJSON(olayers[p]); } } }; cr.layout = Layout; function Layer(layout, m) { this.layout = layout; this.runtime = layout.runtime; this.instances = []; // running instances this.scale = 1.0; this.angle = 0; this.disableAngle = false; this.tmprect = new cr.rect(0, 0, 0, 0); this.tmpquad = new cr.quad(); this.viewLeft = 0; this.viewRight = 0; this.viewTop = 0; this.viewBottom = 0; this.zindices_stale = false; this.zindices_stale_from = -1; // first index that has changed, or -1 if no bound this.clear_earlyz_index = 0; this.name = m[0]; this.index = m[1]; this.sid = m[2]; this.visible = m[3]; // initially visible this.background_color = m[4]; this.transparent = m[5]; this.parallaxX = m[6]; this.parallaxY = m[7]; this.opacity = m[8]; this.forceOwnTexture = m[9]; this.useRenderCells = m[10]; this.zoomRate = m[11]; this.blend_mode = m[12]; this.effect_fallback = m[13]; this.compositeOp = "source-over"; this.srcBlend = 0; this.destBlend = 0; this.render_grid = null; this.last_render_list = alloc_arr(); this.render_list_stale = true; this.last_render_cells = new cr.rect(0, 0, -1, -1); this.cur_render_cells = new cr.rect(0, 0, -1, -1); if (this.useRenderCells) { this.render_grid = new cr.RenderGrid(this.runtime.original_width, this.runtime.original_height); } this.render_offscreen = false; var im = m[14]; var i, len; this.startup_initial_instances = []; // for restoring initial_instances after load this.initial_instances = []; this.created_globals = []; // global object UIDs already created - for save/load to avoid recreating for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]];; if (!type.default_instance) { type.default_instance = inst; type.default_layerindex = this.index; } this.initial_instances.push(inst); if (this.layout.initial_types.indexOf(type) === -1) this.layout.initial_types.push(type); } cr.shallowAssignArray(this.startup_initial_instances, this.initial_instances); this.effect_types = []; this.active_effect_types = []; this.shaders_preserve_opaqueness = true; this.effect_params = []; for (i = 0, len = m[15].length; i < len; i++) { this.effect_types.push({ id: m[15][i][0], name: m[15][i][1], shaderindex: -1, preservesOpaqueness: false, active: true, index: i }); this.effect_params.push(m[15][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); }; Layer.prototype.updateActiveEffects = function() { cr.clearArray(this.active_effect_types); this.shaders_preserve_opaqueness = true; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) { this.active_effect_types.push(et); if (!et.preservesOpaqueness) this.shaders_preserve_opaqueness = false; } } }; Layer.prototype.getEffectByName = function(name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; Layer.prototype.createInitialInstances = function() { var i, k, len, inst, initial_inst, type, keep, hasPersistBehavior; for (i = 0, k = 0, len = this.initial_instances.length; i < len; i++) { initial_inst = this.initial_instances[i]; type = this.runtime.types_by_index[initial_inst[1]];; hasPersistBehavior = this.runtime.typeHasPersistBehavior(type); keep = true; if (!hasPersistBehavior || this.layout.first_visit) { inst = this.runtime.createInstanceFromInit(initial_inst, this, true); if (!inst) continue; // may have skipped creation due to fallback effect "destroy" created_instances.push(inst); if (inst.type.global) { keep = false; this.created_globals.push(inst.uid); } } if (keep) { this.initial_instances[k] = this.initial_instances[i]; k++; } } this.initial_instances.length = k; this.runtime.ClearDeathRow(); // flushes creation row so IIDs will be correct if (!this.runtime.glwrap && this.effect_types.length) // no WebGL renderer and shaders used this.blend_mode = this.effect_fallback; // use fallback blend mode this.compositeOp = cr.effectToCompositeOp(this.blend_mode); if (this.runtime.gl) cr.setGLBlend(this, this.blend_mode, this.runtime.gl); this.render_list_stale = true; }; Layer.prototype.recreateInitialObjects = function(only_type, rc) { var i, len, initial_inst, type, wm, x, y, inst, j, lenj, s; var types_by_index = this.runtime.types_by_index; var only_type_is_family = only_type.is_family; var only_type_members = only_type.members; for (i = 0, len = this.initial_instances.length; i < len; ++i) { initial_inst = this.initial_instances[i]; wm = initial_inst[0]; x = wm[0]; y = wm[1]; if (!rc.contains_pt(x, y)) continue; // not in the given area type = types_by_index[initial_inst[1]]; if (type !== only_type) { if (only_type_is_family) { if (only_type_members.indexOf(type) < 0) continue; } else continue; // only_type is not a family, and the initial inst type does not match } inst = this.runtime.createInstanceFromInit(initial_inst, this, false); this.runtime.isInOnDestroy++; this.runtime.trigger(Object.getPrototypeOf(type.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; } }; Layer.prototype.removeFromInstanceList = function(inst, remove_from_grid) { var index = cr.fastIndexOf(this.instances, inst); if (index < 0) return; // not found if (remove_from_grid && this.useRenderCells && inst.rendercells && inst.rendercells.right >= inst.rendercells.left) { inst.update_bbox(); // make sure actually in its current rendercells this.render_grid.update(inst, inst.rendercells, null); // no new range provided - remove only inst.rendercells.set(0, 0, -1, -1); // set to invalid state to indicate not inserted } if (index === this.instances.length - 1) this.instances.pop(); else { cr.arrayRemove(this.instances, index); this.setZIndicesStaleFrom(index); } this.render_list_stale = true; }; Layer.prototype.appendToInstanceList = function(inst, add_to_grid) {; inst.zindex = this.instances.length; this.instances.push(inst); if (add_to_grid && this.useRenderCells && inst.rendercells) { inst.set_bbox_changed(); // will cause immediate update and new insertion to grid } this.render_list_stale = true; }; Layer.prototype.prependToInstanceList = function(inst, add_to_grid) {; this.instances.unshift(inst); this.setZIndicesStaleFrom(0); if (add_to_grid && this.useRenderCells && inst.rendercells) { inst.set_bbox_changed(); // will cause immediate update and new insertion to grid } }; Layer.prototype.moveInstanceAdjacent = function(inst, other, isafter) {; var myZ = inst.get_zindex(); var insertZ = other.get_zindex(); cr.arrayRemove(this.instances, myZ); if (myZ < insertZ) insertZ--; if (isafter) insertZ++; if (insertZ === this.instances.length) this.instances.push(inst); else this.instances.splice(insertZ, 0, inst); this.setZIndicesStaleFrom(myZ < insertZ ? myZ : insertZ); }; Layer.prototype.setZIndicesStaleFrom = function(index) { if (this.zindices_stale_from === -1) // not yet set this.zindices_stale_from = index; else if (index < this.zindices_stale_from) // determine minimum z index affected this.zindices_stale_from = index; this.zindices_stale = true; this.render_list_stale = true; }; Layer.prototype.updateZIndices = function() { if (!this.zindices_stale) return; if (this.zindices_stale_from === -1) this.zindices_stale_from = 0; var i, len, inst; if (this.useRenderCells) { for (i = this.zindices_stale_from, len = this.instances.length; i < len; ++i) { inst = this.instances[i]; inst.zindex = i; this.render_grid.markRangeChanged(inst.rendercells); } } else { for (i = this.zindices_stale_from, len = this.instances.length; i < len; ++i) { this.instances[i].zindex = i; } } this.zindices_stale = false; this.zindices_stale_from = -1; }; Layer.prototype.getScale = function(include_aspect) { return this.getNormalScale() * (this.runtime.fullscreenScalingQuality || include_aspect ? this.runtime.aspect_scale : 1); }; Layer.prototype.getNormalScale = function() { return ((this.scale * this.layout.scale) - 1) * this.zoomRate + 1; }; Layer.prototype.getAngle = function() { if (this.disableAngle) return 0; return cr.clamp_angle(this.layout.angle + this.angle); }; var arr_cache = []; function alloc_arr() { if (arr_cache.length) return arr_cache.pop(); else return []; } function free_arr(a) { cr.clearArray(a); arr_cache.push(a); }; function mergeSortedZArrays(a, b, out) { var i = 0, j = 0, k = 0, lena = a.length, lenb = b.length, ai, bj; out.length = lena + lenb; for (; i < lena && j < lenb; ++k) { ai = a[i]; bj = b[j]; if (ai.zindex < bj.zindex) { out[k] = ai; ++i; } else { out[k] = bj; ++j; } } for (; i < lena; ++i, ++k) out[k] = a[i]; for (; j < lenb; ++j, ++k) out[k] = b[j]; }; var next_arr = []; function mergeAllSortedZArrays_pass(arr, first_pass) { var i, len, arr1, arr2, out; for (i = 0, len = arr.length; i < len - 1; i += 2) { arr1 = arr[i]; arr2 = arr[i + 1]; out = alloc_arr(); mergeSortedZArrays(arr1, arr2, out); if (!first_pass) { free_arr(arr1); free_arr(arr2); } next_arr.push(out); } if (len % 2 === 1) { if (first_pass) { arr1 = alloc_arr(); cr.shallowAssignArray(arr1, arr[len - 1]); next_arr.push(arr1); } else { next_arr.push(arr[len - 1]); } } cr.shallowAssignArray(arr, next_arr); cr.clearArray(next_arr); }; function mergeAllSortedZArrays(arr) { var first_pass = true; while (arr.length > 1) { mergeAllSortedZArrays_pass(arr, first_pass); first_pass = false; } return arr[0]; }; var render_arr = []; Layer.prototype.getRenderCellInstancesToDraw = function() {; this.updateZIndices(); this.render_grid.queryRange(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom, render_arr); if (!render_arr.length) return alloc_arr(); if (render_arr.length === 1) { var a = alloc_arr(); cr.shallowAssignArray(a, render_arr[0]); cr.clearArray(render_arr); return a; } var draw_list = mergeAllSortedZArrays(render_arr); cr.clearArray(render_arr); return draw_list; }; Layer.prototype.draw = function(ctx) { this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.blend_mode !== 0); var layer_canvas = this.runtime.canvas; var layer_ctx = ctx; var ctx_changed = false; if (this.render_offscreen) { if (!this.runtime.layer_canvas) { this.runtime.layer_canvas = document.createElement("canvas");; layer_canvas = this.runtime.layer_canvas; layer_canvas.width = this.runtime.draw_width; layer_canvas.height = this.runtime.draw_height; this.runtime.layer_ctx = layer_canvas.getContext("2d");; ctx_changed = true; } layer_canvas = this.runtime.layer_canvas; layer_ctx = this.runtime.layer_ctx; if (layer_canvas.width !== this.runtime.draw_width) { layer_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layer_canvas.height !== this.runtime.draw_height) { layer_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { this.runtime.setCtxImageSmoothingEnabled(layer_ctx, this.runtime.linearSampling); } if (this.transparent) layer_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.globalAlpha = 1; layer_ctx.globalCompositeOperation = "source-over"; if (!this.transparent) { layer_ctx.fillStyle = "rgb(" + this.background_color[0] + "," + this.background_color[1] + "," + this.background_color[2] + ")"; layer_ctx.fillRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.save(); this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, layer_ctx); var myscale = this.getScale(); layer_ctx.scale(myscale, myscale); layer_ctx.translate(-px, -py); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, len, inst, last_inst = null; for (i = 0, len = instances_to_draw.length; i < len; ++i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstance(inst, layer_ctx); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; layer_ctx.restore(); if (this.render_offscreen) { ctx.globalCompositeOperation = this.compositeOp; ctx.globalAlpha = this.opacity; ctx.drawImage(layer_canvas, 0, 0); } }; Layer.prototype.drawInstance = function(inst, layer_ctx) { if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; layer_ctx.globalCompositeOperation = inst.compositeOp; inst.draw(layer_ctx); }; Layer.prototype.updateViewport = function(ctx) { this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, ctx); }; Layer.prototype.rotateViewport = function(px, py, ctx) { var myscale = this.getScale(); this.viewLeft = px; this.viewTop = py; this.viewRight = px + (this.runtime.draw_width * (1 / myscale)); this.viewBottom = py + (this.runtime.draw_height * (1 / myscale)); var temp; if (this.viewLeft > this.viewRight) { temp = this.viewLeft; this.viewLeft = this.viewRight; this.viewRight = temp; } if (this.viewTop > this.viewBottom) { temp = this.viewTop; this.viewTop = this.viewBottom; this.viewBottom = temp; } var myAngle = this.getAngle(); if (myAngle !== 0) { if (ctx) { ctx.translate(this.runtime.draw_width / 2, this.runtime.draw_height / 2); ctx.rotate(-myAngle); ctx.translate(this.runtime.draw_width / -2, this.runtime.draw_height / -2); } this.tmprect.set(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom); this.tmprect.offset((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); this.tmpquad.set_from_rotated_rect(this.tmprect, myAngle); this.tmpquad.bounding_box(this.tmprect); this.tmprect.offset((this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2); this.viewLeft = this.tmprect.left; this.viewTop = this.tmprect.top; this.viewRight = this.tmprect.right; this.viewBottom = this.tmprect.bottom; } } Layer.prototype.drawGL_earlyZPass = function(glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = this.forceOwnTexture; if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, inst, last_inst = null; for (i = instances_to_draw.length - 1; i >= 0; --i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstanceGL_earlyZPass(instances_to_draw[i], glw); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; if (!this.transparent) { this.clear_earlyz_index = this.runtime.earlyz_index++; glw.setEarlyZIndex(this.clear_earlyz_index); glw.setColorFillMode(1, 1, 1, 1); glw.fullscreenQuad(); // fill remaining space in depth buffer with current Z value glw.restoreEarlyZMode(); } }; Layer.prototype.drawGL = function(glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.active_effect_types.length > 0 || this.blend_mode !== 0); if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); if (this.transparent) glw.clear(0, 0, 0, 0); } if (!this.transparent) { if (this.runtime.enableFrontToBack) { glw.setEarlyZIndex(this.clear_earlyz_index); glw.setColorFillMode(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); glw.fullscreenQuad(); glw.setTextureFillMode(); } else { glw.clear(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); } } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = Math.round(px); py = Math.round(py); } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var instances_to_draw; if (this.useRenderCells) { this.cur_render_cells.left = this.render_grid.XToCell(this.viewLeft); this.cur_render_cells.top = this.render_grid.YToCell(this.viewTop); this.cur_render_cells.right = this.render_grid.XToCell(this.viewRight); this.cur_render_cells.bottom = this.render_grid.YToCell(this.viewBottom); if (this.render_list_stale || !this.cur_render_cells.equals(this.last_render_cells)) { free_arr(this.last_render_list); instances_to_draw = this.getRenderCellInstancesToDraw(); this.render_list_stale = false; this.last_render_cells.copy(this.cur_render_cells); } else instances_to_draw = this.last_render_list; } else instances_to_draw = this.instances; var i, len, inst, last_inst = null; for (i = 0, len = instances_to_draw.length; i < len; ++i) { inst = instances_to_draw[i]; if (inst === last_inst) continue; this.drawInstanceGL(instances_to_draw[i], glw); last_inst = inst; } if (this.useRenderCells) this.last_render_list = instances_to_draw; if (this.render_offscreen) { shaderindex = this.active_effect_types.length ? this.active_effect_types[0].shaderindex : 0; etindex = this.active_effect_types.length ? this.active_effect_types[0].index : 0; if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && this.opacity === 1)) { if (this.active_effect_types.length === 1) { glw.switchProgram(shaderindex); glw.setProgramParameters(this.layout.getRenderTarget(), // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd myscale, // layerScale this.getAngle(), this.viewLeft, this.viewTop, (this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2, this.runtime.kahanTime.sum, this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); glw.setRenderingToTexture(this.layout.getRenderTarget()); glw.setOpacity(this.opacity); glw.setTexture(this.runtime.layer_tex); glw.setBlend(this.srcBlend, this.destBlend); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.draw_width / 2; var halfh = this.runtime.draw_height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); } else { this.layout.renderEffectChain(glw, this, null, this.layout.getRenderTarget()); } } }; Layer.prototype.drawInstanceGL = function(inst, glw) {; if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; glw.setEarlyZIndex(inst.earlyz_index); if (inst.uses_shaders) { this.drawInstanceWithShadersGL(inst, glw); } else { glw.switchProgram(0); // un-set any previously set shader glw.setBlend(inst.srcBlend, inst.destBlend); inst.drawGL(glw); } }; Layer.prototype.drawInstanceGL_earlyZPass = function(inst, glw) {; if (!inst.visible || inst.width === 0 || inst.height === 0) return; inst.update_bbox(); var bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) return; inst.earlyz_index = this.runtime.earlyz_index++; if (inst.blend_mode !== 0 || inst.opacity !== 1 || !inst.shaders_preserve_opaqueness || !inst.drawGL_earlyZPass) return; glw.setEarlyZIndex(inst.earlyz_index); inst.drawGL_earlyZPass(glw); }; Layer.prototype.drawInstanceWithShadersGL = function(inst, glw) { var shaderindex = inst.active_effect_types[0].shaderindex; var etindex = inst.active_effect_types[0].index; var myscale = this.getScale(); if (inst.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && !glw.programExtendsBox(shaderindex) && ((!inst.angle && !inst.layer.getAngle()) || !glw.programUsesDest(shaderindex)) && inst.opacity === 1 && !inst.type.plugin.must_predraw) { glw.switchProgram(shaderindex); glw.setBlend(inst.srcBlend, inst.destBlend); if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; var destStartX = 0, destStartY = 0, destEndX = 0, destEndY = 0; if (glw.programUsesDest(shaderindex)) { var bbox = inst.bbox; var screenleft = this.layerToCanvas(bbox.left, bbox.top, true, true); var screentop = this.layerToCanvas(bbox.left, bbox.top, false, true); var screenright = this.layerToCanvas(bbox.right, bbox.bottom, true, true); var screenbottom = this.layerToCanvas(bbox.right, bbox.bottom, false, true); destStartX = screenleft / windowWidth; destStartY = 1 - screentop / windowHeight; destEndX = screenright / windowWidth; destEndY = 1 - screenbottom / windowHeight; } var pixelWidth; var pixelHeight; if (inst.curFrame && inst.curFrame.texture_img) { var img = inst.curFrame.texture_img; pixelWidth = 1.0 / img.width; pixelHeight = 1.0 / img.height; } else { pixelWidth = 1.0 / inst.width; pixelHeight = 1.0 / inst.height; } glw.setProgramParameters(this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget(), // backTex pixelWidth, pixelHeight, destStartX, destStartY, destEndX, destEndY, myscale, this.getAngle(), this.viewLeft, this.viewTop, (this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2, this.runtime.kahanTime.sum, inst.effect_params[etindex]); inst.drawGL(glw); } else { this.layout.renderEffectChain(glw, this, inst, this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget()); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); } }; Layer.prototype.canvasToLayer = function(ptx, pty, getx, using_draw_area) { var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina) { ptx *= multiplier; pty *= multiplier; } var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var par_x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var par_y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var x = par_x; var y = par_y; var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x += ptx * invScale; y += pty * invScale; var a = this.getAngle(); if (a !== 0) { x -= par_x; y -= par_y; var cosa = Math.cos(a); var sina = Math.sin(a); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += par_x; y += par_y; } return getx ? x : y; }; Layer.prototype.layerToCanvas = function(ptx, pty, getx, using_draw_area) { var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var par_x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var par_y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var x = par_x; var y = par_y; var a = this.getAngle(); if (a !== 0) { ptx -= par_x; pty -= par_y; var cosa = Math.cos(-a); var sina = Math.sin(-a); var x_temp = (ptx * cosa) - (pty * sina); pty = (pty * cosa) + (ptx * sina); ptx = x_temp; ptx += par_x; pty += par_y; } var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x = (ptx - x) / invScale; y = (pty - y) / invScale; var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina && !using_draw_area) { x /= multiplier; y /= multiplier; } return getx ? x : y; }; Layer.prototype.rotatePt = function(x_, y_, getx) { if (this.getAngle() === 0) return getx ? x_ : y_; var nx = this.layerToCanvas(x_, y_, true); var ny = this.layerToCanvas(x_, y_, false); this.disableAngle = true; var px = this.canvasToLayer(nx, ny, true); var py = this.canvasToLayer(nx, ny, true); this.disableAngle = false; return getx ? px : py; }; Layer.prototype.saveToJSON = function() { var i, len, et; var o = { "s": this.scale, "a": this.angle, "vl": this.viewLeft, "vt": this.viewTop, "vr": this.viewRight, "vb": this.viewBottom, "v": this.visible, "bc": this.background_color, "t": this.transparent, "px": this.parallaxX, "py": this.parallaxY, "o": this.opacity, "zr": this.zoomRate, "fx": [], "cg": this.created_globals, // added r197; list of global UIDs already created "instances": [] }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({ "name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } return o; }; Layer.prototype.loadFromJSON = function(o) { var i, j, len, p, inst, fx; this.scale = o["s"]; this.angle = o["a"]; this.viewLeft = o["vl"]; this.viewTop = o["vt"]; this.viewRight = o["vr"]; this.viewBottom = o["vb"]; this.visible = o["v"]; this.background_color = o["bc"]; this.transparent = o["t"]; this.parallaxX = o["px"]; this.parallaxY = o["py"]; this.opacity = o["o"]; this.zoomRate = o["zr"]; this.created_globals = o["cg"] || []; // added r197 cr.shallowAssignArray(this.initial_instances, this.startup_initial_instances); var temp_set = new cr.ObjectSet(); for (i = 0, len = this.created_globals.length; i < len; ++i) temp_set.add(this.created_globals[i]); for (i = 0, j = 0, len = this.initial_instances.length; i < len; ++i) { if (!temp_set.contains(this.initial_instances[i][2])) // UID in element 2 { this.initial_instances[j] = this.initial_instances[i]; ++j; } } cr.truncateArray(this.initial_instances, j); var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); this.instances.sort(sort_by_zindex); this.zindices_stale = true; }; cr.layer = Layer; }());; (function() { var allUniqueSolModifiers = []; function testSolsMatch(arr1, arr2) { var i, len = arr1.length; switch (len) { case 0: return true; case 1: return arr1[0] === arr2[0]; case 2: return arr1[0] === arr2[0] && arr1[1] === arr2[1]; default: for (i = 0; i < len; i++) { if (arr1[i] !== arr2[i]) return false; } return true; } }; function solArraySorter(t1, t2) { return t1.index - t2.index; }; function findMatchingSolModifier(arr) { var i, len, u, temp, subarr; if (arr.length === 2) { if (arr[0].index > arr[1].index) { temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } } else if (arr.length > 2) arr.sort(solArraySorter); // so testSolsMatch compares in same order if (arr.length >= allUniqueSolModifiers.length) allUniqueSolModifiers.length = arr.length + 1; if (!allUniqueSolModifiers[arr.length]) allUniqueSolModifiers[arr.length] = []; subarr = allUniqueSolModifiers[arr.length]; for (i = 0, len = subarr.length; i < len; i++) { u = subarr[i]; if (testSolsMatch(arr, u)) return u; } subarr.push(arr); return arr; }; function EventSheet(runtime, m) { this.runtime = runtime; this.triggers = {}; this.fasttriggers = {}; this.hasRun = false; this.includes = new cr.ObjectSet(); // all event sheets included by this sheet, at first-level indirection only this.deep_includes = []; // all includes from this sheet recursively, in trigger order this.already_included_sheets = []; // used while building deep_includes this.name = m[0]; var em = m[1]; // events model this.events = []; // triggers won't make it to this array var i, len; for (i = 0, len = em.length; i < len; i++) this.init_event(em[i], null, this.events); }; EventSheet.prototype.toString = function() { return this.name; }; EventSheet.prototype.init_event = function(m, parent, nontriggers) { switch (m[0]) { case 0: // event block { var block = new cr.eventblock(this, parent, m); cr.seal(block); if (block.orblock) { nontriggers.push(block); var i, len; for (i = 0, len = block.conditions.length; i < len; i++) { if (block.conditions[i].trigger) this.init_trigger(block, i); } } else { if (block.is_trigger()) this.init_trigger(block, 0); else nontriggers.push(block); } break; } case 1: // variable { var v = new cr.eventvariable(this, parent, m); cr.seal(v); nontriggers.push(v); break; } case 2: // include { var inc = new cr.eventinclude(this, parent, m); cr.seal(inc); nontriggers.push(inc); break; } default: ; } }; EventSheet.prototype.postInit = function() { var i, len; for (i = 0, len = this.events.length; i < len; i++) { this.events[i].postInit(i < len - 1 && this.events[i + 1].is_else_block); } }; EventSheet.prototype.updateDeepIncludes = function() { cr.clearArray(this.deep_includes); cr.clearArray(this.already_included_sheets); this.addDeepIncludes(this); cr.clearArray(this.already_included_sheets); }; EventSheet.prototype.addDeepIncludes = function(root_sheet) { var i, len, inc, sheet; var deep_includes = root_sheet.deep_includes; var already_included_sheets = root_sheet.already_included_sheets; var arr = this.includes.valuesRef(); for (i = 0, len = arr.length; i < len; ++i) { inc = arr[i]; sheet = inc.include_sheet; if (!inc.isActive() || root_sheet === sheet || already_included_sheets.indexOf(sheet) > -1) continue; already_included_sheets.push(sheet); sheet.addDeepIncludes(root_sheet); deep_includes.push(sheet); } }; EventSheet.prototype.run = function(from_include) { if (!this.runtime.resuming_breakpoint) { this.hasRun = true; if (!from_include) this.runtime.isRunningEvents = true; } var i, len; for (i = 0, len = this.events.length; i < len; i++) { var ev = this.events[i]; ev.run(); this.runtime.clearSol(ev.solModifiers); if (this.runtime.hasPendingInstances) this.runtime.ClearDeathRow(); } if (!from_include) this.runtime.isRunningEvents = false; }; function isPerformanceSensitiveTrigger(method) { if (cr.plugins_.Sprite && method === cr.plugins_.Sprite.prototype.cnds.OnFrameChanged) { return true; } return false; }; EventSheet.prototype.init_trigger = function(trig, index) { if (!trig.orblock) this.runtime.triggers_to_postinit.push(trig); // needs to be postInit'd later var i, len; var cnd = trig.conditions[index]; var type_name; if (cnd.type) type_name = cnd.type.name; else type_name = "system"; var fasttrigger = cnd.fasttrigger; var triggers = (fasttrigger ? this.fasttriggers : this.triggers); if (!triggers[type_name]) triggers[type_name] = []; var obj_entry = triggers[type_name]; var method = cnd.func; if (fasttrigger) { if (!cnd.parameters.length) // no parameters return; var firstparam = cnd.parameters[0]; if (firstparam.type !== 1 || // not a string param firstparam.expression.type !== 2) // not a string literal node { return; } var fastevs; var firstvalue = firstparam.expression.value.toLowerCase(); var i, len; for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { fastevs = obj_entry[i].evs; if (!fastevs[firstvalue]) fastevs[firstvalue] = [ [trig, index] ]; else fastevs[firstvalue].push([trig, index]); return; } } fastevs = {}; fastevs[firstvalue] = [ [trig, index] ]; obj_entry.push({ method: method, evs: fastevs }); } else { for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { obj_entry[i].evs.push([trig, index]); return; } } if (isPerformanceSensitiveTrigger(method)) obj_entry.unshift({ method: method, evs: [ [trig, index] ] }); else obj_entry.push({ method: method, evs: [ [trig, index] ] }); } }; cr.eventsheet = EventSheet; function Selection(type) { this.type = type; this.instances = []; // subset of picked instances this.else_instances = []; // subset of unpicked instances this.select_all = true; }; Selection.prototype.hasObjects = function() { if (this.select_all) return this.type.instances.length; else return this.instances.length; }; Selection.prototype.getObjects = function() { if (this.select_all) return this.type.instances; else return this.instances; }; /* Selection.prototype.ensure_picked = function (inst, skip_siblings) { var i, len; var orblock = inst.runtime.getCurrentEventStack().current_event.orblock; if (this.select_all) { this.select_all = false; if (orblock) { cr.shallowAssignArray(this.else_instances, inst.type.instances); cr.arrayFindRemove(this.else_instances, inst); } this.instances.length = 1; this.instances[0] = inst; } else { if (orblock) { i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { if (this.instances.indexOf(inst) === -1) this.instances.push(inst); } } if (!skip_siblings) { } }; */ Selection.prototype.pick_one = function(inst) { if (!inst) return; if (inst.runtime.getCurrentEventStack().current_event.orblock) { if (this.select_all) { cr.clearArray(this.instances); cr.shallowAssignArray(this.else_instances, inst.type.instances); this.select_all = false; } var i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { this.select_all = false; cr.clearArray(this.instances); this.instances[0] = inst; } }; cr.selection = Selection; function EventBlock(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.solModifiersIncludingParents = []; this.solWriterAfterCnds = false; // block does not change SOL after running its conditions this.group = false; // is group of events this.initially_activated = false; // if a group, is active on startup this.toplevelevent = false; // is an event block parented only by a top-level group this.toplevelgroup = false; // is parented only by other groups or is top-level (i.e. not in a subevent) this.has_else_block = false; // is followed by else ; this.conditions = []; this.actions = []; this.subevents = []; this.group_name = ""; this.group = false; this.initially_activated = false; this.group_active = false; this.contained_includes = null; if (m[1]) { this.group_name = m[1][1].toLowerCase(); this.group = true; this.initially_activated = !!m[1][0]; this.contained_includes = []; this.group_active = this.initially_activated; this.runtime.allGroups.push(this); this.runtime.groups_by_name[this.group_name] = this; } this.orblock = m[2]; this.sid = m[4]; if (!this.group) this.runtime.blocksBySid[this.sid.toString()] = this; var i, len; var cm = m[5]; for (i = 0, len = cm.length; i < len; i++) { var cnd = new cr.condition(this, cm[i]); cnd.index = i; cr.seal(cnd); this.conditions.push(cnd); /* if (cnd.is_logical()) this.is_logical = true; if (cnd.type && !cnd.type.plugin.singleglobal && this.cndReferences.indexOf(cnd.type) === -1) this.cndReferences.push(cnd.type); */ this.addSolModifier(cnd.type); } var am = m[6]; for (i = 0, len = am.length; i < len; i++) { var act = new cr.action(this, am[i]); act.index = i; cr.seal(act); this.actions.push(act); } if (m.length === 8) { var em = m[7]; for (i = 0, len = em.length; i < len; i++) this.sheet.init_event(em[i], this, this.subevents); } this.is_else_block = false; if (this.conditions.length) { this.is_else_block = (this.conditions[0].type == null && this.conditions[0].func == cr.system_object.prototype.cnds.Else); } }; window["_c2hh_"] = "8BF5BEF30F329B893CCF403F2181C87DFEC376FB"; EventBlock.prototype.postInit = function(hasElse /*, prevBlock_*/ ) { var i, len; var p = this.parent; if (this.group) { this.toplevelgroup = true; while (p) { if (!p.group) { this.toplevelgroup = false; break; } p = p.parent; } } this.toplevelevent = !this.is_trigger() && (!this.parent || (this.parent.group && this.parent.toplevelgroup)); this.has_else_block = !!hasElse; this.solModifiersIncludingParents = this.solModifiers.slice(0); p = this.parent; while (p) { for (i = 0, len = p.solModifiers.length; i < len; i++) this.addParentSolModifier(p.solModifiers[i]); p = p.parent; } this.solModifiers = findMatchingSolModifier(this.solModifiers); this.solModifiersIncludingParents = findMatchingSolModifier(this.solModifiersIncludingParents); var i, len /*, s*/ ; for (i = 0, len = this.conditions.length; i < len; i++) this.conditions[i].postInit(); for (i = 0, len = this.actions.length; i < len; i++) this.actions[i].postInit(); for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].postInit(i < len - 1 && this.subevents[i + 1].is_else_block); } /* if (this.is_else_block && this.prev_block) { for (i = 0, len = this.prev_block.solModifiers.length; i < len; i++) { s = this.prev_block.solModifiers[i]; if (this.solModifiers.indexOf(s) === -1) this.solModifiers.push(s); } } */ }; EventBlock.prototype.setGroupActive = function(a) { if (this.group_active === !!a) return; // same state this.group_active = !!a; var i, len; for (i = 0, len = this.contained_includes.length; i < len; ++i) { this.contained_includes[i].updateActive(); } if (len > 0 && this.runtime.running_layout.event_sheet) this.runtime.running_layout.event_sheet.updateDeepIncludes(); }; function addSolModifierToList(type, arr) { var i, len, t; if (!type) return; if (arr.indexOf(type) === -1) arr.push(type); if (type.is_contained) { for (i = 0, len = type.container.length; i < len; i++) { t = type.container[i]; if (type === t) continue; // already handled if (arr.indexOf(t) === -1) arr.push(t); } } }; EventBlock.prototype.addSolModifier = function(type) { addSolModifierToList(type, this.solModifiers); }; EventBlock.prototype.addParentSolModifier = function(type) { addSolModifierToList(type, this.solModifiersIncludingParents); }; EventBlock.prototype.setSolWriterAfterCnds = function() { this.solWriterAfterCnds = true; if (this.parent) this.parent.setSolWriterAfterCnds(); }; EventBlock.prototype.is_trigger = function() { if (!this.conditions.length) // no conditions return false; else return this.conditions[0].trigger; }; EventBlock.prototype.run = function() { var i, len, c, any_true = false, cnd_result; var runtime = this.runtime; var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var conditions = this.conditions; if (!this.is_else_block) evinfo.else_branch_ran = false; if (this.orblock) { if (conditions.length === 0) any_true = true; // be sure to run if empty block evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { c = conditions[evinfo.cndindex]; if (c.trigger) // skip triggers when running OR block continue; cnd_result = c.run(); if (cnd_result) // make sure all conditions run and run if any were true any_true = true; } evinfo.last_event_true = any_true; if (any_true) this.run_actions_and_subevents(); } else { evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { cnd_result = conditions[evinfo.cndindex].run(); if (!cnd_result) // condition failed { evinfo.last_event_true = false; if (this.toplevelevent && runtime.hasPendingInstances) runtime.ClearDeathRow(); return; // bail out now } } evinfo.last_event_true = true; this.run_actions_and_subevents(); } this.end_run(evinfo); }; EventBlock.prototype.end_run = function(evinfo) { if (evinfo.last_event_true && this.has_else_block) evinfo.else_branch_ran = true; if (this.toplevelevent && this.runtime.hasPendingInstances) this.runtime.ClearDeathRow(); }; EventBlock.prototype.run_orblocktrigger = function(index) { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; if (this.conditions[index].run()) { this.run_actions_and_subevents(); this.runtime.getCurrentEventStack().last_event_true = true; } }; EventBlock.prototype.run_actions_and_subevents = function() { var evinfo = this.runtime.getCurrentEventStack(); var len; for (evinfo.actindex = 0, len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.resume_actions_and_subevents = function() { var evinfo = this.runtime.getCurrentEventStack(); var len; for (len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.run_subevents = function() { if (!this.subevents.length) return; var i, len, subev, pushpop /*, skipped_pop = false, pop_modifiers = null*/ ; var last = this.subevents.length - 1; this.runtime.pushEventStack(this); if (this.solWriterAfterCnds) { for (i = 0, len = this.subevents.length; i < len; i++) { subev = this.subevents[i]; pushpop = (!this.toplevelgroup || (!this.group && i < last)); if (pushpop) this.runtime.pushCopySol(subev.solModifiers); subev.run(); if (pushpop) this.runtime.popSol(subev.solModifiers); else this.runtime.clearSol(subev.solModifiers); } } else { for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].run(); } } this.runtime.popEventStack(); }; EventBlock.prototype.run_pretrigger = function() { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var any_true = false; var i, len; for (evinfo.cndindex = 0, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) {; if (this.conditions[evinfo.cndindex].run()) any_true = true; else if (!this.orblock) // condition failed (let OR blocks run all conditions anyway) return false; // bail out } return this.orblock ? any_true : true; }; EventBlock.prototype.retrigger = function() { this.runtime.execcount++; var prevcndindex = this.runtime.getCurrentEventStack().cndindex; var len; var evinfo = this.runtime.pushEventStack(this); if (!this.orblock) { for (evinfo.cndindex = prevcndindex + 1, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { if (!this.conditions[evinfo.cndindex].run()) // condition failed { this.runtime.popEventStack(); // moving up level of recursion return false; // bail out } } } this.run_actions_and_subevents(); this.runtime.popEventStack(); return true; // ran an iteration }; EventBlock.prototype.isFirstConditionOfType = function(cnd) { var cndindex = cnd.index; if (cndindex === 0) return true; --cndindex; for (; cndindex >= 0; --cndindex) { if (this.conditions[cndindex].type === cnd.type) return false; } return true; }; cr.eventblock = EventBlock; function Condition(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = this.runtime.GetObjectReference(m[1]);; this.trigger = (m[3] > 0); this.fasttrigger = (m[3] === 2); this.looping = m[4]; this.inverted = m[5]; this.isstatic = m[6]; this.sid = m[7]; this.runtime.cndsBySid[this.sid.toString()] = this; if (m[0] === -1) // system object { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]];; if (this.isstatic) this.run = this.run_static; else this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]);; this.beh_index = this.type.getBehaviorIndexByName(m[2]);; } else { this.behaviortype = null; this.beh_index = -1; } if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); } if (this.fasttrigger) this.run = this.run_true; if (m.length === 10) { var i, len; var em = m[9]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Condition.prototype.postInit = function() { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; /* Condition.prototype.is_logical = function () { return !this.type || this.type.plugin.singleglobal; }; */ Condition.prototype.run_true = function() { return true; }; Condition.prototype.run_system = function() { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); return cr.xor(this.func.apply(this.runtime.system, this.results), this.inverted); }; Condition.prototype.run_static = function() { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); var ret = this.func.apply(this.behaviortype ? this.behaviortype : this.type, this.results); this.type.applySolToContainer(); return ret; }; Condition.prototype.run_object = function() { var i, j, k, leni, lenj, p, ret, met, inst, s, sol2; var type = this.type; var sol = type.getCurrentSol(); var is_orblock = this.block.orblock && !this.trigger; // triggers in OR blocks need to work normally var offset = 0; var is_contained = type.is_contained; var is_family = type.is_family; var family_index = type.family_index; var beh_index = this.beh_index; var is_beh = (beh_index > -1); var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var inverted = this.inverted; var func = this.func; var arr, container; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } if (sol.select_all) { cr.clearArray(sol.instances); // clear contents cr.clearArray(sol.else_instances); arr = type.instances; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i];; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); met = cr.xor(ret, inverted); if (met) sol.instances.push(inst); else if (is_orblock) // in OR blocks, keep the instances not meeting the condition for subsequent testing sol.else_instances.push(inst); } if (type.finish) type.finish(true); sol.select_all = false; type.applySolToContainer(); return sol.hasObjects(); } else { k = 0; var using_else_instances = (is_orblock && !this.block.isFirstConditionOfType(this)); arr = (using_else_instances ? sol.else_instances : sol.instances); var any_true = false; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i];; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; if (using_else_instances) { sol.instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances.push(s); } } } else { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances[k] = s; } } k++; } } else { if (using_else_instances) { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances[k] = s; } } k++; } else if (is_orblock) { sol.else_instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances.push(s); } } } } } cr.truncateArray(arr, k); if (is_contained) { container = type.container; for (i = 0, leni = container.length; i < leni; i++) { sol2 = container[i].getCurrentSol(); if (using_else_instances) cr.truncateArray(sol2.else_instances, k); else cr.truncateArray(sol2.instances, k); } } var pick_in_finish = any_true; // don't pick in finish() if we're only doing the logic test below if (using_else_instances && !any_true) { for (i = 0, leni = sol.instances.length; i < leni; i++) { inst = sol.instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; j++) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); } } if (is_beh) ret = func.apply(inst.behavior_insts[beh_index], results); else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; break; // got our flag, don't need to test any more } } } if (type.finish) type.finish(pick_in_finish || is_orblock); return is_orblock ? any_true : sol.hasObjects(); } }; cr.condition = Condition; function Action(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = this.runtime.GetObjectReference(m[1]);; if (m[0] === -1) // system { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]];; this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]);; this.beh_index = this.type.getBehaviorIndexByName(m[2]);; } else { this.behaviortype = null; this.beh_index = -1; } } this.sid = m[3]; this.runtime.actsBySid[this.sid.toString()] = this; if (m.length === 6) { var i, len; var em = m[5]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Action.prototype.postInit = function() { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; Action.prototype.run_system = function() { var runtime = this.runtime; var i, len; var parameters = this.parameters; var results = this.results; for (i = 0, len = parameters.length; i < len; ++i) results[i] = parameters[i].get(); return this.func.apply(runtime.system, results); }; Action.prototype.run_object = function() { var type = this.type; var beh_index = this.beh_index; var family_index = type.family_index; var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var func = this.func; var instances = type.getCurrentSol().getObjects(); var is_family = type.is_family; var is_beh = (beh_index > -1); var i, j, leni, lenj, p, inst, offset; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } for (i = 0, leni = instances.length; i < leni; ++i) { inst = instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // pass i to use as default SOL index } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } func.apply(inst.behavior_insts[beh_index + offset], results); } else func.apply(inst, results); } return false; }; cr.action = Action; var tempValues = []; var tempValuesPtr = -1; function pushTempValue() { tempValuesPtr++; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; function popTempValue() { tempValuesPtr--; }; function Parameter(owner, m) { this.owner = owner; this.block = owner.block; this.sheet = owner.sheet; this.runtime = owner.runtime; this.type = m[0]; this.expression = null; this.solindex = 0; this.get = null; this.combosel = 0; this.layout = null; this.key = 0; this.object = null; this.index = 0; this.varname = null; this.eventvar = null; this.fileinfo = null; this.subparams = null; this.variadicret = null; this.subparams = null; this.variadicret = null; this.variesPerInstance = false; var i, len, param; switch (m[0]) { case 0: // number case 7: // any this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp; break; case 1: // string this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp_str; break; case 5: // layer this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_layer; break; case 3: // combo case 8: // cmp this.combosel = m[1]; this.get = this.get_combosel; break; case 6: // layout this.layout = this.runtime.layouts[m[1]];; this.get = this.get_layout; break; case 9: // keyb this.key = m[1]; this.get = this.get_key; break; case 4: // object this.object = this.runtime.types_by_index[m[1]];; this.get = this.get_object; this.block.addSolModifier(this.object); if (this.owner instanceof cr.action) this.block.setSolWriterAfterCnds(); else if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); break; case 10: // instvar this.index = m[1]; if (owner.type && owner.type.is_family) { this.get = this.get_familyvar; this.variesPerInstance = true; } else this.get = this.get_instvar; break; case 11: // eventvar this.varname = m[1]; this.eventvar = null; this.get = this.get_eventvar; break; case 2: // audiofile ["name", ismusic] case 12: // fileinfo "name" this.fileinfo = m[1]; this.get = this.get_audiofile; break; case 13: // variadic this.get = this.get_variadic; this.subparams = []; this.variadicret = []; for (i = 1, len = m.length; i < len; i++) { param = new cr.parameter(this.owner, m[i]); cr.seal(param); this.subparams.push(param); this.variadicret.push(0); } break; default: ; } }; Parameter.prototype.postInit = function() { var i, len; if (this.type === 11) // eventvar { this.eventvar = this.runtime.getEventVariableByName(this.varname, this.block.parent);; } else if (this.type === 13) // variadic, postInit all sub-params { for (i = 0, len = this.subparams.length; i < len; i++) this.subparams[i].postInit(); } if (this.expression) this.expression.postInit(); }; Parameter.prototype.maybeVaryForType = function(t) { if (this.variesPerInstance) return; // already varies per instance, no need to check again if (!t) return; // never vary for system type if (!t.plugin.singleglobal) { this.variesPerInstance = true; return; } }; Parameter.prototype.setVaries = function() { this.variesPerInstance = true; }; Parameter.prototype.get_exp = function(solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); return temp.data; // return actual JS value, not expvalue }; Parameter.prototype.get_exp_str = function(solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); if (cr.is_string(temp.data)) return temp.data; else return ""; }; Parameter.prototype.get_object = function() { return this.object; }; Parameter.prototype.get_combosel = function() { return this.combosel; }; Parameter.prototype.get_layer = function(solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = pushTempValue(); this.expression.get(temp); popTempValue(); if (temp.is_number()) return this.runtime.getLayerByNumber(temp.data); else return this.runtime.getLayerByName(temp.data); } Parameter.prototype.get_layout = function() { return this.layout; }; Parameter.prototype.get_key = function() { return this.key; }; Parameter.prototype.get_instvar = function() { return this.index; }; Parameter.prototype.get_familyvar = function(solindex_) { var solindex = solindex_ || 0; var familytype = this.owner.type; var realtype = null; var sol = familytype.getCurrentSol(); var objs = sol.getObjects(); if (objs.length) realtype = objs[solindex % objs.length].type; else if (sol.else_instances.length) realtype = sol.else_instances[solindex % sol.else_instances.length].type; else if (familytype.instances.length) realtype = familytype.instances[solindex % familytype.instances.length].type; else return 0; return this.index + realtype.family_var_map[familytype.family_index]; }; Parameter.prototype.get_eventvar = function() { return this.eventvar; }; Parameter.prototype.get_audiofile = function() { return this.fileinfo; }; Parameter.prototype.get_variadic = function() { var i, len; for (i = 0, len = this.subparams.length; i < len; i++) { this.variadicret[i] = this.subparams[i].get(); } return this.variadicret; }; cr.parameter = Parameter; function EventVariable(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.name = m[1]; this.vartype = m[2]; this.initial = m[3]; this.is_static = !!m[4]; this.is_constant = !!m[5]; this.sid = m[6]; this.runtime.varsBySid[this.sid.toString()] = this; this.data = this.initial; // note: also stored in event stack frame for local nonstatic nonconst vars if (this.parent) // local var { if (this.is_static || this.is_constant) this.localIndex = -1; else this.localIndex = this.runtime.stackLocalCount++; this.runtime.all_local_vars.push(this); } else // global var { this.localIndex = -1; this.runtime.all_global_vars.push(this); } }; EventVariable.prototype.postInit = function() { this.solModifiers = findMatchingSolModifier(this.solModifiers); }; EventVariable.prototype.setValue = function(x) {; var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs) this.data = x; else // local nonstatic variable: use event stack to keep value at this level of recursion { if (this.localIndex >= lvs.length) lvs.length = this.localIndex + 1; lvs[this.localIndex] = x; } }; EventVariable.prototype.getValue = function() { var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs || this.is_constant) return this.data; else // local nonstatic variable { if (this.localIndex >= lvs.length) { return this.initial; } if (typeof lvs[this.localIndex] === "undefined") { return this.initial; } return lvs[this.localIndex]; } }; EventVariable.prototype.run = function() { if (this.parent && !this.is_static && !this.is_constant) this.setValue(this.initial); }; cr.eventvariable = EventVariable; function EventInclude(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.include_sheet = null; // determined in postInit this.include_sheet_name = m[1]; this.active = true; }; EventInclude.prototype.toString = function() { return "include:" + this.include_sheet.toString(); }; EventInclude.prototype.postInit = function() { this.include_sheet = this.runtime.eventsheets[this.include_sheet_name];;; this.sheet.includes.add(this); this.solModifiers = findMatchingSolModifier(this.solModifiers); var p = this.parent; while (p) { if (p.group) p.contained_includes.push(this); p = p.parent; } this.updateActive(); }; EventInclude.prototype.run = function() { if (this.parent) this.runtime.pushCleanSol(this.runtime.types_by_index); if (!this.include_sheet.hasRun) this.include_sheet.run(true); // from include if (this.parent) this.runtime.popSol(this.runtime.types_by_index); }; EventInclude.prototype.updateActive = function() { var p = this.parent; while (p) { if (p.group && !p.group_active) { this.active = false; return; } p = p.parent; } this.active = true; }; EventInclude.prototype.isActive = function() { return this.active; }; cr.eventinclude = EventInclude; function EventStackFrame() { this.temp_parents_arr = []; this.reset(null); cr.seal(this); }; EventStackFrame.prototype.reset = function(cur_event) { this.current_event = cur_event; this.cndindex = 0; this.actindex = 0; cr.clearArray(this.temp_parents_arr); this.last_event_true = false; this.else_branch_ran = false; this.any_true_state = false; }; EventStackFrame.prototype.isModifierAfterCnds = function() { if (this.current_event.solWriterAfterCnds) return true; if (this.cndindex < this.current_event.conditions.length - 1) return !!this.current_event.solModifiers.length; return false; }; cr.eventStackFrame = EventStackFrame; }()); (function() { function ExpNode(owner_, m) { this.owner = owner_; this.runtime = owner_.runtime; this.type = m[0];; this.get = [this.eval_int, this.eval_float, this.eval_string, this.eval_unaryminus, this.eval_add, this.eval_subtract, this.eval_multiply, this.eval_divide, this.eval_mod, this.eval_power, this.eval_and, this.eval_or, this.eval_equal, this.eval_notequal, this.eval_less, this.eval_lessequal, this.eval_greater, this.eval_greaterequal, this.eval_conditional, this.eval_system_exp, this.eval_object_exp, this.eval_instvar_exp, this.eval_behavior_exp, this.eval_eventvar_exp ][this.type]; var paramsModel = null; this.value = null; this.first = null; this.second = null; this.third = null; this.func = null; this.results = null; this.parameters = null; this.object_type = null; this.beh_index = -1; this.instance_expr = null; this.varindex = -1; this.behavior_type = null; this.varname = null; this.eventvar = null; this.return_string = false; switch (this.type) { case 0: // int case 1: // float case 2: // string this.value = m[1]; break; case 3: // unaryminus this.first = new cr.expNode(owner_, m[1]); break; case 18: // conditional this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); this.third = new cr.expNode(owner_, m[3]); break; case 19: // system_exp this.func = this.runtime.GetObjectReference(m[1]);; if (this.func === cr.system_object.prototype.exps.random || this.func === cr.system_object.prototype.exps.choose) { this.owner.setVaries(); } this.results = []; this.parameters = []; if (m.length === 3) { paramsModel = m[2]; this.results.length = paramsModel.length + 1; // must also fit 'ret' } else this.results.length = 1; // to fit 'ret' break; case 20: // object_exp this.object_type = this.runtime.types_by_index[m[1]];; this.beh_index = -1; this.func = this.runtime.GetObjectReference(m[2]); this.return_string = m[3]; if (cr.plugins_.Function && this.func === cr.plugins_.Function.prototype.exps.Call) { this.owner.setVaries(); } if (m[4]) this.instance_expr = new cr.expNode(owner_, m[4]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 6) { paramsModel = m[5]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 21: // instvar_exp this.object_type = this.runtime.types_by_index[m[1]];; this.return_string = m[2]; if (m[3]) this.instance_expr = new cr.expNode(owner_, m[3]); else this.instance_expr = null; this.varindex = m[4]; break; case 22: // behavior_exp this.object_type = this.runtime.types_by_index[m[1]];; this.behavior_type = this.object_type.getBehaviorByName(m[2]);; this.beh_index = this.object_type.getBehaviorIndexByName(m[2]); this.func = this.runtime.GetObjectReference(m[3]); this.return_string = m[4]; if (m[5]) this.instance_expr = new cr.expNode(owner_, m[5]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 7) { paramsModel = m[6]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 23: // eventvar_exp this.varname = m[1]; this.eventvar = null; // assigned in postInit break; } this.owner.maybeVaryForType(this.object_type); if (this.type >= 4 && this.type <= 17) { this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); } if (paramsModel) { var i, len; for (i = 0, len = paramsModel.length; i < len; i++) this.parameters.push(new cr.expNode(owner_, paramsModel[i])); } cr.seal(this); }; ExpNode.prototype.postInit = function() { if (this.type === 23) // eventvar_exp { this.eventvar = this.owner.runtime.getEventVariableByName(this.varname, this.owner.block.parent);; } if (this.first) this.first.postInit(); if (this.second) this.second.postInit(); if (this.third) this.third.postInit(); if (this.instance_expr) this.instance_expr.postInit(); if (this.parameters) { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.parameters[i].postInit(); } }; var tempValues = []; var tempValuesPtr = -1; function pushTempValue() { ++tempValuesPtr; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; function popTempValue() { --tempValuesPtr; }; function eval_params(parameters, results, temp) { var i, len; for (i = 0, len = parameters.length; i < len; ++i) { parameters[i].get(temp); results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue } } ExpNode.prototype.eval_system_exp = function(ret) { var parameters = this.parameters; var results = this.results; results[0] = ret; var temp = pushTempValue(); eval_params(parameters, results, temp); popTempValue(); this.func.apply(this.runtime.system, results); }; ExpNode.prototype.eval_object_exp = function(ret) { var object_type = this.object_type; var results = this.results; var parameters = this.parameters; var instance_expr = this.instance_expr; var func = this.func; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } results[0] = ret; ret.object_class = object_type; // so expression can access family type if need be var temp = pushTempValue(); eval_params(parameters, results, temp); if (instance_expr) { instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = object_type.instances; // pick from all instances, not SOL } } popTempValue(); var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; var returned_val = func.apply(instances[index], results);; }; ExpNode.prototype.eval_behavior_exp = function(ret) { var object_type = this.object_type; var results = this.results; var parameters = this.parameters; var instance_expr = this.instance_expr; var beh_index = this.beh_index; var func = this.func; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } results[0] = ret; ret.object_class = object_type; // so expression can access family type if need be var temp = pushTempValue(); eval_params(parameters, results, temp); if (instance_expr) { instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = object_type.instances; // pick from all instances, not SOL } } popTempValue(); var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; var inst = instances[index]; var offset = 0; if (object_type.is_family) { offset = inst.type.family_beh_map[object_type.family_index]; } var returned_val = func.apply(inst.behavior_insts[beh_index + offset], results);; }; ExpNode.prototype.eval_instvar_exp = function(ret) { var instance_expr = this.instance_expr; var object_type = this.object_type; var varindex = this.varindex; var index = this.owner.solindex; // default to parameter's intended SOL index var sol = object_type.getCurrentSol(); var instances = sol.getObjects(); var inst; if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } if (instance_expr) { var temp = pushTempValue(); instance_expr.get(temp); if (temp.is_number()) { index = temp.data; var type_instances = object_type.instances; if (type_instances.length !== 0) // avoid NaN result with % { index %= type_instances.length; // wraparound if (index < 0) // offset index += type_instances.length; } inst = object_type.getInstanceByIID(index); var to_ret = inst.instance_vars[varindex]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); popTempValue(); return; // done } popTempValue(); } var len = instances.length; if (index >= len || index <= -len) index %= len; // wraparound if (index < 0) index += len; inst = instances[index]; var offset = 0; if (object_type.is_family) { offset = inst.type.family_var_map[object_type.family_index]; } var to_ret = inst.instance_vars[varindex + offset]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); }; ExpNode.prototype.eval_int = function(ret) { ret.type = cr.exptype.Integer; ret.data = this.value; }; ExpNode.prototype.eval_float = function(ret) { ret.type = cr.exptype.Float; ret.data = this.value; }; ExpNode.prototype.eval_string = function(ret) { ret.type = cr.exptype.String; ret.data = this.value; }; ExpNode.prototype.eval_unaryminus = function(ret) { this.first.get(ret); // retrieve operand if (ret.is_number()) ret.data = -ret.data; }; ExpNode.prototype.eval_add = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data += temp.data; // both operands numbers: add if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_subtract = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data -= temp.data; // both operands numbers: subtract if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_multiply = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data *= temp.data; // both operands numbers: multiply if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_divide = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data /= temp.data; // both operands numbers: divide ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_mod = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data %= temp.data; // both operands numbers: modulo if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_power = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data = Math.pow(ret.data, temp.data); // both operands numbers: raise to power if (temp.is_float()) ret.make_float(); } popTempValue(); }; ExpNode.prototype.eval_and = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (temp.is_string() || ret.is_string()) this.eval_and_stringconcat(ret, temp); else this.eval_and_logical(ret, temp); popTempValue(); }; ExpNode.prototype.eval_and_stringconcat = function(ret, temp) { if (ret.is_string() && temp.is_string()) this.eval_and_stringconcat_str_str(ret, temp); else this.eval_and_stringconcat_num(ret, temp); }; ExpNode.prototype.eval_and_stringconcat_str_str = function(ret, temp) { ret.data += temp.data; }; ExpNode.prototype.eval_and_stringconcat_num = function(ret, temp) { if (ret.is_string()) { ret.data += (Math.round(temp.data * 1e10) / 1e10).toString(); } else { ret.set_string(ret.data.toString() + temp.data); } }; ExpNode.prototype.eval_and_logical = function(ret, temp) { ret.set_int(ret.data && temp.data ? 1 : 0); }; ExpNode.prototype.eval_or = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { if (ret.data || temp.data) ret.set_int(1); else ret.set_int(0); } popTempValue(); }; ExpNode.prototype.eval_conditional = function(ret) { this.first.get(ret); // condition operand if (ret.data) // is true this.second.get(ret); // evaluate second operand to ret else this.third.get(ret); // evaluate third operand to ret }; ExpNode.prototype.eval_equal = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data === temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_notequal = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data !== temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_less = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data < temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_lessequal = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data <= temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_greater = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data > temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_greaterequal = function(ret) { this.first.get(ret); // left operand var temp = pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data >= temp.data ? 1 : 0); popTempValue(); }; ExpNode.prototype.eval_eventvar_exp = function(ret) { var val = this.eventvar.getValue(); if (cr.is_number(val)) ret.set_float(val); else ret.set_string(val); }; cr.expNode = ExpNode; function ExpValue(type, data) { this.type = type || cr.exptype.Integer; this.data = data || 0; this.object_class = null;;;; if (this.type == cr.exptype.Integer) this.data = Math.floor(this.data); cr.seal(this); }; ExpValue.prototype.is_int = function() { return this.type === cr.exptype.Integer; }; ExpValue.prototype.is_float = function() { return this.type === cr.exptype.Float; }; ExpValue.prototype.is_number = function() { return this.type === cr.exptype.Integer || this.type === cr.exptype.Float; }; ExpValue.prototype.is_string = function() { return this.type === cr.exptype.String; }; ExpValue.prototype.make_int = function() { if (!this.is_int()) { if (this.is_float()) this.data = Math.floor(this.data); // truncate float else if (this.is_string()) this.data = parseInt(this.data, 10); this.type = cr.exptype.Integer; } }; ExpValue.prototype.make_float = function() { if (!this.is_float()) { if (this.is_string()) this.data = parseFloat(this.data); this.type = cr.exptype.Float; } }; ExpValue.prototype.make_string = function() { if (!this.is_string()) { this.data = this.data.toString(); this.type = cr.exptype.String; } }; ExpValue.prototype.set_int = function(val) {; this.type = cr.exptype.Integer; this.data = Math.floor(val); }; ExpValue.prototype.set_float = function(val) {; this.type = cr.exptype.Float; this.data = val; }; ExpValue.prototype.set_string = function(val) {; this.type = cr.exptype.String; this.data = val; }; ExpValue.prototype.set_any = function(val) { if (cr.is_number(val)) { this.type = cr.exptype.Float; this.data = val; } else if (cr.is_string(val)) { this.type = cr.exptype.String; this.data = val.toString(); } else { this.type = cr.exptype.Integer; this.data = 0; } }; cr.expvalue = ExpValue; cr.exptype = { Integer: 0, // emulated; no native integer support in javascript Float: 1, String: 2 }; }());; cr.system_object = function(runtime) { this.runtime = runtime; this.waits = []; }; cr.system_object.prototype.saveToJSON = function() { var o = {}; var i, len, j, lenj, p, w, t, sobj; o["waits"] = []; var owaits = o["waits"]; var waitobj; for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; waitobj = { "t": w.time, "st": w.signaltag, "s": w.signalled, "ev": w.ev.sid, "sm": [], "sols": {} }; if (w.ev.actions[w.actindex]) waitobj["act"] = w.ev.actions[w.actindex].sid; for (j = 0, lenj = w.solModifiers.length; j < lenj; j++) waitobj["sm"].push(w.solModifiers[j].sid); for (p in w.sols) { if (w.sols.hasOwnProperty(p)) { t = this.runtime.types_by_index[parseInt(p, 10)];; sobj = { "sa": w.sols[p].sa, "insts": [] }; for (j = 0, lenj = w.sols[p].insts.length; j < lenj; j++) sobj["insts"].push(w.sols[p].insts[j].uid); waitobj["sols"][t.sid.toString()] = sobj; } } owaits.push(waitobj); } return o; }; cr.system_object.prototype.loadFromJSON = function(o) { var owaits = o["waits"]; var i, len, j, lenj, p, w, addWait, e, aindex, t, savedsol, nusol, inst; cr.clearArray(this.waits); for (i = 0, len = owaits.length; i < len; i++) { w = owaits[i]; e = this.runtime.blocksBySid[w["ev"].toString()]; if (!e) continue; // event must've gone missing aindex = -1; for (j = 0, lenj = e.actions.length; j < lenj; j++) { if (e.actions[j].sid === w["act"]) { aindex = j; break; } } if (aindex === -1) continue; // action must've gone missing addWait = {}; addWait.sols = {}; addWait.solModifiers = []; addWait.deleteme = false; addWait.time = w["t"]; addWait.signaltag = w["st"] || ""; addWait.signalled = !!w["s"]; addWait.ev = e; addWait.actindex = aindex; for (j = 0, lenj = w["sm"].length; j < lenj; j++) { t = this.runtime.getObjectTypeBySid(w["sm"][j]); if (t) addWait.solModifiers.push(t); } for (p in w["sols"]) { if (w["sols"].hasOwnProperty(p)) { t = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!t) continue; // type must've been deleted savedsol = w["sols"][p]; nusol = { sa: savedsol["sa"], insts: [] }; for (j = 0, lenj = savedsol["insts"].length; j < lenj; j++) { inst = this.runtime.getObjectByUID(savedsol["insts"][j]); if (inst) nusol.insts.push(inst); } addWait.sols[t.index.toString()] = nusol; } } this.waits.push(addWait); } }; (function() { var sysProto = cr.system_object.prototype; function SysCnds() {}; SysCnds.prototype.EveryTick = function() { return true; }; SysCnds.prototype.OnLayoutStart = function() { return true; }; SysCnds.prototype.OnLayoutEnd = function() { return true; }; SysCnds.prototype.Compare = function(x, cmp, y) { return cr.do_cmp(x, cmp, y); }; SysCnds.prototype.CompareTime = function(cmp, t) { var elapsed = this.runtime.kahanTime.sum; if (cmp === 0) { var cnd = this.runtime.getCurrentCondition(); if (!cnd.extra["CompareTime_executed"]) { if (elapsed >= t) { cnd.extra["CompareTime_executed"] = true; return true; } } return false; } return cr.do_cmp(elapsed, cmp, t); }; SysCnds.prototype.LayerVisible = function(layer) { if (!layer) return false; else return layer.visible; }; SysCnds.prototype.LayerEmpty = function(layer) { if (!layer) return false; else return !layer.instances.length; }; SysCnds.prototype.LayerCmpOpacity = function(layer, cmp, opacity_) { if (!layer) return false; return cr.do_cmp(layer.opacity * 100, cmp, opacity_); }; SysCnds.prototype.Repeat = function(count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; i < count && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; i < count && !current_loop.stopped; i++) { current_loop.index = i; current_event.retrigger(); } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.While = function(count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; if (!current_event.retrigger()) // one of the other conditions returned false current_loop.stopped = true; // break this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; !current_loop.stopped; i++) { current_loop.index = i; if (!current_event.retrigger()) current_loop.stopped = true; } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.For = function(name, start, end) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(name); var i; if (end < start) { if (solModifierAfterCnds) { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } else { if (solModifierAfterCnds) { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } this.runtime.popLoopStack(); return false; }; var foreach_instancestack = []; var foreach_instanceptr = -1; SysCnds.prototype.ForEach = function(obj) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } cr.clearArray(instances); this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; function foreach_sortinstances(a, b) { var va = a.extra["c2_feo_val"]; var vb = b.extra["c2_feo_val"]; if (cr.is_number(va) && cr.is_number(vb)) return va - vb; else { va = "" + va; vb = "" + vb; if (va < vb) return -1; else if (va > vb) return 1; else return 0; } }; SysCnds.prototype.ForEachOrdered = function(obj, exp, order) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var current_condition = this.runtime.getCurrentCondition(); var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; for (i = 0, len = instances.length; i < len; i++) { instances[i].extra["c2_feo_val"] = current_condition.parameters[1].get(i); } instances.sort(foreach_sortinstances); if (order === 1) instances.reverse(); var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; cr.clearArray(sol2.instances); sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } cr.clearArray(instances); this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; SysCnds.prototype.PickByComparison = function(obj_, exp_, cmp_, val_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) cr.clearArray(sol.else_instances); var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); val_ = current_condition.parameters[3].get(i); if (cr.do_cmp(exp_, cmp_, val_)) { k++; } else { sol.else_instances.push(inst); } } cr.truncateArray(tmp_instances, k); sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); cr.clearArray(tmp_instances); foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.PickByEvaluate = function(obj_, exp_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) cr.clearArray(sol.else_instances); var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); if (exp_) { k++; } else { sol.else_instances.push(inst); } } cr.truncateArray(tmp_instances, k); sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); cr.clearArray(tmp_instances); foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.TriggerOnce = function() { var cndextra = this.runtime.getCurrentCondition().extra; if (typeof cndextra["TriggerOnce_lastTick"] === "undefined") cndextra["TriggerOnce_lastTick"] = -1; var last_tick = cndextra["TriggerOnce_lastTick"]; var cur_tick = this.runtime.tickcount; cndextra["TriggerOnce_lastTick"] = cur_tick; return this.runtime.layout_first_tick || last_tick !== cur_tick - 1; }; SysCnds.prototype.Every = function(seconds) { var cnd = this.runtime.getCurrentCondition(); var last_time = cnd.extra["Every_lastTime"] || 0; var cur_time = this.runtime.kahanTime.sum; if (typeof cnd.extra["Every_seconds"] === "undefined") cnd.extra["Every_seconds"] = seconds; var this_seconds = cnd.extra["Every_seconds"]; if (cur_time >= last_time + this_seconds) { cnd.extra["Every_lastTime"] = last_time + this_seconds; if (cur_time >= cnd.extra["Every_lastTime"] + 0.04) { cnd.extra["Every_lastTime"] = cur_time; } cnd.extra["Every_seconds"] = seconds; return true; } else if (cur_time < last_time - 0.1) { cnd.extra["Every_lastTime"] = cur_time; } return false; }; SysCnds.prototype.PickNth = function(obj, index) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); index = cr.floor(index); if (index < 0 || index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.PickRandom = function(obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var index = cr.floor(Math.random() * instances.length); if (index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.CompareVar = function(v, cmp, val) { return cr.do_cmp(v.getValue(), cmp, val); }; SysCnds.prototype.IsGroupActive = function(group) { var g = this.runtime.groups_by_name[group.toLowerCase()]; return g && g.group_active; }; SysCnds.prototype.IsPreview = function() { return typeof cr_is_preview !== "undefined"; }; SysCnds.prototype.PickAll = function(obj) { if (!obj) return false; if (!obj.instances.length) return false; var sol = obj.getCurrentSol(); sol.select_all = true; obj.applySolToContainer(); return true; }; SysCnds.prototype.IsMobile = function() { return this.runtime.isMobile; }; SysCnds.prototype.CompareBetween = function(x, a, b) { return x >= a && x <= b; }; SysCnds.prototype.Else = function() { var current_frame = this.runtime.getCurrentEventStack(); if (current_frame.else_branch_ran) return false; // another event in this else-if chain has run else return !current_frame.last_event_true; /* var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var prev_event = current_event.prev_block; if (!prev_event) return false; if (prev_event.is_logical) return !this.runtime.last_event_true; var i, len, j, lenj, s, sol, temp, inst, any_picked = false; for (i = 0, len = prev_event.cndReferences.length; i < len; i++) { s = prev_event.cndReferences[i]; sol = s.getCurrentSol(); if (sol.select_all || sol.instances.length === s.instances.length) { sol.select_all = false; sol.instances.length = 0; } else { if (sol.instances.length === 1 && sol.else_instances.length === 0 && s.instances.length >= 2) { inst = sol.instances[0]; sol.instances.length = 0; for (j = 0, lenj = s.instances.length; j < lenj; j++) { if (s.instances[j] != inst) sol.instances.push(s.instances[j]); } any_picked = true; } else { temp = sol.instances; sol.instances = sol.else_instances; sol.else_instances = temp; any_picked = true; } } } return any_picked; */ }; SysCnds.prototype.OnLoadFinished = function() { return true; }; SysCnds.prototype.OnCanvasSnapshot = function() { return true; }; SysCnds.prototype.EffectsSupported = function() { return !!this.runtime.glwrap; }; SysCnds.prototype.OnSaveComplete = function() { return true; }; SysCnds.prototype.OnSaveFailed = function() { return true; }; SysCnds.prototype.OnLoadComplete = function() { return true; }; SysCnds.prototype.OnLoadFailed = function() { return true; }; SysCnds.prototype.ObjectUIDExists = function(u) { return !!this.runtime.getObjectByUID(u); }; SysCnds.prototype.IsOnPlatform = function(p) { var rt = this.runtime; switch (p) { case 0: // HTML5 website return !rt.isDomFree && !rt.isNodeWebkit && !rt.isCordova && !rt.isWinJS && !rt.isWindowsPhone8 && !rt.isBlackberry10 && !rt.isAmazonWebApp; case 1: // iOS return rt.isiOS; case 2: // Android return rt.isAndroid; case 3: // Windows 8 return rt.isWindows8App; case 4: // Windows Phone 8 return rt.isWindowsPhone8; case 5: // Blackberry 10 return rt.isBlackberry10; case 6: // Tizen return rt.isTizen; case 7: // CocoonJS return rt.isCocoonJs; case 8: // Cordova return rt.isCordova; case 9: // Scirra Arcade return rt.isArcade; case 10: // node-webkit return rt.isNodeWebkit; case 11: // crosswalk return rt.isCrosswalk; case 12: // amazon webapp return rt.isAmazonWebApp; case 13: // windows 10 app return rt.isWindows10; default: // should not be possible return false; } }; var cacheRegex = null; var lastRegex = ""; var lastFlags = ""; function getRegex(regex_, flags_) { if (!cacheRegex || regex_ !== lastRegex || flags_ !== lastFlags) { cacheRegex = new RegExp(regex_, flags_); lastRegex = regex_; lastFlags = flags_; } cacheRegex.lastIndex = 0; // reset return cacheRegex; }; SysCnds.prototype.RegexTest = function(str_, regex_, flags_) { var regex = getRegex(regex_, flags_); return regex.test(str_); }; var tmp_arr = []; SysCnds.prototype.PickOverlappingPoint = function(obj_, x_, y_) { if (!obj_) return false; var sol = obj_.getCurrentSol(); var instances = sol.getObjects(); var current_event = this.runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; var cnd = this.runtime.getCurrentCondition(); var i, len, inst, pick; if (sol.select_all) { cr.shallowAssignArray(tmp_arr, instances); cr.clearArray(sol.else_instances); sol.select_all = false; cr.clearArray(sol.instances); } else { if (orblock) { cr.shallowAssignArray(tmp_arr, sol.else_instances); cr.clearArray(sol.else_instances); } else { cr.shallowAssignArray(tmp_arr, instances); cr.clearArray(sol.instances); } } for (i = 0, len = tmp_arr.length; i < len; ++i) { inst = tmp_arr[i]; inst.update_bbox(); pick = cr.xor(inst.contains_pt(x_, y_), cnd.inverted); if (pick) sol.instances.push(inst); else sol.else_instances.push(inst); } obj_.applySolToContainer(); return cr.xor(!!sol.instances.length, cnd.inverted); }; SysCnds.prototype.IsNaN = function(n) { return !!isNaN(n); }; SysCnds.prototype.AngleWithin = function(a1, within, a2) { return cr.angleDiff(cr.to_radians(a1), cr.to_radians(a2)) <= cr.to_radians(within); }; SysCnds.prototype.IsClockwiseFrom = function(a1, a2) { return cr.angleClockwise(cr.to_radians(a1), cr.to_radians(a2)); }; SysCnds.prototype.IsBetweenAngles = function(a, la, ua) { var angle = cr.to_clamped_radians(a); var lower = cr.to_clamped_radians(la); var upper = cr.to_clamped_radians(ua); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; SysCnds.prototype.IsValueType = function(x, t) { if (typeof x === "number") return t === 0; else // string return t === 1; }; sysProto.cnds = new SysCnds(); function SysActs() {}; SysActs.prototype.GoToLayout = function(to) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout ; this.runtime.changelayout = to; }; SysActs.prototype.NextPrevLayout = function(prev) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout var index = this.runtime.layouts_by_index.indexOf(this.runtime.running_layout); if (prev && index === 0) return; // cannot go to previous layout from first layout if (!prev && index === this.runtime.layouts_by_index.length - 1) return; // cannot go to next layout from last layout var to = this.runtime.layouts_by_index[index + (prev ? -1 : 1)];; this.runtime.changelayout = to; }; SysActs.prototype.CreateObject = function(obj, layer, x, y) { if (!layer || !obj) return; var inst = this.runtime.createInstance(obj, layer, x, y); if (!inst) return; this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var sol = obj.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = inst; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; cr.clearArray(sol.instances); sol.instances[0] = s; } } }; SysActs.prototype.SetLayerVisible = function(layer, visible_) { if (!layer) return; if (layer.visible !== visible_) { layer.visible = visible_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerOpacity = function(layer, opacity_) { if (!layer) return; opacity_ = cr.clamp(opacity_ / 100, 0, 1); if (layer.opacity !== opacity_) { layer.opacity = opacity_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerScaleRate = function(layer, sr) { if (!layer) return; if (layer.zoomRate !== sr) { layer.zoomRate = sr; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerForceOwnTexture = function(layer, f) { if (!layer) return; f = !!f; if (layer.forceOwnTexture !== f) { layer.forceOwnTexture = f; this.runtime.redraw = true; } }; SysActs.prototype.SetLayoutScale = function(s) { if (!this.runtime.running_layout) return; if (this.runtime.running_layout.scale !== s) { this.runtime.running_layout.scale = s; this.runtime.running_layout.boundScrolling(); this.runtime.redraw = true; } }; SysActs.prototype.ScrollX = function(x) { this.runtime.running_layout.scrollToX(x); }; SysActs.prototype.ScrollY = function(y) { this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.Scroll = function(x, y) { this.runtime.running_layout.scrollToX(x); this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.ScrollToObject = function(obj) { var inst = obj.getFirstPicked(); if (inst) { this.runtime.running_layout.scrollToX(inst.x); this.runtime.running_layout.scrollToY(inst.y); } }; SysActs.prototype.SetVar = function(v, x) {; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(x); else v.setValue(parseFloat(x)); } else if (v.vartype === 1) v.setValue(x.toString()); }; SysActs.prototype.AddVar = function(v, x) {; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() + x); else v.setValue(v.getValue() + parseFloat(x)); } else if (v.vartype === 1) v.setValue(v.getValue() + x.toString()); }; SysActs.prototype.SubVar = function(v, x) {; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() - x); else v.setValue(v.getValue() - parseFloat(x)); } }; SysActs.prototype.SetGroupActive = function(group, active) { var g = this.runtime.groups_by_name[group.toLowerCase()]; if (!g) return; switch (active) { case 0: g.setGroupActive(false); break; case 1: g.setGroupActive(true); break; case 2: g.setGroupActive(!g.group_active); break; } }; SysActs.prototype.SetTimescale = function(ts_) { var ts = ts_; if (ts < 0) ts = 0; this.runtime.timescale = ts; }; SysActs.prototype.SetObjectTimescale = function(obj, ts_) { var ts = ts_; if (ts < 0) ts = 0; if (!obj) return; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = ts; } }; SysActs.prototype.RestoreObjectTimescale = function(obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = -1.0; } }; var waitobjrecycle = []; function allocWaitObject() { var w; if (waitobjrecycle.length) w = waitobjrecycle.pop(); else { w = {}; w.sols = {}; w.solModifiers = []; } w.deleteme = false; return w; }; function freeWaitObject(w) { cr.wipe(w.sols); cr.clearArray(w.solModifiers); waitobjrecycle.push(w); }; var solstateobjects = []; function allocSolStateObject() { var s; if (solstateobjects.length) s = solstateobjects.pop(); else { s = {}; s.insts = []; } s.sa = false; return s; }; function freeSolStateObject(s) { cr.clearArray(s.insts); solstateobjects.push(s); }; SysActs.prototype.Wait = function(seconds) { if (seconds < 0) return; var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = this.runtime.kahanTime.sum + seconds; waitobj.signaltag = ""; waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.WaitForSignal = function(tag) { var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = -1; waitobj.signaltag = tag.toLowerCase(); waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.Signal = function(tag) { var lowertag = tag.toLowerCase(); var i, len, w; for (i = 0, len = this.waits.length; i < len; ++i) { w = this.waits[i]; if (w.time !== -1) continue; // timer wait, ignore if (w.signaltag === lowertag) // waiting for this signal w.signalled = true; // will run on next check } }; SysActs.prototype.SetLayerScale = function(layer, scale) { if (!layer) return; if (layer.scale === scale) return; layer.scale = scale; this.runtime.redraw = true; }; SysActs.prototype.ResetGlobals = function() { var i, len, g; for (i = 0, len = this.runtime.all_global_vars.length; i < len; i++) { g = this.runtime.all_global_vars[i]; g.data = g.initial; } }; SysActs.prototype.SetLayoutAngle = function(a) { a = cr.to_radians(a); a = cr.clamp_angle(a); if (this.runtime.running_layout) { if (this.runtime.running_layout.angle !== a) { this.runtime.running_layout.angle = a; this.runtime.redraw = true; } } }; SysActs.prototype.SetLayerAngle = function(layer, a) { if (!layer) return; a = cr.to_radians(a); a = cr.clamp_angle(a); if (layer.angle === a) return; layer.angle = a; this.runtime.redraw = true; }; SysActs.prototype.SetLayerParallax = function(layer, px, py) { if (!layer) return; if (layer.parallaxX === px / 100 && layer.parallaxY === py / 100) return; layer.parallaxX = px / 100; layer.parallaxY = py / 100; if (layer.parallaxX !== 1 || layer.parallaxY !== 1) { var i, len, instances = layer.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].type.any_instance_parallaxed = true; } } this.runtime.redraw = true; }; SysActs.prototype.SetLayerBackground = function(layer, c) { if (!layer) return; var r = cr.GetRValue(c); var g = cr.GetGValue(c); var b = cr.GetBValue(c); if (layer.background_color[0] === r && layer.background_color[1] === g && layer.background_color[2] === b) return; layer.background_color[0] = r; layer.background_color[1] = g; layer.background_color[2] = b; this.runtime.redraw = true; }; SysActs.prototype.SetLayerTransparent = function(layer, t) { if (!layer) return; if (!!t === !!layer.transparent) return; layer.transparent = !!t; this.runtime.redraw = true; }; SysActs.prototype.SetLayerBlendMode = function(layer, bm) { if (!layer) return; if (layer.blend_mode === bm) return; layer.blend_mode = bm; layer.compositeOp = cr.effectToCompositeOp(layer.blend_mode); if (this.runtime.gl) cr.setGLBlend(layer, layer.blend_mode, this.runtime.gl); this.runtime.redraw = true; }; SysActs.prototype.StopLoop = function() { if (this.runtime.loop_stack_index < 0) return; // no loop currently running this.runtime.getCurrentLoop().stopped = true; }; SysActs.prototype.GoToLayoutByName = function(layoutname) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to different layout ; var l; for (l in this.runtime.layouts) { if (this.runtime.layouts.hasOwnProperty(l) && cr.equals_nocase(l, layoutname)) { this.runtime.changelayout = this.runtime.layouts[l]; return; } } }; SysActs.prototype.RestartLayout = function(layoutname) { if (this.runtime.isloading) return; // cannot restart loader layouts if (this.runtime.changelayout) return; // already changing to a different layout ; if (!this.runtime.running_layout) return; this.runtime.changelayout = this.runtime.running_layout; var i, len, g; for (i = 0, len = this.runtime.allGroups.length; i < len; i++) { g = this.runtime.allGroups[i]; g.setGroupActive(g.initially_activated); } }; SysActs.prototype.SnapshotCanvas = function(format_, quality_) { this.runtime.doCanvasSnapshot(format_ === 0 ? "image/png" : "image/jpeg", quality_ / 100); }; SysActs.prototype.SetCanvasSize = function(w, h) { if (w <= 0 || h <= 0) return; var mode = this.runtime.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.runtime.isNodeFullscreen); if (isfullscreen && this.runtime.fullscreen_scaling > 0) mode = this.runtime.fullscreen_scaling; if (mode === 0) { this.runtime["setSize"](w, h, true); } else { this.runtime.original_width = w; this.runtime.original_height = h; this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); } }; SysActs.prototype.SetLayoutEffectEnabled = function(enable_, effectname_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; this.runtime.running_layout.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectEnabled = function(layer, enable_, effectname_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; layer.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayoutEffectParam = function(effectname_, index_, value_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var params = this.runtime.running_layout.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectParam = function(layer, effectname_, index_, value_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var params = layer.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SaveState = function(slot_) { this.runtime.saveToSlot = slot_; }; SysActs.prototype.LoadState = function(slot_) { this.runtime.loadFromSlot = slot_; }; SysActs.prototype.LoadStateJSON = function(jsonstr_) { this.runtime.loadFromJson = jsonstr_; }; SysActs.prototype.SetHalfFramerateMode = function(set_) { this.runtime.halfFramerateMode = (set_ !== 0); }; SysActs.prototype.SetFullscreenQuality = function(q) { var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen); if (!isfullscreen && this.runtime.fullscreen_mode === 0) return; this.runtime.wantFullscreenScalingQuality = (q !== 0); this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); }; SysActs.prototype.ResetPersisted = function() { var i, len; for (i = 0, len = this.runtime.layouts_by_index.length; i < len; ++i) { this.runtime.layouts_by_index[i].persist_data = {}; this.runtime.layouts_by_index[i].first_visit = true; } }; SysActs.prototype.RecreateInitialObjects = function(obj, x1, y1, x2, y2) { if (!obj) return; this.runtime.running_layout.recreateInitialObjects(obj, x1, y1, x2, y2); }; SysActs.prototype.SetPixelRounding = function(m) { this.runtime.pixel_rounding = (m !== 0); this.runtime.redraw = true; }; SysActs.prototype.SetMinimumFramerate = function(f) { if (f < 1) f = 1; if (f > 120) f = 120; this.runtime.minimumFramerate = f; }; function SortZOrderList(a, b) { var layerA = a[0]; var layerB = b[0]; var diff = layerA - layerB; if (diff !== 0) return diff; var indexA = a[1]; var indexB = b[1]; return indexA - indexB; }; function SortInstancesByValue(a, b) { return a[1] - b[1]; }; SysActs.prototype.SortZOrderByInstVar = function(obj, iv) { if (!obj) return; var i, len, inst, value, r, layer, toZ; var sol = obj.getCurrentSol(); var pickedInstances = sol.getObjects(); var zOrderList = []; var instValues = []; var layout = this.runtime.running_layout; var isFamily = obj.is_family; var familyIndex = obj.family_index; for (i = 0, len = pickedInstances.length; i < len; ++i) { inst = pickedInstances[i]; if (!inst.layer) continue; // not a world instance if (isFamily) value = inst.instance_vars[iv + inst.type.family_var_map[familyIndex]]; else value = inst.instance_vars[iv]; zOrderList.push([ inst.layer.index, inst.get_zindex() ]); instValues.push([ inst, value ]); } if (!zOrderList.length) return; // no instances were world instances zOrderList.sort(SortZOrderList); instValues.sort(SortInstancesByValue); for (i = 0, len = zOrderList.length; i < len; ++i) { inst = instValues[i][0]; // instance in the order we want layer = layout.layers[zOrderList[i][0]]; // layer to put it on toZ = zOrderList[i][1]; // Z index on that layer to put it if (layer.instances[toZ] !== inst) // not already got this instance there { layer.instances[toZ] = inst; // update instance inst.layer = layer; // update instance's layer reference (could have changed) layer.setZIndicesStaleFrom(toZ); // mark Z indices stale from this point since they have changed } } }; sysProto.acts = new SysActs(); function SysExps() {}; SysExps.prototype["int"] = function(ret, x) { if (cr.is_string(x)) { ret.set_int(parseInt(x, 10)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_int(x); }; SysExps.prototype["float"] = function(ret, x) { if (cr.is_string(x)) { ret.set_float(parseFloat(x)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_float(x); }; SysExps.prototype.str = function(ret, x) { if (cr.is_string(x)) ret.set_string(x); else ret.set_string(x.toString()); }; SysExps.prototype.len = function(ret, x) { ret.set_int(x.length || 0); }; SysExps.prototype.random = function(ret, a, b) { if (b === undefined) { ret.set_float(Math.random() * a); } else { ret.set_float(Math.random() * (b - a) + a); } }; SysExps.prototype.sqrt = function(ret, x) { ret.set_float(Math.sqrt(x)); }; SysExps.prototype.abs = function(ret, x) { ret.set_float(Math.abs(x)); }; SysExps.prototype.round = function(ret, x) { ret.set_int(Math.round(x)); }; SysExps.prototype.floor = function(ret, x) { ret.set_int(Math.floor(x)); }; SysExps.prototype.ceil = function(ret, x) { ret.set_int(Math.ceil(x)); }; SysExps.prototype.sin = function(ret, x) { ret.set_float(Math.sin(cr.to_radians(x))); }; SysExps.prototype.cos = function(ret, x) { ret.set_float(Math.cos(cr.to_radians(x))); }; SysExps.prototype.tan = function(ret, x) { ret.set_float(Math.tan(cr.to_radians(x))); }; SysExps.prototype.asin = function(ret, x) { ret.set_float(cr.to_degrees(Math.asin(x))); }; SysExps.prototype.acos = function(ret, x) { ret.set_float(cr.to_degrees(Math.acos(x))); }; SysExps.prototype.atan = function(ret, x) { ret.set_float(cr.to_degrees(Math.atan(x))); }; SysExps.prototype.exp = function(ret, x) { ret.set_float(Math.exp(x)); }; SysExps.prototype.ln = function(ret, x) { ret.set_float(Math.log(x)); }; SysExps.prototype.log10 = function(ret, x) { ret.set_float(Math.log(x) / Math.LN10); }; SysExps.prototype.max = function(ret) { var max_ = arguments[1]; if (typeof max_ !== "number") max_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (max_ < a) max_ = a; } ret.set_float(max_); }; SysExps.prototype.min = function(ret) { var min_ = arguments[1]; if (typeof min_ !== "number") min_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (min_ > a) min_ = a; } ret.set_float(min_); }; SysExps.prototype.dt = function(ret) { ret.set_float(this.runtime.dt); }; SysExps.prototype.timescale = function(ret) { ret.set_float(this.runtime.timescale); }; SysExps.prototype.wallclocktime = function(ret) { ret.set_float((Date.now() - this.runtime.start_time) / 1000.0); }; SysExps.prototype.time = function(ret) { ret.set_float(this.runtime.kahanTime.sum); }; SysExps.prototype.tickcount = function(ret) { ret.set_int(this.runtime.tickcount); }; SysExps.prototype.objectcount = function(ret) { ret.set_int(this.runtime.objectcount); }; SysExps.prototype.fps = function(ret) { ret.set_int(this.runtime.fps); }; SysExps.prototype.loopindex = function(ret, name_) { var loop, i, len; if (!this.runtime.loop_stack.length) { ret.set_int(0); return; } if (name_) { for (i = this.runtime.loop_stack_index; i >= 0; --i) { loop = this.runtime.loop_stack[i]; if (loop.name === name_) { ret.set_int(loop.index); return; } } ret.set_int(0); } else { loop = this.runtime.getCurrentLoop(); ret.set_int(loop ? loop.index : -1); } }; SysExps.prototype.distance = function(ret, x1, y1, x2, y2) { ret.set_float(cr.distanceTo(x1, y1, x2, y2)); }; SysExps.prototype.angle = function(ret, x1, y1, x2, y2) { ret.set_float(cr.to_degrees(cr.angleTo(x1, y1, x2, y2))); }; SysExps.prototype.scrollx = function(ret) { ret.set_float(this.runtime.running_layout.scrollX); }; SysExps.prototype.scrolly = function(ret) { ret.set_float(this.runtime.running_layout.scrollY); }; SysExps.prototype.newline = function(ret) { ret.set_string("\n"); }; SysExps.prototype.lerp = function(ret, a, b, x) { ret.set_float(cr.lerp(a, b, x)); }; SysExps.prototype.qarp = function(ret, a, b, c, x) { ret.set_float(cr.qarp(a, b, c, x)); }; SysExps.prototype.cubic = function(ret, a, b, c, d, x) { ret.set_float(cr.cubic(a, b, c, d, x)); }; SysExps.prototype.cosp = function(ret, a, b, x) { ret.set_float(cr.cosp(a, b, x)); }; SysExps.prototype.windowwidth = function(ret) { ret.set_int(this.runtime.width); }; SysExps.prototype.windowheight = function(ret) { ret.set_int(this.runtime.height); }; SysExps.prototype.uppercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toUpperCase() : ""); }; SysExps.prototype.lowercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toLowerCase() : ""); }; SysExps.prototype.clamp = function(ret, x, l, u) { if (x < l) ret.set_float(l); else if (x > u) ret.set_float(u); else ret.set_float(x); }; SysExps.prototype.layerscale = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.scale); }; SysExps.prototype.layeropacity = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.opacity * 100); }; SysExps.prototype.layerscalerate = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.zoomRate); }; SysExps.prototype.layerparallaxx = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxX * 100); }; SysExps.prototype.layerparallaxy = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxY * 100); }; SysExps.prototype.layerindex = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_int(-1); else ret.set_int(layer.index); }; SysExps.prototype.layoutscale = function(ret) { if (this.runtime.running_layout) ret.set_float(this.runtime.running_layout.scale); else ret.set_float(0); }; SysExps.prototype.layoutangle = function(ret) { ret.set_float(cr.to_degrees(this.runtime.running_layout.angle)); }; SysExps.prototype.layerangle = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(cr.to_degrees(layer.angle)); }; SysExps.prototype.layoutwidth = function(ret) { ret.set_int(this.runtime.running_layout.width); }; SysExps.prototype.layoutheight = function(ret) { ret.set_int(this.runtime.running_layout.height); }; SysExps.prototype.find = function(ret, text, searchstr) { if (cr.is_string(text) && cr.is_string(searchstr)) ret.set_int(text.search(new RegExp(cr.regexp_escape(searchstr), "i"))); else ret.set_int(-1); }; SysExps.prototype.findcase = function(ret, text, searchstr) { if (cr.is_string(text) && cr.is_string(searchstr)) ret.set_int(text.search(new RegExp(cr.regexp_escape(searchstr), ""))); else ret.set_int(-1); }; SysExps.prototype.left = function(ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(0, n) : ""); }; SysExps.prototype.right = function(ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(text.length - n) : ""); }; SysExps.prototype.mid = function(ret, text, index_, length_) { ret.set_string(cr.is_string(text) ? text.substr(index_, length_) : ""); }; SysExps.prototype.tokenat = function(ret, text, index_, sep) { if (cr.is_string(text) && cr.is_string(sep)) { var arr = text.split(sep); var i = cr.floor(index_); if (i < 0 || i >= arr.length) ret.set_string(""); else ret.set_string(arr[i]); } else ret.set_string(""); }; SysExps.prototype.tokencount = function(ret, text, sep) { if (cr.is_string(text) && text.length) ret.set_int(text.split(sep).length); else ret.set_int(0); }; SysExps.prototype.replace = function(ret, text, find_, replace_) { if (cr.is_string(text) && cr.is_string(find_) && cr.is_string(replace_)) ret.set_string(text.replace(new RegExp(cr.regexp_escape(find_), "gi"), replace_)); else ret.set_string(cr.is_string(text) ? text : ""); }; SysExps.prototype.trim = function(ret, text) { ret.set_string(cr.is_string(text) ? text.trim() : ""); }; SysExps.prototype.pi = function(ret) { ret.set_float(cr.PI); }; SysExps.prototype.layoutname = function(ret) { if (this.runtime.running_layout) ret.set_string(this.runtime.running_layout.name); else ret.set_string(""); }; SysExps.prototype.renderer = function(ret) { ret.set_string(this.runtime.gl ? "webgl" : "canvas2d"); }; SysExps.prototype.rendererdetail = function(ret) { ret.set_string(this.runtime.glUnmaskedRenderer); }; SysExps.prototype.anglediff = function(ret, a, b) { ret.set_float(cr.to_degrees(cr.angleDiff(cr.to_radians(a), cr.to_radians(b)))); }; SysExps.prototype.choose = function(ret) { var index = cr.floor(Math.random() * (arguments.length - 1)); ret.set_any(arguments[index + 1]); }; SysExps.prototype.rgb = function(ret, r, g, b) { ret.set_int(cr.RGB(r, g, b)); }; SysExps.prototype.projectversion = function(ret) { ret.set_string(this.runtime.versionstr); }; SysExps.prototype.projectname = function(ret) { ret.set_string(this.runtime.projectName); }; SysExps.prototype.anglelerp = function(ret, a, b, x) { a = cr.to_radians(a); b = cr.to_radians(b); var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { ret.set_float(cr.to_clamped_degrees(a + diff * x)); } else { ret.set_float(cr.to_clamped_degrees(a - diff * x)); } }; SysExps.prototype.anglerotate = function(ret, a, b, c) { a = cr.to_radians(a); b = cr.to_radians(b); c = cr.to_radians(c); ret.set_float(cr.to_clamped_degrees(cr.angleRotate(a, b, c))); }; SysExps.prototype.zeropad = function(ret, n, d) { var s = (n < 0 ? "-" : ""); if (n < 0) n = -n; var zeroes = d - n.toString().length; for (var i = 0; i < zeroes; i++) s += "0"; ret.set_string(s + n.toString()); }; SysExps.prototype.cpuutilisation = function(ret) { ret.set_float(this.runtime.cpuutilisation / 1000); }; SysExps.prototype.viewportleft = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewLeft : 0); }; SysExps.prototype.viewporttop = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewTop : 0); }; SysExps.prototype.viewportright = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewRight : 0); }; SysExps.prototype.viewportbottom = function(ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewBottom : 0); }; SysExps.prototype.loadingprogress = function(ret) { ret.set_float(this.runtime.loadingprogress); }; SysExps.prototype.unlerp = function(ret, a, b, y) { ret.set_float(cr.unlerp(a, b, y)); }; SysExps.prototype.canvassnapshot = function(ret) { ret.set_string(this.runtime.snapshotData); }; SysExps.prototype.urlencode = function(ret, s) { ret.set_string(encodeURIComponent(s)); }; SysExps.prototype.urldecode = function(ret, s) { ret.set_string(decodeURIComponent(s)); }; SysExps.prototype.canvastolayerx = function(ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, true) : 0); }; SysExps.prototype.canvastolayery = function(ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, false) : 0); }; SysExps.prototype.layertocanvasx = function(ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, true) : 0); }; SysExps.prototype.layertocanvasy = function(ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, false) : 0); }; SysExps.prototype.savestatejson = function(ret) { ret.set_string(this.runtime.lastSaveJson); }; SysExps.prototype.imagememoryusage = function(ret) { if (this.runtime.glwrap) ret.set_float(Math.round(100 * this.runtime.glwrap.estimateVRAM() / (1024 * 1024)) / 100); else ret.set_float(0); }; SysExps.prototype.regexsearch = function(ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); ret.set_int(str_ ? str_.search(regex) : -1); }; SysExps.prototype.regexreplace = function(ret, str_, regex_, flags_, replace_) { var regex = getRegex(regex_, flags_); ret.set_string(str_ ? str_.replace(regex, replace_) : ""); }; var regexMatches = []; var lastMatchesStr = ""; var lastMatchesRegex = ""; var lastMatchesFlags = ""; function updateRegexMatches(str_, regex_, flags_) { if (str_ === lastMatchesStr && regex_ === lastMatchesRegex && flags_ === lastMatchesFlags) return; var regex = getRegex(regex_, flags_); regexMatches = str_.match(regex); lastMatchesStr = str_; lastMatchesRegex = regex_; lastMatchesFlags = flags_; }; SysExps.prototype.regexmatchcount = function(ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); updateRegexMatches(str_.toString(), regex_, flags_); ret.set_int(regexMatches ? regexMatches.length : 0); }; SysExps.prototype.regexmatchat = function(ret, str_, regex_, flags_, index_) { index_ = Math.floor(index_); var regex = getRegex(regex_, flags_); updateRegexMatches(str_.toString(), regex_, flags_); if (!regexMatches || index_ < 0 || index_ >= regexMatches.length) ret.set_string(""); else ret.set_string(regexMatches[index_]); }; SysExps.prototype.infinity = function(ret) { ret.set_float(Infinity); }; SysExps.prototype.setbit = function(ret, n, b, v) { n = n | 0; b = b | 0; v = (v !== 0 ? 1 : 0); ret.set_int((n & ~(1 << b)) | (v << b)); }; SysExps.prototype.togglebit = function(ret, n, b) { n = n | 0; b = b | 0; ret.set_int(n ^ (1 << b)); }; SysExps.prototype.getbit = function(ret, n, b) { n = n | 0; b = b | 0; ret.set_int((n & (1 << b)) ? 1 : 0); }; SysExps.prototype.originalwindowwidth = function(ret) { ret.set_int(this.runtime.original_width); }; SysExps.prototype.originalwindowheight = function(ret) { ret.set_int(this.runtime.original_height); }; sysProto.exps = new SysExps(); sysProto.runWaits = function() { var i, j, len, w, k, s, ss; var evinfo = this.runtime.getCurrentEventStack(); for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; if (w.time === -1) // signalled wait { if (!w.signalled) continue; // not yet signalled } else // timer wait { if (w.time > this.runtime.kahanTime.sum) continue; // timer not yet expired } evinfo.current_event = w.ev; evinfo.actindex = w.actindex; evinfo.cndindex = 0; for (k in w.sols) { if (w.sols.hasOwnProperty(k)) { s = this.runtime.types_by_index[parseInt(k, 10)].getCurrentSol(); ss = w.sols[k]; s.select_all = ss.sa; cr.shallowAssignArray(s.instances, ss.insts); freeSolStateObject(ss); } } w.ev.resume_actions_and_subevents(); this.runtime.clearSol(w.solModifiers); w.deleteme = true; } for (i = 0, j = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; this.waits[j] = w; if (w.deleteme) freeWaitObject(w); else j++; } cr.truncateArray(this.waits, j); }; }());; (function() { cr.add_common_aces = function(m, pluginProto) { var singleglobal_ = m[1]; var position_aces = m[3]; var size_aces = m[4]; var angle_aces = m[5]; var appearance_aces = m[6]; var zorder_aces = m[7]; var effects_aces = m[8]; if (!pluginProto.cnds) pluginProto.cnds = {}; if (!pluginProto.acts) pluginProto.acts = {}; if (!pluginProto.exps) pluginProto.exps = {}; var cnds = pluginProto.cnds; var acts = pluginProto.acts; var exps = pluginProto.exps; if (position_aces) { cnds.CompareX = function(cmp, x) { return cr.do_cmp(this.x, cmp, x); }; cnds.CompareY = function(cmp, y) { return cr.do_cmp(this.y, cmp, y); }; cnds.IsOnScreen = function() { var layer = this.layer; this.update_bbox(); var bbox = this.bbox; return !(bbox.right < layer.viewLeft || bbox.bottom < layer.viewTop || bbox.left > layer.viewRight || bbox.top > layer.viewBottom); }; cnds.IsOutsideLayout = function() { this.update_bbox(); var bbox = this.bbox; var layout = this.runtime.running_layout; return (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height); }; cnds.PickDistance = function(which, x, y) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var dist = cr.distanceTo(inst.x, inst.y, x, y); var i, len, d; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; d = cr.distanceTo(inst.x, inst.y, x, y); if ((which === 0 && d < dist) || (which === 1 && d > dist)) { dist = d; pickme = inst; } } sol.pick_one(pickme); return true; }; acts.SetX = function(x) { if (this.x !== x) { this.x = x; this.set_bbox_changed(); } }; acts.SetY = function(y) { if (this.y !== y) { this.y = y; this.set_bbox_changed(); } }; acts.SetPos = function(x, y) { if (this.x !== x || this.y !== y) { this.x = x; this.y = y; this.set_bbox_changed(); } }; acts.SetPosToObject = function(obj, imgpt) { var inst = obj.getPairedInstance(this); if (!inst) return; var newx, newy; if (inst.getImagePoint) { newx = inst.getImagePoint(imgpt, true); newy = inst.getImagePoint(imgpt, false); } else { newx = inst.x; newy = inst.y; } if (this.x !== newx || this.y !== newy) { this.x = newx; this.y = newy; this.set_bbox_changed(); } }; acts.MoveForward = function(dist) { if (dist !== 0) { this.x += Math.cos(this.angle) * dist; this.y += Math.sin(this.angle) * dist; this.set_bbox_changed(); } }; acts.MoveAtAngle = function(a, dist) { if (dist !== 0) { this.x += Math.cos(cr.to_radians(a)) * dist; this.y += Math.sin(cr.to_radians(a)) * dist; this.set_bbox_changed(); } }; exps.X = function(ret) { ret.set_float(this.x); }; exps.Y = function(ret) { ret.set_float(this.y); }; exps.dt = function(ret) { ret.set_float(this.runtime.getDt(this)); }; } if (size_aces) { cnds.CompareWidth = function(cmp, w) { return cr.do_cmp(this.width, cmp, w); }; cnds.CompareHeight = function(cmp, h) { return cr.do_cmp(this.height, cmp, h); }; acts.SetWidth = function(w) { if (this.width !== w) { this.width = w; this.set_bbox_changed(); } }; acts.SetHeight = function(h) { if (this.height !== h) { this.height = h; this.set_bbox_changed(); } }; acts.SetSize = function(w, h) { if (this.width !== w || this.height !== h) { this.width = w; this.height = h; this.set_bbox_changed(); } }; exps.Width = function(ret) { ret.set_float(this.width); }; exps.Height = function(ret) { ret.set_float(this.height); }; exps.BBoxLeft = function(ret) { this.update_bbox(); ret.set_float(this.bbox.left); }; exps.BBoxTop = function(ret) { this.update_bbox(); ret.set_float(this.bbox.top); }; exps.BBoxRight = function(ret) { this.update_bbox(); ret.set_float(this.bbox.right); }; exps.BBoxBottom = function(ret) { this.update_bbox(); ret.set_float(this.bbox.bottom); }; } if (angle_aces) { cnds.AngleWithin = function(within, a) { return cr.angleDiff(this.angle, cr.to_radians(a)) <= cr.to_radians(within); }; cnds.IsClockwiseFrom = function(a) { return cr.angleClockwise(this.angle, cr.to_radians(a)); }; cnds.IsBetweenAngles = function(a, b) { var lower = cr.to_clamped_radians(a); var upper = cr.to_clamped_radians(b); var angle = cr.clamp_angle(this.angle); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; acts.SetAngle = function(a) { var newangle = cr.to_radians(cr.clamp_angle_degrees(a)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateClockwise = function(a) { if (a !== 0 && !isNaN(a)) { this.angle += cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateCounterclockwise = function(a) { if (a !== 0 && !isNaN(a)) { this.angle -= cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateTowardAngle = function(amt, target) { var newangle = cr.angleRotate(this.angle, cr.to_radians(target), cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateTowardPosition = function(amt, x, y) { var dx = x - this.x; var dy = y - this.y; var target = Math.atan2(dy, dx); var newangle = cr.angleRotate(this.angle, target, cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.SetTowardPosition = function(x, y) { var dx = x - this.x; var dy = y - this.y; var newangle = Math.atan2(dy, dx); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; exps.Angle = function(ret) { ret.set_float(cr.to_clamped_degrees(this.angle)); }; } if (!singleglobal_) { cnds.CompareInstanceVar = function(iv, cmp, val) { return cr.do_cmp(this.instance_vars[iv], cmp, val); }; cnds.IsBoolInstanceVarSet = function(iv) { return this.instance_vars[iv]; }; cnds.PickInstVarHiLow = function(which, iv) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var val = inst.instance_vars[iv]; var i, len, v; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; v = inst.instance_vars[iv]; if ((which === 0 && v < val) || (which === 1 && v > val)) { val = v; pickme = inst; } } sol.pick_one(pickme); return true; }; cnds.PickByUID = function(u) { var i, len, j, inst, families, instances, sol; var cnd = this.runtime.getCurrentCondition(); if (cnd.inverted) { sol = this.getCurrentSol(); if (sol.select_all) { sol.select_all = false; cr.clearArray(sol.instances); cr.clearArray(sol.else_instances); instances = this.instances; for (i = 0, len = instances.length; i < len; i++) { inst = instances[i]; if (inst.uid === u) sol.else_instances.push(inst); else sol.instances.push(inst); } this.applySolToContainer(); return !!sol.instances.length; } else { for (i = 0, j = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; sol.instances[j] = inst; if (inst.uid === u) { sol.else_instances.push(inst); } else j++; } cr.truncateArray(sol.instances, j); this.applySolToContainer(); return !!sol.instances.length; } } else { inst = this.runtime.getObjectByUID(u); if (!inst) return false; sol = this.getCurrentSol(); if (!sol.select_all && sol.instances.indexOf(inst) === -1) return false; // not picked if (this.is_family) { families = inst.type.families; for (i = 0, len = families.length; i < len; i++) { if (families[i] === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } } } else if (inst.type === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } return false; } }; cnds.OnCreated = function() { return true; }; cnds.OnDestroyed = function() { return true; }; acts.SetInstanceVar = function(iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] = val; else myinstvars[iv] = parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] = val; else myinstvars[iv] = val.toString(); } else ; }; acts.AddInstanceVar = function(iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] += val; else myinstvars[iv] += parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] += val; else myinstvars[iv] += val.toString(); } else ; }; acts.SubInstanceVar = function(iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] -= val; else myinstvars[iv] -= parseFloat(val); } else ; }; acts.SetBoolInstanceVar = function(iv, val) { this.instance_vars[iv] = val ? 1 : 0; }; acts.ToggleBoolInstanceVar = function(iv) { this.instance_vars[iv] = 1 - this.instance_vars[iv]; }; acts.Destroy = function() { this.runtime.DestroyInstance(this); }; if (!acts.LoadFromJsonString) { acts.LoadFromJsonString = function(str_) { var o, i, len, binst; try { o = JSON.parse(str_); } catch (e) { return; } this.runtime.loadInstanceFromJSON(this, o, true); if (this.afterLoad) this.afterLoad(); if (this.behavior_insts) { for (i = 0, len = this.behavior_insts.length; i < len; ++i) { binst = this.behavior_insts[i]; if (binst.afterLoad) binst.afterLoad(); } } }; } exps.Count = function(ret) { var count = ret.object_class.instances.length; var i, len, inst; for (i = 0, len = this.runtime.createRow.length; i < len; i++) { inst = this.runtime.createRow[i]; if (ret.object_class.is_family) { if (inst.type.families.indexOf(ret.object_class) >= 0) count++; } else { if (inst.type === ret.object_class) count++; } } ret.set_int(count); }; exps.PickedCount = function(ret) { ret.set_int(ret.object_class.getCurrentSol().getObjects().length); }; exps.UID = function(ret) { ret.set_int(this.uid); }; exps.IID = function(ret) { ret.set_int(this.get_iid()); }; if (!exps.AsJSON) { exps.AsJSON = function(ret) { ret.set_string(JSON.stringify(this.runtime.saveInstanceToJSON(this, true))); }; } } if (appearance_aces) { cnds.IsVisible = function() { return this.visible; }; acts.SetVisible = function(v) { if (!v !== !this.visible) { this.visible = !!v; this.runtime.redraw = true; } }; cnds.CompareOpacity = function(cmp, x) { return cr.do_cmp(cr.round6dp(this.opacity * 100), cmp, x); }; acts.SetOpacity = function(x) { var new_opacity = x / 100.0; if (new_opacity < 0) new_opacity = 0; else if (new_opacity > 1) new_opacity = 1; if (new_opacity !== this.opacity) { this.opacity = new_opacity; this.runtime.redraw = true; } }; exps.Opacity = function(ret) { ret.set_float(cr.round6dp(this.opacity * 100.0)); }; } if (zorder_aces) { cnds.IsOnLayer = function(layer_) { if (!layer_) return false; return this.layer === layer_; }; cnds.PickTopBottom = function(which_) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var i, len; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; if (which_ === 0) { if (inst.layer.index > pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() > pickme.get_zindex())) { pickme = inst; } } else { if (inst.layer.index < pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() < pickme.get_zindex())) { pickme = inst; } } } sol.pick_one(pickme); return true; }; acts.MoveToTop = function() { var layer = this.layer; var layer_instances = layer.instances; if (layer_instances.length && layer_instances[layer_instances.length - 1] === this) return; // is already at top layer.removeFromInstanceList(this, false); layer.appendToInstanceList(this, false); this.runtime.redraw = true; }; acts.MoveToBottom = function() { var layer = this.layer; var layer_instances = layer.instances; if (layer_instances.length && layer_instances[0] === this) return; // is already at bottom layer.removeFromInstanceList(this, false); layer.prependToInstanceList(this, false); this.runtime.redraw = true; }; acts.MoveToLayer = function(layerMove) { if (!layerMove || layerMove == this.layer) return; this.layer.removeFromInstanceList(this, true); this.layer = layerMove; layerMove.appendToInstanceList(this, true); this.runtime.redraw = true; }; acts.ZMoveToObject = function(where_, obj_) { var isafter = (where_ === 0); if (!obj_) return; var other = obj_.getFirstPicked(this); if (!other || other.uid === this.uid) return; if (this.layer.index !== other.layer.index) { this.layer.removeFromInstanceList(this, true); this.layer = other.layer; other.layer.appendToInstanceList(this, true); } this.layer.moveInstanceAdjacent(this, other, isafter); this.runtime.redraw = true; }; exps.LayerNumber = function(ret) { ret.set_int(this.layer.number); }; exps.LayerName = function(ret) { ret.set_string(this.layer.name); }; exps.ZIndex = function(ret) { ret.set_int(this.get_zindex()); }; } if (effects_aces) { acts.SetEffectEnabled = function(enable_, effectname_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var enable = (enable_ === 1); if (this.active_effect_flags[i] === enable) return; // no change this.active_effect_flags[i] = enable; this.updateActiveEffects(); this.runtime.redraw = true; }; acts.SetEffectParam = function(effectname_, index_, value_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var et = this.type.effect_types[i]; var params = this.effect_params[i]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; } }; cr.set_bbox_changed = function() { this.bbox_changed = true; // will recreate next time box requested this.cell_changed = true; this.type.any_cell_changed = true; // avoid unnecessary updateAllBBox() calls this.runtime.redraw = true; // assume runtime needs to redraw var i, len, callbacks = this.bbox_changed_callbacks; for (i = 0, len = callbacks.length; i < len; ++i) { callbacks[i](this); } if (this.layer.useRenderCells) this.update_bbox(); }; cr.add_bbox_changed_callback = function(f) { if (f) { this.bbox_changed_callbacks.push(f); } }; cr.update_bbox = function() { if (!this.bbox_changed) return; // bounding box not changed var bbox = this.bbox; var bquad = this.bquad; bbox.set(this.x, this.y, this.x + this.width, this.y + this.height); bbox.offset(-this.hotspotX * this.width, -this.hotspotY * this.height); if (!this.angle) { bquad.set_from_rect(bbox); // make bounding quad from box } else { bbox.offset(-this.x, -this.y); // translate to origin bquad.set_from_rotated_rect(bbox, this.angle); // rotate around origin bquad.offset(this.x, this.y); // translate back to original position bquad.bounding_box(bbox); } bbox.normalize(); this.bbox_changed = false; // bounding box up to date this.update_render_cell(); }; var tmprc = new cr.rect(0, 0, 0, 0); cr.update_render_cell = function() { if (!this.layer.useRenderCells) return; var mygrid = this.layer.render_grid; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (this.rendercells.equals(tmprc)) return; if (this.rendercells.right < this.rendercells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, this.rendercells, tmprc); this.rendercells.copy(tmprc); this.layer.render_list_stale = true; }; cr.update_collision_cell = function() { if (!this.cell_changed || !this.collisionsEnabled) return; this.update_bbox(); var mygrid = this.type.collision_grid; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (this.collcells.equals(tmprc)) return; if (this.collcells.right < this.collcells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, this.collcells, tmprc); this.collcells.copy(tmprc); this.cell_changed = false; }; cr.inst_contains_pt = function(x, y) { if (!this.bbox.contains_pt(x, y)) return false; if (!this.bquad.contains_pt(x, y)) return false; if (this.tilemap_exists) return this.testPointOverlapTile(x, y); if (this.collision_poly && !this.collision_poly.is_empty()) { this.collision_poly.cache_poly(this.width, this.height, this.angle); return this.collision_poly.contains_pt(x - this.x, y - this.y); } else return true; }; cr.inst_get_iid = function() { this.type.updateIIDs(); return this.iid; }; cr.inst_get_zindex = function() { this.layer.updateZIndices(); return this.zindex; }; cr.inst_updateActiveEffects = function() { cr.clearArray(this.active_effect_types); var i, len, et; var preserves_opaqueness = true; for (i = 0, len = this.active_effect_flags.length; i < len; i++) { if (this.active_effect_flags[i]) { et = this.type.effect_types[i]; this.active_effect_types.push(et); if (!et.preservesOpaqueness) preserves_opaqueness = false; } } this.uses_shaders = !!this.active_effect_types.length; this.shaders_preserve_opaqueness = preserves_opaqueness; }; cr.inst_toString = function() { return "Inst" + this.puid; }; cr.type_getFirstPicked = function(frominst) { if (frominst && frominst.is_contained && frominst.type != this) { var i, len, s; for (i = 0, len = frominst.siblings.length; i < len; i++) { s = frominst.siblings[i]; if (s.type == this) return s; } } var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[0]; else return null; }; cr.type_getPairedInstance = function(inst) { var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[inst.get_iid() % instances.length]; else return null; }; cr.type_updateIIDs = function() { if (!this.stale_iids || this.is_family) return; // up to date or is family - don't want family to overwrite IIDs var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].iid = i; var next_iid = i; var createRow = this.runtime.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === this) createRow[i].iid = next_iid++; } this.stale_iids = false; }; cr.type_getInstanceByIID = function(i) { if (i < this.instances.length) return this.instances[i]; i -= this.instances.length; var createRow = this.runtime.createRow; var j, lenj; for (j = 0, lenj = createRow.length; j < lenj; ++j) { if (createRow[j].type === this) { if (i === 0) return createRow[j]; --i; } }; return null; }; cr.type_getCurrentSol = function() { return this.solstack[this.cur_sol]; }; cr.type_pushCleanSol = function() { this.cur_sol++; if (this.cur_sol === this.solstack.length) { this.solstack.push(new cr.selection(this)); } else { this.solstack[this.cur_sol].select_all = true; // else clear next SOL cr.clearArray(this.solstack[this.cur_sol].else_instances); } }; cr.type_pushCopySol = function() { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); var clonesol = this.solstack[this.cur_sol]; var prevsol = this.solstack[this.cur_sol - 1]; if (prevsol.select_all) { clonesol.select_all = true; } else { clonesol.select_all = false; cr.shallowAssignArray(clonesol.instances, prevsol.instances); } cr.clearArray(clonesol.else_instances); }; cr.type_popSol = function() {; this.cur_sol--; }; cr.type_getBehaviorByName = function(behname) { var i, len, j, lenj, f, index = 0; if (!this.is_family) { for (i = 0, len = this.families.length; i < len; i++) { f = this.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (behname === f.behaviors[j].name) { this.extra["lastBehIndex"] = index; return f.behaviors[j]; } index++; } } } for (i = 0, len = this.behaviors.length; i < len; i++) { if (behname === this.behaviors[i].name) { this.extra["lastBehIndex"] = index; return this.behaviors[i]; } index++; } return null; }; cr.type_getBehaviorIndexByName = function(behname) { var b = this.getBehaviorByName(behname); if (b) return this.extra["lastBehIndex"]; else return -1; }; cr.type_getEffectIndexByName = function(name_) { var i, len; for (i = 0, len = this.effect_types.length; i < len; i++) { if (this.effect_types[i].name === name_) return i; } return -1; }; cr.type_applySolToContainer = function() { if (!this.is_contained || this.is_family) return; var i, len, j, lenj, t, sol, sol2; this.updateIIDs(); sol = this.getCurrentSol(); var select_all = sol.select_all; var es = this.runtime.getCurrentEventStack(); var orblock = es && es.current_event && es.current_event.orblock; for (i = 0, len = this.container.length; i < len; i++) { t = this.container[i]; if (t === this) continue; t.updateIIDs(); sol2 = t.getCurrentSol(); sol2.select_all = select_all; if (!select_all) { cr.clearArray(sol2.instances); for (j = 0, lenj = sol.instances.length; j < lenj; ++j) sol2.instances[j] = t.getInstanceByIID(sol.instances[j].iid); if (orblock) { cr.clearArray(sol2.else_instances); for (j = 0, lenj = sol.else_instances.length; j < lenj; ++j) sol2.else_instances[j] = t.getInstanceByIID(sol.else_instances[j].iid); } } } }; cr.type_toString = function() { return "Type" + this.sid; }; cr.do_cmp = function(x, cmp, y) { if (typeof x === "undefined" || typeof y === "undefined") return false; switch (cmp) { case 0: // equal return x === y; case 1: // not equal return x !== y; case 2: // less return x < y; case 3: // less/equal return x <= y; case 4: // greater return x > y; case 5: // greater/equal return x >= y; default: ; return false; } }; })(); cr.shaders = {};;; cr.plugins_.Audio = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.Audio.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; var audRuntime = null; var audInst = null; var audTag = ""; var appPath = ""; // for Cordova only var API_HTML5 = 0; var API_WEBAUDIO = 1; var API_CORDOVA = 2; var API_APPMOBI = 3; var api = API_HTML5; var context = null; var audioBuffers = []; // cache of buffers var audioInstances = []; // cache of instances var lastAudio = null; var useOgg = false; // determined at create time var timescale_mode = 0; var silent = false; var masterVolume = 1; var listenerX = 0; var listenerY = 0; var isContextSuspended = false; var panningModel = 1; // HRTF var distanceModel = 1; // Inverse var refDistance = 10; var maxDistance = 10000; var rolloffFactor = 1; var micSource = null; var micTag = ""; var useNextTouchWorkaround = false; // heuristic in case play() does not return a promise and we have to guess if the play was blocked var playOnNextInput = []; // C2AudioInstances with HTMLAudioElements to play on next input event var playMusicAsSoundWorkaround = false; // play music tracks with Web Audio API var hasPlayedDummyBuffer = false; // dummy buffer played to unblock AudioContext on some platforms function addAudioToPlayOnNextInput(a) { var i = playOnNextInput.indexOf(a); if (i === -1) playOnNextInput.push(a); }; function tryPlayAudioElement(a) { var audioElem = a.instanceObject; var playRet; try { playRet = audioElem.play(); } catch (err) { addAudioToPlayOnNextInput(a); return; } if (playRet) // promise was returned { playRet.catch(function(err) { addAudioToPlayOnNextInput(a); }); } else if (useNextTouchWorkaround && !audRuntime.isInUserInputEvent) { addAudioToPlayOnNextInput(a); } }; function playQueuedAudio() { var i, len, m, playRet; if (!hasPlayedDummyBuffer && !isContextSuspended && context) { playDummyBuffer(); if (context["state"] === "running") hasPlayedDummyBuffer = true; } var tryPlay = playOnNextInput.slice(0); cr.clearArray(playOnNextInput); if (!silent) { for (i = 0, len = tryPlay.length; i < len; ++i) { m = tryPlay[i]; if (!m.stopped && !m.is_paused) { playRet = m.instanceObject.play(); if (playRet) { playRet.catch(function(err) { addAudioToPlayOnNextInput(m); }); } } } } }; function playDummyBuffer() { if (context["state"] === "suspended" && context["resume"]) context["resume"](); if (!context["createBuffer"]) return; var buffer = context["createBuffer"](1, 220, 22050); var source = context["createBufferSource"](); source["buffer"] = buffer; source["connect"](context["destination"]); startSource(source); }; document.addEventListener("pointerup", playQueuedAudio, true); document.addEventListener("touchend", playQueuedAudio, true); document.addEventListener("click", playQueuedAudio, true); document.addEventListener("keydown", playQueuedAudio, true); document.addEventListener("gamepadconnected", playQueuedAudio, true); function dbToLinear(x) { var v = dbToLinear_nocap(x); if (!isFinite(v)) // accidentally passing a string can result in NaN; set volume to 0 if so v = 0; if (v < 0) v = 0; if (v > 1) v = 1; return v; }; function linearToDb(x) { if (x < 0) x = 0; if (x > 1) x = 1; return linearToDb_nocap(x); }; function dbToLinear_nocap(x) { return Math.pow(10, x / 20); }; function linearToDb_nocap(x) { return (Math.log(x) / Math.log(10)) * 20; }; var effects = {}; function getDestinationForTag(tag) { tag = tag.toLowerCase(); if (effects.hasOwnProperty(tag)) { if (effects[tag].length) return effects[tag][0].getInputNode(); } return context["destination"]; }; function createGain() { if (context["createGain"]) return context["createGain"](); else return context["createGainNode"](); }; function createDelay(d) { if (context["createDelay"]) return context["createDelay"](d); else return context["createDelayNode"](d); }; function startSource(s, scheduledTime) { if (s["start"]) s["start"](scheduledTime || 0); else s["noteOn"](scheduledTime || 0); }; function startSourceAt(s, x, d, scheduledTime) { if (s["start"]) s["start"](scheduledTime || 0, x); else s["noteGrainOn"](scheduledTime || 0, x, d - x); }; function stopSource(s) { try { if (s["stop"]) s["stop"](0); else s["noteOff"](0); } catch (e) {} }; function setAudioParam(ap, value, ramp, time) { if (!ap) return; // iOS is missing some parameters ap["cancelScheduledValues"](0); if (time === 0) { ap["value"] = value; return; } var curTime = context["currentTime"]; time += curTime; switch (ramp) { case 0: // step ap["setValueAtTime"](value, time); break; case 1: // linear ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["linearRampToValueAtTime"](value, time); break; case 2: // exponential ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["exponentialRampToValueAtTime"](value, time); break; } }; var filterTypes = ["lowpass", "highpass", "bandpass", "lowshelf", "highshelf", "peaking", "notch", "allpass"]; function FilterEffect(type, freq, detune, q, gain, mix) { this.type = "filter"; this.params = [type, freq, detune, q, gain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = type; else this.filterNode["type"] = filterTypes[type]; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.filterNode["gain"]["value"] = gain; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); }; FilterEffect.prototype.connectTo = function(node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; FilterEffect.prototype.remove = function() { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; FilterEffect.prototype.getInputNode = function() { return this.inputNode; }; FilterEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 1: // filter frequency this.params[1] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[2] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[3] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 4: // filter/delay gain (note value is in dB here) this.params[4] = value; setAudioParam(this.filterNode["gain"], value, ramp, time); break; } }; function DelayEffect(delayTime, delayGain, mix) { this.type = "delay"; this.params = [delayTime, delayGain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.mainNode = createGain(); this.delayNode = createDelay(delayTime); this.delayNode["delayTime"]["value"] = delayTime; this.delayGainNode = createGain(); this.delayGainNode["gain"]["value"] = delayGain; this.inputNode["connect"](this.mainNode); this.inputNode["connect"](this.dryNode); this.mainNode["connect"](this.wetNode); this.mainNode["connect"](this.delayNode); this.delayNode["connect"](this.delayGainNode); this.delayGainNode["connect"](this.mainNode); }; DelayEffect.prototype.connectTo = function(node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DelayEffect.prototype.remove = function() { this.inputNode["disconnect"](); this.mainNode["disconnect"](); this.delayNode["disconnect"](); this.delayGainNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DelayEffect.prototype.getInputNode = function() { return this.inputNode; }; DelayEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[2] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 4: // filter/delay gain (note value is passed in dB but needs to be linear here) this.params[1] = dbToLinear(value); setAudioParam(this.delayGainNode["gain"], dbToLinear(value), ramp, time); break; case 5: // delay time this.params[0] = value; setAudioParam(this.delayNode["delayTime"], value, ramp, time); break; } }; function ConvolveEffect(buffer, normalize, mix, src) { this.type = "convolve"; this.params = [normalize, mix, src]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.convolveNode = context["createConvolver"](); if (buffer) { this.convolveNode["normalize"] = normalize; this.convolveNode["buffer"] = buffer; } this.inputNode["connect"](this.convolveNode); this.inputNode["connect"](this.dryNode); this.convolveNode["connect"](this.wetNode); }; ConvolveEffect.prototype.connectTo = function(node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; ConvolveEffect.prototype.remove = function() { this.inputNode["disconnect"](); this.convolveNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; ConvolveEffect.prototype.getInputNode = function() { return this.inputNode; }; ConvolveEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function FlangerEffect(delay, modulation, freq, feedback, mix) { this.type = "flanger"; this.params = [delay, modulation, freq, feedback, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.feedbackNode = createGain(); this.feedbackNode["gain"]["value"] = feedback; this.delayNode = createDelay(delay + modulation); this.delayNode["delayTime"]["value"] = delay; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.delayNode); this.inputNode["connect"](this.dryNode); this.delayNode["connect"](this.wetNode); this.delayNode["connect"](this.feedbackNode); this.feedbackNode["connect"](this.delayNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.delayNode["delayTime"]); startSource(this.oscNode); }; FlangerEffect.prototype.connectTo = function(node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; FlangerEffect.prototype.remove = function() { this.inputNode["disconnect"](); this.delayNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); this.feedbackNode["disconnect"](); }; FlangerEffect.prototype.getInputNode = function() { return this.inputNode; }; FlangerEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 6: // modulation this.params[1] = value / 1000; setAudioParam(this.oscGainNode["gain"], value / 1000, ramp, time); break; case 7: // modulation frequency this.params[2] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; case 8: // feedback this.params[3] = value / 100; setAudioParam(this.feedbackNode["gain"], value / 100, ramp, time); break; } }; function PhaserEffect(freq, detune, q, modulation, modfreq, mix) { this.type = "phaser"; this.params = [freq, detune, q, modulation, modfreq, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = 7; // all-pass else this.filterNode["type"] = "allpass"; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = modfreq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.filterNode["frequency"]); startSource(this.oscNode); }; PhaserEffect.prototype.connectTo = function(node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; PhaserEffect.prototype.remove = function() { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); }; PhaserEffect.prototype.getInputNode = function() { return this.inputNode; }; PhaserEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 1: // filter frequency this.params[0] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[1] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[2] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 6: // modulation this.params[3] = value; setAudioParam(this.oscGainNode["gain"], value, ramp, time); break; case 7: // modulation frequency this.params[4] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function GainEffect(g) { this.type = "gain"; this.params = [g]; this.node = createGain(); this.node["gain"]["value"] = g; }; GainEffect.prototype.connectTo = function(node_) { this.node["disconnect"](); this.node["connect"](node_); }; GainEffect.prototype.remove = function() { this.node["disconnect"](); }; GainEffect.prototype.getInputNode = function() { return this.node; }; GainEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 4: // gain this.params[0] = dbToLinear(value); setAudioParam(this.node["gain"], dbToLinear(value), ramp, time); break; } }; function TremoloEffect(freq, mix) { this.type = "tremolo"; this.params = [freq, mix]; this.node = createGain(); this.node["gain"]["value"] = 1 - (mix / 2); this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = mix / 2; this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.node["gain"]); startSource(this.oscNode); }; TremoloEffect.prototype.connectTo = function(node_) { this.node["disconnect"](); this.node["connect"](node_); }; TremoloEffect.prototype.remove = function() { this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.node["disconnect"](); }; TremoloEffect.prototype.getInputNode = function() { return this.node; }; TremoloEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.node["gain"]["value"], 1 - (value / 2), ramp, time); setAudioParam(this.oscGainNode["gain"]["value"], value / 2, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function RingModulatorEffect(freq, mix) { this.type = "ringmod"; this.params = [freq, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.ringNode = createGain(); this.ringNode["gain"]["value"] = 0; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscNode["connect"](this.ringNode["gain"]); startSource(this.oscNode); this.inputNode["connect"](this.ringNode); this.inputNode["connect"](this.dryNode); this.ringNode["connect"](this.wetNode); }; RingModulatorEffect.prototype.connectTo = function(node_) { this.wetNode["disconnect"](); this.wetNode["connect"](node_); this.dryNode["disconnect"](); this.dryNode["connect"](node_); }; RingModulatorEffect.prototype.remove = function() { this.oscNode["disconnect"](); this.ringNode["disconnect"](); this.inputNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; RingModulatorEffect.prototype.getInputNode = function() { return this.inputNode; }; RingModulatorEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function DistortionEffect(threshold, headroom, drive, makeupgain, mix) { this.type = "distortion"; this.params = [threshold, headroom, drive, makeupgain, mix]; this.inputNode = createGain(); this.preGain = createGain(); this.postGain = createGain(); this.setDrive(drive, dbToLinear_nocap(makeupgain)); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.waveShaper = context["createWaveShaper"](); this.curve = new Float32Array(65536); this.generateColortouchCurve(threshold, headroom); this.waveShaper.curve = this.curve; this.inputNode["connect"](this.preGain); this.inputNode["connect"](this.dryNode); this.preGain["connect"](this.waveShaper); this.waveShaper["connect"](this.postGain); this.postGain["connect"](this.wetNode); }; DistortionEffect.prototype.setDrive = function(drive, makeupgain) { if (drive < 0.01) drive = 0.01; this.preGain["gain"]["value"] = drive; this.postGain["gain"]["value"] = Math.pow(1 / drive, 0.6) * makeupgain; }; function e4(x, k) { return 1.0 - Math.exp(-k * x); } DistortionEffect.prototype.shape = function(x, linearThreshold, linearHeadroom) { var maximum = 1.05 * linearHeadroom * linearThreshold; var kk = (maximum - linearThreshold); var sign = x < 0 ? -1 : +1; var absx = x < 0 ? -x : x; var shapedInput = absx < linearThreshold ? absx : linearThreshold + kk * e4(absx - linearThreshold, 1.0 / kk); shapedInput *= sign; return shapedInput; }; DistortionEffect.prototype.generateColortouchCurve = function(threshold, headroom) { var linearThreshold = dbToLinear_nocap(threshold); var linearHeadroom = dbToLinear_nocap(headroom); var n = 65536; var n2 = n / 2; var x = 0; for (var i = 0; i < n2; ++i) { x = i / n2; x = this.shape(x, linearThreshold, linearHeadroom); this.curve[n2 + i] = x; this.curve[n2 - i - 1] = -x; } }; DistortionEffect.prototype.connectTo = function(node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DistortionEffect.prototype.remove = function() { this.inputNode["disconnect"](); this.preGain["disconnect"](); this.waveShaper["disconnect"](); this.postGain["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DistortionEffect.prototype.getInputNode = function() { return this.inputNode; }; DistortionEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function CompressorEffect(threshold, knee, ratio, attack, release) { this.type = "compressor"; this.params = [threshold, knee, ratio, attack, release]; this.node = context["createDynamicsCompressor"](); try { this.node["threshold"]["value"] = threshold; this.node["knee"]["value"] = knee; this.node["ratio"]["value"] = ratio; this.node["attack"]["value"] = attack; this.node["release"]["value"] = release; } catch (e) {} }; CompressorEffect.prototype.connectTo = function(node_) { this.node["disconnect"](); this.node["connect"](node_); }; CompressorEffect.prototype.remove = function() { this.node["disconnect"](); }; CompressorEffect.prototype.getInputNode = function() { return this.node; }; CompressorEffect.prototype.setParam = function(param, value, ramp, time) {}; function AnalyserEffect(fftSize, smoothing) { this.type = "analyser"; this.params = [fftSize, smoothing]; this.node = context["createAnalyser"](); this.node["fftSize"] = fftSize; this.node["smoothingTimeConstant"] = smoothing; this.freqBins = new Float32Array(this.node["frequencyBinCount"]); this.signal = new Uint8Array(fftSize); this.peak = 0; this.rms = 0; }; AnalyserEffect.prototype.tick = function() { this.node["getFloatFrequencyData"](this.freqBins); this.node["getByteTimeDomainData"](this.signal); var fftSize = this.node["fftSize"]; var i = 0; this.peak = 0; var rmsSquaredSum = 0; var s = 0; for (; i < fftSize; i++) { s = (this.signal[i] - 128) / 128; if (s < 0) s = -s; if (this.peak < s) this.peak = s; rmsSquaredSum += s * s; } this.peak = linearToDb(this.peak); this.rms = linearToDb(Math.sqrt(rmsSquaredSum / fftSize)); }; AnalyserEffect.prototype.connectTo = function(node_) { this.node["disconnect"](); this.node["connect"](node_); }; AnalyserEffect.prototype.remove = function() { this.node["disconnect"](); }; AnalyserEffect.prototype.getInputNode = function() { return this.node; }; AnalyserEffect.prototype.setParam = function(param, value, ramp, time) {}; function ObjectTracker() { this.obj = null; this.loadUid = 0; }; ObjectTracker.prototype.setObject = function(obj_) { this.obj = obj_; }; ObjectTracker.prototype.hasObject = function() { return !!this.obj; }; ObjectTracker.prototype.tick = function(dt) {}; function C2AudioBuffer(src_, is_music) { this.src = src_; this.myapi = api; this.is_music = is_music; this.added_end_listener = false; var self = this; this.outNode = null; this.mediaSourceNode = null; this.panWhenReady = []; // for web audio API positioned sounds this.seekWhenReady = 0; this.pauseWhenReady = false; this.supportWebAudioAPI = false; this.failedToLoad = false; this.wasEverReady = false; // if a buffer is ever marked as ready, it's permanently considered ready after then. if (api === API_WEBAUDIO && is_music && !playMusicAsSoundWorkaround) { this.myapi = API_HTML5; this.outNode = createGain(); } this.bufferObject = null; // actual audio object this.audioData = null; // web audio api: ajax request result (compressed audio that needs decoding) var request; switch (this.myapi) { case API_HTML5: this.bufferObject = new Audio(); this.bufferObject.crossOrigin = "anonymous"; this.bufferObject.addEventListener("canplaythrough", function() { self.wasEverReady = true; // update loaded state so preload is considered complete }); if (api === API_WEBAUDIO && context["createMediaElementSource"] && !/wiiu/i.test(navigator.userAgent)) { this.supportWebAudioAPI = true; // can be routed through web audio api this.bufferObject.addEventListener("canplay", function() { if (!self.mediaSourceNode && self.bufferObject) { self.mediaSourceNode = context["createMediaElementSource"](self.bufferObject); self.mediaSourceNode["connect"](self.outNode); } }); } this.bufferObject.autoplay = false; // this is only a source buffer, not an instance this.bufferObject.preload = "auto"; this.bufferObject.src = src_; break; case API_WEBAUDIO: if (audRuntime.isWKWebView) { audRuntime.fetchLocalFileViaCordovaAsArrayBuffer(src_, function(arrayBuffer) { self.audioData = arrayBuffer; self.decodeAudioBuffer(); }, function(err) { self.failedToLoad = true; }); } else { request = new XMLHttpRequest(); request.open("GET", src_, true); request.responseType = "arraybuffer"; request.onload = function() { self.audioData = request.response; self.decodeAudioBuffer(); }; request.onerror = function() { self.failedToLoad = true; }; request.send(); } break; case API_CORDOVA: this.bufferObject = true; break; case API_APPMOBI: this.bufferObject = true; break; } }; C2AudioBuffer.prototype.release = function() { var i, len, j, a; for (i = 0, j = 0, len = audioInstances.length; i < len; ++i) { a = audioInstances[i]; audioInstances[j] = a; if (a.buffer === this) a.stop(); else ++j; // keep } audioInstances.length = j; if (this.mediaSourceNode) { this.mediaSourceNode["disconnect"](); this.mediaSourceNode = null; } if (this.outNode) { this.outNode["disconnect"](); this.outNode = null; } this.bufferObject = null; this.audioData = null; }; C2AudioBuffer.prototype.decodeAudioBuffer = function() { if (this.bufferObject || !this.audioData) return; // audio already decoded or AJAX request not yet complete var self = this; if (context["decodeAudioData"]) { context["decodeAudioData"](this.audioData, function(buffer) { self.bufferObject = buffer; self.audioData = null; // clear AJAX response to allow GC and save memory, only need the bufferObject now var p, i, len, a; if (!cr.is_undefined(self.playTagWhenReady) && !silent) { if (self.panWhenReady.length) { for (i = 0, len = self.panWhenReady.length; i < len; i++) { p = self.panWhenReady[i]; a = new C2AudioInstance(self, p.thistag); a.setPannerEnabled(true); if (typeof p.objUid !== "undefined") { p.obj = audRuntime.getObjectByUID(p.objUid); if (!p.obj) continue; } if (p.obj) { var px = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, false); a.setPan(px, py, cr.to_degrees(p.obj.angle - p.obj.layer.getAngle()), p.ia, p.oa, p.og); a.setObject(p.obj); } else { a.setPan(p.x, p.y, p.a, p.ia, p.oa, p.og); } a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } cr.clearArray(self.panWhenReady); } else { a = new C2AudioInstance(self, self.playTagWhenReady || ""); // sometimes playTagWhenReady is not set - TODO: why? a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } } else if (!cr.is_undefined(self.convolveWhenReady)) { var convolveNode = self.convolveWhenReady.convolveNode; convolveNode["normalize"] = self.normalizeWhenReady; convolveNode["buffer"] = buffer; } }, function(e) { self.failedToLoad = true; }); } else { this.bufferObject = context["createBuffer"](this.audioData, false); this.audioData = null; // clear AJAX response to allow GC and save memory, only need the bufferObject now if (!cr.is_undefined(this.playTagWhenReady) && !silent) { var a = new C2AudioInstance(this, this.playTagWhenReady); a.play(this.loopWhenReady, this.volumeWhenReady, this.seekWhenReady); if (this.pauseWhenReady) a.pause(); audioInstances.push(a); } else if (!cr.is_undefined(this.convolveWhenReady)) { var convolveNode = this.convolveWhenReady.convolveNode; convolveNode["normalize"] = this.normalizeWhenReady; convolveNode["buffer"] = this.bufferObject; } } }; C2AudioBuffer.prototype.isLoaded = function() { switch (this.myapi) { case API_HTML5: var ret = this.bufferObject["readyState"] >= 4; // HAVE_ENOUGH_DATA if (ret) this.wasEverReady = true; return ret || this.wasEverReady; case API_WEBAUDIO: return !!this.audioData || !!this.bufferObject; case API_CORDOVA: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.isLoadedAndDecoded = function() { switch (this.myapi) { case API_HTML5: return this.isLoaded(); // no distinction between loaded and decoded in HTML5 audio, just rely on ready state case API_WEBAUDIO: return !!this.bufferObject; case API_CORDOVA: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.hasFailedToLoad = function() { switch (this.myapi) { case API_HTML5: return !!this.bufferObject["error"]; case API_WEBAUDIO: return this.failedToLoad; } return false; }; function C2AudioInstance(buffer_, tag_) { var self = this; this.tag = tag_; this.fresh = true; this.stopped = true; this.src = buffer_.src; this.buffer = buffer_; this.myapi = api; this.is_music = buffer_.is_music; this.playbackRate = 1; this.hasPlaybackEnded = true; // ended flag this.resume_me = false; // make sure resumes when leaving suspend this.is_paused = false; this.resume_position = 0; // for web audio api to resume from correct playback position this.looping = false; this.is_muted = false; this.is_silent = false; this.volume = 1; this.onended_handler = function(e) { if (self.is_paused || self.resume_me) return; var bufferThatEnded = this; if (!bufferThatEnded) bufferThatEnded = e.target; if (bufferThatEnded !== self.active_buffer) return; self.hasPlaybackEnded = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }; this.active_buffer = null; this.isTimescaled = ((timescale_mode === 1 && !this.is_music) || timescale_mode === 2); this.mutevol = 1; this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum); this.gainNode = null; this.pannerNode = null; this.pannerEnabled = false; this.objectTracker = null; this.panX = 0; this.panY = 0; this.panAngle = 0; this.panConeInner = 0; this.panConeOuter = 0; this.panConeOuterGain = 0; this.instanceObject = null; var add_end_listener = false; if (this.myapi === API_WEBAUDIO && this.buffer.myapi === API_HTML5 && !this.buffer.supportWebAudioAPI) this.myapi = API_HTML5; switch (this.myapi) { case API_HTML5: if (this.is_music) { this.instanceObject = buffer_.bufferObject; add_end_listener = !buffer_.added_end_listener; buffer_.added_end_listener = true; } else { this.instanceObject = new Audio(); this.instanceObject.crossOrigin = "anonymous"; this.instanceObject.autoplay = false; this.instanceObject.src = buffer_.bufferObject.src; add_end_listener = true; } if (add_end_listener) { this.instanceObject.addEventListener('ended', function() { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } break; case API_WEBAUDIO: this.gainNode = createGain(); this.gainNode["connect"](getDestinationForTag(tag_)); if (this.buffer.myapi === API_WEBAUDIO) { if (buffer_.bufferObject) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = buffer_.bufferObject; this.instanceObject["connect"](this.gainNode); } } else { this.instanceObject = this.buffer.bufferObject; // reference the audio element this.buffer.outNode["connect"](this.gainNode); if (!this.buffer.added_end_listener) { this.buffer.added_end_listener = true; this.buffer.bufferObject.addEventListener('ended', function() { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } } break; case API_CORDOVA: this.instanceObject = new window["Media"](appPath + this.src, null, null, function(status) { if (status === window["Media"]["MEDIA_STOPPED"]) { self.hasPlaybackEnded = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); } }); break; case API_APPMOBI: this.instanceObject = true; break; } }; C2AudioInstance.prototype.hasEnded = function() { var time; switch (this.myapi) { case API_HTML5: return this.instanceObject.ended; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (!this.fresh && !this.stopped && this.instanceObject["loop"]) return false; if (this.is_paused) return false; return this.hasPlaybackEnded; } else return this.instanceObject.ended; case API_CORDOVA: return this.hasPlaybackEnded; case API_APPMOBI: true; // recycling an AppMobi sound does not matter because it will just do another throwaway playSound } return true; }; C2AudioInstance.prototype.canBeRecycled = function() { if (this.fresh || this.stopped) return true; // not yet used or is not playing return this.hasEnded(); }; C2AudioInstance.prototype.setPannerEnabled = function(enable_) { if (api !== API_WEBAUDIO) return; if (!this.pannerEnabled && enable_) { if (!this.gainNode) return; if (!this.pannerNode) { this.pannerNode = context["createPanner"](); if (typeof this.pannerNode["panningModel"] === "number") this.pannerNode["panningModel"] = panningModel; else this.pannerNode["panningModel"] = ["equalpower", "HRTF", "soundfield"][panningModel]; if (typeof this.pannerNode["distanceModel"] === "number") this.pannerNode["distanceModel"] = distanceModel; else this.pannerNode["distanceModel"] = ["linear", "inverse", "exponential"][distanceModel]; this.pannerNode["refDistance"] = refDistance; this.pannerNode["maxDistance"] = maxDistance; this.pannerNode["rolloffFactor"] = rolloffFactor; } this.gainNode["disconnect"](); this.gainNode["connect"](this.pannerNode); this.pannerNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = true; } else if (this.pannerEnabled && !enable_) { if (!this.gainNode) return; this.pannerNode["disconnect"](); this.gainNode["disconnect"](); this.gainNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = false; } }; C2AudioInstance.prototype.setPan = function(x, y, angle, innerangle, outerangle, outergain) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; this.pannerNode["setPosition"](x, y, 0); this.pannerNode["setOrientation"](Math.cos(cr.to_radians(angle)), Math.sin(cr.to_radians(angle)), 0); this.pannerNode["coneInnerAngle"] = innerangle; this.pannerNode["coneOuterAngle"] = outerangle; this.pannerNode["coneOuterGain"] = outergain; this.panX = x; this.panY = y; this.panAngle = angle; this.panConeInner = innerangle; this.panConeOuter = outerangle; this.panConeOuterGain = outergain; }; C2AudioInstance.prototype.setObject = function(o) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; if (!this.objectTracker) this.objectTracker = new ObjectTracker(); this.objectTracker.setObject(o); }; C2AudioInstance.prototype.tick = function(dt) { if (!this.pannerEnabled || api !== API_WEBAUDIO || !this.objectTracker || !this.objectTracker.hasObject() || !this.isPlaying()) { return; } this.objectTracker.tick(dt); var inst = this.objectTracker.obj; var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); this.pannerNode["setPosition"](px, py, 0); var a = 0; if (typeof this.objectTracker.obj.angle !== "undefined") { a = inst.angle - inst.layer.getAngle(); this.pannerNode["setOrientation"](Math.cos(a), Math.sin(a), 0); } }; C2AudioInstance.prototype.play = function(looping, vol, fromPosition, scheduledTime) { var instobj = this.instanceObject; this.looping = looping; this.volume = vol; var seekPos = fromPosition || 0; scheduledTime = scheduledTime || 0; switch (this.myapi) { case API_HTML5: if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.volume !== vol * masterVolume) instobj.volume = vol * masterVolume; if (instobj.loop !== looping) instobj.loop = looping; if (instobj.muted) instobj.muted = false; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) {; } } tryPlayAudioElement(this); break; case API_WEBAUDIO: this.muted = false; this.mutevol = 1; if (this.buffer.myapi === API_WEBAUDIO) { this.gainNode["gain"]["value"] = vol * masterVolume; if (!this.fresh) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); } this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = looping; this.hasPlaybackEnded = false; if (seekPos === 0) startSource(this.instanceObject, scheduledTime); else startSourceAt(this.instanceObject, seekPos, this.getDuration(), scheduledTime); } else { if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.loop !== looping) instobj.loop = looping; instobj.volume = vol * masterVolume; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) {; } } tryPlayAudioElement(this); } break; case API_CORDOVA: if ((!this.fresh && this.stopped) || seekPos !== 0) instobj["seekTo"](seekPos); instobj["play"](); this.hasPlaybackEnded = false; break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["playSound"](this.src, looping); else AppMobi["player"]["playSound"](this.src, looping); break; } this.playbackRate = 1; this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - seekPos; this.fresh = false; this.stopped = false; this.is_paused = false; }; C2AudioInstance.prototype.stop = function() { switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) stopSource(this.instanceObject); else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_CORDOVA: this.instanceObject["stop"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.stopped = true; this.is_paused = false; }; C2AudioInstance.prototype.pause = function() { if (this.fresh || this.stopped || this.hasEnded() || this.is_paused) return; switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(true); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); this.is_paused = true; stopSource(this.instanceObject); } else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_CORDOVA: this.instanceObject["pause"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.is_paused = true; }; C2AudioInstance.prototype.resume = function() { if (this.fresh || this.stopped || this.hasEnded() || !this.is_paused) return; switch (this.myapi) { case API_HTML5: tryPlayAudioElement(this); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.updatePlaybackRate(); this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - (this.resume_position / (this.playbackRate || 0.001)); startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { tryPlayAudioElement(this); } break; case API_CORDOVA: this.instanceObject["play"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["resumeSound"](this.src); break; } this.is_paused = false; }; C2AudioInstance.prototype.seek = function(pos) { if (this.fresh || this.stopped || this.hasEnded()) return; switch (this.myapi) { case API_HTML5: try { this.instanceObject.currentTime = pos; } catch (e) {} break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) this.resume_position = pos; else { this.pause(); this.resume_position = pos; this.resume(); } } else { try { this.instanceObject.currentTime = pos; } catch (e) {} } break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["seekSound"](this.src, pos); break; } }; C2AudioInstance.prototype.reconnect = function(toNode) { if (this.myapi !== API_WEBAUDIO) return; if (this.pannerEnabled) { this.pannerNode["disconnect"](); this.pannerNode["connect"](toNode); } else { this.gainNode["disconnect"](); this.gainNode["connect"](toNode); } }; C2AudioInstance.prototype.getDuration = function(applyPlaybackRate) { var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.duration !== "undefined") ret = this.instanceObject.duration; break; case API_WEBAUDIO: ret = this.buffer.bufferObject["duration"]; break; case API_CORDOVA: ret = this.instanceObject["getDuration"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getDurationSound"](this.src); break; } if (applyPlaybackRate) ret /= (this.playbackRate || 0.001); // avoid divide-by-zero return ret; }; C2AudioInstance.prototype.getPlaybackTime = function(applyPlaybackRate) { var duration = this.getDuration(); var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) return this.resume_position; else ret = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - this.startTime; } else if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getPlaybackTimeSound"](this.src); break; } if (applyPlaybackRate) ret *= this.playbackRate; if (!this.looping && ret > duration) ret = duration; return ret; }; C2AudioInstance.prototype.isPlaying = function() { return !this.is_paused && !this.fresh && !this.stopped && !this.hasEnded(); }; C2AudioInstance.prototype.shouldSave = function() { return !this.fresh && !this.stopped && !this.hasEnded(); }; C2AudioInstance.prototype.setVolume = function(v) { this.volume = v; this.updateVolume(); }; C2AudioInstance.prototype.updateVolume = function() { var volToSet = this.volume * masterVolume; if (!isFinite(volToSet)) volToSet = 0; // HTMLMediaElement throws if setting non-finite volume switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.volume !== "undefined" && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.gainNode["gain"]["value"] = volToSet * this.mutevol; } else { if (typeof this.instanceObject.volume !== "undefined" && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.getVolume = function() { return this.volume; }; C2AudioInstance.prototype.doSetMuted = function(m) { switch (this.myapi) { case API_HTML5: if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.mutevol = (m ? 0 : 1); this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; } else { if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setMuted = function(m) { this.is_muted = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setSilent = function(m) { this.is_silent = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setLooping = function(l) { this.looping = l; switch (this.myapi) { case API_HTML5: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_WEBAUDIO: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_CORDOVA: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["setLoopingSound"](this.src, l); break; } }; C2AudioInstance.prototype.setPlaybackRate = function(r) { this.playbackRate = r; this.updatePlaybackRate(); }; C2AudioInstance.prototype.updatePlaybackRate = function() { var r = this.playbackRate; if (this.isTimescaled) r *= audRuntime.timescale; switch (this.myapi) { case API_HTML5: if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.instanceObject["playbackRate"]["value"] !== r) this.instanceObject["playbackRate"]["value"] = r; } else { if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; } break; case API_CORDOVA: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setSuspended = function(s) { switch (this.myapi) { case API_HTML5: if (s) { if (this.isPlaying()) { this.resume_me = true; this.instanceObject["pause"](); } else this.resume_me = false; } else { if (this.resume_me) { this.instanceObject["play"](); this.resume_me = false; } } break; case API_WEBAUDIO: if (s) { if (this.isPlaying()) { this.resume_me = true; if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(true); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); stopSource(this.instanceObject); } else this.instanceObject["pause"](); } else this.resume_me = false; } else { if (this.resume_me) { if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject["onended"] = this.onended_handler; this.active_buffer = this.instanceObject; this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.updatePlaybackRate(); this.startTime = (this.isTimescaled ? audRuntime.kahanTime.sum : audRuntime.wallTime.sum) - (this.resume_position / (this.playbackRate || 0.001)); startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject["play"](); } this.resume_me = false; } } break; case API_CORDOVA: if (s) { if (this.isPlaying()) { this.instanceObject["pause"](); this.resume_me = true; } else this.resume_me = false; } else { if (this.resume_me) { this.resume_me = false; this.instanceObject["play"](); } } break; case API_APPMOBI: break; } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; audRuntime = this.runtime; audInst = this; this.listenerTracker = null; this.listenerZ = -600; if (this.runtime.isWKWebView) playMusicAsSoundWorkaround = true; if ((this.runtime.isiOS || (this.runtime.isAndroid && (this.runtime.isChrome || this.runtime.isAndroidStockBrowser))) && !this.runtime.isCrosswalk && !this.runtime.isDomFree && !this.runtime.isAmazonWebApp && !playMusicAsSoundWorkaround) { useNextTouchWorkaround = true; } context = null; if (typeof AudioContext !== "undefined") { api = API_WEBAUDIO; context = new AudioContext(); } else if (typeof webkitAudioContext !== "undefined") { api = API_WEBAUDIO; context = new webkitAudioContext(); } if (this.runtime.isiOS && context) { if (context.close) context.close(); if (typeof AudioContext !== "undefined") context = new AudioContext(); else if (typeof webkitAudioContext !== "undefined") context = new webkitAudioContext(); } if (api !== API_WEBAUDIO) { if (this.runtime.isCordova && typeof window["Media"] !== "undefined") api = API_CORDOVA; else if (this.runtime.isAppMobi) api = API_APPMOBI; } if (api === API_CORDOVA) { appPath = location.href; var i = appPath.lastIndexOf("/"); if (i > -1) appPath = appPath.substr(0, i + 1); appPath = appPath.replace("file://", ""); } if (this.runtime.isSafari && this.runtime.isWindows && typeof Audio === "undefined") { alert("It looks like you're using Safari for Windows without Quicktime. Audio cannot be played until Quicktime is installed."); this.runtime.DestroyInstance(this); } else { if (this.runtime.isDirectCanvas) useOgg = this.runtime.isAndroid; // AAC on iOS, OGG on Android else { try { useOgg = !!(new Audio().canPlayType('audio/ogg; codecs="vorbis"')) && !this.runtime.isWindows10; } catch (e) { useOgg = false; } } switch (api) { case API_HTML5: ; break; case API_WEBAUDIO: ; break; case API_CORDOVA: ; break; case API_APPMOBI: ; break; default: ; } this.runtime.tickMe(this); } }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.runtime.audioInstance = this; timescale_mode = this.properties[0]; // 0 = off, 1 = sounds only, 2 = all this.saveload = this.properties[1]; // 0 = all, 1 = sounds only, 2 = music only, 3 = none this.playinbackground = (this.properties[2] !== 0); this.nextPlayTime = 0; panningModel = this.properties[3]; // 0 = equalpower, 1 = hrtf, 3 = soundfield distanceModel = this.properties[4]; // 0 = linear, 1 = inverse, 2 = exponential this.listenerZ = -this.properties[5]; refDistance = this.properties[6]; maxDistance = this.properties[7]; rolloffFactor = this.properties[8]; this.listenerTracker = new ObjectTracker(); var draw_width = (this.runtime.draw_width || this.runtime.width); var draw_height = (this.runtime.draw_height || this.runtime.height); if (api === API_WEBAUDIO) { context["listener"]["setPosition"](draw_width / 2, draw_height / 2, this.listenerZ); context["listener"]["setOrientation"](0, 0, 1, 0, -1, 0); window["c2OnAudioMicStream"] = function(localMediaStream, tag) { if (micSource) micSource["disconnect"](); micTag = tag.toLowerCase(); micSource = context["createMediaStreamSource"](localMediaStream); micSource["connect"](getDestinationForTag(micTag)); }; } this.runtime.addSuspendCallback(function(s) { audInst.onSuspend(s); }); var self = this; this.runtime.addDestroyCallback(function(inst) { self.onInstanceDestroyed(inst); }); }; instanceProto.onInstanceDestroyed = function(inst) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.objectTracker) { if (a.objectTracker.obj === inst) { a.objectTracker.obj = null; if (a.pannerEnabled && a.isPlaying() && a.looping) a.stop(); } } } if (this.listenerTracker.obj === inst) this.listenerTracker.obj = null; }; instanceProto.saveToJSON = function() { var o = { "silent": silent, "masterVolume": masterVolume, "listenerZ": this.listenerZ, "listenerUid": this.listenerTracker.hasObject() ? this.listenerTracker.obj.uid : -1, "playing": [], "effects": {} }; var playingarr = o["playing"]; var i, len, a, d, p, panobj, playbackTime; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (!a.shouldSave()) continue; // no need to save stopped sounds if (this.saveload === 3) // not saving/loading any sounds/music continue; if (a.is_music && this.saveload === 1) // not saving/loading music continue; if (!a.is_music && this.saveload === 2) // not saving/loading sound continue; playbackTime = a.getPlaybackTime(); if (a.looping) playbackTime = playbackTime % a.getDuration(); d = { "tag": a.tag, "buffersrc": a.buffer.src, "is_music": a.is_music, "playbackTime": playbackTime, "volume": a.volume, "looping": a.looping, "muted": a.is_muted, "playbackRate": a.playbackRate, "paused": a.is_paused, "resume_position": a.resume_position }; if (a.pannerEnabled) { d["pan"] = {}; panobj = d["pan"]; if (a.objectTracker && a.objectTracker.hasObject()) { panobj["objUid"] = a.objectTracker.obj.uid; } else { panobj["x"] = a.panX; panobj["y"] = a.panY; panobj["a"] = a.panAngle; } panobj["ia"] = a.panConeInner; panobj["oa"] = a.panConeOuter; panobj["og"] = a.panConeOuterGain; } playingarr.push(d); } var fxobj = o["effects"]; var fxarr; for (p in effects) { if (effects.hasOwnProperty(p)) { fxarr = []; for (i = 0, len = effects[p].length; i < len; i++) { fxarr.push({ "type": effects[p][i].type, "params": effects[p][i].params }); } fxobj[p] = fxarr; } } return o; }; var objectTrackerUidsToLoad = []; instanceProto.loadFromJSON = function(o) { var setSilent = o["silent"]; masterVolume = o["masterVolume"]; this.listenerZ = o["listenerZ"]; this.listenerTracker.setObject(null); var listenerUid = o["listenerUid"]; if (listenerUid !== -1) { this.listenerTracker.loadUid = listenerUid; objectTrackerUidsToLoad.push(this.listenerTracker); } var playingarr = o["playing"]; var i, len, d, src, is_music, tag, playbackTime, looping, vol, b, a, p, pan, panObjUid; if (this.saveload !== 3) { for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.is_music && this.saveload === 1) continue; // only saving/loading sound: leave music playing if (!a.is_music && this.saveload === 2) continue; // only saving/loading music: leave sound playing a.stop(); } } var fxarr, fxtype, fxparams, fx; for (p in effects) { if (effects.hasOwnProperty(p)) { for (i = 0, len = effects[p].length; i < len; i++) effects[p][i].remove(); } } cr.wipe(effects); for (p in o["effects"]) { if (o["effects"].hasOwnProperty(p)) { fxarr = o["effects"][p]; for (i = 0, len = fxarr.length; i < len; i++) { fxtype = fxarr[i]["type"]; fxparams = fxarr[i]["params"]; switch (fxtype) { case "filter": addEffectForTag(p, new FilterEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "delay": addEffectForTag(p, new DelayEffect(fxparams[0], fxparams[1], fxparams[2])); break; case "convolve": src = fxparams[2]; b = this.getAudioBuffer(src, false); if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, fxparams[0], fxparams[1], src); } else { fx = new ConvolveEffect(null, fxparams[0], fxparams[1], src); b.normalizeWhenReady = fxparams[0]; b.convolveWhenReady = fx; } addEffectForTag(p, fx); break; case "flanger": addEffectForTag(p, new FlangerEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "phaser": addEffectForTag(p, new PhaserEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "gain": addEffectForTag(p, new GainEffect(fxparams[0])); break; case "tremolo": addEffectForTag(p, new TremoloEffect(fxparams[0], fxparams[1])); break; case "ringmod": addEffectForTag(p, new RingModulatorEffect(fxparams[0], fxparams[1])); break; case "distortion": addEffectForTag(p, new DistortionEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "compressor": addEffectForTag(p, new CompressorEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "analyser": addEffectForTag(p, new AnalyserEffect(fxparams[0], fxparams[1])); break; } } } } for (i = 0, len = playingarr.length; i < len; i++) { if (this.saveload === 3) // not saving/loading any sounds/music continue; d = playingarr[i]; src = d["buffersrc"]; is_music = d["is_music"]; tag = d["tag"]; playbackTime = d["playbackTime"]; looping = d["looping"]; vol = d["volume"]; pan = d["pan"]; panObjUid = (pan && pan.hasOwnProperty("objUid")) ? pan["objUid"] : -1; if (is_music && this.saveload === 1) // not saving/loading music continue; if (!is_music && this.saveload === 2) // not saving/loading sound continue; a = this.getAudioInstance(src, tag, is_music, looping, vol); if (!a) { b = this.getAudioBuffer(src, is_music); b.seekWhenReady = playbackTime; b.pauseWhenReady = d["paused"]; if (pan) { if (panObjUid !== -1) { b.panWhenReady.push({ objUid: panObjUid, ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } else { b.panWhenReady.push({ x: pan["x"], y: pan["y"], a: pan["a"], ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } } continue; } a.resume_position = d["resume_position"]; a.setPannerEnabled(!!pan); a.play(looping, vol, playbackTime); a.updatePlaybackRate(); a.updateVolume(); a.doSetMuted(a.is_muted || a.is_silent); if (d["paused"]) a.pause(); if (d["muted"]) a.setMuted(true); a.doSetMuted(a.is_muted || a.is_silent); if (pan) { if (panObjUid !== -1) { a.objectTracker = a.objectTracker || new ObjectTracker(); a.objectTracker.loadUid = panObjUid; objectTrackerUidsToLoad.push(a.objectTracker); } else { a.setPan(pan["x"], pan["y"], pan["a"], pan["ia"], pan["oa"], pan["og"]); } } } if (setSilent && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (!setSilent && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; instanceProto.afterLoad = function() { var i, len, ot, inst; for (i = 0, len = objectTrackerUidsToLoad.length; i < len; i++) { ot = objectTrackerUidsToLoad[i]; inst = this.runtime.getObjectByUID(ot.loadUid); ot.setObject(inst); ot.loadUid = -1; if (inst) { listenerX = inst.x; listenerY = inst.y; } } cr.clearArray(objectTrackerUidsToLoad); }; instanceProto.onSuspend = function(s) { if (this.playinbackground) return; if (!s && context && context["resume"]) { context["resume"](); isContextSuspended = false; } var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSuspended(s); if (s && context && context["suspend"]) { context["suspend"](); isContextSuspended = true; } }; instanceProto.tick = function() { var dt = this.runtime.dt; var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; a.tick(dt); if (timescale_mode !== 0) a.updatePlaybackRate(); } var p, arr, f; for (p in effects) { if (effects.hasOwnProperty(p)) { arr = effects[p]; for (i = 0, len = arr.length; i < len; i++) { f = arr[i]; if (f.tick) f.tick(); } } } if (api === API_WEBAUDIO && this.listenerTracker.hasObject()) { this.listenerTracker.tick(dt); listenerX = this.listenerTracker.obj.x; listenerY = this.listenerTracker.obj.y; context["listener"]["setPosition"](this.listenerTracker.obj.x, this.listenerTracker.obj.y, this.listenerZ); } }; var preload_list = []; instanceProto.setPreloadList = function(arr) { var i, len, p, filename, size, isOgg; var total_size = 0; for (i = 0, len = arr.length; i < len; ++i) { p = arr[i]; filename = p[0]; size = p[1] * 2; isOgg = (filename.length > 4 && filename.substr(filename.length - 4) === ".ogg"); if ((isOgg && useOgg) || (!isOgg && !useOgg)) { preload_list.push({ filename: filename, size: size, obj: null }); total_size += size; } } return total_size; }; instanceProto.startPreloads = function() { var i, len, p, src; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; src = this.runtime.files_subfolder + p.filename; p.obj = this.getAudioBuffer(src, false); } }; instanceProto.getPreloadedSize = function() { var completed = 0; var i, len, p; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; if (p.obj.isLoadedAndDecoded() || p.obj.hasFailedToLoad() || this.runtime.isDomFree || this.runtime.isAndroidStockBrowser) { completed += p.size; } else if (p.obj.isLoaded()) // downloaded but not decoded: only happens in Web Audio API, count as half-way progress { completed += Math.floor(p.size / 2); } }; return completed; }; instanceProto.releaseAllMusicBuffers = function() { var i, len, j, b; for (i = 0, j = 0, len = audioBuffers.length; i < len; ++i) { b = audioBuffers[i]; audioBuffers[j] = b; if (b.is_music) b.release(); else ++j; // keep } audioBuffers.length = j; }; instanceProto.getAudioBuffer = function(src_, is_music, dont_create) { var i, len, a, ret = null, j, k, lenj, ai; for (i = 0, len = audioBuffers.length; i < len; i++) { a = audioBuffers[i]; if (a.src === src_) { ret = a; break; } } if (!ret && !dont_create) { if (playMusicAsSoundWorkaround && is_music) this.releaseAllMusicBuffers(); ret = new C2AudioBuffer(src_, is_music); audioBuffers.push(ret); } return ret; }; instanceProto.getAudioInstance = function(src_, tag, is_music, looping, vol) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.src === src_ && (a.canBeRecycled() || is_music)) { a.tag = tag; return a; } } var b = this.getAudioBuffer(src_, is_music); if (!b.bufferObject) { if (tag !== "<preload>") { b.playTagWhenReady = tag; b.loopWhenReady = looping; b.volumeWhenReady = vol; } return null; } a = new C2AudioInstance(b, tag); audioInstances.push(a); return a; }; var taggedAudio = []; function SortByIsPlaying(a, b) { var an = a.isPlaying() ? 1 : 0; var bn = b.isPlaying() ? 1 : 0; if (an === bn) return 0; else if (an < bn) return 1; else return -1; }; function getAudioByTag(tag, sort_by_playing) { cr.clearArray(taggedAudio); if (!tag.length) { if (!lastAudio || lastAudio.hasEnded()) return; else { cr.clearArray(taggedAudio); taggedAudio[0] = lastAudio; return; } } var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (cr.equals_nocase(tag, a.tag)) taggedAudio.push(a); } if (sort_by_playing) taggedAudio.sort(SortByIsPlaying); }; function reconnectEffects(tag) { var i, len, arr, n, toNode = context["destination"]; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { toNode = arr[0].getInputNode(); for (i = 0, len = arr.length; i < len; i++) { n = arr[i]; if (i + 1 === len) n.connectTo(context["destination"]); else n.connectTo(arr[i + 1].getInputNode()); } } } getAudioByTag(tag); for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].reconnect(toNode); if (micSource && micTag === tag) { micSource["disconnect"](); micSource["connect"](toNode); } }; function addEffectForTag(tag, fx) { if (!effects.hasOwnProperty(tag)) effects[tag] = [fx]; else effects[tag].push(fx); reconnectEffects(tag); }; function Cnds() {}; Cnds.prototype.OnEnded = function(t) { return cr.equals_nocase(audTag, t); }; Cnds.prototype.PreloadsComplete = function() { var i, len; for (i = 0, len = audioBuffers.length; i < len; i++) { if (!audioBuffers[i].isLoadedAndDecoded() && !audioBuffers[i].hasFailedToLoad()) return false; } return true; }; Cnds.prototype.AdvancedAudioSupported = function() { return api === API_WEBAUDIO; }; Cnds.prototype.IsSilent = function() { return silent; }; Cnds.prototype.IsAnyPlaying = function() { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) { if (audioInstances[i].isPlaying()) return true; } return false; }; Cnds.prototype.IsTagPlaying = function(tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (taggedAudio[i].isPlaying()) return true; } return false; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Play = function(file, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping !== 0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping !== 0, v, 0, this.nextPlayTime); this.nextPlayTime = 0; }; Acts.prototype.PlayAtPosition = function(file, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping !== 0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping !== 0, v, 0, this.nextPlayTime); this.nextPlayTime = 0; }; Acts.prototype.PlayAtObject = function(file, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping !== 0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping !== 0, v, 0, this.nextPlayTime); this.nextPlayTime = 0; }; Acts.prototype.PlayByName = function(folder, filename, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping !== 0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping !== 0, v, 0, this.nextPlayTime); this.nextPlayTime = 0; }; Acts.prototype.PlayAtPositionByName = function(folder, filename, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping !== 0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping !== 0, v, 0, this.nextPlayTime); this.nextPlayTime = 0; }; Acts.prototype.PlayAtObjectByName = function(folder, filename, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping !== 0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping !== 0, v, 0, this.nextPlayTime); this.nextPlayTime = 0; }; Acts.prototype.SetLooping = function(tag, looping) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setLooping(looping === 0); }; Acts.prototype.SetMuted = function(tag, muted) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setMuted(muted === 0); }; Acts.prototype.SetVolume = function(tag, vol) { getAudioByTag(tag); var v = dbToLinear(vol); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setVolume(v); }; Acts.prototype.Preload = function(file) { if (silent) return; var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_CORDOVA) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.PreloadByName = function(folder, filename) { if (silent) return; var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_CORDOVA) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.SetPlaybackRate = function(tag, rate) { getAudioByTag(tag); if (rate < 0.0) rate = 0; var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setPlaybackRate(rate); }; Acts.prototype.Stop = function(tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].stop(); }; Acts.prototype.StopAll = function() { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].stop(); }; Acts.prototype.SetPaused = function(tag, state) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (state === 0) taggedAudio[i].pause(); else taggedAudio[i].resume(); } }; Acts.prototype.Seek = function(tag, pos) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { taggedAudio[i].seek(pos); } }; Acts.prototype.SetSilent = function(s) { var i, len; if (s === 2) // toggling s = (silent ? 1 : 0); // choose opposite state if (s === 0 && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (s === 1 && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; Acts.prototype.SetMasterVolume = function(vol) { masterVolume = dbToLinear(vol); var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].updateVolume(); }; Acts.prototype.AddFilterEffect = function(tag, type, freq, detune, q, gain, mix) { if (api !== API_WEBAUDIO || type < 0 || type >= filterTypes.length || !context["createBiquadFilter"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FilterEffect(type, freq, detune, q, gain, mix)); }; Acts.prototype.AddDelayEffect = function(tag, delay, gain, mix) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DelayEffect(delay, dbToLinear(gain), mix)); }; Acts.prototype.AddFlangerEffect = function(tag, delay, modulation, freq, feedback, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FlangerEffect(delay / 1000, modulation / 1000, freq, feedback / 100, mix)); }; Acts.prototype.AddPhaserEffect = function(tag, freq, detune, q, mod, modfreq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new PhaserEffect(freq, detune, q, mod, modfreq, mix)); }; Acts.prototype.AddConvolutionEffect = function(tag, file, norm, mix) { if (api !== API_WEBAUDIO || !context["createConvolver"]) return; var doNormalize = (norm === 0); var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); var b = this.getAudioBuffer(src, false); tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; var fx; if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, doNormalize, mix, src); } else { fx = new ConvolveEffect(null, doNormalize, mix, src); b.normalizeWhenReady = doNormalize; b.convolveWhenReady = fx; } addEffectForTag(tag, fx); }; Acts.prototype.AddGainEffect = function(tag, g) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(dbToLinear(g))); }; Acts.prototype.AddMuteEffect = function(tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(0)); // re-use gain effect with 0 gain }; Acts.prototype.AddTremoloEffect = function(tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new TremoloEffect(freq, mix)); }; Acts.prototype.AddRingModEffect = function(tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new RingModulatorEffect(freq, mix)); }; Acts.prototype.AddDistortionEffect = function(tag, threshold, headroom, drive, makeupgain, mix) { if (api !== API_WEBAUDIO || !context["createWaveShaper"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DistortionEffect(threshold, headroom, drive, makeupgain, mix)); }; Acts.prototype.AddCompressorEffect = function(tag, threshold, knee, ratio, attack, release) { if (api !== API_WEBAUDIO || !context["createDynamicsCompressor"]) return; tag = tag.toLowerCase(); addEffectForTag(tag, new CompressorEffect(threshold, knee, ratio, attack / 1000, release / 1000)); }; Acts.prototype.AddAnalyserEffect = function(tag, fftSize, smoothing) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new AnalyserEffect(fftSize, smoothing)); }; Acts.prototype.RemoveEffects = function(tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); var i, len, arr; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { for (i = 0, len = arr.length; i < len; i++) arr[i].remove(); cr.clearArray(arr); reconnectEffects(tag); } } }; Acts.prototype.SetEffectParameter = function(tag, index, param, value, ramp, time) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); index = Math.floor(index); var arr; if (!effects.hasOwnProperty(tag)) return; arr = effects[tag]; if (index < 0 || index >= arr.length) return; arr[index].setParam(param, value, ramp, time); }; Acts.prototype.SetListenerObject = function(obj_) { if (!obj_ || api !== API_WEBAUDIO) return; var inst = obj_.getFirstPicked(); if (!inst) return; this.listenerTracker.setObject(inst); listenerX = inst.x; listenerY = inst.y; }; Acts.prototype.SetListenerZ = function(z) { this.listenerZ = z; }; Acts.prototype.ScheduleNextPlay = function(t) { if (!context) return; // needs Web Audio API this.nextPlayTime = t; }; Acts.prototype.UnloadAudio = function(file) { var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); var b = this.getAudioBuffer(src, is_music, true /* don't create if missing */ ); if (!b) return; // not loaded b.release(); cr.arrayFindRemove(audioBuffers, b); }; Acts.prototype.UnloadAudioByName = function(folder, filename) { var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); var b = this.getAudioBuffer(src, is_music, true /* don't create if missing */ ); if (!b) return; // not loaded b.release(); cr.arrayFindRemove(audioBuffers, b); }; Acts.prototype.UnloadAll = function() { var i, len; for (i = 0, len = audioBuffers.length; i < len; ++i) { audioBuffers[i].release(); }; cr.clearArray(audioBuffers); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.Duration = function(ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getDuration()); else ret.set_float(0); }; Exps.prototype.PlaybackTime = function(ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getPlaybackTime(true)); else ret.set_float(0); }; Exps.prototype.Volume = function(ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) { var v = taggedAudio[0].getVolume(); ret.set_float(linearToDb(v)); } else ret.set_float(0); }; Exps.prototype.MasterVolume = function(ret) { ret.set_float(linearToDb(masterVolume)); }; Exps.prototype.EffectCount = function(ret, tag) { tag = tag.toLowerCase(); var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; ret.set_int(arr ? arr.length : 0); }; function getAnalyser(tag, index) { var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; if (arr && index >= 0 && index < arr.length && arr[index].freqBins) return arr[index]; else return null; }; Exps.prototype.AnalyserFreqBinCount = function(ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); ret.set_int(analyser ? analyser.node["frequencyBinCount"] : 0); }; Exps.prototype.AnalyserFreqBinAt = function(ret, tag, index, bin) { tag = tag.toLowerCase(); index = Math.floor(index); bin = Math.floor(bin); var analyser = getAnalyser(tag, index); if (!analyser) ret.set_float(0); else if (bin < 0 || bin >= analyser.node["frequencyBinCount"]) ret.set_float(0); else ret.set_float(analyser.freqBins[bin]); }; Exps.prototype.AnalyserPeakLevel = function(ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.peak); else ret.set_float(0); }; Exps.prototype.AnalyserRMSLevel = function(ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.rms); else ret.set_float(0); }; Exps.prototype.SampleRate = function(ret) { ret.set_int(context ? context.sampleRate : 0); }; Exps.prototype.CurrentTime = function(ret) { ret.set_float(context ? context.currentTime : cr.performance_now()); }; pluginProto.exps = new Exps(); }());;; cr.plugins_.Browser = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.Browser.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; var offlineScriptReady = false; var browserPluginReady = false; document.addEventListener("DOMContentLoaded", function() { if (window["C2_RegisterSW"] && navigator["serviceWorker"]) { var offlineClientScript = document.createElement("script"); offlineClientScript.onload = function() { offlineScriptReady = true; checkReady() }; offlineClientScript.src = "offlineClient.js"; document.head.appendChild(offlineClientScript); } }); var browserInstance = null; typeProto.onAppBegin = function() { browserPluginReady = true; checkReady(); }; function checkReady() { if (offlineScriptReady && browserPluginReady && window["OfflineClientInfo"]) { window["OfflineClientInfo"]["SetMessageCallback"](function(e) { browserInstance.onSWMessage(e); }); } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; window.addEventListener("resize", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnResize, self); }); browserInstance = this; if (typeof navigator.onLine !== "undefined") { window.addEventListener("online", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOnline, self); }); window.addEventListener("offline", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOffline, self); }); } if (!this.runtime.isDirectCanvas) { document.addEventListener("appMobi.device.update.available", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); document.addEventListener("backbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }); document.addEventListener("menubutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); }); document.addEventListener("searchbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnSearchButton, self); }); document.addEventListener("tizenhwkey", function(e) { var ret; switch (e["keyName"]) { case "back": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); if (!ret) { if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); } break; case "menu": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); if (!ret) e.preventDefault(); break; } }); } if (this.runtime.isWindows10 && typeof Windows !== "undefined") { Windows["UI"]["Core"]["SystemNavigationManager"]["getForCurrentView"]().addEventListener("backrequested", function(e) { var ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); if (ret) e["handled"] = true; }); } else if (this.runtime.isWinJS && WinJS["Application"]) { WinJS["Application"]["onbackclick"] = function(e) { return !!self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }; } this.runtime.addSuspendCallback(function(s) { if (s) { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageHidden, self); } else { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageVisible, self); } }); this.is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); }; instanceProto.onSWMessage = function(e) { var messageType = e["data"]["type"]; if (messageType === "downloading-update") this.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateFound, this); else if (messageType === "update-ready" || messageType === "update-pending") this.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, this); else if (messageType === "offline-ready") this.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOfflineReady, this); }; var batteryManager = null; var loadedBatteryManager = false; function maybeLoadBatteryManager() { if (loadedBatteryManager) return; if (!navigator["getBattery"]) return; var promise = navigator["getBattery"](); loadedBatteryManager = true; if (promise) { promise.then(function(manager) { batteryManager = manager; }); } }; function Cnds() {}; Cnds.prototype.CookiesEnabled = function() { return navigator ? navigator.cookieEnabled : false; }; Cnds.prototype.IsOnline = function() { return navigator ? navigator.onLine : false; }; Cnds.prototype.HasJava = function() { return navigator ? navigator.javaEnabled() : false; }; Cnds.prototype.OnOnline = function() { return true; }; Cnds.prototype.OnOffline = function() { return true; }; Cnds.prototype.IsDownloadingUpdate = function() { return false; // deprecated }; Cnds.prototype.OnUpdateReady = function() { return true; }; Cnds.prototype.PageVisible = function() { return !this.runtime.isSuspended; }; Cnds.prototype.OnPageVisible = function() { return true; }; Cnds.prototype.OnPageHidden = function() { return true; }; Cnds.prototype.OnResize = function() { return true; }; Cnds.prototype.IsFullscreen = function() { return !!(document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || this.runtime.isNodeFullscreen); }; Cnds.prototype.OnBackButton = function() { return true; }; Cnds.prototype.OnMenuButton = function() { return true; }; Cnds.prototype.OnSearchButton = function() { return true; }; Cnds.prototype.IsMetered = function() { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) return false; return !!connection["metered"]; }; Cnds.prototype.IsCharging = function() { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { return !!battery["charging"] } else { maybeLoadBatteryManager(); if (batteryManager) { return !!batteryManager["charging"]; } else { return true; // if unknown, default to charging (powered) } } }; Cnds.prototype.IsPortraitLandscape = function(p) { var current = (window.innerWidth <= window.innerHeight ? 0 : 1); return current === p; }; Cnds.prototype.SupportsFullscreen = function() { if (this.runtime.isNodeWebkit) return true; var elem = this.runtime.canvasdiv || this.runtime.canvas; return !!(elem["requestFullscreen"] || elem["mozRequestFullScreen"] || elem["msRequestFullscreen"] || elem["webkitRequestFullScreen"]); }; Cnds.prototype.OnUpdateFound = function() { return true; }; Cnds.prototype.OnUpdateReady = function() { return true; }; Cnds.prototype.OnOfflineReady = function() { return true; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Alert = function(msg) { if (!this.runtime.isDomFree) alert(msg.toString()); }; Acts.prototype.Close = function() { if (this.runtime.isCocoonJs) CocoonJS["App"]["forceToFinish"](); else if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); else if (navigator["app"] && navigator["app"]["exitApp"]) navigator["app"]["exitApp"](); else if (navigator["device"] && navigator["device"]["exitApp"]) navigator["device"]["exitApp"](); else if (!this.is_arcade && !this.runtime.isDomFree) window.close(); }; Acts.prototype.Focus = function() { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["focus"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.focus(); }; Acts.prototype.Blur = function() { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["blur"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.blur(); }; Acts.prototype.GoBack = function() { if (navigator["app"] && navigator["app"]["backHistory"]) navigator["app"]["backHistory"](); else if (!this.is_arcade && !this.runtime.isDomFree && window.back) window.back(); }; Acts.prototype.GoForward = function() { if (!this.is_arcade && !this.runtime.isDomFree && window.forward) window.forward(); }; Acts.prototype.GoHome = function() { if (!this.is_arcade && !this.runtime.isDomFree && window.home) window.home(); }; Acts.prototype.GoToURL = function(url, target) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (self["cordova"] && self["cordova"]["InAppBrowser"]) self["cordova"]["InAppBrowser"]["open"](url, "_system"); else if (!this.is_arcade && !this.runtime.isDomFree) { if (target === 2 && !this.is_arcade) // top window.top.location = url; else if (target === 1 && !this.is_arcade) // parent window.parent.location = url; else // self window.location = url; } }; Acts.prototype.GoToURLWindow = function(url, tag) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (self["cordova"] && self["cordova"]["InAppBrowser"]) self["cordova"]["InAppBrowser"]["open"](url, "_system"); else if (!this.is_arcade && !this.runtime.isDomFree) window.open(url, tag); }; Acts.prototype.Reload = function() { if (!this.is_arcade && !this.runtime.isDomFree) window.location.reload(); }; var firstRequestFullscreen = true; var crruntime = null; function onFullscreenError(e) { if (console && console.warn) console.warn("Fullscreen request failed: ", e); crruntime["setSize"](window.innerWidth, window.innerHeight); }; Acts.prototype.RequestFullScreen = function(stretchmode) { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Requesting fullscreen is not supported on this platform - the request has been ignored"); return; } if (stretchmode >= 2) stretchmode += 1; if (stretchmode === 6) stretchmode = 2; if (this.runtime.isNodeWebkit) { if (this.runtime.isDebug) { debuggerFullscreen(true); } else if (!this.runtime.isNodeFullscreen && window["nwgui"]) { window["nwgui"]["Window"]["get"]()["enterFullscreen"](); this.runtime.isNodeFullscreen = true; this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); } } else { if (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || document["fullScreenElement"]) { return; } this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); var elem = document.documentElement; if (firstRequestFullscreen) { firstRequestFullscreen = false; crruntime = this.runtime; elem.addEventListener("mozfullscreenerror", onFullscreenError); elem.addEventListener("webkitfullscreenerror", onFullscreenError); elem.addEventListener("MSFullscreenError", onFullscreenError); elem.addEventListener("fullscreenerror", onFullscreenError); } if (elem["requestFullscreen"]) elem["requestFullscreen"](); else if (elem["mozRequestFullScreen"]) elem["mozRequestFullScreen"](); else if (elem["msRequestFullscreen"]) elem["msRequestFullscreen"](); else if (elem["webkitRequestFullScreen"]) { if (typeof Element !== "undefined" && typeof Element["ALLOW_KEYBOARD_INPUT"] !== "undefined") elem["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]); else elem["webkitRequestFullScreen"](); } } }; Acts.prototype.CancelFullScreen = function() { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Exiting fullscreen is not supported on this platform - the request has been ignored"); return; } if (this.runtime.isNodeWebkit) { if (this.runtime.isDebug) { debuggerFullscreen(false); } else if (this.runtime.isNodeFullscreen && window["nwgui"]) { window["nwgui"]["Window"]["get"]()["leaveFullscreen"](); this.runtime.isNodeFullscreen = false; } } else { if (document["exitFullscreen"]) document["exitFullscreen"](); else if (document["mozCancelFullScreen"]) document["mozCancelFullScreen"](); else if (document["msExitFullscreen"]) document["msExitFullscreen"](); else if (document["webkitCancelFullScreen"]) document["webkitCancelFullScreen"](); } }; Acts.prototype.Vibrate = function(pattern_) { try { var arr = pattern_.split(","); var i, len; for (i = 0, len = arr.length; i < len; i++) { arr[i] = parseInt(arr[i], 10); } if (navigator["vibrate"]) navigator["vibrate"](arr); else if (navigator["mozVibrate"]) navigator["mozVibrate"](arr); else if (navigator["webkitVibrate"]) navigator["webkitVibrate"](arr); else if (navigator["msVibrate"]) navigator["msVibrate"](arr); } catch (e) {} }; Acts.prototype.InvokeDownload = function(url_, filename_) { var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(url_); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = url_; a["download"] = filename_; body.appendChild(a); var clickEvent = new MouseEvent("click"); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.InvokeDownloadString = function(str_, mimetype_, filename_) { var datauri = "data:" + mimetype_ + "," + encodeURIComponent(str_); var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(datauri); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = datauri; a["download"] = filename_; body.appendChild(a); var clickEvent = new MouseEvent("click"); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.ConsoleLog = function(type_, msg_) { if (typeof console === "undefined") return; if (type_ === 0 && console.log) console.log(msg_.toString()); if (type_ === 1 && console.warn) console.warn(msg_.toString()); if (type_ === 2 && console.error) console.error(msg_.toString()); }; Acts.prototype.ConsoleGroup = function(name_) { if (console && console.group) console.group(name_); }; Acts.prototype.ConsoleGroupEnd = function() { if (console && console.groupEnd) console.groupEnd(); }; Acts.prototype.ExecJs = function(js_) { try { if (eval) eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } }; var orientations = [ "portrait", "landscape", "portrait-primary", "portrait-secondary", "landscape-primary", "landscape-secondary" ]; Acts.prototype.LockOrientation = function(o) { o = Math.floor(o); if (o < 0 || o >= orientations.length) return; this.runtime.autoLockOrientation = false; var orientation = orientations[o]; if (screen["orientation"] && screen["orientation"]["lock"]) screen["orientation"]["lock"](orientation); else if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); }; Acts.prototype.UnlockOrientation = function() { this.runtime.autoLockOrientation = false; if (screen["orientation"] && screen["orientation"]["unlock"]) screen["orientation"]["unlock"](); else if (screen["unlockOrientation"]) screen["unlockOrientation"](); else if (screen["webkitUnlockOrientation"]) screen["webkitUnlockOrientation"](); else if (screen["mozUnlockOrientation"]) screen["mozUnlockOrientation"](); else if (screen["msUnlockOrientation"]) screen["msUnlockOrientation"](); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.URL = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.toString()); }; Exps.prototype.Protocol = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.protocol); }; Exps.prototype.Domain = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hostname); }; Exps.prototype.PathName = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.pathname); }; Exps.prototype.Hash = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hash); }; Exps.prototype.Referrer = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : document.referrer); }; Exps.prototype.Title = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : document.title); }; Exps.prototype.Name = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appName); }; Exps.prototype.Version = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appVersion); }; Exps.prototype.Language = function(ret) { if (navigator && navigator.language) ret.set_string(navigator.language); else ret.set_string(""); }; Exps.prototype.Platform = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.platform); }; Exps.prototype.Product = function(ret) { if (navigator && navigator.product) ret.set_string(navigator.product); else ret.set_string(""); }; Exps.prototype.Vendor = function(ret) { if (navigator && navigator.vendor) ret.set_string(navigator.vendor); else ret.set_string(""); }; Exps.prototype.UserAgent = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.userAgent); }; Exps.prototype.QueryString = function(ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.search); }; Exps.prototype.QueryParam = function(ret, paramname) { if (this.runtime.isDomFree) { ret.set_string(""); return; } var match = RegExp('[?&]' + paramname + '=([^&]*)').exec(window.location.search); if (match) ret.set_string(decodeURIComponent(match[1].replace(/\+/g, ' '))); else ret.set_string(""); }; Exps.prototype.Bandwidth = function(ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_float(Number.POSITIVE_INFINITY); else { if (typeof connection["bandwidth"] !== "undefined") ret.set_float(connection["bandwidth"]); else if (typeof connection["downlinkMax"] !== "undefined") ret.set_float(connection["downlinkMax"]); else ret.set_float(Number.POSITIVE_INFINITY); } }; Exps.prototype.ConnectionType = function(ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_string("unknown"); else { ret.set_string(connection["type"] || "unknown"); } }; Exps.prototype.BatteryLevel = function(ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { ret.set_float(battery["level"]); } else { maybeLoadBatteryManager(); if (batteryManager) { ret.set_float(batteryManager["level"]); } else { ret.set_float(1); // not supported/unknown: assume charged } } }; Exps.prototype.BatteryTimeLeft = function(ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (battery) { ret.set_float(battery["dischargingTime"]); } else { maybeLoadBatteryManager(); if (batteryManager) { ret.set_float(batteryManager["dischargingTime"]); } else { ret.set_float(Number.POSITIVE_INFINITY); // not supported/unknown: assume infinite time left } } }; Exps.prototype.ExecJS = function(ret, js_) { if (!eval) { ret.set_any(0); return; } var result = 0; try { result = eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } if (typeof result === "number") ret.set_any(result); else if (typeof result === "string") ret.set_any(result); else if (typeof result === "boolean") ret.set_any(result ? 1 : 0); else ret.set_any(0); }; Exps.prototype.ScreenWidth = function(ret) { ret.set_int(screen.width); }; Exps.prototype.ScreenHeight = function(ret) { ret.set_int(screen.height); }; Exps.prototype.DevicePixelRatio = function(ret) { ret.set_float(this.runtime.devicePixelRatio); }; Exps.prototype.WindowInnerWidth = function(ret) { ret.set_int(window.innerWidth); }; Exps.prototype.WindowInnerHeight = function(ret) { ret.set_int(window.innerHeight); }; Exps.prototype.WindowOuterWidth = function(ret) { ret.set_int(window.outerWidth); }; Exps.prototype.WindowOuterHeight = function(ret) { ret.set_int(window.outerHeight); }; pluginProto.exps = new Exps(); }());;; var localForageInitFailed = false; try { /*! localForage -- Offline Storage, Improved Version 1.4.0 https://mozilla.github.io/localForage (c) 2013-2015 Mozilla, Apache License 2.0 */ ! function() { var a, b, c, d; ! function() { var e = {}, f = {}; a = function(a, b, c) { e[a] = { deps: b, callback: c } }, d = c = b = function(a) { function c(b) { if ("." !== b.charAt(0)) return b; for (var c = b.split("/"), d = a.split("/").slice(0, -1), e = 0, f = c.length; f > e; e++) { var g = c[e]; if (".." === g) d.pop(); else { if ("." === g) continue; d.push(g) } } return d.join("/") } if (d._eak_seen = e, f[a]) return f[a]; if (f[a] = {}, !e[a]) throw new Error("Could not find module " + a); for (var g, h = e[a], i = h.deps, j = h.callback, k = [], l = 0, m = i.length; m > l; l++) "exports" === i[l] ? k.push(g = {}) : k.push(b(c(i[l]))); var n = j.apply(this, k); return f[a] = g || n } }(), a("promise/all", ["./utils", "exports"], function(a, b) { "use strict"; function c(a) { var b = this; if (!d(a)) throw new TypeError("You must pass an array to all."); return new b(function(b, c) { function d(a) { return function(b) { f(a, b) } } function f(a, c) { h[a] = c, 0 === --i && b(h) } var g, h = [], i = a.length; 0 === i && b([]); for (var j = 0; j < a.length; j++) g = a[j], g && e(g.then) ? g.then(d(j), c) : f(j, g) }) } var d = a.isArray, e = a.isFunction; b.all = c }), a("promise/asap", ["exports"], function(a) { "use strict"; function b() { return function() { process.nextTick(e) } } function c() { var a = 0, b = new i(e), c = document.createTextNode(""); return b.observe(c, { characterData: !0 }), function() { c.data = a = ++a % 2 } } function d() { return function() { j.setTimeout(e, 1) } } function e() { for (var a = 0; a < k.length; a++) { var b = k[a], c = b[0], d = b[1]; c(d) } k = [] } function f(a, b) { var c = k.push([a, b]); 1 === c && g() } var g, h = "undefined" != typeof window ? window : {}, i = h.MutationObserver || h.WebKitMutationObserver, j = "undefined" != typeof global ? global : void 0 === this ? window : this, k = []; g = "undefined" != typeof process && "[object process]" === {}.toString.call(process) ? b() : i ? c() : d(), a.asap = f }), a("promise/config", ["exports"], function(a) { "use strict"; function b(a, b) { return 2 !== arguments.length ? c[a] : void(c[a] = b) } var c = { instrument: !1 }; a.config = c, a.configure = b }), a("promise/polyfill", ["./promise", "./utils", "exports"], function(a, b, c) { "use strict"; function d() { var a; a = "undefined" != typeof global ? global : "undefined" != typeof window && window.document ? window : self; var b = "Promise" in a && "resolve" in a.Promise && "reject" in a.Promise && "all" in a.Promise && "race" in a.Promise && function() { var b; return new a.Promise(function(a) { b = a }), f(b) }(); b || (a.Promise = e) } var e = a.Promise, f = b.isFunction; c.polyfill = d }), a("promise/promise", ["./config", "./utils", "./all", "./race", "./resolve", "./reject", "./asap", "exports"], function(a, b, c, d, e, f, g, h) { "use strict"; function i(a) { if (!v(a)) throw new TypeError("You must pass a resolver function as the first argument to the promise constructor"); if (!(this instanceof i)) throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); this._subscribers = [], j(a, this) } function j(a, b) { function c(a) { o(b, a) } function d(a) { q(b, a) } try { a(c, d) } catch (e) { d(e) } } function k(a, b, c, d) { var e, f, g, h, i = v(c); if (i) try { e = c(d), g = !0 } catch (j) { h = !0, f = j } else e = d, g = !0; n(b, e) || (i && g ? o(b, e) : h ? q(b, f) : a === D ? o(b, e) : a === E && q(b, e)) } function l(a, b, c, d) { var e = a._subscribers, f = e.length; e[f] = b, e[f + D] = c, e[f + E] = d } function m(a, b) { for (var c, d, e = a._subscribers, f = a._detail, g = 0; g < e.length; g += 3) c = e[g], d = e[g + b], k(b, c, d, f); a._subscribers = null } function n(a, b) { var c, d = null; try { if (a === b) throw new TypeError("A promises callback cannot return that same promise."); if (u(b) && (d = b.then, v(d))) return d.call(b, function(d) { return c ? !0 : (c = !0, void(b !== d ? o(a, d) : p(a, d))) }, function(b) { return c ? !0 : (c = !0, void q(a, b)) }), !0 } catch (e) { return c ? !0 : (q(a, e), !0) } return !1 } function o(a, b) { a === b ? p(a, b) : n(a, b) || p(a, b) } function p(a, b) { a._state === B && (a._state = C, a._detail = b, t.async(r, a)) } function q(a, b) { a._state === B && (a._state = C, a._detail = b, t.async(s, a)) } function r(a) { m(a, a._state = D) } function s(a) { m(a, a._state = E) } var t = a.config, u = (a.configure, b.objectOrFunction), v = b.isFunction, w = (b.now, c.all), x = d.race, y = e.resolve, z = f.reject, A = g.asap; t.async = A; var B = void 0, C = 0, D = 1, E = 2; i.prototype = { constructor: i, _state: void 0, _detail: void 0, _subscribers: void 0, then: function(a, b) { var c = this, d = new this.constructor(function() {}); if (this._state) { var e = arguments; t.async(function() { k(c._state, d, e[c._state - 1], c._detail) }) } else l(this, d, a, b); return d }, "catch": function(a) { return this.then(null, a) } }, i.all = w, i.race = x, i.resolve = y, i.reject = z, h.Promise = i }), a("promise/race", ["./utils", "exports"], function(a, b) { "use strict"; function c(a) { var b = this; if (!d(a)) throw new TypeError("You must pass an array to race."); return new b(function(b, c) { for (var d, e = 0; e < a.length; e++) d = a[e], d && "function" == typeof d.then ? d.then(b, c) : b(d) }) } var d = a.isArray; b.race = c }), a("promise/reject", ["exports"], function(a) { "use strict"; function b(a) { var b = this; return new b(function(b, c) { c(a) }) } a.reject = b }), a("promise/resolve", ["exports"], function(a) { "use strict"; function b(a) { if (a && "object" == typeof a && a.constructor === this) return a; var b = this; return new b(function(b) { b(a) }) } a.resolve = b }), a("promise/utils", ["exports"], function(a) { "use strict"; function b(a) { return c(a) || "object" == typeof a && null !== a } function c(a) { return "function" == typeof a } function d(a) { return "[object Array]" === Object.prototype.toString.call(a) } var e = Date.now || function() { return (new Date).getTime() }; a.objectOrFunction = b, a.isFunction = c, a.isArray = d, a.now = e }), b("promise/polyfill").polyfill() }(), function(a, b) { "object" == typeof exports && "object" == typeof module ? module.exports = b() : "function" == typeof define && define.amd ? define([], b) : "object" == typeof exports ? exports.localforage = b() : a.localforage = b() }(this, function() { return function(a) { function b(d) { if (c[d]) return c[d].exports; var e = c[d] = { exports: {}, id: d, loaded: !1 }; return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports } var c = {}; return b.m = a, b.c = c, b.p = "", b(0) }([function(a, b, c) { "use strict"; function d(a, b) { if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function") } b.__esModule = !0; var e = function(a) { function b(a, b) { a[b] = function() { var c = arguments; return a.ready().then(function() { return a[b].apply(a, c) }) } } function e() { for (var a = 1; a < arguments.length; a++) { var b = arguments[a]; if (b) for (var c in b) b.hasOwnProperty(c) && (m(b[c]) ? arguments[0][c] = b[c].slice() : arguments[0][c] = b[c]) } return arguments[0] } function f(a) { for (var b in h) if (h.hasOwnProperty(b) && h[b] === a) return !0; return !1 } var g = {}, h = { INDEXEDDB: "asyncStorage", LOCALSTORAGE: "localStorageWrapper", WEBSQL: "webSQLStorage" }, i = [h.INDEXEDDB, h.WEBSQL, h.LOCALSTORAGE], j = ["clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem"], k = { description: "", driver: i.slice(), name: "localforage", size: 4980736, storeName: "keyvaluepairs", version: 1 }, l = function(a) { var b = {}; return b[h.INDEXEDDB] = !! function() { try { var b = b || a.indexedDB || a.webkitIndexedDB || a.mozIndexedDB || a.OIndexedDB || a.msIndexedDB; return "undefined" != typeof a.openDatabase && a.navigator && a.navigator.userAgent && /Safari/.test(a.navigator.userAgent) && !/Chrome/.test(a.navigator.userAgent) ? !1 : b && "function" == typeof b.open && "undefined" != typeof a.IDBKeyRange } catch (c) { return !1 } }(), b[h.WEBSQL] = !! function() { try { return a.openDatabase } catch (b) { return !1 } }(), b[h.LOCALSTORAGE] = !! function() { try { return a.localStorage && "setItem" in a.localStorage && a.localStorage.setItem } catch (b) { return !1 } }(), b }(a), m = Array.isArray || function(a) { return "[object Array]" === Object.prototype.toString.call(a) }, n = function() { function a(b) { d(this, a), this.INDEXEDDB = h.INDEXEDDB, this.LOCALSTORAGE = h.LOCALSTORAGE, this.WEBSQL = h.WEBSQL, this._defaultConfig = e({}, k), this._config = e({}, this._defaultConfig, b), this._driverSet = null, this._initDriver = null, this._ready = !1, this._dbInfo = null, this._wrapLibraryMethodsWithReady(), this.setDriver(this._config.driver) } return a.prototype.config = function(a) { if ("object" == typeof a) { if (this._ready) return new Error("Can't call config() after localforage has been used."); for (var b in a) "storeName" === b && (a[b] = a[b].replace(/\W/g, "_")), this._config[b] = a[b]; return "driver" in a && a.driver && this.setDriver(this._config.driver), !0 } return "string" == typeof a ? this._config[a] : this._config }, a.prototype.defineDriver = function(a, b, c) { var d = new Promise(function(b, c) { try { var d = a._driver, e = new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver"), h = new Error("Custom driver name already in use: " + a._driver); if (!a._driver) return void c(e); if (f(a._driver)) return void c(h); for (var i = j.concat("_initStorage"), k = 0; k < i.length; k++) { var m = i[k]; if (!m || !a[m] || "function" != typeof a[m]) return void c(e) } var n = Promise.resolve(!0); "_support" in a && (n = a._support && "function" == typeof a._support ? a._support() : Promise.resolve(!!a._support)), n.then(function(c) { l[d] = c, g[d] = a, b() }, c) } catch (o) { c(o) } }); return d.then(b, c), d }, a.prototype.driver = function() { return this._driver || null }, a.prototype.getDriver = function(a, b, d) { var e = this, h = function() { if (f(a)) switch (a) { case e.INDEXEDDB: return new Promise(function(a, b) { a(c(1)) }); case e.LOCALSTORAGE: return new Promise(function(a, b) { a(c(2)) }); case e.WEBSQL: return new Promise(function(a, b) { a(c(4)) }) } else if (g[a]) return Promise.resolve(g[a]); return Promise.reject(new Error("Driver not found.")) }(); return h.then(b, d), h }, a.prototype.getSerializer = function(a) { var b = new Promise(function(a, b) { a(c(3)) }); return a && "function" == typeof a && b.then(function(b) { a(b) }), b }, a.prototype.ready = function(a) { var b = this, c = b._driverSet.then(function() { return null === b._ready && (b._ready = b._initDriver()), b._ready }); return c.then(a, a), c }, a.prototype.setDriver = function(a, b, c) { function d() { f._config.driver = f.driver() } function e(a) { return function() { function b() { for (; c < a.length;) { var e = a[c]; return c++, f._dbInfo = null, f._ready = null, f.getDriver(e).then(function(a) { return f._extend(a), d(), f._ready = f._initStorage(f._config), f._ready })["catch"](b) } d(); var g = new Error("No available storage method found."); return f._driverSet = Promise.reject(g), f._driverSet } var c = 0; return b() } } var f = this; m(a) || (a = [a]); var g = this._getSupportedDrivers(a), h = null !== this._driverSet ? this._driverSet["catch"](function() { return Promise.resolve() }) : Promise.resolve(); return this._driverSet = h.then(function() { var a = g[0]; return f._dbInfo = null, f._ready = null, f.getDriver(a).then(function(a) { f._driver = a._driver, d(), f._wrapLibraryMethodsWithReady(), f._initDriver = e(g) }) })["catch"](function() { d(); var a = new Error("No available storage method found."); return f._driverSet = Promise.reject(a), f._driverSet }), this._driverSet.then(b, c), this._driverSet }, a.prototype.supports = function(a) { return !!l[a] }, a.prototype._extend = function(a) { e(this, a) }, a.prototype._getSupportedDrivers = function(a) { for (var b = [], c = 0, d = a.length; d > c; c++) { var e = a[c]; this.supports(e) && b.push(e) } return b }, a.prototype._wrapLibraryMethodsWithReady = function() { for (var a = 0; a < j.length; a++) b(this, j[a]) }, a.prototype.createInstance = function(b) { return new a(b) }, a }(); return new n }("undefined" != typeof window ? window : self); b["default"] = e, a.exports = b["default"] }, function(a, b) { "use strict"; b.__esModule = !0; var c = function(a) { function b(b, c) { b = b || [], c = c || {}; try { return new Blob(b, c) } catch (d) { if ("TypeError" !== d.name) throw d; for (var e = a.BlobBuilder || a.MSBlobBuilder || a.MozBlobBuilder || a.WebKitBlobBuilder, f = new e, g = 0; g < b.length; g += 1) f.append(b[g]); return f.getBlob(c.type) } } function c(a) { for (var b = a.length, c = new ArrayBuffer(b), d = new Uint8Array(c), e = 0; b > e; e++) d[e] = a.charCodeAt(e); return c } function d(a) { return new Promise(function(b, c) { var d = new XMLHttpRequest; d.open("GET", a), d.withCredentials = !0, d.responseType = "arraybuffer", d.onreadystatechange = function() { return 4 === d.readyState ? 200 === d.status ? b({ response: d.response, type: d.getResponseHeader("Content-Type") }) : void c({ status: d.status, response: d.response }) : void 0 }, d.send() }) } function e(a) { return new Promise(function(c, e) { var f = b([""], { type: "image/png" }), g = a.transaction([D], "readwrite"); g.objectStore(D).put(f, "key"), g.oncomplete = function() { var b = a.transaction([D], "readwrite"), f = b.objectStore(D).get("key"); f.onerror = e, f.onsuccess = function(a) { var b = a.target.result, e = URL.createObjectURL(b); d(e).then(function(a) { c(!(!a || "image/png" !== a.type)) }, function() { c(!1) }).then(function() { URL.revokeObjectURL(e) }) } }, g.onerror = g.onabort = e })["catch"](function() { return !1 }) } function f(a) { return "boolean" == typeof B ? Promise.resolve(B) : e(a).then(function(a) { return B = a }) } function g(a) { return new Promise(function(b, c) { var d = new FileReader; d.onerror = c, d.onloadend = function(c) { var d = btoa(c.target.result || ""); b({ __local_forage_encoded_blob: !0, data: d, type: a.type }) }, d.readAsBinaryString(a) }) } function h(a) { var d = c(atob(a.data)); return b([d], { type: a.type }) } function i(a) { return a && a.__local_forage_encoded_blob } function j(a) { var b = this, c = b._initReady().then(function() { var a = C[b._dbInfo.name]; return a && a.dbReady ? a.dbReady : void 0 }); return c.then(a, a), c } function k(a) { var b = C[a.name], c = {}; c.promise = new Promise(function(a) { c.resolve = a }), b.deferredOperations.push(c), b.dbReady ? b.dbReady = b.dbReady.then(function() { return c.promise }) : b.dbReady = c.promise } function l(a) { var b = C[a.name], c = b.deferredOperations.pop(); c && c.resolve() } function m(a) { function b() { return Promise.resolve() } var c = this, d = { db: null }; if (a) for (var e in a) d[e] = a[e]; C || (C = {}); var f = C[d.name]; f || (f = { forages: [], db: null, dbReady: null, deferredOperations: [] }, C[d.name] = f), f.forages.push(c), c._initReady || (c._initReady = c.ready, c.ready = j); for (var g = [], h = 0; h < f.forages.length; h++) { var i = f.forages[h]; i !== c && g.push(i._initReady()["catch"](b)) } var k = f.forages.slice(0); return Promise.all(g).then(function() { return d.db = f.db, n(d) }).then(function(a) { return d.db = a, q(d, c._defaultConfig.version) ? o(d) : a }).then(function(a) { d.db = f.db = a, c._dbInfo = d; for (var b = 0; b < k.length; b++) { var e = k[b]; e !== c && (e._dbInfo.db = d.db, e._dbInfo.version = d.version) } }) } function n(a) { return p(a, !1) } function o(a) { return p(a, !0) } function p(b, c) { return new Promise(function(d, e) { if (b.db) { if (!c) return d(b.db); k(b), b.db.close() } var f = [b.name]; c && f.push(b.version); var g = A.open.apply(A, f); c && (g.onupgradeneeded = function(c) { var d = g.result; try { d.createObjectStore(b.storeName), c.oldVersion <= 1 && d.createObjectStore(D) } catch (e) { if ("ConstraintError" !== e.name) throw e; a.console.warn('The database "' + b.name + '" has been upgraded from version ' + c.oldVersion + " to version " + c.newVersion + ', but the storage "' + b.storeName + '" already exists.') } }), g.onerror = function() { e(g.error) }, g.onsuccess = function() { d(g.result), l(b) } }) } function q(b, c) { if (!b.db) return !0; var d = !b.db.objectStoreNames.contains(b.storeName), e = b.version < b.db.version, f = b.version > b.db.version; if (e && (b.version !== c && a.console.warn('The database "' + b.name + "\" can't be downgraded from version " + b.db.version + " to version " + b.version + "."), b.version = b.db.version), f || d) { if (d) { var g = b.db.version + 1; g > b.version && (b.version = g) } return !0 } return !1 } function r(b, c) { var d = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var e = new Promise(function(a, c) { d.ready().then(function() { var e = d._dbInfo, f = e.db.transaction(e.storeName, "readonly").objectStore(e.storeName), g = f.get(b); g.onsuccess = function() { var b = g.result; void 0 === b && (b = null), i(b) && (b = h(b)), a(b) }, g.onerror = function() { c(g.error) } })["catch"](c) }); return z(e, c), e } function s(a, b) { var c = this, d = new Promise(function(b, d) { c.ready().then(function() { var e = c._dbInfo, f = e.db.transaction(e.storeName, "readonly").objectStore(e.storeName), g = f.openCursor(), j = 1; g.onsuccess = function() { var c = g.result; if (c) { var d = c.value; i(d) && (d = h(d)); var e = a(d, c.key, j++); void 0 !== e ? b(e) : c["continue"]() } else b() }, g.onerror = function() { d(g.error) } })["catch"](d) }); return z(d, b), d } function t(b, c, d) { var e = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var h = new Promise(function(a, d) { var h; e.ready().then(function() { return h = e._dbInfo, c instanceof Blob ? f(h.db).then(function(a) { return a ? c : g(c) }) : c }).then(function(c) { var e = h.db.transaction(h.storeName, "readwrite"), f = e.objectStore(h.storeName); null === c && (c = void 0), e.oncomplete = function() { void 0 === c && (c = null), a(c) }, e.onabort = e.onerror = function() { var a = g.error ? g.error : g.transaction.error; d(a) }; var g = f.put(c, b) })["catch"](d) }); return z(h, d), h } function u(b, c) { var d = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var e = new Promise(function(a, c) { d.ready().then(function() { var e = d._dbInfo, f = e.db.transaction(e.storeName, "readwrite"), g = f.objectStore(e.storeName), h = g["delete"](b); f.oncomplete = function() { a() }, f.onerror = function() { c(h.error) }, f.onabort = function() { var a = h.error ? h.error : h.transaction.error; c(a) } })["catch"](c) }); return z(e, c), e } function v(a) { var b = this, c = new Promise(function(a, c) { b.ready().then(function() { var d = b._dbInfo, e = d.db.transaction(d.storeName, "readwrite"), f = e.objectStore(d.storeName), g = f.clear(); e.oncomplete = function() { a() }, e.onabort = e.onerror = function() { var a = g.error ? g.error : g.transaction.error; c(a) } })["catch"](c) }); return z(c, a), c } function w(a) { var b = this, c = new Promise(function(a, c) { b.ready().then(function() { var d = b._dbInfo, e = d.db.transaction(d.storeName, "readonly").objectStore(d.storeName), f = e.count(); f.onsuccess = function() { a(f.result) }, f.onerror = function() { c(f.error) } })["catch"](c) }); return z(c, a), c } function x(a, b) { var c = this, d = new Promise(function(b, d) { return 0 > a ? void b(null) : void c.ready().then(function() { var e = c._dbInfo, f = e.db.transaction(e.storeName, "readonly").objectStore(e.storeName), g = !1, h = f.openCursor(); h.onsuccess = function() { var c = h.result; return c ? void(0 === a ? b(c.key) : g ? b(c.key) : (g = !0, c.advance(a))) : void b(null) }, h.onerror = function() { d(h.error) } })["catch"](d) }); return z(d, b), d } function y(a) { var b = this, c = new Promise(function(a, c) { b.ready().then(function() { var d = b._dbInfo, e = d.db.transaction(d.storeName, "readonly").objectStore(d.storeName), f = e.openCursor(), g = []; f.onsuccess = function() { var b = f.result; return b ? (g.push(b.key), void b["continue"]()) : void a(g) }, f.onerror = function() { c(f.error) } })["catch"](c) }); return z(c, a), c } function z(a, b) { b && a.then(function(a) { b(null, a) }, function(a) { b(a) }) } var A = A || a.indexedDB || a.webkitIndexedDB || a.mozIndexedDB || a.OIndexedDB || a.msIndexedDB; if (A) { var B, C, D = "local-forage-detect-blob-support", E = { _driver: "asyncStorage", _initStorage: m, iterate: s, getItem: r, setItem: t, removeItem: u, clear: v, length: w, key: x, keys: y }; return E } }("undefined" != typeof window ? window : self); b["default"] = c, a.exports = b["default"] }, function(a, b, c) { "use strict"; b.__esModule = !0; var d = function(a) { function b(a) { var b = this, d = {}; if (a) for (var e in a) d[e] = a[e]; return d.keyPrefix = d.name + "/", d.storeName !== b._defaultConfig.storeName && (d.keyPrefix += d.storeName + "/"), b._dbInfo = d, new Promise(function(a, b) { a(c(3)) }).then(function(a) { return d.serializer = a, Promise.resolve() }) } function d(a) { var b = this, c = b.ready().then(function() { for (var a = b._dbInfo.keyPrefix, c = m.length - 1; c >= 0; c--) { var d = m.key(c); 0 === d.indexOf(a) && m.removeItem(d) } }); return l(c, a), c } function e(b, c) { var d = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var e = d.ready().then(function() { var a = d._dbInfo, c = m.getItem(a.keyPrefix + b); return c && (c = a.serializer.deserialize(c)), c }); return l(e, c), e } function f(a, b) { var c = this, d = c.ready().then(function() { for (var b = c._dbInfo, d = b.keyPrefix, e = d.length, f = m.length, g = 1, h = 0; f > h; h++) { var i = m.key(h); if (0 === i.indexOf(d)) { var j = m.getItem(i); if (j && (j = b.serializer.deserialize(j)), j = a(j, i.substring(e), g++), void 0 !== j) return j } } }); return l(d, b), d } function g(a, b) { var c = this, d = c.ready().then(function() { var b, d = c._dbInfo; try { b = m.key(a) } catch (e) { b = null } return b && (b = b.substring(d.keyPrefix.length)), b }); return l(d, b), d } function h(a) { var b = this, c = b.ready().then(function() { for (var a = b._dbInfo, c = m.length, d = [], e = 0; c > e; e++) 0 === m.key(e).indexOf(a.keyPrefix) && d.push(m.key(e).substring(a.keyPrefix.length)); return d }); return l(c, a), c } function i(a) { var b = this, c = b.keys().then(function(a) { return a.length }); return l(c, a), c } function j(b, c) { var d = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var e = d.ready().then(function() { var a = d._dbInfo; m.removeItem(a.keyPrefix + b) }); return l(e, c), e } function k(b, c, d) { var e = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var f = e.ready().then(function() { void 0 === c && (c = null); var a = c; return new Promise(function(d, f) { var g = e._dbInfo; g.serializer.serialize(c, function(c, e) { if (e) f(e); else try { m.setItem(g.keyPrefix + b, c), d(a) } catch (h) { ("QuotaExceededError" === h.name || "NS_ERROR_DOM_QUOTA_REACHED" === h.name) && f(h), f(h) } }) }) }); return l(f, d), f } function l(a, b) { b && a.then(function(a) { b(null, a) }, function(a) { b(a) }) } var m = null; try { if (!(a.localStorage && "setItem" in a.localStorage)) return; m = a.localStorage } catch (n) { return } var o = { _driver: "localStorageWrapper", _initStorage: b, iterate: f, getItem: e, setItem: k, removeItem: j, clear: d, length: i, key: g, keys: h }; return o }("undefined" != typeof window ? window : self); b["default"] = d, a.exports = b["default"] }, function(a, b) { "use strict"; b.__esModule = !0; var c = function(a) { function b(b, c) { b = b || [], c = c || {}; try { return new Blob(b, c) } catch (d) { if ("TypeError" !== d.name) throw d; for (var e = a.BlobBuilder || a.MSBlobBuilder || a.MozBlobBuilder || a.WebKitBlobBuilder, f = new e, g = 0; g < b.length; g += 1) f.append(b[g]); return f.getBlob(c.type) } } function c(a, b) { var c = ""; if (a && (c = a.toString()), a && ("[object ArrayBuffer]" === a.toString() || a.buffer && "[object ArrayBuffer]" === a.buffer.toString())) { var d, e = j; a instanceof ArrayBuffer ? (d = a, e += l) : (d = a.buffer, "[object Int8Array]" === c ? e += n : "[object Uint8Array]" === c ? e += o : "[object Uint8ClampedArray]" === c ? e += p : "[object Int16Array]" === c ? e += q : "[object Uint16Array]" === c ? e += s : "[object Int32Array]" === c ? e += r : "[object Uint32Array]" === c ? e += t : "[object Float32Array]" === c ? e += u : "[object Float64Array]" === c ? e += v : b(new Error("Failed to get type for BinaryArray"))), b(e + f(d)) } else if ("[object Blob]" === c) { var g = new FileReader; g.onload = function() { var c = h + a.type + "~" + f(this.result); b(j + m + c) }, g.readAsArrayBuffer(a) } else try { b(JSON.stringify(a)) } catch (i) { console.error("Couldn't convert value into a JSON string: ", a), b(null, i) } } function d(a) { if (a.substring(0, k) !== j) return JSON.parse(a); var c, d = a.substring(w), f = a.substring(k, w); if (f === m && i.test(d)) { var g = d.match(i); c = g[1], d = d.substring(g[0].length) } var h = e(d); switch (f) { case l: return h; case m: return b([h], { type: c }); case n: return new Int8Array(h); case o: return new Uint8Array(h); case p: return new Uint8ClampedArray(h); case q: return new Int16Array(h); case s: return new Uint16Array(h); case r: return new Int32Array(h); case t: return new Uint32Array(h); case u: return new Float32Array(h); case v: return new Float64Array(h); default: throw new Error("Unkown type: " + f) } } function e(a) { var b, c, d, e, f, h = .75 * a.length, i = a.length, j = 0; "=" === a[a.length - 1] && (h--, "=" === a[a.length - 2] && h--); var k = new ArrayBuffer(h), l = new Uint8Array(k); for (b = 0; i > b; b += 4) c = g.indexOf(a[b]), d = g.indexOf(a[b + 1]), e = g.indexOf(a[b + 2]), f = g.indexOf(a[b + 3]), l[j++] = c << 2 | d >> 4, l[j++] = (15 & d) << 4 | e >> 2, l[j++] = (3 & e) << 6 | 63 & f; return k } function f(a) { var b, c = new Uint8Array(a), d = ""; for (b = 0; b < c.length; b += 3) d += g[c[b] >> 2], d += g[(3 & c[b]) << 4 | c[b + 1] >> 4], d += g[(15 & c[b + 1]) << 2 | c[b + 2] >> 6], d += g[63 & c[b + 2]]; return c.length % 3 === 2 ? d = d.substring(0, d.length - 1) + "=" : c.length % 3 === 1 && (d = d.substring(0, d.length - 2) + "=="), d } var g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", h = "~~local_forage_type~", i = /^~~local_forage_type~([^~]+)~/, j = "__lfsc__:", k = j.length, l = "arbf", m = "blob", n = "si08", o = "ui08", p = "uic8", q = "si16", r = "si32", s = "ur16", t = "ui32", u = "fl32", v = "fl64", w = k + l.length, x = { serialize: c, deserialize: d, stringToBuffer: e, bufferToString: f }; return x }("undefined" != typeof window ? window : self); b["default"] = c, a.exports = b["default"] }, function(a, b, c) { "use strict"; b.__esModule = !0; var d = function(a) { function b(a) { var b = this, d = { db: null }; if (a) for (var e in a) d[e] = "string" != typeof a[e] ? a[e].toString() : a[e]; var f = new Promise(function(a, c) { try { d.db = m(d.name, String(d.version), d.description, d.size) } catch (e) { return c(e) } d.db.transaction(function(e) { e.executeSql("CREATE TABLE IF NOT EXISTS " + d.storeName + " (id INTEGER PRIMARY KEY, key unique, value)", [], function() { b._dbInfo = d, a() }, function(a, b) { c(b) }) }) }); return new Promise(function(a, b) { a(c(3)) }).then(function(a) { return d.serializer = a, f }) } function d(b, c) { var d = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var e = new Promise(function(a, c) { d.ready().then(function() { var e = d._dbInfo; e.db.transaction(function(d) { d.executeSql("SELECT * FROM " + e.storeName + " WHERE key = ? LIMIT 1", [b], function(b, c) { var d = c.rows.length ? c.rows.item(0).value : null; d && (d = e.serializer.deserialize(d)), a(d) }, function(a, b) { c(b) }) }) })["catch"](c) }); return l(e, c), e } function e(a, b) { var c = this, d = new Promise(function(b, d) { c.ready().then(function() { var e = c._dbInfo; e.db.transaction(function(c) { c.executeSql("SELECT * FROM " + e.storeName, [], function(c, d) { for (var f = d.rows, g = f.length, h = 0; g > h; h++) { var i = f.item(h), j = i.value; if (j && (j = e.serializer.deserialize(j)), j = a(j, i.key, h + 1), void 0 !== j) return void b(j) } b() }, function(a, b) { d(b) }) }) })["catch"](d) }); return l(d, b), d } function f(b, c, d) { var e = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var f = new Promise(function(a, d) { e.ready().then(function() { void 0 === c && (c = null); var f = c, g = e._dbInfo; g.serializer.serialize(c, function(c, e) { e ? d(e) : g.db.transaction(function(e) { e.executeSql("INSERT OR REPLACE INTO " + g.storeName + " (key, value) VALUES (?, ?)", [b, c], function() { a(f) }, function(a, b) { d(b) }) }, function(a) { a.code === a.QUOTA_ERR && d(a) }) }) })["catch"](d) }); return l(f, d), f } function g(b, c) { var d = this; "string" != typeof b && (a.console.warn(b + " used as a key, but it is not a string."), b = String(b)); var e = new Promise(function(a, c) { d.ready().then(function() { var e = d._dbInfo; e.db.transaction(function(d) { d.executeSql("DELETE FROM " + e.storeName + " WHERE key = ?", [b], function() { a() }, function(a, b) { c(b) }) }) })["catch"](c) }); return l(e, c), e } function h(a) { var b = this, c = new Promise(function(a, c) { b.ready().then(function() { var d = b._dbInfo; d.db.transaction(function(b) { b.executeSql("DELETE FROM " + d.storeName, [], function() { a() }, function(a, b) { c(b) }) }) })["catch"](c) }); return l(c, a), c } function i(a) { var b = this, c = new Promise(function(a, c) { b.ready().then(function() { var d = b._dbInfo; d.db.transaction(function(b) { b.executeSql("SELECT COUNT(key) as c FROM " + d.storeName, [], function(b, c) { var d = c.rows.item(0).c; a(d) }, function(a, b) { c(b) }) }) })["catch"](c) }); return l(c, a), c } function j(a, b) { var c = this, d = new Promise(function(b, d) { c.ready().then(function() { var e = c._dbInfo; e.db.transaction(function(c) { c.executeSql("SELECT key FROM " + e.storeName + " WHERE id = ? LIMIT 1", [a + 1], function(a, c) { var d = c.rows.length ? c.rows.item(0).key : null; b(d) }, function(a, b) { d(b) }) }) })["catch"](d) }); return l(d, b), d } function k(a) { var b = this, c = new Promise(function(a, c) { b.ready().then(function() { var d = b._dbInfo; d.db.transaction(function(b) { b.executeSql("SELECT key FROM " + d.storeName, [], function(b, c) { for (var d = [], e = 0; e < c.rows.length; e++) d.push(c.rows.item(e).key); a(d) }, function(a, b) { c(b) }) }) })["catch"](c) }); return l(c, a), c } function l(a, b) { b && a.then(function(a) { b(null, a) }, function(a) { b(a) }) } var m = a.openDatabase; if (m) { var n = { _driver: "webSQLStorage", _initStorage: b, iterate: e, getItem: d, setItem: f, removeItem: g, clear: h, length: i, key: j, keys: k }; return n } }("undefined" != typeof window ? window : self); b["default"] = d, a.exports = b["default"] }]) }); } catch (e) { localForageInitFailed = true; } cr.plugins_.LocalStorage = function(runtime) { this.runtime = runtime; }; (function() { var currentKey = ""; var lastValue = ""; var keyNamesList = []; var errorMessage = ""; function getErrorString(err) { if (!err) return "unknown error"; else if (typeof err === "string") return err; else if (typeof err.message === "string") return err.message; else if (typeof err.name === "string") return err.name; else if (typeof err.data === "string") return err.data; else return "unknown error"; }; function TriggerStorageError(self, msg) { errorMessage = msg; self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); }; var prefix = ""; var is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); if (is_arcade) prefix = "sa" + window["scirra_arcade_id"] + "_"; function hasRequiredPrefix(key) { if (!prefix) return true; return key.substr(0, prefix.length) === prefix; }; function removePrefix(key) { if (!prefix) return key; if (hasRequiredPrefix(key)) return key.substr(prefix.length); }; var pluginProto = cr.plugins_.LocalStorage.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.pendingSets = 0; // number of pending 'Set item' actions this.pendingGets = 0; // number of pending 'Get item' actions }; instanceProto.onDestroy = function() {}; instanceProto.saveToJSON = function() { return {}; }; instanceProto.loadFromJSON = function(o) {}; var debugDataChanged = true; function Cnds() {}; Cnds.prototype.OnItemSet = function(key) { return currentKey === key; }; Cnds.prototype.OnAnyItemSet = function() { return true; }; Cnds.prototype.OnItemGet = function(key) { return currentKey === key; }; Cnds.prototype.OnAnyItemGet = function() { return true; }; Cnds.prototype.OnItemRemoved = function(key) { return currentKey === key; }; Cnds.prototype.OnAnyItemRemoved = function() { return true; }; Cnds.prototype.OnCleared = function() { return true; }; Cnds.prototype.OnAllKeyNamesLoaded = function() { return true; }; Cnds.prototype.OnError = function() { return true; }; Cnds.prototype.OnItemExists = function(key) { return currentKey === key; }; Cnds.prototype.OnItemMissing = function(key) { return currentKey === key; }; Cnds.prototype.CompareKey = function(cmp, key) { return cr.do_cmp(currentKey, cmp, key); }; Cnds.prototype.CompareValue = function(cmp, v) { return cr.do_cmp(lastValue, cmp, v); }; Cnds.prototype.IsProcessingSets = function() { return this.pendingSets > 0; }; Cnds.prototype.IsProcessingGets = function() { return this.pendingGets > 0; }; Cnds.prototype.OnAllSetsComplete = function() { return true; }; Cnds.prototype.OnAllGetsComplete = function() { return true; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetItem = function(keyNoPrefix, value) { if (localForageInitFailed) { TriggerStorageError(this, "storage failed to initialise - may be disabled in browser settings"); return; } var keyPrefix = prefix + keyNoPrefix; this.pendingSets++; var self = this; localforage["setItem"](keyPrefix, value, function(err, valueSet) { debugDataChanged = true; self.pendingSets--; if (err) { errorMessage = getErrorString(err); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); } else { currentKey = keyNoPrefix; lastValue = valueSet; self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnAnyItemSet, self); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnItemSet, self); currentKey = ""; lastValue = ""; } if (self.pendingSets === 0) { self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnAllSetsComplete, self); } }); }; Acts.prototype.GetItem = function(keyNoPrefix) { if (localForageInitFailed) { TriggerStorageError(this, "storage failed to initialise - may be disabled in browser settings"); return; } var keyPrefix = prefix + keyNoPrefix; this.pendingGets++; var self = this; localforage["getItem"](keyPrefix, function(err, value) { self.pendingGets--; if (err) { errorMessage = getErrorString(err); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); } else { currentKey = keyNoPrefix; lastValue = value; if (typeof lastValue === "undefined" || lastValue === null) lastValue = ""; self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnAnyItemGet, self); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnItemGet, self); currentKey = ""; lastValue = ""; } if (self.pendingGets === 0) { self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnAllGetsComplete, self); } }); }; Acts.prototype.CheckItemExists = function(keyNoPrefix) { if (localForageInitFailed) { TriggerStorageError(this, "storage failed to initialise - may be disabled in browser settings"); return; } var keyPrefix = prefix + keyNoPrefix; var self = this; localforage["getItem"](keyPrefix, function(err, value) { if (err) { errorMessage = getErrorString(err); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); } else { currentKey = keyNoPrefix; if (value === null) // null value indicates key missing { lastValue = ""; // prevent ItemValue meaning anything self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnItemMissing, self); } else { lastValue = value; // make available to ItemValue expression self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnItemExists, self); } currentKey = ""; lastValue = ""; } }); }; Acts.prototype.RemoveItem = function(keyNoPrefix) { if (localForageInitFailed) { TriggerStorageError(this, "storage failed to initialise - may be disabled in browser settings"); return; } var keyPrefix = prefix + keyNoPrefix; var self = this; localforage["removeItem"](keyPrefix, function(err) { debugDataChanged = true; if (err) { errorMessage = getErrorString(err); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); } else { currentKey = keyNoPrefix; lastValue = ""; self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnAnyItemRemoved, self); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnItemRemoved, self); currentKey = ""; } }); }; Acts.prototype.ClearStorage = function() { if (localForageInitFailed) { TriggerStorageError(this, "storage failed to initialise - may be disabled in browser settings"); return; } if (is_arcade) return; var self = this; localforage["clear"](function(err) { debugDataChanged = true; if (err) { errorMessage = getErrorString(err); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); } else { currentKey = ""; lastValue = ""; cr.clearArray(keyNamesList); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnCleared, self); } }); }; Acts.prototype.GetAllKeyNames = function() { if (localForageInitFailed) { TriggerStorageError(this, "storage failed to initialise - may be disabled in browser settings"); return; } var self = this; localforage["keys"](function(err, keyList) { var i, len, k; if (err) { errorMessage = getErrorString(err); self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnError, self); } else { cr.clearArray(keyNamesList); for (i = 0, len = keyList.length; i < len; ++i) { k = keyList[i]; if (!hasRequiredPrefix(k)) continue; keyNamesList.push(removePrefix(k)); } self.runtime.trigger(cr.plugins_.LocalStorage.prototype.cnds.OnAllKeyNamesLoaded, self); } }); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.ItemValue = function(ret) { ret.set_any(lastValue); }; Exps.prototype.Key = function(ret) { ret.set_string(currentKey); }; Exps.prototype.KeyCount = function(ret) { ret.set_int(keyNamesList.length); }; Exps.prototype.KeyAt = function(ret, i) { i = Math.floor(i); if (i < 0 || i >= keyNamesList.length) { ret.set_string(""); return; } ret.set_string(keyNamesList[i]); }; Exps.prototype.ErrorMessage = function(ret) { ret.set_string(errorMessage); }; pluginProto.exps = new Exps(); }());;; cr.plugins_.Particles = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.Particles.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.texture_img.cr_filesize = this.texture_filesize; this.webGL_texture = null; this.runtime.waitForImageLoad(this.texture_img, this.texture_file); }; typeProto.onLostWebGLContext = function() { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function() { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); } }; typeProto.loadTextures = function() { if (this.is_family || this.webGL_texture || !this.runtime.glwrap) return; this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); }; typeProto.unloadTextures = function() { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function(ctx) { ctx.drawImage(this.texture_img, 0, 0); }; function Particle(owner) { this.owner = owner; this.active = false; this.x = 0; this.y = 0; this.speed = 0; this.angle = 0; this.opacity = 1; this.grow = 0; this.size = 0; this.gs = 0; // gravity speed this.age = 0; cr.seal(this); }; Particle.prototype.init = function() { var owner = this.owner; this.x = owner.x - (owner.xrandom / 2) + (Math.random() * owner.xrandom); this.y = owner.y - (owner.yrandom / 2) + (Math.random() * owner.yrandom); this.speed = owner.initspeed - (owner.speedrandom / 2) + (Math.random() * owner.speedrandom); this.angle = owner.angle - (owner.spraycone / 2) + (Math.random() * owner.spraycone); this.opacity = owner.initopacity; this.size = owner.initsize - (owner.sizerandom / 2) + (Math.random() * owner.sizerandom); this.grow = owner.growrate - (owner.growrandom / 2) + (Math.random() * owner.growrandom); this.gs = 0; this.age = 0; }; Particle.prototype.tick = function(dt) { var owner = this.owner; this.x += Math.cos(this.angle) * this.speed * dt; this.y += Math.sin(this.angle) * this.speed * dt; this.y += this.gs * dt; this.speed += owner.acc * dt; this.size += this.grow * dt; this.gs += owner.g * dt; this.age += dt; if (this.size < 1) { this.active = false; return; } if (owner.lifeanglerandom !== 0) this.angle += (Math.random() * owner.lifeanglerandom * dt) - (owner.lifeanglerandom * dt / 2); if (owner.lifespeedrandom !== 0) this.speed += (Math.random() * owner.lifespeedrandom * dt) - (owner.lifespeedrandom * dt / 2); if (owner.lifeopacityrandom !== 0) { this.opacity += (Math.random() * owner.lifeopacityrandom * dt) - (owner.lifeopacityrandom * dt / 2); if (this.opacity < 0) this.opacity = 0; else if (this.opacity > 1) this.opacity = 1; } if (owner.destroymode <= 1 && this.age >= owner.timeout) { this.active = false; } if (owner.destroymode === 2 && this.speed <= 0) { this.active = false; } }; Particle.prototype.draw = function(ctx) { var curopacity = this.owner.opacity * this.opacity; if (curopacity === 0) return; if (this.owner.destroymode === 0) curopacity *= 1 - (this.age / this.owner.timeout); ctx.globalAlpha = curopacity; var drawx = this.x - this.size / 2; var drawy = this.y - this.size / 2; if (this.owner.runtime.pixel_rounding) { drawx = (drawx + 0.5) | 0; drawy = (drawy + 0.5) | 0; } ctx.drawImage(this.owner.type.texture_img, drawx, drawy, this.size, this.size); }; Particle.prototype.drawGL = function(glw) { var curopacity = this.owner.opacity * this.opacity; if (this.owner.destroymode === 0) curopacity *= 1 - (this.age / this.owner.timeout); var drawsize = this.size; var scaleddrawsize = drawsize * this.owner.particlescale; var drawx = this.x - drawsize / 2; var drawy = this.y - drawsize / 2; if (this.owner.runtime.pixel_rounding) { drawx = (drawx + 0.5) | 0; drawy = (drawy + 0.5) | 0; } if (scaleddrawsize < 1 || curopacity === 0) return; if (scaleddrawsize < glw.minPointSize || scaleddrawsize > glw.maxPointSize) { glw.setOpacity(curopacity); glw.quad(drawx, drawy, drawx + drawsize, drawy, drawx + drawsize, drawy + drawsize, drawx, drawy + drawsize); } else glw.point(this.x, this.y, scaleddrawsize, curopacity); }; Particle.prototype.left = function() { return this.x - this.size / 2; }; Particle.prototype.right = function() { return this.x + this.size / 2; }; Particle.prototype.top = function() { return this.y - this.size / 2; }; Particle.prototype.bottom = function() { return this.y + this.size / 2; }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var deadparticles = []; instanceProto.onCreate = function() { var props = this.properties; this.rate = props[0]; this.spraycone = cr.to_radians(props[1]); this.spraytype = props[2]; // 0 = continuous, 1 = one-shot this.spraying = true; // for continuous mode only this.initspeed = props[3]; this.initsize = props[4]; this.initopacity = props[5] / 100.0; this.growrate = props[6]; this.xrandom = props[7]; this.yrandom = props[8]; this.speedrandom = props[9]; this.sizerandom = props[10]; this.growrandom = props[11]; this.acc = props[12]; this.g = props[13]; this.lifeanglerandom = props[14]; this.lifespeedrandom = props[15]; this.lifeopacityrandom = props[16]; this.destroymode = props[17]; // 0 = fade, 1 = timeout, 2 = stopped this.timeout = props[18]; this.particleCreateCounter = 0; this.particlescale = 1; this.particleBoxLeft = this.x; this.particleBoxTop = this.y; this.particleBoxRight = this.x; this.particleBoxBottom = this.y; this.add_bbox_changed_callback(function(self) { self.bbox.set(self.particleBoxLeft, self.particleBoxTop, self.particleBoxRight, self.particleBoxBottom); self.bquad.set_from_rect(self.bbox); self.bbox_changed = false; self.update_collision_cell(); self.update_render_cell(); }); if (!this.recycled) this.particles = []; this.runtime.tickMe(this); this.type.loadTextures(); if (this.spraytype === 1) { for (var i = 0; i < this.rate; i++) this.allocateParticle().opacity = 0; } this.first_tick = true; // for re-init'ing one-shot particles on first tick so they assume any new angle/position }; instanceProto.saveToJSON = function() { var o = { "r": this.rate, "sc": this.spraycone, "st": this.spraytype, "s": this.spraying, "isp": this.initspeed, "isz": this.initsize, "io": this.initopacity, "gr": this.growrate, "xr": this.xrandom, "yr": this.yrandom, "spr": this.speedrandom, "szr": this.sizerandom, "grnd": this.growrandom, "acc": this.acc, "g": this.g, "lar": this.lifeanglerandom, "lsr": this.lifespeedrandom, "lor": this.lifeopacityrandom, "dm": this.destroymode, "to": this.timeout, "pcc": this.particleCreateCounter, "ft": this.first_tick, "p": [] }; var i, len, p; var arr = o["p"]; for (i = 0, len = this.particles.length; i < len; i++) { p = this.particles[i]; arr.push([p.x, p.y, p.speed, p.angle, p.opacity, p.grow, p.size, p.gs, p.age]); } return o; }; instanceProto.loadFromJSON = function(o) { this.rate = o["r"]; this.spraycone = o["sc"]; this.spraytype = o["st"]; this.spraying = o["s"]; this.initspeed = o["isp"]; this.initsize = o["isz"]; this.initopacity = o["io"]; this.growrate = o["gr"]; this.xrandom = o["xr"]; this.yrandom = o["yr"]; this.speedrandom = o["spr"]; this.sizerandom = o["szr"]; this.growrandom = o["grnd"]; this.acc = o["acc"]; this.g = o["g"]; this.lifeanglerandom = o["lar"]; this.lifespeedrandom = o["lsr"]; this.lifeopacityrandom = o["lor"]; this.destroymode = o["dm"]; this.timeout = o["to"]; this.particleCreateCounter = o["pcc"]; this.first_tick = o["ft"]; deadparticles.push.apply(deadparticles, this.particles); cr.clearArray(this.particles); var i, len, p, d; var arr = o["p"]; for (i = 0, len = arr.length; i < len; i++) { p = this.allocateParticle(); d = arr[i]; p.x = d[0]; p.y = d[1]; p.speed = d[2]; p.angle = d[3]; p.opacity = d[4]; p.grow = d[5]; p.size = d[6]; p.gs = d[7]; p.age = d[8]; } }; instanceProto.onDestroy = function() { deadparticles.push.apply(deadparticles, this.particles); cr.clearArray(this.particles); }; instanceProto.allocateParticle = function() { var p; if (deadparticles.length) { p = deadparticles.pop(); p.owner = this; } else p = new Particle(this); this.particles.push(p); p.active = true; return p; }; instanceProto.tick = function() { var dt = this.runtime.getDt(this); var i, len, p, n, j; if (this.spraytype === 0 && this.spraying) { this.particleCreateCounter += dt * this.rate; n = cr.floor(this.particleCreateCounter); this.particleCreateCounter -= n; for (i = 0; i < n; i++) { p = this.allocateParticle(); p.init(); } } this.particleBoxLeft = this.x; this.particleBoxTop = this.y; this.particleBoxRight = this.x; this.particleBoxBottom = this.y; for (i = 0, j = 0, len = this.particles.length; i < len; i++) { p = this.particles[i]; this.particles[j] = p; this.runtime.redraw = true; if (this.spraytype === 1 && this.first_tick) p.init(); p.tick(dt); if (!p.active) { deadparticles.push(p); continue; } if (p.left() < this.particleBoxLeft) this.particleBoxLeft = p.left(); if (p.right() > this.particleBoxRight) this.particleBoxRight = p.right(); if (p.top() < this.particleBoxTop) this.particleBoxTop = p.top(); if (p.bottom() > this.particleBoxBottom) this.particleBoxBottom = p.bottom(); j++; } cr.truncateArray(this.particles, j); this.set_bbox_changed(); this.first_tick = false; if (this.spraytype === 1 && this.particles.length === 0) this.runtime.DestroyInstance(this); }; instanceProto.draw = function(ctx) { var i, len, p, layer = this.layer; for (i = 0, len = this.particles.length; i < len; i++) { p = this.particles[i]; if (p.right() >= layer.viewLeft && p.bottom() >= layer.viewTop && p.left() <= layer.viewRight && p.top() <= layer.viewBottom) { p.draw(ctx); } } }; instanceProto.drawGL = function(glw) { this.particlescale = this.layer.getScale(); glw.setTexture(this.type.webGL_texture); var i, len, p, layer = this.layer; for (i = 0, len = this.particles.length; i < len; i++) { p = this.particles[i]; if (p.right() >= layer.viewLeft && p.bottom() >= layer.viewTop && p.left() <= layer.viewRight && p.top() <= layer.viewBottom) { p.drawGL(glw); } } }; function Cnds() {}; Cnds.prototype.IsSpraying = function() { return this.spraying; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpraying = function(set_) { this.spraying = (set_ !== 0); }; Acts.prototype.SetEffect = function(effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.SetRate = function(x) { this.rate = x; var diff, i; if (this.spraytype === 1 && this.first_tick) { if (x < this.particles.length) { diff = this.particles.length - x; for (i = 0; i < diff; i++) deadparticles.push(this.particles.pop()); } else if (x > this.particles.length) { diff = x - this.particles.length; for (i = 0; i < diff; i++) this.allocateParticle().opacity = 0; } } }; Acts.prototype.SetSprayCone = function(x) { this.spraycone = cr.to_radians(x); }; Acts.prototype.SetInitSpeed = function(x) { this.initspeed = x; }; Acts.prototype.SetInitSize = function(x) { this.initsize = x; }; Acts.prototype.SetInitOpacity = function(x) { this.initopacity = x / 100; }; Acts.prototype.SetGrowRate = function(x) { this.growrate = x; }; Acts.prototype.SetXRandomiser = function(x) { this.xrandom = x; }; Acts.prototype.SetYRandomiser = function(x) { this.yrandom = x; }; Acts.prototype.SetSpeedRandomiser = function(x) { this.speedrandom = x; }; Acts.prototype.SetSizeRandomiser = function(x) { this.sizerandom = x; }; Acts.prototype.SetGrowRateRandomiser = function(x) { this.growrandom = x; }; Acts.prototype.SetParticleAcc = function(x) { this.acc = x; }; Acts.prototype.SetGravity = function(x) { this.g = x; }; Acts.prototype.SetAngleRandomiser = function(x) { this.lifeanglerandom = x; }; Acts.prototype.SetLifeSpeedRandomiser = function(x) { this.lifespeedrandom = x; }; Acts.prototype.SetOpacityRandomiser = function(x) { this.lifeopacityrandom = x; }; Acts.prototype.SetTimeout = function(x) { this.timeout = x; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.ParticleCount = function(ret) { ret.set_int(this.particles.length); }; Exps.prototype.Rate = function(ret) { ret.set_float(this.rate); }; Exps.prototype.SprayCone = function(ret) { ret.set_float(cr.to_degrees(this.spraycone)); }; Exps.prototype.InitSpeed = function(ret) { ret.set_float(this.initspeed); }; Exps.prototype.InitSize = function(ret) { ret.set_float(this.initsize); }; Exps.prototype.InitOpacity = function(ret) { ret.set_float(this.initopacity * 100); }; Exps.prototype.InitGrowRate = function(ret) { ret.set_float(this.growrate); }; Exps.prototype.XRandom = function(ret) { ret.set_float(this.xrandom); }; Exps.prototype.YRandom = function(ret) { ret.set_float(this.yrandom); }; Exps.prototype.InitSpeedRandom = function(ret) { ret.set_float(this.speedrandom); }; Exps.prototype.InitSizeRandom = function(ret) { ret.set_float(this.sizerandom); }; Exps.prototype.InitGrowRandom = function(ret) { ret.set_float(this.growrandom); }; Exps.prototype.ParticleAcceleration = function(ret) { ret.set_float(this.acc); }; Exps.prototype.Gravity = function(ret) { ret.set_float(this.g); }; Exps.prototype.ParticleAngleRandom = function(ret) { ret.set_float(this.lifeanglerandom); }; Exps.prototype.ParticleSpeedRandom = function(ret) { ret.set_float(this.lifespeedrandom); }; Exps.prototype.ParticleOpacityRandom = function(ret) { ret.set_float(this.lifeopacityrandom); }; Exps.prototype.Timeout = function(ret) { ret.set_float(this.timeout); }; pluginProto.exps = new Exps(); }());;; cr.plugins_.Sprite = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.Sprite.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; function frame_getDataUri() { if (this.datauri.length === 0) { var tmpcanvas = document.createElement("canvas"); tmpcanvas.width = this.width; tmpcanvas.height = this.height; var tmpctx = tmpcanvas.getContext("2d"); if (this.spritesheeted) { tmpctx.drawImage(this.texture_img, this.offx, this.offy, this.width, this.height, 0, 0, this.width, this.height); } else { tmpctx.drawImage(this.texture_img, 0, 0, this.width, this.height); } this.datauri = tmpcanvas.toDataURL("image/png"); } return this.datauri; }; typeProto.onCreate = function() { if (this.is_family) return; var i, leni, j, lenj; var anim, frame, animobj, frameobj, wt, uv; this.all_frames = []; this.has_loaded_textures = false; for (i = 0, leni = this.animations.length; i < leni; i++) { anim = this.animations[i]; animobj = {}; animobj.name = anim[0]; animobj.speed = anim[1]; animobj.loop = anim[2]; animobj.repeatcount = anim[3]; animobj.repeatto = anim[4]; animobj.pingpong = anim[5]; animobj.sid = anim[6]; animobj.frames = []; for (j = 0, lenj = anim[7].length; j < lenj; j++) { frame = anim[7][j]; frameobj = {}; frameobj.texture_file = frame[0]; frameobj.texture_filesize = frame[1]; frameobj.offx = frame[2]; frameobj.offy = frame[3]; frameobj.width = frame[4]; frameobj.height = frame[5]; frameobj.duration = frame[6]; frameobj.hotspotX = frame[7]; frameobj.hotspotY = frame[8]; frameobj.image_points = frame[9]; frameobj.poly_pts = frame[10]; frameobj.pixelformat = frame[11]; frameobj.spritesheeted = (frameobj.width !== 0); frameobj.datauri = ""; // generated on demand and cached frameobj.getDataUri = frame_getDataUri; uv = {}; uv.left = 0; uv.top = 0; uv.right = 1; uv.bottom = 1; frameobj.sheetTex = uv; frameobj.webGL_texture = null; wt = this.runtime.findWaitingTexture(frame[0]); if (wt) { frameobj.texture_img = wt; } else { frameobj.texture_img = new Image(); frameobj.texture_img.cr_src = frame[0]; frameobj.texture_img.cr_filesize = frame[1]; frameobj.texture_img.c2webGL_texture = null; this.runtime.waitForImageLoad(frameobj.texture_img, frame[0]); } cr.seal(frameobj); animobj.frames.push(frameobj); this.all_frames.push(frameobj); } cr.seal(animobj); this.animations[i] = animobj; // swap array data for object } }; typeProto.updateAllCurrentTexture = function() { var i, len, inst; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; inst.curWebGLTexture = inst.curFrame.webGL_texture; } }; typeProto.onLostWebGLContext = function() { if (this.is_family) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.texture_img.c2webGL_texture = null; frame.webGL_texture = null; } this.has_loaded_textures = false; this.updateAllCurrentTexture(); }; typeProto.onRestoreWebGLContext = function() { if (this.is_family || !this.instances.length) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.updateAllCurrentTexture(); }; typeProto.loadTextures = function() { if (this.is_family || this.has_loaded_textures || !this.runtime.glwrap) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.has_loaded_textures = true; }; typeProto.unloadTextures = function() { if (this.is_family || this.instances.length || !this.has_loaded_textures) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; this.runtime.glwrap.deleteTexture(frame.webGL_texture); frame.webGL_texture = null; } this.has_loaded_textures = false; }; var already_drawn_images = []; typeProto.preloadCanvas2D = function(ctx) { var i, len, frameimg; cr.clearArray(already_drawn_images); for (i = 0, len = this.all_frames.length; i < len; ++i) { frameimg = this.all_frames[i].texture_img; if (already_drawn_images.indexOf(frameimg) !== -1) continue; ctx.drawImage(frameimg, 0, 0); already_drawn_images.push(frameimg); } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; var poly_pts = this.type.animations[0].frames[0].poly_pts; if (this.recycled) this.collision_poly.set_pts(poly_pts); else this.collision_poly = new cr.CollisionPoly(poly_pts); }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.isTicking = false; this.inAnimTrigger = false; this.collisionsEnabled = (this.properties[3] !== 0); this.cur_animation = this.getAnimationByName(this.properties[1]) || this.type.animations[0]; this.cur_frame = this.properties[2]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; var curanimframe = this.cur_animation.frames[this.cur_frame]; this.collision_poly.set_pts(curanimframe.poly_pts); this.hotspotX = curanimframe.hotspotX; this.hotspotY = curanimframe.hotspotY; this.cur_anim_speed = this.cur_animation.speed; this.cur_anim_repeatto = this.cur_animation.repeatto; if (!(this.type.animations.length === 1 && this.type.animations[0].frames.length === 1) && this.cur_anim_speed !== 0) { this.runtime.tickMe(this); this.isTicking = true; } if (this.recycled) this.animTimer.reset(); else this.animTimer = new cr.KahanAdder(); this.frameStart = this.getNowTime(); this.animPlaying = true; this.animRepeats = 0; this.animForwards = true; this.animTriggerName = ""; this.changeAnimName = ""; this.changeAnimFrom = 0; this.changeAnimFrame = -1; this.type.loadTextures(); var i, leni, j, lenj; var anim, frame, uv, maintex; for (i = 0, leni = this.type.animations.length; i < leni; i++) { anim = this.type.animations[i]; for (j = 0, lenj = anim.frames.length; j < lenj; j++) { frame = anim.frames[j]; if (frame.width === 0) { frame.width = frame.texture_img.width; frame.height = frame.texture_img.height; } if (frame.spritesheeted) { maintex = frame.texture_img; uv = frame.sheetTex; uv.left = frame.offx / maintex.width; uv.top = frame.offy / maintex.height; uv.right = (frame.offx + frame.width) / maintex.width; uv.bottom = (frame.offy + frame.height) / maintex.height; if (frame.offx === 0 && frame.offy === 0 && frame.width === maintex.width && frame.height === maintex.height) { frame.spritesheeted = false; } } } } this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; }; instanceProto.saveToJSON = function() { var o = { "a": this.cur_animation.sid, "f": this.cur_frame, "cas": this.cur_anim_speed, "fs": this.frameStart, "ar": this.animRepeats, "at": this.animTimer.sum, "rt": this.cur_anim_repeatto }; if (!this.animPlaying) o["ap"] = this.animPlaying; if (!this.animForwards) o["af"] = this.animForwards; return o; }; instanceProto.loadFromJSON = function(o) { var anim = this.getAnimationBySid(o["a"]); if (anim) this.cur_animation = anim; this.cur_frame = o["f"]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; this.cur_anim_speed = o["cas"]; this.frameStart = o["fs"]; this.animRepeats = o["ar"]; this.animTimer.reset(); this.animTimer.sum = o["at"]; this.animPlaying = o.hasOwnProperty("ap") ? o["ap"] : true; this.animForwards = o.hasOwnProperty("af") ? o["af"] : true; if (o.hasOwnProperty("rt")) this.cur_anim_repeatto = o["rt"]; else this.cur_anim_repeatto = this.cur_animation.repeatto; this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; this.collision_poly.set_pts(this.curFrame.poly_pts); this.hotspotX = this.curFrame.hotspotX; this.hotspotY = this.curFrame.hotspotY; }; instanceProto.animationFinish = function(reverse) { this.cur_frame = reverse ? 0 : this.cur_animation.frames.length - 1; this.animPlaying = false; this.animTriggerName = this.cur_animation.name; this.inAnimTrigger = true; this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnyAnimFinished, this); this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnimFinished, this); this.inAnimTrigger = false; this.animRepeats = 0; }; instanceProto.getNowTime = function() { return this.animTimer.sum; }; instanceProto.tick = function() { this.animTimer.add(this.runtime.getDt(this)); if (this.changeAnimName.length) this.doChangeAnim(); if (this.changeAnimFrame >= 0) this.doChangeAnimFrame(); var now = this.getNowTime(); var cur_animation = this.cur_animation; var prev_frame = cur_animation.frames[this.cur_frame]; var next_frame; var cur_frame_time = prev_frame.duration / this.cur_anim_speed; if (this.animPlaying && now >= this.frameStart + cur_frame_time) { if (this.animForwards) { this.cur_frame++; } else { this.cur_frame--; } this.frameStart += cur_frame_time; if (this.cur_frame >= cur_animation.frames.length) { if (cur_animation.pingpong) { this.animForwards = false; this.cur_frame = cur_animation.frames.length - 2; } else if (cur_animation.loop) { this.cur_frame = this.cur_anim_repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(false); } else { this.cur_frame = this.cur_anim_repeatto; } } } if (this.cur_frame < 0) { if (cur_animation.pingpong) { this.cur_frame = 1; this.animForwards = true; if (!cur_animation.loop) { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } } } else { if (cur_animation.loop) { this.cur_frame = this.cur_anim_repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } else { this.cur_frame = this.cur_anim_repeatto; } } } } if (this.cur_frame < 0) this.cur_frame = 0; else if (this.cur_frame >= cur_animation.frames.length) this.cur_frame = cur_animation.frames.length - 1; if (now > this.frameStart + (cur_animation.frames[this.cur_frame].duration / this.cur_anim_speed)) { this.frameStart = now; } next_frame = cur_animation.frames[this.cur_frame]; this.OnFrameChanged(prev_frame, next_frame); this.runtime.redraw = true; } }; instanceProto.getAnimationByName = function(name_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (cr.equals_nocase(a.name, name_)) return a; } return null; }; instanceProto.getAnimationBySid = function(sid_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (a.sid === sid_) return a; } return null; }; instanceProto.doChangeAnim = function() { var prev_frame = this.cur_animation.frames[this.cur_frame]; var anim = this.getAnimationByName(this.changeAnimName); this.changeAnimName = ""; if (!anim) return; if (cr.equals_nocase(anim.name, this.cur_animation.name) && this.animPlaying) return; this.cur_animation = anim; this.cur_anim_speed = anim.speed; this.cur_anim_repeatto = anim.repeatto; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (this.changeAnimFrom === 1) this.cur_frame = 0; this.animPlaying = true; this.frameStart = this.getNowTime(); this.animForwards = true; this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.runtime.redraw = true; }; instanceProto.doChangeAnimFrame = function() { var prev_frame = this.cur_animation.frames[this.cur_frame]; var prev_frame_number = this.cur_frame; this.cur_frame = cr.floor(this.changeAnimFrame); if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (prev_frame_number !== this.cur_frame) { this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.frameStart = this.getNowTime(); this.runtime.redraw = true; } this.changeAnimFrame = -1; }; instanceProto.OnFrameChanged = function(prev_frame, next_frame) { var oldw = prev_frame.width; var oldh = prev_frame.height; var neww = next_frame.width; var newh = next_frame.height; if (oldw != neww) this.width *= (neww / oldw); if (oldh != newh) this.height *= (newh / oldh); this.hotspotX = next_frame.hotspotX; this.hotspotY = next_frame.hotspotY; this.collision_poly.set_pts(next_frame.poly_pts); this.set_bbox_changed(); this.curFrame = next_frame; this.curWebGLTexture = next_frame.webGL_texture; var i, len, b; for (i = 0, len = this.behavior_insts.length; i < len; i++) { b = this.behavior_insts[i]; if (b.onSpriteFrameChanged) b.onSpriteFrameChanged(prev_frame, next_frame); } this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnFrameChanged, this); }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; var cur_frame = this.curFrame; var spritesheeted = cur_frame.spritesheeted; var cur_image = cur_frame.texture_img; var myx = this.x; var myy = this.y; var w = this.width; var h = this.height; if (this.angle === 0 && w >= 0 && h >= 0) { myx -= this.hotspotX * w; myy -= this.hotspotY * h; if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, myx, myy, w, h); } else { ctx.drawImage(cur_image, myx, myy, w, h); } } else { if (this.runtime.pixel_rounding) { myx = Math.round(myx); myy = Math.round(myy); } ctx.save(); var widthfactor = w > 0 ? 1 : -1; var heightfactor = h > 0 ? 1 : -1; ctx.translate(myx, myy); if (widthfactor !== 1 || heightfactor !== 1) ctx.scale(widthfactor, heightfactor); ctx.rotate(this.angle * widthfactor * heightfactor); var drawx = 0 - (this.hotspotX * cr.abs(w)) var drawy = 0 - (this.hotspotY * cr.abs(h)); if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, drawx, drawy, cr.abs(w), cr.abs(h)); } else { ctx.drawImage(cur_image, drawx, drawy, cr.abs(w), cr.abs(h)); } ctx.restore(); } /* ctx.strokeStyle = "#f00"; ctx.lineWidth = 3; ctx.beginPath(); this.collision_poly.cache_poly(this.width, this.height, this.angle); var i, len, ax, ay, bx, by; for (i = 0, len = this.collision_poly.pts_count; i < len; i++) { ax = this.collision_poly.pts_cache[i*2] + this.x; ay = this.collision_poly.pts_cache[i*2+1] + this.y; bx = this.collision_poly.pts_cache[((i+1)%len)*2] + this.x; by = this.collision_poly.pts_cache[((i+1)%len)*2+1] + this.y; ctx.moveTo(ax, ay); ctx.lineTo(bx, by); } ctx.stroke(); ctx.closePath(); */ /* if (this.behavior_insts.length >= 1 && this.behavior_insts[0].draw) { this.behavior_insts[0].draw(ctx); } */ }; instanceProto.drawGL_earlyZPass = function(glw) { this.drawGL(glw); }; instanceProto.drawGL = function(glw) { glw.setTexture(this.curWebGLTexture); glw.setOpacity(this.opacity); var cur_frame = this.curFrame; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = Math.round(this.x) - this.x; var oy = Math.round(this.y) - this.y; if (cur_frame.spritesheeted) glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, cur_frame.sheetTex); else glw.quad(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy); } else { if (cur_frame.spritesheeted) glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, cur_frame.sheetTex); else glw.quad(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly); } }; instanceProto.getImagePointIndexByName = function(name_) { var cur_frame = this.curFrame; var i, len; for (i = 0, len = cur_frame.image_points.length; i < len; i++) { if (cr.equals_nocase(name_, cur_frame.image_points[i][0])) return i; } return -1; }; instanceProto.getImagePoint = function(imgpt, getX) { var cur_frame = this.curFrame; var image_points = cur_frame.image_points; var index; if (cr.is_string(imgpt)) index = this.getImagePointIndexByName(imgpt); else index = imgpt - 1; // 0 is origin index = cr.floor(index); if (index < 0 || index >= image_points.length) return getX ? this.x : this.y; // return origin var x = (image_points[index][1] - cur_frame.hotspotX) * this.width; var y = image_points[index][2]; y = (y - cur_frame.hotspotY) * this.height; var cosa = Math.cos(this.angle); var sina = Math.sin(this.angle); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += this.x; y += this.y; return getX ? x : y; }; function Cnds() {}; var arrCache = []; function allocArr() { if (arrCache.length) return arrCache.pop(); else return [0, 0, 0]; }; function freeArr(a) { a[0] = 0; a[1] = 0; a[2] = 0; arrCache.push(a); }; function makeCollKey(a, b) { if (a < b) return "" + a + "," + b; else return "" + b + "," + a; }; function collmemory_add(collmemory, a, b, tickcount) { var a_uid = a.uid; var b_uid = b.uid; var key = makeCollKey(a_uid, b_uid); if (collmemory.hasOwnProperty(key)) { collmemory[key][2] = tickcount; return; } var arr = allocArr(); arr[0] = a_uid; arr[1] = b_uid; arr[2] = tickcount; collmemory[key] = arr; }; function collmemory_remove(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { freeArr(collmemory[key]); delete collmemory[key]; } }; function collmemory_removeInstance(collmemory, inst) { var uid = inst.uid; var p, entry; for (p in collmemory) { if (collmemory.hasOwnProperty(p)) { entry = collmemory[p]; if (entry[0] === uid || entry[1] === uid) { freeArr(collmemory[p]); delete collmemory[p]; } } } }; var last_coll_tickcount = -2; function collmemory_has(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { last_coll_tickcount = collmemory[key][2]; return true; } else { last_coll_tickcount = -2; return false; } }; var candidates1 = []; Cnds.prototype.OnCollision = function(rtype) { if (!rtype) return false; var runtime = this.runtime; var cnd = runtime.getCurrentCondition(); var ltype = cnd.type; var collmemory = null; if (cnd.extra["collmemory"]) { collmemory = cnd.extra["collmemory"]; } else { collmemory = {}; cnd.extra["collmemory"] = collmemory; } if (!cnd.extra["spriteCreatedDestroyCallback"]) { cnd.extra["spriteCreatedDestroyCallback"] = true; runtime.addDestroyCallback(function(inst) { collmemory_removeInstance(cnd.extra["collmemory"], inst); }); } var lsol = ltype.getCurrentSol(); var rsol = rtype.getCurrentSol(); var linstances = lsol.getObjects(); var rinstances; var registeredInstances; var l, linst, r, rinst; var curlsol, currsol; var tickcount = this.runtime.tickcount; var lasttickcount = tickcount - 1; var exists, run; var current_event = runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; for (l = 0; l < linstances.length; l++) { linst = linstances[l]; if (rsol.select_all) { linst.update_bbox(); this.runtime.getCollisionCandidates(linst.layer, rtype, linst.bbox, candidates1); rinstances = candidates1; this.runtime.addRegisteredCollisionCandidates(linst, rtype, rinstances); } else { rinstances = rsol.getObjects(); } for (r = 0; r < rinstances.length; r++) { rinst = rinstances[r]; if (runtime.testOverlap(linst, rinst) || runtime.checkRegisteredCollision(linst, rinst)) { exists = collmemory_has(collmemory, linst, rinst); run = (!exists || (last_coll_tickcount < lasttickcount)); collmemory_add(collmemory, linst, rinst, tickcount); if (run) { runtime.pushCopySol(current_event.solModifiers); curlsol = ltype.getCurrentSol(); currsol = rtype.getCurrentSol(); curlsol.select_all = false; currsol.select_all = false; if (ltype === rtype) { curlsol.instances.length = 2; // just use lsol, is same reference as rsol curlsol.instances[0] = linst; curlsol.instances[1] = rinst; ltype.applySolToContainer(); } else { curlsol.instances.length = 1; currsol.instances.length = 1; curlsol.instances[0] = linst; currsol.instances[0] = rinst; ltype.applySolToContainer(); rtype.applySolToContainer(); } current_event.retrigger(); runtime.popSol(current_event.solModifiers); } } else { collmemory_remove(collmemory, linst, rinst); } } cr.clearArray(candidates1); } return false; }; var rpicktype = null; var rtopick = new cr.ObjectSet(); var needscollisionfinish = false; var candidates2 = []; var temp_bbox = new cr.rect(0, 0, 0, 0); function DoOverlapCondition(rtype, offx, offy) { if (!rtype) return false; var do_offset = (offx !== 0 || offy !== 0); var oldx, oldy, ret = false, r, lenr, rinst; var cnd = this.runtime.getCurrentCondition(); var ltype = cnd.type; var inverted = cnd.inverted; var rsol = rtype.getCurrentSol(); var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var rinstances; if (rsol.select_all) { this.update_bbox(); temp_bbox.copy(this.bbox); temp_bbox.offset(offx, offy); this.runtime.getCollisionCandidates(this.layer, rtype, temp_bbox, candidates2); rinstances = candidates2; } else if (orblock) { if (this.runtime.isCurrentConditionFirst() && !rsol.else_instances.length && rsol.instances.length) rinstances = rsol.instances; else rinstances = rsol.else_instances; } else { rinstances = rsol.instances; } rpicktype = rtype; needscollisionfinish = (ltype !== rtype && !inverted); if (do_offset) { oldx = this.x; oldy = this.y; this.x += offx; this.y += offy; this.set_bbox_changed(); } for (r = 0, lenr = rinstances.length; r < lenr; r++) { rinst = rinstances[r]; if (this.runtime.testOverlap(this, rinst)) { ret = true; if (inverted) break; if (ltype !== rtype) rtopick.add(rinst); } } if (do_offset) { this.x = oldx; this.y = oldy; this.set_bbox_changed(); } cr.clearArray(candidates2); return ret; }; typeProto.finish = function(do_pick) { if (!needscollisionfinish) return; if (do_pick) { var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var sol = rpicktype.getCurrentSol(); var topick = rtopick.valuesRef(); var i, len, inst; if (sol.select_all) { sol.select_all = false; cr.clearArray(sol.instances); for (i = 0, len = topick.length; i < len; ++i) { sol.instances[i] = topick[i]; } if (orblock) { cr.clearArray(sol.else_instances); for (i = 0, len = rpicktype.instances.length; i < len; ++i) { inst = rpicktype.instances[i]; if (!rtopick.contains(inst)) sol.else_instances.push(inst); } } } else { if (orblock) { var initsize = sol.instances.length; for (i = 0, len = topick.length; i < len; ++i) { sol.instances[initsize + i] = topick[i]; cr.arrayFindRemove(sol.else_instances, topick[i]); } } else { cr.shallowAssignArray(sol.instances, topick); } } rpicktype.applySolToContainer(); } rtopick.clear(); needscollisionfinish = false; }; Cnds.prototype.IsOverlapping = function(rtype) { return DoOverlapCondition.call(this, rtype, 0, 0); }; Cnds.prototype.IsOverlappingOffset = function(rtype, offx, offy) { return DoOverlapCondition.call(this, rtype, offx, offy); }; Cnds.prototype.IsAnimPlaying = function(animname) { if (this.changeAnimName.length) return cr.equals_nocase(this.changeAnimName, animname); else return cr.equals_nocase(this.cur_animation.name, animname); }; Cnds.prototype.CompareFrame = function(cmp, framenum) { return cr.do_cmp(this.cur_frame, cmp, framenum); }; Cnds.prototype.CompareAnimSpeed = function(cmp, x) { var s = (this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); return cr.do_cmp(s, cmp, x); }; Cnds.prototype.OnAnimFinished = function(animname) { return cr.equals_nocase(this.animTriggerName, animname); }; Cnds.prototype.OnAnyAnimFinished = function() { return true; }; Cnds.prototype.OnFrameChanged = function() { return true; }; Cnds.prototype.IsMirrored = function() { return this.width < 0; }; Cnds.prototype.IsFlipped = function() { return this.height < 0; }; Cnds.prototype.OnURLLoaded = function() { return true; }; Cnds.prototype.IsCollisionEnabled = function() { return this.collisionsEnabled; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Spawn = function(obj, layer, imgpt) { if (!obj || !layer) return; var inst = this.runtime.createInstance(obj, layer, this.getImagePoint(imgpt, true), this.getImagePoint(imgpt, false)); if (!inst) return; if (typeof inst.angle !== "undefined") { inst.angle = this.angle; inst.set_bbox_changed(); } this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var cur_act = this.runtime.getCurrentAction(); var reset_sol = false; if (cr.is_undefined(cur_act.extra["Spawn_LastExec"]) || cur_act.extra["Spawn_LastExec"] < this.runtime.execcount) { reset_sol = true; cur_act.extra["Spawn_LastExec"] = this.runtime.execcount; } var sol; if (obj != this.type) { sol = obj.getCurrentSol(); sol.select_all = false; if (reset_sol) { cr.clearArray(sol.instances); sol.instances[0] = inst; } else sol.instances.push(inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; if (reset_sol) { cr.clearArray(sol.instances); sol.instances[0] = s; } else sol.instances.push(s); } } } }; Acts.prototype.SetEffect = function(effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.StopAnim = function() { this.animPlaying = false; }; Acts.prototype.StartAnim = function(from) { this.animPlaying = true; this.frameStart = this.getNowTime(); if (from === 1 && this.cur_frame !== 0) { this.changeAnimFrame = 0; if (!this.inAnimTrigger) this.doChangeAnimFrame(); } if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetAnim = function(animname, from) { this.changeAnimName = animname; this.changeAnimFrom = from; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnim(); }; Acts.prototype.SetAnimFrame = function(framenumber) { this.changeAnimFrame = framenumber; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnimFrame(); }; Acts.prototype.SetAnimSpeed = function(s) { this.cur_anim_speed = cr.abs(s); this.animForwards = (s >= 0); if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetAnimRepeatToFrame = function(s) { s = Math.floor(s); if (s < 0) s = 0; if (s >= this.cur_animation.frames.length) s = this.cur_animation.frames.length - 1; this.cur_anim_repeatto = s; }; Acts.prototype.SetMirrored = function(m) { var neww = cr.abs(this.width) * (m === 0 ? -1 : 1); if (this.width === neww) return; this.width = neww; this.set_bbox_changed(); }; Acts.prototype.SetFlipped = function(f) { var newh = cr.abs(this.height) * (f === 0 ? -1 : 1); if (this.height === newh) return; this.height = newh; this.set_bbox_changed(); }; Acts.prototype.SetScale = function(s) { var cur_frame = this.curFrame; var mirror_factor = (this.width < 0 ? -1 : 1); var flip_factor = (this.height < 0 ? -1 : 1); var new_width = cur_frame.width * s * mirror_factor; var new_height = cur_frame.height * s * flip_factor; if (this.width !== new_width || this.height !== new_height) { this.width = new_width; this.height = new_height; this.set_bbox_changed(); } }; Acts.prototype.LoadURL = function(url_, resize_, crossOrigin_) { var img = new Image(); var self = this; var curFrame_ = this.curFrame; img.onload = function() { if (curFrame_.texture_img.src === img.src) { if (self.runtime.glwrap && self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); return; } curFrame_.texture_img = img; curFrame_.offx = 0; curFrame_.offy = 0; curFrame_.width = img.width; curFrame_.height = img.height; curFrame_.spritesheeted = false; curFrame_.datauri = ""; curFrame_.pixelformat = 0; // reset to RGBA, since we don't know what type of image will have come in if (self.runtime.glwrap) { if (curFrame_.webGL_texture) self.runtime.glwrap.deleteTexture(curFrame_.webGL_texture); curFrame_.webGL_texture = self.runtime.glwrap.loadTexture(img, false, self.runtime.linearSampling); if (self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; self.type.updateAllCurrentTexture(); } if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:" && crossOrigin_ === 0) img["crossOrigin"] = "anonymous"; this.runtime.setImageSrc(img, url_); }; Acts.prototype.SetCollisions = function(set_) { if (this.collisionsEnabled === (set_ !== 0)) return; // no change this.collisionsEnabled = (set_ !== 0); if (this.collisionsEnabled) this.set_bbox_changed(); // needs to be added back to cells else { if (this.collcells.right >= this.collcells.left) this.type.collision_grid.update(this, this.collcells, null); this.collcells.set(0, 0, -1, -1); } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.AnimationFrame = function(ret) { ret.set_int(this.cur_frame); }; Exps.prototype.AnimationFrameCount = function(ret) { ret.set_int(this.cur_animation.frames.length); }; Exps.prototype.AnimationName = function(ret) { ret.set_string(this.cur_animation.name); }; Exps.prototype.AnimationSpeed = function(ret) { ret.set_float(this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); }; Exps.prototype.ImagePointX = function(ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, true)); }; Exps.prototype.ImagePointY = function(ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, false)); }; Exps.prototype.ImagePointCount = function(ret) { ret.set_int(this.curFrame.image_points.length); }; Exps.prototype.ImageWidth = function(ret) { ret.set_float(this.curFrame.width); }; Exps.prototype.ImageHeight = function(ret) { ret.set_float(this.curFrame.height); }; pluginProto.exps = new Exps(); }());;; cr.plugins_.Text = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.Text.prototype; pluginProto.onCreate = function() { pluginProto.acts.SetWidth = function(w) { if (this.width !== w) { this.width = w; this.text_changed = true; // also recalculate text wrapping this.set_bbox_changed(); } }; }; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; typeProto.onLostWebGLContext = function() { if (this.is_family) return; var i, len, inst; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; inst.mycanvas = null; inst.myctx = null; inst.mytex = null; } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; if (this.recycled) cr.clearArray(this.lines); else this.lines = []; // for word wrapping this.text_changed = true; }; var instanceProto = pluginProto.Instance.prototype; var requestedWebFonts = {}; // already requested web fonts have an entry here instanceProto.onCreate = function() { this.text = this.properties[0]; this.visible = (this.properties[1] === 0); // 0=visible, 1=invisible this.font = this.properties[2]; this.color = this.properties[3]; this.halign = this.properties[4]; // 0=left, 1=center, 2=right this.valign = this.properties[5]; // 0=top, 1=center, 2=bottom this.wrapbyword = (this.properties[7] === 0); // 0=word, 1=character this.lastwidth = this.width; this.lastwrapwidth = this.width; this.lastheight = this.height; this.line_height_offset = this.properties[8]; this.facename = ""; this.fontstyle = ""; this.ptSize = 0; this.textWidth = 0; this.textHeight = 0; this.parseFont(); this.mycanvas = null; this.myctx = null; this.mytex = null; this.need_text_redraw = false; this.last_render_tick = this.runtime.tickcount; if (this.recycled) this.rcTex.set(0, 0, 1, 1); else this.rcTex = new cr.rect(0, 0, 1, 1); if (this.runtime.glwrap) this.runtime.tickMe(this);; }; instanceProto.parseFont = function() { var arr = this.font.split(" "); var i; for (i = 0; i < arr.length; i++) { if (arr[i].substr(arr[i].length - 2, 2) === "pt") { this.ptSize = parseInt(arr[i].substr(0, arr[i].length - 2)); this.pxHeight = Math.ceil((this.ptSize / 72.0) * 96.0) + 4; // assume 96dpi... if (i > 0) this.fontstyle = arr[i - 1]; this.facename = arr[i + 1]; for (i = i + 2; i < arr.length; i++) this.facename += " " + arr[i]; break; } } }; instanceProto.saveToJSON = function() { return { "t": this.text, "f": this.font, "c": this.color, "ha": this.halign, "va": this.valign, "wr": this.wrapbyword, "lho": this.line_height_offset, "fn": this.facename, "fs": this.fontstyle, "ps": this.ptSize, "pxh": this.pxHeight, "tw": this.textWidth, "th": this.textHeight, "lrt": this.last_render_tick }; }; instanceProto.loadFromJSON = function(o) { this.text = o["t"]; this.font = o["f"]; this.color = o["c"]; this.halign = o["ha"]; this.valign = o["va"]; this.wrapbyword = o["wr"]; this.line_height_offset = o["lho"]; this.facename = o["fn"]; this.fontstyle = o["fs"]; this.ptSize = o["ps"]; this.pxHeight = o["pxh"]; this.textWidth = o["tw"]; this.textHeight = o["th"]; this.last_render_tick = o["lrt"]; this.text_changed = true; this.lastwidth = this.width; this.lastwrapwidth = this.width; this.lastheight = this.height; }; instanceProto.tick = function() { if (this.runtime.glwrap && this.mytex && (this.runtime.tickcount - this.last_render_tick >= 300)) { var layer = this.layer; this.update_bbox(); var bbox = this.bbox; if (bbox.right < layer.viewLeft || bbox.bottom < layer.viewTop || bbox.left > layer.viewRight || bbox.top > layer.viewBottom) { this.runtime.glwrap.deleteTexture(this.mytex); this.mytex = null; this.myctx = null; this.mycanvas = null; } } }; instanceProto.onDestroy = function() { this.myctx = null; this.mycanvas = null; if (this.runtime.glwrap && this.mytex) this.runtime.glwrap.deleteTexture(this.mytex); this.mytex = null; }; instanceProto.updateFont = function() { this.font = this.fontstyle + " " + this.ptSize.toString() + "pt " + this.facename; this.text_changed = true; this.runtime.redraw = true; }; instanceProto.draw = function(ctx, glmode) { ctx.font = this.font; ctx.textBaseline = "top"; ctx.fillStyle = this.color; ctx.globalAlpha = glmode ? 1 : this.opacity; var myscale = 1; if (glmode) { myscale = Math.abs(this.layer.getScale()); ctx.save(); ctx.scale(myscale, myscale); } if (this.text_changed || this.width !== this.lastwrapwidth) { this.type.plugin.WordWrap(this.text, this.lines, ctx, this.width, this.wrapbyword); this.text_changed = false; this.lastwrapwidth = this.width; } this.update_bbox(); var penX = glmode ? 0 : this.bquad.tlx; var penY = glmode ? 0 : this.bquad.tly; if (this.runtime.pixel_rounding) { penX = (penX + 0.5) | 0; penY = (penY + 0.5) | 0; } if (this.angle !== 0 && !glmode) { ctx.save(); ctx.translate(penX, penY); ctx.rotate(this.angle); penX = 0; penY = 0; } var endY = penY + this.height; var line_height = this.pxHeight; line_height += this.line_height_offset; var drawX; var i; if (this.valign === 1) // center penY += Math.max(this.height / 2 - (this.lines.length * line_height) / 2, 0); else if (this.valign === 2) // bottom penY += Math.max(this.height - (this.lines.length * line_height) - 2, 0); for (i = 0; i < this.lines.length; i++) { drawX = penX; if (this.halign === 1) // center drawX = penX + (this.width - this.lines[i].width) / 2; else if (this.halign === 2) // right drawX = penX + (this.width - this.lines[i].width); ctx.fillText(this.lines[i].text, drawX, penY); penY += line_height; if (penY >= endY - line_height) break; } if (this.angle !== 0 || glmode) ctx.restore(); this.last_render_tick = this.runtime.tickcount; }; instanceProto.drawGL = function(glw) { if (this.width < 1 || this.height < 1) return; var need_redraw = this.text_changed || this.need_text_redraw; this.need_text_redraw = false; var layer_scale = this.layer.getScale(); var layer_angle = this.layer.getAngle(); var rcTex = this.rcTex; var floatscaledwidth = layer_scale * this.width; var floatscaledheight = layer_scale * this.height; var scaledwidth = Math.ceil(floatscaledwidth); var scaledheight = Math.ceil(floatscaledheight); var absscaledwidth = Math.abs(scaledwidth); var absscaledheight = Math.abs(scaledheight); var halfw = this.runtime.draw_width / 2; var halfh = this.runtime.draw_height / 2; if (!this.myctx) { this.mycanvas = document.createElement("canvas"); this.mycanvas.width = absscaledwidth; this.mycanvas.height = absscaledheight; this.lastwidth = absscaledwidth; this.lastheight = absscaledheight; need_redraw = true; this.myctx = this.mycanvas.getContext("2d"); } if (absscaledwidth !== this.lastwidth || absscaledheight !== this.lastheight) { this.mycanvas.width = absscaledwidth; this.mycanvas.height = absscaledheight; if (this.mytex) { glw.deleteTexture(this.mytex); this.mytex = null; } need_redraw = true; } if (need_redraw) { this.myctx.clearRect(0, 0, absscaledwidth, absscaledheight); this.draw(this.myctx, true); if (!this.mytex) this.mytex = glw.createEmptyTexture(absscaledwidth, absscaledheight, this.runtime.linearSampling, this.runtime.isMobile); glw.videoToTexture(this.mycanvas, this.mytex, this.runtime.isMobile); } this.lastwidth = absscaledwidth; this.lastheight = absscaledheight; glw.setTexture(this.mytex); glw.setOpacity(this.opacity); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); var q = this.bquad; var tlx = this.layer.layerToCanvas(q.tlx, q.tly, true, true); var tly = this.layer.layerToCanvas(q.tlx, q.tly, false, true); var trx = this.layer.layerToCanvas(q.trx, q.try_, true, true); var try_ = this.layer.layerToCanvas(q.trx, q.try_, false, true); var brx = this.layer.layerToCanvas(q.brx, q.bry, true, true); var bry = this.layer.layerToCanvas(q.brx, q.bry, false, true); var blx = this.layer.layerToCanvas(q.blx, q.bly, true, true); var bly = this.layer.layerToCanvas(q.blx, q.bly, false, true); if (this.runtime.pixel_rounding || (this.angle === 0 && layer_angle === 0)) { var ox = ((tlx + 0.5) | 0) - tlx; var oy = ((tly + 0.5) | 0) - tly tlx += ox; tly += oy; trx += ox; try_ += oy; brx += ox; bry += oy; blx += ox; bly += oy; } if (this.angle === 0 && layer_angle === 0) { trx = tlx + scaledwidth; try_ = tly; brx = trx; bry = tly + scaledheight; blx = tlx; bly = bry; rcTex.right = 1; rcTex.bottom = 1; } else { rcTex.right = floatscaledwidth / scaledwidth; rcTex.bottom = floatscaledheight / scaledheight; } glw.quadTex(tlx, tly, trx, try_, brx, bry, blx, bly, rcTex); glw.resetModelView(); glw.scale(layer_scale, layer_scale); glw.rotateZ(-this.layer.getAngle()); glw.translate((this.layer.viewLeft + this.layer.viewRight) / -2, (this.layer.viewTop + this.layer.viewBottom) / -2); glw.updateModelView(); this.last_render_tick = this.runtime.tickcount; }; var wordsCache = []; pluginProto.TokeniseWords = function(text) { cr.clearArray(wordsCache); var cur_word = ""; var ch; var i = 0; while (i < text.length) { ch = text.charAt(i); if (ch === "\n") { if (cur_word.length) { wordsCache.push(cur_word); cur_word = ""; } wordsCache.push("\n"); ++i; } else if (ch === " " || ch === "\t" || ch === "-") { do { cur_word += text.charAt(i); i++; } while (i < text.length && (text.charAt(i) === " " || text.charAt(i) === "\t")); wordsCache.push(cur_word); cur_word = ""; } else if (i < text.length) { cur_word += ch; i++; } } if (cur_word.length) wordsCache.push(cur_word); }; var linesCache = []; function allocLine() { if (linesCache.length) return linesCache.pop(); else return {}; }; function freeLine(l) { linesCache.push(l); }; function freeAllLines(arr) { var i, len; for (i = 0, len = arr.length; i < len; i++) { freeLine(arr[i]); } cr.clearArray(arr); }; pluginProto.WordWrap = function(text, lines, ctx, width, wrapbyword) { if (!text || !text.length) { freeAllLines(lines); return; } if (width <= 2.0) { freeAllLines(lines); return; } if (text.length <= 100 && text.indexOf("\n") === -1) { var all_width = ctx.measureText(text).width; if (all_width <= width) { freeAllLines(lines); lines.push(allocLine()); lines[0].text = text; lines[0].width = all_width; return; } } this.WrapText(text, lines, ctx, width, wrapbyword); }; function trimSingleSpaceRight(str) { if (!str.length || str.charAt(str.length - 1) !== " ") return str; return str.substring(0, str.length - 1); }; pluginProto.WrapText = function(text, lines, ctx, width, wrapbyword) { var wordArray; if (wrapbyword) { this.TokeniseWords(text); // writes to wordsCache wordArray = wordsCache; } else wordArray = text; var cur_line = ""; var prev_line; var line_width; var i; var lineIndex = 0; var line; for (i = 0; i < wordArray.length; i++) { if (wordArray[i] === "\n") { if (lineIndex >= lines.length) lines.push(allocLine()); cur_line = trimSingleSpaceRight(cur_line); // for correct center/right alignment line = lines[lineIndex]; line.text = cur_line; line.width = ctx.measureText(cur_line).width; lineIndex++; cur_line = ""; continue; } prev_line = cur_line; cur_line += wordArray[i]; line_width = ctx.measureText(cur_line).width; if (line_width >= width) { if (lineIndex >= lines.length) lines.push(allocLine()); prev_line = trimSingleSpaceRight(prev_line); line = lines[lineIndex]; line.text = prev_line; line.width = ctx.measureText(prev_line).width; lineIndex++; cur_line = wordArray[i]; if (!wrapbyword && cur_line === " ") cur_line = ""; } } if (cur_line.length) { if (lineIndex >= lines.length) lines.push(allocLine()); cur_line = trimSingleSpaceRight(cur_line); line = lines[lineIndex]; line.text = cur_line; line.width = ctx.measureText(cur_line).width; lineIndex++; } for (i = lineIndex; i < lines.length; i++) freeLine(lines[i]); lines.length = lineIndex; }; function Cnds() {}; Cnds.prototype.CompareText = function(text_to_compare, case_sensitive) { if (case_sensitive) return this.text == text_to_compare; else return cr.equals_nocase(this.text, text_to_compare); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetText = function(param) { if (cr.is_number(param) && param < 1e9) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_set = param.toString(); if (this.text !== text_to_set) { this.text = text_to_set; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.AppendText = function(param) { if (cr.is_number(param)) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_append = param.toString(); if (text_to_append) // not empty { this.text += text_to_append; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetFontFace = function(face_, style_) { var newstyle = ""; switch (style_) { case 1: newstyle = "bold"; break; case 2: newstyle = "italic"; break; case 3: newstyle = "bold italic"; break; } if (face_ === this.facename && newstyle === this.fontstyle) return; // no change this.facename = face_; this.fontstyle = newstyle; this.updateFont(); }; Acts.prototype.SetFontSize = function(size_) { if (this.ptSize === size_) return; this.ptSize = size_; this.pxHeight = Math.ceil((this.ptSize / 72.0) * 96.0) + 4; // assume 96dpi... this.updateFont(); }; Acts.prototype.SetFontColor = function(rgb) { var newcolor = "rgb(" + cr.GetRValue(rgb).toString() + "," + cr.GetGValue(rgb).toString() + "," + cr.GetBValue(rgb).toString() + ")"; if (newcolor === this.color) return; this.color = newcolor; this.need_text_redraw = true; this.runtime.redraw = true; }; Acts.prototype.SetWebFont = function(familyname_, cssurl_) { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Text plugin: 'Set web font' not supported on this platform - the action has been ignored"); return; // DC todo } var self = this; var refreshFunc = (function() { self.runtime.redraw = true; self.text_changed = true; }); if (requestedWebFonts.hasOwnProperty(cssurl_)) { var newfacename = "'" + familyname_ + "'"; if (this.facename === newfacename) return; // no change this.facename = newfacename; this.updateFont(); for (var i = 1; i < 10; i++) { setTimeout(refreshFunc, i * 100); setTimeout(refreshFunc, i * 1000); } return; } var wf = document.createElement("link"); wf.href = cssurl_; wf.rel = "stylesheet"; wf.type = "text/css"; wf.onload = refreshFunc; document.getElementsByTagName('head')[0].appendChild(wf); requestedWebFonts[cssurl_] = true; this.facename = "'" + familyname_ + "'"; this.updateFont(); for (var i = 1; i < 10; i++) { setTimeout(refreshFunc, i * 100); setTimeout(refreshFunc, i * 1000); }; }; Acts.prototype.SetEffect = function(effect) { this.blend_mode = effect; this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.Text = function(ret) { ret.set_string(this.text); }; Exps.prototype.FaceName = function(ret) { ret.set_string(this.facename); }; Exps.prototype.FaceSize = function(ret) { ret.set_int(this.ptSize); }; Exps.prototype.TextWidth = function(ret) { var w = 0; var i, len, x; for (i = 0, len = this.lines.length; i < len; i++) { x = this.lines[i].width; if (w < x) w = x; } ret.set_int(w); }; Exps.prototype.TextHeight = function(ret) { ret.set_int(this.lines.length * (this.pxHeight + this.line_height_offset) - this.line_height_offset); }; pluginProto.exps = new Exps(); }());;; cr.plugins_.Touch = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.Touch.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() {}; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.touches = []; this.mouseDown = false; }; var instanceProto = pluginProto.Instance.prototype; var dummyoffset = { left: 0, top: 0 }; instanceProto.findTouch = function(id) { var i, len; for (i = 0, len = this.touches.length; i < len; i++) { if (this.touches[i]["id"] === id) return i; } return -1; }; var appmobi_accx = 0; var appmobi_accy = 0; var appmobi_accz = 0; function AppMobiGetAcceleration(evt) { appmobi_accx = evt.x; appmobi_accy = evt.y; appmobi_accz = evt.z; }; var pg_accx = 0; var pg_accy = 0; var pg_accz = 0; function PhoneGapGetAcceleration(evt) { pg_accx = evt.x; pg_accy = evt.y; pg_accz = evt.z; }; var theInstance = null; var touchinfo_cache = []; function AllocTouchInfo(x, y, id, index) { var ret; if (touchinfo_cache.length) ret = touchinfo_cache.pop(); else ret = new TouchInfo(); ret.init(x, y, id, index); return ret; }; function ReleaseTouchInfo(ti) { if (touchinfo_cache.length < 100) touchinfo_cache.push(ti); }; var GESTURE_HOLD_THRESHOLD = 15; // max px motion for hold gesture to register var GESTURE_HOLD_TIMEOUT = 500; // time for hold gesture to register var GESTURE_TAP_TIMEOUT = 333; // time for tap gesture to register var GESTURE_DOUBLETAP_THRESHOLD = 25; // max distance apart for taps to be function TouchInfo() { this.starttime = 0; this.time = 0; this.lasttime = 0; this.startx = 0; this.starty = 0; this.x = 0; this.y = 0; this.lastx = 0; this.lasty = 0; this["id"] = 0; this.startindex = 0; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.init = function(x, y, id, index) { var nowtime = cr.performance_now(); this.time = nowtime; this.lasttime = nowtime; this.starttime = nowtime; this.startx = x; this.starty = y; this.x = x; this.y = y; this.lastx = x; this.lasty = y; this.width = 0; this.height = 0; this.pressure = 0; this["id"] = id; this.startindex = index; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.update = function(nowtime, x, y, width, height, pressure) { this.lasttime = this.time; this.time = nowtime; this.lastx = this.x; this.lasty = this.y; this.x = x; this.y = y; this.width = width; this.height = height; this.pressure = pressure; if (!this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) >= GESTURE_HOLD_THRESHOLD) { this.tooFarForHold = true; } }; TouchInfo.prototype.maybeTriggerHold = function(inst, index) { if (this.triggeredHold) return; // already triggered this gesture var nowtime = cr.performance_now(); if (nowtime - this.starttime >= GESTURE_HOLD_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { this.triggeredHold = true; inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGestureObject, inst); inst.getTouchIndex = 0; } }; var lastTapX = -1000; var lastTapY = -1000; var lastTapTime = -10000; TouchInfo.prototype.maybeTriggerTap = function(inst, index) { if (this.triggeredHold) return; var nowtime = cr.performance_now(); if (nowtime - this.starttime <= GESTURE_TAP_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; if ((nowtime - lastTapTime <= GESTURE_TAP_TIMEOUT * 2) && cr.distanceTo(lastTapX, lastTapY, this.x, this.y) < GESTURE_DOUBLETAP_THRESHOLD) { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGestureObject, inst); lastTapX = -1000; lastTapY = -1000; lastTapTime = -10000; } else { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGestureObject, inst); lastTapX = this.x; lastTapY = this.y; lastTapTime = nowtime; } inst.getTouchIndex = 0; } }; instanceProto.onCreate = function() { theInstance = this; this.isWindows8 = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.orient_alpha = 0; this.orient_beta = 0; this.orient_gamma = 0; this.acc_g_x = 0; this.acc_g_y = 0; this.acc_g_z = 0; this.acc_x = 0; this.acc_y = 0; this.acc_z = 0; this.curTouchX = 0; this.curTouchY = 0; this.trigger_index = 0; this.trigger_id = 0; this.trigger_permission = 0; this.getTouchIndex = 0; this.useMouseInput = (this.properties[0] !== 0); var elem = (this.runtime.fullscreen_mode > 0) ? document : this.runtime.canvas; var elem2 = document; if (this.runtime.isDirectCanvas) elem2 = elem = window["Canvas"]; else if (this.runtime.isCocoonJs) elem2 = elem = window; var self = this; if (typeof PointerEvent !== "undefined") { elem.addEventListener("pointerdown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("pointermove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("pointerup", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("pointercancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); this.runtime.canvas.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); document.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); } } else if (window.navigator["msPointerEnabled"]) { elem.addEventListener("MSPointerDown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("MSPointerMove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("MSPointerUp", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("MSPointerCancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); } } else { elem.addEventListener("touchstart", function(info) { self.onTouchStart(info); }, false ); elem.addEventListener("touchmove", function(info) { self.onTouchMove(info); }, false ); elem2.addEventListener("touchend", function(info) { self.onTouchEnd(info, false); }, false ); elem2.addEventListener("touchcancel", function(info) { self.onTouchEnd(info, true); }, false ); } if (this.isWindows8) { var win8accelerometerFn = function(e) { var reading = e["reading"]; self.acc_x = reading["accelerationX"]; self.acc_y = reading["accelerationY"]; self.acc_z = reading["accelerationZ"]; }; var win8inclinometerFn = function(e) { var reading = e["reading"]; self.orient_alpha = reading["yawDegrees"]; self.orient_beta = reading["pitchDegrees"]; self.orient_gamma = reading["rollDegrees"]; }; var accelerometer = Windows["Devices"]["Sensors"]["Accelerometer"]["getDefault"](); if (accelerometer) { accelerometer["reportInterval"] = Math.max(accelerometer["minimumReportInterval"], 16); accelerometer.addEventListener("readingchanged", win8accelerometerFn); } var inclinometer = Windows["Devices"]["Sensors"]["Inclinometer"]["getDefault"](); if (inclinometer) { inclinometer["reportInterval"] = Math.max(inclinometer["minimumReportInterval"], 16); inclinometer.addEventListener("readingchanged", win8inclinometerFn); } document.addEventListener("visibilitychange", function(e) { if (document["hidden"] || document["msHidden"]) { if (accelerometer) accelerometer.removeEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.removeEventListener("readingchanged", win8inclinometerFn); } else { if (accelerometer) accelerometer.addEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.addEventListener("readingchanged", win8inclinometerFn); } }, false); } else { window.addEventListener("deviceorientation", function(eventData) { self.orient_alpha = eventData["alpha"] || 0; self.orient_beta = eventData["beta"] || 0; self.orient_gamma = eventData["gamma"] || 0; }, false); window.addEventListener("devicemotion", function(eventData) { if (eventData["accelerationIncludingGravity"]) { self.acc_g_x = eventData["accelerationIncludingGravity"]["x"] || 0; self.acc_g_y = eventData["accelerationIncludingGravity"]["y"] || 0; self.acc_g_z = eventData["accelerationIncludingGravity"]["z"] || 0; } if (eventData["acceleration"]) { self.acc_x = eventData["acceleration"]["x"] || 0; self.acc_y = eventData["acceleration"]["y"] || 0; self.acc_z = eventData["acceleration"]["z"] || 0; } }, false); } if (this.useMouseInput && !this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); } if (!this.runtime.isiOS && this.runtime.isCordova && navigator["accelerometer"] && navigator["accelerometer"]["watchAcceleration"]) { navigator["accelerometer"]["watchAcceleration"](PhoneGapGetAcceleration, null, { "frequency": 40 }); } this.runtime.tick2Me(this); }; instanceProto.onPointerMove = function(info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault) info.preventDefault(); var i = this.findTouch(info["pointerId"]); var nowtime = cr.performance_now(); if (i >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var t = this.touches[i]; if (nowtime - t.time < 2) return; t.update(nowtime, info.pageX - offset.left, info.pageY - offset.top, info.width || 0, info.height || 0, info.pressure || 0); } }; instanceProto.onPointerStart = function(info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var touchx = info.pageX - offset.left; var touchy = info.pageY - offset.top; var nowtime = cr.performance_now(); this.trigger_index = this.touches.length; this.trigger_id = info["pointerId"]; this.touches.push(AllocTouchInfo(touchx, touchy, info["pointerId"], this.trigger_index)); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onPointerEnd = function(info, isCancel) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var i = this.findTouch(info["pointerId"]); this.trigger_index = (i >= 0 ? this.touches[i].startindex : -1); this.trigger_id = (i >= 0 ? this.touches[i]["id"] : -1); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (i >= 0) { if (!isCancel) this.touches[i].maybeTriggerTap(this, i); ReleaseTouchInfo(this.touches[i]); this.touches.splice(i, 1); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchMove = function(info) { if (info.preventDefault) info.preventDefault(); var nowtime = cr.performance_now(); var i, len, t, u; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; var j = this.findTouch(t["identifier"]); if (j >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); u = this.touches[j]; if (nowtime - u.time < 2) continue; var touchWidth = (t.radiusX || t.webkitRadiusX || t.mozRadiusX || t.msRadiusX || 0) * 2; var touchHeight = (t.radiusY || t.webkitRadiusY || t.mozRadiusY || t.msRadiusY || 0) * 2; var touchForce = t.force || t.webkitForce || t.mozForce || t.msForce || 0; u.update(nowtime, t.pageX - offset.left, t.pageY - offset.top, touchWidth, touchHeight, touchForce); } } }; instanceProto.onTouchStart = function(info) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var nowtime = cr.performance_now(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j !== -1) continue; var touchx = t.pageX - offset.left; var touchy = t.pageY - offset.top; this.trigger_index = this.touches.length; this.trigger_id = t["identifier"]; this.touches.push(AllocTouchInfo(touchx, touchy, t["identifier"], this.trigger_index)); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchEnd = function(info, isCancel) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j >= 0) { this.trigger_index = this.touches[j].startindex; this.trigger_id = this.touches[j]["id"]; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (!isCancel) this.touches[j].maybeTriggerTap(this, j); ReleaseTouchInfo(this.touches[j]); this.touches.splice(j, 1); } } this.runtime.isInUserInputEvent = false; }; instanceProto.getAlpha = function() { if (this.runtime.isCordova && this.orient_alpha === 0 && pg_accz !== 0) return pg_accz * 90; else return this.orient_alpha; }; instanceProto.getBeta = function() { if (this.runtime.isCordova && this.orient_beta === 0 && pg_accy !== 0) return pg_accy * 90; else return this.orient_beta; }; instanceProto.getGamma = function() { if (this.runtime.isCordova && this.orient_gamma === 0 && pg_accx !== 0) return pg_accx * 90; else return this.orient_gamma; }; var noop_func = function() {}; function isCompatibilityMouseEvent(e) { return (e["sourceCapabilities"] && e["sourceCapabilities"]["firesTouchEvents"]) || (e.originalEvent && e.originalEvent["sourceCapabilities"] && e.originalEvent["sourceCapabilities"]["firesTouchEvents"]); }; instanceProto.onMouseDown = function(info) { if (isCompatibilityMouseEvent(info)) return; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchStart(fakeinfo); this.mouseDown = true; }; instanceProto.onMouseMove = function(info) { if (!this.mouseDown) return; if (isCompatibilityMouseEvent(info)) return; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchMove(fakeinfo); }; instanceProto.onMouseUp = function(info) { if (info.preventDefault && this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; if (isCompatibilityMouseEvent(info)) return; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchEnd(fakeinfo); this.mouseDown = false; }; instanceProto.tick2 = function() { var i, len, t; var nowtime = cr.performance_now(); for (i = 0, len = this.touches.length; i < len; ++i) { t = this.touches[i]; if (t.time <= nowtime - 50) t.lasttime = nowtime; t.maybeTriggerHold(this, i); } }; function Cnds() {}; Cnds.prototype.OnTouchStart = function() { return true; }; Cnds.prototype.OnTouchEnd = function() { return true; }; Cnds.prototype.IsInTouch = function() { return this.touches.length; }; Cnds.prototype.OnTouchObject = function(type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; var touching = []; Cnds.prototype.IsTouchingObject = function(type) { if (!type) return false; var sol = type.getCurrentSol(); var instances = sol.getObjects(); var px, py; var i, leni, j, lenj; for (i = 0, leni = instances.length; i < leni; i++) { var inst = instances[i]; inst.update_bbox(); for (j = 0, lenj = this.touches.length; j < lenj; j++) { var touch = this.touches[j]; px = inst.layer.canvasToLayer(touch.x, touch.y, true); py = inst.layer.canvasToLayer(touch.x, touch.y, false); if (inst.contains_pt(px, py)) { touching.push(inst); break; } } } if (touching.length) { sol.select_all = false; cr.shallowAssignArray(sol.instances, touching); type.applySolToContainer(); cr.clearArray(touching); return true; } else return false; }; Cnds.prototype.CompareTouchSpeed = function(index, cmp, s) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) return false; var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; var speed = 0; if (timediff > 0) speed = dist / timediff; return cr.do_cmp(speed, cmp, s); }; Cnds.prototype.OrientationSupported = function() { return typeof window["DeviceOrientationEvent"] !== "undefined"; }; Cnds.prototype.MotionSupported = function() { return typeof window["DeviceMotionEvent"] !== "undefined"; }; Cnds.prototype.CompareOrientation = function(orientation_, cmp_, angle_) { var v = 0; if (orientation_ === 0) v = this.getAlpha(); else if (orientation_ === 1) v = this.getBeta(); else v = this.getGamma(); return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.CompareAcceleration = function(acceleration_, cmp_, angle_) { var v = 0; if (acceleration_ === 0) v = this.acc_g_x; else if (acceleration_ === 1) v = this.acc_g_y; else if (acceleration_ === 2) v = this.acc_g_z; else if (acceleration_ === 3) v = this.acc_x; else if (acceleration_ === 4) v = this.acc_y; else if (acceleration_ === 5) v = this.acc_z; return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.OnNthTouchStart = function(touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.OnNthTouchEnd = function(touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.HasNthTouch = function(touch_) { touch_ = Math.floor(touch_); return this.touches.length >= touch_ + 1; }; Cnds.prototype.OnHoldGesture = function() { return true; }; Cnds.prototype.OnTapGesture = function() { return true; }; Cnds.prototype.OnDoubleTapGesture = function() { return true; }; Cnds.prototype.OnHoldGestureObject = function(type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnTapGestureObject = function(type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnDoubleTapGestureObject = function(type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnPermissionGranted = function(type) { return this.trigger_permission === type; }; Cnds.prototype.OnPermissionDenied = function(type) { return this.trigger_permission === type; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.RequestPermission = function(type) { var self = this; var promise = Promise.resolve(true); if (type === 0) // orientation { if (window["DeviceOrientationEvent"] && window["DeviceOrientationEvent"]["requestPermission"]) { promise = window["DeviceOrientationEvent"]["requestPermission"]() .then(function(state) { return state === "granted"; }); } } else // motion { if (window["DeviceMotionEvent"] && window["DeviceMotionEvent"]["requestPermission"]) { promise = window["DeviceMotionEvent"]["requestPermission"]() .then(function(state) { return state === "granted"; }); } } promise.then(function(result) { self.trigger_permission = type; if (result) self.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnPermissionGranted, self); else self.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnPermissionDenied, self); }); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.TouchCount = function(ret) { ret.set_int(this.touches.length); }; Exps.prototype.X = function(ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XAt = function(ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XForID = function(ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); else ret.set_float(0); } }; Exps.prototype.Y = function(ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YAt = function(ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YForID = function(ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = 1; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = 0; ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function(ret) { if (this.touches.length) ret.set_float(this.touches[0].x); else ret.set_float(0); }; Exps.prototype.AbsoluteXAt = function(ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].x); }; Exps.prototype.AbsoluteXForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.x); }; Exps.prototype.AbsoluteY = function(ret) { if (this.touches.length) ret.set_float(this.touches[0].y); else ret.set_float(0); }; Exps.prototype.AbsoluteYAt = function(ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].y); }; Exps.prototype.AbsoluteYForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.y); }; Exps.prototype.SpeedAt = function(ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; if (timediff <= 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.SpeedForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var dist = cr.distanceTo(touch.x, touch.y, touch.lastx, touch.lasty); var timediff = (touch.time - touch.lasttime) / 1000; if (timediff <= 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.AngleAt = function(ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(t.lastx, t.lasty, t.x, t.y))); }; Exps.prototype.AngleForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(touch.lastx, touch.lasty, touch.x, touch.y))); }; Exps.prototype.Alpha = function(ret) { ret.set_float(this.getAlpha()); }; Exps.prototype.Beta = function(ret) { ret.set_float(this.getBeta()); }; Exps.prototype.Gamma = function(ret) { ret.set_float(this.getGamma()); }; Exps.prototype.AccelerationXWithG = function(ret) { ret.set_float(this.acc_g_x); }; Exps.prototype.AccelerationYWithG = function(ret) { ret.set_float(this.acc_g_y); }; Exps.prototype.AccelerationZWithG = function(ret) { ret.set_float(this.acc_g_z); }; Exps.prototype.AccelerationX = function(ret) { ret.set_float(this.acc_x); }; Exps.prototype.AccelerationY = function(ret) { ret.set_float(this.acc_y); }; Exps.prototype.AccelerationZ = function(ret) { ret.set_float(this.acc_z); }; Exps.prototype.TouchIndex = function(ret) { ret.set_int(this.trigger_index); }; Exps.prototype.TouchID = function(ret) { ret.set_float(this.trigger_id); }; Exps.prototype.WidthForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.width); }; Exps.prototype.HeightForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.height); }; Exps.prototype.PressureForID = function(ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.pressure); }; pluginProto.exps = new Exps(); }());;; cr.behaviors.Bullet = function(runtime) { this.runtime = runtime; }; (function() { var behaviorProto = cr.behaviors.Bullet.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() {}; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { var speed = this.properties[0]; this.acc = this.properties[1]; this.g = this.properties[2]; this.bounceOffSolid = (this.properties[3] !== 0); this.setAngle = (this.properties[4] !== 0); this.dx = Math.cos(this.inst.angle) * speed; this.dy = Math.sin(this.inst.angle) * speed; this.lastx = this.inst.x; this.lasty = this.inst.y; this.lastKnownAngle = this.inst.angle; this.travelled = 0; this.enabled = (this.properties[5] !== 0); }; behinstProto.saveToJSON = function() { return { "acc": this.acc, "g": this.g, "dx": this.dx, "dy": this.dy, "lx": this.lastx, "ly": this.lasty, "lka": this.lastKnownAngle, "t": this.travelled, "e": this.enabled }; }; behinstProto.loadFromJSON = function(o) { this.acc = o["acc"]; this.g = o["g"]; this.dx = o["dx"]; this.dy = o["dy"]; this.lastx = o["lx"]; this.lasty = o["ly"]; this.lastKnownAngle = o["lka"]; this.travelled = o["t"]; this.enabled = o["e"]; }; behinstProto.tick = function() { if (!this.enabled) return; var dt = this.runtime.getDt(this.inst); var s, a; var bounceSolid, bounceAngle; if (this.inst.angle !== this.lastKnownAngle) { if (this.setAngle) { s = cr.distanceTo(0, 0, this.dx, this.dy); this.dx = Math.cos(this.inst.angle) * s; this.dy = Math.sin(this.inst.angle) * s; } this.lastKnownAngle = this.inst.angle; } if (this.acc !== 0) { s = cr.distanceTo(0, 0, this.dx, this.dy); if (this.dx === 0 && this.dy === 0) a = this.inst.angle; else a = cr.angleTo(0, 0, this.dx, this.dy); s += this.acc * dt; if (s < 0) s = 0; this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; } if (this.g !== 0) this.dy += this.g * dt; this.lastx = this.inst.x; this.lasty = this.inst.y; if (this.dx !== 0 || this.dy !== 0) { this.inst.x += this.dx * dt; this.inst.y += this.dy * dt; this.travelled += cr.distanceTo(0, 0, this.dx * dt, this.dy * dt) if (this.setAngle) { this.inst.angle = cr.angleTo(0, 0, this.dx, this.dy); this.inst.set_bbox_changed(); this.lastKnownAngle = this.inst.angle; } this.inst.set_bbox_changed(); if (this.bounceOffSolid) { bounceSolid = this.runtime.testOverlapSolid(this.inst); if (bounceSolid) { this.runtime.registerCollision(this.inst, bounceSolid); s = cr.distanceTo(0, 0, this.dx, this.dy); bounceAngle = this.runtime.calculateSolidBounceAngle(this.inst, this.lastx, this.lasty); this.dx = Math.cos(bounceAngle) * s; this.dy = Math.sin(bounceAngle) * s; this.inst.x += this.dx * dt; // move out for one tick since the object can't have spent a tick in the solid this.inst.y += this.dy * dt; this.inst.set_bbox_changed(); if (this.setAngle) { this.inst.angle = bounceAngle; this.lastKnownAngle = bounceAngle; this.inst.set_bbox_changed(); } if (!this.runtime.pushOutSolid(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30))) this.runtime.pushOutSolidNearest(this.inst, 100); } } } }; function Cnds() {}; Cnds.prototype.CompareSpeed = function(cmp, s) { return cr.do_cmp(cr.distanceTo(0, 0, this.dx, this.dy), cmp, s); }; Cnds.prototype.CompareTravelled = function(cmp, d) { return cr.do_cmp(this.travelled, cmp, d); }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function(s) { var a = cr.angleTo(0, 0, this.dx, this.dy); this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; }; Acts.prototype.SetAcceleration = function(a) { this.acc = a; }; Acts.prototype.SetGravity = function(g) { this.g = g; }; Acts.prototype.SetAngleOfMotion = function(a) { a = cr.to_radians(a); var s = cr.distanceTo(0, 0, this.dx, this.dy) this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; }; Acts.prototype.Bounce = function(objtype) { if (!objtype) return; var otherinst = objtype.getFirstPicked(this.inst); if (!otherinst) return; var dt = this.runtime.getDt(this.inst); var s = cr.distanceTo(0, 0, this.dx, this.dy); var bounceAngle = this.runtime.calculateSolidBounceAngle(this.inst, this.lastx, this.lasty, otherinst); this.dx = Math.cos(bounceAngle) * s; this.dy = Math.sin(bounceAngle) * s; this.inst.x += this.dx * dt; // move out for one tick since the object can't have spent a tick in the solid this.inst.y += this.dy * dt; this.inst.set_bbox_changed(); if (this.setAngle) { this.inst.angle = bounceAngle; this.lastKnownAngle = bounceAngle; this.inst.set_bbox_changed(); } if (s !== 0) // prevent divide-by-zero { if (this.bounceOffSolid) { if (!this.runtime.pushOutSolid(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30))) this.runtime.pushOutSolidNearest(this.inst, 100); } else { this.runtime.pushOut(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30), otherinst) } } }; Acts.prototype.SetDistanceTravelled = function(d) { this.travelled = d; }; Acts.prototype.SetEnabled = function(en) { this.enabled = (en === 1); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function(ret) { var s = cr.distanceTo(0, 0, this.dx, this.dy); s = cr.round6dp(s); ret.set_float(s); }; Exps.prototype.Acceleration = function(ret) { ret.set_float(this.acc); }; Exps.prototype.AngleOfMotion = function(ret) { ret.set_float(cr.to_degrees(cr.angleTo(0, 0, this.dx, this.dy))); }; Exps.prototype.DistanceTravelled = function(ret) { ret.set_float(this.travelled); }; Exps.prototype.Gravity = function(ret) { ret.set_float(this.g); }; behaviorProto.exps = new Exps(); }());;; cr.behaviors.Fade = function(runtime) { this.runtime = runtime; }; (function() { var behaviorProto = cr.behaviors.Fade.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() {}; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.activeAtStart = this.properties[0] === 1; this.setMaxOpacity = false; // used to retrieve maxOpacity once in first 'Start fade' action if initially inactive this.fadeInTime = this.properties[1]; this.waitTime = this.properties[2]; this.fadeOutTime = this.properties[3]; this.destroy = this.properties[4]; // 0 = no, 1 = after fade out this.stage = this.activeAtStart ? 0 : 3; // 0 = fade in, 1 = wait, 2 = fade out, 3 = done if (this.recycled) this.stageTime.reset(); else this.stageTime = new cr.KahanAdder(); this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); if (this.activeAtStart) { if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } } }; behinstProto.saveToJSON = function() { return { "fit": this.fadeInTime, "wt": this.waitTime, "fot": this.fadeOutTime, "s": this.stage, "st": this.stageTime.sum, "mo": this.maxOpacity, }; }; behinstProto.loadFromJSON = function(o) { this.fadeInTime = o["fit"]; this.waitTime = o["wt"]; this.fadeOutTime = o["fot"]; this.stage = o["s"]; this.stageTime.reset(); this.stageTime.sum = o["st"]; this.maxOpacity = o["mo"]; }; behinstProto.tick = function() { this.stageTime.add(this.runtime.getDt(this.inst)); if (this.stage === 0) { this.inst.opacity = (this.stageTime.sum / this.fadeInTime) * this.maxOpacity; this.runtime.redraw = true; if (this.inst.opacity >= this.maxOpacity) { this.inst.opacity = this.maxOpacity; this.stage = 1; // wait stage this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeInEnd, this.inst); } } if (this.stage === 1) { if (this.stageTime.sum >= this.waitTime) { this.stage = 2; // fade out stage this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnWaitEnd, this.inst); } } if (this.stage === 2) { if (this.fadeOutTime !== 0) { this.inst.opacity = this.maxOpacity - ((this.stageTime.sum / this.fadeOutTime) * this.maxOpacity); this.runtime.redraw = true; if (this.inst.opacity < 0) { this.inst.opacity = 0; this.stage = 3; // done this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeOutEnd, this.inst); if (this.destroy === 1) this.runtime.DestroyInstance(this.inst); } } } }; behinstProto.doStart = function() { this.stage = 0; this.stageTime.reset(); if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } }; function Cnds() {}; Cnds.prototype.OnFadeOutEnd = function() { return true; }; Cnds.prototype.OnFadeInEnd = function() { return true; }; Cnds.prototype.OnWaitEnd = function() { return true; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StartFade = function() { if (!this.activeAtStart && !this.setMaxOpacity) { this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); this.setMaxOpacity = true; } if (this.stage === 3) this.doStart(); }; Acts.prototype.RestartFade = function() { this.doStart(); }; Acts.prototype.SetFadeInTime = function(t) { if (t < 0) t = 0; this.fadeInTime = t; }; Acts.prototype.SetWaitTime = function(t) { if (t < 0) t = 0; this.waitTime = t; }; Acts.prototype.SetFadeOutTime = function(t) { if (t < 0) t = 0; this.fadeOutTime = t; }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.FadeInTime = function(ret) { ret.set_float(this.fadeInTime); }; Exps.prototype.WaitTime = function(ret) { ret.set_float(this.waitTime); }; Exps.prototype.FadeOutTime = function(ret) { ret.set_float(this.fadeOutTime); }; behaviorProto.exps = new Exps(); }());;; cr.behaviors.Rotate = function(runtime) { this.runtime = runtime; }; (function() { var behaviorProto = cr.behaviors.Rotate.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() {}; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.speed = cr.to_radians(this.properties[0]); this.acc = cr.to_radians(this.properties[1]); }; behinstProto.saveToJSON = function() { return { "speed": this.speed, "acc": this.acc }; }; behinstProto.loadFromJSON = function(o) { this.speed = o["speed"]; this.acc = o["acc"]; }; behinstProto.tick = function() { var dt = this.runtime.getDt(this.inst); if (dt === 0) return; if (this.acc !== 0) this.speed += this.acc * dt; if (this.speed !== 0) { this.inst.angle = cr.clamp_angle(this.inst.angle + this.speed * dt); this.inst.set_bbox_changed(); } }; function Cnds() {}; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function(s) { this.speed = cr.to_radians(s); }; Acts.prototype.SetAcceleration = function(a) { this.acc = cr.to_radians(a); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function(ret) { ret.set_float(cr.to_degrees(this.speed)); }; Exps.prototype.Acceleration = function(ret) { ret.set_float(cr.to_degrees(this.acc)); }; behaviorProto.exps = new Exps(); }());;; cr.behaviors.Sin = function(runtime) { this.runtime = runtime; }; (function() { var behaviorProto = cr.behaviors.Sin.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() {}; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; this.i = 0; // period offset (radians) }; var behinstProto = behaviorProto.Instance.prototype; var _2pi = 2 * Math.PI; var _pi_2 = Math.PI / 2; var _3pi_2 = (3 * Math.PI) / 2; behinstProto.onCreate = function() { this.active = (this.properties[0] === 1); this.movement = this.properties[1]; // 0=Horizontal|1=Vertical|2=Size|3=Width|4=Height|5=Angle|6=Opacity|7=Value only this.wave = this.properties[2]; // 0=Sine|1=Triangle|2=Sawtooth|3=Reverse sawtooth|4=Square this.period = this.properties[3]; this.period += Math.random() * this.properties[4]; // period random if (this.period === 0) this.i = 0; else { this.i = (this.properties[5] / this.period) * _2pi; // period offset this.i += ((Math.random() * this.properties[6]) / this.period) * _2pi; // period offset random } this.mag = this.properties[7]; // magnitude this.mag += Math.random() * this.properties[8]; // magnitude random this.initialValue = 0; this.initialValue2 = 0; this.ratio = 0; if (this.movement === 5) // angle this.mag = cr.to_radians(this.mag); this.init(); }; behinstProto.saveToJSON = function() { return { "i": this.i, "a": this.active, "mv": this.movement, "w": this.wave, "p": this.period, "mag": this.mag, "iv": this.initialValue, "iv2": this.initialValue2, "r": this.ratio, "lkv": this.lastKnownValue, "lkv2": this.lastKnownValue2 }; }; behinstProto.loadFromJSON = function(o) { this.i = o["i"]; this.active = o["a"]; this.movement = o["mv"]; this.wave = o["w"]; this.period = o["p"]; this.mag = o["mag"]; this.initialValue = o["iv"]; this.initialValue2 = o["iv2"] || 0; this.ratio = o["r"]; this.lastKnownValue = o["lkv"]; this.lastKnownValue2 = o["lkv2"] || 0; }; behinstProto.init = function() { switch (this.movement) { case 0: // horizontal this.initialValue = this.inst.x; break; case 1: // vertical this.initialValue = this.inst.y; break; case 2: // size this.initialValue = this.inst.width; this.ratio = this.inst.height / this.inst.width; break; case 3: // width this.initialValue = this.inst.width; break; case 4: // height this.initialValue = this.inst.height; break; case 5: // angle this.initialValue = this.inst.angle; break; case 6: // opacity this.initialValue = this.inst.opacity; break; case 7: this.initialValue = 0; break; case 8: // forwards/backwards this.initialValue = this.inst.x; this.initialValue2 = this.inst.y; break; default: ; } this.lastKnownValue = this.initialValue; this.lastKnownValue2 = this.initialValue2; }; behinstProto.waveFunc = function(x) { x = x % _2pi; switch (this.wave) { case 0: // sine return Math.sin(x); case 1: // triangle if (x <= _pi_2) return x / _pi_2; else if (x <= _3pi_2) return 1 - (2 * (x - _pi_2) / Math.PI); else return (x - _3pi_2) / _pi_2 - 1; case 2: // sawtooth return 2 * x / _2pi - 1; case 3: // reverse sawtooth return -2 * x / _2pi + 1; case 4: // square return x < Math.PI ? -1 : 1; }; return 0; }; behinstProto.tick = function() { var dt = this.runtime.getDt(this.inst); if (!this.active || dt === 0) return; if (this.period === 0) this.i = 0; else { this.i += (dt / this.period) * _2pi; this.i = this.i % _2pi; } this.updateFromPhase(); }; behinstProto.updateFromPhase = function() { switch (this.movement) { case 0: // horizontal if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; this.inst.x = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; break; case 1: // vertical if (this.inst.y !== this.lastKnownValue) this.initialValue += this.inst.y - this.lastKnownValue; this.inst.y = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.y; break; case 2: // size this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; this.inst.height = this.inst.width * this.ratio; break; case 3: // width this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 4: // height this.inst.height = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 5: // angle if (this.inst.angle !== this.lastKnownValue) this.initialValue = cr.clamp_angle(this.initialValue + (this.inst.angle - this.lastKnownValue)); this.inst.angle = cr.clamp_angle(this.initialValue + this.waveFunc(this.i) * this.mag); this.lastKnownValue = this.inst.angle; break; case 6: // opacity this.inst.opacity = this.initialValue + (this.waveFunc(this.i) * this.mag) / 100; if (this.inst.opacity < 0) this.inst.opacity = 0; else if (this.inst.opacity > 1) this.inst.opacity = 1; break; case 8: // forwards/backwards if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; if (this.inst.y !== this.lastKnownValue2) this.initialValue2 += this.inst.y - this.lastKnownValue2; this.inst.x = this.initialValue + Math.cos(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.inst.y = this.initialValue2 + Math.sin(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; this.lastKnownValue2 = this.inst.y; break; } this.inst.set_bbox_changed(); }; behinstProto.onSpriteFrameChanged = function(prev_frame, next_frame) { switch (this.movement) { case 2: // size this.initialValue *= (next_frame.width / prev_frame.width); this.ratio = next_frame.height / next_frame.width; break; case 3: // width this.initialValue *= (next_frame.width / prev_frame.width); break; case 4: // height this.initialValue *= (next_frame.height / prev_frame.height); break; } }; function Cnds() {}; Cnds.prototype.IsActive = function() { return this.active; }; Cnds.prototype.CompareMovement = function(m) { return this.movement === m; }; Cnds.prototype.ComparePeriod = function(cmp, v) { return cr.do_cmp(this.period, cmp, v); }; Cnds.prototype.CompareMagnitude = function(cmp, v) { if (this.movement === 5) return cr.do_cmp(this.mag, cmp, cr.to_radians(v)); else return cr.do_cmp(this.mag, cmp, v); }; Cnds.prototype.CompareWave = function(w) { return this.wave === w; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetActive = function(a) { this.active = (a === 1); }; Acts.prototype.SetPeriod = function(x) { this.period = x; }; Acts.prototype.SetMagnitude = function(x) { this.mag = x; if (this.movement === 5) // angle this.mag = cr.to_radians(this.mag); }; Acts.prototype.SetMovement = function(m) { if (this.movement === 5 && m !== 5) this.mag = cr.to_degrees(this.mag); this.movement = m; this.init(); }; Acts.prototype.SetWave = function(w) { this.wave = w; }; Acts.prototype.SetPhase = function(x) { this.i = (x * _2pi) % _2pi; this.updateFromPhase(); }; Acts.prototype.UpdateInitialState = function() { this.init(); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.CyclePosition = function(ret) { ret.set_float(this.i / _2pi); }; Exps.prototype.Period = function(ret) { ret.set_float(this.period); }; Exps.prototype.Magnitude = function(ret) { if (this.movement === 5) // angle ret.set_float(cr.to_degrees(this.mag)); else ret.set_float(this.mag); }; Exps.prototype.Value = function(ret) { ret.set_float(this.waveFunc(this.i) * this.mag); }; behaviorProto.exps = new Exps(); }());;; cr.behaviors.destroy = function(runtime) { this.runtime = runtime; }; (function() { var behaviorProto = cr.behaviors.destroy.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() {}; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() {}; behinstProto.tick = function() { this.inst.update_bbox(); var bbox = this.inst.bbox; var layout = this.inst.layer.layout; if (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height) this.runtime.DestroyInstance(this.inst); }; }()); cr.getObjectRefTable = function() { return [ cr.plugins_.Audio, cr.plugins_.Browser, cr.plugins_.LocalStorage, cr.plugins_.Sprite, cr.plugins_.Text, cr.plugins_.Touch, cr.plugins_.Particles, cr.behaviors.Rotate, cr.behaviors.Bullet, cr.behaviors.destroy, cr.behaviors.Sin, cr.behaviors.Fade, cr.system_object.prototype.cnds.OnLayoutStart, cr.system_object.prototype.acts.SetVar, cr.behaviors.Rotate.prototype.acts.SetSpeed, cr.system_object.prototype.acts.SubVar, cr.system_object.prototype.exps["int"], cr.system_object.prototype.exps.choose, cr.behaviors.Sin.prototype.acts.SetActive, cr.system_object.prototype.cnds.EveryTick, cr.plugins_.Text.prototype.acts.SetText, cr.plugins_.Touch.prototype.cnds.OnTouchStart, cr.plugins_.Sprite.prototype.acts.Spawn, cr.plugins_.Sprite.prototype.acts.SetAngle, cr.plugins_.Sprite.prototype.exps.Angle, cr.system_object.prototype.acts.AddVar, cr.plugins_.Audio.prototype.acts.Play, cr.system_object.prototype.acts.Wait, cr.system_object.prototype.cnds.CompareVar, cr.plugins_.Particles.prototype.cnds.OnCreated, cr.plugins_.Particles.prototype.acts.Destroy, cr.plugins_.Sprite.prototype.cnds.OnCollision, cr.plugins_.Sprite.prototype.acts.Destroy, cr.system_object.prototype.exps.random, cr.system_object.prototype.acts.CreateObject, cr.system_object.prototype.cnds.Every, cr.system_object.prototype.acts.GoToLayout, cr.plugins_.Audio.prototype.cnds.OnEnded, cr.plugins_.Audio.prototype.acts.Stop, cr.plugins_.Audio.prototype.acts.StopAll, cr.plugins_.Audio.prototype.acts.SetSilent, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, cr.plugins_.Touch.prototype.cnds.OnTouchObject, cr.plugins_.Sprite.prototype.cnds.CompareFrame, cr.system_object.prototype.cnds.Else, cr.plugins_.Browser.prototype.acts.Alert, cr.plugins_.Browser.prototype.acts.Close, cr.plugins_.Browser.prototype.cnds.OnBackButton, cr.plugins_.LocalStorage.prototype.cnds.OnItemExists, cr.plugins_.LocalStorage.prototype.acts.GetItem, cr.plugins_.LocalStorage.prototype.cnds.OnItemGet, cr.plugins_.LocalStorage.prototype.exps.ItemValue ]; }; home/jogoso94/public_html/jogos/zombie_shooter/c2runtime.js 0000644 00030014267 15043373177 0020121 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com var cr = {}; cr.plugins_ = {}; cr.behaviors = {}; if (typeof Object.getPrototypeOf !== "function") { if (typeof "test".__proto__ === "object") { Object.getPrototypeOf = function(object) { return object.__proto__; }; } else { Object.getPrototypeOf = function(object) { return object.constructor.prototype; }; } } (function(){ cr.logexport = function (msg) { if (window.console && window.console.log) window.console.log(msg); }; cr.seal = function(x) { return x; }; cr.freeze = function(x) { return x; }; cr.is_undefined = function (x) { return typeof x === "undefined"; }; cr.is_number = function (x) { return typeof x === "number"; }; cr.is_string = function (x) { return typeof x === "string"; }; cr.isPOT = function (x) { return x > 0 && ((x - 1) & x) === 0; }; cr.nextHighestPowerOfTwo = function(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } cr.abs = function (x) { return (x < 0 ? -x : x); }; cr.max = function (a, b) { return (a > b ? a : b); }; cr.min = function (a, b) { return (a < b ? a : b); }; cr.PI = Math.PI; cr.round = function (x) { return (x + 0.5) | 0; }; cr.floor = function (x) { if (x >= 0) return x | 0; else return (x | 0) - 1; // correctly round down when negative }; cr.ceil = function (x) { var f = x | 0; return (f === x ? f : f + 1); }; function Vector2(x, y) { this.x = x; this.y = y; cr.seal(this); }; Vector2.prototype.offset = function (px, py) { this.x += px; this.y += py; return this; }; Vector2.prototype.mul = function (px, py) { this.x *= px; this.y *= py; return this; }; cr.vector2 = Vector2; cr.segments_intersect = function(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { var max_ax, min_ax, max_ay, min_ay, max_bx, min_bx, max_by, min_by; if (a1x < a2x) { min_ax = a1x; max_ax = a2x; } else { min_ax = a2x; max_ax = a1x; } if (b1x < b2x) { min_bx = b1x; max_bx = b2x; } else { min_bx = b2x; max_bx = b1x; } if (max_ax < min_bx || min_ax > max_bx) return false; if (a1y < a2y) { min_ay = a1y; max_ay = a2y; } else { min_ay = a2y; max_ay = a1y; } if (b1y < b2y) { min_by = b1y; max_by = b2y; } else { min_by = b2y; max_by = b1y; } if (max_ay < min_by || min_ay > max_by) return false; var dpx = b1x - a1x + b2x - a2x; var dpy = b1y - a1y + b2y - a2y; var qax = a2x - a1x; var qay = a2y - a1y; var qbx = b2x - b1x; var qby = b2y - b1y; var d = cr.abs(qay * qbx - qby * qax); var la = qbx * dpy - qby * dpx; if (cr.abs(la) > d) return false; var lb = qax * dpy - qay * dpx; return cr.abs(lb) <= d; }; function Rect(left, top, right, bottom) { this.set(left, top, right, bottom); cr.seal(this); }; Rect.prototype.set = function (left, top, right, bottom) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; }; Rect.prototype.copy = function (r) { this.left = r.left; this.top = r.top; this.right = r.right; this.bottom = r.bottom; }; Rect.prototype.width = function () { return this.right - this.left; }; Rect.prototype.height = function () { return this.bottom - this.top; }; Rect.prototype.offset = function (px, py) { this.left += px; this.top += py; this.right += px; this.bottom += py; return this; }; Rect.prototype.normalize = function () { var temp = 0; if (this.left > this.right) { temp = this.left; this.left = this.right; this.right = temp; } if (this.top > this.bottom) { temp = this.top; this.top = this.bottom; this.bottom = temp; } }; Rect.prototype.intersects_rect = function (rc) { return !(rc.right < this.left || rc.bottom < this.top || rc.left > this.right || rc.top > this.bottom); }; Rect.prototype.intersects_rect_off = function (rc, ox, oy) { return !(rc.right + ox < this.left || rc.bottom + oy < this.top || rc.left + ox > this.right || rc.top + oy > this.bottom); }; Rect.prototype.contains_pt = function (x, y) { return (x >= this.left && x <= this.right) && (y >= this.top && y <= this.bottom); }; Rect.prototype.equals = function (r) { return this.left === r.left && this.top === r.top && this.right === r.right && this.bottom === r.bottom; }; cr.rect = Rect; function Quad() { this.tlx = 0; this.tly = 0; this.trx = 0; this.try_ = 0; // is a keyword otherwise! this.brx = 0; this.bry = 0; this.blx = 0; this.bly = 0; cr.seal(this); }; Quad.prototype.set_from_rect = function (rc) { this.tlx = rc.left; this.tly = rc.top; this.trx = rc.right; this.try_ = rc.top; this.brx = rc.right; this.bry = rc.bottom; this.blx = rc.left; this.bly = rc.bottom; }; Quad.prototype.set_from_rotated_rect = function (rc, a) { if (a === 0) { this.set_from_rect(rc); } else { var sin_a = Math.sin(a); var cos_a = Math.cos(a); var left_sin_a = rc.left * sin_a; var top_sin_a = rc.top * sin_a; var right_sin_a = rc.right * sin_a; var bottom_sin_a = rc.bottom * sin_a; var left_cos_a = rc.left * cos_a; var top_cos_a = rc.top * cos_a; var right_cos_a = rc.right * cos_a; var bottom_cos_a = rc.bottom * cos_a; this.tlx = left_cos_a - top_sin_a; this.tly = top_cos_a + left_sin_a; this.trx = right_cos_a - top_sin_a; this.try_ = top_cos_a + right_sin_a; this.brx = right_cos_a - bottom_sin_a; this.bry = bottom_cos_a + right_sin_a; this.blx = left_cos_a - bottom_sin_a; this.bly = bottom_cos_a + left_sin_a; } }; Quad.prototype.offset = function (px, py) { this.tlx += px; this.tly += py; this.trx += px; this.try_ += py; this.brx += px; this.bry += py; this.blx += px; this.bly += py; return this; }; var minresult = 0; var maxresult = 0; function minmax4(a, b, c, d) { if (a < b) { if (c < d) { if (a < c) minresult = a; else minresult = c; if (b > d) maxresult = b; else maxresult = d; } else { if (a < d) minresult = a; else minresult = d; if (b > c) maxresult = b; else maxresult = c; } } else { if (c < d) { if (b < c) minresult = b; else minresult = c; if (a > d) maxresult = a; else maxresult = d; } else { if (b < d) minresult = b; else minresult = d; if (a > c) maxresult = a; else maxresult = c; } } }; Quad.prototype.bounding_box = function (rc) { minmax4(this.tlx, this.trx, this.brx, this.blx); rc.left = minresult; rc.right = maxresult; minmax4(this.tly, this.try_, this.bry, this.bly); rc.top = minresult; rc.bottom = maxresult; }; Quad.prototype.contains_pt = function (x, y) { var v0x = this.trx - this.tlx; var v0y = this.try_ - this.tly; var v1x = this.brx - this.tlx; var v1y = this.bry - this.tly; var v2x = x - this.tlx; var v2y = y - this.tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y var dot11 = v1x * v1x + v1y * v1y var dot12 = v1x * v2x + v1y * v2y var invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); var u = (dot11 * dot02 - dot01 * dot12) * invDenom; var v = (dot00 * dot12 - dot01 * dot02) * invDenom; if ((u >= 0.0) && (v > 0.0) && (u + v < 1)) return true; v0x = this.blx - this.tlx; v0y = this.bly - this.tly; var dot00 = v0x * v0x + v0y * v0y var dot01 = v0x * v1x + v0y * v1y var dot02 = v0x * v2x + v0y * v2y invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01); u = (dot11 * dot02 - dot01 * dot12) * invDenom; v = (dot00 * dot12 - dot01 * dot02) * invDenom; return (u >= 0.0) && (v > 0.0) && (u + v < 1); }; Quad.prototype.at = function (i, xory) { if (xory) { switch (i) { case 0: return this.tlx; case 1: return this.trx; case 2: return this.brx; case 3: return this.blx; case 4: return this.tlx; default: return this.tlx; } } else { switch (i) { case 0: return this.tly; case 1: return this.try_; case 2: return this.bry; case 3: return this.bly; case 4: return this.tly; default: return this.tly; } } }; Quad.prototype.midX = function () { return (this.tlx + this.trx + this.brx + this.blx) / 4; }; Quad.prototype.midY = function () { return (this.tly + this.try_ + this.bry + this.bly) / 4; }; Quad.prototype.intersects_segment = function (x1, y1, x2, y2) { if (this.contains_pt(x1, y1) || this.contains_pt(x2, y2)) return true; var a1x, a1y, a2x, a2y; var i; for (i = 0; i < 4; i++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; Quad.prototype.intersects_quad = function (rhs) { var midx = rhs.midX(); var midy = rhs.midY(); if (this.contains_pt(midx, midy)) return true; midx = this.midX(); midy = this.midY(); if (rhs.contains_pt(midx, midy)) return true; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; var i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { a1x = this.at(i, true); a1y = this.at(i, false); a2x = this.at(i + 1, true); a2y = this.at(i + 1, false); b1x = rhs.at(j, true); b1y = rhs.at(j, false); b2x = rhs.at(j + 1, true); b2y = rhs.at(j + 1, false); if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; cr.quad = Quad; cr.RGB = function (red, green, blue) { return Math.max(Math.min(red, 255), 0) | (Math.max(Math.min(green, 255), 0) << 8) | (Math.max(Math.min(blue, 255), 0) << 16); }; cr.GetRValue = function (rgb) { return rgb & 0xFF; }; cr.GetGValue = function (rgb) { return (rgb & 0xFF00) >> 8; }; cr.GetBValue = function (rgb) { return (rgb & 0xFF0000) >> 16; }; cr.shallowCopy = function (a, b, allowOverwrite) { var attr; for (attr in b) { if (b.hasOwnProperty(attr)) { ; a[attr] = b[attr]; } } return a; }; cr.arrayRemove = function (arr, index) { var i, len; index = cr.floor(index); if (index < 0 || index >= arr.length) return; // index out of bounds for (i = index, len = arr.length - 1; i < len; i++) arr[i] = arr[i + 1]; arr.length = len; }; cr.shallowAssignArray = function (dest, src) { dest.length = src.length; var i, len; for (i = 0, len = src.length; i < len; i++) dest[i] = src[i]; }; cr.appendArray = function (a, b) { a.push.apply(a, b); }; cr.fastIndexOf = function (arr, item) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { if (arr[i] === item) return i; } return -1; }; cr.arrayFindRemove = function (arr, item) { var index = cr.fastIndexOf(arr, item); if (index !== -1) cr.arrayRemove(arr, index); }; cr.clamp = function(x, a, b) { if (x < a) return a; else if (x > b) return b; else return x; }; cr.to_radians = function(x) { return x / (180.0 / cr.PI); }; cr.to_degrees = function(x) { return x * (180.0 / cr.PI); }; cr.clamp_angle_degrees = function (a) { a %= 360; // now in (-360, 360) range if (a < 0) a += 360; // now in [0, 360) range return a; }; cr.clamp_angle = function (a) { a %= 2 * cr.PI; // now in (-2pi, 2pi) range if (a < 0) a += 2 * cr.PI; // now in [0, 2pi) range return a; }; cr.to_clamped_degrees = function (x) { return cr.clamp_angle_degrees(cr.to_degrees(x)); }; cr.to_clamped_radians = function (x) { return cr.clamp_angle(cr.to_radians(x)); }; cr.angleTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.atan2(dy, dx); }; cr.angleDiff = function (a1, a2) { if (a1 === a2) return 0; var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); var n = s1 * s2 + c1 * c2; if (n >= 1) return 0; if (n <= -1) return cr.PI; return Math.acos(n); }; cr.angleRotate = function (start, end, step) { var ss = Math.sin(start); var cs = Math.cos(start); var se = Math.sin(end); var ce = Math.cos(end); if (Math.acos(ss * se + cs * ce) > step) { if (cs * se - ss * ce > 0) return cr.clamp_angle(start + step); else return cr.clamp_angle(start - step); } else return cr.clamp_angle(end); }; cr.angleClockwise = function (a1, a2) { var s1 = Math.sin(a1); var c1 = Math.cos(a1); var s2 = Math.sin(a2); var c2 = Math.cos(a2); return c1 * s2 - s1 * c2 <= 0; }; cr.rotatePtAround = function (px, py, a, ox, oy, getx) { if (a === 0) return getx ? px : py; var sin_a = Math.sin(a); var cos_a = Math.cos(a); px -= ox; py -= oy; var left_sin_a = px * sin_a; var top_sin_a = py * sin_a; var left_cos_a = px * cos_a; var top_cos_a = py * cos_a; px = left_cos_a - top_sin_a; py = top_cos_a + left_sin_a; px += ox; py += oy; return getx ? px : py; } cr.distanceTo = function(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.sqrt(dx*dx + dy*dy); }; cr.xor = function (x, y) { return !x !== !y; }; cr.lerp = function (a, b, x) { return a + (b - a) * x; }; cr.unlerp = function (a, b, c) { if (a === b) return 0; // avoid divide by 0 return (c - a) / (b - a); }; cr.anglelerp = function (a, b, x) { var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { return a + diff * x; } else { return a - diff * x; } }; cr.qarp = function (a, b, c, x) { return cr.lerp(cr.lerp(a, b, x), cr.lerp(b, c, x), x); }; cr.cubic = function (a, b, c, d, x) { return cr.lerp(cr.qarp(a, b, c, x), cr.qarp(b, c, d, x), x); }; cr.cosp = function (a, b, x) { return (a + b + (a - b) * Math.cos(x * Math.PI)) / 2; }; cr.hasAnyOwnProperty = function (o) { var p; for (p in o) { if (o.hasOwnProperty(p)) return true; } return false; }; cr.wipe = function (obj) { var p; for (p in obj) { if (obj.hasOwnProperty(p)) delete obj[p]; } }; var startup_time = +(new Date()); cr.performance_now = function() { if (typeof window["performance"] !== "undefined") { var winperf = window["performance"]; if (typeof winperf.now !== "undefined") return winperf.now(); else if (typeof winperf["webkitNow"] !== "undefined") return winperf["webkitNow"](); else if (typeof winperf["mozNow"] !== "undefined") return winperf["mozNow"](); else if (typeof winperf["msNow"] !== "undefined") return winperf["msNow"](); } return Date.now() - startup_time; }; var isChrome = false; var isSafari = false; var isiOS = false; var isEjecta = false; if (typeof window !== "undefined") // not c2 editor { isChrome = /chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent); isSafari = !isChrome && /safari/i.test(navigator.userAgent); isiOS = /(iphone|ipod|ipad)/i.test(navigator.userAgent); isEjecta = window["c2ejecta"]; } var supports_set = ((!isSafari && !isEjecta && !isiOS) && (typeof Set !== "undefined" && typeof Set.prototype["forEach"] !== "undefined")); function ObjectSet_() { this.s = null; this.items = null; // lazy allocated (hopefully results in better GC performance) this.item_count = 0; if (supports_set) { this.s = new Set(); } this.values_cache = []; this.cache_valid = true; cr.seal(this); }; ObjectSet_.prototype.contains = function (x) { if (this.isEmpty()) return false; if (supports_set) return this.s["has"](x); else return (this.items && this.items.hasOwnProperty(x)); }; ObjectSet_.prototype.add = function (x) { if (supports_set) { if (!this.s["has"](x)) { this.s["add"](x); this.cache_valid = false; } } else { var str = x.toString(); var items = this.items; if (!items) { this.items = {}; this.items[str] = x; this.item_count = 1; this.cache_valid = false; } else if (!items.hasOwnProperty(str)) { items[str] = x; this.item_count++; this.cache_valid = false; } } }; ObjectSet_.prototype.remove = function (x) { if (this.isEmpty()) return; if (supports_set) { if (this.s["has"](x)) { this.s["delete"](x); this.cache_valid = false; } } else if (this.items) { var str = x.toString(); var items = this.items; if (items.hasOwnProperty(str)) { delete items[str]; this.item_count--; this.cache_valid = false; } } }; ObjectSet_.prototype.clear = function (/*wipe_*/) { if (this.isEmpty()) return; if (supports_set) { this.s["clear"](); // best! } else { this.items = null; // creates garbage; will lazy allocate on next add() this.item_count = 0; } this.values_cache.length = 0; this.cache_valid = true; }; ObjectSet_.prototype.isEmpty = function () { return this.count() === 0; }; ObjectSet_.prototype.count = function () { if (supports_set) return this.s["size"]; else return this.item_count; }; var current_arr = null; var current_index = 0; function set_append_to_arr(x) { current_arr[current_index++] = x; }; ObjectSet_.prototype.update_cache = function () { if (this.cache_valid) return; if (supports_set) { this.values_cache.length = this.s["size"]; current_arr = this.values_cache; current_index = 0; this.s["forEach"](set_append_to_arr); ; current_arr = null; current_index = 0; } else { var values_cache = this.values_cache; values_cache.length = this.item_count; var p, n = 0, items = this.items; if (items) { for (p in items) { if (items.hasOwnProperty(p)) values_cache[n++] = items[p]; } } ; } this.cache_valid = true; }; ObjectSet_.prototype.valuesRef = function () { this.update_cache(); return this.values_cache; }; cr.ObjectSet = ObjectSet_; var tmpSet = new cr.ObjectSet(); cr.removeArrayDuplicates = function (arr) { var i, len; for (i = 0, len = arr.length; i < len; ++i) { tmpSet.add(arr[i]); } cr.shallowAssignArray(arr, tmpSet.valuesRef()); tmpSet.clear(); }; function KahanAdder_() { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; cr.seal(this); }; KahanAdder_.prototype.add = function (v) { this.y = v - this.c; this.t = this.sum + this.y; this.c = (this.t - this.sum) - this.y; this.sum = this.t; }; KahanAdder_.prototype.reset = function () { this.c = 0; this.y = 0; this.t = 0; this.sum = 0; }; cr.KahanAdder = KahanAdder_; cr.regexp_escape = function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }; function CollisionPoly_(pts_array_) { this.pts_cache = []; this.bboxLeft = 0; this.bboxTop = 0; this.bboxRight = 0; this.bboxBottom = 0; this.convexpolys = null; // for physics behavior to cache separated polys this.set_pts(pts_array_); cr.seal(this); }; CollisionPoly_.prototype.set_pts = function(pts_array_) { this.pts_array = pts_array_; this.pts_count = pts_array_.length / 2; // x, y, x, y... in array this.pts_cache.length = pts_array_.length; this.cache_width = -1; this.cache_height = -1; this.cache_angle = 0; }; CollisionPoly_.prototype.is_empty = function() { return !this.pts_array.length; }; CollisionPoly_.prototype.update_bbox = function () { var myptscache = this.pts_cache; var bboxLeft_ = myptscache[0]; var bboxRight_ = bboxLeft_; var bboxTop_ = myptscache[1]; var bboxBottom_ = bboxTop_; var x, y, i = 1, i2, len = this.pts_count; for ( ; i < len; ++i) { i2 = i*2; x = myptscache[i2]; y = myptscache[i2+1]; if (x < bboxLeft_) bboxLeft_ = x; if (x > bboxRight_) bboxRight_ = x; if (y < bboxTop_) bboxTop_ = y; if (y > bboxBottom_) bboxBottom_ = y; } this.bboxLeft = bboxLeft_; this.bboxRight = bboxRight_; this.bboxTop = bboxTop_; this.bboxBottom = bboxBottom_; }; CollisionPoly_.prototype.set_from_rect = function(rc, offx, offy) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = rc.left - offx; myptscache[1] = rc.top - offy; myptscache[2] = rc.right - offx; myptscache[3] = rc.top - offy; myptscache[4] = rc.right - offx; myptscache[5] = rc.bottom - offy; myptscache[6] = rc.left - offx; myptscache[7] = rc.bottom - offy; this.cache_width = rc.right - rc.left; this.cache_height = rc.bottom - rc.top; this.update_bbox(); }; CollisionPoly_.prototype.set_from_quad = function(q, offx, offy, w, h) { this.pts_cache.length = 8; this.pts_count = 4; var myptscache = this.pts_cache; myptscache[0] = q.tlx - offx; myptscache[1] = q.tly - offy; myptscache[2] = q.trx - offx; myptscache[3] = q.try_ - offy; myptscache[4] = q.brx - offx; myptscache[5] = q.bry - offy; myptscache[6] = q.blx - offx; myptscache[7] = q.bly - offy; this.cache_width = w; this.cache_height = h; this.update_bbox(); }; CollisionPoly_.prototype.set_from_poly = function (r) { this.pts_count = r.pts_count; cr.shallowAssignArray(this.pts_cache, r.pts_cache); this.bboxLeft = r.bboxLeft; this.bboxTop - r.bboxTop; this.bboxRight = r.bboxRight; this.bboxBottom = r.bboxBottom; }; CollisionPoly_.prototype.cache_poly = function(w, h, a) { if (this.cache_width === w && this.cache_height === h && this.cache_angle === a) return; // cache up-to-date this.cache_width = w; this.cache_height = h; this.cache_angle = a; var i, i2, i21, len, x, y; var sina = 0; var cosa = 1; var myptsarray = this.pts_array; var myptscache = this.pts_cache; if (a !== 0) { sina = Math.sin(a); cosa = Math.cos(a); } for (i = 0, len = this.pts_count; i < len; i++) { i2 = i*2; i21 = i2+1; x = myptsarray[i2] * w; y = myptsarray[i21] * h; myptscache[i2] = (x * cosa) - (y * sina); myptscache[i21] = (y * cosa) + (x * sina); } this.update_bbox(); }; CollisionPoly_.prototype.contains_pt = function (a2x, a2y) { var myptscache = this.pts_cache; if (a2x === myptscache[0] && a2y === myptscache[1]) return true; var i, i2, imod, len = this.pts_count; var a1x = this.bboxLeft - 110; var a1y = this.bboxTop - 101; var a3x = this.bboxRight + 131 var a3y = this.bboxBottom + 120; var b1x, b1y, b2x, b2y; var count1 = 0, count2 = 0; for (i = 0; i < len; i++) { i2 = i*2; imod = ((i+1)%len)*2; b1x = myptscache[i2]; b1y = myptscache[i2+1]; b2x = myptscache[imod]; b2y = myptscache[imod+1]; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) count1++; if (cr.segments_intersect(a3x, a3y, a2x, a2y, b1x, b1y, b2x, b2y)) count2++; } return (count1 % 2 === 1) || (count2 % 2 === 1); }; CollisionPoly_.prototype.intersects_poly = function (rhs, offx, offy) { var rhspts = rhs.pts_cache; var mypts = this.pts_cache; if (this.contains_pt(rhspts[0] + offx, rhspts[1] + offy)) return true; if (rhs.contains_pt(mypts[0] - offx, mypts[1] - offy)) return true; var i, i2, imod, leni, j, j2, jmod, lenj; var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i*2; imod = ((i+1)%leni)*2; a1x = mypts[i2]; a1y = mypts[i2+1]; a2x = mypts[imod]; a2y = mypts[imod+1]; for (j = 0, lenj = rhs.pts_count; j < lenj; j++) { j2 = j*2; jmod = ((j+1)%lenj)*2; b1x = rhspts[j2] + offx; b1y = rhspts[j2+1] + offy; b2x = rhspts[jmod] + offx; b2y = rhspts[jmod+1] + offy; if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)) return true; } } return false; }; CollisionPoly_.prototype.intersects_segment = function (offx, offy, x1, y1, x2, y2) { var mypts = this.pts_cache; if (this.contains_pt(x1 - offx, y1 - offy)) return true; var i, leni, i2, imod; var a1x, a1y, a2x, a2y; for (i = 0, leni = this.pts_count; i < leni; i++) { i2 = i*2; imod = ((i+1)%leni)*2; a1x = mypts[i2] + offx; a1y = mypts[i2+1] + offy; a2x = mypts[imod] + offx; a2y = mypts[imod+1] + offy; if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y)) return true; } return false; }; CollisionPoly_.prototype.mirror = function (px) { var i, leni, i2; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i*2; this.pts_cache[i2] = px * 2 - this.pts_cache[i2]; } }; CollisionPoly_.prototype.flip = function (py) { var i, leni, i21; for (i = 0, leni = this.pts_count; i < leni; ++i) { i21 = i*2+1; this.pts_cache[i21] = py * 2 - this.pts_cache[i21]; } }; CollisionPoly_.prototype.diag = function () { var i, leni, i2, i21, temp; for (i = 0, leni = this.pts_count; i < leni; ++i) { i2 = i*2; i21 = i2+1; temp = this.pts_cache[i2]; this.pts_cache[i2] = this.pts_cache[i21]; this.pts_cache[i21] = temp; } }; cr.CollisionPoly = CollisionPoly_; function SparseGrid_(cellwidth_, cellheight_) { this.cellwidth = cellwidth_; this.cellheight = cellheight_; this.cells = {}; }; SparseGrid_.prototype.totalCellCount = 0; SparseGrid_.prototype.getCell = function (x_, y_, create_if_missing) { var ret; var col = this.cells[x_]; if (!col) { if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_] = {}; this.cells[x_][y_] = ret; return ret; } else return null; } ret = col[y_]; if (ret) return ret; else if (create_if_missing) { ret = allocGridCell(this, x_, y_); this.cells[x_][y_] = ret; return ret; } else return null; }; SparseGrid_.prototype.XToCell = function (x_) { return cr.floor(x_ / this.cellwidth); }; SparseGrid_.prototype.YToCell = function (y_) { return cr.floor(y_ / this.cellheight); }; SparseGrid_.prototype.update = function (inst, oldrange, newrange) { var x, lenx, y, leny, cell; if (oldrange) { for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x) { for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y) { if (newrange && newrange.contains_pt(x, y)) continue; // is still in this cell cell = this.getCell(x, y, false); // don't create if missing if (!cell) continue; // cell does not exist yet cell.remove(inst); if (cell.isEmpty()) { freeGridCell(cell); this.cells[x][y] = null; } } } } if (newrange) { for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x) { for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y) { if (oldrange && oldrange.contains_pt(x, y)) continue; // is still in this cell this.getCell(x, y, true).insert(inst); } } } }; SparseGrid_.prototype.queryRange = function (rc, result) { var x, lenx, ystart, y, leny, cell; x = this.XToCell(rc.left); ystart = this.YToCell(rc.top); lenx = this.XToCell(rc.right); leny = this.YToCell(rc.bottom); for ( ; x <= lenx; ++x) { for (y = ystart; y <= leny; ++y) { cell = this.getCell(x, y, false); if (!cell) continue; cell.dump(result); } } }; cr.SparseGrid = SparseGrid_; var gridcellcache = []; function allocGridCell(grid_, x_, y_) { var ret; SparseGrid_.prototype.totalCellCount++; if (gridcellcache.length) { ret = gridcellcache.pop(); ret.grid = grid_; ret.x = x_; ret.y = y_; return ret; } else return new cr.GridCell(grid_, x_, y_); }; function freeGridCell(c) { SparseGrid_.prototype.totalCellCount--; c.objects.clear(); if (gridcellcache.length < 1000) gridcellcache.push(c); }; function GridCell_(grid_, x_, y_) { this.grid = grid_; this.x = x_; this.y = y_; this.objects = new cr.ObjectSet(); }; GridCell_.prototype.isEmpty = function () { return this.objects.isEmpty(); }; GridCell_.prototype.insert = function (inst) { this.objects.add(inst); }; GridCell_.prototype.remove = function (inst) { this.objects.remove(inst); }; GridCell_.prototype.dump = function (result) { cr.appendArray(result, this.objects.valuesRef()); }; cr.GridCell = GridCell_; var fxNames = [ "lighter", "xor", "copy", "destination-over", "source-in", "destination-in", "source-out", "destination-out", "source-atop", "destination-atop"]; cr.effectToCompositeOp = function(effect) { if (effect <= 0 || effect >= 11) return "source-over"; return fxNames[effect - 1]; // not including "none" so offset by 1 }; cr.setGLBlend = function(this_, effect, gl) { if (!gl) return; this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; switch (effect) { case 1: // lighter (additive) this_.srcBlend = gl.ONE; this_.destBlend = gl.ONE; break; case 2: // xor break; // todo case 3: // copy this_.srcBlend = gl.ONE; this_.destBlend = gl.ZERO; break; case 4: // destination-over this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ONE; break; case 5: // source-in this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ZERO; break; case 6: // destination-in this_.srcBlend = gl.ZERO; this_.destBlend = gl.SRC_ALPHA; break; case 7: // source-out this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.ZERO; break; case 8: // destination-out this_.srcBlend = gl.ZERO; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 9: // source-atop this_.srcBlend = gl.DST_ALPHA; this_.destBlend = gl.ONE_MINUS_SRC_ALPHA; break; case 10: // destination-atop this_.srcBlend = gl.ONE_MINUS_DST_ALPHA; this_.destBlend = gl.SRC_ALPHA; break; } }; cr.round6dp = function (x) { return Math.round(x * 1000000) / 1000000; }; /* var localeCompare_options = { "usage": "search", "sensitivity": "accent" }; var has_localeCompare = !!"a".localeCompare; var localeCompare_works1 = (has_localeCompare && "a".localeCompare("A", undefined, localeCompare_options) === 0); var localeCompare_works2 = (has_localeCompare && "a".localeCompare("á", undefined, localeCompare_options) !== 0); var supports_localeCompare = (has_localeCompare && localeCompare_works1 && localeCompare_works2); */ cr.equals_nocase = function (a, b) { if (typeof a !== "string" || typeof b !== "string") return false; if (a.length !== b.length) return false; if (a === b) return true; /* if (supports_localeCompare) { return (a.localeCompare(b, undefined, localeCompare_options) === 0); } else { */ return a.toLowerCase() === b.toLowerCase(); }; cr.isCanvasInputEvent = function (e) { var target = e.target; if (!target) return true; if (target === document || target === window) return true; if (document && document.body && target === document.body) return true; if (cr.equals_nocase(target.tagName, "canvas")) return true; return false; }; }()); var MatrixArray=typeof Float32Array!=="undefined"?Float32Array:Array,glMatrixArrayType=MatrixArray,vec3={},mat3={},mat4={},quat4={};vec3.create=function(a){var b=new MatrixArray(3);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2]);return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a===c)return a[0]+=b[0],a[1]+=b[1],a[2]+=b[2],a;c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c}; vec3.subtract=function(a,b,c){if(!c||a===c)return a[0]-=b[0],a[1]-=b[1],a[2]-=b[2],a;c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a===c)return a[0]*=b,a[1]*=b,a[2]*=b,a;c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c}; vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g===1)return b[0]=c,b[1]=d,b[2]=e,b}else return b[0]=0,b[1]=0,b[2]=0,b;g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1],a=a[2],g=b[0],f=b[1],b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1],a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]}; vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1],a=a[2]-b[2],b=Math.sqrt(d*d+e*e+a*a);if(!b)return c[0]=0,c[1]=0,c[2]=0,c;b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"}; mat3.create=function(a){var b=new MatrixArray(9);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8]);return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a}; mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[15]=1;b[14]=0;b[13]=0;b[12]=0;b[11]=0;b[10]=a[8];b[9]=a[7];b[8]=a[6];b[7]=0;b[6]=a[5];b[5]=a[4];b[4]=a[3];b[3]=0;b[2]=a[2];b[1]=a[1];b[0]=a[0];return b}; mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};mat4.create=function(a){var b=new MatrixArray(16);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]);return b}; mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a}; mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b}; mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],n=a[11],o=a[12],m=a[13],p=a[14],a=a[15];return o*k*h*e-j*m*h*e-o*f*l*e+g*m*l*e+j*f*p*e-g*k*p*e-o*k*d*i+j*m*d*i+o*c*l*i-b*m*l*i-j*c*p*i+b*k*p*i+o*f*d*n-g*m*d*n-o*c*h*n+b*m*h*n+g*c*p*n-b*f*p*n-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a}; mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],n=a[10],o=a[11],m=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*m,y=k*r-n*m,z=k*s-o*m,C=l*r-n*p,D=l*s-o*p,E=n*s-o*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+n*v-o*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-m*w+r*t-s*B)*q;b[7]=(k*w-n*t+o*B)*q;b[8]=(f*D-h*z+j*x)*q; b[9]=(-c*D+d*z-g*x)*q;b[10]=(m*v-p*t+s*A)*q;b[11]=(-k*v+l*t-o*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-m*u+p*B-r*A)*q;b[15]=(k*u-l*B+n*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,n=-k*g+h*i,o=j*g-f*i,m=c*l+d*n+e*o;if(!m)return null;m=1/m;b||(b=mat3.create());b[0]=l*m;b[1]=(-k*d+e*j)*m;b[2]=(h*d-e*f)*m;b[3]=n*m;b[4]=(k*c-e*i)*m;b[5]=(-h*c+e*g)*m;b[6]=o*m;b[7]=(-j*c+d*i)*m;b[8]=(f*c-d*g)*m;return b}; mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],n=a[9],o=a[10],m=a[11],p=a[12],r=a[13],s=a[14],a=a[15],A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14],b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*n+u*r;c[2]=A*g+B*j+t*o+u*s;c[3]=A*f+B*k+t*m+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*n+y*r;c[6]=v*g+w*j+x*o+y*s;c[7]=v*f+w*k+x*m+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*n+E*r;c[10]=z*g+C* j+D*o+E*s;c[11]=z*f+C*k+D*m+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*n+b*r;c[14]=q*g+F*j+G*o+b*s;c[15]=q*f+F*k+G*m+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c}; mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c}; mat4.translate=function(a,b,c){var d=b[0],e=b[1],b=b[2],g,f,h,i,j,k,l,n,o,m,p,r;if(!c||a===c)return a[12]=a[0]*d+a[4]*e+a[8]*b+a[12],a[13]=a[1]*d+a[5]*e+a[9]*b+a[13],a[14]=a[2]*d+a[6]*e+a[10]*b+a[14],a[15]=a[3]*d+a[7]*e+a[11]*b+a[15],a;g=a[0];f=a[1];h=a[2];i=a[3];j=a[4];k=a[5];l=a[6];n=a[7];o=a[8];m=a[9];p=a[10];r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=n;c[8]=o;c[9]=m;c[10]=p;c[11]=r;c[12]=g*d+j*e+o*b+a[12];c[13]=f*d+k*e+m*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+n*e+r*b+a[15]; return c};mat4.scale=function(a,b,c){var d=b[0],e=b[1],b=b[2];if(!c||a===c)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=b,a[9]*=b,a[10]*=b,a[11]*=b,a;c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c}; mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1],c=c[2],f=Math.sqrt(e*e+g*g+c*c),h,i,j,k,l,n,o,m,p,r,s,A,B,t,u,v,w,x,y,z;if(!f)return null;f!==1&&(f=1/f,e*=f,g*=f,c*=f);h=Math.sin(b);i=Math.cos(b);j=1-i;b=a[0];f=a[1];k=a[2];l=a[3];n=a[4];o=a[5];m=a[6];p=a[7];r=a[8];s=a[9];A=a[10];B=a[11];t=e*e*j+i;u=g*e*j+c*h;v=c*e*j-g*h;w=e*g*j-c*h;x=g*g*j+i;y=c*g*j+e*h;z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;d?a!==d&&(d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]):d=a;d[0]=b*t+n*u+r*v;d[1]=f*t+o*u+s*v;d[2]=k*t+m*u+A* v;d[3]=l*t+p*u+B*v;d[4]=b*w+n*x+r*y;d[5]=f*w+o*x+s*y;d[6]=k*w+m*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+n*e+r*g;d[9]=f*z+o*e+s*g;d[10]=k*z+m*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c}; mat4.rotateY=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[4]=a[4],c[5]=a[5],c[6]=a[6],c[7]=a[7],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c}; mat4.rotateZ=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];c?a!==c&&(c[8]=a[8],c[9]=a[9],c[10]=a[10],c[11]=a[11],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c}; mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b*=a;return mat4.frustum(-b,b,-a,a,c,d,e)}; mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f}; mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e,g,f,h,i,j,k,l,n=a[0],o=a[1],a=a[2];g=c[0];f=c[1];e=c[2];c=b[1];j=b[2];if(n===b[0]&&o===c&&a===j)return mat4.identity(d);c=n-b[0];j=o-b[1];k=a-b[2];l=1/Math.sqrt(c*c+j*j+k*k);c*=l;j*=l;k*=l;b=f*k-e*j;e=e*c-g*k;g=g*j-f*c;(l=Math.sqrt(b*b+e*e+g*g))?(l=1/l,b*=l,e*=l,g*=l):g=e=b=0;f=j*g-k*e;h=k*b-c*g;i=c*e-j*b;(l=Math.sqrt(f*f+h*h+i*i))?(l=1/l,f*=l,h*=l,i*=l):i=h=f=0;d[0]=b;d[1]=f;d[2]=c;d[3]=0;d[4]=e;d[5]=h;d[6]=j;d[7]=0;d[8]=g;d[9]=i;d[10]=k;d[11]= 0;d[12]=-(b*n+e*o+g*a);d[13]=-(f*n+h*o+i*a);d[14]=-(c*n+j*o+k*a);d[15]=1;return d};mat4.fromRotationTranslation=function(a,b,c){c||(c=mat4.create());var d=a[0],e=a[1],g=a[2],f=a[3],h=d+d,i=e+e,j=g+g,a=d*h,k=d*i;d*=j;var l=e*i;e*=j;g*=j;h*=f;i*=f;f*=j;c[0]=1-(l+g);c[1]=k+f;c[2]=d-i;c[3]=0;c[4]=k-f;c[5]=1-(a+g);c[6]=e+h;c[7]=0;c[8]=d+i;c[9]=e-h;c[10]=1-(a+l);c[11]=0;c[12]=b[0];c[13]=b[1];c[14]=b[2];c[15]=1;return c}; mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4.create=function(a){var b=new MatrixArray(4);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]);return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b}; quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a===b)return a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e)),a;b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a===b)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2],a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)}; quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f===0)return b[0]=0,b[1]=0,b[2]=0,b[3]=0,b;f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],a=a[3],f=b[0],h=b[1],i=b[2],b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c}; quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=a[0],f=a[1],h=a[2],a=a[3],i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d,d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=k-g;b[4]=1-(j+e);b[5]=d+f;b[6]=c+h;b[7]=d-f;b[8]=1-(j+l);return b}; quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=0;b[4]=k-g;b[5]=1-(j+e);b[6]=d+f;b[7]=0;b[8]=c+h;b[9]=d-f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b}; quat4.slerp=function(a,b,c,d){d||(d=a);var e=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],g,f;if(Math.abs(e)>=1)return d!==a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]),d;g=Math.acos(e);f=Math.sqrt(1-e*e);if(Math.abs(f)<0.001)return d[0]=a[0]*0.5+b[0]*0.5,d[1]=a[1]*0.5+b[1]*0.5,d[2]=a[2]*0.5+b[2]*0.5,d[3]=a[3]*0.5+b[3]*0.5,d;e=Math.sin((1-c)*g)/f;c=Math.sin(c*g)/f;d[0]=a[0]*e+b[0]*c;d[1]=a[1]*e+b[1]*c;d[2]=a[2]*e+b[2]*c;d[3]=a[3]*e+b[3]*c;return d}; quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}; (function() { var MAX_VERTICES = 8000; // equates to 2500 objects being drawn var MAX_INDICES = (MAX_VERTICES / 2) * 3; // 6 indices for every 4 vertices var MAX_POINTS = 8000; var MULTI_BUFFERS = 4; // cycle 4 buffers to try and avoid blocking var BATCH_NULL = 0; var BATCH_QUAD = 1; var BATCH_SETTEXTURE = 2; var BATCH_SETOPACITY = 3; var BATCH_SETBLEND = 4; var BATCH_UPDATEMODELVIEW = 5; var BATCH_RENDERTOTEXTURE = 6; var BATCH_CLEAR = 7; var BATCH_POINTS = 8; var BATCH_SETPROGRAM = 9; var BATCH_SETPROGRAMPARAMETERS = 10; var BATCH_SETTEXTURE1 = 11; function GLWrap_(gl, isMobile) { this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent); this.width = 0; // not yet known, wait for call to setSize() this.height = 0; this.cam = vec3.create([0, 0, 100]); // camera position this.look = vec3.create([0, 0, 0]); // lookat position this.up = vec3.create([0, 1, 0]); // up vector this.worldScale = vec3.create([1, 1, 1]); // world scaling factor this.enable_mipmaps = true; this.matP = mat4.create(); // perspective matrix this.matMV = mat4.create(); // model view matrix this.lastMV = mat4.create(); this.currentMV = mat4.create(); this.gl = gl; this.initState(); }; GLWrap_.prototype.initState = function () { var gl = this.gl; var i, len; this.lastOpacity = 1; this.lastTexture0 = null; // last bound to TEXTURE0 this.lastTexture1 = null; // last bound to TEXTURE1 this.currentOpacity = 1; gl.clearColor(0, 0, 0, 0); gl.clear(gl.COLOR_BUFFER_BIT); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.disable(gl.CULL_FACE); gl.disable(gl.DEPTH_TEST); this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); this.lastSrcBlend = gl.ONE; this.lastDestBlend = gl.ONE_MINUS_SRC_ALPHA; this.pointBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); this.vertexBuffers = new Array(MULTI_BUFFERS); this.texcoordBuffers = new Array(MULTI_BUFFERS); for (i = 0; i < MULTI_BUFFERS; i++) { this.vertexBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[i]); this.texcoordBuffers[i] = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[i]); } this.curBuffer = 0; this.indexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); this.vertexData = new Float32Array(MAX_VERTICES * 2); this.texcoordData = new Float32Array(MAX_VERTICES * 2); this.pointData = new Float32Array(MAX_POINTS * 4); var indexData = new Uint16Array(MAX_INDICES); i = 0, len = MAX_INDICES; var fv = 0; while (i < len) { indexData[i++] = fv; // top left indexData[i++] = fv + 1; // top right indexData[i++] = fv + 2; // bottom right (first tri) indexData[i++] = fv; // top left indexData[i++] = fv + 2; // bottom right indexData[i++] = fv + 3; // bottom left fv += 4; } gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW); this.vertexPtr = 0; this.pointPtr = 0; var fsSource, vsSource; this.shaderPrograms = []; fsSource = [ "varying mediump vec2 vTex;", "uniform lowp float opacity;", "uniform lowp sampler2D samplerFront;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, vTex);", " gl_FragColor *= opacity;", "}" ].join("\n"); vsSource = [ "attribute highp vec2 aPos;", "attribute mediump vec2 aTex;", "varying mediump vec2 vTex;", "uniform highp mat4 matP;", "uniform highp mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " vTex = aTex;", "}" ].join("\n"); var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "<default>"); ; this.shaderPrograms.push(shaderProg); // Default shader is always shader 0 fsSource = [ "uniform mediump sampler2D samplerFront;", "varying lowp float opacity;", "void main(void) {", " gl_FragColor = texture2D(samplerFront, gl_PointCoord);", " gl_FragColor *= opacity;", "}" ].join("\n"); var pointVsSource = [ "attribute vec4 aPos;", "varying float opacity;", "uniform mat4 matP;", "uniform mat4 matMV;", "void main(void) {", " gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);", " gl_PointSize = aPos.z;", " opacity = aPos.w;", "}" ].join("\n"); shaderProg = this.createShaderProgram({src: fsSource}, pointVsSource, "<point>"); ; this.shaderPrograms.push(shaderProg); // Point shader is always shader 1 for (var shader_name in cr.shaders) { if (cr.shaders.hasOwnProperty(shader_name)) this.shaderPrograms.push(this.createShaderProgram(cr.shaders[shader_name], vsSource, shader_name)); } gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, null); this.batch = []; this.batchPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.lastProgram = -1; // start -1 so first switchProgram can do work this.currentProgram = -1; // current program during batch execution this.currentShader = null; this.fbo = gl.createFramebuffer(); this.renderToTex = null; this.tmpVec3 = vec3.create([0, 0, 0]); ; ; var pointsizes = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); this.minPointSize = pointsizes[0]; this.maxPointSize = pointsizes[1]; if (this.maxPointSize > 2048) this.maxPointSize = 2048; ; this.switchProgram(0); cr.seal(this); }; function GLShaderProgram(gl, shaderProgram, name) { this.gl = gl; this.shaderProgram = shaderProgram; this.name = name; this.locAPos = gl.getAttribLocation(shaderProgram, "aPos"); this.locATex = gl.getAttribLocation(shaderProgram, "aTex"); this.locMatP = gl.getUniformLocation(shaderProgram, "matP"); this.locMatMV = gl.getUniformLocation(shaderProgram, "matMV"); this.locOpacity = gl.getUniformLocation(shaderProgram, "opacity"); this.locSamplerFront = gl.getUniformLocation(shaderProgram, "samplerFront"); this.locSamplerBack = gl.getUniformLocation(shaderProgram, "samplerBack"); this.locDestStart = gl.getUniformLocation(shaderProgram, "destStart"); this.locDestEnd = gl.getUniformLocation(shaderProgram, "destEnd"); this.locSeconds = gl.getUniformLocation(shaderProgram, "seconds"); this.locPixelWidth = gl.getUniformLocation(shaderProgram, "pixelWidth"); this.locPixelHeight = gl.getUniformLocation(shaderProgram, "pixelHeight"); this.locLayerScale = gl.getUniformLocation(shaderProgram, "layerScale"); this.locLayerAngle = gl.getUniformLocation(shaderProgram, "layerAngle"); this.locViewOrigin = gl.getUniformLocation(shaderProgram, "viewOrigin"); this.hasAnyOptionalUniforms = !!(this.locPixelWidth || this.locPixelHeight || this.locSeconds || this.locSamplerBack || this.locDestStart || this.locDestEnd || this.locLayerScale || this.locLayerAngle || this.locViewOrigin); if (this.locOpacity) gl.uniform1f(this.locOpacity, 1); if (this.locSamplerFront) gl.uniform1i(this.locSamplerFront, 0); if (this.locSamplerBack) gl.uniform1i(this.locSamplerBack, 1); if (this.locDestStart) gl.uniform2f(this.locDestStart, 0.0, 0.0); if (this.locDestEnd) gl.uniform2f(this.locDestEnd, 1.0, 1.0); if (this.locLayerScale) gl.uniform1f(this.locLayerScale, 1.0); if (this.locLayerAngle) gl.uniform1f(this.locLayerAngle, 0.0); if (this.locViewOrigin) gl.uniform2f(this.locViewOrigin, 0.0, 0.0); this.hasCurrentMatMV = false; // matMV needs updating }; GLWrap_.prototype.createShaderProgram = function(shaderEntry, vsSource, name) { var gl = this.gl; var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, shaderEntry.src); gl.compileShader(fragmentShader); if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { ; gl.deleteShader(fragmentShader); return null; } var vertexShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader, vsSource); gl.compileShader(vertexShader); if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); return null; } var shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, fragmentShader); gl.attachShader(shaderProgram, vertexShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); gl.deleteProgram(shaderProgram); return null; } gl.useProgram(shaderProgram); ; gl.deleteShader(fragmentShader); gl.deleteShader(vertexShader); var ret = new GLShaderProgram(gl, shaderProgram, name); ret.extendBoxHorizontal = shaderEntry.extendBoxHorizontal || 0; ret.extendBoxVertical = shaderEntry.extendBoxVertical || 0; ret.crossSampling = !!shaderEntry.crossSampling; ret.animated = !!shaderEntry.animated; ret.parameters = shaderEntry.parameters || []; var i, len; for (i = 0, len = ret.parameters.length; i < len; i++) { ret.parameters[i][1] = gl.getUniformLocation(shaderProgram, ret.parameters[i][0]); gl.uniform1f(ret.parameters[i][1], 0); } cr.seal(ret); return ret; }; GLWrap_.prototype.getShaderIndex = function(name_) { var i, len; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { if (this.shaderPrograms[i].name === name_) return i; } return -1; }; GLWrap_.prototype.project = function (x, y, out) { var mv = this.matMV; var proj = this.matP; var fTempo = [0, 0, 0, 0, 0, 0, 0, 0]; fTempo[0] = mv[0]*x+mv[4]*y+mv[12]; fTempo[1] = mv[1]*x+mv[5]*y+mv[13]; fTempo[2] = mv[2]*x+mv[6]*y+mv[14]; fTempo[3] = mv[3]*x+mv[7]*y+mv[15]; fTempo[4] = proj[0]*fTempo[0]+proj[4]*fTempo[1]+proj[8]*fTempo[2]+proj[12]*fTempo[3]; fTempo[5] = proj[1]*fTempo[0]+proj[5]*fTempo[1]+proj[9]*fTempo[2]+proj[13]*fTempo[3]; fTempo[6] = proj[2]*fTempo[0]+proj[6]*fTempo[1]+proj[10]*fTempo[2]+proj[14]*fTempo[3]; fTempo[7] = -fTempo[2]; if(fTempo[7]===0.0) //The w value return; fTempo[7]=1.0/fTempo[7]; fTempo[4]*=fTempo[7]; fTempo[5]*=fTempo[7]; fTempo[6]*=fTempo[7]; out[0]=(fTempo[4]*0.5+0.5)*this.width; out[1]=(fTempo[5]*0.5+0.5)*this.height; }; GLWrap_.prototype.setSize = function(w, h, force) { if (this.width === w && this.height === h && !force) return; this.endBatch(); this.width = w; this.height = h; this.gl.viewport(0, 0, w, h); mat4.perspective(45, w / h, 1, 1000, this.matP); mat4.lookAt(this.cam, this.look, this.up, this.matMV); var tl = [0, 0]; var br = [0, 0]; this.project(0, 0, tl); this.project(1, 1, br); this.worldScale[0] = 1 / (br[0] - tl[0]); this.worldScale[1] = -1 / (br[1] - tl[1]); var i, len, s; for (i = 0, len = this.shaderPrograms.length; i < len; i++) { s = this.shaderPrograms[i]; s.hasCurrentMatMV = false; if (s.locMatP) { this.gl.useProgram(s.shaderProgram); this.gl.uniformMatrix4fv(s.locMatP, false, this.matP); } } this.gl.useProgram(this.shaderPrograms[this.lastProgram].shaderProgram); this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.gl.activeTexture(this.gl.TEXTURE1); this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.gl.activeTexture(this.gl.TEXTURE0); this.lastTexture0 = null; this.lastTexture1 = null; }; GLWrap_.prototype.resetModelView = function () { mat4.lookAt(this.cam, this.look, this.up, this.matMV); mat4.scale(this.matMV, this.worldScale); }; GLWrap_.prototype.translate = function (x, y) { if (x === 0 && y === 0) return; this.tmpVec3[0] = x;// * this.worldScale[0]; this.tmpVec3[1] = y;// * this.worldScale[1]; this.tmpVec3[2] = 0; mat4.translate(this.matMV, this.tmpVec3); }; GLWrap_.prototype.scale = function (x, y) { if (x === 1 && y === 1) return; this.tmpVec3[0] = x; this.tmpVec3[1] = y; this.tmpVec3[2] = 1; mat4.scale(this.matMV, this.tmpVec3); }; GLWrap_.prototype.rotateZ = function (a) { if (a === 0) return; mat4.rotateZ(this.matMV, a); }; GLWrap_.prototype.updateModelView = function() { var anydiff = false; for (var i = 0; i < 16; i++) { if (this.lastMV[i] !== this.matMV[i]) { anydiff = true; break; } } if (!anydiff) return; var b = this.pushBatch(); b.type = BATCH_UPDATEMODELVIEW; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(this.matMV); mat4.set(this.matMV, this.lastMV); this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; /* var debugBatch = false; jQuery(document).mousedown( function(info) { if (info.which === 2) debugBatch = true; } ); */ function GLBatchJob(type_, glwrap_) { this.type = type_; this.glwrap = glwrap_; this.gl = glwrap_.gl; this.opacityParam = 0; // for setOpacity() this.startIndex = 0; // for quad() this.indexCount = 0; // " this.texParam = null; // for setTexture() this.mat4param = null; // for updateModelView() this.shaderParams = []; // for user parameters cr.seal(this); }; GLBatchJob.prototype.doSetTexture = function () { this.gl.bindTexture(this.gl.TEXTURE_2D, this.texParam); }; GLBatchJob.prototype.doSetTexture1 = function () { var gl = this.gl; gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); gl.activeTexture(gl.TEXTURE0); }; GLBatchJob.prototype.doSetOpacity = function () { var o = this.opacityParam; var glwrap = this.glwrap; glwrap.currentOpacity = o; var curProg = glwrap.currentShader; if (curProg.locOpacity) this.gl.uniform1f(curProg.locOpacity, o); }; GLBatchJob.prototype.doQuad = function () { this.gl.drawElements(this.gl.TRIANGLES, this.indexCount, this.gl.UNSIGNED_SHORT, this.startIndex * 2); }; GLBatchJob.prototype.doSetBlend = function () { this.gl.blendFunc(this.startIndex, this.indexCount); }; GLBatchJob.prototype.doUpdateModelView = function () { var i, len, s, shaderPrograms = this.glwrap.shaderPrograms, currentProgram = this.glwrap.currentProgram; for (i = 0, len = shaderPrograms.length; i < len; i++) { s = shaderPrograms[i]; if (i === currentProgram && s.locMatMV) { this.gl.uniformMatrix4fv(s.locMatMV, false, this.mat4param); s.hasCurrentMatMV = true; } else s.hasCurrentMatMV = false; } mat4.set(this.mat4param, this.glwrap.currentMV); }; GLBatchJob.prototype.doRenderToTexture = function () { var gl = this.gl; var glwrap = this.glwrap; if (this.texParam) { if (glwrap.lastTexture1 === this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); glwrap.lastTexture1 = null; gl.activeTexture(gl.TEXTURE0); } gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texParam, 0); } else { gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); gl.bindFramebuffer(gl.FRAMEBUFFER, null); } }; GLBatchJob.prototype.doClear = function () { var gl = this.gl; if (this.startIndex === 0) // clear whole surface { gl.clearColor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clear(gl.COLOR_BUFFER_BIT); } else // clear rectangle { gl.enable(gl.SCISSOR_TEST); gl.scissor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]); gl.clearColor(0, 0, 0, 0); gl.clear(this.gl.COLOR_BUFFER_BIT); gl.disable(gl.SCISSOR_TEST); } }; GLBatchJob.prototype.doPoints = function () { var gl = this.gl; var glwrap = this.glwrap; var s = glwrap.shaderPrograms[1]; gl.useProgram(s.shaderProgram); if (!s.hasCurrentMatMV && s.locMatMV) { gl.uniformMatrix4fv(s.locMatMV, false, glwrap.currentMV); s.hasCurrentMatMV = true; } gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.pointBuffer); gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.POINTS, this.startIndex / 4, this.indexCount); s = glwrap.currentShader; gl.useProgram(s.shaderProgram); if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } }; GLBatchJob.prototype.doSetProgram = function () { var gl = this.gl; var glwrap = this.glwrap; var s = glwrap.shaderPrograms[this.startIndex]; // recycled param to save memory glwrap.currentProgram = this.startIndex; // current batch program glwrap.currentShader = s; gl.useProgram(s.shaderProgram); // switch to if (!s.hasCurrentMatMV && s.locMatMV) { gl.uniformMatrix4fv(s.locMatMV, false, glwrap.currentMV); s.hasCurrentMatMV = true; } if (s.locOpacity) gl.uniform1f(s.locOpacity, glwrap.currentOpacity); if (s.locAPos >= 0) { gl.enableVertexAttribArray(s.locAPos); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locAPos, 2, gl.FLOAT, false, 0, 0); } if (s.locATex >= 0) { gl.enableVertexAttribArray(s.locATex); gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]); gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } } GLBatchJob.prototype.doSetProgramParameters = function () { var i, len, s = this.glwrap.currentShader; var gl = this.gl; var mat4param = this.mat4param; if (s.locSamplerBack && this.glwrap.lastTexture1 !== this.texParam) { gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, this.texParam); this.glwrap.lastTexture1 = this.texParam; gl.activeTexture(gl.TEXTURE0); } if (s.locPixelWidth) gl.uniform1f(s.locPixelWidth, mat4param[0]); if (s.locPixelHeight) gl.uniform1f(s.locPixelHeight, mat4param[1]); if (s.locDestStart) gl.uniform2f(s.locDestStart, mat4param[2], mat4param[3]); if (s.locDestEnd) gl.uniform2f(s.locDestEnd, mat4param[4], mat4param[5]); if (s.locLayerScale) gl.uniform1f(s.locLayerScale, mat4param[6]); if (s.locLayerAngle) gl.uniform1f(s.locLayerAngle, mat4param[7]); if (s.locViewOrigin) gl.uniform2f(s.locViewOrigin, mat4param[8], mat4param[9]); if (s.locSeconds) gl.uniform1f(s.locSeconds, cr.performance_now() / 1000.0); if (s.parameters.length) { for (i = 0, len = s.parameters.length; i < len; i++) { gl.uniform1f(s.parameters[i][1], this.shaderParams[i]); } } }; GLWrap_.prototype.pushBatch = function () { if (this.batchPtr === this.batch.length) this.batch.push(new GLBatchJob(BATCH_NULL, this)); return this.batch[this.batchPtr++]; }; GLWrap_.prototype.endBatch = function () { if (this.batchPtr === 0) return; if (this.gl.isContextLost()) return; var gl = this.gl; if (this.pointPtr > 0) { gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer); gl.bufferData(gl.ARRAY_BUFFER, this.pointData.subarray(0, this.pointPtr), gl.STREAM_DRAW); if (s && s.locAPos >= 0 && s.name === "<point>") gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0); } if (this.vertexPtr > 0) { var s = this.currentShader; gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[this.curBuffer]); gl.bufferData(gl.ARRAY_BUFFER, this.vertexData.subarray(0, this.vertexPtr), gl.STREAM_DRAW); if (s && s.locAPos >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locAPos, 2, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[this.curBuffer]); gl.bufferData(gl.ARRAY_BUFFER, this.texcoordData.subarray(0, this.vertexPtr), gl.STREAM_DRAW); if (s && s.locATex >= 0 && s.name !== "<point>") gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0); } var i, len, b; for (i = 0, len = this.batchPtr; i < len; i++) { b = this.batch[i]; switch (b.type) { case 1: b.doQuad(); break; case 2: b.doSetTexture(); break; case 3: b.doSetOpacity(); break; case 4: b.doSetBlend(); break; case 5: b.doUpdateModelView(); break; case 6: b.doRenderToTexture(); break; case 7: b.doClear(); break; case 8: b.doPoints(); break; case 9: b.doSetProgram(); break; case 10: b.doSetProgramParameters(); break; case 11: b.doSetTexture1(); break; } } this.batchPtr = 0; this.vertexPtr = 0; this.pointPtr = 0; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; this.curBuffer++; if (this.curBuffer >= MULTI_BUFFERS) this.curBuffer = 0; }; GLWrap_.prototype.setOpacity = function (op) { if (op === this.lastOpacity) return; var b = this.pushBatch(); b.type = BATCH_SETOPACITY; b.opacityParam = op; this.lastOpacity = op; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setTexture = function (tex) { if (tex === this.lastTexture0) return; ; var b = this.pushBatch(); b.type = BATCH_SETTEXTURE; b.texParam = tex; this.lastTexture0 = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.setBlend = function (s, d) { if (s === this.lastSrcBlend && d === this.lastDestBlend) return; var b = this.pushBatch(); b.type = BATCH_SETBLEND; b.startIndex = s; // recycle params to save memory b.indexCount = d; this.lastSrcBlend = s; this.lastDestBlend = d; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.isPremultipliedAlphaBlend = function () { return (this.lastSrcBlend === this.gl.ONE && this.lastDestBlend === this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setAlphaBlend = function () { this.setBlend(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA); }; GLWrap_.prototype.setNoPremultiplyAlphaBlend = function () { this.setBlend(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA); }; var LAST_VERTEX = MAX_VERTICES * 2 - 8; GLWrap_.prototype.quad = function(tlx, tly, trx, try_, brx, bry, blx, bly) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = (v / 4) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } vd[v] = tlx; td[v++] = 0; vd[v] = tly; td[v++] = 0; vd[v] = trx; td[v++] = 1; vd[v] = try_; td[v++] = 0; vd[v] = brx; td[v++] = 1; vd[v] = bry; td[v++] = 1; vd[v] = blx; td[v++] = 0; vd[v] = bly; td[v++] = 1; this.vertexPtr = v; }; GLWrap_.prototype.quadTex = function(tlx, tly, trx, try_, brx, bry, blx, bly, rcTex) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = (v / 4) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } var rc_left = rcTex.left; var rc_top = rcTex.top; var rc_right = rcTex.right; var rc_bottom = rcTex.bottom; vd[v] = tlx; td[v++] = rc_left; vd[v] = tly; td[v++] = rc_top; vd[v] = trx; td[v++] = rc_right; vd[v] = try_; td[v++] = rc_top; vd[v] = brx; td[v++] = rc_right; vd[v] = bry; td[v++] = rc_bottom; vd[v] = blx; td[v++] = rc_left; vd[v] = bly; td[v++] = rc_bottom; this.vertexPtr = v; }; GLWrap_.prototype.quadTexUV = function(tlx, tly, trx, try_, brx, bry, blx, bly, tlu, tlv, tru, trv, bru, brv, blu, blv) { if (this.vertexPtr >= LAST_VERTEX) this.endBatch(); var v = this.vertexPtr; // vertex cursor var vd = this.vertexData; // vertex data array var td = this.texcoordData; // texture coord data array if (this.hasQuadBatchTop) { this.batch[this.batchPtr - 1].indexCount += 6; } else { var b = this.pushBatch(); b.type = BATCH_QUAD; b.startIndex = (v / 4) * 3; b.indexCount = 6; this.hasQuadBatchTop = true; this.hasPointBatchTop = false; } vd[v] = tlx; td[v++] = tlu; vd[v] = tly; td[v++] = tlv; vd[v] = trx; td[v++] = tru; vd[v] = try_; td[v++] = trv; vd[v] = brx; td[v++] = bru; vd[v] = bry; td[v++] = brv; vd[v] = blx; td[v++] = blu; vd[v] = bly; td[v++] = blv; this.vertexPtr = v; }; GLWrap_.prototype.convexPoly = function(pts) { var pts_count = pts.length / 2; ; var tris = pts_count - 2; // 3 points = 1 tri, 4 points = 2 tris, 5 points = 3 tris etc. var last_tri = tris - 1; var p0x = pts[0]; var p0y = pts[1]; var i, i2, p1x, p1y, p2x, p2y, p3x, p3y; for (i = 0; i < tris; i += 2) // draw 2 triangles at a time { i2 = i * 2; p1x = pts[i2 + 2]; p1y = pts[i2 + 3]; p2x = pts[i2 + 4]; p2y = pts[i2 + 5]; if (i === last_tri) { this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p2x, p2y); } else { p3x = pts[i2 + 6]; p3y = pts[i2 + 7]; this.quad(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y); } } }; var LAST_POINT = MAX_POINTS - 4; GLWrap_.prototype.point = function(x_, y_, size_, opacity_) { if (this.pointPtr >= LAST_POINT) this.endBatch(); var p = this.pointPtr; // point cursor var pd = this.pointData; // point data array if (this.hasPointBatchTop) { this.batch[this.batchPtr - 1].indexCount++; } else { var b = this.pushBatch(); b.type = BATCH_POINTS; b.startIndex = p; b.indexCount = 1; this.hasPointBatchTop = true; this.hasQuadBatchTop = false; } pd[p++] = x_; pd[p++] = y_; pd[p++] = size_; pd[p++] = opacity_; this.pointPtr = p; }; GLWrap_.prototype.switchProgram = function (progIndex) { if (this.lastProgram === progIndex) return; // no change var shaderProg = this.shaderPrograms[progIndex]; if (!shaderProg) { if (this.lastProgram === 0) return; // already on default shader progIndex = 0; shaderProg = this.shaderPrograms[0]; } var b = this.pushBatch(); b.type = BATCH_SETPROGRAM; b.startIndex = progIndex; this.lastProgram = progIndex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.programUsesDest = function (progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd); }; GLWrap_.prototype.programUsesCrossSampling = function (progIndex) { var s = this.shaderPrograms[progIndex]; return !!(s.locDestStart || s.locDestEnd || s.crossSampling); }; GLWrap_.prototype.programExtendsBox = function (progIndex) { var s = this.shaderPrograms[progIndex]; return s.extendBoxHorizontal !== 0 || s.extendBoxVertical !== 0; }; GLWrap_.prototype.getProgramBoxExtendHorizontal = function (progIndex) { return this.shaderPrograms[progIndex].extendBoxHorizontal; }; GLWrap_.prototype.getProgramBoxExtendVertical = function (progIndex) { return this.shaderPrograms[progIndex].extendBoxVertical; }; GLWrap_.prototype.getProgramParameterType = function (progIndex, paramIndex) { return this.shaderPrograms[progIndex].parameters[paramIndex][2]; }; GLWrap_.prototype.programIsAnimated = function (progIndex) { return this.shaderPrograms[progIndex].animated; }; GLWrap_.prototype.setProgramParameters = function (backTex, pixelWidth, pixelHeight, destStartX, destStartY, destEndX, destEndY, layerScale, layerAngle, viewOriginLeft, viewOriginTop, params) { var i, len; var s = this.shaderPrograms[this.lastProgram]; var b, mat4param, shaderParams; if (s.hasAnyOptionalUniforms || params.length) { b = this.pushBatch(); b.type = BATCH_SETPROGRAMPARAMETERS; if (b.mat4param) mat4.set(this.matMV, b.mat4param); else b.mat4param = mat4.create(); mat4param = b.mat4param; mat4param[0] = pixelWidth; mat4param[1] = pixelHeight; mat4param[2] = destStartX; mat4param[3] = destStartY; mat4param[4] = destEndX; mat4param[5] = destEndY; mat4param[6] = layerScale; mat4param[7] = layerAngle; mat4param[8] = viewOriginLeft; mat4param[9] = viewOriginTop; if (s.locSamplerBack) { ; b.texParam = backTex; } else b.texParam = null; if (params.length) { shaderParams = b.shaderParams; shaderParams.length = params.length; for (i = 0, len = params.length; i < len; i++) shaderParams[i] = params[i]; } this.hasQuadBatchTop = false; this.hasPointBatchTop = false; } }; GLWrap_.prototype.clear = function (r, g, b_, a) { var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 0; // clear all mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = r; b.mat4param[1] = g; b.mat4param[2] = b_; b.mat4param[3] = a; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.clearRect = function (x, y, w, h) { if (w < 0 || h < 0) return; // invalid clear area var b = this.pushBatch(); b.type = BATCH_CLEAR; b.startIndex = 1; // clear rect mode if (!b.mat4param) b.mat4param = mat4.create(); b.mat4param[0] = x; b.mat4param[1] = y; b.mat4param[2] = w; b.mat4param[3] = h; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; GLWrap_.prototype.present = function () { this.endBatch(); this.gl.flush(); /* if (debugBatch) { ; debugBatch = false; } */ }; function nextHighestPowerOfTwo(x) { --x; for (var i = 1; i < 32; i <<= 1) { x = x | x >> i; } return x + 1; } var all_textures = []; var textures_by_src = {}; var BF_RGBA8 = 0; var BF_RGB8 = 1; var BF_RGBA4 = 2; var BF_RGB5_A1 = 3; var BF_RGB565 = 4; GLWrap_.prototype.loadTexture = function (img, tiling, linearsampling, pixelformat, tiletype, nomip) { tiling = !!tiling; linearsampling = !!linearsampling; var tex_key = img.src + "," + tiling + "," + linearsampling + (tiling ? ("," + tiletype) : ""); var webGL_texture = null; if (typeof img.src !== "undefined" && textures_by_src.hasOwnProperty(tex_key)) { webGL_texture = textures_by_src[tex_key]; webGL_texture.c2refcount++; return webGL_texture; } this.endBatch(); ; var gl = this.gl; var isPOT = (cr.isPOT(img.width) && cr.isPOT(img.height)); webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); var internalformat = gl.RGBA; var format = gl.RGBA; var type = gl.UNSIGNED_BYTE; if (pixelformat && !this.isIE) { switch (pixelformat) { case BF_RGB8: internalformat = gl.RGB; format = gl.RGB; break; case BF_RGBA4: type = gl.UNSIGNED_SHORT_4_4_4_4; break; case BF_RGB5_A1: type = gl.UNSIGNED_SHORT_5_5_5_1; break; case BF_RGB565: internalformat = gl.RGB; format = gl.RGB; type = gl.UNSIGNED_SHORT_5_6_5; break; } } if (!isPOT && tiling) { var canvas = document.createElement("canvas"); canvas.width = cr.nextHighestPowerOfTwo(img.width); canvas.height = cr.nextHighestPowerOfTwo(img.height); var ctx = canvas.getContext("2d"); ctx["webkitImageSmoothingEnabled"] = linearsampling; ctx["mozImageSmoothingEnabled"] = linearsampling; ctx["msImageSmoothingEnabled"] = linearsampling; ctx["imageSmoothingEnabled"] = linearsampling; ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, canvas); } else gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, img); if (tiling) { if (tiletype === "repeat-x") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } else if (tiletype === "repeat-y") { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } if (linearsampling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); if (isPOT && this.enable_mipmaps && !nomip) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); gl.generateMipmap(gl.TEXTURE_2D); } else gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); } gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = img.width; webGL_texture.c2height = img.height; webGL_texture.c2refcount = 1; webGL_texture.c2texkey = tex_key; all_textures.push(webGL_texture); textures_by_src[tex_key] = webGL_texture; return webGL_texture; }; GLWrap_.prototype.createEmptyTexture = function (w, h, linearsampling, _16bit, tiling) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; var webGL_texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, webGL_texture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, null); if (tiling) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); } else { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST); gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; webGL_texture.c2width = w; webGL_texture.c2height = h; all_textures.push(webGL_texture); return webGL_texture; }; GLWrap_.prototype.videoToTexture = function (video_, texture_, _16bit) { this.endBatch(); var gl = this.gl; if (this.isIE) _16bit = false; gl.bindTexture(gl.TEXTURE_2D, texture_); gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, video_); gl.bindTexture(gl.TEXTURE_2D, null); this.lastTexture0 = null; }; GLWrap_.prototype.deleteTexture = function (tex) { if (!tex) return; if (typeof tex.c2refcount !== "undefined" && tex.c2refcount > 1) { tex.c2refcount--; return; } this.endBatch(); if (tex === this.lastTexture0) { this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.lastTexture0 = null; } if (tex === this.lastTexture1) { this.gl.activeTexture(this.gl.TEXTURE1); this.gl.bindTexture(this.gl.TEXTURE_2D, null); this.gl.activeTexture(this.gl.TEXTURE0); this.lastTexture1 = null; } cr.arrayFindRemove(all_textures, tex); if (typeof tex.c2texkey !== "undefined") delete textures_by_src[tex.c2texkey]; this.gl.deleteTexture(tex); }; GLWrap_.prototype.estimateVRAM = function () { var total = this.width * this.height * 4 * 2; var i, len, t; for (i = 0, len = all_textures.length; i < len; i++) { t = all_textures[i]; total += (t.c2width * t.c2height * 4); } return total; }; GLWrap_.prototype.textureCount = function () { return all_textures.length; }; GLWrap_.prototype.setRenderingToTexture = function (tex) { if (tex === this.renderToTex) return; ; var b = this.pushBatch(); b.type = BATCH_RENDERTOTEXTURE; b.texParam = tex; this.renderToTex = tex; this.hasQuadBatchTop = false; this.hasPointBatchTop = false; }; cr.GLWrap = GLWrap_; }()); ; (function() { function Runtime(canvas) { if (!canvas || (!canvas.getContext && !canvas["dc"])) return; if (canvas["c2runtime"]) return; else canvas["c2runtime"] = this; var self = this; this.isCrosswalk = /crosswalk/i.test(navigator.userAgent) || /xwalk/i.test(navigator.userAgent) || !!(typeof window["c2isCrosswalk"] !== "undefined" && window["c2isCrosswalk"]); this.isPhoneGap = (!this.isCrosswalk && (typeof window["device"] !== "undefined" && (typeof window["device"]["cordova"] !== "undefined" || typeof window["device"]["phonegap"] !== "undefined"))) || (typeof window["c2isphonegap"] !== "undefined" && window["c2isphonegap"]); this.isDirectCanvas = !!canvas["dc"]; this.isAppMobi = (typeof window["AppMobi"] !== "undefined" || this.isDirectCanvas); this.isCocoonJs = !!window["c2cocoonjs"]; this.isEjecta = !!window["c2ejecta"]; if (this.isCocoonJs) { CocoonJS["App"]["onSuspended"].addEventListener(function() { self["setSuspended"](true); }); CocoonJS["App"]["onActivated"].addEventListener(function () { self["setSuspended"](false); }); } if (this.isEjecta) { document.addEventListener("pagehide", function() { self["setSuspended"](true); }); document.addEventListener("pageshow", function() { self["setSuspended"](false); }); document.addEventListener("resize", function () { self["setSize"](window.innerWidth, window.innerHeight); }); } this.isDomFree = (this.isDirectCanvas || this.isCocoonJs || this.isEjecta); this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent) || /iemobile/i.test(navigator.userAgent); this.isTizen = /tizen/i.test(navigator.userAgent); this.isAndroid = /android/i.test(navigator.userAgent) && !this.isTizen && !this.isIE; // IE mobile and Tizen masquerade as Android this.isiPhone = (/iphone/i.test(navigator.userAgent) || /ipod/i.test(navigator.userAgent)) && !this.isIE; // treat ipod as an iphone; IE mobile masquerades as iPhone this.isiPad = /ipad/i.test(navigator.userAgent); this.isiOS = this.isiPhone || this.isiPad || this.isEjecta; this.isiPhoneiOS6 = (this.isiPhone && /os\s6/i.test(navigator.userAgent)); this.isChrome = /chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent); this.isAmazonWebApp = /amazonwebappplatform/i.test(navigator.userAgent); this.isFirefox = /firefox/i.test(navigator.userAgent); this.isSafari = /safari/i.test(navigator.userAgent) && !this.isChrome && !this.isIE; // Chrome and IE Mobile masquerade as Safari this.isWindows = /windows/i.test(navigator.userAgent); this.isNodeWebkit = (typeof window["c2nodewebkit"] !== "undefined" || /nodewebkit/i.test(navigator.userAgent)); this.isArcade = (typeof window["is_scirra_arcade"] !== "undefined"); this.isWindows8App = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.isWindows8Capable = !!(typeof window["c2isWindows8Capable"] !== "undefined" && window["c2isWindows8Capable"]); this.isWindowsPhone8 = !!(typeof window["c2isWindowsPhone8"] !== "undefined" && window["c2isWindowsPhone8"]); this.isWindowsPhone81 = !!(typeof window["c2isWindowsPhone81"] !== "undefined" && window["c2isWindowsPhone81"]); this.isWinJS = (this.isWindows8App || this.isWindows8Capable || this.isWindowsPhone81); // note not WP8.0 this.isBlackberry10 = !!(typeof window["c2isBlackberry10"] !== "undefined" && window["c2isBlackberry10"]); this.isAndroidStockBrowser = (this.isAndroid && !this.isChrome && !this.isFirefox && !this.isAmazonWebApp && !this.isDomFree); this.devicePixelRatio = 1; this.isMobile = (this.isPhoneGap || this.isCrosswalk || this.isAppMobi || this.isCocoonJs || this.isAndroid || this.isiOS || this.isWindowsPhone8 || this.isWindowsPhone81 || this.isBlackberry10 || this.isTizen || this.isEjecta); if (!this.isMobile) { this.isMobile = /(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent); } if (typeof cr_is_preview !== "undefined" && !this.isNodeWebkit && (window.location.search === "?nw" || /nodewebkit/i.test(navigator.userAgent))) { this.isNodeWebkit = true; } this.isDebug = (typeof cr_is_preview !== "undefined" && window.location.search.indexOf("debug") > -1); this.canvas = canvas; this.canvasdiv = document.getElementById("c2canvasdiv"); this.gl = null; this.glwrap = null; this.ctx = null; this.fullscreenOldMarginCss = ""; this.firstInFullscreen = false; this.oldWidth = 0; // for restoring non-fullscreen canvas after fullscreen this.oldHeight = 0; this.canvas.oncontextmenu = function (e) { if (e.preventDefault) e.preventDefault(); return false; }; this.canvas.onselectstart = function (e) { if (e.preventDefault) e.preventDefault(); return false; }; if (this.isDirectCanvas) window["c2runtime"] = this; if (this.isNodeWebkit) { window["ondragover"] = function(e) { e.preventDefault(); return false; }; window["ondrop"] = function(e) { e.preventDefault(); return false; }; require("nw.gui")["App"]["clearCache"](); } this.width = canvas.width; this.height = canvas.height; this.draw_width = this.width; this.draw_height = this.height; this.cssWidth = this.width; this.cssHeight = this.height; this.lastWindowWidth = window.innerWidth; this.lastWindowHeight = window.innerHeight; this.redraw = true; this.isSuspended = false; if (!Date.now) { Date.now = function now() { return +new Date(); }; } this.plugins = []; this.types = {}; this.types_by_index = []; this.behaviors = []; this.layouts = {}; this.layouts_by_index = []; this.eventsheets = {}; this.eventsheets_by_index = []; this.wait_for_textures = []; // for blocking until textures loaded this.triggers_to_postinit = []; this.all_global_vars = []; this.all_local_vars = []; this.solidBehavior = null; this.jumpthruBehavior = null; this.shadowcasterBehavior = null; this.deathRow = new cr.ObjectSet(); this.isInClearDeathRow = false; this.isInOnDestroy = 0; // needs to support recursion so increments and decrements and is true if > 0 this.isRunningEvents = false; this.createRow = []; this.isLoadingState = false; this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = ""; this.lastSaveJson = ""; this.signalledContinuousPreview = false; this.suspendDrawing = false; // for hiding display until continuous preview loads this.dt = 0; this.dt1 = 0; this.logictime = 0; // used to calculate CPUUtilisation this.cpuutilisation = 0; this.zeroDtCount = 0; this.timescale = 1.0; this.kahanTime = new cr.KahanAdder(); this.last_tick_time = 0; this.measuring_dt = true; this.fps = 0; this.last_fps_time = 0; this.tickcount = 0; this.execcount = 0; this.framecount = 0; // for fps this.objectcount = 0; this.changelayout = null; this.destroycallbacks = []; this.event_stack = []; this.event_stack_index = -1; this.localvar_stack = [[]]; this.localvar_stack_index = 0; this.trigger_depth = 0; // recursion depth for triggers this.pushEventStack(null); this.loop_stack = []; this.loop_stack_index = -1; this.next_uid = 0; this.next_puid = 0; // permanent unique ids this.layout_first_tick = true; this.family_count = 0; this.suspend_events = []; this.raf_id = -1; this.timeout_id = -1; this.isloading = true; this.loadingprogress = 0; this.isNodeFullscreen = false; this.stackLocalCount = 0; // number of stack-based local vars for recursion this.audioInstance = null; this.halfFramerateMode = false; this.lastRafTime = 0; // time of last requestAnimationFrame call this.ranLastRaf = false; // false if last requestAnimationFrame was skipped for half framerate mode this.had_a_click = false; this.isInUserInputEvent = false; this.objects_to_pretick = new cr.ObjectSet(); this.objects_to_tick = new cr.ObjectSet(); this.objects_to_tick2 = new cr.ObjectSet(); this.registered_collisions = []; this.temp_poly = new cr.CollisionPoly([]); this.temp_poly2 = new cr.CollisionPoly([]); this.allGroups = []; // array of all event groups this.groups_by_name = {}; this.cndsBySid = {}; this.actsBySid = {}; this.varsBySid = {}; this.blocksBySid = {}; this.running_layout = null; // currently running layout this.layer_canvas = null; // for layers "render-to-texture" this.layer_ctx = null; this.layer_tex = null; this.layout_tex = null; this.layout_canvas = null; this.layout_ctx = null; this.is_WebGL_context_lost = false; this.uses_background_blending = false; // if any shader uses background blending, so entire layout renders to texture this.fx_tex = [null, null]; this.fullscreen_scaling = 0; this.files_subfolder = ""; // path with project files this.objectsByUid = {}; // maps every in-use UID (as a string) to its instance this.loaderlogo = null; this.snapshotCanvas = null; this.snapshotData = ""; this.load(); this.isRetina = ((!this.isDomFree || this.isEjecta) && this.useHighDpi && !this.isAndroidStockBrowser); this.devicePixelRatio = (this.isRetina ? (window["devicePixelRatio"] || window["webkitDevicePixelRatio"] || window["mozDevicePixelRatio"] || window["msDevicePixelRatio"] || 1) : 1); this.ClearDeathRow(); var attribs; var alpha_canvas = this.alphaBackground && !(this.isNodeWebkit || this.isWinJS || this.isWindowsPhone8 || this.isCrosswalk); if (this.fullscreen_mode > 0) this["setSize"](window.innerWidth, window.innerHeight, true); try { if (this.enableWebGL && (this.isCocoonJs || this.isEjecta || !this.isDomFree)) { attribs = { "alpha": alpha_canvas, "depth": false, "antialias": false, "failIfMajorPerformanceCaveat": true }; this.gl = (canvas.getContext("webgl", attribs) || canvas.getContext("experimental-webgl", attribs)); } } catch (e) { } if (this.gl) { ; if (!this.isDomFree) { this.overlay_canvas = document.createElement("canvas"); jQuery(this.overlay_canvas).appendTo(this.canvas.parentNode); this.overlay_canvas.oncontextmenu = function (e) { return false; }; this.overlay_canvas.onselectstart = function (e) { return false; }; this.overlay_canvas.width = this.cssWidth; this.overlay_canvas.height = this.cssHeight; jQuery(this.overlay_canvas).css({"width": this.cssWidth + "px", "height": this.cssHeight + "px"}); this.positionOverlayCanvas(); this.overlay_ctx = this.overlay_canvas.getContext("2d"); } this.glwrap = new cr.GLWrap(this.gl, this.isMobile); this.glwrap.setSize(canvas.width, canvas.height); this.glwrap.enable_mipmaps = (this.downscalingQuality !== 0); this.ctx = null; this.canvas.addEventListener("webglcontextlost", function (ev) { ev.preventDefault(); self.onContextLost(); console.log("[Construct 2] WebGL context lost"); window["cr_setSuspended"](true); // stop rendering }, false); this.canvas.addEventListener("webglcontextrestored", function (ev) { self.glwrap.initState(); self.glwrap.setSize(self.glwrap.width, self.glwrap.height, true); self.layer_tex = null; self.layout_tex = null; self.fx_tex[0] = null; self.fx_tex[1] = null; self.onContextRestored(); self.redraw = true; console.log("[Construct 2] WebGL context restored"); window["cr_setSuspended"](false); // resume rendering }, false); var i, len, j, lenj, k, lenk, t, s, l, y; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; for (j = 0, lenj = t.effect_types.length; j < lenj; j++) { s = t.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { l = this.layouts_by_index[i]; for (j = 0, lenj = l.effect_types.length; j < lenj; j++) { s = l.effect_types[j]; s.shaderindex = this.glwrap.getShaderIndex(s.id); } for (j = 0, lenj = l.layers.length; j < lenj; j++) { y = l.layers[j]; for (k = 0, lenk = y.effect_types.length; k < lenk; k++) { s = y.effect_types[k]; s.shaderindex = this.glwrap.getShaderIndex(s.id); this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex); } } } } else { if (this.fullscreen_mode > 0 && this.isDirectCanvas) { ; this.canvas = null; document.oncontextmenu = function (e) { return false; }; document.onselectstart = function (e) { return false; }; this.ctx = AppMobi["canvas"]["getContext"]("2d"); try { this.ctx["samplingMode"] = this.linearSampling ? "smooth" : "sharp"; this.ctx["globalScale"] = 1; this.ctx["HTML5CompatibilityMode"] = true; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } catch(e){} if (this.width !== 0 && this.height !== 0) { this.ctx.width = this.width; this.ctx.height = this.height; } } if (!this.ctx) { ; if (this.isCocoonJs) { attribs = { "antialias": !!this.linearSampling, "alpha": alpha_canvas }; this.ctx = canvas.getContext("2d", attribs); } else { attribs = { "alpha": alpha_canvas }; this.ctx = canvas.getContext("2d", attribs); } this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling; this.ctx["mozImageSmoothingEnabled"] = this.linearSampling; this.ctx["msImageSmoothingEnabled"] = this.linearSampling; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } this.overlay_canvas = null; this.overlay_ctx = null; } this.tickFunc = function () { self.tick(false); }; if (window != window.top && !this.isDomFree && !this.isWinJS && !this.isWindowsPhone8) { document.addEventListener("mousedown", function () { window.focus(); }, true); document.addEventListener("touchstart", function () { window.focus(); }, true); } if (typeof cr_is_preview !== "undefined") { if (this.isCocoonJs) console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"); if (window.location.search.indexOf("continuous") > -1) { cr.logexport("Reloading for continuous preview"); this.loadFromSlot = "__c2_continuouspreview"; this.suspendDrawing = true; } if (this.pauseOnBlur && !this.isMobile) { jQuery(window).focus(function () { self["setSuspended"](false); }); jQuery(window).blur(function () { self["setSuspended"](true); }); } } var unfocusFormControlFunc = function (e) { if (cr.isCanvasInputEvent(e) && document["activeElement"] && document["activeElement"].blur) { document["activeElement"].blur(); } } if (window.navigator["pointerEnabled"]) { document.addEventListener("pointerdown", unfocusFormControlFunc); } else if (window.navigator["msPointerEnabled"]) { document.addEventListener("MSPointerDown", unfocusFormControlFunc); } else { document.addEventListener("touchstart", unfocusFormControlFunc); } if (this.fullscreen_mode === 0 && this.isRetina && this.devicePixelRatio > 1) { this["setSize"](this.original_width, this.original_height, true); } this.tryLockOrientation(); this.getready(); // determine things to preload this.go(); // run loading screen this.extra = {}; cr.seal(this); }; var webkitRepaintFlag = false; Runtime.prototype["setSize"] = function (w, h, force) { var offx = 0, offy = 0; var neww = 0, newh = 0, intscale = 0; var tryHideAddressBar = (this.isiPhoneiOS6 && this.isSafari && !navigator["standalone"] && !this.isDomFree && !this.isPhoneGap); if (tryHideAddressBar) h += 60; // height of Safari iPhone iOS 6 address bar if (this.lastWindowWidth === w && this.lastWindowHeight === h && !force) return; this.lastWindowWidth = w; this.lastWindowHeight = h; var mode = this.fullscreen_mode; var orig_aspect, cur_aspect; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen) && !this.isPhoneGap; if (!isfullscreen && this.fullscreen_mode === 0 && !force) return; // ignore size events when not fullscreen and not using a fullscreen-in-browser mode if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; var dpr = this.devicePixelRatio; if (mode >= 4) { orig_aspect = this.original_width / this.original_height; cur_aspect = w / h; if (cur_aspect > orig_aspect) { neww = h * orig_aspect; if (mode === 5) // integer scaling { intscale = (neww * dpr) / this.original_width; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offx = (w - neww) / 2; w = neww; } } else { newh = w / orig_aspect; if (mode === 5) // integer scaling { intscale = (newh * dpr) / this.original_height; if (intscale > 1) intscale = Math.floor(intscale); else if (intscale < 1) intscale = 1 / Math.ceil(1 / intscale); neww = this.original_width * intscale / dpr; newh = this.original_height * intscale / dpr; offx = (w - neww) / 2; offy = (h - newh) / 2; w = neww; h = newh; } else { offy = (h - newh) / 2; h = newh; } } if (isfullscreen && !this.isNodeWebkit) { offx = 0; offy = 0; } } else if (this.isNodeWebkit && this.isNodeFullscreen && this.fullscreen_mode_set === 0) { offx = Math.floor((w - this.original_width) / 2); offy = Math.floor((h - this.original_height) / 2); w = this.original_width; h = this.original_height; } if (mode < 2) this.aspect_scale = dpr; if (this.isRetina && this.isiPad && dpr > 1) // don't apply to iPad 1-2 { if (w >= 1024) w = 1023; // 2046 retina pixels if (h >= 1024) h = 1023; } this.cssWidth = Math.round(w); this.cssHeight = Math.round(h); this.width = Math.round(w * dpr); this.height = Math.round(h * dpr); this.redraw = true; if (this.wantFullscreenScalingQuality) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { if ((this.width < this.original_width && this.height < this.original_height) || mode === 1) { this.draw_width = this.width; this.draw_height = this.height; this.fullscreenScalingQuality = true; } else { this.draw_width = this.original_width; this.draw_height = this.original_height; this.fullscreenScalingQuality = false; /*var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width;*/ if (mode === 2) // scale inner { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect < orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect > orig_aspect) this.draw_height = this.draw_width / cur_aspect; } else if (mode === 3) { orig_aspect = this.original_width / this.original_height; cur_aspect = this.lastWindowWidth / this.lastWindowHeight; if (cur_aspect > orig_aspect) this.draw_width = this.draw_height * cur_aspect; else if (cur_aspect < orig_aspect) this.draw_height = this.draw_width / cur_aspect; } } } if (this.canvasdiv && !this.isDomFree) { jQuery(this.canvasdiv).css({"width": Math.round(w) + "px", "height": Math.round(h) + "px", "margin-left": Math.floor(offx) + "px", "margin-top": Math.floor(offy) + "px"}); if (typeof cr_is_preview !== "undefined") { jQuery("#borderwrap").css({"width": Math.round(w) + "px", "height": Math.round(h) + "px"}); } } if (this.canvas) { this.canvas.width = Math.round(w * dpr); this.canvas.height = Math.round(h * dpr); if (this.isEjecta) { this.canvas.style.left = Math.floor(offx) + "px"; this.canvas.style.top = Math.floor(offy) + "px"; this.canvas.style.width = Math.round(w) + "px"; this.canvas.style.height = Math.round(h) + "px"; } else if (this.isRetina && !this.isDomFree) { jQuery(this.canvas).css({"width": Math.round(w) + "px", "height": Math.round(h) + "px"}); } } if (this.overlay_canvas) { this.overlay_canvas.width = Math.round(w); this.overlay_canvas.height = Math.round(h); jQuery(this.overlay_canvas).css({"width": Math.round(w) + "px", "height": Math.round(h) + "px"}); } if (this.glwrap) { this.glwrap.setSize(Math.round(w * dpr), Math.round(h * dpr)); } if (this.isDirectCanvas && this.ctx) { this.ctx.width = Math.round(w); this.ctx.height = Math.round(h); } if (this.ctx) { this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling; this.ctx["mozImageSmoothingEnabled"] = this.linearSampling; this.ctx["msImageSmoothingEnabled"] = this.linearSampling; this.ctx["imageSmoothingEnabled"] = this.linearSampling; } this.tryLockOrientation(); if (!this.isDomFree && (tryHideAddressBar || this.isiPhone)) { window.setTimeout(function () { window.scrollTo(0, 1); }, 100); } }; Runtime.prototype.tryLockOrientation = function () { if (!this.autoLockOrientation || this.orientations === 0) return; var orientation = "portrait"; if (this.orientations === 2) orientation = "landscape"; if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); }; Runtime.prototype.onContextLost = function () { this.is_WebGL_context_lost = true; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onLostWebGLContext) t.onLostWebGLContext(); } }; Runtime.prototype.onContextRestored = function () { this.is_WebGL_context_lost = false; var i, len, t; for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onRestoreWebGLContext) t.onRestoreWebGLContext(); } }; Runtime.prototype.positionOverlayCanvas = function() { if (this.isDomFree) return; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isPhoneGap; var overlay_position = isfullscreen ? jQuery(this.canvas).offset() : jQuery(this.canvas).position(); overlay_position.position = "absolute"; jQuery(this.overlay_canvas).css(overlay_position); }; var caf = window["cancelAnimationFrame"] || window["mozCancelAnimationFrame"] || window["webkitCancelAnimationFrame"] || window["msCancelAnimationFrame"] || window["oCancelAnimationFrame"]; Runtime.prototype["setSuspended"] = function (s) { var i, len; if (s && !this.isSuspended) { cr.logexport("[Construct 2] Suspending"); this.isSuspended = true; // next tick will be last if (this.raf_id !== -1 && caf) // note: CocoonJS does not implement cancelAnimationFrame caf(this.raf_id); if (this.timeout_id !== -1) clearTimeout(this.timeout_id); for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](true); } else if (!s && this.isSuspended) { cr.logexport("[Construct 2] Resuming"); this.isSuspended = false; this.last_tick_time = cr.performance_now(); // ensure first tick is a zero-dt one this.last_fps_time = cr.performance_now(); // reset FPS counter this.framecount = 0; this.logictime = 0; for (i = 0, len = this.suspend_events.length; i < len; i++) this.suspend_events[i](false); this.tick(false); // kick off runtime again } }; Runtime.prototype.addSuspendCallback = function (f) { this.suspend_events.push(f); }; Runtime.prototype.load = function () { ; var pm = cr.getProjectModel(); this.name = pm[0]; this.first_layout = pm[1]; this.fullscreen_mode = pm[12]; // 0 = off, 1 = crop, 2 = scale inner, 3 = scale outer, 4 = letterbox scale, 5 = integer letterbox scale this.fullscreen_mode_set = pm[12]; this.original_width = pm[10]; this.original_height = pm[11]; this.parallax_x_origin = this.original_width / 2; this.parallax_y_origin = this.original_height / 2; if (this.isDomFree && !this.isEjecta && (pm[12] >= 4 || pm[12] === 0)) { cr.logexport("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"); this.fullscreen_mode = 3; this.fullscreen_mode_set = 3; } this.uses_loader_layout = pm[18]; this.loaderstyle = pm[19]; if (this.loaderstyle === 0) { this.loaderlogo = new Image(); this.loaderlogo.src = "loading-logo.png"; } this.next_uid = pm[21]; this.system = new cr.system_object(this); var i, len, j, lenj, k, lenk, idstr, m, b, t, f; var plugin, plugin_ctor; for (i = 0, len = pm[2].length; i < len; i++) { m = pm[2][i]; ; cr.add_common_aces(m); plugin = new m[0](this); plugin.singleglobal = m[1]; plugin.is_world = m[2]; plugin.must_predraw = m[9]; if (plugin.onCreate) plugin.onCreate(); // opportunity to override default ACEs cr.seal(plugin); this.plugins.push(plugin); } pm = cr.getProjectModel(); for (i = 0, len = pm[3].length; i < len; i++) { m = pm[3][i]; plugin_ctor = m[1]; ; plugin = null; for (j = 0, lenj = this.plugins.length; j < lenj; j++) { if (this.plugins[j] instanceof plugin_ctor) { plugin = this.plugins[j]; break; } } ; ; var type_inst = new plugin.Type(plugin); ; type_inst.name = m[0]; type_inst.is_family = m[2]; type_inst.instvar_sids = m[3].slice(0); type_inst.vars_count = m[3].length; type_inst.behs_count = m[4]; type_inst.fx_count = m[5]; type_inst.sid = m[11]; if (type_inst.is_family) { type_inst.members = []; // types in this family type_inst.family_index = this.family_count++; type_inst.families = null; } else { type_inst.members = null; type_inst.family_index = -1; type_inst.families = []; // families this type belongs to } type_inst.family_var_map = null; type_inst.family_beh_map = null; type_inst.family_fx_map = null; type_inst.is_contained = false; type_inst.container = null; if (m[6]) { type_inst.texture_file = m[6][0]; type_inst.texture_filesize = m[6][1]; type_inst.texture_pixelformat = m[6][2]; } else { type_inst.texture_file = null; type_inst.texture_filesize = 0; type_inst.texture_pixelformat = 0; // rgba8 } if (m[7]) { type_inst.animations = m[7]; } else { type_inst.animations = null; } type_inst.index = i; // save index in to types array in type type_inst.instances = []; // all instances of this type type_inst.deadCache = []; // destroyed instances to recycle next create type_inst.solstack = [new cr.selection(type_inst)]; // initialise SOL stack with one empty SOL type_inst.cur_sol = 0; type_inst.default_instance = null; type_inst.default_layerindex = 0; type_inst.stale_iids = true; type_inst.updateIIDs = cr.type_updateIIDs; type_inst.getFirstPicked = cr.type_getFirstPicked; type_inst.getPairedInstance = cr.type_getPairedInstance; type_inst.getCurrentSol = cr.type_getCurrentSol; type_inst.pushCleanSol = cr.type_pushCleanSol; type_inst.pushCopySol = cr.type_pushCopySol; type_inst.popSol = cr.type_popSol; type_inst.getBehaviorByName = cr.type_getBehaviorByName; type_inst.getBehaviorIndexByName = cr.type_getBehaviorIndexByName; type_inst.getEffectIndexByName = cr.type_getEffectIndexByName; type_inst.applySolToContainer = cr.type_applySolToContainer; type_inst.getInstanceByIID = cr.type_getInstanceByIID; type_inst.collision_grid = new cr.SparseGrid(this.original_width, this.original_height); type_inst.any_cell_changed = true; type_inst.any_instance_parallaxed = false; type_inst.extra = {}; type_inst.toString = cr.type_toString; type_inst.behaviors = []; for (j = 0, lenj = m[8].length; j < lenj; j++) { b = m[8][j]; var behavior_ctor = b[1]; var behavior_plugin = null; for (k = 0, lenk = this.behaviors.length; k < lenk; k++) { if (this.behaviors[k] instanceof behavior_ctor) { behavior_plugin = this.behaviors[k]; break; } } if (!behavior_plugin) { behavior_plugin = new behavior_ctor(this); behavior_plugin.my_types = []; // types using this behavior behavior_plugin.my_instances = new cr.ObjectSet(); // instances of this behavior if (behavior_plugin.onCreate) behavior_plugin.onCreate(); cr.seal(behavior_plugin); this.behaviors.push(behavior_plugin); if (cr.behaviors.solid && behavior_plugin instanceof cr.behaviors.solid) this.solidBehavior = behavior_plugin; if (cr.behaviors.jumpthru && behavior_plugin instanceof cr.behaviors.jumpthru) this.jumpthruBehavior = behavior_plugin; if (cr.behaviors.shadowcaster && behavior_plugin instanceof cr.behaviors.shadowcaster) this.shadowcasterBehavior = behavior_plugin; } if (behavior_plugin.my_types.indexOf(type_inst) === -1) behavior_plugin.my_types.push(type_inst); var behavior_type = new behavior_plugin.Type(behavior_plugin, type_inst); behavior_type.name = b[0]; behavior_type.sid = b[2]; behavior_type.onCreate(); cr.seal(behavior_type); type_inst.behaviors.push(behavior_type); } type_inst.global = m[9]; type_inst.isOnLoaderLayout = m[10]; type_inst.effect_types = []; for (j = 0, lenj = m[12].length; j < lenj; j++) { type_inst.effect_types.push({ id: m[12][j][0], name: m[12][j][1], shaderindex: -1, active: true, index: j }); } type_inst.tile_poly_data = m[13]; if (!this.uses_loader_layout || type_inst.is_family || type_inst.isOnLoaderLayout || !plugin.is_world) { type_inst.onCreate(); cr.seal(type_inst); } if (type_inst.name) this.types[type_inst.name] = type_inst; this.types_by_index.push(type_inst); if (plugin.singleglobal) { var instance = new plugin.Instance(type_inst); instance.uid = this.next_uid++; instance.puid = this.next_puid++; instance.iid = 0; instance.get_iid = cr.inst_get_iid; instance.toString = cr.inst_toString; instance.properties = m[14]; instance.onCreate(); cr.seal(instance); type_inst.instances.push(instance); this.objectsByUid[instance.uid.toString()] = instance; } } for (i = 0, len = pm[4].length; i < len; i++) { var familydata = pm[4][i]; var familytype = this.types_by_index[familydata[0]]; var familymember; for (j = 1, lenj = familydata.length; j < lenj; j++) { familymember = this.types_by_index[familydata[j]]; familymember.families.push(familytype); familytype.members.push(familymember); } } for (i = 0, len = pm[26].length; i < len; i++) { var containerdata = pm[26][i]; var containertypes = []; for (j = 0, lenj = containerdata.length; j < lenj; j++) containertypes.push(this.types_by_index[containerdata[j]]); for (j = 0, lenj = containertypes.length; j < lenj; j++) { containertypes[j].is_contained = true; containertypes[j].container = containertypes; } } if (this.family_count > 0) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.is_family || !t.families.length) continue; t.family_var_map = new Array(this.family_count); t.family_beh_map = new Array(this.family_count); t.family_fx_map = new Array(this.family_count); var all_fx = []; var varsum = 0; var behsum = 0; var fxsum = 0; for (j = 0, lenj = t.families.length; j < lenj; j++) { f = t.families[j]; t.family_var_map[f.family_index] = varsum; varsum += f.vars_count; t.family_beh_map[f.family_index] = behsum; behsum += f.behs_count; t.family_fx_map[f.family_index] = fxsum; fxsum += f.fx_count; for (k = 0, lenk = f.effect_types.length; k < lenk; k++) all_fx.push(cr.shallowCopy({}, f.effect_types[k])); } t.effect_types = all_fx.concat(t.effect_types); for (j = 0, lenj = t.effect_types.length; j < lenj; j++) t.effect_types[j].index = j; } } for (i = 0, len = pm[5].length; i < len; i++) { m = pm[5][i]; var layout = new cr.layout(this, m); cr.seal(layout); this.layouts[layout.name] = layout; this.layouts_by_index.push(layout); } for (i = 0, len = pm[6].length; i < len; i++) { m = pm[6][i]; var sheet = new cr.eventsheet(this, m); cr.seal(sheet); this.eventsheets[sheet.name] = sheet; this.eventsheets_by_index.push(sheet); } for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].postInit(); for (i = 0, len = this.eventsheets_by_index.length; i < len; i++) this.eventsheets_by_index[i].updateDeepIncludes(); for (i = 0, len = this.triggers_to_postinit.length; i < len; i++) this.triggers_to_postinit[i].postInit(); this.triggers_to_postinit.length = 0; this.audio_to_preload = pm[7]; this.files_subfolder = pm[8]; this.pixel_rounding = pm[9]; this.aspect_scale = 1.0; this.enableWebGL = pm[13]; this.linearSampling = pm[14]; this.alphaBackground = pm[15]; this.versionstr = pm[16]; this.useHighDpi = pm[17]; this.orientations = pm[20]; // 0 = any, 1 = portrait, 2 = landscape this.autoLockOrientation = (this.orientations > 0); this.pauseOnBlur = pm[22]; this.wantFullscreenScalingQuality = pm[23]; // false = low quality, true = high quality this.fullscreenScalingQuality = this.wantFullscreenScalingQuality; this.downscalingQuality = pm[24]; // 0 = low (mips off), 1 = medium (mips on, dense spritesheet), 2 = high (mips on, sparse spritesheet) this.preloadSounds = pm[25]; // 0 = no, 1 = yes this.start_time = Date.now(); }; var anyImageHadError = false; Runtime.prototype.waitForImageLoad = function (img_) { img_.onerror = function (e) { img_.c2error = true; anyImageHadError = true; if (console && console.error) console.error("Error loading image '" + img_.src + "': ", e); }; this.wait_for_textures.push(img_); }; Runtime.prototype.findWaitingTexture = function (src_) { var i, len; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { if (this.wait_for_textures[i].cr_src === src_) return this.wait_for_textures[i]; } return null; }; var audio_preload_totalsize = 0; var audio_preload_started = false; Runtime.prototype.getready = function () { if (!this.audioInstance) return; audio_preload_totalsize = this.audioInstance.setPreloadList(this.audio_to_preload); }; Runtime.prototype.areAllTexturesAndSoundsLoaded = function () { var totalsize = audio_preload_totalsize; var completedsize = 0; var audiocompletedsize = 0; var ret = true; var i, len, img; for (i = 0, len = this.wait_for_textures.length; i < len; i++) { img = this.wait_for_textures[i]; var filesize = img.cr_filesize; if (!filesize || filesize <= 0) filesize = 50000; totalsize += filesize; if ((img.complete || img["loaded"]) && !img.c2error) completedsize += filesize; else ret = false; // not all textures loaded } if (ret && this.preloadSounds && this.audioInstance) { if (!audio_preload_started) { this.audioInstance.startPreloads(); audio_preload_started = true; } audiocompletedsize = this.audioInstance.getPreloadedSize(); completedsize += audiocompletedsize; if (audiocompletedsize < audio_preload_totalsize) ret = false; // not done yet } if (totalsize == 0) this.progress = 0; else this.progress = (completedsize / totalsize); return ret; }; Runtime.prototype.go = function () { if (!this.ctx && !this.glwrap) return; var ctx = this.ctx || this.overlay_ctx; if (this.overlay_canvas) this.positionOverlayCanvas(); this.progress = 0; this.last_progress = -1; if (this.areAllTexturesAndSoundsLoaded()) this.go_loading_finished(); else { var ms_elapsed = Date.now() - this.start_time; if (ctx) { var overlay_width = this.width; var overlay_height = this.height; var multiplier = this.devicePixelRatio; if (this.overlay_canvas) { overlay_width = this.cssWidth; overlay_height = this.cssHeight; multiplier = 1; } if (this.loaderstyle !== 3 && (this.isCocoonJs || (ms_elapsed >= 500 && this.last_progress != this.progress))) { ctx.clearRect(0, 0, overlay_width, overlay_height); var mx = overlay_width / 2; var my = overlay_height / 2; var haslogo = (this.loaderstyle === 0 && this.loaderlogo.complete); var hlw = 40 * multiplier; var hlh = 0; var logowidth = 80 * multiplier; var logoheight; if (haslogo) { logowidth = this.loaderlogo.width * multiplier; logoheight = this.loaderlogo.height * multiplier; hlw = logowidth / 2; hlh = logoheight / 2; ctx.drawImage(this.loaderlogo, cr.floor(mx - hlw), cr.floor(my - hlh), logowidth, logoheight); } if (this.loaderstyle <= 1) { my += hlh + (haslogo ? 12 * multiplier : 0); mx -= hlw; mx = cr.floor(mx) + 0.5; my = cr.floor(my) + 0.5; ctx.fillStyle = anyImageHadError ? "red" : "DodgerBlue"; ctx.fillRect(mx, my, Math.floor(logowidth * this.progress), 6 * multiplier); ctx.strokeStyle = "black"; ctx.strokeRect(mx, my, logowidth, 6 * multiplier); ctx.strokeStyle = "white"; ctx.strokeRect(mx - 1 * multiplier, my - 1 * multiplier, logowidth + 2 * multiplier, 8 * multiplier); } else if (this.loaderstyle === 2) { ctx.font = (this.isEjecta ? "12pt ArialMT" : "12pt Arial"); ctx.fillStyle = anyImageHadError ? "#f00" : "#999"; ctx.textBaseLine = "middle"; var percent_text = Math.round(this.progress * 100) + "%"; var text_dim = ctx.measureText ? ctx.measureText(percent_text) : null; var text_width = text_dim ? text_dim.width : 0; ctx.fillText(percent_text, mx - (text_width / 2), my); } } this.last_progress = this.progress; } setTimeout((function (self) { return function () { self.go(); }; })(this), (this.isCocoonJs ? 10 : 100)); } }; Runtime.prototype.go_loading_finished = function () { if (this.overlay_canvas) { this.canvas.parentNode.removeChild(this.overlay_canvas); this.overlay_ctx = null; this.overlay_canvas = null; } this.start_time = Date.now(); this.last_fps_time = cr.performance_now(); // for counting framerate var i, len, t; if (this.uses_loader_layout) { for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (!t.is_family && !t.isOnLoaderLayout && t.plugin.is_world) { t.onCreate(); cr.seal(t); } } } else this.isloading = false; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { this.layouts_by_index[i].createGlobalNonWorlds(); } if (this.fullscreen_mode >= 2) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect)) this.aspect_scale = this.height / this.original_height; else this.aspect_scale = this.width / this.original_width; } if (this.first_layout) this.layouts[this.first_layout].startRunning(); else this.layouts_by_index[0].startRunning(); ; if (!this.uses_loader_layout) { this.loadingprogress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); } if (navigator["splashscreen"] && navigator["splashscreen"]["hide"]) navigator["splashscreen"]["hide"](); for (i = 0, len = this.types_by_index.length; i < len; i++) { t = this.types_by_index[i]; if (t.onAppBegin) t.onAppBegin(); } this.tick(false); if (this.isDirectCanvas) AppMobi["webview"]["execute"]("onGameReady();"); }; var raf = window["requestAnimationFrame"] || window["mozRequestAnimationFrame"] || window["webkitRequestAnimationFrame"] || window["msRequestAnimationFrame"] || window["oRequestAnimationFrame"]; Runtime.prototype.tick = function (background_wake) { if (!this.running_layout) return; var logic_start = cr.performance_now(); if (this.halfFramerateMode && this.ranLastRaf) { if (logic_start - this.lastRafTime < 29) { this.ranLastRaf = false; this.lastRafTime = logic_start; if (raf) this.raf_id = raf(this.tickFunc, this.canvas); else // no idea if this works without raf/hi res timers but let's hope for the best this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16); return; // skipped this frame } } this.ranLastRaf = true; this.lastRafTime = logic_start; var fsmode = this.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"]) && !this.isPhoneGap; if ((isfullscreen || this.isNodeFullscreen) && this.fullscreen_scaling > 0) fsmode = this.fullscreen_scaling; if (fsmode > 0 && (!this.isiOS || window.self !== window.top)) { var curwidth = window.innerWidth; var curheight = window.innerHeight; if (this.lastWindowWidth !== curwidth || this.lastWindowHeight !== curheight) { this["setSize"](curwidth, curheight); } } if (!this.isDomFree) { if (isfullscreen) { if (!this.firstInFullscreen) { this.fullscreenOldMarginCss = jQuery(this.canvas).css("margin") || "0"; this.firstInFullscreen = true; } if (!this.isChrome && !this.isNodeWebkit) { jQuery(this.canvas).css({ "margin-left": "" + Math.floor((screen.width - (this.width / this.devicePixelRatio)) / 2) + "px", "margin-top": "" + Math.floor((screen.height - (this.height / this.devicePixelRatio)) / 2) + "px" }); } } else { if (this.firstInFullscreen) { if (!this.isChrome && !this.isNodeWebkit) { jQuery(this.canvas).css("margin", this.fullscreenOldMarginCss); } this.fullscreenOldMarginCss = ""; this.firstInFullscreen = false; if (this.fullscreen_mode === 0) { this["setSize"](Math.round(this.oldWidth / this.devicePixelRatio), Math.round(this.oldHeight / this.devicePixelRatio), true); } } else { this.oldWidth = this.width; this.oldHeight = this.height; } } } if (this.isloading) { var done = this.areAllTexturesAndSoundsLoaded(); // updates this.progress this.loadingprogress = this.progress; if (done) { this.isloading = false; this.progress = 1; this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null); } } this.logic(); if ((this.redraw || this.isCocoonJs) && !this.is_WebGL_context_lost && !this.suspendDrawing && !background_wake) { this.redraw = false; if (this.glwrap) this.drawGL(); else this.draw(); if (this.snapshotCanvas) { if (this.canvas && this.canvas.toDataURL) { this.snapshotData = this.canvas.toDataURL(this.snapshotCanvas[0], this.snapshotCanvas[1]); this.trigger(cr.system_object.prototype.cnds.OnCanvasSnapshot, null); } this.snapshotCanvas = null; } } if (!this.hit_breakpoint) { this.tickcount++; this.execcount++; this.framecount++; } this.logictime += cr.performance_now() - logic_start; if (this.isSuspended || background_wake) return; if (raf) this.raf_id = raf(this.tickFunc, this.canvas); else { this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16); } }; Runtime.prototype.logic = function () { var i, leni, j, lenj, k, lenk, type, inst, binst; var cur_time = cr.performance_now(); if (cur_time - this.last_fps_time >= 1000) // every 1 second { this.last_fps_time += 1000; this.fps = this.framecount; this.framecount = 0; this.cpuutilisation = this.logictime; this.logictime = 0; } if (this.measuring_dt) { if (this.last_tick_time !== 0) { var ms_diff = cur_time - this.last_tick_time; if (ms_diff === 0 && !this.isDebug) { this.zeroDtCount++; if (this.zeroDtCout >= 10) this.measuring_dt = false; this.dt1 = 1.0 / 60.0; // 60fps assumed (0.01666...) } else { this.dt1 = ms_diff / 1000.0; // dt measured in seconds if (this.dt1 > 0.5) this.dt1 = 0; else if (this.dt1 > 0.1) this.dt1 = 0.1; } } this.last_tick_time = cur_time; } this.dt = this.dt1 * this.timescale; this.kahanTime.add(this.dt); var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen) && !this.isPhoneGap; if (this.fullscreen_mode >= 2 /* scale */ || (isfullscreen && this.fullscreen_scaling > 0)) { var orig_aspect = this.original_width / this.original_height; var cur_aspect = this.width / this.height; var mode = this.fullscreen_mode; if (isfullscreen && this.fullscreen_scaling > 0) mode = this.fullscreen_scaling; if ((mode !== 2 && cur_aspect > orig_aspect) || (mode === 2 && cur_aspect < orig_aspect)) { this.aspect_scale = this.height / this.original_height; } else { this.aspect_scale = this.width / this.original_width; } if (this.running_layout) { this.running_layout.scrollToX(this.running_layout.scrollX); this.running_layout.scrollToY(this.running_layout.scrollY); } } else this.aspect_scale = (this.isRetina ? this.devicePixelRatio : 1); this.ClearDeathRow(); this.isInOnDestroy++; this.system.runWaits(); // prevent instance list changing this.isInOnDestroy--; this.ClearDeathRow(); // allow instance list changing this.isInOnDestroy++; var tickarr = this.objects_to_pretick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].pretick(); for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { inst.behavior_insts[k].tick(); } } } for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.posttick) binst.posttick(); } } } tickarr = this.objects_to_tick.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick(); this.isInOnDestroy--; // end preventing instance lists from being changed this.handleSaveLoad(); // save/load now if queued i = 0; while (this.changelayout && i++ < 10) { this.doChangeLayout(this.changelayout); } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) this.eventsheets_by_index[i].hasRun = false; if (this.running_layout.event_sheet) this.running_layout.event_sheet.run(); this.registered_collisions.length = 0; this.layout_first_tick = false; this.isInOnDestroy++; // prevent instance lists from being changed for (i = 0, leni = this.types_by_index.length; i < leni; i++) { type = this.types_by_index[i]; if (type.is_family || (!type.behaviors.length && !type.families.length)) continue; // type doesn't have any behaviors for (j = 0, lenj = type.instances.length; j < lenj; j++) { var inst = type.instances[j]; for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.tick2) binst.tick2(); } } } tickarr = this.objects_to_tick2.valuesRef(); for (i = 0, leni = tickarr.length; i < leni; i++) tickarr[i].tick2(); this.isInOnDestroy--; // end preventing instance lists from being changed }; Runtime.prototype.doChangeLayout = function (changeToLayout) { ; var prev_layout = this.running_layout; this.running_layout.stopRunning(); var i, len, j, lenj, k, lenk, type, inst, binst; if (this.glwrap) { for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; if (type.unloadTextures && (!type.global || type.instances.length === 0) && changeToLayout.initial_types.indexOf(type) === -1) { type.unloadTextures(); } } } if (prev_layout == changeToLayout) this.system.waits.length = 0; changeToLayout.startRunning(); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (!type.global && !type.plugin.singleglobal) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (inst.onLayoutChange) inst.onLayoutChange(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.onLayoutChange) binst.onLayoutChange(); } } } } this.redraw = true; this.layout_first_tick = true; this.ClearDeathRow(); }; Runtime.prototype.pretickMe = function (inst) { this.objects_to_pretick.add(inst); }; Runtime.prototype.unpretickMe = function (inst) { this.objects_to_pretick.remove(inst); }; Runtime.prototype.tickMe = function (inst) { this.objects_to_tick.add(inst); }; Runtime.prototype.untickMe = function (inst) { this.objects_to_tick.remove(inst); }; Runtime.prototype.tick2Me = function (inst) { this.objects_to_tick2.add(inst); }; Runtime.prototype.untick2Me = function (inst) { this.objects_to_tick2.remove(inst); }; Runtime.prototype.getDt = function (inst) { if (!inst || inst.my_timescale === -1.0) return this.dt; return this.dt1 * inst.my_timescale; }; Runtime.prototype.draw = function () { this.running_layout.draw(this.ctx); if (this.isDirectCanvas) this.ctx["present"](); }; Runtime.prototype.drawGL = function () { this.running_layout.drawGL(this.glwrap); this.glwrap.present(); }; Runtime.prototype.addDestroyCallback = function (f) { if (f) this.destroycallbacks.push(f); }; Runtime.prototype.removeDestroyCallback = function (f) { cr.arrayFindRemove(this.destroycallbacks, f); }; Runtime.prototype.getObjectByUID = function (uid_) { ; var uidstr = uid_.toString(); if (this.objectsByUid.hasOwnProperty(uidstr)) return this.objectsByUid[uidstr]; else return null; }; Runtime.prototype.DestroyInstance = function (inst) { var i, len; if (!this.deathRow.contains(inst)) { this.deathRow.add(inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { this.DestroyInstance(inst.siblings[i]); } } if (this.isInClearDeathRow) this.deathRow.values_cache.push(inst); this.isInOnDestroy++; // support recursion this.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnDestroyed, inst); this.isInOnDestroy--; } }; Runtime.prototype.ClearDeathRow = function () { var inst, index, type, instances, binst; var i, j, k, leni, lenj, lenk; var w, f; this.isInClearDeathRow = true; for (i = 0, leni = this.createRow.length; i < leni; i++) { inst = this.createRow[i]; type = inst.type; type.instances.push(inst); for (j = 0, lenj = type.families.length; j < lenj; j++) { type.families[j].instances.push(inst); type.families[j].stale_iids = true; } } this.createRow.length = 0; var arr = this.deathRow.valuesRef(); // get array of items from set for (i = 0; i < arr.length; i++) // check array length every time in case it changes { inst = arr[i]; type = inst.type; instances = type.instances; for (j = 0, lenj = this.destroycallbacks.length; j < lenj; j++) this.destroycallbacks[j](inst); cr.arrayFindRemove(instances, inst); if (instances.length === 0) type.any_instance_parallaxed = false; if (inst.collcells) { type.collision_grid.update(inst, inst.collcells, null); } if (inst.layer) { cr.arrayRemove(inst.layer.instances, inst.get_zindex()); inst.layer.zindices_stale = true; } for (j = 0, lenj = type.families.length; j < lenj; j++) { cr.arrayFindRemove(type.families[j].instances, inst); type.families[j].stale_iids = true; } if (inst.behavior_insts) { for (j = 0, lenj = inst.behavior_insts.length; j < lenj; j++) { binst = inst.behavior_insts[j]; if (binst.onDestroy) binst.onDestroy(); binst.behavior.my_instances.remove(inst); } } this.objects_to_pretick.remove(inst); this.objects_to_tick.remove(inst); this.objects_to_tick2.remove(inst); for (j = 0, lenj = this.system.waits.length; j < lenj; j++) { w = this.system.waits[j]; if (w.sols.hasOwnProperty(type.index)) cr.arrayFindRemove(w.sols[type.index].insts, inst); if (!type.is_family) { for (k = 0, lenk = type.families.length; k < lenk; k++) { f = type.families[k]; if (w.sols.hasOwnProperty(f.index)) cr.arrayFindRemove(w.sols[f.index].insts, inst); } } } if (inst.onDestroy) inst.onDestroy(); if (this.objectsByUid.hasOwnProperty(inst.uid.toString())) delete this.objectsByUid[inst.uid.toString()]; this.objectcount--; if (type.deadCache.length < 64) type.deadCache.push(inst); type.stale_iids = true; } if (!this.deathRow.isEmpty()) this.redraw = true; this.deathRow.clear(); this.isInClearDeathRow = false; }; Runtime.prototype.createInstance = function (type, layer, sx, sy) { if (type.is_family) { var i = cr.floor(Math.random() * type.members.length); return this.createInstance(type.members[i], layer, sx, sy); } if (!type.default_instance) { return null; } return this.createInstanceFromInit(type.default_instance, layer, false, sx, sy, false); }; var all_behaviors = []; Runtime.prototype.createInstanceFromInit = function (initial_inst, layer, is_startup_instance, sx, sy, skip_siblings) { var i, len, j, lenj, p, effect_fallback, x, y; if (!initial_inst) return null; var type = this.types_by_index[initial_inst[1]]; ; ; var is_world = type.plugin.is_world; ; if (this.isloading && is_world && !type.isOnLoaderLayout) return null; if (is_world && !this.glwrap && initial_inst[0][11] === 11) return null; var original_layer = layer; if (!is_world) layer = null; var inst; if (type.deadCache.length) { inst = type.deadCache.pop(); inst.recycled = true; type.plugin.Instance.call(inst, type); } else { inst = new type.plugin.Instance(type); inst.recycled = false; } if (is_startup_instance && !skip_siblings) inst.uid = initial_inst[2]; else inst.uid = this.next_uid++; this.objectsByUid[inst.uid.toString()] = inst; inst.puid = this.next_puid++; inst.iid = type.instances.length; for (i = 0, len = this.createRow.length; i < len; ++i) { if (this.createRow[i].type === type) inst.iid++; } inst.get_iid = cr.inst_get_iid; var initial_vars = initial_inst[3]; if (inst.recycled) { cr.wipe(inst.extra); } else { inst.extra = {}; if (typeof cr_is_preview !== "undefined") { inst.instance_var_names = []; inst.instance_var_names.length = initial_vars.length; for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_var_names[i] = initial_vars[i][1]; } inst.instance_vars = []; inst.instance_vars.length = initial_vars.length; } for (i = 0, len = initial_vars.length; i < len; i++) inst.instance_vars[i] = initial_vars[i][0]; if (is_world) { var wm = initial_inst[0]; ; inst.x = cr.is_undefined(sx) ? wm[0] : sx; inst.y = cr.is_undefined(sy) ? wm[1] : sy; inst.z = wm[2]; inst.width = wm[3]; inst.height = wm[4]; inst.depth = wm[5]; inst.angle = wm[6]; inst.opacity = wm[7]; inst.hotspotX = wm[8]; inst.hotspotY = wm[9]; inst.blend_mode = wm[10]; effect_fallback = wm[11]; if (!this.glwrap && type.effect_types.length) // no WebGL renderer and shaders used inst.blend_mode = effect_fallback; // use fallback blend mode - destroy mode was handled above inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); if (inst.recycled) { for (i = 0, len = wm[12].length; i < len; i++) { for (j = 0, lenj = wm[12][i].length; j < lenj; j++) inst.effect_params[i][j] = wm[12][i][j]; } inst.bbox.set(0, 0, 0, 0); inst.collcells.set(0, 0, -1, -1); inst.bquad.set_from_rect(inst.bbox); inst.bbox_changed_callbacks.length = 0; } else { inst.effect_params = wm[12].slice(0); for (i = 0, len = inst.effect_params.length; i < len; i++) inst.effect_params[i] = wm[12][i].slice(0); inst.active_effect_types = []; inst.active_effect_flags = []; inst.active_effect_flags.length = type.effect_types.length; inst.bbox = new cr.rect(0, 0, 0, 0); inst.collcells = new cr.rect(0, 0, -1, -1); inst.bquad = new cr.quad(); inst.bbox_changed_callbacks = []; inst.set_bbox_changed = cr.set_bbox_changed; inst.add_bbox_changed_callback = cr.add_bbox_changed_callback; inst.contains_pt = cr.inst_contains_pt; inst.update_bbox = cr.update_bbox; inst.update_collision_cell = cr.update_collision_cell; inst.get_zindex = cr.inst_get_zindex; } inst.tilemap_exists = false; inst.tilemap_width = 0; inst.tilemap_height = 0; inst.tilemap_data = null; if (wm.length === 14) { inst.tilemap_exists = true; inst.tilemap_width = wm[13][0]; inst.tilemap_height = wm[13][1]; inst.tilemap_data = wm[13][2]; } for (i = 0, len = type.effect_types.length; i < len; i++) inst.active_effect_flags[i] = true; inst.updateActiveEffects = cr.inst_updateActiveEffects; inst.updateActiveEffects(); inst.uses_shaders = !!inst.active_effect_types.length; inst.bbox_changed = true; inst.cell_changed = true; type.any_cell_changed = true; inst.visible = true; inst.my_timescale = -1.0; inst.layer = layer; inst.zindex = layer.instances.length; // will be placed at top of current layer if (typeof inst.collision_poly === "undefined") inst.collision_poly = null; inst.collisionsEnabled = true; this.redraw = true; } inst.toString = cr.inst_toString; var initial_props, binst; all_behaviors.length = 0; for (i = 0, len = type.families.length; i < len; i++) { all_behaviors.push.apply(all_behaviors, type.families[i].behaviors); } all_behaviors.push.apply(all_behaviors, type.behaviors); if (inst.recycled) { for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; binst = inst.behavior_insts[i]; binst.recycled = true; btype.behavior.Instance.call(binst, btype, inst); initial_props = initial_inst[4][i]; for (j = 0, lenj = initial_props.length; j < lenj; j++) binst.properties[j] = initial_props[j]; binst.onCreate(); btype.behavior.my_instances.add(inst); } } else { inst.behavior_insts = []; for (i = 0, len = all_behaviors.length; i < len; i++) { var btype = all_behaviors[i]; var binst = new btype.behavior.Instance(btype, inst); binst.recycled = false; binst.properties = initial_inst[4][i].slice(0); binst.onCreate(); cr.seal(binst); inst.behavior_insts.push(binst); btype.behavior.my_instances.add(inst); } } initial_props = initial_inst[5]; if (inst.recycled) { for (i = 0, len = initial_props.length; i < len; i++) inst.properties[i] = initial_props[i]; } else inst.properties = initial_props.slice(0); this.createRow.push(inst); if (layer) { ; layer.instances.push(inst); if (layer.parallaxX !== 1 || layer.parallaxY !== 1) type.any_instance_parallaxed = true; } this.objectcount++; if (type.is_contained) { inst.is_contained = true; if (inst.recycled) inst.siblings.length = 0; else inst.siblings = []; // note: should not include self in siblings if (!is_startup_instance && !skip_siblings) // layout links initial instances { for (i = 0, len = type.container.length; i < len; i++) { if (type.container[i] === type) continue; if (!type.container[i].default_instance) { return null; } inst.siblings.push(this.createInstanceFromInit(type.container[i].default_instance, original_layer, false, is_world ? inst.x : sx, is_world ? inst.y : sy, true)); } for (i = 0, len = inst.siblings.length; i < len; i++) { inst.siblings[i].siblings.push(inst); for (j = 0; j < len; j++) { if (i !== j) inst.siblings[i].siblings.push(inst.siblings[j]); } } } } else { inst.is_contained = false; inst.siblings = null; } inst.onCreate(); if (!inst.recycled) cr.seal(inst); for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].postCreate) inst.behavior_insts[i].postCreate(); } return inst; }; Runtime.prototype.getLayerByName = function (layer_name) { var i, len; for (i = 0, len = this.running_layout.layers.length; i < len; i++) { var layer = this.running_layout.layers[i]; if (cr.equals_nocase(layer.name, layer_name)) return layer; } return null; }; Runtime.prototype.getLayerByNumber = function (index) { index = cr.floor(index); if (index < 0) index = 0; if (index >= this.running_layout.layers.length) index = this.running_layout.layers.length - 1; return this.running_layout.layers[index]; }; Runtime.prototype.getLayer = function (l) { if (cr.is_number(l)) return this.getLayerByNumber(l); else return this.getLayerByName(l.toString()); }; Runtime.prototype.clearSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].getCurrentSol().select_all = true; } }; Runtime.prototype.pushCleanSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCleanSol(); } }; Runtime.prototype.pushCopySol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].pushCopySol(); } }; Runtime.prototype.popSol = function (solModifiers) { var i, len; for (i = 0, len = solModifiers.length; i < len; i++) { solModifiers[i].popSol(); } }; Runtime.prototype.updateAllCells = function (type) { if (!type.any_cell_changed) return; // all instances must already be up-to-date var i, len, instances = type.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].update_collision_cell(); } var createRow = this.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === type) createRow[i].update_collision_cell(); } type.any_cell_changed = false; }; Runtime.prototype.getCollisionCandidates = function (layer, rtype, bbox, candidates) { var i, len, t; var is_parallaxed = (layer ? (layer.parallaxX !== 1 || layer.parallaxY !== 1) : false); if (rtype.is_family) { for (i = 0, len = rtype.members.length; i < len; ++i) { t = rtype.members[i]; if (is_parallaxed || t.any_instance_parallaxed) { cr.appendArray(candidates, t.instances); } else { this.updateAllCells(t); t.collision_grid.queryRange(bbox, candidates); } } } else { if (is_parallaxed || rtype.any_instance_parallaxed) { cr.appendArray(candidates, rtype.instances); } else { this.updateAllCells(rtype); rtype.collision_grid.queryRange(bbox, candidates); } } }; Runtime.prototype.getTypesCollisionCandidates = function (layer, types, bbox, candidates) { var i, len; for (i = 0, len = types.length; i < len; ++i) { this.getCollisionCandidates(layer, types[i], bbox, candidates); } }; Runtime.prototype.getSolidCollisionCandidates = function (layer, bbox, candidates) { var solid = this.getSolidBehavior(); if (!solid) return null; this.getTypesCollisionCandidates(layer, solid.my_types, bbox, candidates); }; Runtime.prototype.getJumpthruCollisionCandidates = function (layer, bbox, candidates) { var jumpthru = this.getJumpthruBehavior(); if (!jumpthru) return null; this.getTypesCollisionCandidates(layer, jumpthru.my_types, bbox, candidates); }; Runtime.prototype.testAndSelectCanvasPointOverlap = function (type, ptx, pty, inverted) { var sol = type.getCurrentSol(); var i, j, inst, len; var lx, ly; if (sol.select_all) { if (!inverted) { sol.select_all = false; sol.instances.length = 0; // clear contents } for (i = 0, len = type.instances.length; i < len; i++) { inst = type.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else sol.instances.push(inst); } } } else { j = 0; for (i = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; inst.update_bbox(); lx = inst.layer.canvasToLayer(ptx, pty, true); ly = inst.layer.canvasToLayer(ptx, pty, false); if (inst.contains_pt(lx, ly)) { if (inverted) return false; else { sol.instances[j] = sol.instances[i]; j++; } } } if (!inverted) sol.instances.length = j; } type.applySolToContainer(); if (inverted) return true; // did not find anything overlapping else return sol.hasObjects(); }; Runtime.prototype.testOverlap = function (a, b) { if (!a || !b || a === b || !a.collisionsEnabled || !b.collisionsEnabled) return false; a.update_bbox(); b.update_bbox(); var layera = a.layer; var layerb = b.layer; var different_layers = (layera !== layerb && (layera.parallaxX !== layerb.parallaxX || layerb.parallaxY !== layerb.parallaxY || layera.scale !== layerb.scale || layera.angle !== layerb.angle || layera.zoomRate !== layerb.zoomRate)); var i, len, i2, i21, x, y, haspolya, haspolyb, polya, polyb; if (!different_layers) // same layers: easy check { if (!a.bbox.intersects_rect(b.bbox)) return false; if (!a.bquad.intersects_quad(b.bquad)) return false; if (a.tilemap_exists && b.tilemap_exists) return false; if (a.tilemap_exists) return this.testTilemapOverlap(a, b); if (b.tilemap_exists) return this.testTilemapOverlap(b, a); haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolya && !haspolyb) return true; if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); polya = a.collision_poly; } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); polya = this.temp_poly; } if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); polyb = b.collision_poly; } else { this.temp_poly.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); polyb = this.temp_poly; } return polya.intersects_poly(polyb, b.x - a.x, b.y - a.y); } else // different layers: need to do full translated check { haspolya = (a.collision_poly && !a.collision_poly.is_empty()); haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); this.temp_poly.set_from_poly(a.collision_poly); } else { this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height); } polya = this.temp_poly; if (haspolyb) { b.collision_poly.cache_poly(b.width, b.height, b.angle); this.temp_poly2.set_from_poly(b.collision_poly); } else { this.temp_poly2.set_from_quad(b.bquad, b.x, b.y, b.width, b.height); } polyb = this.temp_poly2; for (i = 0, len = polya.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polya.pts_cache[i2]; y = polya.pts_cache[i21]; polya.pts_cache[i2] = layera.layerToCanvas(x + a.x, y + a.y, true); polya.pts_cache[i21] = layera.layerToCanvas(x + a.x, y + a.y, false); } polya.update_bbox(); for (i = 0, len = polyb.pts_count; i < len; i++) { i2 = i * 2; i21 = i2 + 1; x = polyb.pts_cache[i2]; y = polyb.pts_cache[i21]; polyb.pts_cache[i2] = layerb.layerToCanvas(x + b.x, y + b.y, true); polyb.pts_cache[i21] = layerb.layerToCanvas(x + b.x, y + b.y, false); } polyb.update_bbox(); return polya.intersects_poly(polyb, 0, 0); } }; var tmpQuad = new cr.quad(); var tmpRect = new cr.rect(0, 0, 0, 0); var collrect_candidates = []; Runtime.prototype.testTilemapOverlap = function (tm, a) { var i, len, c, rc; var bbox = a.bbox; var tmx = tm.x; var tmy = tm.y; tm.getCollisionRectCandidates(bbox, collrect_candidates); var collrects = collrect_candidates; var haspolya = (a.collision_poly && !a.collision_poly.is_empty()); for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; rc = c.rc; if (bbox.intersects_rect_off(rc, tmx, tmy)) { tmpQuad.set_from_rect(rc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_quad(a.bquad)) { if (haspolya) { a.collision_poly.cache_poly(a.width, a.height, a.angle); if (c.poly) { if (c.poly.intersects_poly(a.collision_poly, a.x - (tmx + rc.left), a.y - (tmy + rc.top))) { collrect_candidates.length = 0; return true; } } else { this.temp_poly.set_from_quad(tmpQuad, 0, 0, rc.right - rc.left, rc.bottom - rc.top); if (this.temp_poly.intersects_poly(a.collision_poly, a.x, a.y)) { collrect_candidates.length = 0; return true; } } } else { if (c.poly) { this.temp_poly.set_from_quad(a.bquad, 0, 0, a.width, a.height); if (c.poly.intersects_poly(this.temp_poly, -(tmx + rc.left), -(tmy + rc.top))) { collrect_candidates.length = 0; return true; } } else { collrect_candidates.length = 0; return true; } } } } } collrect_candidates.length = 0; return false; }; Runtime.prototype.testRectOverlap = function (r, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; if (!b.bbox.intersects_rect(r)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(r, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (r.intersects_rect_off(tilerc, tmx, tmy)) { if (c.poly) { this.temp_poly.set_from_rect(r, 0, 0); if (c.poly.intersects_poly(this.temp_poly, -(tmx + tilerc.left), -(tmy + tilerc.top))) { collrect_candidates.length = 0; return true; } } else { collrect_candidates.length = 0; return true; } } } collrect_candidates.length = 0; return false; } else { tmpQuad.set_from_rect(r); if (!b.bquad.intersects_quad(tmpQuad)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); tmpQuad.offset(-r.left, -r.top); this.temp_poly.set_from_quad(tmpQuad, 0, 0, 1, 1); return b.collision_poly.intersects_poly(this.temp_poly, r.left - b.x, r.top - b.y); } }; Runtime.prototype.testSegmentOverlap = function (x1, y1, x2, y2, b) { if (!b || !b.collisionsEnabled) return false; b.update_bbox(); var layerb = b.layer; var haspolyb, polyb; tmpRect.set(cr.min(x1, x2), cr.min(y1, y2), cr.max(x1, x2), cr.max(y1, y2)); if (!b.bbox.intersects_rect(tmpRect)) return false; if (b.tilemap_exists) { b.getCollisionRectCandidates(tmpRect, collrect_candidates); var collrects = collrect_candidates; var i, len, c, tilerc; var tmx = b.x; var tmy = b.y; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; tilerc = c.rc; if (tmpRect.intersects_rect_off(tilerc, tmx, tmy)) { tmpQuad.set_from_rect(tilerc); tmpQuad.offset(tmx, tmy); if (tmpQuad.intersects_segment(x1, y1, x2, y2)) { if (c.poly) { if (c.poly.intersects_segment(tmx + tilerc.left, tmy + tilerc.top, x1, y1, x2, y2)) { collrect_candidates.length = 0; return true; } } else { collrect_candidates.length = 0; return true; } } } } collrect_candidates.length = 0; return false; } else { if (!b.bquad.intersects_segment(x1, y1, x2, y2)) return false; haspolyb = (b.collision_poly && !b.collision_poly.is_empty()); if (!haspolyb) return true; b.collision_poly.cache_poly(b.width, b.height, b.angle); return b.collision_poly.intersects_segment(b.x, b.y, x1, y1, x2, y2); } }; Runtime.prototype.typeHasBehavior = function (t, b) { if (!b) return false; var i, len, j, lenj, f; for (i = 0, len = t.behaviors.length; i < len; i++) { if (t.behaviors[i].behavior instanceof b) return true; } if (!t.is_family) { for (i = 0, len = t.families.length; i < len; i++) { f = t.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (f.behaviors[j].behavior instanceof b) return true; } } } return false; }; Runtime.prototype.typeHasNoSaveBehavior = function (t) { return this.typeHasBehavior(t, cr.behaviors.NoSave); }; Runtime.prototype.typeHasPersistBehavior = function (t) { return this.typeHasBehavior(t, cr.behaviors.Persist); }; Runtime.prototype.getSolidBehavior = function () { return this.solidBehavior; }; Runtime.prototype.getJumpthruBehavior = function () { return this.jumpthruBehavior; }; var candidates = []; Runtime.prototype.testOverlapSolid = function (inst) { var i, len, s; inst.update_bbox(); this.getSolidCollisionCandidates(inst.layer, inst.bbox, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra.solidEnabled) continue; if (this.testOverlap(inst, s)) { candidates.length = 0; return s; } } candidates.length = 0; return null; }; Runtime.prototype.testRectOverlapSolid = function (r) { var i, len, s; this.getSolidCollisionCandidates(null, r, candidates); for (i = 0, len = candidates.length; i < len; ++i) { s = candidates[i]; if (!s.extra.solidEnabled) continue; if (this.testRectOverlap(r, s)) { candidates.length = 0; return s; } } candidates.length = 0; return null; }; var jumpthru_array_ret = []; Runtime.prototype.testOverlapJumpThru = function (inst, all) { var ret = null; if (all) { ret = jumpthru_array_ret; ret.length = 0; } inst.update_bbox(); this.getJumpthruCollisionCandidates(inst.layer, inst.bbox, candidates); var i, len, j; for (i = 0, len = candidates.length; i < len; ++i) { j = candidates[i]; if (!j.extra.jumpthruEnabled) continue; if (this.testOverlap(inst, j)) { if (all) ret.push(j); else { candidates.length = 0; return j; } } } candidates.length = 0; return ret; }; Runtime.prototype.pushOutSolid = function (inst, xdir, ydir, dist, include_jumpthrus, specific_jumpthru) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; var last_overlapped = null, secondlast_overlapped = null; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; if (!last_overlapped) { if (include_jumpthrus) { if (specific_jumpthru) last_overlapped = (this.testOverlap(inst, specific_jumpthru) ? specific_jumpthru : null); else last_overlapped = this.testOverlapJumpThru(inst); if (last_overlapped) secondlast_overlapped = last_overlapped; } if (!last_overlapped) { if (secondlast_overlapped) this.pushInFractional(inst, xdir, ydir, secondlast_overlapped, 16); return true; } } } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushOut = function (inst, xdir, ydir, dist, otherinst) { var push_dist = dist || 50; var oldx = inst.x var oldy = inst.y; var i; for (i = 0; i < push_dist; i++) { inst.x = (oldx + (xdir * i)); inst.y = (oldy + (ydir * i)); inst.set_bbox_changed(); if (!this.testOverlap(inst, otherinst)) return true; } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.pushInFractional = function (inst, xdir, ydir, obj, limit) { var divisor = 2; var frac; var forward = false; var overlapping = false; var bestx = inst.x; var besty = inst.y; while (divisor <= limit) { frac = 1 / divisor; divisor *= 2; inst.x += xdir * frac * (forward ? 1 : -1); inst.y += ydir * frac * (forward ? 1 : -1); inst.set_bbox_changed(); if (this.testOverlap(inst, obj)) { forward = true; overlapping = true; } else { forward = false; overlapping = false; bestx = inst.x; besty = inst.y; } } if (overlapping) { inst.x = bestx; inst.y = besty; inst.set_bbox_changed(); } }; Runtime.prototype.pushOutSolidNearest = function (inst, max_dist_) { var max_dist = (cr.is_undefined(max_dist_) ? 100 : max_dist_); var dist = 0; var oldx = inst.x var oldy = inst.y; var dir = 0; var dx = 0, dy = 0; var last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; // already clear of solids while (dist <= max_dist) { switch (dir) { case 0: dx = 0; dy = -1; dist++; break; case 1: dx = 1; dy = -1; break; case 2: dx = 1; dy = 0; break; case 3: dx = 1; dy = 1; break; case 4: dx = 0; dy = 1; break; case 5: dx = -1; dy = 1; break; case 6: dx = -1; dy = 0; break; case 7: dx = -1; dy = -1; break; } dir = (dir + 1) % 8; inst.x = cr.floor(oldx + (dx * dist)); inst.y = cr.floor(oldy + (dy * dist)); inst.set_bbox_changed(); if (!this.testOverlap(inst, last_overlapped)) { last_overlapped = this.testOverlapSolid(inst); if (!last_overlapped) return true; } } inst.x = oldx; inst.y = oldy; inst.set_bbox_changed(); return false; }; Runtime.prototype.registerCollision = function (a, b) { if (!a.collisionsEnabled || !b.collisionsEnabled) return; this.registered_collisions.push([a, b]); }; Runtime.prototype.checkRegisteredCollision = function (a, b) { var i, len, x; for (i = 0, len = this.registered_collisions.length; i < len; i++) { x = this.registered_collisions[i]; if ((x[0] == a && x[1] == b) || (x[0] == b && x[1] == a)) return true; } return false; }; Runtime.prototype.calculateSolidBounceAngle = function(inst, startx, starty, obj) { var objx = inst.x; var objy = inst.y; var radius = cr.max(10, cr.distanceTo(startx, starty, objx, objy)); var startangle = cr.angleTo(startx, starty, objx, objy); var firstsolid = obj || this.testOverlapSolid(inst); if (!firstsolid) return cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; var i, curangle, anticlockwise_free_angle, clockwise_free_angle; var increment = cr.to_radians(5); // 5 degree increments for (i = 1; i < 36; i++) { curangle = startangle - i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { anticlockwise_free_angle = curangle; break; } } } if (i === 36) anticlockwise_free_angle = cr.clamp_angle(startangle + cr.PI); var cursolid = firstsolid; for (i = 1; i < 36; i++) { curangle = startangle + i * increment; inst.x = startx + Math.cos(curangle) * radius; inst.y = starty + Math.sin(curangle) * radius; inst.set_bbox_changed(); if (!this.testOverlap(inst, cursolid)) { cursolid = obj ? null : this.testOverlapSolid(inst); if (!cursolid) { clockwise_free_angle = curangle; break; } } } if (i === 36) clockwise_free_angle = cr.clamp_angle(startangle + cr.PI); inst.x = objx; inst.y = objy; inst.set_bbox_changed(); if (clockwise_free_angle === anticlockwise_free_angle) return clockwise_free_angle; var half_diff = cr.angleDiff(clockwise_free_angle, anticlockwise_free_angle) / 2; var normal; if (cr.angleClockwise(clockwise_free_angle, anticlockwise_free_angle)) { normal = cr.clamp_angle(anticlockwise_free_angle + half_diff + cr.PI); } else { normal = cr.clamp_angle(clockwise_free_angle + half_diff); } ; var vx = Math.cos(startangle); var vy = Math.sin(startangle); var nx = Math.cos(normal); var ny = Math.sin(normal); var v_dot_n = vx * nx + vy * ny; var rx = vx - 2 * v_dot_n * nx; var ry = vy - 2 * v_dot_n * ny; return cr.angleTo(0, 0, rx, ry); }; var triggerSheetIndex = -1; Runtime.prototype.trigger = function (method, inst, value /* for fast triggers */) { ; if (!this.running_layout) return false; var sheet = this.running_layout.event_sheet; if (!sheet) return false; // no event sheet active; nothing to trigger var ret = false; var r, i, len; triggerSheetIndex++; var deep_includes = sheet.deep_includes; for (i = 0, len = deep_includes.length; i < len; ++i) { r = this.triggerOnSheet(method, inst, deep_includes[i], value); ret = ret || r; } r = this.triggerOnSheet(method, inst, sheet, value); ret = ret || r; triggerSheetIndex--; return ret; }; Runtime.prototype.triggerOnSheet = function (method, inst, sheet, value) { var ret = false; var i, leni, r, families; if (!inst) { r = this.triggerOnSheetForTypeName(method, inst, "system", sheet, value); ret = ret || r; } else { r = this.triggerOnSheetForTypeName(method, inst, inst.type.name, sheet, value); ret = ret || r; families = inst.type.families; for (i = 0, leni = families.length; i < leni; ++i) { r = this.triggerOnSheetForTypeName(method, inst, families[i].name, sheet, value); ret = ret || r; } } return ret; // true if anything got triggered }; Runtime.prototype.triggerOnSheetForTypeName = function (method, inst, type_name, sheet, value) { var i, leni; var ret = false, ret2 = false; var trig, index; var fasttrigger = (typeof value !== "undefined"); var triggers = (fasttrigger ? sheet.fasttriggers : sheet.triggers); var obj_entry = triggers[type_name]; if (!obj_entry) return ret; var triggers_list = null; for (i = 0, leni = obj_entry.length; i < leni; ++i) { if (obj_entry[i].method == method) { triggers_list = obj_entry[i].evs; break; } } if (!triggers_list) return ret; var triggers_to_fire; if (fasttrigger) { triggers_to_fire = triggers_list[value]; } else { triggers_to_fire = triggers_list; } if (!triggers_to_fire) return null; for (i = 0, leni = triggers_to_fire.length; i < leni; i++) { trig = triggers_to_fire[i][0]; index = triggers_to_fire[i][1]; ret2 = this.executeSingleTrigger(inst, type_name, trig, index); ret = ret || ret2; } return ret; }; Runtime.prototype.executeSingleTrigger = function (inst, type_name, trig, index) { var i, leni; var ret = false; this.trigger_depth++; var current_event = this.getCurrentEventStack().current_event; if (current_event) this.pushCleanSol(current_event.solModifiersIncludingParents); var isrecursive = (this.trigger_depth > 1); // calling trigger from inside another trigger this.pushCleanSol(trig.solModifiersIncludingParents); if (isrecursive) this.pushLocalVarStack(); var event_stack = this.pushEventStack(trig); event_stack.current_event = trig; if (inst) { var sol = this.types[type_name].getCurrentSol(); sol.select_all = false; sol.instances.length = 1; sol.instances[0] = inst; this.types[type_name].applySolToContainer(); } var ok_to_run = true; if (trig.parent) { var temp_parents_arr = event_stack.temp_parents_arr; var cur_parent = trig.parent; while (cur_parent) { temp_parents_arr.push(cur_parent); cur_parent = cur_parent.parent; } temp_parents_arr.reverse(); for (i = 0, leni = temp_parents_arr.length; i < leni; i++) { if (!temp_parents_arr[i].run_pretrigger()) // parent event failed { ok_to_run = false; break; } } } if (ok_to_run) { this.execcount++; if (trig.orblock) trig.run_orblocktrigger(index); else trig.run(); ret = ret || event_stack.last_event_true; } this.popEventStack(); if (isrecursive) this.popLocalVarStack(); this.popSol(trig.solModifiersIncludingParents); if (current_event) this.popSol(current_event.solModifiersIncludingParents); if (this.isInOnDestroy === 0 && triggerSheetIndex === 0 && !this.isRunningEvents && (!this.deathRow.isEmpty() || this.createRow.length)) { this.ClearDeathRow(); } this.trigger_depth--; return ret; }; Runtime.prototype.getCurrentCondition = function () { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.conditions[evinfo.cndindex]; }; Runtime.prototype.getCurrentAction = function () { var evinfo = this.getCurrentEventStack(); return evinfo.current_event.actions[evinfo.actindex]; }; Runtime.prototype.pushLocalVarStack = function () { this.localvar_stack_index++; if (this.localvar_stack_index >= this.localvar_stack.length) this.localvar_stack.push([]); }; Runtime.prototype.popLocalVarStack = function () { ; this.localvar_stack_index--; }; Runtime.prototype.getCurrentLocalVarStack = function () { return this.localvar_stack[this.localvar_stack_index]; }; Runtime.prototype.pushEventStack = function (cur_event) { this.event_stack_index++; if (this.event_stack_index >= this.event_stack.length) this.event_stack.push(new cr.eventStackFrame()); var ret = this.getCurrentEventStack(); ret.reset(cur_event); return ret; }; Runtime.prototype.popEventStack = function () { ; this.event_stack_index--; }; Runtime.prototype.getCurrentEventStack = function () { return this.event_stack[this.event_stack_index]; }; Runtime.prototype.pushLoopStack = function (name_) { this.loop_stack_index++; if (this.loop_stack_index >= this.loop_stack.length) { this.loop_stack.push(cr.seal({ name: name_, index: 0, stopped: false })); } var ret = this.getCurrentLoop(); ret.name = name_; ret.index = 0; ret.stopped = false; return ret; }; Runtime.prototype.popLoopStack = function () { ; this.loop_stack_index--; }; Runtime.prototype.getCurrentLoop = function () { return this.loop_stack[this.loop_stack_index]; }; Runtime.prototype.getEventVariableByName = function (name, scope) { var i, leni, j, lenj, sheet, e; while (scope) { for (i = 0, leni = scope.subevents.length; i < leni; i++) { e = scope.subevents[i]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } scope = scope.parent; } for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++) { sheet = this.eventsheets_by_index[i]; for (j = 0, lenj = sheet.events.length; j < lenj; j++) { e = sheet.events[j]; if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name)) return e; } } return null; }; Runtime.prototype.getLayoutBySid = function (sid_) { var i, len; for (i = 0, len = this.layouts_by_index.length; i < len; i++) { if (this.layouts_by_index[i].sid === sid_) return this.layouts_by_index[i]; } return null; }; Runtime.prototype.getObjectTypeBySid = function (sid_) { var i, len; for (i = 0, len = this.types_by_index.length; i < len; i++) { if (this.types_by_index[i].sid === sid_) return this.types_by_index[i]; } return null; }; Runtime.prototype.getGroupBySid = function (sid_) { var i, len; for (i = 0, len = this.allGroups.length; i < len; i++) { if (this.allGroups[i].sid === sid_) return this.allGroups[i]; } return null; }; function makeSaveDb(e) { var db = e.target.result; db.createObjectStore("saves", { keyPath: "slot" }); }; function IndexedDB_WriteSlot(slot_, data_, oncomplete_, onerror_) { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function (e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"], "readwrite"); var objectStore = transaction.objectStore("saves"); var putReq = objectStore.put({"slot": slot_, "data": data_ }); putReq.onsuccess = oncomplete_; }; }; function IndexedDB_ReadSlot(slot_, oncomplete_, onerror_) { var request = indexedDB.open("_C2SaveStates"); request.onupgradeneeded = makeSaveDb; request.onerror = onerror_; request.onsuccess = function (e) { var db = e.target.result; db.onerror = onerror_; var transaction = db.transaction(["saves"]); var objectStore = transaction.objectStore("saves"); var readReq = objectStore.get(slot_); readReq.onsuccess = function (e) { if (readReq.result) oncomplete_(readReq.result["data"]); else oncomplete_(null); }; }; }; Runtime.prototype.signalContinuousPreview = function () { this.signalledContinuousPreview = true; }; function doContinuousPreviewReload() { cr.logexport("Reloading for continuous preview"); if (!!window["c2cocoonjs"]) { CocoonJS["App"]["reload"](); } else { if (window.location.search.indexOf("continuous") > -1) window.location.reload(true); else window.location = window.location + "?continuous"; } }; Runtime.prototype.handleSaveLoad = function () { var self = this; var savingToSlot = this.saveToSlot; var savingJson = this.lastSaveJson; var loadingFromSlot = this.loadFromSlot; var continuous = false; if (this.signalledContinuousPreview) { continuous = true; savingToSlot = "__c2_continuouspreview"; this.signalledContinuousPreview = false; } if (savingToSlot.length) { this.ClearDeathRow(); savingJson = this.saveToJSONString(); if (window.indexedDB && !this.isCocoonJs) { IndexedDB_WriteSlot(savingToSlot, savingJson, function () { cr.logexport("Saved state to IndexedDB storage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); }, function (e) { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); } catch (f) { cr.logexport("Failed to save game state: " + e + "; " + f); } }); } else { try { localStorage.setItem("__c2save_" + savingToSlot, savingJson); cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)"); self.lastSaveJson = savingJson; this.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null); self.lastSaveJson = ""; if (continuous) doContinuousPreviewReload(); } catch (e) { cr.logexport("Error saving to WebStorage: " + e); } } this.saveToSlot = ""; this.loadFromSlot = ""; this.loadFromJson = ""; } if (loadingFromSlot.length) { if (window.indexedDB && !this.isCocoonJs) { IndexedDB_ReadSlot(loadingFromSlot, function (result_) { if (result_) { self.loadFromJson = result_; cr.logexport("Loaded state from IndexedDB storage (" + self.loadFromJson.length + " bytes)"); } else { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); } self.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); }, function (e) { self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)"); self.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); }); } else { this.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || ""; cr.logexport("Loaded state from WebStorage (" + this.loadFromJson.length + " bytes)"); this.suspendDrawing = false; if (!self.loadFromJson.length) self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null); } this.loadFromSlot = ""; this.saveToSlot = ""; } if (this.loadFromJson.length) { this.ClearDeathRow(); this.loadFromJSONString(this.loadFromJson); this.lastSaveJson = this.loadFromJson; this.trigger(cr.system_object.prototype.cnds.OnLoadComplete, null); this.lastSaveJson = ""; this.loadFromJson = ""; } }; function CopyExtraObject(extra) { var p, ret = {}; for (p in extra) { if (extra.hasOwnProperty(p)) { if (extra[p] instanceof cr.ObjectSet) continue; if (extra[p] && typeof extra[p].c2userdata !== "undefined") continue; ret[p] = extra[p]; } } return ret; }; Runtime.prototype.saveToJSONString = function() { var i, len, j, lenj, type, layout, typeobj, g, c, a, v, p; var o = { "c2save": true, "version": 1, "rt": { "time": this.kahanTime.sum, "timescale": this.timescale, "tickcount": this.tickcount, "execcount": this.execcount, "next_uid": this.next_uid, "running_layout": this.running_layout.sid, "start_time_offset": (Date.now() - this.start_time) }, "types": {}, "layouts": {}, "events": { "groups": {}, "cnds": {}, "acts": {}, "vars": {} } }; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family || this.typeHasNoSaveBehavior(type)) continue; typeobj = { "instances": [] }; if (cr.hasAnyOwnProperty(type.extra)) typeobj["ex"] = CopyExtraObject(type.extra); for (j = 0, lenj = type.instances.length; j < lenj; j++) { typeobj["instances"].push(this.saveInstanceToJSON(type.instances[j])); } o["types"][type.sid.toString()] = typeobj; } for (i = 0, len = this.layouts_by_index.length; i < len; i++) { layout = this.layouts_by_index[i]; o["layouts"][layout.sid.toString()] = layout.saveToJSON(); } var ogroups = o["events"]["groups"]; for (i = 0, len = this.allGroups.length; i < len; i++) { g = this.allGroups[i]; ogroups[g.sid.toString()] = this.groups_by_name[g.group_name].group_active; } var ocnds = o["events"]["cnds"]; for (p in this.cndsBySid) { if (this.cndsBySid.hasOwnProperty(p)) { c = this.cndsBySid[p]; if (cr.hasAnyOwnProperty(c.extra)) ocnds[p] = { "ex": CopyExtraObject(c.extra) }; } } var oacts = o["events"]["acts"]; for (p in this.actsBySid) { if (this.actsBySid.hasOwnProperty(p)) { a = this.actsBySid[p]; if (cr.hasAnyOwnProperty(a.extra)) oacts[p] = { "ex": a.extra }; } } var ovars = o["events"]["vars"]; for (p in this.varsBySid) { if (this.varsBySid.hasOwnProperty(p)) { v = this.varsBySid[p]; if (!v.is_constant && (!v.parent || v.is_static)) ovars[p] = v.data; } } o["system"] = this.system.saveToJSON(); return JSON.stringify(o); }; Runtime.prototype.refreshUidMap = function () { var i, len, type, j, lenj, inst; this.objectsByUid = {}; for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; this.objectsByUid[inst.uid.toString()] = inst; } } }; Runtime.prototype.loadFromJSONString = function (str) { var o = JSON.parse(str); if (!o["c2save"]) return; // probably not a c2 save state if (o["version"] > 1) return; // from future version of c2; assume not compatible var rt = o["rt"]; this.kahanTime.reset(); this.kahanTime.sum = rt["time"]; this.timescale = rt["timescale"]; this.tickcount = rt["tickcount"]; this.start_time = Date.now() - rt["start_time_offset"]; var layout_sid = rt["running_layout"]; if (layout_sid !== this.running_layout.sid) { var changeToLayout = this.getLayoutBySid(layout_sid); if (changeToLayout) this.doChangeLayout(changeToLayout); else return; // layout that was saved on has gone missing (deleted?) } this.isLoadingState = true; var i, len, j, lenj, k, lenk, p, type, existing_insts, load_insts, inst, binst, layout, layer, g, iid, t; var otypes = o["types"]; for (p in otypes) { if (otypes.hasOwnProperty(p)) { type = this.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || this.typeHasNoSaveBehavior(type)) continue; if (otypes[p]["ex"]) type.extra = otypes[p]["ex"]; else cr.wipe(type.extra); existing_insts = type.instances; load_insts = otypes[p]["instances"]; for (i = 0, len = cr.min(existing_insts.length, load_insts.length); i < len; i++) { this.loadInstanceFromJSON(existing_insts[i], load_insts[i]); } for (i = load_insts.length, len = existing_insts.length; i < len; i++) this.DestroyInstance(existing_insts[i]); for (i = existing_insts.length, len = load_insts.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.running_layout.getLayerBySid(load_insts[i]["w"]["l"]); if (!layer) continue; } inst = this.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.loadInstanceFromJSON(inst, load_insts[i]); } type.stale_iids = true; } } this.ClearDeathRow(); this.refreshUidMap(); var olayouts = o["layouts"]; for (p in olayouts) { if (olayouts.hasOwnProperty(p)) { layout = this.getLayoutBySid(parseInt(p, 10)); if (!layout) continue; // must've gone missing layout.loadFromJSON(olayouts[p]); } } var ogroups = o["events"]["groups"]; for (p in ogroups) { if (ogroups.hasOwnProperty(p)) { g = this.getGroupBySid(parseInt(p, 10)); if (g && this.groups_by_name[g.group_name]) this.groups_by_name[g.group_name].group_active = ogroups[p]; } } var ocnds = o["events"]["cnds"]; for (p in ocnds) { if (ocnds.hasOwnProperty(p) && this.cndsBySid.hasOwnProperty(p)) { this.cndsBySid[p].extra = ocnds[p]["ex"]; } } var oacts = o["events"]["acts"]; for (p in oacts) { if (oacts.hasOwnProperty(p) && this.actsBySid.hasOwnProperty(p)) { this.actsBySid[p].extra = oacts[p]["ex"]; } } var ovars = o["events"]["vars"]; for (p in ovars) { if (ovars.hasOwnProperty(p) && this.varsBySid.hasOwnProperty(p)) { this.varsBySid[p].data = ovars[p]; } } this.next_uid = rt["next_uid"]; this.isLoadingState = false; this.system.loadFromJSON(o["system"]); for (i = 0, len = this.types_by_index.length; i < len; i++) { type = this.types_by_index[i]; if (type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) { inst = type.instances[j]; if (type.is_contained) { iid = inst.get_iid(); inst.siblings.length = 0; for (k = 0, lenk = type.container.length; k < lenk; k++) { t = type.container[k]; if (type === t) continue; ; inst.siblings.push(t.instances[iid]); } } if (inst.afterLoad) inst.afterLoad(); if (inst.behavior_insts) { for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++) { binst = inst.behavior_insts[k]; if (binst.afterLoad) binst.afterLoad(); } } } } this.redraw = true; }; Runtime.prototype.saveInstanceToJSON = function(inst, state_only) { var i, len, world, behinst, et; var type = inst.type; var plugin = type.plugin; var o = {}; if (state_only) o["c2"] = true; // mark as known json data from Construct 2 else o["uid"] = inst.uid; if (cr.hasAnyOwnProperty(inst.extra)) o["ex"] = CopyExtraObject(inst.extra); if (inst.instance_vars && inst.instance_vars.length) { o["ivs"] = {}; for (i = 0, len = inst.instance_vars.length; i < len; i++) { o["ivs"][inst.type.instvar_sids[i].toString()] = inst.instance_vars[i]; } } if (plugin.is_world) { world = { "x": inst.x, "y": inst.y, "w": inst.width, "h": inst.height, "l": inst.layer.sid, "zi": inst.get_zindex() }; if (inst.angle !== 0) world["a"] = inst.angle; if (inst.opacity !== 1) world["o"] = inst.opacity; if (inst.hotspotX !== 0.5) world["hX"] = inst.hotspotX; if (inst.hotspotY !== 0.5) world["hY"] = inst.hotspotY; if (inst.blend_mode !== 0) world["bm"] = inst.blend_mode; if (!inst.visible) world["v"] = inst.visible; if (!inst.collisionsEnabled) world["ce"] = inst.collisionsEnabled; if (inst.my_timescale !== -1) world["mts"] = inst.my_timescale; if (type.effect_types.length) { world["fx"] = []; for (i = 0, len = type.effect_types.length; i < len; i++) { et = type.effect_types[i]; world["fx"].push({"name": et.name, "active": inst.active_effect_flags[et.index], "params": inst.effect_params[et.index] }); } } o["w"] = world; } if (inst.behavior_insts && inst.behavior_insts.length) { o["behs"] = {}; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { behinst = inst.behavior_insts[i]; if (behinst.saveToJSON) o["behs"][behinst.type.sid.toString()] = behinst.saveToJSON(); } } if (inst.saveToJSON) o["data"] = inst.saveToJSON(); return o; }; Runtime.prototype.getInstanceVarIndexBySid = function (type, sid_) { var i, len; for (i = 0, len = type.instvar_sids.length; i < len; i++) { if (type.instvar_sids[i] === sid_) return i; } return -1; }; Runtime.prototype.getBehaviorIndexBySid = function (inst, sid_) { var i, len; for (i = 0, len = inst.behavior_insts.length; i < len; i++) { if (inst.behavior_insts[i].type.sid === sid_) return i; } return -1; }; Runtime.prototype.loadInstanceFromJSON = function(inst, o, state_only) { var p, i, len, iv, oivs, world, fxindex, obehs, behindex; var oldlayer; var type = inst.type; var plugin = type.plugin; if (state_only) { if (!o["c2"]) return; } else inst.uid = o["uid"]; if (o["ex"]) inst.extra = o["ex"]; else cr.wipe(inst.extra); oivs = o["ivs"]; if (oivs) { for (p in oivs) { if (oivs.hasOwnProperty(p)) { iv = this.getInstanceVarIndexBySid(type, parseInt(p, 10)); if (iv < 0 || iv >= inst.instance_vars.length) continue; // must've gone missing inst.instance_vars[iv] = oivs[p]; } } } if (plugin.is_world) { world = o["w"]; if (inst.layer.sid !== world["l"]) { oldlayer = inst.layer; inst.layer = this.running_layout.getLayerBySid(world["l"]); if (inst.layer) { inst.layer.instances.push(inst); inst.layer.zindices_stale = true; cr.arrayFindRemove(oldlayer.instances, inst); oldlayer.zindices_stale = true; } else { inst.layer = oldlayer; this.DestroyInstance(inst); } } inst.x = world["x"]; inst.y = world["y"]; inst.width = world["w"]; inst.height = world["h"]; inst.zindex = world["zi"]; inst.angle = world.hasOwnProperty("a") ? world["a"] : 0; inst.opacity = world.hasOwnProperty("o") ? world["o"] : 1; inst.hotspotX = world.hasOwnProperty("hX") ? world["hX"] : 0.5; inst.hotspotY = world.hasOwnProperty("hY") ? world["hY"] : 0.5; inst.visible = world.hasOwnProperty("v") ? world["v"] : true; inst.collisionsEnabled = world.hasOwnProperty("ce") ? world["ce"] : true; inst.my_timescale = world.hasOwnProperty("mts") ? world["mts"] : -1; inst.blend_mode = world.hasOwnProperty("bm") ? world["bm"] : 0;; inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode); if (this.gl) cr.setGLBlend(inst, inst.blend_mode, this.gl); inst.set_bbox_changed(); if (world.hasOwnProperty("fx")) { for (i = 0, len = world["fx"].length; i < len; i++) { fxindex = type.getEffectIndexByName(world["fx"][i]["name"]); if (fxindex < 0) continue; // must've gone missing inst.active_effect_flags[fxindex] = world["fx"][i]["active"]; inst.effect_params[fxindex] = world["fx"][i]["params"]; } } inst.updateActiveEffects(); } obehs = o["behs"]; if (obehs) { for (p in obehs) { if (obehs.hasOwnProperty(p)) { behindex = this.getBehaviorIndexBySid(inst, parseInt(p, 10)); if (behindex < 0) continue; // must've gone missing inst.behavior_insts[behindex].loadFromJSON(obehs[p]); } } } if (o["data"]) inst.loadFromJSON(o["data"]); }; cr.runtime = Runtime; cr.createRuntime = function (canvasid) { return new Runtime(document.getElementById(canvasid)); }; cr.createDCRuntime = function (w, h) { return new Runtime({ "dc": true, "width": w, "height": h }); }; window["cr_createRuntime"] = cr.createRuntime; window["cr_createDCRuntime"] = cr.createDCRuntime; window["createCocoonJSRuntime"] = function () { window["c2cocoonjs"] = true; var canvas = document.createElement("screencanvas") || document.createElement("canvas"); canvas.screencanvas = true; document.body.appendChild(canvas); var rt = new Runtime(canvas); window["c2runtime"] = rt; window.addEventListener("orientationchange", function () { window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); }); window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; window["createEjectaRuntime"] = function () { var canvas = document.getElementById("canvas"); var rt = new Runtime(canvas); window["c2runtime"] = rt; window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight); return rt; }; }()); window["cr_getC2Runtime"] = function() { var canvas = document.getElementById("c2canvas"); if (canvas) return canvas["c2runtime"]; else if (window["c2runtime"]) return window["c2runtime"]; else return null; } window["cr_sizeCanvas"] = function(w, h) { if (w === 0 || h === 0) return; var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSize"](w, h); } window["cr_setSuspended"] = function(s) { var runtime = window["cr_getC2Runtime"](); if (runtime) runtime["setSuspended"](s); } ; (function() { function Layout(runtime, m) { this.runtime = runtime; this.event_sheet = null; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); this.scale = 1.0; this.angle = 0; this.first_visit = true; this.name = m[0]; this.width = m[1]; this.height = m[2]; this.unbounded_scrolling = m[3]; this.sheetname = m[4]; this.sid = m[5]; var lm = m[6]; var i, len; this.layers = []; this.initial_types = []; for (i = 0, len = lm.length; i < len; i++) { var layer = new cr.layer(this, lm[i]); layer.number = i; cr.seal(layer); this.layers.push(layer); } var im = m[7]; this.initial_nonworld = []; for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]]; ; if (!type.default_instance) type.default_instance = inst; this.initial_nonworld.push(inst); if (this.initial_types.indexOf(type) === -1) this.initial_types.push(type); } this.effect_types = []; this.active_effect_types = []; this.effect_params = []; for (i = 0, len = m[8].length; i < len; i++) { this.effect_types.push({ id: m[8][i][0], name: m[8][i][1], shaderindex: -1, active: true, index: i }); this.effect_params.push(m[8][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); this.persist_data = {}; }; Layout.prototype.saveObjectToPersist = function (inst) { var sidStr = inst.type.sid.toString(); if (!this.persist_data.hasOwnProperty(sidStr)) this.persist_data[sidStr] = []; var type_persist = this.persist_data[sidStr]; type_persist.push(this.runtime.saveInstanceToJSON(inst)); }; Layout.prototype.hasOpaqueBottomLayer = function () { var layer = this.layers[0]; return !layer.transparent && layer.opacity === 1.0 && !layer.forceOwnTexture && layer.visible; }; Layout.prototype.updateActiveEffects = function () { this.active_effect_types.length = 0; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) this.active_effect_types.push(et); } }; Layout.prototype.getEffectByName = function (name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; var created_instances = []; Layout.prototype.startRunning = function () { if (this.sheetname) { this.event_sheet = this.runtime.eventsheets[this.sheetname]; ; this.event_sheet.updateDeepIncludes(); } this.runtime.running_layout = this; this.scrollX = (this.runtime.original_width / 2); this.scrollY = (this.runtime.original_height / 2); var i, k, len, lenk, type, type_instances, inst, iid, t, s, p, q, type_data, layer; for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { type = this.runtime.types_by_index[i]; if (type.is_family) continue; // instances are only transferred for their real type type_instances = type.instances; for (k = 0, lenk = type_instances.length; k < lenk; k++) { inst = type_instances[k]; if (inst.layer) { var num = inst.layer.number; if (num >= this.layers.length) num = this.layers.length - 1; inst.layer = this.layers[num]; if (inst.layer.instances.indexOf(inst) === -1) inst.layer.instances.push(inst); inst.layer.zindices_stale = true; } } } var layer; created_instances.length = 0; this.boundScrolling(); for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; layer.createInitialInstances(); // fills created_instances layer.disableAngle = true; var px = layer.canvasToLayer(0, 0, true, true); var py = layer.canvasToLayer(0, 0, false, true); layer.disableAngle = false; if (this.runtime.pixel_rounding) { px = (px + 0.5) | 0; py = (py + 0.5) | 0; } layer.rotateViewport(px, py, null); } var uids_changed = false; if (!this.first_visit) { for (p in this.persist_data) { if (this.persist_data.hasOwnProperty(p)) { type = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!type || type.is_family || !this.runtime.typeHasPersistBehavior(type)) continue; type_data = this.persist_data[p]; for (i = 0, len = type_data.length; i < len; i++) { layer = null; if (type.plugin.is_world) { layer = this.getLayerBySid(type_data[i]["w"]["l"]); if (!layer) continue; } inst = this.runtime.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true); this.runtime.loadInstanceFromJSON(inst, type_data[i]); uids_changed = true; created_instances.push(inst); } type_data.length = 0; } } for (i = 0, len = this.layers.length; i < len; i++) { this.layers[i].instances.sort(sortInstanceByZIndex); this.layers[i].zindices_stale = true; // in case of duplicates/holes } } if (uids_changed) { this.runtime.ClearDeathRow(); this.runtime.refreshUidMap(); } for (i = 0; i < created_instances.length; i++) { inst = created_instances[i]; if (!inst.type.is_contained) continue; iid = inst.get_iid(); for (k = 0, lenk = inst.type.container.length; k < lenk; k++) { t = inst.type.container[k]; if (inst.type === t) continue; if (t.instances.length > iid) inst.siblings.push(t.instances[iid]); else { if (!t.default_instance) { } else { s = this.runtime.createInstanceFromInit(t.default_instance, inst.layer, true, inst.x, inst.y, true); this.runtime.ClearDeathRow(); t.updateIIDs(); inst.siblings.push(s); created_instances.push(s); // come back around and link up its own instances too } } } } for (i = 0, len = this.initial_nonworld.length; i < len; i++) { inst = this.runtime.createInstanceFromInit(this.initial_nonworld[i], null, true); ; } this.runtime.changelayout = null; this.runtime.ClearDeathRow(); if (this.runtime.ctx && !this.runtime.isDomFree) { for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; if (t.is_family || !t.instances.length || !t.preloadCanvas2D) continue; t.preloadCanvas2D(this.runtime.ctx); } } /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout start: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ for (i = 0, len = created_instances.length; i < len; i++) { inst = created_instances[i]; this.runtime.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnCreated, inst); } created_instances.length = 0; this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutStart, null); this.first_visit = false; }; Layout.prototype.createGlobalNonWorlds = function () { var i, k, len, initial_inst, inst, type; for (i = 0, k = 0, len = this.initial_nonworld.length; i < len; i++) { initial_inst = this.initial_nonworld[i]; type = this.runtime.types_by_index[initial_inst[1]]; if (type.global) inst = this.runtime.createInstanceFromInit(initial_inst, null, true); else { this.initial_nonworld[k] = initial_inst; k++; } } this.initial_nonworld.length = k; }; Layout.prototype.stopRunning = function () { ; /* if (this.runtime.glwrap) { console.log("Estimated VRAM at layout end: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb"); } */ this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutEnd, null); this.runtime.system.waits.length = 0; var i, leni, j, lenj; var layer_instances, inst, type; for (i = 0, leni = this.layers.length; i < leni; i++) { layer_instances = this.layers[i].instances; for (j = 0, lenj = layer_instances.length; j < lenj; j++) { inst = layer_instances[j]; if (!inst.type.global) { if (this.runtime.typeHasPersistBehavior(inst.type)) this.saveObjectToPersist(inst); this.runtime.DestroyInstance(inst); } } this.runtime.ClearDeathRow(); layer_instances.length = 0; this.layers[i].zindices_stale = true; } for (i = 0, leni = this.runtime.types_by_index.length; i < leni; i++) { type = this.runtime.types_by_index[i]; if (type.global || type.plugin.is_world || type.plugin.singleglobal || type.is_family) continue; for (j = 0, lenj = type.instances.length; j < lenj; j++) this.runtime.DestroyInstance(type.instances[j]); this.runtime.ClearDeathRow(); } }; Layout.prototype.draw = function (ctx) { var layout_canvas; var layout_ctx = ctx; var ctx_changed = false; var render_offscreen = !this.runtime.fullscreenScalingQuality; if (render_offscreen) { if (!this.runtime.layout_canvas) { this.runtime.layout_canvas = document.createElement("canvas"); layout_canvas = this.runtime.layout_canvas; layout_canvas.width = this.runtime.draw_width; layout_canvas.height = this.runtime.draw_height; this.runtime.layout_ctx = layout_canvas.getContext("2d"); ctx_changed = true; } layout_canvas = this.runtime.layout_canvas; layout_ctx = this.runtime.layout_ctx; if (layout_canvas.width !== this.runtime.draw_width) { layout_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layout_canvas.height !== this.runtime.draw_height) { layout_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { layout_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling; layout_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling; } } layout_ctx.globalAlpha = 1; layout_ctx.globalCompositeOperation = "source-over"; if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer()) layout_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); var i, len, l; for (i = 0, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.visible && l.opacity > 0 && l.blend_mode !== 11) l.draw(layout_ctx); } if (render_offscreen) { ctx.drawImage(layout_canvas, 0, 0, this.runtime.width, this.runtime.height); } }; Layout.prototype.drawGL = function (glw) { var render_to_texture = (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality); if (render_to_texture) { if (!this.runtime.layout_tex) { this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layout_tex); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.draw_width, this.runtime.draw_height); } } else { if (this.runtime.layout_tex) { glw.setRenderingToTexture(null); glw.deleteTexture(this.runtime.layout_tex); this.runtime.layout_tex = null; } } if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer()) glw.clear(0, 0, 0, 0); var i, len; for (i = 0, len = this.layers.length; i < len; i++) { if (this.layers[i].visible && this.layers[i].opacity > 0) this.layers[i].drawGL(glw); } if (render_to_texture) { if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && this.runtime.fullscreenScalingQuality)) { if (this.active_effect_types.length === 1) { var etindex = this.active_effect_types[0].index; glw.switchProgram(this.active_effect_types[0].shaderindex); glw.setProgramParameters(null, // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd this.scale, // layerScale this.angle, // layerAngle 0.0, 0.0, // viewOrigin this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(this.active_effect_types[0].shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); } glw.setRenderingToTexture(null); // to backbuffer glw.setOpacity(1); glw.setTexture(this.runtime.layout_tex); glw.setAlphaBlend(); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.width / 2; var halfh = this.runtime.height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); } else { this.renderEffectChain(glw, null, null, null); } } }; Layout.prototype.getRenderTarget = function() { return (this.active_effect_types.length > 0 || this.runtime.uses_background_blending || !this.runtime.fullscreenScalingQuality) ? this.runtime.layout_tex : null; }; Layout.prototype.getMinLayerScale = function () { var m = this.layers[0].getScale(); var i, len, l; for (i = 1, len = this.layers.length; i < len; i++) { l = this.layers[i]; if (l.parallaxX === 0 && l.parallaxY === 0) continue; if (l.getScale() < m) m = l.getScale(); } return m; }; Layout.prototype.scrollToX = function (x) { if (!this.unbounded_scrolling) { var widthBoundary = (this.runtime.draw_width * (1 / this.getMinLayerScale()) / 2); if (x > this.width - widthBoundary) x = this.width - widthBoundary; if (x < widthBoundary) x = widthBoundary; } if (this.scrollX !== x) { this.scrollX = x; this.runtime.redraw = true; } }; Layout.prototype.scrollToY = function (y) { if (!this.unbounded_scrolling) { var heightBoundary = (this.runtime.draw_height * (1 / this.getMinLayerScale()) / 2); if (y > this.height - heightBoundary) y = this.height - heightBoundary; if (y < heightBoundary) y = heightBoundary; } if (this.scrollY !== y) { this.scrollY = y; this.runtime.redraw = true; } }; Layout.prototype.boundScrolling = function () { this.scrollToX(this.scrollX); this.scrollToY(this.scrollY); }; Layout.prototype.renderEffectChain = function (glw, layer, inst, rendertarget) { var active_effect_types = inst ? inst.active_effect_types : layer ? layer.active_effect_types : this.active_effect_types; var layerScale = 1, layerAngle = 0, viewOriginLeft = 0, viewOriginTop = 0; if (inst) { layerScale = inst.layer.getScale(); layerAngle = inst.layer.getAngle(); viewOriginLeft = inst.layer.viewLeft; viewOriginTop = inst.layer.viewTop; } else if (layer) { layerScale = layer.getScale(); layerAngle = layer.getAngle(); viewOriginLeft = layer.viewLeft; viewOriginTop = layer.viewTop; } var fx_tex = this.runtime.fx_tex; var i, len, last, temp, fx_index = 0, other_fx_index = 1; var y, h; var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var halfw = windowWidth / 2; var halfh = windowHeight / 2; var rcTex = layer ? layer.rcTex : this.rcTex; var rcTex2 = layer ? layer.rcTex2 : this.rcTex2; var screenleft = 0, clearleft = 0; var screentop = 0, cleartop = 0; var screenright = windowWidth, clearright = windowWidth; var screenbottom = windowHeight, clearbottom = windowHeight; var boxExtendHorizontal = 0; var boxExtendVertical = 0; var inst_layer_angle = inst ? inst.layer.getAngle() : 0; if (inst) { for (i = 0, len = active_effect_types.length; i < len; i++) { boxExtendHorizontal += glw.getProgramBoxExtendHorizontal(active_effect_types[i].shaderindex); boxExtendVertical += glw.getProgramBoxExtendVertical(active_effect_types[i].shaderindex); } var bbox = inst.bbox; screenleft = layer.layerToCanvas(bbox.left, bbox.top, true, true); screentop = layer.layerToCanvas(bbox.left, bbox.top, false, true); screenright = layer.layerToCanvas(bbox.right, bbox.bottom, true, true); screenbottom = layer.layerToCanvas(bbox.right, bbox.bottom, false, true); if (inst_layer_angle !== 0) { var screentrx = layer.layerToCanvas(bbox.right, bbox.top, true, true); var screentry = layer.layerToCanvas(bbox.right, bbox.top, false, true); var screenblx = layer.layerToCanvas(bbox.left, bbox.bottom, true, true); var screenbly = layer.layerToCanvas(bbox.left, bbox.bottom, false, true); temp = Math.min(screenleft, screenright, screentrx, screenblx); screenright = Math.max(screenleft, screenright, screentrx, screenblx); screenleft = temp; temp = Math.min(screentop, screenbottom, screentry, screenbly); screenbottom = Math.max(screentop, screenbottom, screentry, screenbly); screentop = temp; } screenleft -= boxExtendHorizontal; screentop -= boxExtendVertical; screenright += boxExtendHorizontal; screenbottom += boxExtendVertical; rcTex2.left = screenleft / windowWidth; rcTex2.top = 1 - screentop / windowHeight; rcTex2.right = screenright / windowWidth; rcTex2.bottom = 1 - screenbottom / windowHeight; clearleft = screenleft = cr.floor(screenleft); cleartop = screentop = cr.floor(screentop); clearright = screenright = cr.ceil(screenright); clearbottom = screenbottom = cr.ceil(screenbottom); clearleft -= boxExtendHorizontal; cleartop -= boxExtendVertical; clearright += boxExtendHorizontal; clearbottom += boxExtendVertical; if (screenleft < 0) screenleft = 0; if (screentop < 0) screentop = 0; if (screenright > windowWidth) screenright = windowWidth; if (screenbottom > windowHeight) screenbottom = windowHeight; if (clearleft < 0) clearleft = 0; if (cleartop < 0) cleartop = 0; if (clearright > windowWidth) clearright = windowWidth; if (clearbottom > windowHeight) clearbottom = windowHeight; rcTex.left = screenleft / windowWidth; rcTex.top = 1 - screentop / windowHeight; rcTex.right = screenright / windowWidth; rcTex.bottom = 1 - screenbottom / windowHeight; } else { rcTex.left = rcTex2.left = 0; rcTex.top = rcTex2.top = 0; rcTex.right = rcTex2.right = 1; rcTex.bottom = rcTex2.bottom = 1; } var pre_draw = (inst && (((inst.angle || inst_layer_angle) && glw.programUsesDest(active_effect_types[0].shaderindex)) || boxExtendHorizontal !== 0 || boxExtendVertical !== 0 || inst.opacity !== 1 || inst.type.plugin.must_predraw)) || (layer && !inst && layer.opacity !== 1); glw.setAlphaBlend(); if (pre_draw) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(0); glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { inst.drawGL(glw); } else { glw.setTexture(this.runtime.layer_tex); glw.setOpacity(layer.opacity); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst) { temp = rcTex.top; rcTex.top = rcTex.bottom; rcTex.bottom = temp; } fx_index = 1; other_fx_index = 0; } glw.setOpacity(1); var last = active_effect_types.length - 1; var post_draw = glw.programUsesCrossSampling(active_effect_types[last].shaderindex) || (!layer && !inst && !this.runtime.fullscreenScalingQuality); var etindex = 0; for (i = 0, len = active_effect_types.length; i < len; i++) { if (!fx_tex[fx_index]) { fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight) { glw.deleteTexture(fx_tex[fx_index]); fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling); } glw.switchProgram(active_effect_types[i].shaderindex); etindex = active_effect_types[i].index; if (glw.programIsAnimated(active_effect_types[i].shaderindex)) this.runtime.redraw = true; if (i == 0 && !pre_draw) { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); if (inst) { glw.setProgramParameters(rendertarget, // backTex 1.0 / inst.width, // pixelWidth 1.0 / inst.height, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, inst.effect_params[etindex]); // fx params inst.drawGL(glw); } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, layer ? // fx params layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(layer ? this.runtime.layer_tex : this.runtime.layout_tex); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); } rcTex2.left = rcTex2.top = 0; rcTex2.right = rcTex2.bottom = 1; if (inst && !post_draw) { temp = screenbottom; screenbottom = screentop; screentop = temp; } } else { glw.setProgramParameters(rendertarget, // backTex 1.0 / windowWidth, // pixelWidth 1.0 / windowHeight, // pixelHeight rcTex2.left, rcTex2.top, // destStart rcTex2.right, rcTex2.bottom, // destEnd layerScale, layerAngle, viewOriginLeft, viewOriginTop, inst ? // fx params inst.effect_params[etindex] : layer ? layer.effect_params[etindex] : this.effect_params[etindex]); glw.setTexture(null); if (i === last && !post_draw) { if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); glw.setRenderingToTexture(rendertarget); } else { glw.setRenderingToTexture(fx_tex[fx_index]); h = clearbottom - cleartop; y = (windowHeight - cleartop) - h; glw.clearRect(clearleft, y, clearright - clearleft, h); } glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); if (i === last && !post_draw) glw.setTexture(null); } fx_index = (fx_index === 0 ? 1 : 0); other_fx_index = (fx_index === 0 ? 1 : 0); // will be opposite to fx_index since it was just assigned } if (post_draw) { glw.switchProgram(0); if (inst) glw.setBlend(inst.srcBlend, inst.destBlend); else if (layer) glw.setBlend(layer.srcBlend, layer.destBlend); else { if (!this.runtime.fullscreenScalingQuality) { glw.setSize(this.runtime.width, this.runtime.height); halfw = this.runtime.width / 2; halfh = this.runtime.height / 2; screenleft = 0; screentop = 0; screenright = this.runtime.width; screenbottom = this.runtime.height; } } glw.setRenderingToTexture(rendertarget); glw.setTexture(fx_tex[other_fx_index]); glw.resetModelView(); glw.translate(-halfw, -halfh); glw.updateModelView(); if (inst && active_effect_types.length === 1 && !pre_draw) glw.quadTex(screenleft, screentop, screenright, screentop, screenright, screenbottom, screenleft, screenbottom, rcTex); else glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex); glw.setTexture(null); } }; Layout.prototype.getLayerBySid = function (sid_) { var i, len; for (i = 0, len = this.layers.length; i < len; i++) { if (this.layers[i].sid === sid_) return this.layers[i]; } return null; }; Layout.prototype.saveToJSON = function () { var i, len, layer, et; var o = { "sx": this.scrollX, "sy": this.scrollY, "s": this.scale, "a": this.angle, "w": this.width, "h": this.height, "fv": this.first_visit, // added r127 "persist": this.persist_data, "fx": [], "layers": {} }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } for (i = 0, len = this.layers.length; i < len; i++) { layer = this.layers[i]; o["layers"][layer.sid.toString()] = layer.saveToJSON(); } return o; }; Layout.prototype.loadFromJSON = function (o) { var i, len, fx, p, layer; this.scrollX = o["sx"]; this.scrollY = o["sy"]; this.scale = o["s"]; this.angle = o["a"]; this.width = o["w"]; this.height = o["h"]; this.persist_data = o["persist"]; if (typeof o["fv"] !== "undefined") this.first_visit = o["fv"]; var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); var olayers = o["layers"]; for (p in olayers) { if (olayers.hasOwnProperty(p)) { layer = this.getLayerBySid(parseInt(p, 10)); if (!layer) continue; // must've gone missing layer.loadFromJSON(olayers[p]); } } }; cr.layout = Layout; function Layer(layout, m) { this.layout = layout; this.runtime = layout.runtime; this.instances = []; // running instances this.scale = 1.0; this.angle = 0; this.disableAngle = false; this.tmprect = new cr.rect(0, 0, 0, 0); this.tmpquad = new cr.quad(); this.viewLeft = 0; this.viewRight = 0; this.viewTop = 0; this.viewBottom = 0; this.zindices_stale = false; this.name = m[0]; this.index = m[1]; this.sid = m[2]; this.visible = m[3]; // initially visible this.background_color = m[4]; this.transparent = m[5]; this.parallaxX = m[6]; this.parallaxY = m[7]; this.opacity = m[8]; this.forceOwnTexture = m[9]; this.zoomRate = m[10]; this.blend_mode = m[11]; this.effect_fallback = m[12]; this.compositeOp = "source-over"; this.srcBlend = 0; this.destBlend = 0; this.render_offscreen = false; var im = m[13]; var i, len; this.initial_instances = []; for (i = 0, len = im.length; i < len; i++) { var inst = im[i]; var type = this.runtime.types_by_index[inst[1]]; ; if (!type.default_instance) { type.default_instance = inst; type.default_layerindex = this.index; } this.initial_instances.push(inst); if (this.layout.initial_types.indexOf(type) === -1) this.layout.initial_types.push(type); } this.effect_types = []; this.active_effect_types = []; this.effect_params = []; for (i = 0, len = m[14].length; i < len; i++) { this.effect_types.push({ id: m[14][i][0], name: m[14][i][1], shaderindex: -1, active: true, index: i }); this.effect_params.push(m[14][i][2].slice(0)); } this.updateActiveEffects(); this.rcTex = new cr.rect(0, 0, 1, 1); this.rcTex2 = new cr.rect(0, 0, 1, 1); }; Layer.prototype.updateActiveEffects = function () { this.active_effect_types.length = 0; var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.active) this.active_effect_types.push(et); } }; Layer.prototype.getEffectByName = function (name_) { var i, len, et; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; if (et.name === name_) return et; } return null; }; Layer.prototype.createInitialInstances = function () { var i, k, len, inst, initial_inst, type, keep, hasPersistBehavior; for (i = 0, k = 0, len = this.initial_instances.length; i < len; i++) { initial_inst = this.initial_instances[i]; type = this.runtime.types_by_index[initial_inst[1]]; ; hasPersistBehavior = this.runtime.typeHasPersistBehavior(type); keep = true; if (!hasPersistBehavior || this.layout.first_visit) { inst = this.runtime.createInstanceFromInit(initial_inst, this, true); ; created_instances.push(inst); if (inst.type.global) keep = false; } if (keep) { this.initial_instances[k] = this.initial_instances[i]; k++; } } this.initial_instances.length = k; this.runtime.ClearDeathRow(); // flushes creation row so IIDs will be correct if (!this.runtime.glwrap && this.effect_types.length) // no WebGL renderer and shaders used this.blend_mode = this.effect_fallback; // use fallback blend mode this.compositeOp = cr.effectToCompositeOp(this.blend_mode); if (this.runtime.gl) cr.setGLBlend(this, this.blend_mode, this.runtime.gl); }; Layer.prototype.updateZIndices = function () { if (!this.zindices_stale) return; var i, len; for (i = 0, len = this.instances.length; i < len; i++) { ; ; this.instances[i].zindex = i; } this.zindices_stale = false; }; Layer.prototype.getScale = function (include_aspect) { return this.getNormalScale() * (this.runtime.fullscreenScalingQuality || include_aspect ? this.runtime.aspect_scale : 1); }; Layer.prototype.getNormalScale = function () { return ((this.scale * this.layout.scale) - 1) * this.zoomRate + 1; }; Layer.prototype.getAngle = function () { if (this.disableAngle) return 0; return cr.clamp_angle(this.layout.angle + this.angle); }; Layer.prototype.draw = function (ctx) { this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.blend_mode !== 0); var layer_canvas = this.runtime.canvas; var layer_ctx = ctx; var ctx_changed = false; if (this.render_offscreen) { if (!this.runtime.layer_canvas) { this.runtime.layer_canvas = document.createElement("canvas"); ; layer_canvas = this.runtime.layer_canvas; layer_canvas.width = this.runtime.draw_width; layer_canvas.height = this.runtime.draw_height; this.runtime.layer_ctx = layer_canvas.getContext("2d"); ; ctx_changed = true; } layer_canvas = this.runtime.layer_canvas; layer_ctx = this.runtime.layer_ctx; if (layer_canvas.width !== this.runtime.draw_width) { layer_canvas.width = this.runtime.draw_width; ctx_changed = true; } if (layer_canvas.height !== this.runtime.draw_height) { layer_canvas.height = this.runtime.draw_height; ctx_changed = true; } if (ctx_changed) { layer_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling; layer_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling; } if (this.transparent) layer_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.globalAlpha = 1; layer_ctx.globalCompositeOperation = "source-over"; if (!this.transparent) { layer_ctx.fillStyle = "rgb(" + this.background_color[0] + "," + this.background_color[1] + "," + this.background_color[2] + ")"; layer_ctx.fillRect(0, 0, this.runtime.draw_width, this.runtime.draw_height); } layer_ctx.save(); this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = (px + 0.5) | 0; py = (py + 0.5) | 0; } this.rotateViewport(px, py, layer_ctx); var myscale = this.getScale(); layer_ctx.scale(myscale, myscale); layer_ctx.translate(-px, -py); var i, len, inst, bbox; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; if (!inst.visible || inst.width === 0 || inst.height === 0) continue; inst.update_bbox(); bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) continue; layer_ctx.globalCompositeOperation = inst.compositeOp; inst.draw(layer_ctx); } layer_ctx.restore(); if (this.render_offscreen) { ctx.globalCompositeOperation = this.compositeOp; ctx.globalAlpha = this.opacity; ctx.drawImage(layer_canvas, 0, 0); } }; Layer.prototype.rotateViewport = function (px, py, ctx) { var myscale = this.getScale(); this.viewLeft = px; this.viewTop = py; this.viewRight = px + (this.runtime.draw_width * (1 / myscale)); this.viewBottom = py + (this.runtime.draw_height * (1 / myscale)); var myAngle = this.getAngle(); if (myAngle !== 0) { if (ctx) { ctx.translate(this.runtime.draw_width / 2, this.runtime.draw_height / 2); ctx.rotate(-myAngle); ctx.translate(this.runtime.draw_width / -2, this.runtime.draw_height / -2); } this.tmprect.set(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom); this.tmprect.offset((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); this.tmpquad.set_from_rotated_rect(this.tmprect, myAngle); this.tmpquad.bounding_box(this.tmprect); this.tmprect.offset((this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2); this.viewLeft = this.tmprect.left; this.viewTop = this.tmprect.top; this.viewRight = this.tmprect.right; this.viewBottom = this.tmprect.bottom; } } Layer.prototype.drawGL = function (glw) { var windowWidth = this.runtime.draw_width; var windowHeight = this.runtime.draw_height; var shaderindex = 0; var etindex = 0; this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.active_effect_types.length > 0 || this.blend_mode !== 0); if (this.render_offscreen) { if (!this.runtime.layer_tex) { this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height) { glw.deleteTexture(this.runtime.layer_tex); this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling); } glw.setRenderingToTexture(this.runtime.layer_tex); if (this.transparent) glw.clear(0, 0, 0, 0); } if (!this.transparent) { glw.clear(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1); } this.disableAngle = true; var px = this.canvasToLayer(0, 0, true, true); var py = this.canvasToLayer(0, 0, false, true); this.disableAngle = false; if (this.runtime.pixel_rounding) { px = (px + 0.5) | 0; py = (py + 0.5) | 0; } this.rotateViewport(px, py, null); var myscale = this.getScale(); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); var i, len, inst, bbox; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; if (!inst.visible || inst.width === 0 || inst.height === 0) continue; inst.update_bbox(); bbox = inst.bbox; if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom) continue; if (inst.uses_shaders) { shaderindex = inst.active_effect_types[0].shaderindex; etindex = inst.active_effect_types[0].index; if (inst.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && !glw.programExtendsBox(shaderindex) && ((!inst.angle && !inst.layer.getAngle()) || !glw.programUsesDest(shaderindex)) && inst.opacity === 1 && !inst.type.plugin.must_predraw) { glw.switchProgram(shaderindex); glw.setBlend(inst.srcBlend, inst.destBlend); if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; var destStartX = 0, destStartY = 0, destEndX = 0, destEndY = 0; if (glw.programUsesDest(shaderindex)) { var bbox = inst.bbox; var screenleft = this.layerToCanvas(bbox.left, bbox.top, true, true); var screentop = this.layerToCanvas(bbox.left, bbox.top, false, true); var screenright = this.layerToCanvas(bbox.right, bbox.bottom, true, true); var screenbottom = this.layerToCanvas(bbox.right, bbox.bottom, false, true); destStartX = screenleft / windowWidth; destStartY = 1 - screentop / windowHeight; destEndX = screenright / windowWidth; destEndY = 1 - screenbottom / windowHeight; } glw.setProgramParameters(this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget(), // backTex 1.0 / inst.width, // pixelWidth 1.0 / inst.height, // pixelHeight destStartX, destStartY, destEndX, destEndY, this.getScale(), this.getAngle(), this.viewLeft, this.viewTop, inst.effect_params[etindex]); inst.drawGL(glw); } else { this.layout.renderEffectChain(glw, this, inst, this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget()); glw.resetModelView(); glw.scale(myscale, myscale); glw.rotateZ(-this.getAngle()); glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2); glw.updateModelView(); } } else { glw.switchProgram(0); // un-set any previously set shader glw.setBlend(inst.srcBlend, inst.destBlend); inst.drawGL(glw); } } if (this.render_offscreen) { shaderindex = this.active_effect_types.length ? this.active_effect_types[0].shaderindex : 0; etindex = this.active_effect_types.length ? this.active_effect_types[0].index : 0; if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) && this.opacity === 1)) { if (this.active_effect_types.length === 1) { glw.switchProgram(shaderindex); glw.setProgramParameters(this.layout.getRenderTarget(), // backTex 1.0 / this.runtime.draw_width, // pixelWidth 1.0 / this.runtime.draw_height, // pixelHeight 0.0, 0.0, // destStart 1.0, 1.0, // destEnd this.getScale(), // layerScale this.getAngle(), this.viewLeft, this.viewTop, this.effect_params[etindex]); // fx parameters if (glw.programIsAnimated(shaderindex)) this.runtime.redraw = true; } else glw.switchProgram(0); glw.setRenderingToTexture(this.layout.getRenderTarget()); glw.setOpacity(this.opacity); glw.setTexture(this.runtime.layer_tex); glw.setBlend(this.srcBlend, this.destBlend); glw.resetModelView(); glw.updateModelView(); var halfw = this.runtime.draw_width / 2; var halfh = this.runtime.draw_height / 2; glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh); glw.setTexture(null); } else { this.layout.renderEffectChain(glw, this, null, this.layout.getRenderTarget()); } } }; Layer.prototype.canvasToLayer = function (ptx, pty, getx, using_draw_area) { var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina) { ptx *= multiplier; pty *= multiplier; } var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x += ptx * invScale; y += pty * invScale; var a = this.getAngle(); if (a !== 0) { x -= this.layout.scrollX; y -= this.layout.scrollY; var cosa = Math.cos(a); var sina = Math.sin(a); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += this.layout.scrollX; y += this.layout.scrollY; } return getx ? x : y; }; Layer.prototype.layerToCanvas = function (ptx, pty, getx, using_draw_area) { var a = this.getAngle(); if (a !== 0) { ptx -= this.layout.scrollX; pty -= this.layout.scrollY; var cosa = Math.cos(-a); var sina = Math.sin(-a); var x_temp = (ptx * cosa) - (pty * sina); pty = (pty * cosa) + (ptx * sina); ptx = x_temp; ptx += this.layout.scrollX; pty += this.layout.scrollY; } var ox = this.runtime.parallax_x_origin; var oy = this.runtime.parallax_y_origin; var x = ((this.layout.scrollX - ox) * this.parallaxX) + ox; var y = ((this.layout.scrollY - oy) * this.parallaxY) + oy; var invScale = 1 / this.getScale(!using_draw_area); if (using_draw_area) { x -= (this.runtime.draw_width * invScale) / 2; y -= (this.runtime.draw_height * invScale) / 2; } else { x -= (this.runtime.width * invScale) / 2; y -= (this.runtime.height * invScale) / 2; } x = (ptx - x) / invScale; y = (pty - y) / invScale; var multiplier = this.runtime.devicePixelRatio; if (this.runtime.isRetina && !using_draw_area) { x /= multiplier; y /= multiplier; } return getx ? x : y; }; Layer.prototype.rotatePt = function (x_, y_, getx) { if (this.getAngle() === 0) return getx ? x_ : y_; var nx = this.layerToCanvas(x_, y_, true); var ny = this.layerToCanvas(x_, y_, false); this.disableAngle = true; var px = this.canvasToLayer(nx, ny, true); var py = this.canvasToLayer(nx, ny, true); this.disableAngle = false; return getx ? px : py; }; Layer.prototype.saveToJSON = function () { var i, len, et; var o = { "s": this.scale, "a": this.angle, "vl": this.viewLeft, "vt": this.viewTop, "vr": this.viewRight, "vb": this.viewBottom, "v": this.visible, "bc": this.background_color, "t": this.transparent, "px": this.parallaxX, "py": this.parallaxY, "o": this.opacity, "zr": this.zoomRate, "fx": [], "instances": [] }; for (i = 0, len = this.effect_types.length; i < len; i++) { et = this.effect_types[i]; o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] }); } return o; }; function sortInstanceByZIndex(a, b) { return a.zindex - b.zindex; }; Layer.prototype.loadFromJSON = function (o) { var i, len, p, inst, fx; this.scale = o["s"]; this.angle = o["a"]; this.viewLeft = o["vl"]; this.viewTop = o["vt"]; this.viewRight = o["vr"]; this.viewBottom = o["vb"]; this.visible = o["v"]; this.background_color = o["bc"]; this.transparent = o["t"]; this.parallaxX = o["px"]; this.parallaxY = o["py"]; this.opacity = o["o"]; this.zoomRate = o["zr"]; var ofx = o["fx"]; for (i = 0, len = ofx.length; i < len; i++) { fx = this.getEffectByName(ofx[i]["name"]); if (!fx) continue; // must've gone missing fx.active = ofx[i]["active"]; this.effect_params[fx.index] = ofx[i]["params"]; } this.updateActiveEffects(); this.instances.sort(sortInstanceByZIndex); this.zindices_stale = true; }; cr.layer = Layer; }()); ; (function() { var allUniqueSolModifiers = []; function testSolsMatch(arr1, arr2) { var i, len = arr1.length; switch (len) { case 0: return true; case 1: return arr1[0] === arr2[0]; case 2: return arr1[0] === arr2[0] && arr1[1] === arr2[1]; default: for (i = 0; i < len; i++) { if (arr1[i] !== arr2[i]) return false; } return true; } }; function solArraySorter(t1, t2) { return t1.index - t2.index; }; function findMatchingSolModifier(arr) { var i, len, u, temp, subarr; if (arr.length === 2) { if (arr[0].index > arr[1].index) { temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } } else if (arr.length > 2) arr.sort(solArraySorter); // so testSolsMatch compares in same order if (arr.length >= allUniqueSolModifiers.length) allUniqueSolModifiers.length = arr.length + 1; if (!allUniqueSolModifiers[arr.length]) allUniqueSolModifiers[arr.length] = []; subarr = allUniqueSolModifiers[arr.length]; for (i = 0, len = subarr.length; i < len; i++) { u = subarr[i]; if (testSolsMatch(arr, u)) return u; } subarr.push(arr); return arr; }; function EventSheet(runtime, m) { this.runtime = runtime; this.triggers = {}; this.fasttriggers = {}; this.hasRun = false; this.includes = new cr.ObjectSet(); // all event sheets included by this sheet, at first-level indirection only this.deep_includes = []; // all includes from this sheet recursively, in trigger order this.already_included_sheets = []; // used while building deep_includes this.name = m[0]; var em = m[1]; // events model this.events = []; // triggers won't make it to this array var i, len; for (i = 0, len = em.length; i < len; i++) this.init_event(em[i], null, this.events); }; EventSheet.prototype.toString = function () { return this.name; }; EventSheet.prototype.init_event = function (m, parent, nontriggers) { switch (m[0]) { case 0: // event block { var block = new cr.eventblock(this, parent, m); cr.seal(block); if (block.orblock) { nontriggers.push(block); var i, len; for (i = 0, len = block.conditions.length; i < len; i++) { if (block.conditions[i].trigger) this.init_trigger(block, i); } } else { if (block.is_trigger()) this.init_trigger(block, 0); else nontriggers.push(block); } break; } case 1: // variable { var v = new cr.eventvariable(this, parent, m); cr.seal(v); nontriggers.push(v); break; } case 2: // include { var inc = new cr.eventinclude(this, parent, m); cr.seal(inc); nontriggers.push(inc); break; } default: ; } }; EventSheet.prototype.postInit = function () { var i, len; for (i = 0, len = this.events.length; i < len; i++) { this.events[i].postInit(i < len - 1 && this.events[i + 1].is_else_block); } }; EventSheet.prototype.updateDeepIncludes = function () { this.deep_includes.length = 0; this.already_included_sheets.length = 0; this.addDeepIncludes(this); this.already_included_sheets.length = 0; }; EventSheet.prototype.addDeepIncludes = function (root_sheet) { var i, len, inc, sheet; var deep_includes = root_sheet.deep_includes; var already_included_sheets = root_sheet.already_included_sheets; var arr = this.includes.valuesRef(); for (i = 0, len = arr.length; i < len; ++i) { inc = arr[i]; sheet = inc.include_sheet; if (!inc.isActive() || root_sheet === sheet || already_included_sheets.indexOf(sheet) > -1) continue; already_included_sheets.push(sheet); sheet.addDeepIncludes(root_sheet); deep_includes.push(sheet); } }; EventSheet.prototype.run = function (from_include) { if (!this.runtime.resuming_breakpoint) { this.hasRun = true; if (!from_include) this.runtime.isRunningEvents = true; } var i, len; for (i = 0, len = this.events.length; i < len; i++) { var ev = this.events[i]; ev.run(); this.runtime.clearSol(ev.solModifiers); if (!this.runtime.deathRow.isEmpty() || this.runtime.createRow.length) this.runtime.ClearDeathRow(); } if (!from_include) this.runtime.isRunningEvents = false; }; function isPerformanceSensitiveTrigger(method) { if (cr.plugins_.Sprite && method === cr.plugins_.Sprite.prototype.cnds.OnFrameChanged) { return true; } return false; }; EventSheet.prototype.init_trigger = function (trig, index) { if (!trig.orblock) this.runtime.triggers_to_postinit.push(trig); // needs to be postInit'd later var i, len; var cnd = trig.conditions[index]; var type_name; if (cnd.type) type_name = cnd.type.name; else type_name = "system"; var fasttrigger = cnd.fasttrigger; var triggers = (fasttrigger ? this.fasttriggers : this.triggers); if (!triggers[type_name]) triggers[type_name] = []; var obj_entry = triggers[type_name]; var method = cnd.func; if (fasttrigger) { if (!cnd.parameters.length) // no parameters return; var firstparam = cnd.parameters[0]; if (firstparam.type !== 1 || // not a string param firstparam.expression.type !== 2) // not a string literal node { return; } var fastevs; var firstvalue = firstparam.expression.value.toLowerCase(); var i, len; for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { fastevs = obj_entry[i].evs; if (!fastevs[firstvalue]) fastevs[firstvalue] = [[trig, index]]; else fastevs[firstvalue].push([trig, index]); return; } } fastevs = {}; fastevs[firstvalue] = [[trig, index]]; obj_entry.push({ method: method, evs: fastevs }); } else { for (i = 0, len = obj_entry.length; i < len; i++) { if (obj_entry[i].method == method) { obj_entry[i].evs.push([trig, index]); return; } } if (isPerformanceSensitiveTrigger(method)) obj_entry.unshift({ method: method, evs: [[trig, index]]}); else obj_entry.push({ method: method, evs: [[trig, index]]}); } }; cr.eventsheet = EventSheet; function Selection(type) { this.type = type; this.instances = []; // subset of picked instances this.else_instances = []; // subset of unpicked instances this.select_all = true; }; Selection.prototype.hasObjects = function () { if (this.select_all) return this.type.instances.length; else return this.instances.length; }; Selection.prototype.getObjects = function () { if (this.select_all) return this.type.instances; else return this.instances; }; /* Selection.prototype.ensure_picked = function (inst, skip_siblings) { var i, len; var orblock = inst.runtime.getCurrentEventStack().current_event.orblock; if (this.select_all) { this.select_all = false; if (orblock) { cr.shallowAssignArray(this.else_instances, inst.type.instances); cr.arrayFindRemove(this.else_instances, inst); } this.instances.length = 1; this.instances[0] = inst; } else { if (orblock) { i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { if (this.instances.indexOf(inst) === -1) this.instances.push(inst); } } if (!skip_siblings) { } }; */ Selection.prototype.pick_one = function (inst) { if (!inst) return; if (inst.runtime.getCurrentEventStack().current_event.orblock) { if (this.select_all) { this.instances.length = 0; cr.shallowAssignArray(this.else_instances, inst.type.instances); this.select_all = false; } var i = this.else_instances.indexOf(inst); if (i !== -1) { this.instances.push(this.else_instances[i]); this.else_instances.splice(i, 1); } } else { this.select_all = false; this.instances.length = 1; this.instances[0] = inst; } }; cr.selection = Selection; function EventBlock(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.solModifiersIncludingParents = []; this.solWriterAfterCnds = false; // block does not change SOL after running its conditions this.group = false; // is group of events this.initially_activated = false; // if a group, is active on startup this.toplevelevent = false; // is an event block parented only by a top-level group this.toplevelgroup = false; // is parented only by other groups or is top-level (i.e. not in a subevent) this.has_else_block = false; // is followed by else ; this.conditions = []; this.actions = []; this.subevents = []; this.group_name = ""; this.group = false; this.initially_activated = false; this.group_active = false; this.contained_includes = null; if (m[1]) { this.group_name = m[1][1].toLowerCase(); this.group = true; this.initially_activated = !!m[1][0]; this.contained_includes = []; this.group_active = this.initially_activated; this.runtime.allGroups.push(this); this.runtime.groups_by_name[this.group_name] = this; } this.orblock = m[2]; this.sid = m[4]; if (!this.group) this.runtime.blocksBySid[this.sid.toString()] = this; var i, len; var cm = m[5]; for (i = 0, len = cm.length; i < len; i++) { var cnd = new cr.condition(this, cm[i]); cnd.index = i; cr.seal(cnd); this.conditions.push(cnd); /* if (cnd.is_logical()) this.is_logical = true; if (cnd.type && !cnd.type.plugin.singleglobal && this.cndReferences.indexOf(cnd.type) === -1) this.cndReferences.push(cnd.type); */ this.addSolModifier(cnd.type); } var am = m[6]; for (i = 0, len = am.length; i < len; i++) { var act = new cr.action(this, am[i]); act.index = i; cr.seal(act); this.actions.push(act); } if (m.length === 8) { var em = m[7]; for (i = 0, len = em.length; i < len; i++) this.sheet.init_event(em[i], this, this.subevents); } this.is_else_block = false; if (this.conditions.length) { this.is_else_block = (this.conditions[0].type == null && this.conditions[0].func == cr.system_object.prototype.cnds.Else); } }; window["_c2hh_"] = "C8F007936B79558D3ABAE16964B0BB9DBC807191"; EventBlock.prototype.postInit = function (hasElse/*, prevBlock_*/) { var i, len; var p = this.parent; if (this.group) { this.toplevelgroup = true; while (p) { if (!p.group) { this.toplevelgroup = false; break; } p = p.parent; } } this.toplevelevent = !this.is_trigger() && (!this.parent || (this.parent.group && this.parent.toplevelgroup)); this.has_else_block = !!hasElse; this.solModifiersIncludingParents = this.solModifiers.slice(0); p = this.parent; while (p) { for (i = 0, len = p.solModifiers.length; i < len; i++) this.addParentSolModifier(p.solModifiers[i]); p = p.parent; } this.solModifiers = findMatchingSolModifier(this.solModifiers); this.solModifiersIncludingParents = findMatchingSolModifier(this.solModifiersIncludingParents); var i, len/*, s*/; for (i = 0, len = this.conditions.length; i < len; i++) this.conditions[i].postInit(); for (i = 0, len = this.actions.length; i < len; i++) this.actions[i].postInit(); for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].postInit(i < len - 1 && this.subevents[i + 1].is_else_block); } /* if (this.is_else_block && this.prev_block) { for (i = 0, len = this.prev_block.solModifiers.length; i < len; i++) { s = this.prev_block.solModifiers[i]; if (this.solModifiers.indexOf(s) === -1) this.solModifiers.push(s); } } */ }; EventBlock.prototype.setGroupActive = function (a) { if (this.group_active === !!a) return; // same state this.group_active = !!a; var i, len; for (i = 0, len = this.contained_includes.length; i < len; ++i) { this.contained_includes[i].updateActive(); } if (len > 0 && this.runtime.running_layout.event_sheet) this.runtime.running_layout.event_sheet.updateDeepIncludes(); }; function addSolModifierToList(type, arr) { var i, len, t; if (!type) return; if (arr.indexOf(type) === -1) arr.push(type); if (type.is_contained) { for (i = 0, len = type.container.length; i < len; i++) { t = type.container[i]; if (type === t) continue; // already handled if (arr.indexOf(t) === -1) arr.push(t); } } }; EventBlock.prototype.addSolModifier = function (type) { addSolModifierToList(type, this.solModifiers); }; EventBlock.prototype.addParentSolModifier = function (type) { addSolModifierToList(type, this.solModifiersIncludingParents); }; EventBlock.prototype.setSolWriterAfterCnds = function () { this.solWriterAfterCnds = true; if (this.parent) this.parent.setSolWriterAfterCnds(); }; EventBlock.prototype.is_trigger = function () { if (!this.conditions.length) // no conditions return false; else return this.conditions[0].trigger; }; EventBlock.prototype.run = function () { var i, len, any_true = false, cnd_result; var runtime = this.runtime; var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var conditions = this.conditions; if (!this.is_else_block) evinfo.else_branch_ran = false; if (this.orblock) { if (conditions.length === 0) any_true = true; // be sure to run if empty block evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { if (conditions[evinfo.cndindex].trigger) // skip triggers when running OR block continue; cnd_result = conditions[evinfo.cndindex].run(); if (cnd_result) // make sure all conditions run and run if any were true any_true = true; } evinfo.last_event_true = any_true; if (any_true) this.run_actions_and_subevents(); } else { evinfo.cndindex = 0 for (len = conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { cnd_result = conditions[evinfo.cndindex].run(); if (!cnd_result) // condition failed { evinfo.last_event_true = false; if (this.toplevelevent && (!runtime.deathRow.isEmpty() || runtime.createRow.length)) runtime.ClearDeathRow(); return; // bail out now } } evinfo.last_event_true = true; this.run_actions_and_subevents(); } this.end_run(evinfo); }; EventBlock.prototype.end_run = function (evinfo) { if (evinfo.last_event_true && this.has_else_block) evinfo.else_branch_ran = true; if (this.toplevelevent && (!this.runtime.deathRow.isEmpty() || this.runtime.createRow.length)) this.runtime.ClearDeathRow(); }; EventBlock.prototype.run_orblocktrigger = function (index) { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; if (this.conditions[index].run()) { this.run_actions_and_subevents(); this.runtime.getCurrentEventStack().last_event_true = true; } }; EventBlock.prototype.run_actions_and_subevents = function () { var evinfo = this.runtime.getCurrentEventStack(); var len; for (evinfo.actindex = 0, len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.resume_actions_and_subevents = function () { var evinfo = this.runtime.getCurrentEventStack(); var len; for (len = this.actions.length; evinfo.actindex < len; evinfo.actindex++) { if (this.actions[evinfo.actindex].run()) return; } this.run_subevents(); }; EventBlock.prototype.run_subevents = function () { if (!this.subevents.length) return; var i, len, subev, pushpop/*, skipped_pop = false, pop_modifiers = null*/; var last = this.subevents.length - 1; this.runtime.pushEventStack(this); if (this.solWriterAfterCnds) { for (i = 0, len = this.subevents.length; i < len; i++) { subev = this.subevents[i]; pushpop = (!this.toplevelgroup || (!this.group && i < last)); if (pushpop) this.runtime.pushCopySol(subev.solModifiers); subev.run(); if (pushpop) this.runtime.popSol(subev.solModifiers); else this.runtime.clearSol(subev.solModifiers); } } else { for (i = 0, len = this.subevents.length; i < len; i++) { this.subevents[i].run(); } } this.runtime.popEventStack(); }; EventBlock.prototype.run_pretrigger = function () { var evinfo = this.runtime.getCurrentEventStack(); evinfo.current_event = this; var any_true = false; var i, len; for (evinfo.cndindex = 0, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { ; if (this.conditions[evinfo.cndindex].run()) any_true = true; else if (!this.orblock) // condition failed (let OR blocks run all conditions anyway) return false; // bail out } return this.orblock ? any_true : true; }; EventBlock.prototype.retrigger = function () { this.runtime.execcount++; var prevcndindex = this.runtime.getCurrentEventStack().cndindex; var len; var evinfo = this.runtime.pushEventStack(this); if (!this.orblock) { for (evinfo.cndindex = prevcndindex + 1, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++) { if (!this.conditions[evinfo.cndindex].run()) // condition failed { this.runtime.popEventStack(); // moving up level of recursion return false; // bail out } } } this.run_actions_and_subevents(); this.runtime.popEventStack(); return true; // ran an iteration }; EventBlock.prototype.isFirstConditionOfType = function (cnd) { var cndindex = cnd.index; if (cndindex === 0) return true; --cndindex; for ( ; cndindex >= 0; --cndindex) { if (this.conditions[cndindex].type === cnd.type) return false; } return true; }; cr.eventblock = EventBlock; function Condition(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = m[1]; ; this.trigger = (m[3] > 0); this.fasttrigger = (m[3] === 2); this.looping = m[4]; this.inverted = m[5]; this.isstatic = m[6]; this.sid = m[7]; this.runtime.cndsBySid[this.sid.toString()] = this; if (m[0] === -1) // system object { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]]; ; if (this.isstatic) this.run = this.run_static; else this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]); ; this.beh_index = this.type.getBehaviorIndexByName(m[2]); ; } else { this.behaviortype = null; this.beh_index = -1; } if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); } if (this.fasttrigger) this.run = this.run_true; if (m.length === 10) { var i, len; var em = m[9]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Condition.prototype.postInit = function () { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; /* Condition.prototype.is_logical = function () { return !this.type || this.type.plugin.singleglobal; }; */ Condition.prototype.run_true = function () { return true; }; Condition.prototype.run_system = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); return cr.xor(this.func.apply(this.runtime.system, this.results), this.inverted); }; Condition.prototype.run_static = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); var ret = this.func.apply(this.behaviortype ? this.behaviortype : this.type, this.results); this.type.applySolToContainer(); return ret; }; Condition.prototype.run_object = function () { var i, j, k, leni, lenj, p, ret, met, inst, s, sol2; var type = this.type; var sol = type.getCurrentSol(); var is_orblock = this.block.orblock && !this.trigger; // triggers in OR blocks need to work normally var offset = 0; var is_contained = type.is_contained; var is_family = type.is_family; var family_index = type.family_index; var beh_index = this.beh_index; var is_beh = (beh_index > -1); var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var inverted = this.inverted; var func = this.func; var arr, container; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } if (sol.select_all) { sol.instances.length = 0; // clear contents sol.else_instances.length = 0; arr = type.instances; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i]; ; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); met = cr.xor(ret, inverted); if (met) sol.instances.push(inst); else if (is_orblock) // in OR blocks, keep the instances not meeting the condition for subsequent testing sol.else_instances.push(inst); } if (type.finish) type.finish(true); sol.select_all = false; type.applySolToContainer(); return sol.hasObjects(); } else { k = 0; var using_else_instances = (is_orblock && !this.block.isFirstConditionOfType(this)); arr = (using_else_instances ? sol.else_instances : sol.instances); var any_true = false; for (i = 0, leni = arr.length; i < leni; ++i) { inst = arr[i]; ; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // default SOL index is current object } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } ret = func.apply(inst.behavior_insts[beh_index + offset], results); } else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; if (using_else_instances) { sol.instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances.push(s); } } } else { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().instances[k] = s; } } k++; } } else { if (using_else_instances) { arr[k] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances[k] = s; } } k++; } else if (is_orblock) { sol.else_instances.push(inst); if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; s.type.getCurrentSol().else_instances.push(s); } } } } } arr.length = k; if (is_contained) { container = type.container; for (i = 0, leni = container.length; i < leni; i++) { sol2 = container[i].getCurrentSol(); if (using_else_instances) sol2.else_instances.length = k; else sol2.instances.length = k; } } var pick_in_finish = any_true; // don't pick in finish() if we're only doing the logic test below if (using_else_instances && !any_true) { for (i = 0, leni = sol.instances.length; i < leni; i++) { inst = sol.instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; j++) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); } } if (is_beh) ret = func.apply(inst.behavior_insts[beh_index], results); else ret = func.apply(inst, results); if (cr.xor(ret, inverted)) { any_true = true; break; // got our flag, don't need to test any more } } } if (type.finish) type.finish(pick_in_finish || is_orblock); return is_orblock ? any_true : sol.hasObjects(); } }; cr.condition = Condition; function Action(block, m) { this.block = block; this.sheet = block.sheet; this.runtime = block.runtime; this.parameters = []; this.results = []; this.extra = {}; // for plugins to stow away some custom info this.index = -1; this.anyParamVariesPerInstance = false; this.func = m[1]; ; if (m[0] === -1) // system { this.type = null; this.run = this.run_system; this.behaviortype = null; this.beh_index = -1; } else { this.type = this.runtime.types_by_index[m[0]]; ; this.run = this.run_object; if (m[2]) { this.behaviortype = this.type.getBehaviorByName(m[2]); ; this.beh_index = this.type.getBehaviorIndexByName(m[2]); ; } else { this.behaviortype = null; this.beh_index = -1; } } this.sid = m[3]; this.runtime.actsBySid[this.sid.toString()] = this; if (m.length === 6) { var i, len; var em = m[5]; for (i = 0, len = em.length; i < len; i++) { var param = new cr.parameter(this, em[i]); cr.seal(param); this.parameters.push(param); } this.results.length = em.length; } }; Action.prototype.postInit = function () { var i, len, p; for (i = 0, len = this.parameters.length; i < len; i++) { p = this.parameters[i]; p.postInit(); if (p.variesPerInstance) this.anyParamVariesPerInstance = true; } }; Action.prototype.run_system = function () { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.results[i] = this.parameters[i].get(); return this.func.apply(this.runtime.system, this.results); }; Action.prototype.run_object = function () { var instances = this.type.getCurrentSol().getObjects(); var is_family = this.type.is_family; var family_index = this.type.family_index; var beh_index = this.beh_index; var is_beh = (beh_index > -1); var params_vary = this.anyParamVariesPerInstance; var parameters = this.parameters; var results = this.results; var func = this.func; var i, j, leni, lenj, p, inst, offset; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (!p.variesPerInstance) results[j] = p.get(0); } } else { for (j = 0, lenj = parameters.length; j < lenj; ++j) results[j] = parameters[j].get(0); } for (i = 0, leni = instances.length; i < leni; ++i) { inst = instances[i]; if (params_vary) { for (j = 0, lenj = parameters.length; j < lenj; ++j) { p = parameters[j]; if (p.variesPerInstance) results[j] = p.get(i); // pass i to use as default SOL index } } if (is_beh) { offset = 0; if (is_family) { offset = inst.type.family_beh_map[family_index]; } func.apply(inst.behavior_insts[beh_index + offset], results); } else func.apply(inst, results); } return false; }; cr.action = Action; var tempValues = []; var tempValuesPtr = -1; function Parameter(owner, m) { this.owner = owner; this.block = owner.block; this.sheet = owner.sheet; this.runtime = owner.runtime; this.type = m[0]; this.expression = null; this.solindex = 0; this.get = null; this.combosel = 0; this.layout = null; this.key = 0; this.object = null; this.index = 0; this.varname = null; this.eventvar = null; this.fileinfo = null; this.subparams = null; this.variadicret = null; this.subparams = null; this.variadicret = null; this.variesPerInstance = false; var i, len, param; switch (m[0]) { case 0: // number case 7: // any this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp; break; case 1: // string this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_exp_str; break; case 5: // layer this.expression = new cr.expNode(this, m[1]); this.solindex = 0; this.get = this.get_layer; break; case 3: // combo case 8: // cmp this.combosel = m[1]; this.get = this.get_combosel; break; case 6: // layout this.layout = this.runtime.layouts[m[1]]; ; this.get = this.get_layout; break; case 9: // keyb this.key = m[1]; this.get = this.get_key; break; case 4: // object this.object = this.runtime.types_by_index[m[1]]; ; this.get = this.get_object; this.block.addSolModifier(this.object); if (this.owner instanceof cr.action) this.block.setSolWriterAfterCnds(); else if (this.block.parent) this.block.parent.setSolWriterAfterCnds(); break; case 10: // instvar this.index = m[1]; if (owner.type.is_family) { this.get = this.get_familyvar; this.variesPerInstance = true; } else this.get = this.get_instvar; break; case 11: // eventvar this.varname = m[1]; this.eventvar = null; this.get = this.get_eventvar; break; case 2: // audiofile ["name", ismusic] case 12: // fileinfo "name" this.fileinfo = m[1]; this.get = this.get_audiofile; break; case 13: // variadic this.get = this.get_variadic; this.subparams = []; this.variadicret = []; for (i = 1, len = m.length; i < len; i++) { param = new cr.parameter(this.owner, m[i]); cr.seal(param); this.subparams.push(param); this.variadicret.push(0); } break; default: ; } }; Parameter.prototype.postInit = function () { var i, len; if (this.type === 11) // eventvar { this.eventvar = this.runtime.getEventVariableByName(this.varname, this.block.parent); ; } else if (this.type === 13) // variadic, postInit all sub-params { for (i = 0, len = this.subparams.length; i < len; i++) this.subparams[i].postInit(); } if (this.expression) this.expression.postInit(); }; Parameter.prototype.maybeVaryForType = function (t) { if (this.variesPerInstance) return; // already varies per instance, no need to check again if (!t) return; // never vary for system type if (!t.plugin.singleglobal) { this.variesPerInstance = true; return; } }; Parameter.prototype.setVaries = function () { this.variesPerInstance = true; }; Parameter.prototype.pushTempValue = function () { tempValuesPtr++; if (tempValues.length === tempValuesPtr) tempValues.push(new cr.expvalue()); return tempValues[tempValuesPtr]; }; Parameter.prototype.popTempValue = function () { tempValuesPtr--; }; Parameter.prototype.get_exp = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = this.pushTempValue(); this.expression.get(temp); this.popTempValue(); return temp.data; // return actual JS value, not expvalue }; Parameter.prototype.get_exp_str = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = this.pushTempValue(); this.expression.get(temp); this.popTempValue(); if (cr.is_string(temp.data)) return temp.data; else return ""; }; Parameter.prototype.get_object = function () { return this.object; }; Parameter.prototype.get_combosel = function () { return this.combosel; }; Parameter.prototype.get_layer = function (solindex) { this.solindex = solindex || 0; // default SOL index to use var temp = this.pushTempValue(); this.expression.get(temp); this.popTempValue(); if (temp.is_number()) return this.runtime.getLayerByNumber(temp.data); else return this.runtime.getLayerByName(temp.data); } Parameter.prototype.get_layout = function () { return this.layout; }; Parameter.prototype.get_key = function () { return this.key; }; Parameter.prototype.get_instvar = function () { return this.index; }; Parameter.prototype.get_familyvar = function (solindex_) { var solindex = solindex_ || 0; var familytype = this.owner.type; var realtype = null; var sol = familytype.getCurrentSol(); var objs = sol.getObjects(); if (objs.length) realtype = objs[solindex % objs.length].type; else if (sol.else_instances.length) realtype = sol.else_instances[solindex % sol.else_instances.length].type; else if (familytype.instances.length) realtype = familytype.instances[solindex % familytype.instances.length].type; else return 0; return this.index + realtype.family_var_map[familytype.family_index]; }; Parameter.prototype.get_eventvar = function () { return this.eventvar; }; Parameter.prototype.get_audiofile = function () { return this.fileinfo; }; Parameter.prototype.get_variadic = function () { var i, len; for (i = 0, len = this.subparams.length; i < len; i++) { this.variadicret[i] = this.subparams[i].get(); } return this.variadicret; }; cr.parameter = Parameter; function EventVariable(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.name = m[1]; this.vartype = m[2]; this.initial = m[3]; this.is_static = !!m[4]; this.is_constant = !!m[5]; this.sid = m[6]; this.runtime.varsBySid[this.sid.toString()] = this; this.data = this.initial; // note: also stored in event stack frame for local nonstatic nonconst vars if (this.parent) // local var { if (this.is_static || this.is_constant) this.localIndex = -1; else this.localIndex = this.runtime.stackLocalCount++; this.runtime.all_local_vars.push(this); } else // global var { this.localIndex = -1; this.runtime.all_global_vars.push(this); } }; EventVariable.prototype.postInit = function () { this.solModifiers = findMatchingSolModifier(this.solModifiers); }; EventVariable.prototype.setValue = function (x) { ; var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs) this.data = x; else // local nonstatic variable: use event stack to keep value at this level of recursion { if (this.localIndex >= lvs.length) lvs.length = this.localIndex + 1; lvs[this.localIndex] = x; } }; EventVariable.prototype.getValue = function () { var lvs = this.runtime.getCurrentLocalVarStack(); if (!this.parent || this.is_static || !lvs || this.is_constant) return this.data; else // local nonstatic variable { if (this.localIndex >= lvs.length) { ; return this.initial; } if (typeof lvs[this.localIndex] === "undefined") { ; return this.initial; } return lvs[this.localIndex]; } }; EventVariable.prototype.run = function () { if (this.parent && !this.is_static && !this.is_constant) this.setValue(this.initial); }; cr.eventvariable = EventVariable; function EventInclude(sheet, parent, m) { this.sheet = sheet; this.parent = parent; this.runtime = sheet.runtime; this.solModifiers = []; this.include_sheet = null; // determined in postInit this.include_sheet_name = m[1]; this.active = true; }; EventInclude.prototype.toString = function () { return "include:" + this.include_sheet.toString(); }; EventInclude.prototype.postInit = function () { this.include_sheet = this.runtime.eventsheets[this.include_sheet_name]; ; ; this.sheet.includes.add(this); this.solModifiers = findMatchingSolModifier(this.solModifiers); var p = this.parent; while (p) { if (p.group) p.contained_includes.push(this); p = p.parent; } this.updateActive(); }; EventInclude.prototype.run = function () { if (this.parent) this.runtime.pushCleanSol(this.runtime.types_by_index); if (!this.include_sheet.hasRun) this.include_sheet.run(true); // from include if (this.parent) this.runtime.popSol(this.runtime.types_by_index); }; EventInclude.prototype.updateActive = function () { var p = this.parent; while (p) { if (p.group && !p.group_active) { this.active = false; return; } p = p.parent; } this.active = true; }; EventInclude.prototype.isActive = function () { return this.active; }; cr.eventinclude = EventInclude; function EventStackFrame() { this.temp_parents_arr = []; this.reset(null); cr.seal(this); }; EventStackFrame.prototype.reset = function (cur_event) { this.current_event = cur_event; this.cndindex = 0; this.actindex = 0; this.temp_parents_arr.length = 0; this.last_event_true = false; this.else_branch_ran = false; this.any_true_state = false; }; EventStackFrame.prototype.isModifierAfterCnds = function () { if (this.current_event.solWriterAfterCnds) return true; if (this.cndindex < this.current_event.conditions.length - 1) return !!this.current_event.solModifiers.length; return false; }; cr.eventStackFrame = EventStackFrame; }()); (function() { function ExpNode(owner_, m) { this.owner = owner_; this.runtime = owner_.runtime; this.type = m[0]; ; this.get = [this.eval_int, this.eval_float, this.eval_string, this.eval_unaryminus, this.eval_add, this.eval_subtract, this.eval_multiply, this.eval_divide, this.eval_mod, this.eval_power, this.eval_and, this.eval_or, this.eval_equal, this.eval_notequal, this.eval_less, this.eval_lessequal, this.eval_greater, this.eval_greaterequal, this.eval_conditional, this.eval_system_exp, this.eval_object_behavior_exp, this.eval_instvar_exp, this.eval_object_behavior_exp, this.eval_eventvar_exp][this.type]; var paramsModel = null; this.value = null; this.first = null; this.second = null; this.third = null; this.func = null; this.results = null; this.parameters = null; this.object_type = null; this.beh_index = -1; this.instance_expr = null; this.varindex = -1; this.behavior_type = null; this.varname = null; this.eventvar = null; this.return_string = false; switch (this.type) { case 0: // int case 1: // float case 2: // string this.value = m[1]; break; case 3: // unaryminus this.first = new cr.expNode(owner_, m[1]); break; case 18: // conditional this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); this.third = new cr.expNode(owner_, m[3]); break; case 19: // system_exp this.func = m[1]; ; if (this.func === cr.system_object.prototype.exps.random || this.func === cr.system_object.prototype.exps.choose) { this.owner.setVaries(); } this.results = []; this.parameters = []; if (m.length === 3) { paramsModel = m[2]; this.results.length = paramsModel.length + 1; // must also fit 'ret' } else this.results.length = 1; // to fit 'ret' break; case 20: // object_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.beh_index = -1; this.func = m[2]; this.return_string = m[3]; if (cr.plugins_.Function && this.func === cr.plugins_.Function.prototype.exps.Call) { this.owner.setVaries(); } if (m[4]) this.instance_expr = new cr.expNode(owner_, m[4]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 6) { paramsModel = m[5]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 21: // instvar_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.return_string = m[2]; if (m[3]) this.instance_expr = new cr.expNode(owner_, m[3]); else this.instance_expr = null; this.varindex = m[4]; break; case 22: // behavior_exp this.object_type = this.runtime.types_by_index[m[1]]; ; this.behavior_type = this.object_type.getBehaviorByName(m[2]); ; this.beh_index = this.object_type.getBehaviorIndexByName(m[2]); this.func = m[3]; this.return_string = m[4]; if (m[5]) this.instance_expr = new cr.expNode(owner_, m[5]); else this.instance_expr = null; this.results = []; this.parameters = []; if (m.length === 7) { paramsModel = m[6]; this.results.length = paramsModel.length + 1; } else this.results.length = 1; // to fit 'ret' break; case 23: // eventvar_exp this.varname = m[1]; this.eventvar = null; // assigned in postInit break; } this.owner.maybeVaryForType(this.object_type); if (this.type >= 4 && this.type <= 17) { this.first = new cr.expNode(owner_, m[1]); this.second = new cr.expNode(owner_, m[2]); } if (paramsModel) { var i, len; for (i = 0, len = paramsModel.length; i < len; i++) this.parameters.push(new cr.expNode(owner_, paramsModel[i])); } cr.seal(this); }; ExpNode.prototype.postInit = function () { if (this.type === 23) // eventvar_exp { this.eventvar = this.owner.runtime.getEventVariableByName(this.varname, this.owner.block.parent); ; } if (this.first) this.first.postInit(); if (this.second) this.second.postInit(); if (this.third) this.third.postInit(); if (this.instance_expr) this.instance_expr.postInit(); if (this.parameters) { var i, len; for (i = 0, len = this.parameters.length; i < len; i++) this.parameters[i].postInit(); } }; ExpNode.prototype.eval_system_exp = function (ret) { this.results[0] = ret; var temp = this.owner.pushTempValue(); var i, len; for (i = 0, len = this.parameters.length; i < len; i++) { this.parameters[i].get(temp); this.results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue } this.owner.popTempValue(); this.func.apply(this.runtime.system, this.results); }; ExpNode.prototype.eval_object_behavior_exp = function (ret) { var sol = this.object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } this.results[0] = ret; ret.object_class = this.object_type; // so expression can access family type if need be var temp = this.owner.pushTempValue(); var i, len; for (i = 0, len = this.parameters.length; i < len; i++) { this.parameters[i].get(temp); this.results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue } var index = this.owner.solindex; if (this.instance_expr) { this.instance_expr.get(temp); if (temp.is_number()) { index = temp.data; instances = this.object_type.instances; // pick from all instances, not SOL } } this.owner.popTempValue(); index %= instances.length; // wraparound if (index < 0) index += instances.length; var returned_val; var inst = instances[index]; if (this.beh_index > -1) { var offset = 0; if (this.object_type.is_family) { offset = inst.type.family_beh_map[this.object_type.family_index]; } returned_val = this.func.apply(inst.behavior_insts[this.beh_index + offset], this.results); } else returned_val = this.func.apply(inst, this.results); ; }; ExpNode.prototype.eval_instvar_exp = function (ret) { var sol = this.object_type.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) { if (sol.else_instances.length) instances = sol.else_instances; else { if (this.return_string) ret.set_string(""); else ret.set_int(0); return; } } var index = this.owner.solindex; if (this.instance_expr) { var temp = this.owner.pushTempValue(); this.instance_expr.get(temp); if (temp.is_number()) { index = temp.data; var type_instances = this.object_type.instances; index %= type_instances.length; // wraparound if (index < 0) // offset index += type_instances.length; var to_ret = type_instances[index].instance_vars[this.varindex]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); this.owner.popTempValue(); return; // done } this.owner.popTempValue(); } index %= instances.length; // wraparound if (index < 0) index += instances.length; var inst = instances[index]; var offset = 0; if (this.object_type.is_family) { offset = inst.type.family_var_map[this.object_type.family_index]; } var to_ret = inst.instance_vars[this.varindex + offset]; if (cr.is_string(to_ret)) ret.set_string(to_ret); else ret.set_float(to_ret); }; ExpNode.prototype.eval_int = function (ret) { ret.type = cr.exptype.Integer; ret.data = this.value; }; ExpNode.prototype.eval_float = function (ret) { ret.type = cr.exptype.Float; ret.data = this.value; }; ExpNode.prototype.eval_string = function (ret) { ret.type = cr.exptype.String; ret.data = this.value; }; ExpNode.prototype.eval_unaryminus = function (ret) { this.first.get(ret); // retrieve operand if (ret.is_number()) ret.data = -ret.data; }; ExpNode.prototype.eval_add = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data += temp.data; // both operands numbers: add if (temp.is_float()) ret.make_float(); } this.owner.popTempValue(); }; ExpNode.prototype.eval_subtract = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data -= temp.data; // both operands numbers: subtract if (temp.is_float()) ret.make_float(); } this.owner.popTempValue(); }; ExpNode.prototype.eval_multiply = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data *= temp.data; // both operands numbers: multiply if (temp.is_float()) ret.make_float(); } this.owner.popTempValue(); }; ExpNode.prototype.eval_divide = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data /= temp.data; // both operands numbers: divide ret.make_float(); } this.owner.popTempValue(); }; ExpNode.prototype.eval_mod = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data %= temp.data; // both operands numbers: modulo if (temp.is_float()) ret.make_float(); } this.owner.popTempValue(); }; ExpNode.prototype.eval_power = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { ret.data = Math.pow(ret.data, temp.data); // both operands numbers: raise to power if (temp.is_float()) ret.make_float(); } this.owner.popTempValue(); }; ExpNode.prototype.eval_and = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number()) { if (temp.is_string()) { ret.set_string(ret.data.toString() + temp.data); } else { if (ret.data && temp.data) ret.set_int(1); else ret.set_int(0); } } else if (ret.is_string()) { if (temp.is_string()) ret.data += temp.data; else { ret.data += (Math.round(temp.data * 1e10) / 1e10).toString(); } } this.owner.popTempValue(); }; ExpNode.prototype.eval_or = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand if (ret.is_number() && temp.is_number()) { if (ret.data || temp.data) ret.set_int(1); else ret.set_int(0); } this.owner.popTempValue(); }; ExpNode.prototype.eval_conditional = function (ret) { this.first.get(ret); // condition operand if (ret.data) // is true this.second.get(ret); // evaluate second operand to ret else this.third.get(ret); // evaluate third operand to ret }; ExpNode.prototype.eval_equal = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data === temp.data ? 1 : 0); this.owner.popTempValue(); }; ExpNode.prototype.eval_notequal = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data !== temp.data ? 1 : 0); this.owner.popTempValue(); }; ExpNode.prototype.eval_less = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data < temp.data ? 1 : 0); this.owner.popTempValue(); }; ExpNode.prototype.eval_lessequal = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data <= temp.data ? 1 : 0); this.owner.popTempValue(); }; ExpNode.prototype.eval_greater = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data > temp.data ? 1 : 0); this.owner.popTempValue(); }; ExpNode.prototype.eval_greaterequal = function (ret) { this.first.get(ret); // left operand var temp = this.owner.pushTempValue(); this.second.get(temp); // right operand ret.set_int(ret.data >= temp.data ? 1 : 0); this.owner.popTempValue(); }; ExpNode.prototype.eval_eventvar_exp = function (ret) { var val = this.eventvar.getValue(); if (cr.is_number(val)) ret.set_float(val); else ret.set_string(val); }; cr.expNode = ExpNode; function ExpValue(type, data) { this.type = type || cr.exptype.Integer; this.data = data || 0; this.object_class = null; ; ; ; if (this.type == cr.exptype.Integer) this.data = Math.floor(this.data); cr.seal(this); }; ExpValue.prototype.is_int = function () { return this.type === cr.exptype.Integer; }; ExpValue.prototype.is_float = function () { return this.type === cr.exptype.Float; }; ExpValue.prototype.is_number = function () { return this.type === cr.exptype.Integer || this.type === cr.exptype.Float; }; ExpValue.prototype.is_string = function () { return this.type === cr.exptype.String; }; ExpValue.prototype.make_int = function () { if (!this.is_int()) { if (this.is_float()) this.data = Math.floor(this.data); // truncate float else if (this.is_string()) this.data = parseInt(this.data, 10); this.type = cr.exptype.Integer; } }; ExpValue.prototype.make_float = function () { if (!this.is_float()) { if (this.is_string()) this.data = parseFloat(this.data); this.type = cr.exptype.Float; } }; ExpValue.prototype.make_string = function () { if (!this.is_string()) { this.data = this.data.toString(); this.type = cr.exptype.String; } }; ExpValue.prototype.set_int = function (val) { ; this.type = cr.exptype.Integer; this.data = Math.floor(val); }; ExpValue.prototype.set_float = function (val) { ; this.type = cr.exptype.Float; this.data = val; }; ExpValue.prototype.set_string = function (val) { ; this.type = cr.exptype.String; this.data = val; }; ExpValue.prototype.set_any = function (val) { if (cr.is_number(val)) { this.type = cr.exptype.Float; this.data = val; } else if (cr.is_string(val)) { this.type = cr.exptype.String; this.data = val.toString(); } else { this.type = cr.exptype.Integer; this.data = 0; } }; cr.expvalue = ExpValue; cr.exptype = { Integer: 0, // emulated; no native integer support in javascript Float: 1, String: 2 }; }()); ; cr.system_object = function (runtime) { this.runtime = runtime; this.waits = []; }; cr.system_object.prototype.saveToJSON = function () { var o = {}; var i, len, j, lenj, p, w, t, sobj; o["waits"] = []; var owaits = o["waits"]; var waitobj; for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; waitobj = { "t": w.time, "st": w.signaltag, "s": w.signalled, "ev": w.ev.sid, "sm": [], "sols": {} }; if (w.ev.actions[w.actindex]) waitobj["act"] = w.ev.actions[w.actindex].sid; for (j = 0, lenj = w.solModifiers.length; j < lenj; j++) waitobj["sm"].push(w.solModifiers[j].sid); for (p in w.sols) { if (w.sols.hasOwnProperty(p)) { t = this.runtime.types_by_index[parseInt(p, 10)]; ; sobj = { "sa": w.sols[p].sa, "insts": [] }; for (j = 0, lenj = w.sols[p].insts.length; j < lenj; j++) sobj["insts"].push(w.sols[p].insts[j].uid); waitobj["sols"][t.sid.toString()] = sobj; } } owaits.push(waitobj); } return o; }; cr.system_object.prototype.loadFromJSON = function (o) { var owaits = o["waits"]; var i, len, j, lenj, p, w, addWait, e, aindex, t, savedsol, nusol, inst; this.waits.length = 0; for (i = 0, len = owaits.length; i < len; i++) { w = owaits[i]; e = this.runtime.blocksBySid[w["ev"].toString()]; if (!e) continue; // event must've gone missing aindex = -1; for (j = 0, lenj = e.actions.length; j < lenj; j++) { if (e.actions[j].sid === w["act"]) { aindex = j; break; } } if (aindex === -1) continue; // action must've gone missing addWait = {}; addWait.sols = {}; addWait.solModifiers = []; addWait.deleteme = false; addWait.time = w["t"]; addWait.signaltag = w["st"] || ""; addWait.signalled = !!w["s"]; addWait.ev = e; addWait.actindex = aindex; for (j = 0, lenj = w["sm"].length; j < lenj; j++) { t = this.runtime.getObjectTypeBySid(w["sm"][j]); if (t) addWait.solModifiers.push(t); } for (p in w["sols"]) { if (w["sols"].hasOwnProperty(p)) { t = this.runtime.getObjectTypeBySid(parseInt(p, 10)); if (!t) continue; // type must've been deleted savedsol = w["sols"][p]; nusol = { sa: savedsol["sa"], insts: [] }; for (j = 0, lenj = savedsol["insts"].length; j < lenj; j++) { inst = this.runtime.getObjectByUID(savedsol["insts"][j]); if (inst) nusol.insts.push(inst); } addWait.sols[t.index.toString()] = nusol; } } this.waits.push(addWait); } }; (function () { var sysProto = cr.system_object.prototype; function SysCnds() {}; SysCnds.prototype.EveryTick = function() { return true; }; SysCnds.prototype.OnLayoutStart = function() { return true; }; SysCnds.prototype.OnLayoutEnd = function() { return true; }; SysCnds.prototype.Compare = function(x, cmp, y) { return cr.do_cmp(x, cmp, y); }; SysCnds.prototype.CompareTime = function (cmp, t) { var elapsed = this.runtime.kahanTime.sum; if (cmp === 0) { var cnd = this.runtime.getCurrentCondition(); if (!cnd.extra.CompareTime_executed) { if (elapsed >= t) { cnd.extra.CompareTime_executed = true; return true; } } return false; } return cr.do_cmp(elapsed, cmp, t); }; SysCnds.prototype.LayerVisible = function (layer) { if (!layer) return false; else return layer.visible; }; SysCnds.prototype.LayerCmpOpacity = function (layer, cmp, opacity_) { if (!layer) return false; return cr.do_cmp(layer.opacity * 100, cmp, opacity_); }; SysCnds.prototype.Repeat = function (count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; i < count && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; i < count && !current_loop.stopped; i++) { current_loop.index = i; current_event.retrigger(); } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.While = function (count) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i; if (solModifierAfterCnds) { for (i = 0; !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; if (!current_event.retrigger()) // one of the other conditions returned false current_loop.stopped = true; // break this.runtime.popSol(current_event.solModifiers); } } else { for (i = 0; !current_loop.stopped; i++) { current_loop.index = i; if (!current_event.retrigger()) current_loop.stopped = true; } } this.runtime.popLoopStack(); return false; }; SysCnds.prototype.For = function (name, start, end) { var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(name); var i; if (end < start) { if (solModifierAfterCnds) { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } else { if (solModifierAfterCnds) { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { this.runtime.pushCopySol(current_event.solModifiers); current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end { current_loop.index = i; current_event.retrigger(); } } } this.runtime.popLoopStack(); return false; }; var foreach_instancestack = []; var foreach_instanceptr = -1; SysCnds.prototype.ForEach = function (obj) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; sol.instances.length = 1; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; sol2.instances.length = 1; sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; sol.instances.length = 1; for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; sol2.instances.length = 1; sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } instances.length = 0; this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; function foreach_sortinstances(a, b) { var va = a.extra.c2_foreachordered_val; var vb = b.extra.c2_foreachordered_val; if (cr.is_number(va) && cr.is_number(vb)) return va - vb; else { va = "" + va; vb = "" + vb; if (va < vb) return -1; else if (va > vb) return 1; else return 0; } }; SysCnds.prototype.ForEachOrdered = function (obj, exp, order) { var sol = obj.getCurrentSol(); foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var instances = foreach_instancestack[foreach_instanceptr]; cr.shallowAssignArray(instances, sol.getObjects()); var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var current_condition = this.runtime.getCurrentCondition(); var solModifierAfterCnds = current_frame.isModifierAfterCnds(); var current_loop = this.runtime.pushLoopStack(); var i, len, j, lenj, inst, s, sol2; for (i = 0, len = instances.length; i < len; i++) { instances[i].extra.c2_foreachordered_val = current_condition.parameters[1].get(i); } instances.sort(foreach_sortinstances); if (order === 1) instances.reverse(); var is_contained = obj.is_contained; if (solModifierAfterCnds) { for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { this.runtime.pushCopySol(current_event.solModifiers); inst = instances[i]; sol = obj.getCurrentSol(); sol.select_all = false; sol.instances.length = 1; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; sol2.instances.length = 1; sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); this.runtime.popSol(current_event.solModifiers); } } else { sol.select_all = false; sol.instances.length = 1; for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++) { inst = instances[i]; sol.instances[0] = inst; if (is_contained) { for (j = 0, lenj = inst.siblings.length; j < lenj; j++) { s = inst.siblings[j]; sol2 = s.type.getCurrentSol(); sol2.select_all = false; sol2.instances.length = 1; sol2.instances[0] = s; } } current_loop.index = i; current_event.retrigger(); } } instances.length = 0; this.runtime.popLoopStack(); foreach_instanceptr--; return false; }; SysCnds.prototype.PickByComparison = function (obj_, exp_, cmp_, val_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) sol.else_instances.length = 0; var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); val_ = current_condition.parameters[3].get(i); if (cr.do_cmp(exp_, cmp_, val_)) { k++; } else { sol.else_instances.push(inst); } } tmp_instances.length = k; sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); tmp_instances.length = 0; foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.PickByEvaluate = function (obj_, exp_) { var i, len, k, inst; if (!obj_) return; foreach_instanceptr++; if (foreach_instancestack.length === foreach_instanceptr) foreach_instancestack.push([]); var tmp_instances = foreach_instancestack[foreach_instanceptr]; var sol = obj_.getCurrentSol(); cr.shallowAssignArray(tmp_instances, sol.getObjects()); if (sol.select_all) sol.else_instances.length = 0; var current_condition = this.runtime.getCurrentCondition(); for (i = 0, k = 0, len = tmp_instances.length; i < len; i++) { inst = tmp_instances[i]; tmp_instances[k] = inst; exp_ = current_condition.parameters[1].get(i); if (exp_) { k++; } else { sol.else_instances.push(inst); } } tmp_instances.length = k; sol.select_all = false; cr.shallowAssignArray(sol.instances, tmp_instances); tmp_instances.length = 0; foreach_instanceptr--; obj_.applySolToContainer(); return !!sol.instances.length; }; SysCnds.prototype.TriggerOnce = function () { var cndextra = this.runtime.getCurrentCondition().extra; if (typeof cndextra.TriggerOnce_lastTick === "undefined") cndextra.TriggerOnce_lastTick = -1; var last_tick = cndextra.TriggerOnce_lastTick; var cur_tick = this.runtime.tickcount; cndextra.TriggerOnce_lastTick = cur_tick; return this.runtime.layout_first_tick || last_tick !== cur_tick - 1; }; SysCnds.prototype.Every = function (seconds) { var cnd = this.runtime.getCurrentCondition(); var last_time = cnd.extra.Every_lastTime || 0; var cur_time = this.runtime.kahanTime.sum; if (typeof cnd.extra.Every_seconds === "undefined") cnd.extra.Every_seconds = seconds; var this_seconds = cnd.extra.Every_seconds; if (cur_time >= last_time + this_seconds) { cnd.extra.Every_lastTime = last_time + this_seconds; if (cur_time >= cnd.extra.Every_lastTime + 0.04) { cnd.extra.Every_lastTime = cur_time; } cnd.extra.Every_seconds = seconds; return true; } else if (cur_time < last_time - 0.1) { cnd.extra.Every_lastTime = cur_time; } return false; }; SysCnds.prototype.PickNth = function (obj, index) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); index = cr.floor(index); if (index < 0 || index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.PickRandom = function (obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var index = cr.floor(Math.random() * instances.length); if (index >= instances.length) return false; var inst = instances[index]; sol.pick_one(inst); obj.applySolToContainer(); return true; }; SysCnds.prototype.CompareVar = function (v, cmp, val) { return cr.do_cmp(v.getValue(), cmp, val); }; SysCnds.prototype.IsGroupActive = function (group) { var g = this.runtime.groups_by_name[group.toLowerCase()]; return g && g.group_active; }; SysCnds.prototype.IsPreview = function () { return typeof cr_is_preview !== "undefined"; }; SysCnds.prototype.PickAll = function (obj) { if (!obj) return false; if (!obj.instances.length) return false; var sol = obj.getCurrentSol(); sol.select_all = true; obj.applySolToContainer(); return true; }; SysCnds.prototype.IsMobile = function () { return this.runtime.isMobile; }; SysCnds.prototype.CompareBetween = function (x, a, b) { return x >= a && x <= b; }; SysCnds.prototype.Else = function () { var current_frame = this.runtime.getCurrentEventStack(); if (current_frame.else_branch_ran) return false; // another event in this else-if chain has run else return !current_frame.last_event_true; /* var current_frame = this.runtime.getCurrentEventStack(); var current_event = current_frame.current_event; var prev_event = current_event.prev_block; if (!prev_event) return false; if (prev_event.is_logical) return !this.runtime.last_event_true; var i, len, j, lenj, s, sol, temp, inst, any_picked = false; for (i = 0, len = prev_event.cndReferences.length; i < len; i++) { s = prev_event.cndReferences[i]; sol = s.getCurrentSol(); if (sol.select_all || sol.instances.length === s.instances.length) { sol.select_all = false; sol.instances.length = 0; } else { if (sol.instances.length === 1 && sol.else_instances.length === 0 && s.instances.length >= 2) { inst = sol.instances[0]; sol.instances.length = 0; for (j = 0, lenj = s.instances.length; j < lenj; j++) { if (s.instances[j] != inst) sol.instances.push(s.instances[j]); } any_picked = true; } else { temp = sol.instances; sol.instances = sol.else_instances; sol.else_instances = temp; any_picked = true; } } } return any_picked; */ }; SysCnds.prototype.OnLoadFinished = function () { return true; }; SysCnds.prototype.OnCanvasSnapshot = function () { return true; }; SysCnds.prototype.EffectsSupported = function () { return !!this.runtime.glwrap; }; SysCnds.prototype.OnSaveComplete = function () { return true; }; SysCnds.prototype.OnLoadComplete = function () { return true; }; SysCnds.prototype.OnLoadFailed = function () { return true; }; SysCnds.prototype.ObjectUIDExists = function (u) { return !!this.runtime.getObjectByUID(u); }; SysCnds.prototype.IsOnPlatform = function (p) { var rt = this.runtime; switch (p) { case 0: // HTML5 website return !rt.isDomFree && !rt.isNodeWebkit && !rt.isPhoneGap && !rt.isCrosswalk && !rt.isWinJS && !rt.isWindowsPhone8 && !rt.isBlackberry10 && !rt.isAmazonWebApp; case 1: // iOS return rt.isiOS; case 2: // Android return rt.isAndroid; case 3: // Windows 8 return rt.isWindows8App; case 4: // Windows Phone 8 return rt.isWindowsPhone8; case 5: // Blackberry 10 return rt.isBlackberry10; case 6: // Tizen return rt.isTizen; case 7: // CocoonJS return rt.isCocoonJs; case 8: // PhoneGap return rt.isPhoneGap; case 9: // Scirra Arcade return rt.isArcade; case 10: // node-webkit return rt.isNodeWebkit; case 11: // crosswalk return rt.isCrosswalk; case 12: // amazon webapp return rt.isAmazonWebApp; default: // should not be possible return false; } }; var cacheRegex = null; var lastRegex = ""; var lastFlags = ""; function getRegex(regex_, flags_) { if (!cacheRegex || regex_ !== lastRegex || flags_ !== lastFlags) { cacheRegex = new RegExp(regex_, flags_); lastRegex = regex_; lastFlags = flags_; } cacheRegex.lastIndex = 0; // reset return cacheRegex; }; SysCnds.prototype.RegexTest = function (str_, regex_, flags_) { var regex = getRegex(regex_, flags_); return regex.test(str_); }; var tmp_arr = []; SysCnds.prototype.PickOverlappingPoint = function (obj_, x_, y_) { if (!obj_) return false; var sol = obj_.getCurrentSol(); var instances = sol.getObjects(); var current_event = this.runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; var cnd = this.runtime.getCurrentCondition(); var i, len, inst, pick; if (sol.select_all) { cr.shallowAssignArray(tmp_arr, instances); sol.else_instances.length = 0; sol.select_all = false; sol.instances.length = 0; } else { if (orblock) { cr.shallowAssignArray(tmp_arr, sol.else_instances); sol.else_instances.length = 0; } else { cr.shallowAssignArray(tmp_arr, instances); sol.instances.length = 0; } } for (i = 0, len = tmp_arr.length; i < len; ++i) { inst = tmp_arr[i]; inst.update_bbox(); pick = cr.xor(inst.contains_pt(x_, y_), cnd.inverted); if (pick) sol.instances.push(inst); else sol.else_instances.push(inst); } obj_.applySolToContainer(); return cr.xor(!!sol.instances.length, cnd.inverted); }; sysProto.cnds = new SysCnds(); function SysActs() {}; SysActs.prototype.GoToLayout = function (to) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout ; this.runtime.changelayout = to; }; SysActs.prototype.NextPrevLayout = function (prev) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to a different layout var index = this.runtime.layouts_by_index.indexOf(this.runtime.running_layout); if (prev && index === 0) return; // cannot go to previous layout from first layout if (!prev && index === this.runtime.layouts_by_index.length - 1) return; // cannot go to next layout from last layout var to = this.runtime.layouts_by_index[index + (prev ? -1 : 1)]; ; this.runtime.changelayout = to; }; SysActs.prototype.CreateObject = function (obj, layer, x, y) { if (!layer || !obj) return; var inst = this.runtime.createInstance(obj, layer, x, y); if (!inst) return; this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var sol = obj.getCurrentSol(); sol.select_all = false; sol.instances.length = 1; sol.instances[0] = inst; if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; sol.instances.length = 1; sol.instances[0] = s; } } }; SysActs.prototype.SetLayerVisible = function (layer, visible_) { if (!layer) return; if (layer.visible !== visible_) { layer.visible = visible_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerOpacity = function (layer, opacity_) { if (!layer) return; opacity_ = cr.clamp(opacity_ / 100, 0, 1); if (layer.opacity !== opacity_) { layer.opacity = opacity_; this.runtime.redraw = true; } }; SysActs.prototype.SetLayerScaleRate = function (layer, sr) { if (!layer) return; if (layer.zoomRate !== sr) { layer.zoomRate = sr; this.runtime.redraw = true; } }; SysActs.prototype.SetLayoutScale = function (s) { if (!this.runtime.running_layout) return; if (this.runtime.running_layout.scale !== s) { this.runtime.running_layout.scale = s; this.runtime.running_layout.boundScrolling(); this.runtime.redraw = true; } }; SysActs.prototype.ScrollX = function(x) { this.runtime.running_layout.scrollToX(x); }; SysActs.prototype.ScrollY = function(y) { this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.Scroll = function(x, y) { this.runtime.running_layout.scrollToX(x); this.runtime.running_layout.scrollToY(y); }; SysActs.prototype.ScrollToObject = function(obj) { var inst = obj.getFirstPicked(); if (inst) { this.runtime.running_layout.scrollToX(inst.x); this.runtime.running_layout.scrollToY(inst.y); } }; SysActs.prototype.SetVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(x); else v.setValue(parseFloat(x)); } else if (v.vartype === 1) v.setValue(x.toString()); }; SysActs.prototype.AddVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() + x); else v.setValue(v.getValue() + parseFloat(x)); } else if (v.vartype === 1) v.setValue(v.getValue() + x.toString()); }; SysActs.prototype.SubVar = function(v, x) { ; if (v.vartype === 0) { if (cr.is_number(x)) v.setValue(v.getValue() - x); else v.setValue(v.getValue() - parseFloat(x)); } }; SysActs.prototype.SetGroupActive = function (group, active) { var g = this.runtime.groups_by_name[group.toLowerCase()]; if (!g) return; switch (active) { case 0: g.setGroupActive(false); break; case 1: g.setGroupActive(true); break; case 2: g.setGroupActive(!g.group_active); break; } }; SysActs.prototype.SetTimescale = function (ts_) { var ts = ts_; if (ts < 0) ts = 0; this.runtime.timescale = ts; }; SysActs.prototype.SetObjectTimescale = function (obj, ts_) { var ts = ts_; if (ts < 0) ts = 0; if (!obj) return; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = ts; } }; SysActs.prototype.RestoreObjectTimescale = function (obj) { if (!obj) return false; var sol = obj.getCurrentSol(); var instances = sol.getObjects(); var i, len; for (i = 0, len = instances.length; i < len; i++) { instances[i].my_timescale = -1.0; } }; var waitobjrecycle = []; function allocWaitObject() { var w; if (waitobjrecycle.length) w = waitobjrecycle.pop(); else { w = {}; w.sols = {}; w.solModifiers = []; } w.deleteme = false; return w; }; function freeWaitObject(w) { cr.wipe(w.sols); w.solModifiers.length = 0; waitobjrecycle.push(w); }; var solstateobjects = []; function allocSolStateObject() { var s; if (solstateobjects.length) s = solstateobjects.pop(); else { s = {}; s.insts = []; } s.sa = false; return s; }; function freeSolStateObject(s) { s.insts.length = 0; solstateobjects.push(s); }; SysActs.prototype.Wait = function (seconds) { if (seconds < 0) return; var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = this.runtime.kahanTime.sum + seconds; waitobj.signaltag = ""; waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.WaitForSignal = function (tag) { var i, len, s, t, ss; var evinfo = this.runtime.getCurrentEventStack(); var waitobj = allocWaitObject(); waitobj.time = -1; waitobj.signaltag = tag.toLowerCase(); waitobj.signalled = false; waitobj.ev = evinfo.current_event; waitobj.actindex = evinfo.actindex + 1; // pointing at next action for (i = 0, len = this.runtime.types_by_index.length; i < len; i++) { t = this.runtime.types_by_index[i]; s = t.getCurrentSol(); if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1) continue; waitobj.solModifiers.push(t); ss = allocSolStateObject(); ss.sa = s.select_all; cr.shallowAssignArray(ss.insts, s.instances); waitobj.sols[i.toString()] = ss; } this.waits.push(waitobj); return true; }; SysActs.prototype.Signal = function (tag) { var lowertag = tag.toLowerCase(); var i, len, w; for (i = 0, len = this.waits.length; i < len; ++i) { w = this.waits[i]; if (w.time !== -1) continue; // timer wait, ignore if (w.signaltag === lowertag) // waiting for this signal w.signalled = true; // will run on next check } }; SysActs.prototype.SetLayerScale = function (layer, scale) { if (!layer) return; if (layer.scale === scale) return; layer.scale = scale; this.runtime.redraw = true; }; SysActs.prototype.ResetGlobals = function () { var i, len, g; for (i = 0, len = this.runtime.all_global_vars.length; i < len; i++) { g = this.runtime.all_global_vars[i]; g.data = g.initial; } }; SysActs.prototype.SetLayoutAngle = function (a) { a = cr.to_radians(a); a = cr.clamp_angle(a); if (this.runtime.running_layout) { if (this.runtime.running_layout.angle !== a) { this.runtime.running_layout.angle = a; this.runtime.redraw = true; } } }; SysActs.prototype.SetLayerAngle = function (layer, a) { if (!layer) return; a = cr.to_radians(a); a = cr.clamp_angle(a); if (layer.angle === a) return; layer.angle = a; this.runtime.redraw = true; }; SysActs.prototype.SetLayerParallax = function (layer, px, py) { if (!layer) return; if (layer.parallaxX === px / 100 && layer.parallaxY === py / 100) return; layer.parallaxX = px / 100; layer.parallaxY = py / 100; if (layer.parallaxX !== 1 || layer.parallaxY !== 1) { var i, len, instances = layer.instances; for (i = 0, len = instances.length; i < len; ++i) { instances[i].type.any_instance_parallaxed = true; } } this.runtime.redraw = true; }; SysActs.prototype.SetLayerBackground = function (layer, c) { if (!layer) return; var r = cr.GetRValue(c); var g = cr.GetGValue(c); var b = cr.GetBValue(c); if (layer.background_color[0] === r && layer.background_color[1] === g && layer.background_color[2] === b) return; layer.background_color[0] = r; layer.background_color[1] = g; layer.background_color[2] = b; this.runtime.redraw = true; }; SysActs.prototype.SetLayerTransparent = function (layer, t) { if (!layer) return; if (!!t === !!layer.transparent) return; layer.transparent = !!t; this.runtime.redraw = true; }; SysActs.prototype.StopLoop = function () { if (this.runtime.loop_stack_index < 0) return; // no loop currently running this.runtime.getCurrentLoop().stopped = true; }; SysActs.prototype.GoToLayoutByName = function (layoutname) { if (this.runtime.isloading) return; // cannot change layout while loading on loader layout if (this.runtime.changelayout) return; // already changing to different layout ; var l; for (l in this.runtime.layouts) { if (this.runtime.layouts.hasOwnProperty(l) && cr.equals_nocase(l, layoutname)) { this.runtime.changelayout = this.runtime.layouts[l]; return; } } }; SysActs.prototype.RestartLayout = function (layoutname) { if (this.runtime.isloading) return; // cannot restart loader layouts if (this.runtime.changelayout) return; // already changing to a different layout ; if (!this.runtime.running_layout) return; this.runtime.changelayout = this.runtime.running_layout; var i, len, g; for (i = 0, len = this.runtime.allGroups.length; i < len; i++) { g = this.runtime.allGroups[i]; g.setGroupActive(g.initially_activated); } }; SysActs.prototype.SnapshotCanvas = function (format_, quality_) { this.runtime.snapshotCanvas = [format_ === 0 ? "image/png" : "image/jpeg", quality_ / 100]; this.runtime.redraw = true; // force redraw so snapshot is always taken }; SysActs.prototype.SetCanvasSize = function (w, h) { if (w <= 0 || h <= 0) return; var mode = this.runtime.fullscreen_mode; var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.runtime.isNodeFullscreen); if (isfullscreen && this.runtime.fullscreen_scaling > 0) mode = this.runtime.fullscreen_scaling; if (mode === 0) { this.runtime["setSize"](w, h, true); } else { this.runtime.original_width = w; this.runtime.original_height = h; this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); } }; SysActs.prototype.SetLayoutEffectEnabled = function (enable_, effectname_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; this.runtime.running_layout.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectEnabled = function (layer, enable_, effectname_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var enable = (enable_ === 1); if (et.active == enable) return; // no change et.active = enable; layer.updateActiveEffects(); this.runtime.redraw = true; }; SysActs.prototype.SetLayoutEffectParam = function (effectname_, index_, value_) { if (!this.runtime.running_layout || !this.runtime.glwrap) return; var et = this.runtime.running_layout.getEffectByName(effectname_); if (!et) return; // effect name not found var params = this.runtime.running_layout.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SetLayerEffectParam = function (layer, effectname_, index_, value_) { if (!layer || !this.runtime.glwrap) return; var et = layer.getEffectByName(effectname_); if (!et) return; // effect name not found var params = layer.effect_params[et.index]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; SysActs.prototype.SaveState = function (slot_) { this.runtime.saveToSlot = slot_; }; SysActs.prototype.LoadState = function (slot_) { this.runtime.loadFromSlot = slot_; }; SysActs.prototype.LoadStateJSON = function (jsonstr_) { this.runtime.loadFromJson = jsonstr_; }; SysActs.prototype.SetHalfFramerateMode = function (set_) { this.runtime.halfFramerateMode = (set_ !== 0); }; SysActs.prototype.SetFullscreenQuality = function (q) { var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen); if (!isfullscreen && this.runtime.fullscreen_mode === 0) return; this.runtime.wantFullscreenScalingQuality = (q !== 0); this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true); }; sysProto.acts = new SysActs(); function SysExps() {}; SysExps.prototype["int"] = function(ret, x) { if (cr.is_string(x)) { ret.set_int(parseInt(x, 10)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_int(x); }; SysExps.prototype["float"] = function(ret, x) { if (cr.is_string(x)) { ret.set_float(parseFloat(x)); if (isNaN(ret.data)) ret.data = 0; } else ret.set_float(x); }; SysExps.prototype.str = function(ret, x) { if (cr.is_string(x)) ret.set_string(x); else ret.set_string(x.toString()); }; SysExps.prototype.len = function(ret, x) { ret.set_int(x.length || 0); }; SysExps.prototype.random = function (ret, a, b) { if (b === undefined) { ret.set_float(Math.random() * a); } else { ret.set_float(Math.random() * (b - a) + a); } }; SysExps.prototype.sqrt = function(ret, x) { ret.set_float(Math.sqrt(x)); }; SysExps.prototype.abs = function(ret, x) { ret.set_float(Math.abs(x)); }; SysExps.prototype.round = function(ret, x) { ret.set_int(Math.round(x)); }; SysExps.prototype.floor = function(ret, x) { ret.set_int(Math.floor(x)); }; SysExps.prototype.ceil = function(ret, x) { ret.set_int(Math.ceil(x)); }; SysExps.prototype.sin = function(ret, x) { ret.set_float(Math.sin(cr.to_radians(x))); }; SysExps.prototype.cos = function(ret, x) { ret.set_float(Math.cos(cr.to_radians(x))); }; SysExps.prototype.tan = function(ret, x) { ret.set_float(Math.tan(cr.to_radians(x))); }; SysExps.prototype.asin = function(ret, x) { ret.set_float(cr.to_degrees(Math.asin(x))); }; SysExps.prototype.acos = function(ret, x) { ret.set_float(cr.to_degrees(Math.acos(x))); }; SysExps.prototype.atan = function(ret, x) { ret.set_float(cr.to_degrees(Math.atan(x))); }; SysExps.prototype.exp = function(ret, x) { ret.set_float(Math.exp(x)); }; SysExps.prototype.ln = function(ret, x) { ret.set_float(Math.log(x)); }; SysExps.prototype.log10 = function(ret, x) { ret.set_float(Math.log(x) / Math.LN10); }; SysExps.prototype.max = function(ret) { var max_ = arguments[1]; if (typeof max_ !== "number") max_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (max_ < a) max_ = a; } ret.set_float(max_); }; SysExps.prototype.min = function(ret) { var min_ = arguments[1]; if (typeof min_ !== "number") min_ = 0; var i, len, a; for (i = 2, len = arguments.length; i < len; i++) { a = arguments[i]; if (typeof a !== "number") continue; // ignore non-numeric types if (min_ > a) min_ = a; } ret.set_float(min_); }; SysExps.prototype.dt = function(ret) { ret.set_float(this.runtime.dt); }; SysExps.prototype.timescale = function(ret) { ret.set_float(this.runtime.timescale); }; SysExps.prototype.wallclocktime = function(ret) { ret.set_float((Date.now() - this.runtime.start_time) / 1000.0); }; SysExps.prototype.time = function(ret) { ret.set_float(this.runtime.kahanTime.sum); }; SysExps.prototype.tickcount = function(ret) { ret.set_int(this.runtime.tickcount); }; SysExps.prototype.objectcount = function(ret) { ret.set_int(this.runtime.objectcount); }; SysExps.prototype.fps = function(ret) { ret.set_int(this.runtime.fps); }; SysExps.prototype.loopindex = function(ret, name_) { var loop, i, len; if (!this.runtime.loop_stack.length) { ret.set_int(0); return; } if (name_) { for (i = 0, len = this.runtime.loop_stack.length; i < len; i++) { loop = this.runtime.loop_stack[i]; if (loop.name === name_) { ret.set_int(loop.index); return; } } ret.set_int(0); } else { loop = this.runtime.getCurrentLoop(); ret.set_int(loop ? loop.index : -1); } }; SysExps.prototype.distance = function(ret, x1, y1, x2, y2) { ret.set_float(cr.distanceTo(x1, y1, x2, y2)); }; SysExps.prototype.angle = function(ret, x1, y1, x2, y2) { ret.set_float(cr.to_degrees(cr.angleTo(x1, y1, x2, y2))); }; SysExps.prototype.scrollx = function(ret) { ret.set_float(this.runtime.running_layout.scrollX); }; SysExps.prototype.scrolly = function(ret) { ret.set_float(this.runtime.running_layout.scrollY); }; SysExps.prototype.newline = function(ret) { ret.set_string("\n"); }; SysExps.prototype.lerp = function(ret, a, b, x) { ret.set_float(cr.lerp(a, b, x)); }; SysExps.prototype.qarp = function(ret, a, b, c, x) { ret.set_float(cr.qarp(a, b, c, x)); }; SysExps.prototype.cubic = function(ret, a, b, c, d, x) { ret.set_float(cr.cubic(a, b, c, d, x)); }; SysExps.prototype.cosp = function(ret, a, b, x) { ret.set_float(cr.cosp(a, b, x)); }; SysExps.prototype.windowwidth = function(ret) { ret.set_int(this.runtime.width); }; SysExps.prototype.windowheight = function(ret) { ret.set_int(this.runtime.height); }; SysExps.prototype.uppercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toUpperCase() : ""); }; SysExps.prototype.lowercase = function(ret, str) { ret.set_string(cr.is_string(str) ? str.toLowerCase() : ""); }; SysExps.prototype.clamp = function(ret, x, l, u) { if (x < l) ret.set_float(l); else if (x > u) ret.set_float(u); else ret.set_float(x); }; SysExps.prototype.layerscale = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.scale); }; SysExps.prototype.layeropacity = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.opacity * 100); }; SysExps.prototype.layerscalerate = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.zoomRate); }; SysExps.prototype.layerparallaxx = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxX * 100); }; SysExps.prototype.layerparallaxy = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(layer.parallaxY * 100); }; SysExps.prototype.layoutscale = function (ret) { if (this.runtime.running_layout) ret.set_float(this.runtime.running_layout.scale); else ret.set_float(0); }; SysExps.prototype.layoutangle = function (ret) { ret.set_float(cr.to_degrees(this.runtime.running_layout.angle)); }; SysExps.prototype.layerangle = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); if (!layer) ret.set_float(0); else ret.set_float(cr.to_degrees(layer.angle)); }; SysExps.prototype.layoutwidth = function (ret) { ret.set_int(this.runtime.running_layout.width); }; SysExps.prototype.layoutheight = function (ret) { ret.set_int(this.runtime.running_layout.height); }; SysExps.prototype.find = function (ret, text, searchstr) { if (cr.is_string(text) && cr.is_string(searchstr)) ret.set_int(text.search(new RegExp(cr.regexp_escape(searchstr), "i"))); else ret.set_int(-1); }; SysExps.prototype.left = function (ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(0, n) : ""); }; SysExps.prototype.right = function (ret, text, n) { ret.set_string(cr.is_string(text) ? text.substr(text.length - n) : ""); }; SysExps.prototype.mid = function (ret, text, index_, length_) { ret.set_string(cr.is_string(text) ? text.substr(index_, length_) : ""); }; SysExps.prototype.tokenat = function (ret, text, index_, sep) { if (cr.is_string(text) && cr.is_string(sep)) { var arr = text.split(sep); var i = cr.floor(index_); if (i < 0 || i >= arr.length) ret.set_string(""); else ret.set_string(arr[i]); } else ret.set_string(""); }; SysExps.prototype.tokencount = function (ret, text, sep) { if (cr.is_string(text) && text.length) ret.set_int(text.split(sep).length); else ret.set_int(0); }; SysExps.prototype.replace = function (ret, text, find_, replace_) { if (cr.is_string(text) && cr.is_string(find_) && cr.is_string(replace_)) ret.set_string(text.replace(new RegExp(cr.regexp_escape(find_), "gi"), replace_)); else ret.set_string(cr.is_string(text) ? text : ""); }; SysExps.prototype.trim = function (ret, text) { ret.set_string(cr.is_string(text) ? text.trim() : ""); }; SysExps.prototype.pi = function (ret) { ret.set_float(cr.PI); }; SysExps.prototype.layoutname = function (ret) { if (this.runtime.running_layout) ret.set_string(this.runtime.running_layout.name); else ret.set_string(""); }; SysExps.prototype.renderer = function (ret) { ret.set_string(this.runtime.gl ? "webgl" : "canvas2d"); }; SysExps.prototype.anglediff = function (ret, a, b) { ret.set_float(cr.to_degrees(cr.angleDiff(cr.to_radians(a), cr.to_radians(b)))); }; SysExps.prototype.choose = function (ret) { var index = cr.floor(Math.random() * (arguments.length - 1)); ret.set_any(arguments[index + 1]); }; SysExps.prototype.rgb = function (ret, r, g, b) { ret.set_int(cr.RGB(r, g, b)); }; SysExps.prototype.projectversion = function (ret) { ret.set_string(this.runtime.versionstr); }; SysExps.prototype.anglelerp = function (ret, a, b, x) { a = cr.to_radians(a); b = cr.to_radians(b); var diff = cr.angleDiff(a, b); if (cr.angleClockwise(b, a)) { ret.set_float(cr.to_clamped_degrees(a + diff * x)); } else { ret.set_float(cr.to_clamped_degrees(a - diff * x)); } }; SysExps.prototype.anglerotate = function (ret, a, b, c) { a = cr.to_radians(a); b = cr.to_radians(b); c = cr.to_radians(c); ret.set_float(cr.to_clamped_degrees(cr.angleRotate(a, b, c))); }; SysExps.prototype.zeropad = function (ret, n, d) { var s = (n < 0 ? "-" : ""); if (n < 0) n = -n; var zeroes = d - n.toString().length; for (var i = 0; i < zeroes; i++) s += "0"; ret.set_string(s + n.toString()); }; SysExps.prototype.cpuutilisation = function (ret) { ret.set_float(this.runtime.cpuutilisation / 1000); }; SysExps.prototype.viewportleft = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewLeft : 0); }; SysExps.prototype.viewporttop = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewTop : 0); }; SysExps.prototype.viewportright = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewRight : 0); }; SysExps.prototype.viewportbottom = function (ret, layerparam) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.viewBottom : 0); }; SysExps.prototype.loadingprogress = function (ret) { ret.set_float(this.runtime.loadingprogress); }; SysExps.prototype.unlerp = function(ret, a, b, y) { ret.set_float(cr.unlerp(a, b, y)); }; SysExps.prototype.canvassnapshot = function (ret) { ret.set_string(this.runtime.snapshotData); }; SysExps.prototype.urlencode = function (ret, s) { ret.set_string(encodeURIComponent(s)); }; SysExps.prototype.urldecode = function (ret, s) { ret.set_string(decodeURIComponent(s)); }; SysExps.prototype.canvastolayerx = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, true) : 0); }; SysExps.prototype.canvastolayery = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.canvasToLayer(x, y, false) : 0); }; SysExps.prototype.layertocanvasx = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, true) : 0); }; SysExps.prototype.layertocanvasy = function (ret, layerparam, x, y) { var layer = this.runtime.getLayer(layerparam); ret.set_float(layer ? layer.layerToCanvas(x, y, false) : 0); }; SysExps.prototype.savestatejson = function (ret) { ret.set_string(this.runtime.lastSaveJson); }; SysExps.prototype.imagememoryusage = function (ret) { if (this.runtime.glwrap) ret.set_float(Math.round(100 * this.runtime.glwrap.estimateVRAM() / (1024 * 1024)) / 100); else ret.set_float(0); }; SysExps.prototype.regexsearch = function (ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); ret.set_int(str_ ? str_.search(regex) : -1); }; SysExps.prototype.regexreplace = function (ret, str_, regex_, flags_, replace_) { var regex = getRegex(regex_, flags_); ret.set_string(str_ ? str_.replace(regex, replace_) : ""); }; var regexMatches = []; var lastMatchesStr = ""; var lastMatchesRegex = ""; var lastMatchesFlags = ""; function updateRegexMatches(str_, regex_, flags_) { if (str_ === lastMatchesStr && regex_ === lastMatchesRegex && flags_ === lastMatchesFlags) return; var regex = getRegex(regex_, flags_); regexMatches = str_.match(regex); lastMatchesStr = str_; lastMatchesRegex = regex_; lastMatchesFlags = flags_; }; SysExps.prototype.regexmatchcount = function (ret, str_, regex_, flags_) { var regex = getRegex(regex_, flags_); updateRegexMatches(str_, regex_, flags_); ret.set_int(regexMatches ? regexMatches.length : 0); }; SysExps.prototype.regexmatchat = function (ret, str_, regex_, flags_, index_) { index_ = Math.floor(index_); var regex = getRegex(regex_, flags_); updateRegexMatches(str_, regex_, flags_); if (!regexMatches || index_ < 0 || index_ >= regexMatches.length) ret.set_string(""); else ret.set_string(regexMatches[index_]); }; SysExps.prototype.infinity = function (ret) { ret.set_float(Infinity); }; SysExps.prototype.setbit = function (ret, n, b, v) { n = n | 0; b = b | 0; v = (v !== 0 ? 1 : 0); ret.set_int((n & ~(1 << b)) | (v << b)); }; SysExps.prototype.togglebit = function (ret, n, b) { n = n | 0; b = b | 0; ret.set_int(n ^ (1 << b)); }; SysExps.prototype.getbit = function (ret, n, b) { n = n | 0; b = b | 0; ret.set_int((n & (1 << b)) ? 1 : 0); }; sysProto.exps = new SysExps(); sysProto.runWaits = function () { var i, j, len, w, k, s, ss; var evinfo = this.runtime.getCurrentEventStack(); for (i = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; if (w.time === -1) // signalled wait { if (!w.signalled) continue; // not yet signalled } else // timer wait { if (w.time > this.runtime.kahanTime.sum) continue; // timer not yet expired } evinfo.current_event = w.ev; evinfo.actindex = w.actindex; evinfo.cndindex = 0; for (k in w.sols) { if (w.sols.hasOwnProperty(k)) { s = this.runtime.types_by_index[parseInt(k, 10)].getCurrentSol(); ss = w.sols[k]; s.select_all = ss.sa; cr.shallowAssignArray(s.instances, ss.insts); freeSolStateObject(ss); } } w.ev.resume_actions_and_subevents(); this.runtime.clearSol(w.solModifiers); w.deleteme = true; } for (i = 0, j = 0, len = this.waits.length; i < len; i++) { w = this.waits[i]; this.waits[j] = w; if (w.deleteme) freeWaitObject(w); else j++; } this.waits.length = j; }; }()); ; (function () { cr.add_common_aces = function (m) { var pluginProto = m[0].prototype; var singleglobal_ = m[1]; var position_aces = m[3]; var size_aces = m[4]; var angle_aces = m[5]; var appearance_aces = m[6]; var zorder_aces = m[7]; var effects_aces = m[8]; if (!pluginProto.cnds) pluginProto.cnds = {}; if (!pluginProto.acts) pluginProto.acts = {}; if (!pluginProto.exps) pluginProto.exps = {}; var cnds = pluginProto.cnds; var acts = pluginProto.acts; var exps = pluginProto.exps; if (position_aces) { cnds.CompareX = function (cmp, x) { return cr.do_cmp(this.x, cmp, x); }; cnds.CompareY = function (cmp, y) { return cr.do_cmp(this.y, cmp, y); }; cnds.IsOnScreen = function () { var layer = this.layer; this.update_bbox(); var bbox = this.bbox; return !(bbox.right < layer.viewLeft || bbox.bottom < layer.viewTop || bbox.left > layer.viewRight || bbox.top > layer.viewBottom); }; cnds.IsOutsideLayout = function () { this.update_bbox(); var bbox = this.bbox; var layout = this.runtime.running_layout; return (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height); }; cnds.PickDistance = function (which, x, y) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var dist = cr.distanceTo(inst.x, inst.y, x, y); var i, len, d; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; d = cr.distanceTo(inst.x, inst.y, x, y); if ((which === 0 && d < dist) || (which === 1 && d > dist)) { dist = d; pickme = inst; } } sol.pick_one(pickme); return true; }; acts.SetX = function (x) { if (this.x !== x) { this.x = x; this.set_bbox_changed(); } }; acts.SetY = function (y) { if (this.y !== y) { this.y = y; this.set_bbox_changed(); } }; acts.SetPos = function (x, y) { if (this.x !== x || this.y !== y) { this.x = x; this.y = y; this.set_bbox_changed(); } }; acts.SetPosToObject = function (obj, imgpt) { var inst = obj.getPairedInstance(this); if (!inst) return; var newx, newy; if (inst.getImagePoint) { newx = inst.getImagePoint(imgpt, true); newy = inst.getImagePoint(imgpt, false); } else { newx = inst.x; newy = inst.y; } if (this.x !== newx || this.y !== newy) { this.x = newx; this.y = newy; this.set_bbox_changed(); } }; acts.MoveForward = function (dist) { if (dist !== 0) { this.x += Math.cos(this.angle) * dist; this.y += Math.sin(this.angle) * dist; this.set_bbox_changed(); } }; acts.MoveAtAngle = function (a, dist) { if (dist !== 0) { this.x += Math.cos(cr.to_radians(a)) * dist; this.y += Math.sin(cr.to_radians(a)) * dist; this.set_bbox_changed(); } }; exps.X = function (ret) { ret.set_float(this.x); }; exps.Y = function (ret) { ret.set_float(this.y); }; exps.dt = function (ret) { ret.set_float(this.runtime.getDt(this)); }; } if (size_aces) { cnds.CompareWidth = function (cmp, w) { return cr.do_cmp(this.width, cmp, w); }; cnds.CompareHeight = function (cmp, h) { return cr.do_cmp(this.height, cmp, h); }; acts.SetWidth = function (w) { if (this.width !== w) { this.width = w; this.set_bbox_changed(); } }; acts.SetHeight = function (h) { if (this.height !== h) { this.height = h; this.set_bbox_changed(); } }; acts.SetSize = function (w, h) { if (this.width !== w || this.height !== h) { this.width = w; this.height = h; this.set_bbox_changed(); } }; exps.Width = function (ret) { ret.set_float(this.width); }; exps.Height = function (ret) { ret.set_float(this.height); }; exps.BBoxLeft = function (ret) { this.update_bbox(); ret.set_float(this.bbox.left); }; exps.BBoxTop = function (ret) { this.update_bbox(); ret.set_float(this.bbox.top); }; exps.BBoxRight = function (ret) { this.update_bbox(); ret.set_float(this.bbox.right); }; exps.BBoxBottom = function (ret) { this.update_bbox(); ret.set_float(this.bbox.bottom); }; } if (angle_aces) { cnds.AngleWithin = function (within, a) { return cr.angleDiff(this.angle, cr.to_radians(a)) <= cr.to_radians(within); }; cnds.IsClockwiseFrom = function (a) { return cr.angleClockwise(this.angle, cr.to_radians(a)); }; cnds.IsBetweenAngles = function (a, b) { var lower = cr.to_clamped_radians(a); var upper = cr.to_clamped_radians(b); var angle = cr.clamp_angle(this.angle); var obtuse = (!cr.angleClockwise(upper, lower)); if (obtuse) return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper)); else return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper); }; acts.SetAngle = function (a) { var newangle = cr.to_radians(cr.clamp_angle_degrees(a)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateClockwise = function (a) { if (a !== 0 && !isNaN(a)) { this.angle += cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateCounterclockwise = function (a) { if (a !== 0 && !isNaN(a)) { this.angle -= cr.to_radians(a); this.angle = cr.clamp_angle(this.angle); this.set_bbox_changed(); } }; acts.RotateTowardAngle = function (amt, target) { var newangle = cr.angleRotate(this.angle, cr.to_radians(target), cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.RotateTowardPosition = function (amt, x, y) { var dx = x - this.x; var dy = y - this.y; var target = Math.atan2(dy, dx); var newangle = cr.angleRotate(this.angle, target, cr.to_radians(amt)); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; acts.SetTowardPosition = function (x, y) { var dx = x - this.x; var dy = y - this.y; var newangle = Math.atan2(dy, dx); if (isNaN(newangle)) return; if (this.angle !== newangle) { this.angle = newangle; this.set_bbox_changed(); } }; exps.Angle = function (ret) { ret.set_float(cr.to_clamped_degrees(this.angle)); }; } if (!singleglobal_) { cnds.CompareInstanceVar = function (iv, cmp, val) { return cr.do_cmp(this.instance_vars[iv], cmp, val); }; cnds.IsBoolInstanceVarSet = function (iv) { return this.instance_vars[iv]; }; cnds.PickInstVarHiLow = function (which, iv) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var val = inst.instance_vars[iv]; var i, len, v; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; v = inst.instance_vars[iv]; if ((which === 0 && v < val) || (which === 1 && v > val)) { val = v; pickme = inst; } } sol.pick_one(pickme); return true; }; cnds.PickByUID = function (u) { var i, len, j, inst, families, instances, sol; var cnd = this.runtime.getCurrentCondition(); if (cnd.inverted) { sol = this.getCurrentSol(); if (sol.select_all) { sol.select_all = false; sol.instances.length = 0; sol.else_instances.length = 0; instances = this.instances; for (i = 0, len = instances.length; i < len; i++) { inst = instances[i]; if (inst.uid === u) sol.else_instances.push(inst); else sol.instances.push(inst); } this.applySolToContainer(); return !!sol.instances.length; } else { for (i = 0, j = 0, len = sol.instances.length; i < len; i++) { inst = sol.instances[i]; sol.instances[j] = inst; if (inst.uid === u) { sol.else_instances.push(inst); } else j++; } sol.instances.length = j; this.applySolToContainer(); return !!sol.instances.length; } } else { inst = this.runtime.getObjectByUID(u); if (!inst) return false; sol = this.getCurrentSol(); if (!sol.select_all && sol.instances.indexOf(inst) === -1) return false; // not picked if (this.is_family) { families = inst.type.families; for (i = 0, len = families.length; i < len; i++) { if (families[i] === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } } } else if (inst.type === this) { sol.pick_one(inst); this.applySolToContainer(); return true; } return false; } }; cnds.OnCreated = function () { return true; }; cnds.OnDestroyed = function () { return true; }; acts.SetInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] = val; else myinstvars[iv] = parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] = val; else myinstvars[iv] = val.toString(); } else ; }; acts.AddInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] += val; else myinstvars[iv] += parseFloat(val); } else if (cr.is_string(myinstvars[iv])) { if (cr.is_string(val)) myinstvars[iv] += val; else myinstvars[iv] += val.toString(); } else ; }; acts.SubInstanceVar = function (iv, val) { var myinstvars = this.instance_vars; if (cr.is_number(myinstvars[iv])) { if (cr.is_number(val)) myinstvars[iv] -= val; else myinstvars[iv] -= parseFloat(val); } else ; }; acts.SetBoolInstanceVar = function (iv, val) { this.instance_vars[iv] = val ? 1 : 0; }; acts.ToggleBoolInstanceVar = function (iv) { this.instance_vars[iv] = 1 - this.instance_vars[iv]; }; acts.Destroy = function () { this.runtime.DestroyInstance(this); }; if (!acts.LoadFromJsonString) { acts.LoadFromJsonString = function (str_) { var o, i, len, binst; try { o = JSON.parse(str_); } catch (e) { return; } this.runtime.loadInstanceFromJSON(this, o, true); if (this.afterLoad) this.afterLoad(); if (this.behavior_insts) { for (i = 0, len = this.behavior_insts.length; i < len; ++i) { binst = this.behavior_insts[i]; if (binst.afterLoad) binst.afterLoad(); } } }; } exps.Count = function (ret) { var count = ret.object_class.instances.length; var i, len, inst; for (i = 0, len = this.runtime.createRow.length; i < len; i++) { inst = this.runtime.createRow[i]; if (ret.object_class.is_family) { if (inst.type.families.indexOf(ret.object_class) >= 0) count++; } else { if (inst.type === ret.object_class) count++; } } ret.set_int(count); }; exps.PickedCount = function (ret) { ret.set_int(ret.object_class.getCurrentSol().getObjects().length); }; exps.UID = function (ret) { ret.set_int(this.uid); }; exps.IID = function (ret) { ret.set_int(this.get_iid()); }; if (!exps.AsJSON) { exps.AsJSON = function (ret) { ret.set_string(JSON.stringify(this.runtime.saveInstanceToJSON(this, true))); }; } } if (appearance_aces) { cnds.IsVisible = function () { return this.visible; }; acts.SetVisible = function (v) { if (!v !== !this.visible) { this.visible = v; this.runtime.redraw = true; } }; cnds.CompareOpacity = function (cmp, x) { return cr.do_cmp(cr.round6dp(this.opacity * 100), cmp, x); }; acts.SetOpacity = function (x) { var new_opacity = x / 100.0; if (new_opacity < 0) new_opacity = 0; else if (new_opacity > 1) new_opacity = 1; if (new_opacity !== this.opacity) { this.opacity = new_opacity; this.runtime.redraw = true; } }; exps.Opacity = function (ret) { ret.set_float(cr.round6dp(this.opacity * 100.0)); }; } if (zorder_aces) { cnds.IsOnLayer = function (layer_) { if (!layer_) return false; return this.layer === layer_; }; cnds.PickTopBottom = function (which_) { var sol = this.getCurrentSol(); var instances = sol.getObjects(); if (!instances.length) return false; var inst = instances[0]; var pickme = inst; var i, len; for (i = 1, len = instances.length; i < len; i++) { inst = instances[i]; if (which_ === 0) { if (inst.layer.index > pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() > pickme.get_zindex())) { pickme = inst; } } else { if (inst.layer.index < pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() < pickme.get_zindex())) { pickme = inst; } } } sol.pick_one(pickme); return true; }; acts.MoveToTop = function () { var zindex = this.get_zindex(); if (zindex === this.layer.instances.length - 1) return; cr.arrayRemove(this.layer.instances, zindex); this.layer.instances.push(this); this.runtime.redraw = true; this.layer.zindices_stale = true; }; acts.MoveToBottom = function () { var zindex = this.get_zindex(); if (zindex === 0) return; cr.arrayRemove(this.layer.instances, zindex); this.layer.instances.unshift(this); this.runtime.redraw = true; this.layer.zindices_stale = true; }; acts.MoveToLayer = function (layerMove) { if (!layerMove || layerMove == this.layer) return; cr.arrayRemove(this.layer.instances, this.get_zindex()); this.layer.zindices_stale = true; this.layer = layerMove; this.zindex = layerMove.instances.length; layerMove.instances.push(this); this.runtime.redraw = true; }; acts.ZMoveToObject = function (where_, obj_) { var isafter = (where_ === 0); if (!obj_) return; var other = obj_.getFirstPicked(this); if (!other || other.uid === this.uid) return; if (this.layer.index !== other.layer.index) { cr.arrayRemove(this.layer.instances, this.get_zindex()); this.layer.zindices_stale = true; this.layer = other.layer; this.zindex = other.layer.instances.length; other.layer.instances.push(this); } var myZ = this.get_zindex(); var insertZ = other.get_zindex(); cr.arrayRemove(this.layer.instances, myZ); if (myZ < insertZ) insertZ--; if (isafter) insertZ++; if (insertZ === this.layer.instances.length) this.layer.instances.push(this); else this.layer.instances.splice(insertZ, 0, this); this.layer.zindices_stale = true; this.runtime.redraw = true; }; exps.LayerNumber = function (ret) { ret.set_int(this.layer.number); }; exps.LayerName = function (ret) { ret.set_string(this.layer.name); }; exps.ZIndex = function (ret) { ret.set_int(this.get_zindex()); }; } if (effects_aces) { acts.SetEffectEnabled = function (enable_, effectname_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var enable = (enable_ === 1); if (this.active_effect_flags[i] === enable) return; // no change this.active_effect_flags[i] = enable; this.updateActiveEffects(); this.runtime.redraw = true; }; acts.SetEffectParam = function (effectname_, index_, value_) { if (!this.runtime.glwrap) return; var i = this.type.getEffectIndexByName(effectname_); if (i < 0) return; // effect name not found var et = this.type.effect_types[i]; var params = this.effect_params[i]; index_ = Math.floor(index_); if (index_ < 0 || index_ >= params.length) return; // effect index out of bounds if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1) value_ /= 100.0; if (params[index_] === value_) return; // no change params[index_] = value_; if (et.active) this.runtime.redraw = true; }; } }; cr.set_bbox_changed = function () { this.bbox_changed = true; // will recreate next time box requested this.cell_changed = true; this.type.any_cell_changed = true; // avoid unnecessary updateAllBBox() calls this.runtime.redraw = true; // assume runtime needs to redraw var i, len, callbacks = this.bbox_changed_callbacks; for (i = 0, len = callbacks.length; i < len; ++i) { callbacks[i](this); } }; cr.add_bbox_changed_callback = function (f) { if (f) { this.bbox_changed_callbacks.push(f); } }; cr.update_bbox = function () { if (!this.bbox_changed) return; // bounding box not changed var bbox = this.bbox; var bquad = this.bquad; bbox.set(this.x, this.y, this.x + this.width, this.y + this.height); bbox.offset(-this.hotspotX * this.width, -this.hotspotY * this.height); if (!this.angle) { bquad.set_from_rect(bbox); // make bounding quad from box } else { bbox.offset(-this.x, -this.y); // translate to origin bquad.set_from_rotated_rect(bbox, this.angle); // rotate around origin bquad.offset(this.x, this.y); // translate back to original position bquad.bounding_box(bbox); } bbox.normalize(); this.bbox_changed = false; // bounding box up to date }; var tmprc = new cr.rect(0, 0, 0, 0); cr.update_collision_cell = function () { if (!this.cell_changed || !this.collisionsEnabled) return; this.update_bbox(); var mygrid = this.type.collision_grid; var collcells = this.collcells; var bbox = this.bbox; tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom)); if (collcells.equals(tmprc)) return; if (collcells.right < collcells.left) mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range else mygrid.update(this, collcells, tmprc); collcells.copy(tmprc); this.cell_changed = false; }; cr.inst_contains_pt = function (x, y) { if (!this.bbox.contains_pt(x, y)) return false; if (!this.bquad.contains_pt(x, y)) return false; if (this.collision_poly && !this.collision_poly.is_empty()) { this.collision_poly.cache_poly(this.width, this.height, this.angle); return this.collision_poly.contains_pt(x - this.x, y - this.y); } else return true; }; cr.inst_get_iid = function () { this.type.updateIIDs(); return this.iid; }; cr.inst_get_zindex = function () { this.layer.updateZIndices(); return this.zindex; }; cr.inst_updateActiveEffects = function () { this.active_effect_types.length = 0; var i, len, et, inst; for (i = 0, len = this.active_effect_flags.length; i < len; i++) { if (this.active_effect_flags[i]) this.active_effect_types.push(this.type.effect_types[i]); } this.uses_shaders = !!this.active_effect_types.length; }; cr.inst_toString = function () { return "Inst" + this.puid; }; cr.type_getFirstPicked = function (frominst) { if (frominst && frominst.is_contained && frominst.type != this) { var i, len, s; for (i = 0, len = frominst.siblings.length; i < len; i++) { s = frominst.siblings[i]; if (s.type == this) return s; } } var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[0]; else return null; }; cr.type_getPairedInstance = function (inst) { var instances = this.getCurrentSol().getObjects(); if (instances.length) return instances[inst.get_iid() % instances.length]; else return null; }; cr.type_updateIIDs = function () { if (!this.stale_iids || this.is_family) return; // up to date or is family - don't want family to overwrite IIDs var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].iid = i; var next_iid = i; var createRow = this.runtime.createRow; for (i = 0, len = createRow.length; i < len; ++i) { if (createRow[i].type === this) createRow[i].iid = next_iid++; } this.stale_iids = false; }; cr.type_getInstanceByIID = function (i) { if (i < this.instances.length) return this.instances[i]; i -= this.instances.length; var createRow = this.runtime.createRow; var j, lenj; for (j = 0, lenj = createRow.length; j < lenj; ++j) { if (createRow[j].type === this) { if (i === 0) return createRow[j]; --i; } } ; return null; }; cr.type_getCurrentSol = function () { return this.solstack[this.cur_sol]; }; cr.type_pushCleanSol = function () { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); else this.solstack[this.cur_sol].select_all = true; // else clear next SOL }; cr.type_pushCopySol = function () { this.cur_sol++; if (this.cur_sol === this.solstack.length) this.solstack.push(new cr.selection(this)); var clonesol = this.solstack[this.cur_sol]; var prevsol = this.solstack[this.cur_sol - 1]; if (prevsol.select_all) clonesol.select_all = true; else { clonesol.select_all = false; cr.shallowAssignArray(clonesol.instances, prevsol.instances); cr.shallowAssignArray(clonesol.else_instances, prevsol.else_instances); } }; cr.type_popSol = function () { ; this.cur_sol--; }; cr.type_getBehaviorByName = function (behname) { var i, len, j, lenj, f, index = 0; if (!this.is_family) { for (i = 0, len = this.families.length; i < len; i++) { f = this.families[i]; for (j = 0, lenj = f.behaviors.length; j < lenj; j++) { if (behname === f.behaviors[j].name) { this.extra.lastBehIndex = index; return f.behaviors[j]; } index++; } } } for (i = 0, len = this.behaviors.length; i < len; i++) { if (behname === this.behaviors[i].name) { this.extra.lastBehIndex = index; return this.behaviors[i]; } index++; } return null; }; cr.type_getBehaviorIndexByName = function (behname) { var b = this.getBehaviorByName(behname); if (b) return this.extra.lastBehIndex; else return -1; }; cr.type_getEffectIndexByName = function (name_) { var i, len; for (i = 0, len = this.effect_types.length; i < len; i++) { if (this.effect_types[i].name === name_) return i; } return -1; }; cr.type_applySolToContainer = function () { if (!this.is_contained || this.is_family) return; var i, len, j, lenj, t, sol, sol2; this.updateIIDs(); sol = this.getCurrentSol(); var select_all = sol.select_all; var es = this.runtime.getCurrentEventStack(); var orblock = es && es.current_event && es.current_event.orblock; for (i = 0, len = this.container.length; i < len; i++) { t = this.container[i]; if (t === this) continue; t.updateIIDs(); sol2 = t.getCurrentSol(); sol2.select_all = select_all; if (!select_all) { sol2.instances.length = sol.instances.length; for (j = 0, lenj = sol.instances.length; j < lenj; j++) sol2.instances[j] = t.getInstanceByIID(sol.instances[j].iid); if (orblock) { sol2.else_instances.length = sol.else_instances.length; for (j = 0, lenj = sol.else_instances.length; j < lenj; j++) sol2.else_instances[j] = t.getInstanceByIID(sol.else_instances[j].iid); } } } }; cr.type_toString = function () { return "Type" + this.sid; }; cr.do_cmp = function (x, cmp, y) { if (typeof x === "undefined" || typeof y === "undefined") return false; switch (cmp) { case 0: // equal return x === y; case 1: // not equal return x !== y; case 2: // less return x < y; case 3: // less/equal return x <= y; case 4: // greater return x > y; case 5: // greater/equal return x >= y; default: ; return false; } }; })(); cr.shaders = {}; ; ; cr.plugins_.Audio = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Audio.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; var audRuntime = null; var audInst = null; var audTag = ""; var appPath = ""; // for PhoneGap only var API_HTML5 = 0; var API_WEBAUDIO = 1; var API_PHONEGAP = 2; var API_APPMOBI = 3; var api = API_HTML5; var context = null; var audioBuffers = []; // cache of buffers var audioInstances = []; // cache of instances var lastAudio = null; var useOgg = false; // determined at create time var timescale_mode = 0; var silent = false; var masterVolume = 1; var listenerX = 0; var listenerY = 0; var panningModel = 1; // HRTF var distanceModel = 1; // Inverse var refDistance = 10; var maxDistance = 10000; var rolloffFactor = 1; var micSource = null; var micTag = ""; var isMusicWorkaround = false; var musicPlayNextTouch = []; function dbToLinear(x) { var v = dbToLinear_nocap(x); if (v < 0) v = 0; if (v > 1) v = 1; return v; }; function linearToDb(x) { if (x < 0) x = 0; if (x > 1) x = 1; return linearToDb_nocap(x); }; function dbToLinear_nocap(x) { return Math.pow(10, x / 20); }; function linearToDb_nocap(x) { return (Math.log(x) / Math.log(10)) * 20; }; var effects = {}; function getDestinationForTag(tag) { tag = tag.toLowerCase(); if (effects.hasOwnProperty(tag)) { if (effects[tag].length) return effects[tag][0].getInputNode(); } return context["destination"]; }; function createGain() { if (context["createGain"]) return context["createGain"](); else return context["createGainNode"](); }; function createDelay(d) { if (context["createDelay"]) return context["createDelay"](d); else return context["createDelayNode"](d); }; function startSource(s) { if (s["start"]) s["start"](0); else s["noteOn"](0); }; function startSourceAt(s, x, d) { if (s["start"]) s["start"](0, x); else s["noteGrainOn"](0, x, d - x); }; function stopSource(s) { try { if (s["stop"]) s["stop"](0); else s["noteOff"](0); } catch (e) {} }; function setAudioParam(ap, value, ramp, time) { if (!ap) return; // iOS is missing some parameters ap["cancelScheduledValues"](0); if (time === 0) { ap["value"] = value; return; } var curTime = context["currentTime"]; time += curTime; switch (ramp) { case 0: // step ap["setValueAtTime"](value, time); break; case 1: // linear ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["linearRampToValueAtTime"](value, time); break; case 2: // exponential ap["setValueAtTime"](ap["value"], curTime); // to set what to ramp from ap["exponentialRampToValueAtTime"](value, time); break; } }; var filterTypes = ["lowpass", "highpass", "bandpass", "lowshelf", "highshelf", "peaking", "notch", "allpass"]; function FilterEffect(type, freq, detune, q, gain, mix) { this.type = "filter"; this.params = [type, freq, detune, q, gain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = type; else this.filterNode["type"] = filterTypes[type]; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.filterNode["gain"]["value"] = gain; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); }; FilterEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; FilterEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; FilterEffect.prototype.getInputNode = function () { return this.inputNode; }; FilterEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 1: // filter frequency this.params[1] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[2] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[3] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 4: // filter/delay gain (note value is in dB here) this.params[4] = value; setAudioParam(this.filterNode["gain"], value, ramp, time); break; } }; function DelayEffect(delayTime, delayGain, mix) { this.type = "delay"; this.params = [delayTime, delayGain, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.mainNode = createGain(); this.delayNode = createDelay(delayTime); this.delayNode["delayTime"]["value"] = delayTime; this.delayGainNode = createGain(); this.delayGainNode["gain"]["value"] = delayGain; this.inputNode["connect"](this.mainNode); this.inputNode["connect"](this.dryNode); this.mainNode["connect"](this.wetNode); this.mainNode["connect"](this.delayNode); this.delayNode["connect"](this.delayGainNode); this.delayGainNode["connect"](this.mainNode); }; DelayEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DelayEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.mainNode["disconnect"](); this.delayNode["disconnect"](); this.delayGainNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DelayEffect.prototype.getInputNode = function () { return this.inputNode; }; DelayEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[2] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 4: // filter/delay gain (note value is passed in dB but needs to be linear here) this.params[1] = dbToLinear(value); setAudioParam(this.delayGainNode["gain"], dbToLinear(value), ramp, time); break; case 5: // delay time this.params[0] = value; setAudioParam(this.delayNode["delayTime"], value, ramp, time); break; } }; function ConvolveEffect(buffer, normalize, mix, src) { this.type = "convolve"; this.params = [normalize, mix, src]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.convolveNode = context["createConvolver"](); if (buffer) { this.convolveNode["normalize"] = normalize; this.convolveNode["buffer"] = buffer; } this.inputNode["connect"](this.convolveNode); this.inputNode["connect"](this.dryNode); this.convolveNode["connect"](this.wetNode); }; ConvolveEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; ConvolveEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.convolveNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; ConvolveEffect.prototype.getInputNode = function () { return this.inputNode; }; ConvolveEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function FlangerEffect(delay, modulation, freq, feedback, mix) { this.type = "flanger"; this.params = [delay, modulation, freq, feedback, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.feedbackNode = createGain(); this.feedbackNode["gain"]["value"] = feedback; this.delayNode = createDelay(delay + modulation); this.delayNode["delayTime"]["value"] = delay; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.delayNode); this.inputNode["connect"](this.dryNode); this.delayNode["connect"](this.wetNode); this.delayNode["connect"](this.feedbackNode); this.feedbackNode["connect"](this.delayNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.delayNode["delayTime"]); startSource(this.oscNode); }; FlangerEffect.prototype.connectTo = function (node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; FlangerEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.delayNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); this.feedbackNode["disconnect"](); }; FlangerEffect.prototype.getInputNode = function () { return this.inputNode; }; FlangerEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 6: // modulation this.params[1] = value / 1000; setAudioParam(this.oscGainNode["gain"], value / 1000, ramp, time); break; case 7: // modulation frequency this.params[2] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; case 8: // feedback this.params[3] = value / 100; setAudioParam(this.feedbackNode["gain"], value / 100, ramp, time); break; } }; function PhaserEffect(freq, detune, q, modulation, modfreq, mix) { this.type = "phaser"; this.params = [freq, detune, q, modulation, modfreq, mix]; this.inputNode = createGain(); this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - (mix / 2); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix / 2; this.filterNode = context["createBiquadFilter"](); if (typeof this.filterNode["type"] === "number") this.filterNode["type"] = 7; // all-pass else this.filterNode["type"] = "allpass"; this.filterNode["frequency"]["value"] = freq; if (this.filterNode["detune"]) // iOS 6 doesn't have detune yet this.filterNode["detune"]["value"] = detune; this.filterNode["Q"]["value"] = q; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = modfreq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = modulation; this.inputNode["connect"](this.filterNode); this.inputNode["connect"](this.dryNode); this.filterNode["connect"](this.wetNode); this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.filterNode["frequency"]); startSource(this.oscNode); }; PhaserEffect.prototype.connectTo = function (node) { this.dryNode["disconnect"](); this.dryNode["connect"](node); this.wetNode["disconnect"](); this.wetNode["connect"](node); }; PhaserEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.filterNode["disconnect"](); this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.dryNode["disconnect"](); this.wetNode["disconnect"](); }; PhaserEffect.prototype.getInputNode = function () { return this.inputNode; }; PhaserEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[5] = value; setAudioParam(this.wetNode["gain"], value / 2, ramp, time); setAudioParam(this.dryNode["gain"], 1 - (value / 2), ramp, time); break; case 1: // filter frequency this.params[0] = value; setAudioParam(this.filterNode["frequency"], value, ramp, time); break; case 2: // filter detune this.params[1] = value; setAudioParam(this.filterNode["detune"], value, ramp, time); break; case 3: // filter Q this.params[2] = value; setAudioParam(this.filterNode["Q"], value, ramp, time); break; case 6: // modulation this.params[3] = value; setAudioParam(this.oscGainNode["gain"], value, ramp, time); break; case 7: // modulation frequency this.params[4] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function GainEffect(g) { this.type = "gain"; this.params = [g]; this.node = createGain(); this.node["gain"]["value"] = g; }; GainEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; GainEffect.prototype.remove = function () { this.node["disconnect"](); }; GainEffect.prototype.getInputNode = function () { return this.node; }; GainEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 4: // gain this.params[0] = dbToLinear(value); setAudioParam(this.node["gain"], dbToLinear(value), ramp, time); break; } }; function TremoloEffect(freq, mix) { this.type = "tremolo"; this.params = [freq, mix]; this.node = createGain(); this.node["gain"]["value"] = 1 - (mix / 2); this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscGainNode = createGain(); this.oscGainNode["gain"]["value"] = mix / 2; this.oscNode["connect"](this.oscGainNode); this.oscGainNode["connect"](this.node["gain"]); startSource(this.oscNode); }; TremoloEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; TremoloEffect.prototype.remove = function () { this.oscNode["disconnect"](); this.oscGainNode["disconnect"](); this.node["disconnect"](); }; TremoloEffect.prototype.getInputNode = function () { return this.node; }; TremoloEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.node["gain"]["value"], 1 - (value / 2), ramp, time); setAudioParam(this.oscGainNode["gain"]["value"], value / 2, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function RingModulatorEffect(freq, mix) { this.type = "ringmod"; this.params = [freq, mix]; this.inputNode = createGain(); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.ringNode = createGain(); this.ringNode["gain"]["value"] = 0; this.oscNode = context["createOscillator"](); this.oscNode["frequency"]["value"] = freq; this.oscNode["connect"](this.ringNode["gain"]); startSource(this.oscNode); this.inputNode["connect"](this.ringNode); this.inputNode["connect"](this.dryNode); this.ringNode["connect"](this.wetNode); }; RingModulatorEffect.prototype.connectTo = function (node_) { this.wetNode["disconnect"](); this.wetNode["connect"](node_); this.dryNode["disconnect"](); this.dryNode["connect"](node_); }; RingModulatorEffect.prototype.remove = function () { this.oscNode["disconnect"](); this.ringNode["disconnect"](); this.inputNode["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; RingModulatorEffect.prototype.getInputNode = function () { return this.inputNode; }; RingModulatorEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[1] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; case 7: // modulation frequency this.params[0] = value; setAudioParam(this.oscNode["frequency"], value, ramp, time); break; } }; function DistortionEffect(threshold, headroom, drive, makeupgain, mix) { this.type = "distortion"; this.params = [threshold, headroom, drive, makeupgain, mix]; this.inputNode = createGain(); this.preGain = createGain(); this.postGain = createGain(); this.setDrive(drive, dbToLinear_nocap(makeupgain)); this.wetNode = createGain(); this.wetNode["gain"]["value"] = mix; this.dryNode = createGain(); this.dryNode["gain"]["value"] = 1 - mix; this.waveShaper = context["createWaveShaper"](); this.curve = new Float32Array(65536); this.generateColortouchCurve(threshold, headroom); this.waveShaper.curve = this.curve; this.inputNode["connect"](this.preGain); this.inputNode["connect"](this.dryNode); this.preGain["connect"](this.waveShaper); this.waveShaper["connect"](this.postGain); this.postGain["connect"](this.wetNode); }; DistortionEffect.prototype.setDrive = function (drive, makeupgain) { if (drive < 0.01) drive = 0.01; this.preGain["gain"]["value"] = drive; this.postGain["gain"]["value"] = Math.pow(1 / drive, 0.6) * makeupgain; }; function e4(x, k) { return 1.0 - Math.exp(-k * x); } DistortionEffect.prototype.shape = function (x, linearThreshold, linearHeadroom) { var maximum = 1.05 * linearHeadroom * linearThreshold; var kk = (maximum - linearThreshold); var sign = x < 0 ? -1 : +1; var absx = x < 0 ? -x : x; var shapedInput = absx < linearThreshold ? absx : linearThreshold + kk * e4(absx - linearThreshold, 1.0 / kk); shapedInput *= sign; return shapedInput; }; DistortionEffect.prototype.generateColortouchCurve = function (threshold, headroom) { var linearThreshold = dbToLinear_nocap(threshold); var linearHeadroom = dbToLinear_nocap(headroom); var n = 65536; var n2 = n / 2; var x = 0; for (var i = 0; i < n2; ++i) { x = i / n2; x = this.shape(x, linearThreshold, linearHeadroom); this.curve[n2 + i] = x; this.curve[n2 - i - 1] = -x; } }; DistortionEffect.prototype.connectTo = function (node) { this.wetNode["disconnect"](); this.wetNode["connect"](node); this.dryNode["disconnect"](); this.dryNode["connect"](node); }; DistortionEffect.prototype.remove = function () { this.inputNode["disconnect"](); this.preGain["disconnect"](); this.waveShaper["disconnect"](); this.postGain["disconnect"](); this.wetNode["disconnect"](); this.dryNode["disconnect"](); }; DistortionEffect.prototype.getInputNode = function () { return this.inputNode; }; DistortionEffect.prototype.setParam = function(param, value, ramp, time) { switch (param) { case 0: // mix value = value / 100; if (value < 0) value = 0; if (value > 1) value = 1; this.params[4] = value; setAudioParam(this.wetNode["gain"], value, ramp, time); setAudioParam(this.dryNode["gain"], 1 - value, ramp, time); break; } }; function CompressorEffect(threshold, knee, ratio, attack, release) { this.type = "compressor"; this.params = [threshold, knee, ratio, attack, release]; this.node = context["createDynamicsCompressor"](); try { this.node["threshold"]["value"] = threshold; this.node["knee"]["value"] = knee; this.node["ratio"]["value"] = ratio; this.node["attack"]["value"] = attack; this.node["release"]["value"] = release; } catch (e) {} }; CompressorEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; CompressorEffect.prototype.remove = function () { this.node["disconnect"](); }; CompressorEffect.prototype.getInputNode = function () { return this.node; }; CompressorEffect.prototype.setParam = function(param, value, ramp, time) { }; function AnalyserEffect(fftSize, smoothing) { this.type = "analyser"; this.params = [fftSize, smoothing]; this.node = context["createAnalyser"](); this.node["fftSize"] = fftSize; this.node["smoothingTimeConstant"] = smoothing; this.freqBins = new Float32Array(this.node["frequencyBinCount"]); this.signal = new Uint8Array(fftSize); this.peak = 0; this.rms = 0; }; AnalyserEffect.prototype.tick = function () { this.node["getFloatFrequencyData"](this.freqBins); this.node["getByteTimeDomainData"](this.signal); var fftSize = this.node["fftSize"]; var i = 0; this.peak = 0; var rmsSquaredSum = 0; var s = 0; for ( ; i < fftSize; i++) { s = (this.signal[i] - 128) / 128; if (s < 0) s = -s; if (this.peak < s) this.peak = s; rmsSquaredSum += s * s; } this.peak = linearToDb(this.peak); this.rms = linearToDb(Math.sqrt(rmsSquaredSum / fftSize)); }; AnalyserEffect.prototype.connectTo = function (node_) { this.node["disconnect"](); this.node["connect"](node_); }; AnalyserEffect.prototype.remove = function () { this.node["disconnect"](); }; AnalyserEffect.prototype.getInputNode = function () { return this.node; }; AnalyserEffect.prototype.setParam = function(param, value, ramp, time) { }; var OT_POS_SAMPLES = 4; function ObjectTracker() { this.obj = null; this.loadUid = 0; this.speeds = []; this.lastX = 0; this.lastY = 0; this.moveAngle = 0; }; ObjectTracker.prototype.setObject = function (obj_) { this.obj = obj_; if (this.obj) { this.lastX = this.obj.x; this.lastY = this.obj.y; } this.speeds.length = 0; }; ObjectTracker.prototype.hasObject = function () { return !!this.obj; }; ObjectTracker.prototype.tick = function (dt) { if (!this.obj || dt === 0) return; this.moveAngle = cr.angleTo(this.lastX, this.lastY, this.obj.x, this.obj.y); var s = cr.distanceTo(this.lastX, this.lastY, this.obj.x, this.obj.y) / dt; if (this.speeds.length < OT_POS_SAMPLES) this.speeds.push(s); else { this.speeds.shift(); this.speeds.push(s); } this.lastX = this.obj.x; this.lastY = this.obj.y; }; ObjectTracker.prototype.getSpeed = function () { if (!this.speeds.length) return 0; var i, len, sum = 0; for (i = 0, len = this.speeds.length; i < len; i++) { sum += this.speeds[i]; } return sum / this.speeds.length; }; ObjectTracker.prototype.getVelocityX = function () { return Math.cos(this.moveAngle) * this.getSpeed(); }; ObjectTracker.prototype.getVelocityY = function () { return Math.sin(this.moveAngle) * this.getSpeed(); }; var iOShadtouch = false; // has had touch input on iOS to work around web audio API muting function C2AudioBuffer(src_, is_music) { this.src = src_; this.myapi = api; this.is_music = is_music; this.added_end_listener = false; var self = this; this.outNode = null; this.mediaSourceNode = null; this.panWhenReady = []; // for web audio API positioned sounds this.seekWhenReady = 0; this.pauseWhenReady = false; this.supportWebAudioAPI = false; this.failedToLoad = false; if (api === API_WEBAUDIO && is_music) { this.myapi = API_HTML5; this.outNode = createGain(); } this.bufferObject = null; // actual audio object this.audioData = null; // web audio api: ajax request result (compressed audio that needs decoding) var request; switch (this.myapi) { case API_HTML5: this.bufferObject = new Audio(); if (api === API_WEBAUDIO && context["createMediaElementSource"] && !audRuntime.isFirefox && !/wiiu/i.test(navigator.userAgent)) { this.supportWebAudioAPI = true; // can be routed through web audio api this.bufferObject.addEventListener("canplay", function () { if (!self.mediaSourceNode) // protect against this event firing twice { self.mediaSourceNode = context["createMediaElementSource"](self.bufferObject); self.mediaSourceNode["connect"](self.outNode); } }); } this.bufferObject.autoplay = false; // this is only a source buffer, not an instance this.bufferObject.preload = "auto"; this.bufferObject.src = src_; break; case API_WEBAUDIO: request = new XMLHttpRequest(); request.open("GET", src_, true); request.responseType = "arraybuffer"; request.onload = function () { self.audioData = request.response; self.decodeAudioBuffer(); }; request.onerror = function () { self.failedToLoad = true; }; request.send(); break; case API_PHONEGAP: this.bufferObject = true; break; case API_APPMOBI: this.bufferObject = true; break; } }; C2AudioBuffer.prototype.decodeAudioBuffer = function () { if (this.bufferObject || !this.audioData) return; // audio already decoded or AJAX request not yet complete var self = this; if (context["decodeAudioData"]) { context["decodeAudioData"](this.audioData, function (buffer) { self.bufferObject = buffer; var p, i, len, a; if (!cr.is_undefined(self.playTagWhenReady) && !silent) { if (self.panWhenReady.length) { for (i = 0, len = self.panWhenReady.length; i < len; i++) { p = self.panWhenReady[i]; a = new C2AudioInstance(self, p.thistag); a.setPannerEnabled(true); if (typeof p.objUid !== "undefined") { p.obj = audRuntime.getObjectByUID(p.objUid); if (!p.obj) continue; } if (p.obj) { var px = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(p.obj.x, p.obj.y, -p.obj.layer.getAngle(), listenerX, listenerY, false); a.setPan(px, py, cr.to_degrees(p.obj.angle - p.obj.layer.getAngle()), p.ia, p.oa, p.og); a.setObject(p.obj); } else { a.setPan(p.x, p.y, p.a, p.ia, p.oa, p.og); } a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } self.panWhenReady.length = 0; } else { a = new C2AudioInstance(self, self.playTagWhenReady); a.play(self.loopWhenReady, self.volumeWhenReady, self.seekWhenReady); if (self.pauseWhenReady) a.pause(); audioInstances.push(a); } } else if (!cr.is_undefined(self.convolveWhenReady)) { var convolveNode = self.convolveWhenReady.convolveNode; convolveNode["normalize"] = self.normalizeWhenReady; convolveNode["buffer"] = buffer; } }, function (e) { self.failedToLoad = true; }); } else { this.bufferObject = context["createBuffer"](this.audioData, false); if (!cr.is_undefined(this.playTagWhenReady) && !silent) { var a = new C2AudioInstance(this, this.playTagWhenReady); a.play(this.loopWhenReady, this.volumeWhenReady, this.seekWhenReady); if (this.pauseWhenReady) a.pause(); audioInstances.push(a); } else if (!cr.is_undefined(this.convolveWhenReady)) { var convolveNode = this.convolveWhenReady.convolveNode; convolveNode["normalize"] = this.normalizeWhenReady; convolveNode["buffer"] = this.bufferObject; } } }; C2AudioBuffer.prototype.isLoaded = function () { switch (this.myapi) { case API_HTML5: return this.bufferObject["readyState"] >= 4; // HAVE_ENOUGH_DATA case API_WEBAUDIO: return !!this.audioData; // null until AJAX request completes case API_PHONEGAP: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.isLoadedAndDecoded = function () { switch (this.myapi) { case API_HTML5: return this.bufferObject["readyState"] >= 4; // HAVE_ENOUGH_DATA case API_WEBAUDIO: return !!this.audioData && !!this.bufferObject; case API_PHONEGAP: return true; case API_APPMOBI: return true; } return false; }; C2AudioBuffer.prototype.hasFailedToLoad = function () { switch (this.myapi) { case API_HTML5: return !!this.bufferObject["error"]; case API_WEBAUDIO: return this.failedToLoad; } return false; }; function C2AudioInstance(buffer_, tag_) { var self = this; this.tag = tag_; this.fresh = true; this.stopped = true; this.src = buffer_.src; this.buffer = buffer_; this.myapi = api; this.is_music = buffer_.is_music; this.playbackRate = 1; this.pgended = true; // for PhoneGap only: ended flag this.resume_me = false; // make sure resumes when leaving suspend this.is_paused = false; this.resume_position = 0; // for web audio api to resume from correct playback position this.looping = false; this.is_muted = false; this.is_silent = false; this.volume = 1; this.mutevol = 1; this.startTime = audRuntime.kahanTime.sum; this.gainNode = null; this.pannerNode = null; this.pannerEnabled = false; this.objectTracker = null; this.panX = 0; this.panY = 0; this.panAngle = 0; this.panConeInner = 0; this.panConeOuter = 0; this.panConeOuterGain = 0; this.instanceObject = null; var add_end_listener = false; if (this.myapi === API_WEBAUDIO && this.buffer.myapi === API_HTML5 && !this.buffer.supportWebAudioAPI) this.myapi = API_HTML5; switch (this.myapi) { case API_HTML5: if (this.is_music) { this.instanceObject = buffer_.bufferObject; add_end_listener = !buffer_.added_end_listener; buffer_.added_end_listener = true; } else { this.instanceObject = new Audio(); this.instanceObject.autoplay = false; this.instanceObject.src = buffer_.bufferObject.src; add_end_listener = true; } if (add_end_listener) { this.instanceObject.addEventListener('ended', function () { audTag = self.tag; self.stopped = true; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); }); } break; case API_WEBAUDIO: this.gainNode = createGain(); this.gainNode["connect"](getDestinationForTag(tag_)); if (this.buffer.myapi === API_WEBAUDIO) { if (buffer_.bufferObject) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = buffer_.bufferObject; this.instanceObject["connect"](this.gainNode); } } else { this.instanceObject = this.buffer.bufferObject; // reference the audio element this.buffer.outNode["connect"](this.gainNode); } break; case API_PHONEGAP: this.instanceObject = new window["Media"](appPath + this.src, null, null, function (status) { if (status === window["Media"]["MEDIA_STOPPED"]) { self.pgended = true; self.stopped = true; audTag = self.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); } }); break; case API_APPMOBI: this.instanceObject = true; break; } }; C2AudioInstance.prototype.hasEnded = function () { switch (this.myapi) { case API_HTML5: return this.instanceObject.ended; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (!this.fresh && !this.stopped && this.instanceObject["loop"]) return false; if (this.is_paused) return false; return (audRuntime.kahanTime.sum - this.startTime) > this.buffer.bufferObject["duration"]; } else return this.instanceObject.ended; case API_PHONEGAP: return this.pgended; case API_APPMOBI: true; // recycling an AppMobi sound does not matter because it will just do another throwaway playSound } return true; }; C2AudioInstance.prototype.canBeRecycled = function () { if (this.fresh || this.stopped) return true; // not yet used or is not playing return this.hasEnded(); }; C2AudioInstance.prototype.setPannerEnabled = function (enable_) { if (api !== API_WEBAUDIO) return; if (!this.pannerEnabled && enable_) { if (!this.gainNode) return; if (!this.pannerNode) { this.pannerNode = context["createPanner"](); if (typeof this.pannerNode["panningModel"] === "number") this.pannerNode["panningModel"] = panningModel; else this.pannerNode["panningModel"] = ["equalpower", "HRTF", "soundfield"][panningModel]; if (typeof this.pannerNode["distanceModel"] === "number") this.pannerNode["distanceModel"] = distanceModel; else this.pannerNode["distanceModel"] = ["linear", "inverse", "exponential"][distanceModel]; this.pannerNode["refDistance"] = refDistance; this.pannerNode["maxDistance"] = maxDistance; this.pannerNode["rolloffFactor"] = rolloffFactor; } this.gainNode["disconnect"](); this.gainNode["connect"](this.pannerNode); this.pannerNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = true; } else if (this.pannerEnabled && !enable_) { if (!this.gainNode) return; this.pannerNode["disconnect"](); this.gainNode["disconnect"](); this.gainNode["connect"](getDestinationForTag(this.tag)); this.pannerEnabled = false; } }; C2AudioInstance.prototype.setPan = function (x, y, angle, innerangle, outerangle, outergain) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; this.pannerNode["setPosition"](x, y, 0); this.pannerNode["setOrientation"](Math.cos(cr.to_radians(angle)), Math.sin(cr.to_radians(angle)), 0); this.pannerNode["coneInnerAngle"] = innerangle; this.pannerNode["coneOuterAngle"] = outerangle; this.pannerNode["coneOuterGain"] = outergain; this.panX = x; this.panY = y; this.panAngle = angle; this.panConeInner = innerangle; this.panConeOuter = outerangle; this.panConeOuterGain = outergain; }; C2AudioInstance.prototype.setObject = function (o) { if (!this.pannerEnabled || api !== API_WEBAUDIO) return; if (!this.objectTracker) this.objectTracker = new ObjectTracker(); this.objectTracker.setObject(o); }; C2AudioInstance.prototype.tick = function (dt) { if (!this.pannerEnabled || api !== API_WEBAUDIO || !this.objectTracker || !this.objectTracker.hasObject() || !this.isPlaying()) { return; } this.objectTracker.tick(dt); var inst = this.objectTracker.obj; var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); this.pannerNode["setPosition"](px, py, 0); var a = 0; if (typeof this.objectTracker.obj.angle !== "undefined") { a = inst.angle - inst.layer.getAngle(); this.pannerNode["setOrientation"](Math.cos(a), Math.sin(a), 0); } px = cr.rotatePtAround(this.objectTracker.getVelocityX(), this.objectTracker.getVelocityY(), -inst.layer.getAngle(), 0, 0, true); py = cr.rotatePtAround(this.objectTracker.getVelocityX(), this.objectTracker.getVelocityY(), -inst.layer.getAngle(), 0, 0, false); this.pannerNode["setVelocity"](px, py, 0); }; C2AudioInstance.prototype.play = function (looping, vol, fromPosition) { var instobj = this.instanceObject; this.looping = looping; this.volume = vol; var seekPos = fromPosition || 0; switch (this.myapi) { case API_HTML5: if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.volume !== vol * masterVolume) instobj.volume = vol * masterVolume; if (instobj.loop !== looping) instobj.loop = looping; if (instobj.muted) instobj.muted = false; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) { ; } } if (this.is_music && isMusicWorkaround && !audRuntime.isInUserInputEvent) musicPlayNextTouch.push(this); else { try { this.instanceObject.play(); } catch (e) {} // sometimes throws on WP8.1... try not to kill the app } break; case API_WEBAUDIO: this.muted = false; this.mutevol = 1; if (this.buffer.myapi === API_WEBAUDIO) { if (!this.fresh) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); } this.instanceObject.loop = looping; this.gainNode["gain"]["value"] = vol * masterVolume; if (seekPos === 0) startSource(this.instanceObject); else startSourceAt(this.instanceObject, seekPos, this.getDuration()); } else { if (instobj.playbackRate !== 1.0) instobj.playbackRate = 1.0; if (instobj.loop !== looping) instobj.loop = looping; this.gainNode["gain"]["value"] = vol * masterVolume; if (instobj.currentTime !== seekPos) { try { instobj.currentTime = seekPos; } catch (err) { ; } } if (this.is_music && isMusicWorkaround && !audRuntime.isInUserInputEvent) musicPlayNextTouch.push(this); else instobj.play(); } break; case API_PHONEGAP: if ((!this.fresh && this.stopped) || seekPos !== 0) instobj["seekTo"](seekPos); instobj["play"](); this.pgended = false; break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["playSound"](this.src, looping); else AppMobi["player"]["playSound"](this.src, looping); break; } this.playbackRate = 1; this.startTime = audRuntime.kahanTime.sum - seekPos; this.fresh = false; this.stopped = false; this.is_paused = false; }; C2AudioInstance.prototype.stop = function () { switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) stopSource(this.instanceObject); else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_PHONEGAP: this.instanceObject["stop"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.stopped = true; this.is_paused = false; }; C2AudioInstance.prototype.pause = function () { if (this.fresh || this.stopped || this.hasEnded() || this.is_paused) return; switch (this.myapi) { case API_HTML5: if (!this.instanceObject.paused) this.instanceObject.pause(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); stopSource(this.instanceObject); } else { if (!this.instanceObject.paused) this.instanceObject.pause(); } break; case API_PHONEGAP: this.instanceObject["pause"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["stopSound"](this.src); break; } this.is_paused = true; }; C2AudioInstance.prototype.resume = function () { if (this.fresh || this.stopped || this.hasEnded() || !this.is_paused) return; switch (this.myapi) { case API_HTML5: this.instanceObject.play(); break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.startTime = audRuntime.kahanTime.sum - this.resume_position; startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject.play(); } break; case API_PHONEGAP: this.instanceObject["play"](); break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["resumeSound"](this.src); break; } this.is_paused = false; }; C2AudioInstance.prototype.seek = function (pos) { if (this.fresh || this.stopped || this.hasEnded()) return; switch (this.myapi) { case API_HTML5: try { this.instanceObject.currentTime = pos; } catch (e) {} break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) this.resume_position = pos; else { this.pause(); this.resume_position = pos; this.resume(); } } else { try { this.instanceObject.currentTime = pos; } catch (e) {} } break; case API_PHONEGAP: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["seekSound"](this.src, pos); break; } }; C2AudioInstance.prototype.reconnect = function (toNode) { if (this.myapi !== API_WEBAUDIO) return; if (this.pannerEnabled) { this.pannerNode["disconnect"](); this.pannerNode["connect"](toNode); } else { this.gainNode["disconnect"](); this.gainNode["connect"](toNode); } }; C2AudioInstance.prototype.getDuration = function () { switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.duration !== "undefined") return this.instanceObject.duration; else return 0; case API_WEBAUDIO: return this.buffer.bufferObject["duration"]; case API_PHONEGAP: return this.instanceObject["getDuration"](); case API_APPMOBI: if (audRuntime.isDirectCanvas) return AppMobi["context"]["getDurationSound"](this.src); else return 0; } return 0; }; C2AudioInstance.prototype.getPlaybackTime = function () { var duration = this.getDuration(); var ret = 0; switch (this.myapi) { case API_HTML5: if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.is_paused) return this.resume_position; else ret = audRuntime.kahanTime.sum - this.startTime; } else if (typeof this.instanceObject.currentTime !== "undefined") ret = this.instanceObject.currentTime; break; case API_PHONEGAP: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) ret = AppMobi["context"]["getPlaybackTimeSound"](this.src); break; } if (!this.looping && ret > duration) ret = duration; return ret; }; C2AudioInstance.prototype.isPlaying = function () { return !this.is_paused && !this.fresh && !this.stopped && !this.hasEnded(); }; C2AudioInstance.prototype.setVolume = function (v) { this.volume = v; this.updateVolume(); }; C2AudioInstance.prototype.updateVolume = function () { var volToSet = this.volume * masterVolume; switch (this.myapi) { case API_HTML5: if (this.instanceObject.volume && this.instanceObject.volume !== volToSet) this.instanceObject.volume = volToSet; break; case API_WEBAUDIO: this.gainNode["gain"]["value"] = volToSet * this.mutevol; break; case API_PHONEGAP: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.getVolume = function () { return this.volume; }; C2AudioInstance.prototype.doSetMuted = function (m) { switch (this.myapi) { case API_HTML5: if (this.instanceObject.muted !== !!m) this.instanceObject.muted = !!m; break; case API_WEBAUDIO: this.mutevol = (m ? 0 : 1); this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; break; case API_PHONEGAP: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setMuted = function (m) { this.is_muted = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setSilent = function (m) { this.is_silent = !!m; this.doSetMuted(this.is_muted || this.is_silent); }; C2AudioInstance.prototype.setLooping = function (l) { this.looping = l; switch (this.myapi) { case API_HTML5: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_WEBAUDIO: if (this.instanceObject.loop !== !!l) this.instanceObject.loop = !!l; break; case API_PHONEGAP: break; case API_APPMOBI: if (audRuntime.isDirectCanvas) AppMobi["context"]["setLoopingSound"](this.src, l); break; } }; C2AudioInstance.prototype.setPlaybackRate = function (r) { this.playbackRate = r; this.updatePlaybackRate(); }; C2AudioInstance.prototype.updatePlaybackRate = function () { var r = this.playbackRate; if ((timescale_mode === 1 && !this.is_music) || timescale_mode === 2) r *= audRuntime.timescale; switch (this.myapi) { case API_HTML5: if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; break; case API_WEBAUDIO: if (this.buffer.myapi === API_WEBAUDIO) { if (this.instanceObject["playbackRate"]["value"] !== r) this.instanceObject["playbackRate"]["value"] = r; } else { if (this.instanceObject.playbackRate !== r) this.instanceObject.playbackRate = r; } break; case API_PHONEGAP: break; case API_APPMOBI: break; } }; C2AudioInstance.prototype.setSuspended = function (s) { switch (this.myapi) { case API_HTML5: if (s) { if (this.isPlaying()) { this.instanceObject["pause"](); this.resume_me = true; } else this.resume_me = false; } else { if (this.resume_me) this.instanceObject["play"](); } break; case API_WEBAUDIO: if (s) { if (this.isPlaying()) { if (this.buffer.myapi === API_WEBAUDIO) { this.resume_position = this.getPlaybackTime(); if (this.looping) this.resume_position = this.resume_position % this.getDuration(); stopSource(this.instanceObject); } else this.instanceObject["pause"](); this.resume_me = true; } else this.resume_me = false; } else { if (this.resume_me) { if (this.buffer.myapi === API_WEBAUDIO) { this.instanceObject = context["createBufferSource"](); this.instanceObject["buffer"] = this.buffer.bufferObject; this.instanceObject["connect"](this.gainNode); this.instanceObject.loop = this.looping; this.gainNode["gain"]["value"] = masterVolume * this.volume * this.mutevol; this.startTime = audRuntime.kahanTime.sum - this.resume_position; startSourceAt(this.instanceObject, this.resume_position, this.getDuration()); } else { this.instanceObject["play"](); } } } break; case API_PHONEGAP: if (s) { if (this.isPlaying()) { this.instanceObject["pause"](); this.resume_me = true; } else this.resume_me = false; } else { if (this.resume_me) this.instanceObject["play"](); } break; case API_APPMOBI: break; } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; audRuntime = this.runtime; audInst = this; this.listenerTracker = null; this.listenerZ = -600; if ((this.runtime.isiOS || (this.runtime.isAndroid && (this.runtime.isChrome || this.runtime.isAndroidStockBrowser))) && !this.runtime.isCrosswalk && !this.runtime.isDomFree) { isMusicWorkaround = true; } context = null; if (typeof AudioContext !== "undefined") { api = API_WEBAUDIO; context = new AudioContext(); } else if (typeof webkitAudioContext !== "undefined") { api = API_WEBAUDIO; context = new webkitAudioContext(); } if ((this.runtime.isiOS && api === API_WEBAUDIO) || isMusicWorkaround) { document.addEventListener("touchstart", function () { var i, len, m; if (!iOShadtouch && context) { var buffer = context["createBuffer"](1, 1, 22050); var source = context["createBufferSource"](); source["buffer"] = buffer; source["connect"](context["destination"]); startSource(source); iOShadtouch = true; } if (isMusicWorkaround) { if (!silent) { for (i = 0, len = musicPlayNextTouch.length; i < len; ++i) { m = musicPlayNextTouch[i]; if (!m.stopped && !m.is_paused) m.instanceObject.play(); } } musicPlayNextTouch.length = 0; } }, true); } if (api !== API_WEBAUDIO) { if (this.runtime.isPhoneGap && typeof window["Media"] !== "undefined") api = API_PHONEGAP; else if (this.runtime.isAppMobi) api = API_APPMOBI; } if (api === API_PHONEGAP) { appPath = location.href; var i = appPath.lastIndexOf("/"); if (i > -1) appPath = appPath.substr(0, i + 1); appPath = appPath.replace("file://", ""); } if (this.runtime.isSafari && this.runtime.isWindows && typeof Audio === "undefined") { alert("It looks like you're using Safari for Windows without Quicktime. Audio cannot be played until Quicktime is installed."); this.runtime.DestroyInstance(this); } else { if (this.runtime.isDirectCanvas) useOgg = this.runtime.isAndroid; // AAC on iOS, OGG on Android else { try { useOgg = !!(new Audio().canPlayType('audio/ogg; codecs="vorbis"')); } catch (e) { useOgg = false; } } switch (api) { case API_HTML5: ; break; case API_WEBAUDIO: ; break; case API_PHONEGAP: ; break; case API_APPMOBI: ; break; default: ; } this.runtime.tickMe(this); } }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function () { this.runtime.audioInstance = this; timescale_mode = this.properties[0]; // 0 = off, 1 = sounds only, 2 = all this.saveload = this.properties[1]; // 0 = all, 1 = sounds only, 2 = music only, 3 = none panningModel = this.properties[2]; // 0 = equalpower, 1 = hrtf, 3 = soundfield distanceModel = this.properties[3]; // 0 = linear, 1 = inverse, 2 = exponential this.listenerZ = -this.properties[4]; refDistance = this.properties[5]; maxDistance = this.properties[6]; rolloffFactor = this.properties[7]; this.listenerTracker = new ObjectTracker(); if (api === API_WEBAUDIO) { context["listener"]["speedOfSound"] = this.properties[8]; context["listener"]["dopplerFactor"] = this.properties[9]; context["listener"]["setPosition"](this.runtime.draw_width / 2, this.runtime.draw_height / 2, this.listenerZ); context["listener"]["setOrientation"](0, 0, 1, 0, -1, 0); window["c2OnAudioMicStream"] = function (localMediaStream, tag) { if (micSource) micSource["disconnect"](); micTag = tag.toLowerCase(); micSource = context["createMediaStreamSource"](localMediaStream); micSource["connect"](getDestinationForTag(micTag)); }; } this.runtime.addSuspendCallback(function(s) { audInst.onSuspend(s); }); var self = this; this.runtime.addDestroyCallback(function (inst) { self.onInstanceDestroyed(inst); }); }; instanceProto.onInstanceDestroyed = function (inst) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.objectTracker) { if (a.objectTracker.obj === inst) { a.objectTracker.obj = null; if (a.pannerEnabled && a.isPlaying() && a.looping) a.stop(); } } } if (this.listenerTracker.obj === inst) this.listenerTracker.obj = null; }; instanceProto.saveToJSON = function () { var o = { "silent": silent, "masterVolume": masterVolume, "listenerZ": this.listenerZ, "listenerUid": this.listenerTracker.hasObject() ? this.listenerTracker.obj.uid : -1, "playing": [], "effects": {} }; var playingarr = o["playing"]; var i, len, a, d, p, panobj, playbackTime; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (!a.isPlaying()) continue; // no need to save stopped sounds if (this.saveload === 3) // not saving/loading any sounds/music continue; if (a.is_music && this.saveload === 1) // not saving/loading music continue; if (!a.is_music && this.saveload === 2) // not saving/loading sound continue; playbackTime = a.getPlaybackTime(); if (a.looping) playbackTime = playbackTime % a.getDuration(); d = { "tag": a.tag, "buffersrc": a.buffer.src, "is_music": a.is_music, "playbackTime": playbackTime, "volume": a.volume, "looping": a.looping, "muted": a.is_muted, "playbackRate": a.playbackRate, "paused": a.is_paused, "resume_position": a.resume_position }; if (a.pannerEnabled) { d["pan"] = {}; panobj = d["pan"]; if (a.objectTracker && a.objectTracker.hasObject()) { panobj["objUid"] = a.objectTracker.obj.uid; } else { panobj["x"] = a.panX; panobj["y"] = a.panY; panobj["a"] = a.panAngle; } panobj["ia"] = a.panConeInner; panobj["oa"] = a.panConeOuter; panobj["og"] = a.panConeOuterGain; } playingarr.push(d); } var fxobj = o["effects"]; var fxarr; for (p in effects) { if (effects.hasOwnProperty(p)) { fxarr = []; for (i = 0, len = effects[p].length; i < len; i++) { fxarr.push({ "type": effects[p][i].type, "params": effects[p][i].params }); } fxobj[p] = fxarr; } } return o; }; var objectTrackerUidsToLoad = []; instanceProto.loadFromJSON = function (o) { var setSilent = o["silent"]; masterVolume = o["masterVolume"]; this.listenerZ = o["listenerZ"]; this.listenerTracker.setObject(null); var listenerUid = o["listenerUid"]; if (listenerUid !== -1) { this.listenerTracker.loadUid = listenerUid; objectTrackerUidsToLoad.push(this.listenerTracker); } var playingarr = o["playing"]; var i, len, d, src, is_music, tag, playbackTime, looping, vol, b, a, p, pan, panObjUid; if (this.saveload !== 3) { for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.is_music && this.saveload === 1) continue; // only saving/loading sound: leave music playing if (!a.is_music && this.saveload === 2) continue; // only saving/loading music: leave sound playing a.stop(); } } var fxarr, fxtype, fxparams, fx; for (p in effects) { if (effects.hasOwnProperty(p)) { for (i = 0, len = effects[p].length; i < len; i++) effects[p][i].remove(); } } cr.wipe(effects); for (p in o["effects"]) { if (o["effects"].hasOwnProperty(p)) { fxarr = o["effects"][p]; for (i = 0, len = fxarr.length; i < len; i++) { fxtype = fxarr[i]["type"]; fxparams = fxarr[i]["params"]; switch (fxtype) { case "filter": addEffectForTag(p, new FilterEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "delay": addEffectForTag(p, new DelayEffect(fxparams[0], fxparams[1], fxparams[2])); break; case "convolve": src = fxparams[2]; b = this.getAudioBuffer(src, false); if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, fxparams[0], fxparams[1], src); } else { fx = new ConvolveEffect(null, fxparams[0], fxparams[1], src); b.normalizeWhenReady = fxparams[0]; b.convolveWhenReady = fx; } addEffectForTag(p, fx); break; case "flanger": addEffectForTag(p, new FlangerEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "phaser": addEffectForTag(p, new PhaserEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4], fxparams[5])); break; case "gain": addEffectForTag(p, new GainEffect(fxparams[0])); break; case "tremolo": addEffectForTag(p, new TremoloEffect(fxparams[0], fxparams[1])); break; case "ringmod": addEffectForTag(p, new RingModulatorEffect(fxparams[0], fxparams[1])); break; case "distortion": addEffectForTag(p, new DistortionEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "compressor": addEffectForTag(p, new CompressorEffect(fxparams[0], fxparams[1], fxparams[2], fxparams[3], fxparams[4])); break; case "analyser": addEffectForTag(p, new AnalyserEffect(fxparams[0], fxparams[1])); break; } } } } for (i = 0, len = playingarr.length; i < len; i++) { if (this.saveload === 3) // not saving/loading any sounds/music continue; d = playingarr[i]; src = d["buffersrc"]; is_music = d["is_music"]; tag = d["tag"]; playbackTime = d["playbackTime"]; looping = d["looping"]; vol = d["volume"]; pan = d["pan"]; panObjUid = (pan && pan.hasOwnProperty("objUid")) ? pan["objUid"] : -1; if (is_music && this.saveload === 1) // not saving/loading music continue; if (!is_music && this.saveload === 2) // not saving/loading sound continue; a = this.getAudioInstance(src, tag, is_music, looping, vol); if (!a) { b = this.getAudioBuffer(src, is_music); b.seekWhenReady = playbackTime; b.pauseWhenReady = d["paused"]; if (pan) { if (panObjUid !== -1) { b.panWhenReady.push({ objUid: panObjUid, ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } else { b.panWhenReady.push({ x: pan["x"], y: pan["y"], a: pan["a"], ia: pan["ia"], oa: pan["oa"], og: pan["og"], thistag: tag }); } } continue; } a.resume_position = d["resume_position"]; a.setPannerEnabled(!!pan); a.play(looping, vol, playbackTime); a.updatePlaybackRate(); a.updateVolume(); a.doSetMuted(a.is_muted || a.is_silent); if (d["paused"]) a.pause(); if (d["muted"]) a.setMuted(true); a.doSetMuted(a.is_muted || a.is_silent); if (pan) { if (panObjUid !== -1) { a.objectTracker = a.objectTracker || new ObjectTracker(); a.objectTracker.loadUid = panObjUid; objectTrackerUidsToLoad.push(a.objectTracker); } else { a.setPan(pan["x"], pan["y"], pan["a"], pan["ia"], pan["oa"], pan["og"]); } } } if (setSilent && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (!setSilent && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; instanceProto.afterLoad = function () { var i, len, ot, inst; for (i = 0, len = objectTrackerUidsToLoad.length; i < len; i++) { ot = objectTrackerUidsToLoad[i]; inst = this.runtime.getObjectByUID(ot.loadUid); ot.setObject(inst); ot.loadUid = -1; if (inst) { listenerX = inst.x; listenerY = inst.y; } } objectTrackerUidsToLoad.length = 0; }; instanceProto.onSuspend = function (s) { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSuspended(s); }; instanceProto.tick = function () { var dt = this.runtime.dt; var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; a.tick(dt); if (a.myapi !== API_HTML5 && a.myapi !== API_APPMOBI) { if (!a.fresh && !a.stopped && a.hasEnded()) { a.stopped = true; audTag = a.tag; audRuntime.trigger(cr.plugins_.Audio.prototype.cnds.OnEnded, audInst); } } if (timescale_mode !== 0) a.updatePlaybackRate(); } var p, arr, f; for (p in effects) { if (effects.hasOwnProperty(p)) { arr = effects[p]; for (i = 0, len = arr.length; i < len; i++) { f = arr[i]; if (f.tick) f.tick(); } } } if (api === API_WEBAUDIO && this.listenerTracker.hasObject()) { this.listenerTracker.tick(dt); listenerX = this.listenerTracker.obj.x; listenerY = this.listenerTracker.obj.y; context["listener"]["setPosition"](this.listenerTracker.obj.x, this.listenerTracker.obj.y, this.listenerZ); context["listener"]["setVelocity"](this.listenerTracker.getVelocityX(), this.listenerTracker.getVelocityY(), 0); } }; var preload_list = []; instanceProto.setPreloadList = function (arr) { var i, len, p, filename, size, isOgg; var total_size = 0; for (i = 0, len = arr.length; i < len; ++i) { p = arr[i]; filename = p[0]; size = p[1] * 2; isOgg = (filename.length > 4 && filename.substr(filename.length - 4) === ".ogg"); if ((isOgg && useOgg) || (!isOgg && !useOgg)) { preload_list.push({ filename: filename, size: size, obj: null }); total_size += size; } } return total_size; }; instanceProto.startPreloads = function () { var i, len, p, src; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; src = this.runtime.files_subfolder + p.filename; p.obj = this.getAudioBuffer(src, false); } }; instanceProto.getPreloadedSize = function () { var completed = 0; var i, len, p; for (i = 0, len = preload_list.length; i < len; ++i) { p = preload_list[i]; if (p.obj.isLoadedAndDecoded() || p.obj.hasFailedToLoad() || this.runtime.isDomFree) completed += p.size; else if (p.obj.isLoaded()) // downloaded but not decoded: only happens in Web Audio API, count as half-way progress completed += Math.floor(p.size / 2); }; return completed; }; instanceProto.getAudioBuffer = function (src_, is_music) { var i, len, a, ret = null, j, k, lenj, ai; for (i = 0, len = audioBuffers.length; i < len; i++) { a = audioBuffers[i]; if (a.src === src_) { ret = a; break; } } if (!ret) { ret = new C2AudioBuffer(src_, is_music); audioBuffers.push(ret); } return ret; }; instanceProto.getAudioInstance = function (src_, tag, is_music, looping, vol) { var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (a.src === src_ && (a.canBeRecycled() || is_music)) { a.tag = tag; return a; } } var b = this.getAudioBuffer(src_, is_music); if (!b.bufferObject) { if (tag !== "<preload>") { b.playTagWhenReady = tag; b.loopWhenReady = looping; b.volumeWhenReady = vol; } return null; } a = new C2AudioInstance(b, tag); audioInstances.push(a); return a; }; var taggedAudio = []; function SortByIsPlaying(a, b) { var an = a.isPlaying() ? 1 : 0; var bn = b.isPlaying() ? 1 : 0; if (an === bn) return 0; else if (an < bn) return 1; else return -1; }; function getAudioByTag(tag, sort_by_playing) { taggedAudio.length = 0; if (!tag.length) { if (!lastAudio || lastAudio.hasEnded()) return; else { taggedAudio.length = 1; taggedAudio[0] = lastAudio; return; } } var i, len, a; for (i = 0, len = audioInstances.length; i < len; i++) { a = audioInstances[i]; if (cr.equals_nocase(tag, a.tag)) taggedAudio.push(a); } if (sort_by_playing) taggedAudio.sort(SortByIsPlaying); }; function reconnectEffects(tag) { var i, len, arr, n, toNode = context["destination"]; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { toNode = arr[0].getInputNode(); for (i = 0, len = arr.length; i < len; i++) { n = arr[i]; if (i + 1 === len) n.connectTo(context["destination"]); else n.connectTo(arr[i + 1].getInputNode()); } } } getAudioByTag(tag); for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].reconnect(toNode); if (micSource && micTag === tag) { micSource["disconnect"](); micSource["connect"](toNode); } }; function addEffectForTag(tag, fx) { if (!effects.hasOwnProperty(tag)) effects[tag] = [fx]; else effects[tag].push(fx); reconnectEffects(tag); }; function Cnds() {}; Cnds.prototype.OnEnded = function (t) { return cr.equals_nocase(audTag, t); }; Cnds.prototype.PreloadsComplete = function () { var i, len; for (i = 0, len = audioBuffers.length; i < len; i++) { if (!audioBuffers[i].isLoaded() && !audioBuffers[i].hasFailedToLoad()) return false; } return true; }; Cnds.prototype.AdvancedAudioSupported = function () { return api === API_WEBAUDIO; }; Cnds.prototype.IsSilent = function () { return silent; }; Cnds.prototype.IsAnyPlaying = function () { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) { if (audioInstances[i].isPlaying()) return true; } return false; }; Cnds.prototype.IsTagPlaying = function (tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (taggedAudio[i].isPlaying()) return true; } return false; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Play = function (file, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtPosition = function (file, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtObject = function (file, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayByName = function (folder, filename, looping, vol, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) return; lastAudio.setPannerEnabled(false); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtPositionByName = function (folder, filename, looping, vol, x_, y_, angle_, innerangle_, outerangle_, outergain_, tag) { if (silent) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ x: x_, y: y_, a: angle_, ia: innerangle_, oa: outerangle_, og: dbToLinear(outergain_), thistag: tag }); return; } lastAudio.setPannerEnabled(true); lastAudio.setPan(x_, y_, angle_, innerangle_, outerangle_, dbToLinear(outergain_)); lastAudio.play(looping!==0, v); }; Acts.prototype.PlayAtObjectByName = function (folder, filename, looping, vol, obj, innerangle, outerangle, outergain, tag) { if (silent || !obj) return; var inst = obj.getFirstPicked(); if (!inst) return; var v = dbToLinear(vol); var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); lastAudio = this.getAudioInstance(src, tag, is_music, looping!==0, v); if (!lastAudio) { var b = this.getAudioBuffer(src, is_music); b.panWhenReady.push({ obj: inst, ia: innerangle, oa: outerangle, og: dbToLinear(outergain), thistag: tag }); return; } lastAudio.setPannerEnabled(true); var px = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, true); var py = cr.rotatePtAround(inst.x, inst.y, -inst.layer.getAngle(), listenerX, listenerY, false); lastAudio.setPan(px, py, cr.to_degrees(inst.angle - inst.layer.getAngle()), innerangle, outerangle, dbToLinear(outergain)); lastAudio.setObject(inst); lastAudio.play(looping!==0, v); }; Acts.prototype.SetLooping = function (tag, looping) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setLooping(looping === 0); }; Acts.prototype.SetMuted = function (tag, muted) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setMuted(muted === 0); }; Acts.prototype.SetVolume = function (tag, vol) { getAudioByTag(tag); var v = dbToLinear(vol); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setVolume(v); }; Acts.prototype.Preload = function (file) { if (silent) return; var is_music = file[1]; var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_PHONEGAP) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.PreloadByName = function (folder, filename) { if (silent) return; var is_music = (folder === 1); var src = this.runtime.files_subfolder + filename.toLowerCase() + (useOgg ? ".ogg" : ".m4a"); if (api === API_APPMOBI) { if (this.runtime.isDirectCanvas) AppMobi["context"]["loadSound"](src); else AppMobi["player"]["loadSound"](src); return; } else if (api === API_PHONEGAP) { return; } this.getAudioInstance(src, "<preload>", is_music, false); }; Acts.prototype.SetPlaybackRate = function (tag, rate) { getAudioByTag(tag); if (rate < 0.0) rate = 0; var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].setPlaybackRate(rate); }; Acts.prototype.Stop = function (tag) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) taggedAudio[i].stop(); }; Acts.prototype.StopAll = function () { var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].stop(); }; Acts.prototype.SetPaused = function (tag, state) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { if (state === 0) taggedAudio[i].pause(); else taggedAudio[i].resume(); } }; Acts.prototype.Seek = function (tag, pos) { getAudioByTag(tag); var i, len; for (i = 0, len = taggedAudio.length; i < len; i++) { taggedAudio[i].seek(pos); } }; Acts.prototype.SetSilent = function (s) { var i, len; if (s === 2) // toggling s = (silent ? 1 : 0); // choose opposite state if (s === 0 && !silent) // setting silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(true); silent = true; } else if (s === 1 && silent) // setting not silent { for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].setSilent(false); silent = false; } }; Acts.prototype.SetMasterVolume = function (vol) { masterVolume = dbToLinear(vol); var i, len; for (i = 0, len = audioInstances.length; i < len; i++) audioInstances[i].updateVolume(); }; Acts.prototype.AddFilterEffect = function (tag, type, freq, detune, q, gain, mix) { if (api !== API_WEBAUDIO || type < 0 || type >= filterTypes.length || !context["createBiquadFilter"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FilterEffect(type, freq, detune, q, gain, mix)); }; Acts.prototype.AddDelayEffect = function (tag, delay, gain, mix) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DelayEffect(delay, dbToLinear(gain), mix)); }; Acts.prototype.AddFlangerEffect = function (tag, delay, modulation, freq, feedback, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new FlangerEffect(delay / 1000, modulation / 1000, freq, feedback / 100, mix)); }; Acts.prototype.AddPhaserEffect = function (tag, freq, detune, q, mod, modfreq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new PhaserEffect(freq, detune, q, mod, modfreq, mix)); }; Acts.prototype.AddConvolutionEffect = function (tag, file, norm, mix) { if (api !== API_WEBAUDIO || !context["createConvolver"]) return; var doNormalize = (norm === 0); var src = this.runtime.files_subfolder + file[0] + (useOgg ? ".ogg" : ".m4a"); var b = this.getAudioBuffer(src, false); tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; var fx; if (b.bufferObject) { fx = new ConvolveEffect(b.bufferObject, doNormalize, mix, src); } else { fx = new ConvolveEffect(null, doNormalize, mix, src); b.normalizeWhenReady = doNormalize; b.convolveWhenReady = fx; } addEffectForTag(tag, fx); }; Acts.prototype.AddGainEffect = function (tag, g) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(dbToLinear(g))); }; Acts.prototype.AddMuteEffect = function (tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new GainEffect(0)); // re-use gain effect with 0 gain }; Acts.prototype.AddTremoloEffect = function (tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new TremoloEffect(freq, mix)); }; Acts.prototype.AddRingModEffect = function (tag, freq, mix) { if (api !== API_WEBAUDIO || !context["createOscillator"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new RingModulatorEffect(freq, mix)); }; Acts.prototype.AddDistortionEffect = function (tag, threshold, headroom, drive, makeupgain, mix) { if (api !== API_WEBAUDIO || !context["createWaveShaper"]) return; tag = tag.toLowerCase(); mix = mix / 100; if (mix < 0) mix = 0; if (mix > 1) mix = 1; addEffectForTag(tag, new DistortionEffect(threshold, headroom, drive, makeupgain, mix)); }; Acts.prototype.AddCompressorEffect = function (tag, threshold, knee, ratio, attack, release) { if (api !== API_WEBAUDIO || !context["createDynamicsCompressor"]) return; tag = tag.toLowerCase(); addEffectForTag(tag, new CompressorEffect(threshold, knee, ratio, attack / 1000, release / 1000)); }; Acts.prototype.AddAnalyserEffect = function (tag, fftSize, smoothing) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); addEffectForTag(tag, new AnalyserEffect(fftSize, smoothing)); }; Acts.prototype.RemoveEffects = function (tag) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); var i, len, arr; if (effects.hasOwnProperty(tag)) { arr = effects[tag]; if (arr.length) { for (i = 0, len = arr.length; i < len; i++) arr[i].remove(); arr.length = 0; reconnectEffects(tag); } } }; Acts.prototype.SetEffectParameter = function (tag, index, param, value, ramp, time) { if (api !== API_WEBAUDIO) return; tag = tag.toLowerCase(); index = Math.floor(index); var arr; if (!effects.hasOwnProperty(tag)) return; arr = effects[tag]; if (index < 0 || index >= arr.length) return; arr[index].setParam(param, value, ramp, time); }; Acts.prototype.SetListenerObject = function (obj_) { if (!obj_ || api !== API_WEBAUDIO) return; var inst = obj_.getFirstPicked(); if (!inst) return; this.listenerTracker.setObject(inst); listenerX = inst.x; listenerY = inst.y; }; Acts.prototype.SetListenerZ = function (z) { this.listenerZ = z; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.Duration = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getDuration()); else ret.set_float(0); }; Exps.prototype.PlaybackTime = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) ret.set_float(taggedAudio[0].getPlaybackTime()); else ret.set_float(0); }; Exps.prototype.Volume = function (ret, tag) { getAudioByTag(tag, true); if (taggedAudio.length) { var v = taggedAudio[0].getVolume(); ret.set_float(linearToDb(v)); } else ret.set_float(0); }; Exps.prototype.MasterVolume = function (ret) { ret.set_float(masterVolume); }; Exps.prototype.EffectCount = function (ret, tag) { tag = tag.toLowerCase(); var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; ret.set_int(arr ? arr.length : 0); }; function getAnalyser(tag, index) { var arr = null; if (effects.hasOwnProperty(tag)) arr = effects[tag]; if (arr && index >= 0 && index < arr.length && arr[index].freqBins) return arr[index]; else return null; }; Exps.prototype.AnalyserFreqBinCount = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); ret.set_int(analyser ? analyser.node["frequencyBinCount"] : 0); }; Exps.prototype.AnalyserFreqBinAt = function (ret, tag, index, bin) { tag = tag.toLowerCase(); index = Math.floor(index); bin = Math.floor(bin); var analyser = getAnalyser(tag, index); if (!analyser) ret.set_float(0); else if (bin < 0 || bin >= analyser.node["frequencyBinCount"]) ret.set_float(0); else ret.set_float(analyser.freqBins[bin]); }; Exps.prototype.AnalyserPeakLevel = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.peak); else ret.set_float(0); }; Exps.prototype.AnalyserRMSLevel = function (ret, tag, index) { tag = tag.toLowerCase(); index = Math.floor(index); var analyser = getAnalyser(tag, index); if (analyser) ret.set_float(analyser.rms); else ret.set_float(0); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Browser = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Browser.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; window.addEventListener("resize", function () { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnResize, self); }); if (typeof navigator.onLine !== "undefined") { window.addEventListener("online", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOnline, self); }); window.addEventListener("offline", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOffline, self); }); } if (typeof window.applicationCache !== "undefined") { window.applicationCache.addEventListener('updateready', function() { self.runtime.loadingprogress = 1; self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); window.applicationCache.addEventListener('progress', function(e) { self.runtime.loadingprogress = e["loaded"] / e["total"]; }); } if (!this.runtime.isDirectCanvas) { document.addEventListener("appMobi.device.update.available", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self); }); document.addEventListener("backbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }); document.addEventListener("menubutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); }); document.addEventListener("searchbutton", function() { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnSearchButton, self); }); document.addEventListener("tizenhwkey", function (e) { var ret; switch (e["keyName"]) { case "back": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); if (!ret) { if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); } break; case "menu": ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self); if (!ret) e.preventDefault(); break; } }); } if (this.runtime.isWindowsPhone81) { WinJS["Application"]["onbackclick"] = function (e) { return !!self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self); }; } this.runtime.addSuspendCallback(function(s) { if (s) { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageHidden, self); } else { self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageVisible, self); } }); this.is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); }; function Cnds() {}; Cnds.prototype.CookiesEnabled = function() { return navigator ? navigator.cookieEnabled : false; }; Cnds.prototype.IsOnline = function() { return navigator ? navigator.onLine : false; }; Cnds.prototype.HasJava = function() { return navigator ? navigator.javaEnabled() : false; }; Cnds.prototype.OnOnline = function() { return true; }; Cnds.prototype.OnOffline = function() { return true; }; Cnds.prototype.IsDownloadingUpdate = function () { if (typeof window["applicationCache"] === "undefined") return false; else return window["applicationCache"]["status"] === window["applicationCache"]["DOWNLOADING"]; }; Cnds.prototype.OnUpdateReady = function () { return true; }; Cnds.prototype.PageVisible = function () { return !this.runtime.isSuspended; }; Cnds.prototype.OnPageVisible = function () { return true; }; Cnds.prototype.OnPageHidden = function () { return true; }; Cnds.prototype.OnResize = function () { return true; }; Cnds.prototype.IsFullscreen = function () { return !!(document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || this.runtime.isNodeFullscreen); }; Cnds.prototype.OnBackButton = function () { return true; }; Cnds.prototype.OnMenuButton = function () { return true; }; Cnds.prototype.OnSearchButton = function () { return true; }; Cnds.prototype.IsMetered = function () { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) return false; return connection["metered"]; }; Cnds.prototype.IsCharging = function () { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (!battery) return true; return battery["charging"]; }; Cnds.prototype.IsPortraitLandscape = function (p) { var current = (window.innerWidth <= window.innerHeight ? 0 : 1); return current === p; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Alert = function (msg) { if (!this.runtime.isDomFree) alert(msg.toString()); }; Acts.prototype.Close = function () { if (this.runtime.isCocoonJs) CocoonJS["App"]["forceToFinish"](); else if (window["tizen"]) window["tizen"]["application"]["getCurrentApplication"]()["exit"](); else if (navigator["app"] && navigator["app"]["exitApp"]) navigator["app"]["exitApp"](); else if (navigator["device"] && navigator["device"]["exitApp"]) navigator["device"]["exitApp"](); else if (!this.is_arcade && !this.runtime.isDomFree) window.close(); }; Acts.prototype.Focus = function () { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["focus"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.focus(); }; Acts.prototype.Blur = function () { if (this.runtime.isNodeWebkit) { var win = window["nwgui"]["Window"]["get"](); win["blur"](); } else if (!this.is_arcade && !this.runtime.isDomFree) window.blur(); }; Acts.prototype.GoBack = function () { if (navigator["app"] && navigator["app"]["backHistory"]) navigator["app"]["backHistory"](); else if (!this.is_arcade && !this.runtime.isDomFree && window.back) window.back(); }; Acts.prototype.GoForward = function () { if (!this.is_arcade && !this.runtime.isDomFree && window.forward) window.forward(); }; Acts.prototype.GoHome = function () { if (!this.is_arcade && !this.runtime.isDomFree && window.home) window.home(); }; Acts.prototype.GoToURL = function (url, target) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (!this.is_arcade && !this.runtime.isDomFree) { if (target === 2 && !this.is_arcade) // top window.top.location = url; else if (target === 1 && !this.is_arcade) // parent window.parent.location = url; else // self window.location = url; } }; Acts.prototype.GoToURLWindow = function (url, tag) { if (this.runtime.isCocoonJs) CocoonJS["App"]["openURL"](url); else if (this.runtime.isEjecta) ejecta["openURL"](url); else if (this.runtime.isWinJS) Windows["System"]["Launcher"]["launchUriAsync"](new Windows["Foundation"]["Uri"](url)); else if (navigator["app"] && navigator["app"]["loadUrl"]) navigator["app"]["loadUrl"](url, { "openExternal": true }); else if (!this.is_arcade && !this.runtime.isDomFree) window.open(url, tag); }; Acts.prototype.Reload = function () { if (!this.is_arcade && !this.runtime.isDomFree) window.location.reload(); }; var firstRequestFullscreen = true; var crruntime = null; function onFullscreenError() { if (typeof jQuery !== "undefined") { crruntime["setSize"](jQuery(window).width(), jQuery(window).height()); } }; Acts.prototype.RequestFullScreen = function (stretchmode) { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Requesting fullscreen is not supported on this platform - the request has been ignored"); return; } if (stretchmode >= 2) stretchmode += 1; if (stretchmode === 6) stretchmode = 2; if (this.runtime.isNodeWebkit) { if (!this.runtime.isNodeFullscreen) { window["nwgui"]["Window"]["get"]()["enterFullscreen"](); this.runtime.isNodeFullscreen = true; this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); } } else { if (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"]) { return; } this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0); var elem = this.runtime.canvasdiv || this.runtime.canvas; if (firstRequestFullscreen) { firstRequestFullscreen = false; crruntime = this.runtime; elem.addEventListener("mozfullscreenerror", onFullscreenError); elem.addEventListener("webkitfullscreenerror", onFullscreenError); elem.addEventListener("msfullscreenerror", onFullscreenError); elem.addEventListener("fullscreenerror", onFullscreenError); } if (!cr.is_undefined(elem["requestFullscreen"])) elem["requestFullscreen"](); else if (!cr.is_undefined(elem["webkitRequestFullScreen"])) { if (typeof Element !== "undefined" && typeof Element["ALLOW_KEYBOARD_INPUT"] !== "undefined") elem["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]); else elem["webkitRequestFullScreen"](); } else if (!cr.is_undefined(elem["mozRequestFullScreen"])) elem["mozRequestFullScreen"](); else if (!cr.is_undefined(elem["msRequestFullscreen"])) elem["msRequestFullscreen"](); } }; Acts.prototype.CancelFullScreen = function () { if (this.runtime.isDomFree) { cr.logexport("[Construct 2] Exiting fullscreen is not supported on this platform - the request has been ignored"); return; } if (this.runtime.isNodeWebkit) { if (this.runtime.isNodeFullscreen) { window["nwgui"]["Window"]["get"]()["leaveFullscreen"](); this.runtime.isNodeFullscreen = false; } } else { if (!cr.is_undefined(document["exitFullscreen"])) document["exitFullscreen"](); else if (!cr.is_undefined(document["webkitCancelFullScreen"])) document["webkitCancelFullScreen"](); else if (!cr.is_undefined(document["mozCancelFullScreen"])) document["mozCancelFullScreen"](); else if (!cr.is_undefined(document["msExitFullscreen"])) document["msExitFullscreen"](); } }; Acts.prototype.Vibrate = function (pattern_) { try { var arr = pattern_.split(","); var i, len; for (i = 0, len = arr.length; i < len; i++) { arr[i] = parseInt(arr[i], 10); } if (navigator["vibrate"]) navigator["vibrate"](arr); else if (navigator["mozVibrate"]) navigator["mozVibrate"](arr); else if (navigator["webkitVibrate"]) navigator["webkitVibrate"](arr); else if (navigator["msVibrate"]) navigator["msVibrate"](arr); } catch (e) {} }; Acts.prototype.InvokeDownload = function (url_, filename_) { var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(url_); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = url_; a["download"] = filename_; body.appendChild(a); var clickEvent = document.createEvent("MouseEvent"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.InvokeDownloadString = function (str_, mimetype_, filename_) { var datauri = "data:" + mimetype_ + "," + encodeURIComponent(str_); var a = document.createElement("a"); if (typeof a["download"] === "undefined") { window.open(datauri); } else { var body = document.getElementsByTagName("body")[0]; a.textContent = filename_; a.href = datauri; a["download"] = filename_; body.appendChild(a); var clickEvent = document.createEvent("MouseEvent"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(clickEvent); body.removeChild(a); } }; Acts.prototype.ConsoleLog = function (type_, msg_) { if (typeof console === "undefined") return; if (type_ === 0 && console.log) console.log(msg_.toString()); if (type_ === 1 && console.warn) console.warn(msg_.toString()); if (type_ === 2 && console.error) console.error(msg_.toString()); }; Acts.prototype.ConsoleGroup = function (name_) { if (console && console.group) console.group(name_); }; Acts.prototype.ConsoleGroupEnd = function () { if (console && console.groupEnd) console.groupEnd(); }; Acts.prototype.ExecJs = function (js_) { try { if (eval) eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } }; var orientations = [ "portrait", "landscape", "portrait-primary", "portrait-secondary", "landscape-primary", "landscape-secondary" ]; Acts.prototype.LockOrientation = function (o) { o = Math.floor(o); if (o < 0 || o >= orientations.length) return; this.runtime.autoLockOrientation = false; var orientation = orientations[o]; if (screen["lockOrientation"]) screen["lockOrientation"](orientation); else if (screen["webkitLockOrientation"]) screen["webkitLockOrientation"](orientation); else if (screen["mozLockOrientation"]) screen["mozLockOrientation"](orientation); else if (screen["msLockOrientation"]) screen["msLockOrientation"](orientation); }; Acts.prototype.UnlockOrientation = function () { this.runtime.autoLockOrientation = false; if (screen["unlockOrientation"]) screen["unlockOrientation"](); else if (screen["webkitUnlockOrientation"]) screen["webkitUnlockOrientation"](); else if (screen["mozUnlockOrientation"]) screen["mozUnlockOrientation"](); else if (screen["msUnlockOrientation"]) screen["msUnlockOrientation"](); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.URL = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.toString()); }; Exps.prototype.Protocol = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.protocol); }; Exps.prototype.Domain = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hostname); }; Exps.prototype.PathName = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.pathname); }; Exps.prototype.Hash = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.hash); }; Exps.prototype.Referrer = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : document.referrer); }; Exps.prototype.Title = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : document.title); }; Exps.prototype.Name = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appName); }; Exps.prototype.Version = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.appVersion); }; Exps.prototype.Language = function (ret) { if (navigator && navigator.language) ret.set_string(navigator.language); else ret.set_string(""); }; Exps.prototype.Platform = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.platform); }; Exps.prototype.Product = function (ret) { if (navigator && navigator.product) ret.set_string(navigator.product); else ret.set_string(""); }; Exps.prototype.Vendor = function (ret) { if (navigator && navigator.vendor) ret.set_string(navigator.vendor); else ret.set_string(""); }; Exps.prototype.UserAgent = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : navigator.userAgent); }; Exps.prototype.QueryString = function (ret) { ret.set_string(this.runtime.isDomFree ? "" : window.location.search); }; Exps.prototype.QueryParam = function (ret, paramname) { if (this.runtime.isDomFree) { ret.set_string(""); return; } var match = RegExp('[?&]' + paramname + '=([^&]*)').exec(window.location.search); if (match) ret.set_string(decodeURIComponent(match[1].replace(/\+/g, ' '))); else ret.set_string(""); }; Exps.prototype.Bandwidth = function (ret) { var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"]; if (!connection) ret.set_float(Number.POSITIVE_INFINITY); else ret.set_float(connection["bandwidth"]); }; Exps.prototype.BatteryLevel = function (ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (!battery) ret.set_float(1); else ret.set_float(battery["level"]); }; Exps.prototype.BatteryTimeLeft = function (ret) { var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"]; if (!battery) ret.set_float(Number.POSITIVE_INFINITY); else ret.set_float(battery["dischargingTime"]); }; Exps.prototype.ExecJS = function (ret, js_) { if (!eval) { ret.set_any(0); return; } var result = 0; try { result = eval(js_); } catch (e) { if (console && console.error) console.error("Error executing Javascript: ", e); } if (typeof result === "number") ret.set_any(result); else if (typeof result === "string") ret.set_any(result); else if (typeof result === "boolean") ret.set_any(result ? 1 : 0); else ret.set_any(0); }; Exps.prototype.ScreenWidth = function (ret) { ret.set_int(screen.width); }; Exps.prototype.ScreenHeight = function (ret) { ret.set_int(screen.height); }; Exps.prototype.DevicePixelRatio = function (ret) { ret.set_float(this.runtime.devicePixelRatio); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Keyboard = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Keyboard.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.keyMap = new Array(256); // stores key up/down state this.usedKeys = new Array(256); this.triggerKey = 0; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; if (!this.runtime.isDomFree) { jQuery(document).keydown( function(info) { self.onKeyDown(info); } ); jQuery(document).keyup( function(info) { self.onKeyUp(info); } ); } }; var keysToBlockWhenFramed = [32, 33, 34, 35, 36, 37, 38, 39, 40, 44]; instanceProto.onKeyDown = function (info) { var alreadyPreventedDefault = false; if (window != window.top && keysToBlockWhenFramed.indexOf(info.which) > -1) { info.preventDefault(); alreadyPreventedDefault = true; info.stopPropagation(); } if (this.keyMap[info.which]) { if (this.usedKeys[info.which] && !alreadyPreventedDefault) info.preventDefault(); return; } this.keyMap[info.which] = true; this.triggerKey = info.which; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKey, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKey, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCode, this); this.runtime.isInUserInputEvent = false; if (eventRan || eventRan2) { this.usedKeys[info.which] = true; if (!alreadyPreventedDefault) info.preventDefault(); } }; instanceProto.onKeyUp = function (info) { this.keyMap[info.which] = false; this.triggerKey = info.which; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnAnyKeyReleased, this); var eventRan = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyReleased, this); var eventRan2 = this.runtime.trigger(cr.plugins_.Keyboard.prototype.cnds.OnKeyCodeReleased, this); this.runtime.isInUserInputEvent = false; if (eventRan || eventRan2 || this.usedKeys[info.which]) { this.usedKeys[info.which] = true; info.preventDefault(); } }; instanceProto.saveToJSON = function () { return { "triggerKey": this.triggerKey }; }; instanceProto.loadFromJSON = function (o) { this.triggerKey = o["triggerKey"]; }; function Cnds() {}; Cnds.prototype.IsKeyDown = function(key) { return this.keyMap[key]; }; Cnds.prototype.OnKey = function(key) { return (key === this.triggerKey); }; Cnds.prototype.OnAnyKey = function(key) { return true; }; Cnds.prototype.OnAnyKeyReleased = function(key) { return true; }; Cnds.prototype.OnKeyReleased = function(key) { return (key === this.triggerKey); }; Cnds.prototype.IsKeyCodeDown = function(key) { key = Math.floor(key); if (key < 0 || key >= this.keyMap.length) return false; return this.keyMap[key]; }; Cnds.prototype.OnKeyCode = function(key) { return (key === this.triggerKey); }; Cnds.prototype.OnKeyCodeReleased = function(key) { return (key === this.triggerKey); }; pluginProto.cnds = new Cnds(); function Acts() {}; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.LastKeyCode = function (ret) { ret.set_int(this.triggerKey); }; function fixedStringFromCharCode(kc) { kc = Math.floor(kc); switch (kc) { case 8: return "backspace"; case 9: return "tab"; case 13: return "enter"; case 16: return "shift"; case 17: return "control"; case 18: return "alt"; case 19: return "pause"; case 20: return "capslock"; case 27: return "esc"; case 33: return "pageup"; case 34: return "pagedown"; case 35: return "end"; case 36: return "home"; case 37: return "←"; case 38: return "↑"; case 39: return "→"; case 40: return "↓"; case 45: return "insert"; case 46: return "del"; case 91: return "left window key"; case 92: return "right window key"; case 93: return "select"; case 96: return "numpad 0"; case 97: return "numpad 1"; case 98: return "numpad 2"; case 99: return "numpad 3"; case 100: return "numpad 4"; case 101: return "numpad 5"; case 102: return "numpad 6"; case 103: return "numpad 7"; case 104: return "numpad 8"; case 105: return "numpad 9"; case 106: return "numpad *"; case 107: return "numpad +"; case 109: return "numpad -"; case 110: return "numpad ."; case 111: return "numpad /"; case 112: return "F1"; case 113: return "F2"; case 114: return "F3"; case 115: return "F4"; case 116: return "F5"; case 117: return "F6"; case 118: return "F7"; case 119: return "F8"; case 120: return "F9"; case 121: return "F10"; case 122: return "F11"; case 123: return "F12"; case 144: return "numlock"; case 145: return "scroll lock"; case 186: return ";"; case 187: return "="; case 188: return ","; case 189: return "-"; case 190: return "."; case 191: return "/"; case 192: return "'"; case 219: return "["; case 220: return "\\"; case 221: return "]"; case 222: return "#"; case 223: return "`"; default: return String.fromCharCode(kc); } }; Exps.prototype.StringFromKeyCode = function (ret, kc) { ret.set_string(fixedStringFromCharCode(kc)); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Mouse = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Mouse.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.buttonMap = new Array(4); // mouse down states this.mouseXcanvas = 0; // mouse position relative to canvas this.mouseYcanvas = 0; this.triggerButton = 0; this.triggerType = 0; this.triggerDir = 0; this.handled = false; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { var self = this; if (!this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); jQuery(document).dblclick( function(info) { self.onDoubleClick(info); } ); var wheelevent = function(info) { self.onWheel(info); }; document.addEventListener("mousewheel", wheelevent, false); document.addEventListener("DOMMouseScroll", wheelevent, false); } }; var dummyoffset = {left: 0, top: 0}; instanceProto.onMouseMove = function(info) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); this.mouseXcanvas = info.pageX - offset.left; this.mouseYcanvas = info.pageY - offset.top; }; instanceProto.mouseInGame = function () { if (this.runtime.fullscreen_mode > 0) return true; return this.mouseXcanvas >= 0 && this.mouseYcanvas >= 0 && this.mouseXcanvas < this.runtime.width && this.mouseYcanvas < this.runtime.height; }; instanceProto.onMouseDown = function(info) { if (!this.mouseInGame()) return; if (this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.buttonMap[info.which] = true; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnAnyClick, this); this.triggerButton = info.which - 1; // 1-based this.triggerType = 0; // single click this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnClick, this); this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onMouseUp = function(info) { if (!this.buttonMap[info.which]) return; if (this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; this.buttonMap[info.which] = false; this.runtime.isInUserInputEvent = true; this.triggerButton = info.which - 1; // 1-based this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnRelease, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onDoubleClick = function(info) { if (!this.mouseInGame()) return; info.preventDefault(); this.runtime.isInUserInputEvent = true; this.triggerButton = info.which - 1; // 1-based this.triggerType = 1; // double click this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnClick, this); this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnObjectClicked, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onWheel = function (info) { var delta = info.wheelDelta ? info.wheelDelta : info.detail ? -info.detail : 0; this.triggerDir = (delta < 0 ? 0 : 1); this.handled = false; this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Mouse.prototype.cnds.OnWheel, this); this.runtime.isInUserInputEvent = false; if (this.handled) info.preventDefault(); }; function Cnds() {}; Cnds.prototype.OnClick = function (button, type) { return button === this.triggerButton && type === this.triggerType; }; Cnds.prototype.OnAnyClick = function () { return true; }; Cnds.prototype.IsButtonDown = function (button) { return this.buttonMap[button + 1]; // jQuery uses 1-based buttons for some reason }; Cnds.prototype.OnRelease = function (button) { return button === this.triggerButton; }; Cnds.prototype.IsOverObject = function (obj) { var cnd = this.runtime.getCurrentCondition(); var mx = this.mouseXcanvas; var my = this.mouseYcanvas; return cr.xor(this.runtime.testAndSelectCanvasPointOverlap(obj, mx, my, cnd.inverted), cnd.inverted); }; Cnds.prototype.OnObjectClicked = function (button, type, obj) { if (button !== this.triggerButton || type !== this.triggerType) return false; // wrong click type return this.runtime.testAndSelectCanvasPointOverlap(obj, this.mouseXcanvas, this.mouseYcanvas, false); }; Cnds.prototype.OnWheel = function (dir) { this.handled = true; return dir === this.triggerDir; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetCursor = function (c) { var cursor_style = ["auto", "pointer", "text", "crosshair", "move", "help", "wait", "none"][c]; if (this.runtime.canvas && this.runtime.canvas.style) this.runtime.canvas.style.cursor = cursor_style; }; Acts.prototype.SetCursorSprite = function (obj) { if (this.runtime.isDomFree || this.runtime.isMobile || !obj) return; var inst = obj.getFirstPicked(); if (!inst || !inst.curFrame) return; var frame = inst.curFrame; var datauri = frame.getDataUri(); var cursor_style = "url(" + datauri + ") " + Math.round(frame.hotspotX * frame.width) + " " + Math.round(frame.hotspotY * frame.height) + ", auto"; jQuery(this.runtime.canvas).css("cursor", cursor_style); }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.X = function (ret, layerparam) { var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, true)); else ret.set_float(0); } }; Exps.prototype.Y = function (ret, layerparam) { var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.mouseXcanvas, this.mouseYcanvas, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function (ret) { ret.set_float(this.mouseXcanvas); }; Exps.prototype.AbsoluteY = function (ret) { ret.set_float(this.mouseYcanvas); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Sprite = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Sprite.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; function frame_getDataUri() { if (this.datauri.length === 0) { var tmpcanvas = document.createElement("canvas"); tmpcanvas.width = this.width; tmpcanvas.height = this.height; var tmpctx = tmpcanvas.getContext("2d"); if (this.spritesheeted) { tmpctx.drawImage(this.texture_img, this.offx, this.offy, this.width, this.height, 0, 0, this.width, this.height); } else { tmpctx.drawImage(this.texture_img, 0, 0, this.width, this.height); } this.datauri = tmpcanvas.toDataURL("image/png"); } return this.datauri; }; typeProto.onCreate = function() { if (this.is_family) return; var i, leni, j, lenj; var anim, frame, animobj, frameobj, wt, uv; this.all_frames = []; this.has_loaded_textures = false; for (i = 0, leni = this.animations.length; i < leni; i++) { anim = this.animations[i]; animobj = {}; animobj.name = anim[0]; animobj.speed = anim[1]; animobj.loop = anim[2]; animobj.repeatcount = anim[3]; animobj.repeatto = anim[4]; animobj.pingpong = anim[5]; animobj.sid = anim[6]; animobj.frames = []; for (j = 0, lenj = anim[7].length; j < lenj; j++) { frame = anim[7][j]; frameobj = {}; frameobj.texture_file = frame[0]; frameobj.texture_filesize = frame[1]; frameobj.offx = frame[2]; frameobj.offy = frame[3]; frameobj.width = frame[4]; frameobj.height = frame[5]; frameobj.duration = frame[6]; frameobj.hotspotX = frame[7]; frameobj.hotspotY = frame[8]; frameobj.image_points = frame[9]; frameobj.poly_pts = frame[10]; frameobj.pixelformat = frame[11]; frameobj.spritesheeted = (frameobj.width !== 0); frameobj.datauri = ""; // generated on demand and cached frameobj.getDataUri = frame_getDataUri; uv = {}; uv.left = 0; uv.top = 0; uv.right = 1; uv.bottom = 1; frameobj.sheetTex = uv; frameobj.webGL_texture = null; wt = this.runtime.findWaitingTexture(frame[0]); if (wt) { frameobj.texture_img = wt; } else { frameobj.texture_img = new Image(); frameobj.texture_img["idtkLoadDisposed"] = true; frameobj.texture_img.src = frame[0]; frameobj.texture_img.cr_src = frame[0]; frameobj.texture_img.cr_filesize = frame[1]; frameobj.texture_img.c2webGL_texture = null; this.runtime.waitForImageLoad(frameobj.texture_img); } cr.seal(frameobj); animobj.frames.push(frameobj); this.all_frames.push(frameobj); } cr.seal(animobj); this.animations[i] = animobj; // swap array data for object } }; typeProto.updateAllCurrentTexture = function () { var i, len, inst; for (i = 0, len = this.instances.length; i < len; i++) { inst = this.instances[i]; inst.curWebGLTexture = inst.curFrame.webGL_texture; } }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.texture_img.c2webGL_texture = null; frame.webGL_texture = null; } }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.updateAllCurrentTexture(); }; typeProto.loadTextures = function () { if (this.is_family || this.has_loaded_textures || !this.runtime.glwrap) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat); } this.has_loaded_textures = true; }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.has_loaded_textures) return; var i, len, frame; for (i = 0, len = this.all_frames.length; i < len; ++i) { frame = this.all_frames[i]; this.runtime.glwrap.deleteTexture(frame.webGL_texture); frame.webGL_texture = null; } this.has_loaded_textures = false; }; var already_drawn_images = []; typeProto.preloadCanvas2D = function (ctx) { var i, len, frameimg; already_drawn_images.length = 0; for (i = 0, len = this.all_frames.length; i < len; ++i) { frameimg = this.all_frames[i].texture_img; if (already_drawn_images.indexOf(frameimg) !== -1) continue; ctx.drawImage(frameimg, 0, 0); already_drawn_images.push(frameimg); } }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; var poly_pts = this.type.animations[0].frames[0].poly_pts; if (this.recycled) this.collision_poly.set_pts(poly_pts); else this.collision_poly = new cr.CollisionPoly(poly_pts); }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.isTicking = false; this.inAnimTrigger = false; this.collisionsEnabled = (this.properties[3] !== 0); if (!(this.type.animations.length === 1 && this.type.animations[0].frames.length === 1) && this.type.animations[0].speed !== 0) { this.runtime.tickMe(this); this.isTicking = true; } this.cur_animation = this.getAnimationByName(this.properties[1]) || this.type.animations[0]; this.cur_frame = this.properties[2]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; var curanimframe = this.cur_animation.frames[this.cur_frame]; this.collision_poly.set_pts(curanimframe.poly_pts); this.hotspotX = curanimframe.hotspotX; this.hotspotY = curanimframe.hotspotY; this.cur_anim_speed = this.cur_animation.speed; if (this.recycled) this.animTimer.reset(); else this.animTimer = new cr.KahanAdder(); this.frameStart = this.getNowTime(); this.animPlaying = true; this.animRepeats = 0; this.animForwards = true; this.animTriggerName = ""; this.changeAnimName = ""; this.changeAnimFrom = 0; this.changeAnimFrame = -1; this.type.loadTextures(); var i, leni, j, lenj; var anim, frame, uv, maintex; for (i = 0, leni = this.type.animations.length; i < leni; i++) { anim = this.type.animations[i]; for (j = 0, lenj = anim.frames.length; j < lenj; j++) { frame = anim.frames[j]; if (frame.width === 0) { frame.width = frame.texture_img.width; frame.height = frame.texture_img.height; } if (frame.spritesheeted) { maintex = frame.texture_img; uv = frame.sheetTex; uv.left = frame.offx / maintex.width; uv.top = frame.offy / maintex.height; uv.right = (frame.offx + frame.width) / maintex.width; uv.bottom = (frame.offy + frame.height) / maintex.height; if (frame.offx === 0 && frame.offy === 0 && frame.width === maintex.width && frame.height === maintex.height) { frame.spritesheeted = false; } } } } this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; }; instanceProto.saveToJSON = function () { var o = { "a": this.cur_animation.sid, "f": this.cur_frame, "cas": this.cur_anim_speed, "fs": this.frameStart, "ar": this.animRepeats, "at": this.animTimer.sum }; if (!this.animPlaying) o["ap"] = this.animPlaying; if (!this.animForwards) o["af"] = this.animForwards; return o; }; instanceProto.loadFromJSON = function (o) { var anim = this.getAnimationBySid(o["a"]); if (anim) this.cur_animation = anim; this.cur_frame = o["f"]; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; this.cur_anim_speed = o["cas"]; this.frameStart = o["fs"]; this.animRepeats = o["ar"]; this.animTimer.reset(); this.animTimer.sum = o["at"]; this.animPlaying = o.hasOwnProperty("ap") ? o["ap"] : true; this.animForwards = o.hasOwnProperty("af") ? o["af"] : true; this.curFrame = this.cur_animation.frames[this.cur_frame]; this.curWebGLTexture = this.curFrame.webGL_texture; this.collision_poly.set_pts(this.curFrame.poly_pts); this.hotspotX = this.curFrame.hotspotX; this.hotspotY = this.curFrame.hotspotY; }; instanceProto.animationFinish = function (reverse) { this.cur_frame = reverse ? 0 : this.cur_animation.frames.length - 1; this.animPlaying = false; this.animTriggerName = this.cur_animation.name; this.inAnimTrigger = true; this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnyAnimFinished, this); this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnimFinished, this); this.inAnimTrigger = false; this.animRepeats = 0; }; instanceProto.getNowTime = function() { return this.animTimer.sum; }; instanceProto.tick = function() { this.animTimer.add(this.runtime.getDt(this)); if (this.changeAnimName.length) this.doChangeAnim(); if (this.changeAnimFrame >= 0) this.doChangeAnimFrame(); var now = this.getNowTime(); var cur_animation = this.cur_animation; var prev_frame = cur_animation.frames[this.cur_frame]; var next_frame; var cur_frame_time = prev_frame.duration / this.cur_anim_speed; if (this.animPlaying && now >= this.frameStart + cur_frame_time) { if (this.animForwards) { this.cur_frame++; } else { this.cur_frame--; } this.frameStart += cur_frame_time; if (this.cur_frame >= cur_animation.frames.length) { if (cur_animation.pingpong) { this.animForwards = false; this.cur_frame = cur_animation.frames.length - 2; } else if (cur_animation.loop) { this.cur_frame = cur_animation.repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(false); } else { this.cur_frame = cur_animation.repeatto; } } } if (this.cur_frame < 0) { if (cur_animation.pingpong) { this.cur_frame = 1; this.animForwards = true; if (!cur_animation.loop) { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } } } else { if (cur_animation.loop) { this.cur_frame = cur_animation.repeatto; } else { this.animRepeats++; if (this.animRepeats >= cur_animation.repeatcount) { this.animationFinish(true); } else { this.cur_frame = cur_animation.repeatto; } } } } if (this.cur_frame < 0) this.cur_frame = 0; else if (this.cur_frame >= cur_animation.frames.length) this.cur_frame = cur_animation.frames.length - 1; if (now > this.frameStart + (cur_animation.frames[this.cur_frame].duration / this.cur_anim_speed)) { this.frameStart = now; } next_frame = cur_animation.frames[this.cur_frame]; this.OnFrameChanged(prev_frame, next_frame); this.runtime.redraw = true; } }; instanceProto.getAnimationByName = function (name_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (cr.equals_nocase(a.name, name_)) return a; } return null; }; instanceProto.getAnimationBySid = function (sid_) { var i, len, a; for (i = 0, len = this.type.animations.length; i < len; i++) { a = this.type.animations[i]; if (a.sid === sid_) return a; } return null; }; instanceProto.doChangeAnim = function () { var prev_frame = this.cur_animation.frames[this.cur_frame]; var anim = this.getAnimationByName(this.changeAnimName); this.changeAnimName = ""; if (!anim) return; if (cr.equals_nocase(anim.name, this.cur_animation.name) && this.animPlaying) return; this.cur_animation = anim; this.cur_anim_speed = anim.speed; if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (this.changeAnimFrom === 1) this.cur_frame = 0; this.animPlaying = true; this.frameStart = this.getNowTime(); this.animForwards = true; this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.runtime.redraw = true; }; instanceProto.doChangeAnimFrame = function () { var prev_frame = this.cur_animation.frames[this.cur_frame]; var prev_frame_number = this.cur_frame; this.cur_frame = cr.floor(this.changeAnimFrame); if (this.cur_frame < 0) this.cur_frame = 0; if (this.cur_frame >= this.cur_animation.frames.length) this.cur_frame = this.cur_animation.frames.length - 1; if (prev_frame_number !== this.cur_frame) { this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]); this.frameStart = this.getNowTime(); this.runtime.redraw = true; } this.changeAnimFrame = -1; }; instanceProto.OnFrameChanged = function (prev_frame, next_frame) { var oldw = prev_frame.width; var oldh = prev_frame.height; var neww = next_frame.width; var newh = next_frame.height; if (oldw != neww) this.width *= (neww / oldw); if (oldh != newh) this.height *= (newh / oldh); this.hotspotX = next_frame.hotspotX; this.hotspotY = next_frame.hotspotY; this.collision_poly.set_pts(next_frame.poly_pts); this.set_bbox_changed(); this.curFrame = next_frame; this.curWebGLTexture = next_frame.webGL_texture; var i, len, b; for (i = 0, len = this.behavior_insts.length; i < len; i++) { b = this.behavior_insts[i]; if (b.onSpriteFrameChanged) b.onSpriteFrameChanged(prev_frame, next_frame); } this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnFrameChanged, this); }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; var cur_frame = this.curFrame; var spritesheeted = cur_frame.spritesheeted; var cur_image = cur_frame.texture_img; var myx = this.x; var myy = this.y; var w = this.width; var h = this.height; if (this.angle === 0 && w >= 0 && h >= 0) { myx -= this.hotspotX * w; myy -= this.hotspotY * h; if (this.runtime.pixel_rounding) { myx = (myx + 0.5) | 0; myy = (myy + 0.5) | 0; } if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, myx, myy, w, h); } else { ctx.drawImage(cur_image, myx, myy, w, h); } } else { if (this.runtime.pixel_rounding) { myx = (myx + 0.5) | 0; myy = (myy + 0.5) | 0; } ctx.save(); var widthfactor = w > 0 ? 1 : -1; var heightfactor = h > 0 ? 1 : -1; ctx.translate(myx, myy); if (widthfactor !== 1 || heightfactor !== 1) ctx.scale(widthfactor, heightfactor); ctx.rotate(this.angle * widthfactor * heightfactor); var drawx = 0 - (this.hotspotX * cr.abs(w)) var drawy = 0 - (this.hotspotY * cr.abs(h)); if (spritesheeted) { ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height, drawx, drawy, cr.abs(w), cr.abs(h)); } else { ctx.drawImage(cur_image, drawx, drawy, cr.abs(w), cr.abs(h)); } ctx.restore(); } /* ctx.strokeStyle = "#f00"; ctx.lineWidth = 3; ctx.beginPath(); this.collision_poly.cache_poly(this.width, this.height, this.angle); var i, len, ax, ay, bx, by; for (i = 0, len = this.collision_poly.pts_count; i < len; i++) { ax = this.collision_poly.pts_cache[i*2] + this.x; ay = this.collision_poly.pts_cache[i*2+1] + this.y; bx = this.collision_poly.pts_cache[((i+1)%len)*2] + this.x; by = this.collision_poly.pts_cache[((i+1)%len)*2+1] + this.y; ctx.moveTo(ax, ay); ctx.lineTo(bx, by); } ctx.stroke(); ctx.closePath(); */ /* if (this.behavior_insts.length >= 1 && this.behavior_insts[0].draw) { this.behavior_insts[0].draw(ctx); } */ }; instanceProto.drawGL = function(glw) { glw.setTexture(this.curWebGLTexture); glw.setOpacity(this.opacity); var cur_frame = this.curFrame; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = ((this.x + 0.5) | 0) - this.x; var oy = ((this.y + 0.5) | 0) - this.y; if (cur_frame.spritesheeted) glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, cur_frame.sheetTex); else glw.quad(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy); } else { if (cur_frame.spritesheeted) glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, cur_frame.sheetTex); else glw.quad(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly); } }; instanceProto.getImagePointIndexByName = function(name_) { var cur_frame = this.curFrame; var i, len; for (i = 0, len = cur_frame.image_points.length; i < len; i++) { if (cr.equals_nocase(name_, cur_frame.image_points[i][0])) return i; } return -1; }; instanceProto.getImagePoint = function(imgpt, getX) { var cur_frame = this.curFrame; var image_points = cur_frame.image_points; var index; if (cr.is_string(imgpt)) index = this.getImagePointIndexByName(imgpt); else index = imgpt - 1; // 0 is origin index = cr.floor(index); if (index < 0 || index >= image_points.length) return getX ? this.x : this.y; // return origin var x = (image_points[index][1] - cur_frame.hotspotX) * this.width; var y = image_points[index][2]; y = (y - cur_frame.hotspotY) * this.height; var cosa = Math.cos(this.angle); var sina = Math.sin(this.angle); var x_temp = (x * cosa) - (y * sina); y = (y * cosa) + (x * sina); x = x_temp; x += this.x; y += this.y; return getX ? x : y; }; function Cnds() {}; var arrCache = []; function allocArr() { if (arrCache.length) return arrCache.pop(); else return [0, 0, 0]; }; function freeArr(a) { a[0] = 0; a[1] = 0; a[2] = 0; arrCache.push(a); }; function makeCollKey(a, b) { if (a < b) return "" + a + "," + b; else return "" + b + "," + a; }; function collmemory_add(collmemory, a, b, tickcount) { var a_uid = a.uid; var b_uid = b.uid; var key = makeCollKey(a_uid, b_uid); if (collmemory.hasOwnProperty(key)) { collmemory[key][2] = tickcount; return; } var arr = allocArr(); arr[0] = a_uid; arr[1] = b_uid; arr[2] = tickcount; collmemory[key] = arr; }; function collmemory_remove(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { freeArr(collmemory[key]); delete collmemory[key]; } }; function collmemory_removeInstance(collmemory, inst) { var uid = inst.uid; var p, entry; for (p in collmemory) { if (collmemory.hasOwnProperty(p)) { entry = collmemory[p]; if (entry[0] === uid || entry[1] === uid) { freeArr(collmemory[p]); delete collmemory[p]; } } } }; var last_coll_tickcount = -2; function collmemory_has(collmemory, a, b) { var key = makeCollKey(a.uid, b.uid); if (collmemory.hasOwnProperty(key)) { last_coll_tickcount = collmemory[key][2]; return true; } else { last_coll_tickcount = -2; return false; } }; var candidates1 = []; Cnds.prototype.OnCollision = function (rtype) { if (!rtype) return false; var runtime = this.runtime; var cnd = runtime.getCurrentCondition(); var ltype = cnd.type; if (!cnd.extra.collmemory) { cnd.extra.collmemory = {}; runtime.addDestroyCallback((function (collmemory) { return function(inst) { collmemory_removeInstance(collmemory, inst); }; })(cnd.extra.collmemory)); } var collmemory = cnd.extra.collmemory; var lsol = ltype.getCurrentSol(); var rsol = rtype.getCurrentSol(); var linstances = lsol.getObjects(); var rinstances; var l, linst, r, rinst; var curlsol, currsol; var tickcount = this.runtime.tickcount; var lasttickcount = tickcount - 1; var exists, run; var current_event = runtime.getCurrentEventStack().current_event; var orblock = current_event.orblock; for (l = 0; l < linstances.length; l++) { linst = linstances[l]; if (rsol.select_all) { linst.update_bbox(); this.runtime.getCollisionCandidates(linst.layer, rtype, linst.bbox, candidates1); rinstances = candidates1; } else rinstances = rsol.getObjects(); for (r = 0; r < rinstances.length; r++) { rinst = rinstances[r]; if (runtime.testOverlap(linst, rinst) || runtime.checkRegisteredCollision(linst, rinst)) { exists = collmemory_has(collmemory, linst, rinst); run = (!exists || (last_coll_tickcount < lasttickcount)); collmemory_add(collmemory, linst, rinst, tickcount); if (run) { runtime.pushCopySol(current_event.solModifiers); curlsol = ltype.getCurrentSol(); currsol = rtype.getCurrentSol(); curlsol.select_all = false; currsol.select_all = false; if (ltype === rtype) { curlsol.instances.length = 2; // just use lsol, is same reference as rsol curlsol.instances[0] = linst; curlsol.instances[1] = rinst; ltype.applySolToContainer(); } else { curlsol.instances.length = 1; currsol.instances.length = 1; curlsol.instances[0] = linst; currsol.instances[0] = rinst; ltype.applySolToContainer(); rtype.applySolToContainer(); } current_event.retrigger(); runtime.popSol(current_event.solModifiers); } } else { collmemory_remove(collmemory, linst, rinst); } } candidates1.length = 0; } return false; }; var rpicktype = null; var rtopick = new cr.ObjectSet(); var needscollisionfinish = false; var candidates2 = []; function DoOverlapCondition(rtype, offx, offy) { if (!rtype) return false; var do_offset = (offx !== 0 || offy !== 0); var oldx, oldy, ret = false, r, lenr, rinst; var cnd = this.runtime.getCurrentCondition(); var ltype = cnd.type; var inverted = cnd.inverted; var rsol = rtype.getCurrentSol(); var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var rinstances; if (rsol.select_all) { this.update_bbox(); this.runtime.getCollisionCandidates(this.layer, rtype, this.bbox, candidates2); rinstances = candidates2; } else if (orblock) rinstances = rsol.else_instances; else rinstances = rsol.instances; rpicktype = rtype; needscollisionfinish = (ltype !== rtype && !inverted); if (do_offset) { oldx = this.x; oldy = this.y; this.x += offx; this.y += offy; this.set_bbox_changed(); } for (r = 0, lenr = rinstances.length; r < lenr; r++) { rinst = rinstances[r]; if (this.runtime.testOverlap(this, rinst)) { ret = true; if (inverted) break; if (ltype !== rtype) rtopick.add(rinst); } } if (do_offset) { this.x = oldx; this.y = oldy; this.set_bbox_changed(); } candidates2.length = 0; return ret; }; typeProto.finish = function (do_pick) { if (!needscollisionfinish) return; if (do_pick) { var orblock = this.runtime.getCurrentEventStack().current_event.orblock; var sol = rpicktype.getCurrentSol(); var topick = rtopick.valuesRef(); var i, len, inst; if (sol.select_all) { sol.select_all = false; sol.instances.length = topick.length; for (i = 0, len = topick.length; i < len; i++) { sol.instances[i] = topick[i]; } if (orblock) { sol.else_instances.length = 0; for (i = 0, len = rpicktype.instances.length; i < len; i++) { inst = rpicktype.instances[i]; if (!rtopick.contains(inst)) sol.else_instances.push(inst); } } } else { if (orblock) { var initsize = sol.instances.length; sol.instances.length = initsize + topick.length; for (i = 0, len = topick.length; i < len; i++) { sol.instances[initsize + i] = topick[i]; cr.arrayFindRemove(sol.else_instances, topick[i]); } } else { cr.shallowAssignArray(sol.instances, topick); } } rpicktype.applySolToContainer(); } rtopick.clear(); needscollisionfinish = false; }; Cnds.prototype.IsOverlapping = function (rtype) { return DoOverlapCondition.call(this, rtype, 0, 0); }; Cnds.prototype.IsOverlappingOffset = function (rtype, offx, offy) { return DoOverlapCondition.call(this, rtype, offx, offy); }; Cnds.prototype.IsAnimPlaying = function (animname) { if (this.changeAnimName.length) return cr.equals_nocase(this.changeAnimName, animname); else return cr.equals_nocase(this.cur_animation.name, animname); }; Cnds.prototype.CompareFrame = function (cmp, framenum) { return cr.do_cmp(this.cur_frame, cmp, framenum); }; Cnds.prototype.CompareAnimSpeed = function (cmp, x) { var s = (this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); return cr.do_cmp(s, cmp, x); }; Cnds.prototype.OnAnimFinished = function (animname) { return cr.equals_nocase(this.animTriggerName, animname); }; Cnds.prototype.OnAnyAnimFinished = function () { return true; }; Cnds.prototype.OnFrameChanged = function () { return true; }; Cnds.prototype.IsMirrored = function () { return this.width < 0; }; Cnds.prototype.IsFlipped = function () { return this.height < 0; }; Cnds.prototype.OnURLLoaded = function () { return true; }; Cnds.prototype.IsCollisionEnabled = function () { return this.collisionsEnabled; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Spawn = function (obj, layer, imgpt) { if (!obj || !layer) return; var inst = this.runtime.createInstance(obj, layer, this.getImagePoint(imgpt, true), this.getImagePoint(imgpt, false)); if (!inst) return; if (typeof inst.angle !== "undefined") { inst.angle = this.angle; inst.set_bbox_changed(); } this.runtime.isInOnDestroy++; var i, len, s; this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s); } } this.runtime.isInOnDestroy--; var cur_act = this.runtime.getCurrentAction(); var reset_sol = false; if (cr.is_undefined(cur_act.extra.Spawn_LastExec) || cur_act.extra.Spawn_LastExec < this.runtime.execcount) { reset_sol = true; cur_act.extra.Spawn_LastExec = this.runtime.execcount; } var sol; if (obj != this.type) { sol = obj.getCurrentSol(); sol.select_all = false; if (reset_sol) { sol.instances.length = 1; sol.instances[0] = inst; } else sol.instances.push(inst); if (inst.is_contained) { for (i = 0, len = inst.siblings.length; i < len; i++) { s = inst.siblings[i]; sol = s.type.getCurrentSol(); sol.select_all = false; if (reset_sol) { sol.instances.length = 1; sol.instances[0] = s; } else sol.instances.push(s); } } } }; Acts.prototype.SetEffect = function (effect) { this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.StopAnim = function () { this.animPlaying = false; }; Acts.prototype.StartAnim = function (from) { this.animPlaying = true; this.frameStart = this.getNowTime(); if (from === 1 && this.cur_frame !== 0) { this.changeAnimFrame = 0; if (!this.inAnimTrigger) this.doChangeAnimFrame(); } if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetAnim = function (animname, from) { this.changeAnimName = animname; this.changeAnimFrom = from; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnim(); }; Acts.prototype.SetAnimFrame = function (framenumber) { this.changeAnimFrame = framenumber; if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } if (!this.inAnimTrigger) this.doChangeAnimFrame(); }; Acts.prototype.SetAnimSpeed = function (s) { this.cur_anim_speed = cr.abs(s); this.animForwards = (s >= 0); if (!this.isTicking) { this.runtime.tickMe(this); this.isTicking = true; } }; Acts.prototype.SetMirrored = function (m) { var neww = cr.abs(this.width) * (m === 0 ? -1 : 1); if (this.width === neww) return; this.width = neww; this.set_bbox_changed(); }; Acts.prototype.SetFlipped = function (f) { var newh = cr.abs(this.height) * (f === 0 ? -1 : 1); if (this.height === newh) return; this.height = newh; this.set_bbox_changed(); }; Acts.prototype.SetScale = function (s) { var cur_frame = this.curFrame; var mirror_factor = (this.width < 0 ? -1 : 1); var flip_factor = (this.height < 0 ? -1 : 1); var new_width = cur_frame.width * s * mirror_factor; var new_height = cur_frame.height * s * flip_factor; if (this.width !== new_width || this.height !== new_height) { this.width = new_width; this.height = new_height; this.set_bbox_changed(); } }; Acts.prototype.LoadURL = function (url_, resize_) { var img = new Image(); var self = this; var curFrame_ = this.curFrame; img.onload = function () { if (curFrame_.texture_img.src === img.src) { if (self.runtime.glwrap && self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); return; } curFrame_.texture_img = img; curFrame_.offx = 0; curFrame_.offy = 0; curFrame_.width = img.width; curFrame_.height = img.height; curFrame_.spritesheeted = false; curFrame_.datauri = ""; if (self.runtime.glwrap) { if (curFrame_.webGL_texture) self.runtime.glwrap.deleteTexture(curFrame_.webGL_texture); curFrame_.webGL_texture = self.runtime.glwrap.loadTexture(img, false, self.runtime.linearSampling); if (self.curFrame === curFrame_) self.curWebGLTexture = curFrame_.webGL_texture; self.type.updateAllCurrentTexture(); } if (resize_ === 0) // resize to image size { self.width = img.width; self.height = img.height; self.set_bbox_changed(); } self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:") img.crossOrigin = 'anonymous'; img.src = url_; }; Acts.prototype.SetCollisions = function (set_) { if (this.collisionsEnabled === (set_ !== 0)) return; // no change this.collisionsEnabled = (set_ !== 0); if (this.collisionsEnabled) this.set_bbox_changed(); // needs to be added back to cells else { if (this.collcells.right >= this.collcells.left) this.type.collision_grid.update(this, this.collcells, null); this.collcells.set(0, 0, -1, -1); } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.AnimationFrame = function (ret) { ret.set_int(this.cur_frame); }; Exps.prototype.AnimationFrameCount = function (ret) { ret.set_int(this.cur_animation.frames.length); }; Exps.prototype.AnimationName = function (ret) { ret.set_string(this.cur_animation.name); }; Exps.prototype.AnimationSpeed = function (ret) { ret.set_float(this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed); }; Exps.prototype.ImagePointX = function (ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, true)); }; Exps.prototype.ImagePointY = function (ret, imgpt) { ret.set_float(this.getImagePoint(imgpt, false)); }; Exps.prototype.ImagePointCount = function (ret) { ret.set_int(this.curFrame.image_points.length); }; Exps.prototype.ImageWidth = function (ret) { ret.set_float(this.curFrame.width); }; Exps.prototype.ImageHeight = function (ret) { ret.set_float(this.curFrame.height); }; pluginProto.exps = new Exps(); }()); /* global cr,log,assert2 */ /* jshint globalstrict: true */ /* jshint strict: true */ ; ; cr.plugins_.Spritefont2 = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Spritefont2.prototype; pluginProto.onCreate = function () { }; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.texture_img["idtkLoadDisposed"] = true; this.texture_img.src = this.texture_file; this.runtime.waitForImageLoad(this.texture_img); this.webGL_texture = null; }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, false, this.runtime.linearSampling, this.texture_pixelformat); } var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].webGL_texture = this.webGL_texture; }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function (ctx) { ctx.drawImage(this.texture_img, 0, 0); }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onDestroy = function() { freeAllLines (this.lines); freeAllClip (this.clipList); freeAllClipUV(this.clipUV); cr.wipe(this.characterWidthList); }; instanceProto.onCreate = function() { this.texture_img = this.type.texture_img; this.characterWidth = this.properties[0]; this.characterHeight = this.properties[1]; this.characterSet = this.properties[2]; this.text = this.properties[3]; this.characterScale = this.properties[4]; this.visible = (this.properties[5] === 0); // 0=visible, 1=invisible this.halign = this.properties[6]/2.0; // 0=left, 1=center, 2=right this.valign = this.properties[7]/2.0; // 0=top, 1=center, 2=bottom this.wrapbyword = (this.properties[9] === 0); // 0=word, 1=character this.characterSpacing = this.properties[10]; this.lineHeight = this.properties[11]; this.textWidth = 0; this.textHeight = 0; if (this.recycled) { this.lines.length = 0; cr.wipe(this.clipList); cr.wipe(this.clipUV); cr.wipe(this.characterWidthList); } else { this.lines = []; this.clipList = {}; this.clipUV = {}; this.characterWidthList = {}; } this.text_changed = true; this.lastwrapwidth = this.width; if (this.runtime.glwrap) { if (!this.type.webGL_texture) { this.type.webGL_texture = this.runtime.glwrap.loadTexture(this.type.texture_img, false, this.runtime.linearSampling, this.type.texture_pixelformat); } this.webGL_texture = this.type.webGL_texture; } this.SplitSheet(); }; instanceProto.saveToJSON = function () { var save = { "t": this.text, "csc": this.characterScale, "csp": this.characterSpacing, "lh": this.lineHeight, "tw": this.textWidth, "th": this.textHeight, "lrt": this.last_render_tick, "cw": {} }; for (var ch in this.characterWidthList) save["cw"][ch] = this.characterWidthList[ch]; return save; }; instanceProto.loadFromJSON = function (o) { this.text = o["t"]; this.characterScale = o["csc"]; this.characterSpacing = o["csp"]; this.lineHeight = o["lh"]; this.textWidth = o["tw"]; this.textHeight = o["th"]; this.last_render_tick = o["lrt"]; for(var ch in o["cw"]) this.characterWidthList[ch] = o["cw"][ch]; this.text_changed = true; this.lastwrapwidth = this.width; }; function trimRight(text) { return text.replace(/\s\s*$/, ''); } var MAX_CACHE_SIZE = 1000; function alloc(cache,Constructor) { if (cache.length) return cache.pop(); else return new Constructor(); } function free(cache,data) { if (cache.length < MAX_CACHE_SIZE) { cache.push(data); } } function freeAll(cache,dataList,isArray) { if (isArray) { var i, len; for (i = 0, len = dataList.length; i < len; i++) { free(cache,dataList[i]); } dataList.length = 0; } else { var prop; for(prop in dataList) { if(Object.prototype.hasOwnProperty.call(dataList,prop)) { free(cache,dataList[prop]); delete dataList[prop]; } } } } function addLine(inst,lineIndex,cur_line) { var lines = inst.lines; var line; cur_line = trimRight(cur_line); if (lineIndex >= lines.length) lines.push(allocLine()); line = lines[lineIndex]; line.text = cur_line; line.width = inst.measureWidth(cur_line); inst.textWidth = cr.max(inst.textWidth,line.width); } var linesCache = []; function allocLine() { return alloc(linesCache,Object); } function freeLine(l) { free(linesCache,l); } function freeAllLines(arr) { freeAll(linesCache,arr,true); } function addClip(obj,property,x,y,w,h) { if (obj[property] === undefined) { obj[property] = alloc(clipCache,Object); } obj[property].x = x; obj[property].y = y; obj[property].w = w; obj[property].h = h; } var clipCache = []; function allocClip() { return alloc(clipCache,Object); } function freeAllClip(obj) { freeAll(clipCache,obj,false);} function addClipUV(obj,property,left,top,right,bottom) { if (obj[property] === undefined) { obj[property] = alloc(clipUVCache,cr.rect); } obj[property].left = left; obj[property].top = top; obj[property].right = right; obj[property].bottom = bottom; } var clipUVCache = []; function allocClipUV() { return alloc(clipUVCache,cr.rect);} function freeAllClipUV(obj) { freeAll(clipUVCache,obj,false);} instanceProto.SplitSheet = function() { var texture = this.texture_img; var texWidth = texture.width; var texHeight = texture.height; var charWidth = this.characterWidth; var charHeight = this.characterHeight; var charU = charWidth /texWidth; var charV = charHeight/texHeight; var charSet = this.characterSet ; var cols = Math.floor(texWidth/charWidth); var rows = Math.floor(texHeight/charHeight); for ( var c = 0; c < charSet.length; c++) { if (c >= cols * rows) break; var x = c%cols; var y = Math.floor(c/cols); var letter = charSet.charAt(c); if (this.runtime.glwrap) { addClipUV( this.clipUV, letter, x * charU , y * charV , (x+1) * charU , (y+1) * charV ); } else { addClip( this.clipList, letter, x * charWidth, y * charHeight, charWidth, charHeight ); } } }; /* * Word-Wrapping */ var wordsCache = []; pluginProto.TokeniseWords = function (text) { wordsCache.length = 0; var cur_word = ""; var ch; var i = 0; while (i < text.length) { ch = text.charAt(i); if (ch === "\n") { if (cur_word.length) { wordsCache.push(cur_word); cur_word = ""; } wordsCache.push("\n"); ++i; } else if (ch === " " || ch === "\t" || ch === "-") { do { cur_word += text.charAt(i); i++; } while (i < text.length && (text.charAt(i) === " " || text.charAt(i) === "\t")); wordsCache.push(cur_word); cur_word = ""; } else if (i < text.length) { cur_word += ch; i++; } } if (cur_word.length) wordsCache.push(cur_word); }; pluginProto.WordWrap = function (inst) { var text = inst.text; var lines = inst.lines; if (!text || !text.length) { freeAllLines(lines); return; } var width = inst.width; if (width <= 2.0) { freeAllLines(lines); return; } var charWidth = inst.characterWidth; var charScale = inst.characterScale; var charSpacing = inst.characterSpacing; if ( (text.length * (charWidth * charScale + charSpacing) - charSpacing) <= width && text.indexOf("\n") === -1) { var all_width = inst.measureWidth(text); if (all_width <= width) { freeAllLines(lines); lines.push(allocLine()); lines[0].text = text; lines[0].width = all_width; inst.textWidth = all_width; inst.textHeight = inst.characterHeight * charScale + inst.lineHeight; return; } } var wrapbyword = inst.wrapbyword; this.WrapText(inst); inst.textHeight = lines.length * (inst.characterHeight * charScale + inst.lineHeight); }; pluginProto.WrapText = function (inst) { var wrapbyword = inst.wrapbyword; var text = inst.text; var lines = inst.lines; var width = inst.width; var wordArray; if (wrapbyword) { this.TokeniseWords(text); // writes to wordsCache wordArray = wordsCache; } else { wordArray = text; } var cur_line = ""; var prev_line; var line_width; var i; var lineIndex = 0; var line; var ignore_newline = false; for (i = 0; i < wordArray.length; i++) { if (wordArray[i] === "\n") { if (ignore_newline === true) { ignore_newline = false; } else { addLine(inst,lineIndex,cur_line); lineIndex++; } cur_line = ""; continue; } ignore_newline = false; prev_line = cur_line; cur_line += wordArray[i]; line_width = inst.measureWidth(trimRight(cur_line)); if (line_width > width) { if (prev_line === "") { addLine(inst,lineIndex,cur_line); cur_line = ""; ignore_newline = true; } else { addLine(inst,lineIndex,prev_line); cur_line = wordArray[i]; } lineIndex++; if (!wrapbyword && cur_line === " ") cur_line = ""; } } if (trimRight(cur_line).length) { addLine(inst,lineIndex,cur_line); lineIndex++; } for (i = lineIndex; i < lines.length; i++) freeLine(lines[i]); lines.length = lineIndex; }; instanceProto.measureWidth = function(text) { var spacing = this.characterSpacing; var len = text.length; var width = 0; for (var i = 0; i < len; i++) { width += this.getCharacterWidth(text.charAt(i)) * this.characterScale + spacing; } width -= (width > 0) ? spacing : 0; return width; }; /***/ instanceProto.getCharacterWidth = function(character) { var widthList = this.characterWidthList; if (widthList[character] !== undefined) { return widthList[character]; } else { return this.characterWidth; } }; instanceProto.rebuildText = function() { if (this.text_changed || this.width !== this.lastwrapwidth) { this.textWidth = 0; this.textHeight = 0; this.type.plugin.WordWrap(this); this.text_changed = false; this.lastwrapwidth = this.width; } }; var EPSILON = 0.00001; instanceProto.draw = function(ctx, glmode) { var texture = this.texture_img; if (this.text !== "" && texture != null) { this.rebuildText(); if (this.height < this.characterHeight*this.characterScale + this.lineHeight) { return; } ctx.globalAlpha = this.opacity; var myx = this.x; var myy = this.y; if (this.runtime.pixel_rounding) { myx = (myx + 0.5) | 0; myy = (myy + 0.5) | 0; } var viewLeft = this.layer.viewLeft; var viewTop = this.layer.viewTop; var viewRight = this.layer.viewRight; var viewBottom = this.layer.viewBottom; ctx.save(); ctx.translate(myx, myy); ctx.rotate(this.angle); var ha = this.halign; var va = this.valign; var scale = this.characterScale; var charHeight = this.characterHeight * scale; var lineHeight = this.lineHeight; var charSpace = this.characterSpacing; var lines = this.lines; var textHeight = this.textHeight; var letterWidth; var halign; var valign = va * cr.max(0,(this.height - textHeight)); var offx = -(this.hotspotX * this.width); var offy = -(this.hotspotY * this.height); offy += valign; var drawX ; var drawY = offy; var roundX, roundY; for(var i = 0; i < lines.length; i++) { var line = lines[i].text; var len = lines[i].width; halign = ha * cr.max(0,this.width - len); drawX = offx + halign; drawY += lineHeight; if (myy + drawY + charHeight < viewTop) { drawY += charHeight; continue; } for(var j = 0; j < line.length; j++) { var letter = line.charAt(j); letterWidth = this.getCharacterWidth(letter); var clip = this.clipList[letter]; if (myx + drawX + letterWidth * scale + charSpace < viewLeft) { drawX += letterWidth * scale + charSpace; continue; } if ( drawX + letterWidth * scale > this.width + EPSILON ) { break; } if (clip !== undefined) { roundX = drawX; roundY = drawY; if (this.angle === 0) { roundX = Math.round(roundX); roundY = Math.round(roundY); } ctx.drawImage( this.texture_img, clip.x, clip.y, clip.w, clip.h, roundX,roundY,clip.w*scale,clip.h*scale); } drawX += letterWidth * scale + charSpace; if (myx + drawX > viewRight) break; } drawY += charHeight; if (drawY + charHeight + lineHeight > this.height || myy + drawY > viewBottom) { break; } } ctx.restore(); } }; var dQuad = new cr.quad(); function rotateQuad(quad,cosa,sina) { var x_temp; x_temp = (quad.tlx * cosa) - (quad.tly * sina); quad.tly = (quad.tly * cosa) + (quad.tlx * sina); quad.tlx = x_temp; x_temp = (quad.trx * cosa) - (quad.try_ * sina); quad.try_ = (quad.try_ * cosa) + (quad.trx * sina); quad.trx = x_temp; x_temp = (quad.blx * cosa) - (quad.bly * sina); quad.bly = (quad.bly * cosa) + (quad.blx * sina); quad.blx = x_temp; x_temp = (quad.brx * cosa) - (quad.bry * sina); quad.bry = (quad.bry * cosa) + (quad.brx * sina); quad.brx = x_temp; } instanceProto.drawGL = function(glw) { glw.setTexture(this.webGL_texture); glw.setOpacity(this.opacity); if (!this.text) return; this.rebuildText(); if (this.height < this.characterHeight*this.characterScale + this.lineHeight) { return; } this.update_bbox(); var q = this.bquad; var ox = 0; var oy = 0; if (this.runtime.pixel_rounding) { ox = ((this.x + 0.5) | 0) - this.x; oy = ((this.y + 0.5) | 0) - this.y; } var viewLeft = this.layer.viewLeft; var viewTop = this.layer.viewTop; var viewRight = this.layer.viewRight; var viewBottom = this.layer.viewBottom; var angle = this.angle; var ha = this.halign; var va = this.valign; var scale = this.characterScale; var charHeight = this.characterHeight * scale; // to precalculate in onCreate or on change var lineHeight = this.lineHeight; var charSpace = this.characterSpacing; var lines = this.lines; var textHeight = this.textHeight; var letterWidth; var cosa,sina; if (angle !== 0) { cosa = Math.cos(angle); sina = Math.sin(angle); } var halign; var valign = va * cr.max(0,(this.height - textHeight)); var offx = q.tlx + ox; var offy = q.tly + oy; var drawX ; var drawY = valign; var roundX, roundY; for(var i = 0; i < lines.length; i++) { var line = lines[i].text; var lineWidth = lines[i].width; halign = ha * cr.max(0,this.width - lineWidth); drawX = halign; drawY += lineHeight; if (offy + drawY + charHeight < viewTop) { drawY += charHeight; continue; } for(var j = 0; j < line.length; j++) { var letter = line.charAt(j); letterWidth = this.getCharacterWidth(letter); var clipUV = this.clipUV[letter]; if (offx + drawX + letterWidth * scale + charSpace < viewLeft) { drawX += letterWidth * scale + charSpace; continue; } if (drawX + letterWidth * scale > this.width + EPSILON) { break; } if (clipUV !== undefined) { var clipWidth = this.characterWidth*scale; var clipHeight = this.characterHeight*scale; roundX = drawX; roundY = drawY; if (angle === 0) { roundX = Math.round(roundX); roundY = Math.round(roundY); } dQuad.tlx = roundX; dQuad.tly = roundY; dQuad.trx = roundX + clipWidth; dQuad.try_ = roundY ; dQuad.blx = roundX; dQuad.bly = roundY + clipHeight; dQuad.brx = roundX + clipWidth; dQuad.bry = roundY + clipHeight; if(angle !== 0) { rotateQuad(dQuad,cosa,sina); } dQuad.offset(offx,offy); glw.quadTex( dQuad.tlx, dQuad.tly, dQuad.trx, dQuad.try_, dQuad.brx, dQuad.bry, dQuad.blx, dQuad.bly, clipUV ); } drawX += letterWidth * scale + charSpace; if (offx + drawX > viewRight) break; } drawY += charHeight; if (drawY + charHeight + lineHeight > this.height || offy + drawY > viewBottom) { break; } } }; function Cnds() {} Cnds.prototype.CompareText = function(text_to_compare, case_sensitive) { if (case_sensitive) return this.text == text_to_compare; else return cr.equals_nocase(this.text, text_to_compare); }; pluginProto.cnds = new Cnds(); function Acts() {} Acts.prototype.SetText = function(param) { if (cr.is_number(param) && param < 1e9) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_set = param.toString(); if (this.text !== text_to_set) { this.text = text_to_set; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.AppendText = function(param) { if (cr.is_number(param)) param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors var text_to_append = param.toString(); if (text_to_append) // not empty { this.text += text_to_append; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetScale = function(param) { if (param !== this.characterScale) { this.characterScale = param; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetCharacterSpacing = function(param) { if (param !== this.CharacterSpacing) { this.characterSpacing = param; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetLineHeight = function(param) { if (param !== this.lineHeight) { this.lineHeight = param; this.text_changed = true; this.runtime.redraw = true; } }; instanceProto.SetCharWidth = function(character,width) { var w = parseInt(width,10); if (this.characterWidthList[character] !== w) { this.characterWidthList[character] = w; this.text_changed = true; this.runtime.redraw = true; } }; Acts.prototype.SetCharacterWidth = function(characterSet,width) { if (characterSet !== "") { for(var c = 0; c < characterSet.length; c++) { this.SetCharWidth(characterSet.charAt(c),width); } } }; Acts.prototype.SetEffect = function (effect) { this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.SetHAlign = function (a) { this.halign = a / 2.0; this.text_changed = true; this.runtime.redraw = true; }; Acts.prototype.SetVAlign = function (a) { this.valign = a / 2.0; this.text_changed = true; this.runtime.redraw = true; }; pluginProto.acts = new Acts(); function Exps() {} Exps.prototype.CharacterWidth = function(ret,character) { ret.set_int(this.getCharacterWidth(character)); }; Exps.prototype.CharacterHeight = function(ret) { ret.set_int(this.characterHeight); }; Exps.prototype.CharacterScale = function(ret) { ret.set_float(this.characterScale); }; Exps.prototype.CharacterSpacing = function(ret) { ret.set_int(this.characterSpacing); }; Exps.prototype.LineHeight = function(ret) { ret.set_int(this.lineHeight); }; Exps.prototype.Text = function(ret) { ret.set_string(this.text); }; Exps.prototype.TextWidth = function (ret) { this.rebuildText(); ret.set_float(this.textWidth); }; Exps.prototype.TextHeight = function (ret) { this.rebuildText(); ret.set_float(this.textHeight); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.TiledBg = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.TiledBg.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { if (this.is_family) return; this.texture_img = new Image(); this.texture_img["idtkLoadDisposed"] = true; this.texture_img.src = this.texture_file; this.texture_img.cr_filesize = this.texture_filesize; this.runtime.waitForImageLoad(this.texture_img); this.pattern = null; this.webGL_texture = null; }; typeProto.onLostWebGLContext = function () { if (this.is_family) return; this.webGL_texture = null; }; typeProto.onRestoreWebGLContext = function () { if (this.is_family || !this.instances.length) return; if (!this.webGL_texture) { this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); } var i, len; for (i = 0, len = this.instances.length; i < len; i++) this.instances[i].webGL_texture = this.webGL_texture; }; typeProto.loadTextures = function () { if (this.is_family || this.webGL_texture || !this.runtime.glwrap) return; this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat); }; typeProto.unloadTextures = function () { if (this.is_family || this.instances.length || !this.webGL_texture) return; this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; }; typeProto.preloadCanvas2D = function (ctx) { ctx.drawImage(this.texture_img, 0, 0); }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; instanceProto.onCreate = function() { this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible this.rcTex = new cr.rect(0, 0, 0, 0); this.has_own_texture = false; // true if a texture loaded in from URL this.texture_img = this.type.texture_img; if (this.runtime.glwrap) { this.type.loadTextures(); this.webGL_texture = this.type.webGL_texture; } else { if (!this.type.pattern) this.type.pattern = this.runtime.ctx.createPattern(this.type.texture_img, "repeat"); this.pattern = this.type.pattern; } }; instanceProto.afterLoad = function () { this.has_own_texture = false; this.texture_img = this.type.texture_img; }; instanceProto.onDestroy = function () { if (this.runtime.glwrap && this.has_own_texture && this.webGL_texture) { this.runtime.glwrap.deleteTexture(this.webGL_texture); this.webGL_texture = null; } }; instanceProto.draw = function(ctx) { ctx.globalAlpha = this.opacity; ctx.save(); ctx.fillStyle = this.pattern; var myx = this.x; var myy = this.y; if (this.runtime.pixel_rounding) { myx = (myx + 0.5) | 0; myy = (myy + 0.5) | 0; } var drawX = -(this.hotspotX * this.width); var drawY = -(this.hotspotY * this.height); var offX = drawX % this.texture_img.width; var offY = drawY % this.texture_img.height; if (offX < 0) offX += this.texture_img.width; if (offY < 0) offY += this.texture_img.height; ctx.translate(myx, myy); ctx.rotate(this.angle); ctx.translate(offX, offY); ctx.fillRect(drawX - offX, drawY - offY, this.width, this.height); ctx.restore(); }; instanceProto.drawGL = function(glw) { glw.setTexture(this.webGL_texture); glw.setOpacity(this.opacity); var rcTex = this.rcTex; rcTex.right = this.width / this.texture_img.width; rcTex.bottom = this.height / this.texture_img.height; var q = this.bquad; if (this.runtime.pixel_rounding) { var ox = ((this.x + 0.5) | 0) - this.x; var oy = ((this.y + 0.5) | 0) - this.y; glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, rcTex); } else glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, rcTex); }; function Cnds() {}; Cnds.prototype.OnURLLoaded = function () { return true; }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetEffect = function (effect) { this.compositeOp = cr.effectToCompositeOp(effect); cr.setGLBlend(this, effect, this.runtime.gl); this.runtime.redraw = true; }; Acts.prototype.LoadURL = function (url_) { var img = new Image(); var self = this; img.onload = function () { self.texture_img = img; if (self.runtime.glwrap) { if (self.has_own_texture && self.webGL_texture) self.runtime.glwrap.deleteTexture(self.webGL_texture); self.webGL_texture = self.runtime.glwrap.loadTexture(img, true, self.runtime.linearSampling); } else { self.pattern = self.runtime.ctx.createPattern(img, "repeat"); } self.has_own_texture = true; self.runtime.redraw = true; self.runtime.trigger(cr.plugins_.TiledBg.prototype.cnds.OnURLLoaded, self); }; if (url_.substr(0, 5) !== "data:") img.crossOrigin = 'anonymous'; img.src = url_; }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.ImageWidth = function (ret) { ret.set_float(this.texture_img.width); }; Exps.prototype.ImageHeight = function (ret) { ret.set_float(this.texture_img.height); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.Touch = function(runtime) { this.runtime = runtime; }; (function () { var pluginProto = cr.plugins_.Touch.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; this.touches = []; this.mouseDown = false; }; var instanceProto = pluginProto.Instance.prototype; var dummyoffset = {left: 0, top: 0}; instanceProto.findTouch = function (id) { var i, len; for (i = 0, len = this.touches.length; i < len; i++) { if (this.touches[i]["id"] === id) return i; } return -1; }; var appmobi_accx = 0; var appmobi_accy = 0; var appmobi_accz = 0; function AppMobiGetAcceleration(evt) { appmobi_accx = evt.x; appmobi_accy = evt.y; appmobi_accz = evt.z; }; var pg_accx = 0; var pg_accy = 0; var pg_accz = 0; function PhoneGapGetAcceleration(evt) { pg_accx = evt.x; pg_accy = evt.y; pg_accz = evt.z; }; var theInstance = null; var touchinfo_cache = []; function AllocTouchInfo(x, y, id, index) { var ret; if (touchinfo_cache.length) ret = touchinfo_cache.pop(); else ret = new TouchInfo(); ret.init(x, y, id, index); return ret; }; function ReleaseTouchInfo(ti) { if (touchinfo_cache.length < 100) touchinfo_cache.push(ti); }; var GESTURE_HOLD_THRESHOLD = 15; // max px motion for hold gesture to register var GESTURE_HOLD_TIMEOUT = 500; // time for hold gesture to register var GESTURE_TAP_TIMEOUT = 333; // time for tap gesture to register var GESTURE_DOUBLETAP_THRESHOLD = 25; // max distance apart for taps to be function TouchInfo() { this.starttime = 0; this.time = 0; this.lasttime = 0; this.startx = 0; this.starty = 0; this.x = 0; this.y = 0; this.lastx = 0; this.lasty = 0; this["id"] = 0; this.startindex = 0; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.init = function (x, y, id, index) { var nowtime = cr.performance_now(); this.time = nowtime; this.lasttime = nowtime; this.starttime = nowtime; this.startx = x; this.starty = y; this.x = x; this.y = y; this.lastx = x; this.lasty = y; this["id"] = id; this.startindex = index; this.triggeredHold = false; this.tooFarForHold = false; }; TouchInfo.prototype.update = function (nowtime, x, y) { this.lasttime = this.time; this.time = nowtime; this.lastx = this.x; this.lasty = this.y; this.x = x; this.y = y; if (!this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) >= GESTURE_HOLD_THRESHOLD) { this.tooFarForHold = true; } }; TouchInfo.prototype.maybeTriggerHold = function (inst, index) { if (this.triggeredHold) return; // already triggered this gesture var nowtime = cr.performance_now(); if (nowtime - this.starttime >= GESTURE_HOLD_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { this.triggeredHold = true; inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnHoldGestureObject, inst); inst.getTouchIndex = 0; } }; var lastTapX = -1000; var lastTapY = -1000; var lastTapTime = -10000; TouchInfo.prototype.maybeTriggerTap = function (inst, index) { if (this.triggeredHold) return; var nowtime = cr.performance_now(); if (nowtime - this.starttime <= GESTURE_TAP_TIMEOUT && !this.tooFarForHold && cr.distanceTo(this.startx, this.starty, this.x, this.y) < GESTURE_HOLD_THRESHOLD) { inst.trigger_index = this.startindex; inst.trigger_id = this["id"]; inst.getTouchIndex = index; if ((nowtime - lastTapTime <= GESTURE_TAP_TIMEOUT * 2) && cr.distanceTo(lastTapX, lastTapY, this.x, this.y) < GESTURE_DOUBLETAP_THRESHOLD) { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnDoubleTapGestureObject, inst); lastTapX = -1000; lastTapY = -1000; lastTapTime = -10000; } else { inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGesture, inst); inst.curTouchX = this.x; inst.curTouchY = this.y; inst.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTapGestureObject, inst); lastTapX = this.x; lastTapY = this.y; lastTapTime = nowtime; } inst.getTouchIndex = 0; } }; instanceProto.onCreate = function() { theInstance = this; this.isWindows8 = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]); this.orient_alpha = 0; this.orient_beta = 0; this.orient_gamma = 0; this.acc_g_x = 0; this.acc_g_y = 0; this.acc_g_z = 0; this.acc_x = 0; this.acc_y = 0; this.acc_z = 0; this.curTouchX = 0; this.curTouchY = 0; this.trigger_index = 0; this.trigger_id = 0; this.getTouchIndex = 0; this.useMouseInput = (this.properties[0] !== 0); var elem = (this.runtime.fullscreen_mode > 0) ? document : this.runtime.canvas; var elem2 = document; if (this.runtime.isDirectCanvas) elem2 = elem = window["Canvas"]; else if (this.runtime.isCocoonJs) elem2 = elem = window; var self = this; if (window.navigator["pointerEnabled"]) { elem.addEventListener("pointerdown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("pointermove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("pointerup", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("pointercancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); this.runtime.canvas.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); document.addEventListener("gesturehold", function(e) { e.preventDefault(); }, false); } } else if (window.navigator["msPointerEnabled"]) { elem.addEventListener("MSPointerDown", function(info) { self.onPointerStart(info); }, false ); elem.addEventListener("MSPointerMove", function(info) { self.onPointerMove(info); }, false ); elem2.addEventListener("MSPointerUp", function(info) { self.onPointerEnd(info, false); }, false ); elem2.addEventListener("MSPointerCancel", function(info) { self.onPointerEnd(info, true); }, false ); if (this.runtime.canvas) { this.runtime.canvas.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); document.addEventListener("MSGestureHold", function(e) { e.preventDefault(); }, false); } } else { elem.addEventListener("touchstart", function(info) { self.onTouchStart(info); }, false ); elem.addEventListener("touchmove", function(info) { self.onTouchMove(info); }, false ); elem2.addEventListener("touchend", function(info) { self.onTouchEnd(info, false); }, false ); elem2.addEventListener("touchcancel", function(info) { self.onTouchEnd(info, true); }, false ); } if (this.isWindows8) { var win8accelerometerFn = function(e) { var reading = e["reading"]; self.acc_x = reading["accelerationX"]; self.acc_y = reading["accelerationY"]; self.acc_z = reading["accelerationZ"]; }; var win8inclinometerFn = function(e) { var reading = e["reading"]; self.orient_alpha = reading["yawDegrees"]; self.orient_beta = reading["pitchDegrees"]; self.orient_gamma = reading["rollDegrees"]; }; var accelerometer = Windows["Devices"]["Sensors"]["Accelerometer"]["getDefault"](); if (accelerometer) { accelerometer["reportInterval"] = Math.max(accelerometer["minimumReportInterval"], 16); accelerometer.addEventListener("readingchanged", win8accelerometerFn); } var inclinometer = Windows["Devices"]["Sensors"]["Inclinometer"]["getDefault"](); if (inclinometer) { inclinometer["reportInterval"] = Math.max(inclinometer["minimumReportInterval"], 16); inclinometer.addEventListener("readingchanged", win8inclinometerFn); } document.addEventListener("visibilitychange", function(e) { if (document["hidden"] || document["msHidden"]) { if (accelerometer) accelerometer.removeEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.removeEventListener("readingchanged", win8inclinometerFn); } else { if (accelerometer) accelerometer.addEventListener("readingchanged", win8accelerometerFn); if (inclinometer) inclinometer.addEventListener("readingchanged", win8inclinometerFn); } }, false); } else { window.addEventListener("deviceorientation", function (eventData) { self.orient_alpha = eventData["alpha"] || 0; self.orient_beta = eventData["beta"] || 0; self.orient_gamma = eventData["gamma"] || 0; }, false); window.addEventListener("devicemotion", function (eventData) { if (eventData["accelerationIncludingGravity"]) { self.acc_g_x = eventData["accelerationIncludingGravity"]["x"] || 0; self.acc_g_y = eventData["accelerationIncludingGravity"]["y"] || 0; self.acc_g_z = eventData["accelerationIncludingGravity"]["z"] || 0; } if (eventData["acceleration"]) { self.acc_x = eventData["acceleration"]["x"] || 0; self.acc_y = eventData["acceleration"]["y"] || 0; self.acc_z = eventData["acceleration"]["z"] || 0; } }, false); } if (this.useMouseInput && !this.runtime.isDomFree) { jQuery(document).mousemove( function(info) { self.onMouseMove(info); } ); jQuery(document).mousedown( function(info) { self.onMouseDown(info); } ); jQuery(document).mouseup( function(info) { self.onMouseUp(info); } ); } if (this.runtime.isAppMobi && !this.runtime.isDirectCanvas) { AppMobi["accelerometer"]["watchAcceleration"](AppMobiGetAcceleration, { "frequency": 40, "adjustForRotation": true }); } if (this.runtime.isPhoneGap && navigator["accelerometer"] && navigator["accelerometer"]["watchAcceleration"]) { navigator["accelerometer"]["watchAcceleration"](PhoneGapGetAcceleration, null, { "frequency": 40 }); } this.runtime.tick2Me(this); }; instanceProto.onPointerMove = function (info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault) info.preventDefault(); var i = this.findTouch(info["pointerId"]); var nowtime = cr.performance_now(); if (i >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var t = this.touches[i]; if (nowtime - t.time < 2) return; t.update(nowtime, info.pageX - offset.left, info.pageY - offset.top); } }; instanceProto.onPointerStart = function (info) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var touchx = info.pageX - offset.left; var touchy = info.pageY - offset.top; var nowtime = cr.performance_now(); this.trigger_index = this.touches.length; this.trigger_id = info["pointerId"]; this.touches.push(AllocTouchInfo(touchx, touchy, info["pointerId"], this.trigger_index)); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); this.runtime.isInUserInputEvent = false; }; instanceProto.onPointerEnd = function (info, isCancel) { if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse") return; if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var i = this.findTouch(info["pointerId"]); this.trigger_index = (i >= 0 ? this.touches[i].startindex : -1); this.trigger_id = (i >= 0 ? this.touches[i]["id"] : -1); this.runtime.isInUserInputEvent = true; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (i >= 0) { if (!isCancel) this.touches[i].maybeTriggerTap(this, i); ReleaseTouchInfo(this.touches[i]); this.touches.splice(i, 1); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchMove = function (info) { if (info.preventDefault) info.preventDefault(); var nowtime = cr.performance_now(); var i, len, t, u; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; var j = this.findTouch(t["identifier"]); if (j >= 0) { var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); u = this.touches[j]; if (nowtime - u.time < 2) continue; u.update(nowtime, t.pageX - offset.left, t.pageY - offset.top); } } }; instanceProto.onTouchStart = function (info) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset(); var nowtime = cr.performance_now(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j !== -1) continue; var touchx = t.pageX - offset.left; var touchy = t.pageY - offset.top; this.trigger_index = this.touches.length; this.trigger_id = t["identifier"]; this.touches.push(AllocTouchInfo(touchx, touchy, t["identifier"], this.trigger_index)); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this); this.curTouchX = touchx; this.curTouchY = touchy; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this); } this.runtime.isInUserInputEvent = false; }; instanceProto.onTouchEnd = function (info, isCancel) { if (info.preventDefault && cr.isCanvasInputEvent(info)) info.preventDefault(); this.runtime.isInUserInputEvent = true; var i, len, t, j; for (i = 0, len = info.changedTouches.length; i < len; i++) { t = info.changedTouches[i]; j = this.findTouch(t["identifier"]); if (j >= 0) { this.trigger_index = this.touches[j].startindex; this.trigger_id = this.touches[j]["id"]; this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this); this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this); if (!isCancel) this.touches[j].maybeTriggerTap(this, j); ReleaseTouchInfo(this.touches[j]); this.touches.splice(j, 1); } } this.runtime.isInUserInputEvent = false; }; instanceProto.getAlpha = function () { if (this.runtime.isAppMobi && this.orient_alpha === 0 && appmobi_accz !== 0) return appmobi_accz * 90; else if (this.runtime.isPhoneGap && this.orient_alpha === 0 && pg_accz !== 0) return pg_accz * 90; else return this.orient_alpha; }; instanceProto.getBeta = function () { if (this.runtime.isAppMobi && this.orient_beta === 0 && appmobi_accy !== 0) return appmobi_accy * -90; else if (this.runtime.isPhoneGap && this.orient_beta === 0 && pg_accy !== 0) return pg_accy * -90; else return this.orient_beta; }; instanceProto.getGamma = function () { if (this.runtime.isAppMobi && this.orient_gamma === 0 && appmobi_accx !== 0) return appmobi_accx * 90; else if (this.runtime.isPhoneGap && this.orient_gamma === 0 && pg_accx !== 0) return pg_accx * 90; else return this.orient_gamma; }; var noop_func = function(){}; instanceProto.onMouseDown = function(info) { if (info.preventDefault && this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchStart(fakeinfo); this.mouseDown = true; }; instanceProto.onMouseMove = function(info) { if (!this.mouseDown) return; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchMove(fakeinfo); }; instanceProto.onMouseUp = function(info) { if (info.preventDefault && this.runtime.had_a_click && !this.runtime.isMobile) info.preventDefault(); this.runtime.had_a_click = true; var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 }; var fakeinfo = { changedTouches: [t] }; this.onTouchEnd(fakeinfo); this.mouseDown = false; }; instanceProto.tick2 = function() { var i, len, t; var nowtime = cr.performance_now(); for (i = 0, len = this.touches.length; i < len; ++i) { t = this.touches[i]; if (t.time <= nowtime - 50) t.lasttime = nowtime; t.maybeTriggerHold(this, i); } }; function Cnds() {}; Cnds.prototype.OnTouchStart = function () { return true; }; Cnds.prototype.OnTouchEnd = function () { return true; }; Cnds.prototype.IsInTouch = function () { return this.touches.length; }; Cnds.prototype.OnTouchObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; var touching = []; Cnds.prototype.IsTouchingObject = function (type) { if (!type) return false; var sol = type.getCurrentSol(); var instances = sol.getObjects(); var px, py; var i, leni, j, lenj; for (i = 0, leni = instances.length; i < leni; i++) { var inst = instances[i]; inst.update_bbox(); for (j = 0, lenj = this.touches.length; j < lenj; j++) { var touch = this.touches[j]; px = inst.layer.canvasToLayer(touch.x, touch.y, true); py = inst.layer.canvasToLayer(touch.x, touch.y, false); if (inst.contains_pt(px, py)) { touching.push(inst); break; } } } if (touching.length) { sol.select_all = false; cr.shallowAssignArray(sol.instances, touching); type.applySolToContainer(); touching.length = 0; return true; } else return false; }; Cnds.prototype.CompareTouchSpeed = function (index, cmp, s) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) return false; var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; var speed = 0; if (timediff > 0) speed = dist / timediff; return cr.do_cmp(speed, cmp, s); }; Cnds.prototype.OrientationSupported = function () { return typeof window["DeviceOrientationEvent"] !== "undefined"; }; Cnds.prototype.MotionSupported = function () { return typeof window["DeviceMotionEvent"] !== "undefined"; }; Cnds.prototype.CompareOrientation = function (orientation_, cmp_, angle_) { var v = 0; if (orientation_ === 0) v = this.getAlpha(); else if (orientation_ === 1) v = this.getBeta(); else v = this.getGamma(); return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.CompareAcceleration = function (acceleration_, cmp_, angle_) { var v = 0; if (acceleration_ === 0) v = this.acc_g_x; else if (acceleration_ === 1) v = this.acc_g_y; else if (acceleration_ === 2) v = this.acc_g_z; else if (acceleration_ === 3) v = this.acc_x; else if (acceleration_ === 4) v = this.acc_y; else if (acceleration_ === 5) v = this.acc_z; return cr.do_cmp(v, cmp_, angle_); }; Cnds.prototype.OnNthTouchStart = function (touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.OnNthTouchEnd = function (touch_) { touch_ = Math.floor(touch_); return touch_ === this.trigger_index; }; Cnds.prototype.HasNthTouch = function (touch_) { touch_ = Math.floor(touch_); return this.touches.length >= touch_ + 1; }; Cnds.prototype.OnHoldGesture = function () { return true; }; Cnds.prototype.OnTapGesture = function () { return true; }; Cnds.prototype.OnDoubleTapGesture = function () { return true; }; Cnds.prototype.OnHoldGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnTapGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; Cnds.prototype.OnDoubleTapGestureObject = function (type) { if (!type) return false; return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false); }; pluginProto.cnds = new Cnds(); function Exps() {}; Exps.prototype.TouchCount = function (ret) { ret.set_int(this.touches.length); }; Exps.prototype.X = function (ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XAt = function (ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true)); else ret.set_float(0); } }; Exps.prototype.XForID = function (ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxX = layer.parallaxX; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxX = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxX = oldParallaxX; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, true)); else ret.set_float(0); } }; Exps.prototype.Y = function (ret, layerparam) { var index = this.getTouchIndex; if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YAt = function (ret, index, layerparam) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false)); else ret.set_float(0); } }; Exps.prototype.YForID = function (ret, id, layerparam) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle; if (cr.is_undefined(layerparam)) { layer = this.runtime.getLayerByNumber(0); oldScale = layer.scale; oldZoomRate = layer.zoomRate; oldParallaxY = layer.parallaxY; oldAngle = layer.angle; layer.scale = this.runtime.running_layout.scale; layer.zoomRate = 1.0; layer.parallaxY = 1.0; layer.angle = this.runtime.running_layout.angle; ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); layer.scale = oldScale; layer.zoomRate = oldZoomRate; layer.parallaxY = oldParallaxY; layer.angle = oldAngle; } else { if (cr.is_number(layerparam)) layer = this.runtime.getLayerByNumber(layerparam); else layer = this.runtime.getLayerByName(layerparam); if (layer) ret.set_float(layer.canvasToLayer(touch.x, touch.y, false)); else ret.set_float(0); } }; Exps.prototype.AbsoluteX = function (ret) { if (this.touches.length) ret.set_float(this.touches[0].x); else ret.set_float(0); }; Exps.prototype.AbsoluteXAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].x); }; Exps.prototype.AbsoluteXForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.x); }; Exps.prototype.AbsoluteY = function (ret) { if (this.touches.length) ret.set_float(this.touches[0].y); else ret.set_float(0); }; Exps.prototype.AbsoluteYAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } ret.set_float(this.touches[index].y); }; Exps.prototype.AbsoluteYForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(touch.y); }; Exps.prototype.SpeedAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty); var timediff = (t.time - t.lasttime) / 1000; if (timediff === 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.SpeedForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; var dist = cr.distanceTo(touch.x, touch.y, touch.lastx, touch.lasty); var timediff = (touch.time - touch.lasttime) / 1000; if (timediff === 0) ret.set_float(0); else ret.set_float(dist / timediff); }; Exps.prototype.AngleAt = function (ret, index) { index = Math.floor(index); if (index < 0 || index >= this.touches.length) { ret.set_float(0); return; } var t = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(t.lastx, t.lasty, t.x, t.y))); }; Exps.prototype.AngleForID = function (ret, id) { var index = this.findTouch(id); if (index < 0) { ret.set_float(0); return; } var touch = this.touches[index]; ret.set_float(cr.to_degrees(cr.angleTo(touch.lastx, touch.lasty, touch.x, touch.y))); }; Exps.prototype.Alpha = function (ret) { ret.set_float(this.getAlpha()); }; Exps.prototype.Beta = function (ret) { ret.set_float(this.getBeta()); }; Exps.prototype.Gamma = function (ret) { ret.set_float(this.getGamma()); }; Exps.prototype.AccelerationXWithG = function (ret) { ret.set_float(this.acc_g_x); }; Exps.prototype.AccelerationYWithG = function (ret) { ret.set_float(this.acc_g_y); }; Exps.prototype.AccelerationZWithG = function (ret) { ret.set_float(this.acc_g_z); }; Exps.prototype.AccelerationX = function (ret) { ret.set_float(this.acc_x); }; Exps.prototype.AccelerationY = function (ret) { ret.set_float(this.acc_y); }; Exps.prototype.AccelerationZ = function (ret) { ret.set_float(this.acc_z); }; Exps.prototype.TouchIndex = function (ret) { ret.set_int(this.trigger_index); }; Exps.prototype.TouchID = function (ret) { ret.set_float(this.trigger_id); }; pluginProto.exps = new Exps(); }()); ; ; cr.plugins_.WebStorage = function(runtime) { this.runtime = runtime; }; (function() { var pluginProto = cr.plugins_.WebStorage.prototype; pluginProto.Type = function(plugin) { this.plugin = plugin; this.runtime = plugin.runtime; }; var typeProto = pluginProto.Type.prototype; typeProto.onCreate = function() { }; pluginProto.Instance = function(type) { this.type = type; this.runtime = type.runtime; }; var instanceProto = pluginProto.Instance.prototype; var prefix = ""; var is_arcade = (typeof window["is_scirra_arcade"] !== "undefined"); if (is_arcade) prefix = "arcade" + window["scirra_arcade_id"]; var logged_sessionnotsupported = false; function LogSessionNotSupported() { if (logged_sessionnotsupported) return; cr.logexport("[Construct 2] Webstorage plugin: session storage is not supported on this platform. Try using local storage or global variables instead."); logged_sessionnotsupported = true; }; instanceProto.onCreate = function() { }; function Cnds() {}; Cnds.prototype.LocalStorageEnabled = function() { return true; }; Cnds.prototype.SessionStorageEnabled = function() { return true; }; Cnds.prototype.LocalStorageExists = function(key) { return localStorage.getItem(prefix + key) != null; }; Cnds.prototype.SessionStorageExists = function(key) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); return false; } return sessionStorage.getItem(prefix + key) != null; }; Cnds.prototype.OnQuotaExceeded = function () { return true; }; Cnds.prototype.CompareKeyText = function (key, text_to_compare, case_sensitive) { var value = localStorage.getItem(prefix + key) || ""; if (case_sensitive) return value == text_to_compare; else return cr.equals_nocase(value, text_to_compare); }; Cnds.prototype.CompareKeyNumber = function (key, cmp, x) { var value = localStorage.getItem(prefix + key) || ""; return cr.do_cmp(parseFloat(value), cmp, x); }; pluginProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StoreLocal = function(key, data) { try { localStorage.setItem(prefix + key, data); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); } }; Acts.prototype.StoreSession = function(key,data) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); return; } try { sessionStorage.setItem(prefix + key, data); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); } }; Acts.prototype.RemoveLocal = function(key) { localStorage.removeItem(prefix + key); }; Acts.prototype.RemoveSession = function(key) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); return; } sessionStorage.removeItem(prefix + key); }; Acts.prototype.ClearLocal = function() { if (!is_arcade) localStorage.clear(); }; Acts.prototype.ClearSession = function() { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); return; } if (!is_arcade) sessionStorage.clear(); }; Acts.prototype.JSONLoad = function (json_, mode_) { var d; try { d = JSON.parse(json_); } catch(e) { return; } if (!d["c2dictionary"]) // presumably not a c2dictionary object return; var o = d["data"]; if (mode_ === 0 && !is_arcade) // 'set' mode: must clear webstorage first localStorage.clear(); var p; for (p in o) { if (o.hasOwnProperty(p)) { try { localStorage.setItem(prefix + p, o[p]); } catch (e) { this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this); return; } } } }; pluginProto.acts = new Acts(); function Exps() {}; Exps.prototype.LocalValue = function(ret,key) { ret.set_string(localStorage.getItem(prefix + key) || ""); }; Exps.prototype.SessionValue = function(ret,key) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); ret.set_string(""); return; } ret.set_string(sessionStorage.getItem(prefix + key) || ""); }; Exps.prototype.LocalCount = function(ret) { ret.set_int(is_arcade ? 0 : localStorage.length); }; Exps.prototype.SessionCount = function(ret) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); ret.set_int(0); return; } ret.set_int(is_arcade ? 0 : sessionStorage.length); }; Exps.prototype.LocalAt = function(ret,n) { if (is_arcade) ret.set_string(""); else ret.set_string(localStorage.getItem(localStorage.key(n)) || ""); }; Exps.prototype.SessionAt = function(ret,n) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); ret.set_string(""); return; } if (is_arcade) ret.set_string(""); else ret.set_string(sessionStorage.getItem(sessionStorage.key(n)) || ""); }; Exps.prototype.LocalKeyAt = function(ret,n) { if (is_arcade) ret.set_string(""); else ret.set_string(localStorage.key(n) || ""); }; Exps.prototype.SessionKeyAt = function(ret,n) { if (this.runtime.isCocoonJs || !sessionStorage) { LogSessionNotSupported(); ret.set_string(""); return; } if (is_arcade) ret.set_string(""); else ret.set_string(sessionStorage.key(n) || ""); }; Exps.prototype.AsJSON = function (ret) { var o = {}, i, len, k; for (i = 0, len = localStorage.length; i < len; i++) { k = localStorage.key(i); if (is_arcade) { if (k.substr(0, prefix.length) === prefix) { o[k.substr(prefix.length)] = localStorage.getItem(k); } } else o[k] = localStorage.getItem(k); } ret.set_string(JSON.stringify({ "c2dictionary": true, "data": o })); }; pluginProto.exps = new Exps(); }()); ; ; cr.behaviors.Bullet = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Bullet.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { var speed = this.properties[0]; this.acc = this.properties[1]; this.g = this.properties[2]; this.bounceOffSolid = (this.properties[3] !== 0); this.setAngle = (this.properties[4] !== 0); this.dx = Math.cos(this.inst.angle) * speed; this.dy = Math.sin(this.inst.angle) * speed; this.lastx = this.inst.x; this.lasty = this.inst.y; this.lastKnownAngle = this.inst.angle; this.travelled = 0; this.enabled = (this.properties[5] !== 0); }; behinstProto.saveToJSON = function () { return { "acc": this.acc, "g": this.g, "dx": this.dx, "dy": this.dy, "lx": this.lastx, "ly": this.lasty, "lka": this.lastKnownAngle, "t": this.travelled, "e": this.enabled }; }; behinstProto.loadFromJSON = function (o) { this.acc = o["acc"]; this.g = o["g"]; this.dx = o["dx"]; this.dy = o["dy"]; this.lastx = o["lx"]; this.lasty = o["ly"]; this.lastKnownAngle = o["lka"]; this.travelled = o["t"]; this.enabled = o["e"]; }; behinstProto.tick = function () { if (!this.enabled) return; var dt = this.runtime.getDt(this.inst); var s, a; var bounceSolid, bounceAngle; if (this.inst.angle !== this.lastKnownAngle) { if (this.setAngle) { s = cr.distanceTo(0, 0, this.dx, this.dy); this.dx = Math.cos(this.inst.angle) * s; this.dy = Math.sin(this.inst.angle) * s; } this.lastKnownAngle = this.inst.angle; } if (this.acc !== 0) { s = cr.distanceTo(0, 0, this.dx, this.dy); if (this.dx === 0 && this.dy === 0) a = this.inst.angle; else a = cr.angleTo(0, 0, this.dx, this.dy); s += this.acc * dt; if (s < 0) s = 0; this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; } if (this.g !== 0) this.dy += this.g * dt; this.lastx = this.inst.x; this.lasty = this.inst.y; if (this.dx !== 0 || this.dy !== 0) { this.inst.x += this.dx * dt; this.inst.y += this.dy * dt; this.travelled += cr.distanceTo(0, 0, this.dx * dt, this.dy * dt) if (this.setAngle) { this.inst.angle = cr.angleTo(0, 0, this.dx, this.dy); this.inst.set_bbox_changed(); this.lastKnownAngle = this.inst.angle; } this.inst.set_bbox_changed(); if (this.bounceOffSolid) { bounceSolid = this.runtime.testOverlapSolid(this.inst); if (bounceSolid) { this.runtime.registerCollision(this.inst, bounceSolid); s = cr.distanceTo(0, 0, this.dx, this.dy); bounceAngle = this.runtime.calculateSolidBounceAngle(this.inst, this.lastx, this.lasty); this.dx = Math.cos(bounceAngle) * s; this.dy = Math.sin(bounceAngle) * s; this.inst.x += this.dx * dt; // move out for one tick since the object can't have spent a tick in the solid this.inst.y += this.dy * dt; this.inst.set_bbox_changed(); if (this.setAngle) { this.inst.angle = bounceAngle; this.lastKnownAngle = bounceAngle; this.inst.set_bbox_changed(); } if (!this.runtime.pushOutSolid(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30))) this.runtime.pushOutSolidNearest(this.inst, 100); } } } }; function Cnds() {}; Cnds.prototype.CompareSpeed = function (cmp, s) { return cr.do_cmp(cr.distanceTo(0, 0, this.dx, this.dy), cmp, s); }; Cnds.prototype.CompareTravelled = function (cmp, d) { return cr.do_cmp(this.travelled, cmp, d); }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function (s) { var a = cr.angleTo(0, 0, this.dx, this.dy); this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; }; Acts.prototype.SetAcceleration = function (a) { this.acc = a; }; Acts.prototype.SetGravity = function (g) { this.g = g; }; Acts.prototype.SetAngleOfMotion = function (a) { a = cr.to_radians(a); var s = cr.distanceTo(0, 0, this.dx, this.dy) this.dx = Math.cos(a) * s; this.dy = Math.sin(a) * s; }; Acts.prototype.Bounce = function (objtype) { if (!objtype) return; var otherinst = objtype.getFirstPicked(this.inst); if (!otherinst) return; var dt = this.runtime.getDt(this.inst); var s = cr.distanceTo(0, 0, this.dx, this.dy); var bounceAngle = this.runtime.calculateSolidBounceAngle(this.inst, this.lastx, this.lasty, otherinst); this.dx = Math.cos(bounceAngle) * s; this.dy = Math.sin(bounceAngle) * s; this.inst.x += this.dx * dt; // move out for one tick since the object can't have spent a tick in the solid this.inst.y += this.dy * dt; this.inst.set_bbox_changed(); if (this.setAngle) { this.inst.angle = bounceAngle; this.lastKnownAngle = bounceAngle; this.inst.set_bbox_changed(); } if (this.bounceOffSolid) { if (!this.runtime.pushOutSolid(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30))) this.runtime.pushOutSolidNearest(this.inst, 100); } else { this.runtime.pushOut(this.inst, this.dx / s, this.dy / s, Math.max(s * 2.5 * dt, 30), otherinst) } }; Acts.prototype.SetEnabled = function (en) { this.enabled = (en === 1); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function (ret) { var s = cr.distanceTo(0, 0, this.dx, this.dy); s = cr.round6dp(s); ret.set_float(s); }; Exps.prototype.Acceleration = function (ret) { ret.set_float(this.acc); }; Exps.prototype.AngleOfMotion = function (ret) { ret.set_float(cr.to_degrees(cr.angleTo(0, 0, this.dx, this.dy))); }; Exps.prototype.DistanceTravelled = function (ret) { ret.set_float(this.travelled); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Fade = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Fade.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { var active_at_start = this.properties[0] === 1; this.fadeInTime = this.properties[1]; this.waitTime = this.properties[2]; this.fadeOutTime = this.properties[3]; this.destroy = this.properties[4]; // 0 = no, 1 = after fade out this.stage = active_at_start ? 0 : 3; // 0 = fade in, 1 = wait, 2 = fade out, 3 = done if (this.recycled) this.stageTime.reset(); else this.stageTime = new cr.KahanAdder(); this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0); if (active_at_start) { if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } } }; behinstProto.saveToJSON = function () { return { "fit": this.fadeInTime, "wt": this.waitTime, "fot": this.fadeOutTime, "s": this.stage, "st": this.stageTime.sum, "mo": this.maxOpacity, }; }; behinstProto.loadFromJSON = function (o) { this.fadeInTime = o["fit"]; this.waitTime = o["wt"]; this.fadeOutTime = o["fot"]; this.stage = o["s"]; this.stageTime.reset(); this.stageTime.sum = o["st"]; this.maxOpacity = o["mo"]; }; behinstProto.tick = function () { this.stageTime.add(this.runtime.getDt(this.inst)); if (this.stage === 0) { this.inst.opacity = (this.stageTime.sum / this.fadeInTime) * this.maxOpacity; this.runtime.redraw = true; if (this.inst.opacity >= this.maxOpacity) { this.inst.opacity = this.maxOpacity; this.stage = 1; // wait stage this.stageTime.reset(); } } if (this.stage === 1) { if (this.stageTime.sum >= this.waitTime) { this.stage = 2; // fade out stage this.stageTime.reset(); } } if (this.stage === 2) { if (this.fadeOutTime !== 0) { this.inst.opacity = this.maxOpacity - ((this.stageTime.sum / this.fadeOutTime) * this.maxOpacity); this.runtime.redraw = true; if (this.inst.opacity < 0) { this.inst.opacity = 0; this.stage = 3; // done this.stageTime.reset(); this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeOutEnd, this.inst); if (this.destroy === 1) this.runtime.DestroyInstance(this.inst); } } } }; behinstProto.doStart = function () { this.stage = 0; this.stageTime.reset(); if (this.fadeInTime === 0) { this.stage = 1; if (this.waitTime === 0) this.stage = 2; } else { this.inst.opacity = 0; this.runtime.redraw = true; } }; function Cnds() {}; Cnds.prototype.OnFadeOutEnd = function () { return true; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.StartFade = function () { if (this.stage === 3) this.doStart(); }; Acts.prototype.RestartFade = function () { this.doStart(); }; behaviorProto.acts = new Acts(); }()); var Box2D = {}; Box2D.Dynamics = {}; Box2D.Dynamics.Joints = {}; Box2D.Common = {}; Box2D.Common.Math = {}; Box2D.Collision = {}; Box2D.Collision.Shapes = {}; function c2inherit(derived, base) { for (var i in base.prototype) { if (base.prototype.hasOwnProperty(i)) derived.prototype[i] = base.prototype[i]; } }; if (navigator["isCocoonJS"] && typeof window["cr_cjs_accelerated_physics"] !== "undefined") { cr.logexport("Using CocoonJS native physics"); if ( !window.ext || typeof window.ext.IDTK_SRV_BOX2D === 'undefined' ){ console.log("The CocoonJS binding for Box2D has been ignored because ext.IDTK_SRV_BOX2D is not available"); }else { (function (){ var B2Vec2 = function (x_, y_) { if (x_ === undefined){x_ = 0;} if (y_ === undefined){y_ = 0;} this.x = x_; this.y = y_; }; Box2D.Common.Math.b2Vec2 = B2Vec2; B2Vec2._freeCache = []; B2Vec2.Get = function(x, y) { if (Box2D.Common.Math.b2Vec2._freeCache.length > 0) { var vec = Box2D.Common.Math.b2Vec2._freeCache.pop(); vec.Set(x, y); return vec; } return new Box2D.Common.Math.b2Vec2(x, y); }; B2Vec2.Free = function(vec) { if (Box2D.Common.Math.b2Vec2._freeCache.length < 10000) Box2D.Common.Math.b2Vec2._freeCache.push(vec); } B2Vec2.prototype.SetZero = function () { this.x = 0.0; this.y = 0.0; }; B2Vec2.prototype.Set = function (x_, y_) { if (x_ === undefined){x_ = 0;} if (y_ === undefined){y_ = 0;} this.x = x_; this.y = y_; }; B2Vec2.prototype.SetV = function (v) { this.x = v.x; this.y = v.y; }; B2Vec2.Make = function (x_, y_) { if (x_ === undefined){x_ = 0;} if (y_ === undefined){y_ = 0;} return B2Vec2.Get(x_, y_); }; B2Vec2.prototype.Copy = function () { return B2Vec2.Get(this.x, this.y); }; B2Vec2.prototype.Add = function (v) { this.x += v.x; this.y += v.y; }; B2Vec2.prototype.Subtract = function (v) { this.x -= v.x; this.y -= v.y; }; B2Vec2.prototype.Multiply = function (a) { if (a === undefined){ a = 0; } this.x *= a; this.y *= a; }; B2Vec2.prototype.Length = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; B2Vec2.prototype.LengthSquared = function () { return (this.x * this.x + this.y * this.y); }; B2Vec2.prototype.Normalize = function () { var length = Math.sqrt(this.x * this.x + this.y * this.y); if (length < Number.MIN_VALUE) { return 0.0; } var invLength = 1.0 / length; this.x *= invLength; this.y *= invLength; return length; }; B2Vec2.prototype.NegativeSelf = function () { this.x = (-this.x); this.y = (-this.y); }; var B2Mat22 = function () { this.col1 = B2Vec2.Get(0,0); this.col2 = B2Vec2.Get(0,0); this.SetIdentity(); }; Box2D.Common.Math.b2Mat22 = B2Mat22 ; B2Mat22.FromAngle = function (angle) { if (angle === undefined){ angle = 0; } var mat = new B2Mat22(); mat.Set(angle); return mat; }; B2Mat22.FromVV = function (c1, c2) { var mat = new B2Mat22(); mat.SetVV(c1, c2); return mat; }; B2Mat22.prototype.Set = function (angle) { if (angle === undefined){ angle = 0; } var c = Math.cos(angle); var s = Math.sin(angle); this.col1.x = c; this.col2.x = (-s); this.col1.y = s; this.col2.y = c; }; B2Mat22.prototype.SetVV = function (c1, c2) { this.col1.SetV(c1); this.col2.SetV(c2); }; B2Mat22.prototype.Copy = function () { var mat = new B2Mat22(); mat.SetM(this); return mat; }; B2Mat22.prototype.SetM = function (m) { this.col1.SetV(m.col1); this.col2.SetV(m.col2); }; B2Mat22.prototype.AddM = function (m) { this.col1.x += m.col1.x; this.col1.y += m.col1.y; this.col2.x += m.col2.x; this.col2.y += m.col2.y; }; B2Mat22.prototype.SetIdentity = function () { this.col1.x = 1.0; this.col2.x = 0.0; this.col1.y = 0.0; this.col2.y = 1.0; }; B2Mat22.prototype.SetZero = function () { this.col1.x = 0.0; this.col2.x = 0.0; this.col1.y = 0.0; this.col2.y = 0.0; }; B2Mat22.prototype.GetAngle = function () { return Math.atan2(this.col1.y, this.col1.x); }; B2Mat22.prototype.GetInverse = function (out) { var a = this.col1.x; var b = this.col2.x; var c = this.col1.y; var d = this.col2.y; var det = a * d - b * c; if (det !== 0.0) { det = 1.0 / det; } out.col1.x = det * d; out.col2.x = (-det * b); out.col1.y = (-det * c); out.col2.y = det * a; return out; }; B2Mat22.prototype.Solve = function (out, bX, bY) { if (bX === undefined){bX = 0;} if (bY === undefined){bY = 0;} var a11 = this.col1.x; var a12 = this.col2.x; var a21 = this.col1.y; var a22 = this.col2.y; var det = a11 * a22 - a12 * a21; if (det !== 0.0) { det = 1.0 / det; } out.x = det * (a22 * bX - a12 * bY); out.y = det * (a11 * bY - a21 * bX); return out; }; B2Mat22.prototype.Abs = function () { this.col1.Abs(); this.col2.Abs(); }; var B2Transform = function (pos, r) { this.position = B2Vec2.Get(0,0); this.R = new B2Mat22(); if (pos === undefined){pos = null;} if (r === undefined){r = null;} if (pos) { this.position.SetV(pos); this.R.SetM(r); } }; Box2D.Common.Math.b2Transform = B2Transform ; B2Transform.prototype.Initialize = function (pos, r) { this.position.SetV(pos); this.R.SetM(r); }; B2Transform.prototype.SetIdentity = function () { this.position.SetZero(); this.R.SetIdentity(); }; B2Transform.prototype.Set = function (x) { this.position.SetV(x.position); this.R.SetM(x.R); }; B2Transform.prototype.SetAngle = function () { return Math.atan2(this.R.col1.y, this.R.col1.x); }; var b2Math = function () {}; Box2D.Common.Math.b2Math = b2Math ; b2Math.IsValid = function (x) { if (x === undefined){ x = 0; } return isFinite(x); }; b2Math.Dot = function (a, b) { return a.x * b.x + a.y * b.y; }; b2Math.CrossVV = function (a, b) { return a.x * b.y - a.y * b.x; }; b2Math.CrossVF = function (a, s) { if (s === undefined){ s = 0; } var v = B2Vec2.Get(s * a.y, (-s * a.x)); return v; }; b2Math.CrossFV = function (s, a) { if (s === undefined){ s = 0; } var v = B2Vec2.Get((-s * a.y), s * a.x); return v; }; b2Math.MulMV = function (A, v) { var u = B2Vec2.Get(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y); return u; }; b2Math.MulTMV = function (A, v) { var u = B2Vec2.Get(b2Math.Dot(v, A.col1), b2Math.Dot(v, A.col2)); return u; }; b2Math.MulX = function (T, v) { var a = b2Math.MulMV(T.R, v); a.x += T.position.x; a.y += T.position.y; return a; }; b2Math.MulXT = function (T, v) { var a = b2Math.SubtractVV(v, T.position); var tX = (a.x * T.R.col1.x + a.y * T.R.col1.y); a.y = (a.x * T.R.col2.x + a.y * T.R.col2.y); a.x = tX; return a; }; b2Math.AddVV = function (a, b) { var v = B2Vec2.Get(a.x + b.x, a.y + b.y); return v; }; b2Math.SubtractVV = function (a, b) { var v = B2Vec2.Get(a.x - b.x, a.y - b.y); return v; }; b2Math.Distance = function (a, b) { var cX = a.x - b.x; var cY = a.y - b.y; return Math.sqrt(cX * cX + cY * cY); }; b2Math.DistanceSquared = function (a, b) { var cX = a.x - b.x; var cY = a.y - b.y; return (cX * cX + cY * cY); }; b2Math.MulFV = function (s, a) { if (s === undefined){ s = 0; } var v = B2Vec2.Get(s * a.x, s * a.y); return v; }; b2Math.AddMM = function (A, B) { var C = B2Mat22.FromVV(b2Math.AddVV(A.col1, B.col1), b2Math.AddVV(A.col2, B.col2)); return C; }; b2Math.MulMM = function (A, B) { var C = B2Mat22.FromVV(b2Math.MulMV(A, B.col1), b2Math.MulMV(A, B.col2)); return C; }; b2Math.MulTMM = function (A, B) { var c1 = B2Vec2.Get(b2Math.Dot(A.col1, B.col1), b2Math.Dot(A.col2, B.col1)); var c2 = B2Vec2.Get(b2Math.Dot(A.col1, B.col2), b2Math.Dot(A.col2, B.col2)); var C = B2Mat22.FromVV(c1, c2); return C; }; b2Math.Abs = function (a) { if (a === undefined){ a = 0; } return a > 0.0 ? a : (-a); }; b2Math.AbsV = function (a) { var b = B2Vec2.Get(b2Math.Abs(a.x), b2Math.Abs(a.y)); return b; }; b2Math.AbsM = function (A) { var B = B2Mat22.FromVV(b2Math.AbsV(A.col1), b2Math.AbsV(A.col2)); return B; }; b2Math.Min = function (a, b) { if (a === undefined){a = 0;} if (b === undefined){b = 0;} return a < b ? a : b; }; b2Math.MinV = function (a, b) { var c = B2Vec2.Get(b2Math.Min(a.x, b.x), b2Math.Min(a.y, b.y)); return c; }; b2Math.Max = function (a, b) { if (a === undefined){a = 0;} if (b === undefined){b = 0;} return a > b ? a : b; }; b2Math.MaxV = function (a, b) { var c = B2Vec2.Get(b2Math.Max(a.x, b.x), b2Math.Max(a.y, b.y)); return c; }; b2Math.Clamp = function (a, low, high) { if (a === undefined){a = 0;} if (low === undefined){low = 0;} if (high === undefined){high = 0;} return a < low ? low : a > high ? high : a; }; b2Math.ClampV = function (a, low, high) { return b2Math.MaxV(low, b2Math.MinV(a, high)); }; b2Math.Swap = function (a, b) { var tmp = a[0]; a[0] = b[0]; b[0] = tmp; }; b2Math.Random = function () { return Math.random() * 2 - 1; }; b2Math.RandomRange = function (lo, hi) { if (lo === undefined){lo = 0;} if (hi === undefined){hi = 0;} var r = Math.random(); r = (hi - lo) * r + lo; return r; }; /* jshint -W016 */ b2Math.NextPowerOfTwo = function (x) { if (x === undefined){x = 0;} x |= (x >> 1) & 0x7FFFFFFF; x |= (x >> 2) & 0x3FFFFFFF; x |= (x >> 4) & 0x0FFFFFFF; x |= (x >> 8) & 0x00FFFFFF; x |= (x >> 16) & 0x0000FFFF; return x + 1; }; b2Math.IsPowerOfTwo = function (x) { if (x === undefined){x = 0;} var result = x > 0 && (x & (x - 1)) === 0; return result; }; /* jshint +W016 */ b2Math.b2Vec2_zero = new B2Vec2(0.0, 0.0); b2Math.b2Mat22_identity = B2Mat22.FromVV(new B2Vec2(1.0, 0.0), new B2Vec2(0.0, 1.0)); b2Math.b2Transform_identity = new B2Transform(b2Math.b2Vec2_zero, b2Math.b2Mat22_identity); var B2DebugDraw = function(){ this.e_aabbBit = 0x0004; this.e_centerOfMassBit = 0x0010; this.e_controllerBit = 0x0020; this.e_jointBit = 0x0002; this.e_pairBit = 0x0008; this.e_shapeBit = 0x000; }; Box2D.Dynamics.b2DebugDraw = B2DebugDraw ; B2DebugDraw.prototype.AppendFlags = function(){}; B2DebugDraw.prototype.ClearFlags = function(){}; B2DebugDraw.prototype.DrawCircle = function(){}; B2DebugDraw.prototype.DrawPolygon = function(){}; B2DebugDraw.prototype.DrawSegment = function(){}; B2DebugDraw.prototype.DrawSolidCircle = function(){}; B2DebugDraw.prototype.DrawSolidPolygon = function(){}; B2DebugDraw.prototype.DrawTransform = function(){}; B2DebugDraw.prototype.GetAlpha = function(){}; B2DebugDraw.prototype.GetDrawScale = function(){}; B2DebugDraw.prototype.GetFillAlpha = function(){}; B2DebugDraw.prototype.GetFlags = function(){}; B2DebugDraw.prototype.GetLineThickness = function(){}; B2DebugDraw.prototype.GetSprite = function(){}; B2DebugDraw.prototype.GetXFormScale = function(){}; B2DebugDraw.prototype.SetAlpha = function(){}; B2DebugDraw.prototype.SetDrawScale = function(){}; B2DebugDraw.prototype.SetFillAlpha = function(){}; B2DebugDraw.prototype.SetFlags = function(){}; B2DebugDraw.prototype.SetLineThickness = function(){}; B2DebugDraw.prototype.SetSprite = function(){}; B2DebugDraw.prototype.SetXFormScale = function(){}; var B2BodyDef = function () { this.position = B2Vec2.Get(0,0); this.linearVelocity = B2Vec2.Get(0,0); this.userData = null; this.angle = 0.0; this.linearVelocity.Set(0, 0); this.angularVelocity = 0.0; this.linearDamping = 0.0; this.angularDamping = 0.0; this.allowSleep = true; this.awake = true; this.fixedRotation = false; this.bullet = false; this.type = B2Body.b2_staticBody; this.active = true; this.inertiaScale = 1.0; }; Box2D.Dynamics.b2BodyDef = B2BodyDef; var B2Fixture = function(body,userData, fixtureID, def ) { this.m_body = body ; this.m_userData = userData ; this.m_fixtureID = fixtureID ; this.m_shape = {} ; this.m_shape.m_centroid = B2Vec2.Get(0,0) ; this.m_isSensor = false ; this.m_density = def.density ; this.m_friction = def.friction ; this.m_restitution = def.restitution ; this.m_isSensor = def.isSensor ; }; Box2D.Dynamics.b2Fixture = B2Fixture ; B2Fixture.prototype.GetBody = function(){ return this.m_body ; } ; B2Fixture.prototype.GetShape = function() { console.log( "fixture.GetShape not yet supported in CocoonJS Box2D binding" ) ; return null ; } ; B2Fixture.prototype.GetUserData = function() { return this.m_userData ; } ; B2Fixture.prototype.SetSensor = function(isSensor) { this.m_isSensor = isSensor; window.ext.IDTK_SRV_BOX2D.makeCall( "setSensor" , this.m_body.m_world.m_worldID , this.m_fixtureID , this.m_isSensor) ; }; B2Fixture.prototype.IsSensor = function() { return this.m_isSensor ; } ; B2Fixture.prototype.SetDensity = function( density ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setDensity" , this.m_body.m_world.m_worldID , this.m_fixtureID , density ) ; this.m_density = density ; } ; B2Fixture.prototype.SetFriction = function( friction ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setFriction" , this.m_body.m_world.m_worldID , this.m_fixtureID , friction ) ; this.m_friction = friction ; } ; B2Fixture.prototype.SetRestitution = function( restitution ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setRestitution" , this.m_body.m_world.m_worldID , this.m_fixtureID , restitution ) ; this.m_restitution = restitution ; } ; B2Fixture.prototype.GetDensity = function() { return this.m_density ; } ; B2Fixture.prototype.GetFriction = function() { return this.m_friction ; } ; B2Fixture.prototype.GetRestitution = function() { return this.m_restitution ; } ; var B2Body = function (bd, world) { var userData = bd.userData ; bd.userData = null; this.m_world = world; this.m_xf = new B2Transform( bd.position , B2Mat22.FromAngle(bd.angle)); this.m_fixtures = [] ; this.m_active = bd.active ; if( bd.type === B2Body.b2_staticBody ){ bd.density = 0; } this.m_bodyID = window.ext.IDTK_SRV_BOX2D.makeCall( "createBody" , world.m_worldID , bd ) ; this.m_userData = userData; bd.userData = userData ; }; Box2D.Dynamics.b2Body = B2Body ; B2Body.prototype.CreateFixture = function (def) { var userData = def.userData; def.userData = null ; var fixtureID = window.ext.IDTK_SRV_BOX2D.makeCall( "createFixture" , this.m_world.m_worldID , this.m_bodyID , def ) ; def.userData = userData; var fixture = new B2Fixture( this , userData , fixtureID , def ) ; this.m_world.m_fixturesList[fixtureID] = fixture ; this.m_fixtures.push( fixture ) ; return fixture; }; B2Body.prototype.GetFixtureList = function(){ if( this.m_fixtures.length === 0 ){ return null ; } return this.m_fixtures[0] ; }; B2Body.prototype.DestroyFixture = function( fixture ){ window.ext.IDTK_SRV_BOX2D.makeCall( "deleteFixture" , this.m_world.m_worldID , fixture.m_fixtureID ) ; delete this.m_world.m_fixturesList[fixture.m_fixtureID] ; }; B2Body.prototype.SetPositionAndAngle = function (position, angle) { window.ext.IDTK_SRV_BOX2D.makeCall( "setBodyTransform" , this.m_world.m_worldID , this.m_bodyID , position.x , position.y , angle ) ; this.m_xf.R.Set(angle) ; this.m_xf.position.SetV(position) ; }; B2Body.prototype.GetPosition = function () { return this.m_xf.position ; } ; B2Body.prototype.SetPosition = function (position) { this.SetPositionAndAngle(position, this.GetAngle()) ; } ; B2Body.prototype.GetLinearVelocity = function(){ var v = window.ext.IDTK_SRV_BOX2D.makeCall( "getLinearVelocity" , this.m_world.m_worldID , this.m_bodyID ) ; return B2Vec2.Get(v[0],v[1]); }; B2Body.prototype.GetWorldCenter = function(){ var p = window.ext.IDTK_SRV_BOX2D.makeCall( "getWorldCenter" , this.m_world.m_worldID , this.m_bodyID ) ; return B2Vec2.Get(p[0],p[1]); }; B2Body.prototype.GetLocalCenter = function(){ var p = window.ext.IDTK_SRV_BOX2D.makeCall( "getLocalCenter" , this.m_world.m_worldID , this.m_bodyID ) ; return B2Vec2.Get(p[0],p[1]); }; B2Body.prototype.GetLocalPoint = function (worldPoint) { return b2Math.MulXT(this.m_xf, worldPoint); }; B2Body.prototype.ApplyImpulse = function( impulse , point , wake ) { window.ext.IDTK_SRV_BOX2D.makeCall( "applyImpulse" , this.m_world.m_worldID , this.m_bodyID , impulse.x , impulse.y , point.x , point.y , wake ) ; }; B2Body.prototype.GetMass = function( ) { return window.ext.IDTK_SRV_BOX2D.makeCall( "getMass" , this.m_world.m_worldID , this.m_bodyID ) ; } B2Body.prototype.IsAwake = function( ) { return window.ext.IDTK_SRV_BOX2D.makeCall( "isAwake" , this.m_world.m_worldID , this.m_bodyID ) ; } ; B2Body.prototype.GetAngularVelocity = function( ) { return window.ext.IDTK_SRV_BOX2D.makeCall( "getAngularVelocity" , this.m_world.m_worldID , this.m_bodyID ) ; } ; B2Body.prototype.SetFixedRotation = function( fixed ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setFixedRotation" , this.m_world.m_worldID , this.m_bodyID , fixed ) ; } ; B2Body.prototype.SetAwake = function( state ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setAwake" , this.m_world.m_worldID , this.m_bodyID , state ) ; } ; B2Body.prototype.SetLinearVelocity = function( vel ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setLinearVelocity" , this.m_world.m_worldID , this.m_bodyID , vel.x , vel.y ) ; } ; B2Body.prototype.ApplyForceToCenter = function( force , wake ) { window.ext.IDTK_SRV_BOX2D.makeCall( "applyForceToCenter" , this.m_world.m_worldID , this.m_bodyID , force.x , force.y , wake ) ; } ; B2Body.prototype.ApplyForce = function( force , point , wake ) { window.ext.IDTK_SRV_BOX2D.makeCall( "applyForce" , this.m_world.m_worldID , this.m_bodyID , force.x , force.y , point.x , point.y , wake ) ; } ; B2Body.prototype.ApplyTorque = function( torque, wake ) { window.ext.IDTK_SRV_BOX2D.makeCall( "applyTorque" , this.m_world.m_worldID , this.m_bodyID , torque , wake ) ; } ; B2Body.prototype.SetLinearDamping = function( damp ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setLinearDamping" , this.m_world.m_worldID , this.m_bodyID , damp ) ; } ; B2Body.prototype.SetAngularVelocity = function( angvel) { window.ext.IDTK_SRV_BOX2D.makeCall( "setAngularVelocity" , this.m_world.m_worldID , this.m_bodyID , angvel ) ; } ; B2Body.prototype.SetType = function( type ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setType" , this.m_world.m_worldID , this.m_bodyID , type ) } ; B2Body.prototype.SetActive = function( state ) { window.ext.IDTK_SRV_BOX2D.makeCall( "setActive" , this.m_world.m_worldID , this.m_bodyID , state ) ; this.m_active = state ; } ; B2Body.prototype.IsActive = function( ) { return this.m_active ; } ; B2Body.prototype.GetAngle = function () { return this.m_xf.R.GetAngle() ; } ; B2Body.prototype.SetAngle = function (angle) { if (angle === undefined){ angle = 0; } this.SetPositionAndAngle(this.GetPosition(), angle); }; B2Body.prototype.GetContactList = function () { var contacts = window.ext.IDTK_SRV_BOX2D.makeCall( "getObjectContacts" , this.m_world.m_worldID , this.m_bodyID ) ; var result = []; for(var i = 0 ; i < contacts.length ; i++){ result.push(this.m_world.m_bodyList[contacts[i]]); } return result; }; B2Body.prototype.SetUserData = function (data) { this.m_userData = data ; } ; B2Body.prototype.GetUserData = function () { return this.m_userData ; } ; B2Body.prototype.GetWorld = function () { return this.m_world ; } ; Box2D.Dynamics.b2Body.b2_staticBody = 0; Box2D.Dynamics.b2Body.b2_kinematicBody = 1; Box2D.Dynamics.b2Body.b2_dynamicBody = 2; var B2Contact = function (fixtureA , fixtureB , touching ) { this.m_fixtureA = fixtureA ; this.m_fixtureB = fixtureB ; this.m_touching = touching ; }; Box2D.Dynamics.b2Contact = B2Contact ; B2Contact.prototype.GetFixtureA = function(){ return this.m_fixtureA ; } ; B2Contact.prototype.GetFixtureB = function(){ return this.m_fixtureB ; } ; B2Contact.prototype.IsTouching = function(){ return this.m_touching ; } ; var B2ContactListener = function () {}; Box2D.Dynamics.b2ContactListener = B2ContactListener ; B2ContactListener.prototype.BeginContact = function (/*contact*/) {} ;// NOTE: Only this one is called at the moment B2ContactListener.prototype.EndContact = function (/*contact*/) {} ; B2ContactListener.prototype.PreSolve = function (/*contact, oldManifold*/) {} ; B2ContactListener.prototype.PostSolve = function (/*contact, impulse*/) {} ; Box2D.Dynamics.b2ContactListener.b2_defaultListener = new B2ContactListener(); var B2ContactFilter = function() {} ; Box2D.Dynamics.b2ContactFilter = B2ContactFilter ; var B2World = function (gravity, doSleep) { this.m_bodyList = []; this.m_jointList = []; this.m_fixturesList = []; this.m_contactListener = null ; this.m_jointsList = [] ; this.m_worldID = window.ext.IDTK_SRV_BOX2D.makeCall( "createWorld" , gravity.x , gravity.y , doSleep ); }; Box2D.Dynamics.b2World = B2World; B2World.prototype.SetContactListener = function (listener) { this.m_contactListener = listener ; } ; B2World.prototype.SetContactFilter = function(filter){ var _filter = filter ; var world = this ; var callbackFunc = function(a , b){ var fa = world.m_fixturesList[a]; var fb = world.m_fixturesList[b]; return _filter.ShouldCollide(fa,fb); } window.ext.IDTK_SRV_BOX2D.makeCall("setContactFilter", this.m_worldID, callbackFunc ) ; }; B2World.prototype.CreateBody = function (def) { var b = new B2Body(def, this); this.m_bodyList[b.m_bodyID] = b; return b; }; B2World.prototype.DestroyBody = function (b) { window.ext.IDTK_SRV_BOX2D.makeCall( "deleteBody" , this.m_worldID , b.m_bodyID ) ; delete this.m_bodyList[b.m_bodyID]; for( var i =0 ; i < b.m_fixtures.length ; ++i ){ delete this.m_fixturesList[b.m_fixtures[i].m_fixtureID] ; } }; B2World.prototype.CreateJoint = function (def) { if( def.bodyA.m_bodyID === def.bodyB.m_bodyID ){ return ; } var bodyA = def.bodyA ; var bodyB = def.bodyB ; def.bodyA = bodyA.m_bodyID ; def.bodyB = bodyB.m_bodyID ; var jointFunc = "createDistanceJoint" ; if( def.type === B2Joint.e_revoluteJoint ) { jointFunc = "createRevoluteJoint" ; } var joint = new B2Joint(def) ; joint.m_jointID = window.ext.IDTK_SRV_BOX2D.makeCall( jointFunc , this.m_worldID , def ) ; def.bodyA = bodyA ; def.bodyB = bodyB ; this.m_jointsList.push( joint ) ; return joint ; }; B2World.prototype.DestroyJoint = function (joint) { window.ext.IDTK_SRV_BOX2D.makeCall( "destroyJoint" , this.m_worldID , joint.m_jointID ) ; }; B2World.prototype.GetJointList = function () { if( this.m_jointsList.length === 0 ){ return null ; } for( var i = 0 ; i < this.m_jointsList.length - 1 ; ++i ){ this.m_jointsList[i].next = this.m_jointsList[i+1] ; } this.m_jointsList[this.m_jointsList.length-1].next = null ; return this.m_jointsList[0]; }; B2World.prototype.SetContinuousPhysics = function (continuous) { window.ext.IDTK_SRV_BOX2D.makeCall( "setContinuous" , this.m_worldID, continuous ) ; } ; B2World.prototype.SetGravity = function (gravity) { window.ext.IDTK_SRV_BOX2D.makeCall( "setGravity" , this.m_worldID, gravity.x , gravity.y ) ; } ; B2World.prototype.Step = function (dt, velocityIterations, positionIterations) { var i; var transforms = window.ext.IDTK_SRV_BOX2D.makeCall( "step" , this.m_worldID, dt , velocityIterations , positionIterations ); var count = transforms[0]; // Array returns [ <number of elements> , elem1.bodyID , elem1.posX , elem1.posY , elem1.angle, elem2.bodyID , ....] for( i = 1; i <= count * 4 ; i+=4 ){ var body = this.m_bodyList[ transforms[i+0] ]; if( body === null ){ // end of the transforms array break ; } body.m_xf.position.Set(transforms[i+1] ,transforms[i+2] ) ; body.m_xf.R.Set(transforms[i+3]); } if( this.m_contactListener !== null ){ var contacts = window.ext.IDTK_SRV_BOX2D.makeCall( "getLastContacts" , this.m_worldID ); count = contacts[0]; for( i = 1 ; i<= count*3 ; i+=3 ){ var f1 = contacts[i+0]; var f2 = contacts[i+1]; var touching = contacts[i+2]; var fix1 = this.m_fixturesList[f1]; var fix2 = this.m_fixturesList[f2]; if( (typeof(fix1) === 'undefined' ) || (typeof(fix2) === 'undefined' ) ){ console.log("One of the fixtures in a contact DOESN'T EXIST!!"); continue ; } this.m_contactListener.BeginContact( new B2Contact(fix1,fix2,touching) ) ; } } }; B2World.prototype.ClearForces = function () { window.ext.IDTK_SRV_BOX2D.makeCall( "clearForces" , this.m_worldID ); }; B2World.prototype.SetDebugDraw = function(/*d*/){} ; B2World.prototype.DrawDebugData = function(){}; Box2D.Collision.Shapes.b2CircleShape = function (radius) { this.radius = radius ; this.type = "circle"; }; Box2D.Collision.Shapes.b2PolygonShape = function () { }; Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsBox = function (width,height) { this.type = "box"; this.width = width ; this.height = height ; }; Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsEdge = function (v1, v2) { this.type = "edge"; this.p1x = v1.x; this.p1y = v1.y; this.p2x = v2.x; this.p2y = v2.y; }; Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsArray = function ( vec , length ) { this.type = "polygon"; this.vertices = [] ; for( var i = 0; i < length ; i++ ) { this.vertices.push( vec[i].x ); this.vertices.push( vec[i].y ); } }; var b2FixtureDef = function () { this.shape = null; this.userData = null; this.friction = 0.2; this.restitution = 0.0; this.density = 0.0; this.isSensor = false; this.filter = { categoryBits : 1 , maskBits : 0xFFFF , groupIndex : 0 } ; }; Box2D.Dynamics.b2FixtureDef = b2FixtureDef ; var B2Joint = function( def ) { this.bodyA = def.bodyA; this.bodyB = def.bodyB; this.userData = def.userData ; this.type = def.type ; this.next = null ; }; Box2D.Dynamics.Joints.b2Joint = B2Joint ; B2Joint.prototype.GetBodyA = function() { return this.bodyA ; } ; B2Joint.prototype.GetBodyB = function() { return this.bodyB ; } ; B2Joint.prototype.GetUserData = function() { return this.userData ; } ; B2Joint.prototype.GetType = function() { return this.type ; } ; B2Joint.prototype.GetNext = function() { return this.next ; } ; B2Joint.e_distanceJoint = 0 ; B2Joint.e_revoluteJoint = 1 ; var B2DistanceJointDef = function( bA , bB , anchorA , anchorB ) { this.type = B2Joint.e_distanceJoint ; this.localAnchorA = B2Vec2.Get(0,0) ; this.localAnchorB = B2Vec2.Get(0,0) ; this.userData = null ; if( bA !== undefined ){this.bodyA = bA ;} if( bB !== undefined ){this.bodyB = bB ;} if( anchorA !== undefined ){this.localAnchorA.SetV(anchorA) ;} if( anchorB !== undefined ){this.localAnchorB.SetV(anchorB) ;} if( anchorA !== undefined && anchorB !== undefined ){ var dX = anchorB.x - anchorA.x ; var dY = anchorB.y - anchorA.y ; this.length = Math.sqrt(dX * dX + dY * dY) ; } this.frequencyHz = 0.0 ; this.dampingRatio = 0.0 ; }; Box2D.Dynamics.Joints.b2DistanceJointDef = B2DistanceJointDef ; var B2RevoluteJointDef = function( bA , bB , anchorA , anchorB ) { this.type = B2Joint.e_revoluteJoint ; this.localAnchorA = new B2Vec2() ; this.localAnchorB = new B2Vec2() ; this.userData = null ; if( bA !== undefined ){this.bodyA = bA ;} if( bB !== undefined ){this.bodyB = bB ;} if( anchorA !== undefined ){this.localAnchorA.SetV(anchorA) ;} if( anchorB !== undefined ){this.localAnchorB.SetV(anchorB) ;} this.referenceAngle = 0.0; this.lowerAngle = 0.0; this.upperAngle = 0.0; this.maxMotorTorque = 0.0; this.motorSpeed = 0.0; this.enableLimit = false; this.enableMotor = false; }; B2RevoluteJointDef.prototype.Initialize = function (bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2RevoluteJointDef = B2RevoluteJointDef ; })(); } } else { Box2D.Collision.b2Collision = {}; Box2D.Collision.b2Distance = {}; Box2D.Common.b2Settings = {}; Box2D.Common.Math.b2Math = {}; Box2D.Consts = {}; Box2D.Dynamics.Contacts = {}; Box2D.Dynamics.Controllers = {}; /** * Creates a callback function * @param {!Object} context The context ('this' variable) of the callback function * @param {function(...[*])} fn The function to execute with the given context for the returned callback * @return {function()} The callback function */ Box2D.generateCallback = function(context, fn) { return function() { fn.apply(context, arguments); }; }; /** * @type {number} * @const */ Box2D.Consts.MIN_VALUE_SQUARED = Number.MIN_VALUE * Number.MIN_VALUE; /** * @param {number} friction1 * @param {number} friction2 */ Box2D.Common.b2Settings.b2MixFriction = function (friction1, friction2) { return Math.sqrt(friction1 * friction2); }; /** * @param {number} restitution1 * @param {number} restitution2 */ Box2D.Common.b2Settings.b2MixRestitution = function (restitution1, restitution2) { return restitution1 > restitution2 ? restitution1 : restitution2; }; Box2D.Common.b2Settings.VERSION = "2.1alpha-illandril"; Box2D.Common.b2Settings.USHRT_MAX = 0x0000ffff; Box2D.Common.b2Settings.b2_maxManifoldPoints = 2; Box2D.Common.b2Settings.b2_aabbExtension = 0.1; Box2D.Common.b2Settings.b2_aabbMultiplier = 2.0; Box2D.Common.b2Settings.b2_polygonRadius = 2.0 * Box2D.Common.b2Settings.b2_linearSlop; Box2D.Common.b2Settings.b2_linearSlop = 0.005; Box2D.Common.b2Settings.b2_angularSlop = 2.0 / 180.0 * Math.PI; Box2D.Common.b2Settings.b2_toiSlop = 8.0 * Box2D.Common.b2Settings.b2_linearSlop; Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland = 32; Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland = 32; Box2D.Common.b2Settings.b2_velocityThreshold = 1.0; Box2D.Common.b2Settings.b2_maxLinearCorrection = 0.2; Box2D.Common.b2Settings.b2_maxAngularCorrection = 8.0 / 180.0 * Math.PI; Box2D.Common.b2Settings.b2_maxTranslation = 2.0; Box2D.Common.b2Settings.b2_maxTranslationSquared = Box2D.Common.b2Settings.b2_maxTranslation * Box2D.Common.b2Settings.b2_maxTranslation; Box2D.Common.b2Settings.b2_maxRotation = 0.5 * Math.PI; Box2D.Common.b2Settings.b2_maxRotationSquared = Box2D.Common.b2Settings.b2_maxRotation * Box2D.Common.b2Settings.b2_maxRotation; Box2D.Common.b2Settings.b2_contactBaumgarte = 0.2; Box2D.Common.b2Settings.b2_timeToSleep = 0.5; Box2D.Common.b2Settings.b2_linearSleepTolerance = 0.01; Box2D.Common.b2Settings.b2_linearSleepToleranceSquared = Box2D.Common.b2Settings.b2_linearSleepTolerance * Box2D.Common.b2Settings.b2_linearSleepTolerance; Box2D.Common.b2Settings.b2_angularSleepTolerance = 2.0 / 180.0 * Math.PI; Box2D.Common.b2Settings.b2_angularSleepToleranceSquared = Box2D.Common.b2Settings.b2_angularSleepTolerance * Box2D.Common.b2Settings.b2_angularSleepTolerance; Box2D.Common.b2Settings.MIN_VALUE_SQUARED = Number.MIN_VALUE * Number.MIN_VALUE; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.Dot = function (a, b) { return a.x * b.x + a.y * b.y; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.CrossVV = function (a, b) { return a.x * b.y - a.y * b.x; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {number} s * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.CrossVF = function (a, s) { return Box2D.Common.Math.b2Vec2.Get(s * a.y, (-s * a.x)); }; /** * @param {number} s * @param {!Box2D.Common.Math.b2Vec2} a * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.CrossFV = function (s, a) { return Box2D.Common.Math.b2Vec2.Get((-s * a.y), s * a.x); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulMV = function (A, v) { return Box2D.Common.Math.b2Vec2.Get(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulTMV = function (A, v) { return Box2D.Common.Math.b2Vec2.Get(Box2D.Common.Math.b2Math.Dot(v, A.col1), Box2D.Common.Math.b2Math.Dot(v, A.col2)); }; /** * @param {!Box2D.Common.Math.b2Transform} T * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulX = function (T, v) { var a = Box2D.Common.Math.b2Math.MulMV(T.R, v); a.x += T.position.x; a.y += T.position.y; return a; }; /** * @param {!Box2D.Common.Math.b2Transform} T * @param {!Box2D.Common.Math.b2Vec2} v * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulXT = function (T, v) { var a = Box2D.Common.Math.b2Math.SubtractVV(v, T.position); var tX = (a.x * T.R.col1.x + a.y * T.R.col1.y); a.y = (a.x * T.R.col2.x + a.y * T.R.col2.y); a.x = tX; return a; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.AddVV = function (a, b) { return Box2D.Common.Math.b2Vec2.Get(a.x + b.x, a.y + b.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.SubtractVV = function (a, b) { return Box2D.Common.Math.b2Vec2.Get(a.x - b.x, a.y - b.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.Distance = function (a, b) { var cX = a.x - b.x; var cY = a.y - b.y; return Math.sqrt(Box2D.Common.Math.b2Math.DistanceSquared(a,b)); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} b * @return {number} */ Box2D.Common.Math.b2Math.DistanceSquared = function (a, b) { var cX = a.x - b.x; var cY = a.y - b.y; return (cX * cX + cY * cY); }; /** * @param {number} s * @param {!Box2D.Common.Math.b2Vec2} a * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.MulFV = function (s, a) { return Box2D.Common.Math.b2Vec2.Get(s * a.x, s * a.y); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Mat22} B * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.AddMM = function (A, B) { return Box2D.Common.Math.b2Mat22.FromVV(Box2D.Common.Math.b2Math.AddVV(A.col1, B.col1), Box2D.Common.Math.b2Math.AddVV(A.col2, B.col2)); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Mat22} B * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.MulMM = function (A, B) { return Box2D.Common.Math.b2Mat22.FromVV(Box2D.Common.Math.b2Math.MulMV(A, B.col1), Box2D.Common.Math.b2Math.MulMV(A, B.col2)); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @param {!Box2D.Common.Math.b2Mat22} B * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.MulTMM = function (A, B) { var c1 = Box2D.Common.Math.b2Vec2.Get(Box2D.Common.Math.b2Math.Dot(A.col1, B.col1), Box2D.Common.Math.b2Math.Dot(A.col2, B.col1)); var c2 = Box2D.Common.Math.b2Vec2.Get(Box2D.Common.Math.b2Math.Dot(A.col1, B.col2), Box2D.Common.Math.b2Math.Dot(A.col2, B.col2)); return Box2D.Common.Math.b2Mat22.FromVV(c1, c2); }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.AbsV = function (a) { return Box2D.Common.Math.b2Vec2.Get(Math.abs(a.x), Math.abs(a.y)); }; /** * @param {!Box2D.Common.Math.b2Mat22} A * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Math.AbsM = function (A) { return Box2D.Common.Math.b2Mat22.FromVV(Box2D.Common.Math.b2Math.AbsV(A.col1), Box2D.Common.Math.b2Math.AbsV(A.col2)); }; /** * @param {number} a * @param {number} low * @param {number} high * @return {number} */ Box2D.Common.Math.b2Math.Clamp = function (a, low, high) { return a < low ? low : a > high ? high : a; }; /** * @param {!Box2D.Common.Math.b2Vec2} a * @param {!Box2D.Common.Math.b2Vec2} low * @param {!Box2D.Common.Math.b2Vec2} high * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Math.ClampV = function (a, low, high) { var x = Box2D.Common.Math.b2Math.Clamp(a.x, low.x, high.x); var y = Box2D.Common.Math.b2Math.Clamp(a.y, low.y, high.y); return Box2D.Common.Math.b2Vec2.Get(x, y); }; /** * @constructor */ Box2D.Common.Math.b2Mat22 = function() { this.col1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.col2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.SetIdentity(); }; /** * @param {number} angle * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.FromAngle = function(angle) { var mat = new Box2D.Common.Math.b2Mat22(); mat.Set(angle); return mat; }; /** * @param {!Box2D.Common.Math.b2Vec2} c1 * @param {!Box2D.Common.Math.b2Vec2} c2 * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.FromVV = function(c1, c2) { var mat = new Box2D.Common.Math.b2Mat22(); mat.SetVV(c1, c2); return mat; }; /** * @param {number} angle */ Box2D.Common.Math.b2Mat22.prototype.Set = function(angle) { var c = Math.cos(angle); var s = Math.sin(angle); this.col1.Set(c, s); this.col2.Set(-s, c); }; /** * @param {!Box2D.Common.Math.b2Vec2} c1 * @param {!Box2D.Common.Math.b2Vec2} c2 */ Box2D.Common.Math.b2Mat22.prototype.SetVV = function(c1, c2) { this.col1.SetV(c1); this.col2.SetV(c2); }; /** * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.prototype.Copy = function() { var mat = new Box2D.Common.Math.b2Mat22(); mat.SetM(this); return mat; }; /** * @param {!Box2D.Common.Math.b2Mat22} m */ Box2D.Common.Math.b2Mat22.prototype.SetM = function(m) { this.col1.SetV(m.col1); this.col2.SetV(m.col2); }; /** * @param {!Box2D.Common.Math.b2Mat22} m */ Box2D.Common.Math.b2Mat22.prototype.AddM = function(m) { this.col1.Add(m.col1); this.col2.Add(m.col2); }; Box2D.Common.Math.b2Mat22.prototype.SetIdentity = function() { this.col1.Set(1, 0); this.col2.Set(0, 1); }; Box2D.Common.Math.b2Mat22.prototype.SetZero = function() { this.col1.Set(0, 0); this.col2.Set(0, 0); }; /** * @return {number} */ Box2D.Common.Math.b2Mat22.prototype.GetAngle = function() { return Math.atan2(this.col1.y, this.col1.x); }; /** * @param {!Box2D.Common.Math.b2Mat22} out * @return {!Box2D.Common.Math.b2Mat22} */ Box2D.Common.Math.b2Mat22.prototype.GetInverse = function(out) { var det = this.col1.x * this.col2.y - this.col2.x * this.col1.y; if (det !== 0) { det = 1 / det; } out.col1.x = det * this.col2.y; out.col2.x = -det * this.col2.x; out.col1.y = -det * this.col1.y; out.col2.y = det * this.col1.x; return out; }; /** * @param {!Box2D.Common.Math.b2Vec2} out * @param {number} bX * @param {number} bY * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Mat22.prototype.Solve = function(out, bX, bY) { var det = this.col1.x * this.col2.y - this.col2.x * this.col1.y; if (det !== 0) { det = 1 / det; } out.x = det * (this.col2.y * bX - this.col2.x * bY); out.y = det * (this.col1.x * bY - this.col1.y * bX); return out; }; Box2D.Common.Math.b2Mat22.prototype.Abs = function() { this.col1.Abs(); this.col2.Abs(); }; /** * @param {!Box2D.Common.Math.b2Vec3=} c1 * @param {!Box2D.Common.Math.b2Vec3=} c2 * @param {!Box2D.Common.Math.b2Vec3=} c3 * @constructor */ Box2D.Common.Math.b2Mat33 = function(c1, c2, c3) { this.col1 = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.col2 = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.col3 = new Box2D.Common.Math.b2Vec3(0, 0, 0); if (c1) { this.col1.SetV(c1); } if (c2) { this.col2.SetV(c2); } if (c3) { this.col3.SetV(c3); } }; /** * @param {!Box2D.Common.Math.b2Vec3} c1 * @param {!Box2D.Common.Math.b2Vec3} c2 * @param {!Box2D.Common.Math.b2Vec3} c3 */ Box2D.Common.Math.b2Mat33.prototype.SetVVV = function(c1, c2, c3) { this.col1.SetV(c1); this.col2.SetV(c2); this.col3.SetV(c3); }; /** * @return {!Box2D.Common.Math.b2Mat33} */ Box2D.Common.Math.b2Mat33.prototype.Copy = function() { return new Box2D.Common.Math.b2Mat33(this.col1, this.col2, this.col3); }; /** * @param {!Box2D.Common.Math.b2Mat33} m */ Box2D.Common.Math.b2Mat33.prototype.SetM = function(m) { this.col1.SetV(m.col1); this.col2.SetV(m.col2); this.col3.SetV(m.col3); }; /** * @param {!Box2D.Common.Math.b2Mat33} m */ Box2D.Common.Math.b2Mat33.prototype.AddM = function(m) { this.col1.x += m.col1.x; this.col1.y += m.col1.y; this.col1.z += m.col1.z; this.col2.x += m.col2.x; this.col2.y += m.col2.y; this.col2.z += m.col2.z; this.col3.x += m.col3.x; this.col3.y += m.col3.y; this.col3.z += m.col3.z; }; Box2D.Common.Math.b2Mat33.prototype.SetIdentity = function() { this.col1.Set(1,0,0); this.col2.Set(0,1,0); this.col3.Set(0,0,1); }; Box2D.Common.Math.b2Mat33.prototype.SetZero = function() { this.col1.Set(0,0,0); this.col2.Set(0,0,0); this.col3.Set(0,0,0); }; /** * @param {!Box2D.Common.Math.b2Vec2} out * @param {number} bX * @param {number} bY * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Mat33.prototype.Solve22 = function(out, bX, bY) { var a11 = this.col1.x; var a12 = this.col2.x; var a21 = this.col1.y; var a22 = this.col2.y; var det = a11 * a22 - a12 * a21; if (det != 0.0) { det = 1.0 / det; } out.x = det * (a22 * bX - a12 * bY); out.y = det * (a11 * bY - a21 * bX); return out; }; /** * @param {!Box2D.Common.Math.b2Vec3} out * @param {number} bX * @param {number} bY * @param {number} bZ * @return {!Box2D.Common.Math.b2Vec3} */ Box2D.Common.Math.b2Mat33.prototype.Solve33 = function(out, bX, bY, bZ) { var a11 = this.col1.x; var a21 = this.col1.y; var a31 = this.col1.z; var a12 = this.col2.x; var a22 = this.col2.y; var a32 = this.col2.z; var a13 = this.col3.x; var a23 = this.col3.y; var a33 = this.col3.z; var det = a11 * (a22 * a33 - a32 * a23) + a21 * (a32 * a13 - a12 * a33) + a31 * (a12 * a23 - a22 * a13); if (det != 0.0) { det = 1.0 / det; } out.x = det * (bX * (a22 * a33 - a32 * a23) + bY * (a32 * a13 - a12 * a33) + bZ * (a12 * a23 - a22 * a13)); out.y = det * (a11 * (bY * a33 - bZ * a23) + a21 * (bZ * a13 - bX * a33) + a31 * (bX * a23 - bY * a13)); out.z = det * (a11 * (a22 * bZ - a32 * bY) + a21 * (a32 * bX - a12 * bZ) + a31 * (a12 * bY - a22 * bX)); return out; } /** * @constructor */ Box2D.Common.Math.b2Sweep = function() { this.localCenter = Box2D.Common.Math.b2Vec2.Get(0, 0); this.c0 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.c = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Common.Math.b2Sweep.prototype.Set = function(other) { this.localCenter.SetV(other.localCenter); this.c0.SetV(other.c0); this.c.SetV(other.c); this.a0 = other.a0; this.a = other.a; this.t0 = other.t0; }; Box2D.Common.Math.b2Sweep.prototype.Copy = function() { var copy = new Box2D.Common.Math.b2Sweep(); copy.localCenter.SetV(this.localCenter); copy.c0.SetV(this.c0); copy.c.SetV(this.c); copy.a0 = this.a0; copy.a = this.a; copy.t0 = this.t0; return copy; }; Box2D.Common.Math.b2Sweep.prototype.GetTransform = function(xf, alpha) { if (alpha === undefined) alpha = 0; xf.position.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x; xf.position.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y; var angle = (1.0 - alpha) * this.a0 + alpha * this.a; xf.R.Set(angle); var tMat = xf.R; xf.position.x -= (tMat.col1.x * this.localCenter.x + tMat.col2.x * this.localCenter.y); xf.position.y -= (tMat.col1.y * this.localCenter.x + tMat.col2.y * this.localCenter.y); }; Box2D.Common.Math.b2Sweep.prototype.Advance = function(t) { if (t === undefined) t = 0; if (this.t0 < t && 1.0 - this.t0 > Number.MIN_VALUE) { var alpha = (t - this.t0) / (1.0 - this.t0); this.c0.x = (1.0 - alpha) * this.c0.x + alpha * this.c.x; this.c0.y = (1.0 - alpha) * this.c0.y + alpha * this.c.y; this.a0 = (1.0 - alpha) * this.a0 + alpha * this.a; this.t0 = t; } }; /** * @param {!Box2D.Common.Math.b2Vec2=} pos * @param {!Box2D.Common.Math.b2Mat22=} r * @constructor */ Box2D.Common.Math.b2Transform = function(pos, r) { this.position = Box2D.Common.Math.b2Vec2.Get(0, 0); this.R = new Box2D.Common.Math.b2Mat22(); if (pos) { this.position.SetV(pos); } if (r) { this.R.SetM(r); } }; Box2D.Common.Math.b2Transform.prototype.Initialize = function(pos, r) { this.position.SetV(pos); this.R.SetM(r); }; Box2D.Common.Math.b2Transform.prototype.SetIdentity = function() { this.position.SetZero(); this.R.SetIdentity(); }; Box2D.Common.Math.b2Transform.prototype.Set = function(x) { this.position.SetV(x.position); this.R.SetM(x.R); }; Box2D.Common.Math.b2Transform.prototype.GetAngle = function() { return Math.atan2(this.R.col1.y, this.R.col1.x); }; /** * @private * @param {number} x * @param {number} y * @constructor */ Box2D.Common.Math.b2Vec2 = function(x, y) { this.x = x; this.y = y; }; /** * @private * @type {Array.<!Box2D.Common.Math.b2Vec2>} */ Box2D.Common.Math.b2Vec2._freeCache = []; /** * @param {number} x * @param {number} y * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Vec2.Get = function(x, y) { if (Box2D.Common.Math.b2Vec2._freeCache.length > 0) { var vec = Box2D.Common.Math.b2Vec2._freeCache.pop(); vec.Set(x, y); return vec; } return new Box2D.Common.Math.b2Vec2(x, y); }; /** * @param {!Box2D.Common.Math.b2Vec2} vec */ Box2D.Common.Math.b2Vec2.Free = function(vec) { Box2D.Common.Math.b2Vec2._freeCache.push(vec); }; Box2D.Common.Math.b2Vec2.prototype.SetZero = function() { this.x = 0.0; this.y = 0.0; }; /** * @param {number} x * @param {number} y */ Box2D.Common.Math.b2Vec2.prototype.Set = function(x, y) { this.x = x; this.y = y; }; /** * @param {!Box2D.Common.Math.b2Vec2} v */ Box2D.Common.Math.b2Vec2.prototype.SetV = function(v) { this.x = v.x; this.y = v.y; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Vec2.prototype.GetNegative = function() { return Box2D.Common.Math.b2Vec2.Get((-this.x), (-this.y)); }; Box2D.Common.Math.b2Vec2.prototype.NegativeSelf = function() { this.x = (-this.x); this.y = (-this.y); }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Common.Math.b2Vec2.prototype.Copy = function() { return Box2D.Common.Math.b2Vec2.Get(this.x, this.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} v */ Box2D.Common.Math.b2Vec2.prototype.Add = function(v) { this.x += v.x; this.y += v.y; }; /** * @param {!Box2D.Common.Math.b2Vec2} v */ Box2D.Common.Math.b2Vec2.prototype.Subtract = function(v) { this.x -= v.x; this.y -= v.y; }; /** * @param {number} a */ Box2D.Common.Math.b2Vec2.prototype.Multiply = function(a) { this.x *= a; this.y *= a; }; /** * @param {Box2D.Common.Math.b2Mat22} A */ Box2D.Common.Math.b2Vec2.prototype.MulM = function(A) { var tX = this.x; this.x = A.col1.x * tX + A.col2.x * this.y; this.y = A.col1.y * tX + A.col2.y * this.y; }; /** * @param {Box2D.Common.Math.b2Mat22} A */ Box2D.Common.Math.b2Vec2.prototype.MulTM = function(A) { var tX = this.x * A.col1.x + this.y * A.col1.y; this.y = this.x * A.col2.x + this.y * A.col2.y; this.x = tX; }; /** * @param {number} s */ Box2D.Common.Math.b2Vec2.prototype.CrossVF = function(s) { var tX = this.x; this.x = s * this.y; this.y = (-s * tX); }; /** * @param {number} s */ Box2D.Common.Math.b2Vec2.prototype.CrossFV = function(s) { var tX = this.x; this.x = (-s * this.y); this.y = s * tX; }; /** * @param {!Box2D.Common.Math.b2Vec2} b */ Box2D.Common.Math.b2Vec2.prototype.MinV = function(b) { this.x = Math.min(this.x, b.x); this.y = Math.min(this.y, b.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} b */ Box2D.Common.Math.b2Vec2.prototype.MaxV = function(b) { this.x = Math.max(this.x, b.x); this.y = Math.max(this.y, b.y); }; Box2D.Common.Math.b2Vec2.prototype.Abs = function() { this.x = Math.abs(this.x); this.y = Math.abs(this.y); }; /** * @return {number} */ Box2D.Common.Math.b2Vec2.prototype.Length = function() { return Math.sqrt(this.LengthSquared()); }; /** * @return {number} */ Box2D.Common.Math.b2Vec2.prototype.LengthSquared = function() { return (this.x * this.x + this.y * this.y); }; /** * @return {number} */ Box2D.Common.Math.b2Vec2.prototype.Normalize = function() { var length = this.Length(); if (length < Number.MIN_VALUE) { return 0.0; } var invLength = 1.0 / length; this.x *= invLength; this.y *= invLength; return length; }; /** * @return {boolean} */ Box2D.Common.Math.b2Vec2.prototype.IsValid = function () { return isFinite(this.x) && isFinite(this.y); }; /** * @param {number} x * @param {number} y * @param {number} z * @constructor */ Box2D.Common.Math.b2Vec3 = function(x, y, z) { this.x = x; this.y = y; this.z = z; }; Box2D.Common.Math.b2Vec3.prototype.SetZero = function() { this.x = 0; this.y = 0; this.z = 0; }; /** * @param {number} x * @param {number} y * @param {number} z */ Box2D.Common.Math.b2Vec3.prototype.Set = function(x, y, z) { this.x = x; this.y = y; this.z = z; } /** * @param {!Box2D.Common.Math.b2Vec3} v */ Box2D.Common.Math.b2Vec3.prototype.SetV = function(v) { this.x = v.x; this.y = v.y; this.z = v.z; }; /** * @return {!Box2D.Common.Math.b2Vec3} */ Box2D.Common.Math.b2Vec3.prototype.GetNegative = function() { return new Box2D.Common.Math.b2Vec3((-this.x), (-this.y), (-this.z)); }; Box2D.Common.Math.b2Vec3.prototype.NegativeSelf = function() { this.x = (-this.x); this.y = (-this.y); this.z = (-this.z); }; /** * @return {!Box2D.Common.Math.b2Vec3} */ Box2D.Common.Math.b2Vec3.prototype.Copy = function() { return new Box2D.Common.Math.b2Vec3(this.x, this.y, this.z); }; /** * @param {!Box2D.Common.Math.b2Vec3} v */ Box2D.Common.Math.b2Vec3.prototype.Add = function(v) { this.x += v.x; this.y += v.y; this.z += v.z; }; /** * @param {!Box2D.Common.Math.b2Vec3} v */ Box2D.Common.Math.b2Vec3.prototype.Subtract = function(v) { this.x -= v.x; this.y -= v.y; this.z -= v.z; }; /** * @param {number} a */ Box2D.Common.Math.b2Vec3.prototype.Multiply = function(a) { this.x *= a; this.y *= a; this.z *= a; }; /** * @constructor */ Box2D.Collision.Shapes.b2Shape = function() { this.m_radius = Box2D.Common.b2Settings.b2_linearSlop; }; /** * @return {string} */ Box2D.Collision.Shapes.b2Shape.prototype.GetTypeName = function(){}; /** * @return {!Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2Shape.prototype.Copy = function(){}; /** * @param {!Box2D.Collision.Shapes.b2Shape} other */ Box2D.Collision.Shapes.b2Shape.prototype.Set = function(other) { this.m_radius = other.m_radius; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2Shape.prototype.TestPoint = function(){}; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2Shape.prototype.RayCast = function(){}; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} transform */ Box2D.Collision.Shapes.b2Shape.prototype.ComputeAABB = function(){}; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2Shape.prototype.ComputeMass = function(){}; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2Shape.prototype.ComputeSubmergedArea = function(){}; /** * @param {!Box2D.Collision.b2DistanceProxy} proxy */ Box2D.Collision.Shapes.b2Shape.prototype.SetDistanceProxy = function(){}; /** * @param {!Box2D.Collision.Shapes.b2Shape} shape1 * @param {!Box2D.Common.Math.b2Transform} transform1 * @param {!Box2D.Collision.Shapes.b2Shape} shape2 * @param {!Box2D.Common.Math.b2Transform} transform2 * @return {boolean} */ Box2D.Collision.Shapes.b2Shape.TestOverlap = function(shape1, transform1, shape2, transform2) { var input = new Box2D.Collision.b2DistanceInput(); input.proxyA = new Box2D.Collision.b2DistanceProxy(); input.proxyA.Set(shape1); input.proxyB = new Box2D.Collision.b2DistanceProxy(); input.proxyB.Set(shape2); input.transformA = transform1; input.transformB = transform2; input.useRadii = true; var simplexCache = new Box2D.Collision.b2SimplexCache(); simplexCache.count = 0; var output = new Box2D.Collision.b2DistanceOutput(); Box2D.Collision.b2Distance.Distance(output, simplexCache, input); return output.distance < 10.0 * Number.MIN_VALUE; }; /** * @const * @type {number} */ Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide = -1; /** * @const * @type {number} */ Box2D.Collision.Shapes.b2Shape.e_missCollide = 0; /** * @const * @type {number} */ Box2D.Collision.Shapes.b2Shape.e_hitCollide = 1; /** * @param {number} radius * @constructor * @extends {Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2CircleShape = function(radius) { Box2D.Collision.Shapes.b2Shape.call(this); /** @type {number} */ this.m_radius = radius; /** @type {number} */ this.m_radiusSquared = radius * radius; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_p = Box2D.Common.Math.b2Vec2.Get(0, 0); }; c2inherit(Box2D.Collision.Shapes.b2CircleShape, Box2D.Collision.Shapes.b2Shape); /** * @return {string} */ Box2D.Collision.Shapes.b2CircleShape.prototype.GetTypeName = function() { return Box2D.Collision.Shapes.b2CircleShape.NAME; }; /** * @return {!Box2D.Collision.Shapes.b2CircleShape} */ Box2D.Collision.Shapes.b2CircleShape.prototype.Copy = function() { var s = new Box2D.Collision.Shapes.b2CircleShape(this.m_radius); s.Set(this); return s; }; /** * @param {!Box2D.Collision.Shapes.b2Shape} other */ Box2D.Collision.Shapes.b2CircleShape.prototype.Set = function(other) { Box2D.Collision.Shapes.b2Shape.prototype.Set.call(this, other); if (other instanceof Box2D.Collision.Shapes.b2CircleShape) { this.m_p.SetV(other.m_p); } }; /** * @param {!Box2D.Common.Math.b2Transform} transform * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2CircleShape.prototype.TestPoint = function(transform, p) { var tMat = transform.R; var dX = p.x - (transform.position.x + (transform.R.col1.x * this.m_p.x + transform.R.col2.x * this.m_p.y)); var dY = p.y - (transform.position.y + (transform.R.col1.y * this.m_p.x + transform.R.col2.y * this.m_p.y)); return (dX * dX + dY * dY) <= this.m_radiusSquared; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2CircleShape.prototype.RayCast = function(output, input, transform) { var tMat = transform.R; var positionX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y); var positionY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y); var sX = input.p1.x - positionX; var sY = input.p1.y - positionY; var b = (sX * sX + sY * sY) - this.m_radiusSquared; var rX = input.p2.x - input.p1.x; var rY = input.p2.y - input.p1.y; var c = (sX * rX + sY * rY); var rr = (rX * rX + rY * rY); var sigma = c * c - rr * b; if (sigma < 0.0 || rr < Number.MIN_VALUE) { return false; } var a = (-(c + Math.sqrt(sigma))); if (0.0 <= a && a <= input.maxFraction * rr) { a /= rr; output.fraction = a; output.normal.x = sX + a * rX; output.normal.y = sY + a * rY; output.normal.Normalize(); return true; } return false; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} transform */ Box2D.Collision.Shapes.b2CircleShape.prototype.ComputeAABB = function(aabb, transform) { var tMat = transform.R; var pX = transform.position.x + (tMat.col1.x * this.m_p.x + tMat.col2.x * this.m_p.y); var pY = transform.position.y + (tMat.col1.y * this.m_p.x + tMat.col2.y * this.m_p.y); aabb.lowerBound_.Set(pX - this.m_radius, pY - this.m_radius); aabb.upperBound_.Set(pX + this.m_radius, pY + this.m_radius); }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2CircleShape.prototype.ComputeMass = function(massData, density) { massData.mass = density * Math.PI * this.m_radiusSquared; massData.center.SetV(this.m_p); massData.I = massData.mass * (0.5 * this.m_radiusSquared + (this.m_p.x * this.m_p.x + this.m_p.y * this.m_p.y)); }; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2CircleShape.prototype.ComputeSubmergedArea = function(normal, offset, xf, c) { var p = Box2D.Common.Math.b2Math.MulX(xf, this.m_p); var l = (-(Box2D.Common.Math.b2Math.Dot(normal, p) - offset)); if (l < (-this.m_radius) + Number.MIN_VALUE) { return 0; } if (l > this.m_radius) { c.SetV(p); return Math.PI * this.m_radiusSquared; } var l2 = l * l; var area = this.m_radiusSquared * (Math.asin(l / this.m_radius) + Math.PI / 2) + l * Math.sqrt(this.m_radiusSquared - l2); var com = (-2 / 3 * Math.pow(this.m_radiusSquared - l2, 1.5) / area); c.x = p.x + normal.x * com; c.y = p.y + normal.y * com; return area; }; /** * @param {!Box2D.Collision.b2DistanceProxy} proxy */ Box2D.Collision.Shapes.b2CircleShape.prototype.SetDistanceProxy = function(proxy) { proxy.m_vertices = [this.m_p]; proxy.m_count = 1; proxy.m_radius = this.m_radius; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2CircleShape.prototype.GetLocalPosition = function() { return this.m_p; }; /** * @param {!Box2D.Common.Math.b2Vec2} position */ Box2D.Collision.Shapes.b2CircleShape.prototype.SetLocalPosition = function(position) { this.m_p.SetV(position); }; /** * @return {number} */ Box2D.Collision.Shapes.b2CircleShape.prototype.GetRadius = function() { return this.m_radius; }; /** * @param {number} radius */ Box2D.Collision.Shapes.b2CircleShape.prototype.SetRadius = function(radius) { this.m_radius = radius; this.m_radiusSquared = radius * radius; }; /** * @const * @type {string} */ Box2D.Collision.Shapes.b2CircleShape.NAME = 'b2CircleShape'; /** * @constructor */ Box2D.Collision.Shapes.b2EdgeChainDef = function() { /** @type {number} */ this.vertexCount = 0; /** @type {boolean} */ this.isALoop = true; /** @type {Array.<Box2D.Common.Math.b2Vec2} */ this.vertices = []; }; /** * @param {!Box2D.Common.Math.b2Vec2} v1 * @param {!Box2D.Common.Math.b2Vec2} v2 * @constructor * @extends {Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2EdgeShape = function(v1, v2) { Box2D.Collision.Shapes.b2Shape.call(this); /** @type {Box2D.Collision.Shapes.b2EdgeShape} */ this.m_prevEdge = null; /** @type {Box2D.Collision.Shapes.b2EdgeShape} */ this.m_nextEdge = null; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_v1 = v1; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_v2 = v2; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_direction = Box2D.Common.Math.b2Vec2.Get(this.m_v2.x - this.m_v1.x, this.m_v2.y - this.m_v1.y); /** @type {number} */ this.m_length = this.m_direction.Normalize(); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_normal = Box2D.Common.Math.b2Vec2.Get(this.m_direction.y, -this.m_direction.x); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_coreV1 = Box2D.Common.Math.b2Vec2.Get((-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.x - this.m_direction.x)) + this.m_v1.x, (-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.y - this.m_direction.y)) + this.m_v1.y); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_coreV2 = Box2D.Common.Math.b2Vec2.Get((-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.x + this.m_direction.x)) + this.m_v2.x, (-Box2D.Common.b2Settings.b2_toiSlop * (this.m_normal.y + this.m_direction.y)) + this.m_v2.y); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_cornerDir1 = this.m_normal; /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_cornerDir2 = Box2D.Common.Math.b2Vec2.Get(-this.m_normal.x, -this.m_normal.y); /** @type {boolean} */ this.m_cornerConvex1 = false; /** @type {boolean} */ this.m_cornerConvex2 = false; }; c2inherit(Box2D.Collision.Shapes.b2EdgeShape, Box2D.Collision.Shapes.b2Shape); /** * @return {string} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetTypeName = function() { return Box2D.Collision.Shapes.b2EdgeShape.NAME; }; /** * @param {!Box2D.Common.Math.b2Transform} transform * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.TestPoint = function(transform, p) { return false; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.RayCast = function(output, input, transform) { var rX = input.p2.x - input.p1.x; var rY = input.p2.y - input.p1.y; var tMat = transform.R; var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y); var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y); var nX = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y) - v1Y; var nY = (-(transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y) - v1X)); var k_slop = 100.0 * Number.MIN_VALUE; var denom = (-(rX * nX + rY * nY)); if (denom > k_slop) { var bX = input.p1.x - v1X; var bY = input.p1.y - v1Y; var a = (bX * nX + bY * nY); if (0.0 <= a && a <= input.maxFraction * denom) { var mu2 = (-rX * bY) + rY * bX; if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) { a /= denom; output.fraction = a; var nLen = Math.sqrt(nX * nX + nY * nY); output.normal.x = nX / nLen; output.normal.y = nY / nLen; return true; } } } return false; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} transform */ Box2D.Collision.Shapes.b2EdgeShape.prototype.ComputeAABB = function(aabb, transform) { var tMat = transform.R; var v1X = transform.position.x + (tMat.col1.x * this.m_v1.x + tMat.col2.x * this.m_v1.y); var v1Y = transform.position.y + (tMat.col1.y * this.m_v1.x + tMat.col2.y * this.m_v1.y); var v2X = transform.position.x + (tMat.col1.x * this.m_v2.x + tMat.col2.x * this.m_v2.y); var v2Y = transform.position.y + (tMat.col1.y * this.m_v2.x + tMat.col2.y * this.m_v2.y); if (v1X < v2X) { aabb.lowerBound_.x = v1X; aabb.upperBound_.x = v2X; } else { aabb.lowerBound_.x = v2X; aabb.upperBound_.x = v1X; } if (v1Y < v2Y) { aabb.lowerBound_.y = v1Y; aabb.upperBound_.y = v2Y; } else { aabb.lowerBound_.y = v2Y; aabb.upperBound_.y = v1Y; } }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2EdgeShape.prototype.ComputeMass = function(massData, density) { massData.mass = 0; massData.center.SetV(this.m_v1); massData.I = 0; }; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.ComputeSubmergedArea = function(normal, offset, xf, c) { if (offset === undefined) offset = 0; var v0 = Box2D.Common.Math.b2Vec2.Get(normal.x * offset, normal.y * offset); var v1 = Box2D.Common.Math.b2Math.MulX(xf, this.m_v1); var v2 = Box2D.Common.Math.b2Math.MulX(xf, this.m_v2); var d1 = Box2D.Common.Math.b2Math.Dot(normal, v1) - offset; var d2 = Box2D.Common.Math.b2Math.Dot(normal, v2) - offset; if (d1 > 0) { if (d2 > 0) { return 0; } else { v1.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x; v1.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y; } } else { if (d2 > 0) { v2.x = (-d2 / (d1 - d2) * v1.x) + d1 / (d1 - d2) * v2.x; v2.y = (-d2 / (d1 - d2) * v1.y) + d1 / (d1 - d2) * v2.y; } } c.x = (v0.x + v1.x + v2.x) / 3; c.y = (v0.y + v1.y + v2.y) / 3; return 0.5 * ((v1.x - v0.x) * (v2.y - v0.y) - (v1.y - v0.y) * (v2.x - v0.x)); }; /** * @return {number} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetLength = function() { return this.m_length; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetVertex1 = function() { return this.m_v1; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetVertex2 = function() { return this.m_v2; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCoreVertex1 = function() { return this.m_coreV1; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCoreVertex2 = function() { return this.m_coreV2; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetNormalVector = function() { return this.m_normal; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetDirectionVector = function() { return this.m_direction; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCorner1Vector = function() { return this.m_cornerDir1; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetCorner2Vector = function() { return this.m_cornerDir2; }; /** * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.Corner1IsConvex = function() { return this.m_cornerConvex1; }; /** * @return {boolean} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.Corner2IsConvex = function() { return this.m_cornerConvex2; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetFirstVertex = function(xf) { var tMat = xf.R; return Box2D.Common.Math.b2Vec2.Get(xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y), xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y)); }; /** * @return {Box2D.Collision.Shapes.b2EdgeShape} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetNextEdge = function() { return this.m_nextEdge; }; /** * @return {Box2D.Collision.Shapes.b2EdgeShape} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.GetPrevEdge = function() { return this.m_prevEdge; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @param {number} dX * @param {number} dY * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2EdgeShape.prototype.Support = function(xf, dX, dY) { var tMat = xf.R; var v1X = xf.position.x + (tMat.col1.x * this.m_coreV1.x + tMat.col2.x * this.m_coreV1.y); var v1Y = xf.position.y + (tMat.col1.y * this.m_coreV1.x + tMat.col2.y * this.m_coreV1.y); var v2X = xf.position.x + (tMat.col1.x * this.m_coreV2.x + tMat.col2.x * this.m_coreV2.y); var v2Y = xf.position.y + (tMat.col1.y * this.m_coreV2.x + tMat.col2.y * this.m_coreV2.y); if ((v1X * dX + v1Y * dY) > (v2X * dX + v2Y * dY)) { return Box2D.Common.Math.b2Vec2.Get(v1X, v1Y); } else { return Box2D.Common.Math.b2Vec2.Get(v2X, v2Y); } }; /** * @param {Box2D.Collision.Shapes.b2EdgeShape} edge * @param {!Box2D.Common.Math.b2Vec2} core * @param {!Box2D.Common.Math.b2Vec2} cornerDir * @param {boolean} convex */ Box2D.Collision.Shapes.b2EdgeShape.prototype.SetPrevEdge = function(edge, core, cornerDir, convex) { this.m_prevEdge = edge; this.m_coreV1 = core; this.m_cornerDir1 = cornerDir; this.m_cornerConvex1 = convex; }; /** * @param {Box2D.Collision.Shapes.b2EdgeShape} edge * @param {!Box2D.Common.Math.b2Vec2} core * @param {!Box2D.Common.Math.b2Vec2} cornerDir * @param {boolean} convex */ Box2D.Collision.Shapes.b2EdgeShape.prototype.SetNextEdge = function(edge, core, cornerDir, convex) { this.m_nextEdge = edge; this.m_coreV2 = core; this.m_cornerDir2 = cornerDir; this.m_cornerConvex2 = convex; }; /** * @const * @type {string} */ Box2D.Collision.Shapes.b2EdgeShape.NAME = 'b2EdgeShape'; /** * @constructor */ Box2D.Collision.Shapes.b2MassData = function() { /** @type {number} */ this.mass = 0; /** @type {!Box2D.Common.Math.b2Vec2} */ this.center = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {number} */ this.I = 0; }; /** * @constructor * @extends {Box2D.Collision.Shapes.b2Shape} */ Box2D.Collision.Shapes.b2PolygonShape = function() { Box2D.Collision.Shapes.b2Shape.call(this); /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_centroid = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {Array.<!Box2D.Common.Math.b2Vec2>} */ this.m_vertices = []; /** @type {Array.<!Box2D.Common.Math.b2Vec2>} */ this.m_normals = []; }; c2inherit(Box2D.Collision.Shapes.b2PolygonShape, Box2D.Collision.Shapes.b2Shape); /** * @return {string} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetTypeName = function() { return Box2D.Collision.Shapes.b2PolygonShape.NAME; }; /** * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.Copy = function() { var s = new Box2D.Collision.Shapes.b2PolygonShape(); s.Set(this); return s; }; /** * @param {!Box2D.Collision.Shapes.b2Shape} other */ Box2D.Collision.Shapes.b2PolygonShape.prototype.Set = function(other) { Box2D.Collision.Shapes.b2Shape.prototype.Set.call(this, other); if (other instanceof Box2D.Collision.Shapes.b2PolygonShape) { this.m_centroid.SetV(other.m_centroid); this.m_vertexCount = other.m_vertexCount; this.Reserve(this.m_vertexCount); for (var i = 0; i < this.m_vertexCount; i++) { this.m_vertices[i].SetV(other.m_vertices[i]); this.m_normals[i].SetV(other.m_normals[i]); } } }; /** * @param {Array.<Box2D.Common.Math.b2Vec2>} vertices */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsArray = function(vertices) { this.SetAsVector(vertices); }; /** * @param {Array.<Box2D.Common.Math.b2Vec2>} vertices * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsArray = function(vertices) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsArray(vertices); return polygonShape; }; /** * @param {Array.<!Box2D.Common.Math.b2Vec2>} vertices */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsVector = function(vertices) { var vertexCount = vertices.length; ; this.m_vertexCount = vertexCount; this.Reserve(vertexCount); var i = 0; for (i = 0; i < this.m_vertexCount; i++) { this.m_vertices[i].SetV(vertices[i]); } for (i = 0; i < this.m_vertexCount; ++i) { var i1 = i; var i2 = i + 1 < this.m_vertexCount ? i + 1 : 0; var edge = Box2D.Common.Math.b2Math.SubtractVV(this.m_vertices[i2], this.m_vertices[i1]); ; this.m_normals[i].SetV(Box2D.Common.Math.b2Math.CrossVF(edge, 1.0)); this.m_normals[i].Normalize(); } this.m_centroid = Box2D.Collision.Shapes.b2PolygonShape.ComputeCentroid(this.m_vertices, this.m_vertexCount); }; /** * @param {Array.<Box2D.Common.Math.b2Vec2>} vertices * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsVector = function(vertices) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsVector(vertices); return polygonShape; }; /** * @param {number} hx * @param {number} hy */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsBox = function(hx, hy) { this.m_vertexCount = 4; this.Reserve(4); this.m_vertices[0].Set((-hx), (-hy)); this.m_vertices[1].Set(hx, (-hy)); this.m_vertices[2].Set(hx, hy); this.m_vertices[3].Set((-hx), hy); this.m_normals[0].Set(0.0, (-1.0)); this.m_normals[1].Set(1.0, 0.0); this.m_normals[2].Set(0.0, 1.0); this.m_normals[3].Set((-1.0), 0.0); this.m_centroid.SetZero(); }; /** * @param {number} hx * @param {number} hy * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsBox = function(hx, hy) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsBox(hx, hy); return polygonShape; }; /** * @param {number} hx * @param {number} hy * @param {!Box2D.Common.Math.b2Vec2} center * @param {number} angle */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsOrientedBox = function(hx, hy, center, angle) { this.m_vertexCount = 4; this.Reserve(4); this.m_vertices[0].Set((-hx), (-hy)); this.m_vertices[1].Set(hx, (-hy)); this.m_vertices[2].Set(hx, hy); this.m_vertices[3].Set((-hx), hy); this.m_normals[0].Set(0.0, (-1.0)); this.m_normals[1].Set(1.0, 0.0); this.m_normals[2].Set(0.0, 1.0); this.m_normals[3].Set((-1.0), 0.0); this.m_centroid = center; var mat = new Box2D.Common.Math.b2Mat22(); mat.Set(angle); var xf = new Box2D.Common.Math.b2Transform(center, mat); for (var i = 0; i < this.m_vertexCount; ++i) { this.m_vertices[i] = Box2D.Common.Math.b2Math.MulX(xf, this.m_vertices[i]); this.m_normals[i] = Box2D.Common.Math.b2Math.MulMV(xf.R, this.m_normals[i]); } }; /** * @param {number} hx * @param {number} hy * @param {!Box2D.Common.Math.b2Vec2} center * @param {number} angle * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsOrientedBox = function(hx, hy, center, angle) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsOrientedBox(hx, hy, center, angle); return polygonShape; }; /** * @param {!Box2D.Common.Math.b2Vec2} v1 * @param {!Box2D.Common.Math.b2Vec2} v2 */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetAsEdge = function(v1, v2) { this.m_vertexCount = 2; this.Reserve(2); this.m_vertices[0].SetV(v1); this.m_vertices[1].SetV(v2); this.m_centroid.x = 0.5 * (v1.x + v2.x); this.m_centroid.y = 0.5 * (v1.y + v2.y); this.m_normals[0] = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(v2, v1), 1.0); this.m_normals[0].Normalize(); this.m_normals[1].x = (-this.m_normals[0].x); this.m_normals[1].y = (-this.m_normals[0].y); }; /** * @param {!Box2D.Common.Math.b2Vec2} v1 * @param {!Box2D.Common.Math.b2Vec2} v2 * @return {!Box2D.Collision.Shapes.b2PolygonShape} */ Box2D.Collision.Shapes.b2PolygonShape.AsEdge = function(v1, v2) { var polygonShape = new Box2D.Collision.Shapes.b2PolygonShape(); polygonShape.SetAsEdge(v1, v2); return polygonShape; }; /** * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.TestPoint = function(xf, p) { var tVec; var tMat = xf.R; var tX = p.x - xf.position.x; var tY = p.y - xf.position.y; var pLocalX = (tX * tMat.col1.x + tY * tMat.col1.y); var pLocalY = (tX * tMat.col2.x + tY * tMat.col2.y); for (var i = 0; i < this.m_vertexCount; ++i) { tVec = this.m_vertices[i]; tX = pLocalX - tVec.x; tY = pLocalY - tVec.y; tVec = this.m_normals[i]; var dot = (tVec.x * tX + tVec.y * tY); if (dot > 0.0) { return false; } } return true; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Common.Math.b2Transform} transform * @return {boolean} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.RayCast = function(output, input, transform) { var lower = 0.0; var upper = input.maxFraction; var tX = 0; var tY = 0; var tMat; var tVec; tX = input.p1.x - transform.position.x; tY = input.p1.y - transform.position.y; tMat = transform.R; var p1X = (tX * tMat.col1.x + tY * tMat.col1.y); var p1Y = (tX * tMat.col2.x + tY * tMat.col2.y); tX = input.p2.x - transform.position.x; tY = input.p2.y - transform.position.y; tMat = transform.R; var p2X = (tX * tMat.col1.x + tY * tMat.col1.y); var p2Y = (tX * tMat.col2.x + tY * tMat.col2.y); var dX = p2X - p1X; var dY = p2Y - p1Y; var index = -1; for (var i = 0; i < this.m_vertexCount; ++i) { tVec = this.m_vertices[i]; tX = tVec.x - p1X; tY = tVec.y - p1Y; tVec = this.m_normals[i]; var numerator = (tVec.x * tX + tVec.y * tY); var denominator = (tVec.x * dX + tVec.y * dY); if (denominator == 0.0) { if (numerator < 0.0) { return false; } } else { if (denominator < 0.0 && numerator < lower * denominator) { lower = numerator / denominator; index = i; } else if (denominator > 0.0 && numerator < upper * denominator) { upper = numerator / denominator; } } if (upper < lower - Number.MIN_VALUE) { return false; } } if (index >= 0) { output.fraction = lower; tMat = transform.R; tVec = this.m_normals[index]; output.normal.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); output.normal.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); return true; } return false; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Transform} xf */ Box2D.Collision.Shapes.b2PolygonShape.prototype.ComputeAABB = function(aabb, xf) { var tMat = xf.R; var tVec = this.m_vertices[0]; var lowerX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var lowerY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); var upperX = lowerX; var upperY = lowerY; for (var i = 1; i < this.m_vertexCount; ++i) { tVec = this.m_vertices[i]; var vX = xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var vY = xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); lowerX = lowerX < vX ? lowerX : vX; lowerY = lowerY < vY ? lowerY : vY; upperX = upperX > vX ? upperX : vX; upperY = upperY > vY ? upperY : vY; } aabb.lowerBound_.x = lowerX - this.m_radius; aabb.lowerBound_.y = lowerY - this.m_radius; aabb.upperBound_.x = upperX + this.m_radius; aabb.upperBound_.y = upperY + this.m_radius; }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData * @param {number} density */ Box2D.Collision.Shapes.b2PolygonShape.prototype.ComputeMass = function(massData, density) { if (this.m_vertexCount == 2) { massData.center.x = 0.5 * (this.m_vertices[0].x + this.m_vertices[1].x); massData.center.y = 0.5 * (this.m_vertices[0].y + this.m_vertices[1].y); massData.mass = 0.0; massData.I = 0.0; return; } var centerX = 0.0; var centerY = 0.0; var area = 0.0; var I = 0.0; var p1X = 0.0; var p1Y = 0.0; var k_inv3 = 1.0 / 3.0; for (var i = 0; i < this.m_vertexCount; ++i) { var p2 = this.m_vertices[i]; var p3 = i + 1 < this.m_vertexCount ? this.m_vertices[i + 1] : this.m_vertices[0]; var e1X = p2.x - p1X; var e1Y = p2.y - p1Y; var e2X = p3.x - p1X; var e2Y = p3.y - p1Y; var D = e1X * e2Y - e1Y * e2X; var triangleArea = 0.5 * D; area += triangleArea; centerX += triangleArea * k_inv3 * (p1X + p2.x + p3.x); centerY += triangleArea * k_inv3 * (p1Y + p2.y + p3.y); var px = p1X; var py = p1Y; var ex1 = e1X; var ey1 = e1Y; var ex2 = e2X; var ey2 = e2Y; var intx2 = k_inv3 * (0.25 * (ex1 * ex1 + ex2 * ex1 + ex2 * ex2) + (px * ex1 + px * ex2)) + 0.5 * px * px; var inty2 = k_inv3 * (0.25 * (ey1 * ey1 + ey2 * ey1 + ey2 * ey2) + (py * ey1 + py * ey2)) + 0.5 * py * py; I += D * (intx2 + inty2); } massData.mass = density * area; centerX *= 1.0 / area; centerY *= 1.0 / area; massData.center.Set(centerX, centerY); massData.I = density * I; }; /** * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Common.Math.b2Vec2} c * @return {number} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.ComputeSubmergedArea = function(normal, offset, xf, c) { var normalL = Box2D.Common.Math.b2Math.MulTMV(xf.R, normal); var offsetL = offset - Box2D.Common.Math.b2Math.Dot(normal, xf.position); var depths = []; var diveCount = 0; var intoIndex = -1; var outoIndex = -1; var lastSubmerged = false; var i = 0; for (i = 0; i < this.m_vertexCount; ++i) { depths[i] = Box2D.Common.Math.b2Math.Dot(normalL, this.m_vertices[i]) - offsetL; var isSubmerged = depths[i] < (-Number.MIN_VALUE); if (i > 0) { if (isSubmerged) { if (!lastSubmerged) { intoIndex = i - 1; diveCount++; } } else { if (lastSubmerged) { outoIndex = i - 1; diveCount++; } } } lastSubmerged = isSubmerged; } switch (diveCount) { case 0: if (lastSubmerged) { var md = new Box2D.Collision.Shapes.b2MassData(); this.ComputeMass(md, 1); c.SetV(Box2D.Common.Math.b2Math.MulX(xf, md.center)); return md.mass; } else { return 0; } break; case 1: if (intoIndex == (-1)) { intoIndex = this.m_vertexCount - 1; } else { outoIndex = this.m_vertexCount - 1; } break; } var intoIndex2 = ((intoIndex + 1) % this.m_vertexCount); var outoIndex2 = ((outoIndex + 1) % this.m_vertexCount); var intoLamdda = (0 - depths[intoIndex]) / (depths[intoIndex2] - depths[intoIndex]); var outoLamdda = (0 - depths[outoIndex]) / (depths[outoIndex2] - depths[outoIndex]); var intoVec = Box2D.Common.Math.b2Vec2.Get(this.m_vertices[intoIndex].x * (1 - intoLamdda) + this.m_vertices[intoIndex2].x * intoLamdda, this.m_vertices[intoIndex].y * (1 - intoLamdda) + this.m_vertices[intoIndex2].y * intoLamdda); var outoVec = Box2D.Common.Math.b2Vec2.Get(this.m_vertices[outoIndex].x * (1 - outoLamdda) + this.m_vertices[outoIndex2].x * outoLamdda, this.m_vertices[outoIndex].y * (1 - outoLamdda) + this.m_vertices[outoIndex2].y * outoLamdda); var area = 0; var center = Box2D.Common.Math.b2Vec2.Get(0, 0); var p2 = this.m_vertices[intoIndex2]; var p3; i = intoIndex2; while (i != outoIndex2) { i = (i + 1) % this.m_vertexCount; if (i == outoIndex2) p3 = outoVec; else p3 = this.m_vertices[i]; var triangleArea = 0.5 * ((p2.x - intoVec.x) * (p3.y - intoVec.y) - (p2.y - intoVec.y) * (p3.x - intoVec.x)); area += triangleArea; center.x += triangleArea * (intoVec.x + p2.x + p3.x) / 3; center.y += triangleArea * (intoVec.y + p2.y + p3.y) / 3; p2 = p3; } center.Multiply(1 / area); c.SetV(Box2D.Common.Math.b2Math.MulX(xf, center)); return area; }; /** * @param {!Box2D.Collision.b2DistanceProxy} proxy */ Box2D.Collision.Shapes.b2PolygonShape.prototype.SetDistanceProxy = function(proxy) { proxy.m_vertices = this.m_vertices; proxy.m_count = this.m_vertexCount; proxy.m_radius = this.m_radius; }; /** * @return {number} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetVertexCount = function() { return this.m_vertexCount; }; /** * @return {Array.<!Box2D.Common.Math.b2Vec2>} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetVertices = function() { return this.m_vertices; }; /** * @return {Array.<!Box2D.Common.Math.b2Vec2>} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetNormals = function() { return this.m_normals; }; /** * @param {!Box2D.Common.Math.b2Vec2} d * return {number} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetSupport = function(d) { var bestIndex = 0; var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y; for (var i = 1; i < this.m_vertexCount; ++i) { var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y; if (value > bestValue) { bestIndex = i; bestValue = value; } } return bestIndex; }; /** * @param {!Box2D.Common.Math.b2Vec2} d * return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2PolygonShape.prototype.GetSupportVertex = function(d) { var bestIndex = 0; var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y; for (var i = 1; i < this.m_vertexCount; ++i) { var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y; if (value > bestValue) { bestIndex = i; bestValue = value; } } return this.m_vertices[bestIndex]; }; /** * @param {number} count */ Box2D.Collision.Shapes.b2PolygonShape.prototype.Reserve = function(count) { this.m_vertices = []; this.m_normals = []; for (var i = this.m_vertices.length; i < count; i++) { this.m_vertices[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_normals[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); } }; /** * @param {Array.<!Box2D.Common.Math.b2Vec2>} vs * @param {number} count * return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.Shapes.b2PolygonShape.ComputeCentroid = function(vs, count) { var c = Box2D.Common.Math.b2Vec2.Get(0, 0); var area = 0.0; var p1X = 0.0; var p1Y = 0.0; var inv3 = 1.0 / 3.0; for (var i = 0; i < count; ++i) { var p2 = vs[i]; var p3 = i + 1 < count ? vs[i + 1] : vs[0]; var e1X = p2.x - p1X; var e1Y = p2.y - p1Y; var e2X = p3.x - p1X; var e2Y = p3.y - p1Y; var D = (e1X * e2Y - e1Y * e2X); var triangleArea = 0.5 * D; area += triangleArea; c.x += triangleArea * inv3 * (p1X + p2.x + p3.x); c.y += triangleArea * inv3 * (p1Y + p2.y + p3.y); } c.x *= 1.0 / area; c.y *= 1.0 / area; return c; }; /** @type {!Box2D.Common.Math.b2Mat22} */ Box2D.Collision.Shapes.b2PolygonShape.s_mat = new Box2D.Common.Math.b2Mat22(); /** * @const * @type {string} */ Box2D.Collision.Shapes.b2PolygonShape.NAME = 'b2PolygonShape'; /** * @constructor */ Box2D.Collision.b2ContactID = function() { /** @type {number} */ this._key = 0; /** @type {number} */ this._referenceEdge = 0; /** @type {number} */ this._incidentEdge = 0; /** @type {number} */ this._incidentVertex = 0; }; /** * @return {number} */ Box2D.Collision.b2ContactID.prototype.GetKey = function () { return this._key; }; /** * @param {number} key */ Box2D.Collision.b2ContactID.prototype.SetKey = function (key) { this._key = key; this._referenceEdge = this._key & 0x000000ff; this._incidentEdge = ((this._key & 0x0000ff00) >> 8) & 0x000000ff; this._incidentVertex = ((this._key & 0x00ff0000) >> 16) & 0x000000ff; this._flip = ((this._key & 0xff000000) >> 24) & 0x000000ff; }; /** * @param {!Box2D.Collision.b2ContactID} id */ Box2D.Collision.b2ContactID.prototype.Set = function (id) { this.SetKey(id._key); }; /** * @param {number} edge */ Box2D.Collision.b2ContactID.prototype.SetReferenceEdge = function(edge) { this._referenceEdge = edge; this._key = (this._key & 0xffffff00) | (this._referenceEdge & 0x000000ff); }; /** * @param {number} edge */ Box2D.Collision.b2ContactID.prototype.SetIncidentEdge = function(edge) { this._incidentEdge = edge; this._key = (this._key & 0xffff00ff) | ((this._incidentEdge << 8) & 0x0000ff00); }; /** * @param {number} vertex */ Box2D.Collision.b2ContactID.prototype.SetIncidentVertex = function(vertex) { this._incidentVertex = vertex; this._key = (this._key & 0xff00ffff) | ((this._incidentVertex << 16) & 0x00ff0000); }; /** * @param {number} flip */ Box2D.Collision.b2ContactID.prototype.SetFlip = function(flip) { this._flip = flip; this._key = (this._key & 0x00ffffff) | ((this._flip << 24) & 0xff000000); }; Box2D.Collision.b2ContactID.prototype.Copy = function () { var id = new Box2D.Collision.b2ContactID(); id.Set(this); return id; }; /** * @constructor */ Box2D.Collision.ClipVertex = function() { this.v = Box2D.Common.Math.b2Vec2.Get(0, 0); this.id = new Box2D.Collision.b2ContactID(); }; Box2D.Collision.ClipVertex.prototype.Set = function(other) { this.v.SetV(other.v); this.id.Set(other.id); }; /** * @const * @type {string} */ Box2D.Collision.IBroadPhase = 'Box2D.Collision.IBroadPhase'; /** * @private * @constructor */ Box2D.Collision.b2AABB = function() { this.lowerBound_ = Box2D.Common.Math.b2Vec2.Get(0, 0); this.upperBound_ = Box2D.Common.Math.b2Vec2.Get(0, 0); }; /** * @private * @type {Array.<!Box2D.Collision.b2AABB>} */ Box2D.Collision.b2AABB._freeCache = []; /** * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2AABB.Get = function() { if (Box2D.Collision.b2AABB._freeCache.length > 0) { var aabb = Box2D.Collision.b2AABB._freeCache.pop(); aabb.SetZero(); return aabb; } return new Box2D.Collision.b2AABB(); }; /** * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Collision.b2AABB.Free = function(aabb) { Box2D.Collision.b2AABB._freeCache.push(aabb); }; Box2D.Collision.b2AABB.prototype.SetZero = function() { this.lowerBound_.Set(0, 0); this.upperBound_.Set(0, 0); }; /** * @return {boolean} */ Box2D.Collision.b2AABB.prototype.IsValid = function() { var dX = this.upperBound_.x - this.lowerBound_.x; if (dX < 0) { return false; } var dY = this.upperBound_.y - this.lowerBound_.y; if (dY < 0) { return false; } return this.lowerBound_.IsValid() && this.upperBound_.IsValid(); }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.b2AABB.prototype.GetCenter = function() { return Box2D.Common.Math.b2Vec2.Get((this.lowerBound_.x + this.upperBound_.x) / 2, (this.lowerBound_.y + this.upperBound_.y) / 2); }; /** * @param {!Box2D.Common.Math.b2Vec2} newCenter */ Box2D.Collision.b2AABB.prototype.SetCenter = function(newCenter) { var oldCenter = this.GetCenter(); this.lowerBound_.Subtract(oldCenter); this.upperBound_.Subtract(oldCenter); this.lowerBound_.Add(newCenter); this.upperBound_.Add(newCenter); Box2D.Common.Math.b2Vec2.Free(oldCenter); }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Collision.b2AABB.prototype.GetExtents = function() { return Box2D.Common.Math.b2Vec2.Get((this.upperBound_.x - this.lowerBound_.x) / 2, (this.upperBound_.y - this.lowerBound_.y) / 2); }; /** * @param {!Box2D.Collision.b2AABB} aabb * @return {boolean} */ Box2D.Collision.b2AABB.prototype.Contains = function(aabb) { var result = true; result = result && this.lowerBound_.x <= aabb.lowerBound_.x; result = result && this.lowerBound_.y <= aabb.lowerBound_.y; result = result && aabb.upperBound_.x <= this.upperBound_.x; result = result && aabb.upperBound_.y <= this.upperBound_.y; return result; }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @return {boolean} */ Box2D.Collision.b2AABB.prototype.RayCast = function(output, input) { var tmin = (-Number.MAX_VALUE); var tmax = Number.MAX_VALUE; var dX = input.p2.x - input.p1.x; var absDX = Math.abs(dX); if (absDX < Number.MIN_VALUE) { if (input.p1.x < this.lowerBound_.x || this.upperBound_.x < input.p1.x) { return false; } } else { var inv_d = 1.0 / dX; var t1 = (this.lowerBound_.x - input.p1.x) * inv_d; var t2 = (this.upperBound_.x - input.p1.x) * inv_d; var s = (-1.0); if (t1 > t2) { var t3 = t1; t1 = t2; t2 = t3; s = 1.0; } if (t1 > tmin) { output.normal.x = s; output.normal.y = 0; tmin = t1; } tmax = Math.min(tmax, t2); if (tmin > tmax) return false; } var dY = input.p2.y - input.p1.y; var absDY = Math.abs(dY); if (absDY < Number.MIN_VALUE) { if (input.p1.y < this.lowerBound_.y || this.upperBound_.y < input.p1.y) { return false; } } else { var inv_d = 1.0 / dY; var t1 = (this.lowerBound_.y - input.p1.y) * inv_d; var t2 = (this.upperBound_.y - input.p1.y) * inv_d; var s = (-1.0); if (t1 > t2) { var t3 = t1; t1 = t2; t2 = t3; s = 1.0; } if (t1 > tmin) { output.normal.y = s; output.normal.x = 0; tmin = t1; } tmax = Math.min(tmax, t2); if (tmin > tmax) { return false; } } output.fraction = tmin; return true; }; /** * @param {!Box2D.Collision.b2AABB} other * @return {boolean} */ Box2D.Collision.b2AABB.prototype.TestOverlap = function(other) { if ( other.lowerBound_.x - this.upperBound_.x > 0 ) { return false; } if ( other.lowerBound_.y - this.upperBound_.y > 0 ) { return false; } if ( this.lowerBound_.x - other.upperBound_.x > 0 ) { return false; } if ( this.lowerBound_.y - other.upperBound_.y > 0 ) { return false; } return true; }; /** * @param {!Box2D.Collision.b2AABB} aabb1 * @param {!Box2D.Collision.b2AABB} aabb2 * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2AABB.Combine = function(aabb1, aabb2) { var aabb = Box2D.Collision.b2AABB.Get(); aabb.Combine(aabb1, aabb2); return aabb; }; /** * @param {!Box2D.Collision.b2AABB} aabb1 * @param {!Box2D.Collision.b2AABB} aabb2 */ Box2D.Collision.b2AABB.prototype.Combine = function(aabb1, aabb2) { this.lowerBound_.x = Math.min(aabb1.lowerBound_.x, aabb2.lowerBound_.x); this.lowerBound_.y = Math.min(aabb1.lowerBound_.y, aabb2.lowerBound_.y); this.upperBound_.x = Math.max(aabb1.upperBound_.x, aabb2.upperBound_.x); this.upperBound_.y = Math.max(aabb1.upperBound_.y, aabb2.upperBound_.y); }; /** * @param {!Box2D.Common.Math.b2Vec2} vOut * @param {!Box2D.Common.Math.b2Vec2} vIn * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} offset */ Box2D.Collision.b2Collision.ClipSegmentToLine = function(vOut, vIn, normal, offset) { var numOut = 0; var vIn0 = vIn[0].v; var vIn1 = vIn[1].v; var distance0 = normal.x * vIn0.x + normal.y * vIn0.y - offset; var distance1 = normal.x * vIn1.x + normal.y * vIn1.y - offset; if (distance0 <= 0.0) { vOut[numOut++].Set(vIn[0]); } if (distance1 <= 0.0) { vOut[numOut++].Set(vIn[1]); } if (distance0 * distance1 < 0.0) { var interp = distance0 / (distance0 - distance1); var tVec = vOut[numOut].v; tVec.x = vIn0.x + interp * (vIn1.x - vIn0.x); tVec.y = vIn0.y + interp * (vIn1.y - vIn0.y); if (distance0 > 0.0) { vOut[numOut].id = vIn[0].id; } else { vOut[numOut].id = vIn[1].id; } numOut++; } return numOut; }; /** * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly1 * @param {!Box2D.Common.Math.b2Transform} xf1 * @param {number} edge1 * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly2 * @param {!Box2D.Common.Math.b2Transform} xf1 * @return {number} */ Box2D.Collision.b2Collision.EdgeSeparation = function(poly1, xf1, edge1, poly2, xf2) { var normal1WorldX = (xf1.R.col1.x * poly1.m_normals[edge1].x + xf1.R.col2.x * poly1.m_normals[edge1].y); var normal1WorldY = (xf1.R.col1.y * poly1.m_normals[edge1].x + xf1.R.col2.y * poly1.m_normals[edge1].y); var normal1X = (xf2.R.col1.x * normal1WorldX + xf2.R.col1.y * normal1WorldY); var normal1Y = (xf2.R.col2.x * normal1WorldX + xf2.R.col2.y * normal1WorldY); var index = 0; var minDot = Number.MAX_VALUE; for (var i = 0; i < poly2.m_vertexCount; i++) { var dot = poly2.m_vertices[i].x * normal1X + poly2.m_vertices[i].y * normal1Y; if (dot < minDot) { minDot = dot; index = i; } } var v1X = xf1.position.x + (xf1.R.col1.x * poly1.m_vertices[edge1].x + xf1.R.col2.x * poly1.m_vertices[edge1].y); var v1Y = xf1.position.y + (xf1.R.col1.y * poly1.m_vertices[edge1].x + xf1.R.col2.y * poly1.m_vertices[edge1].y); var v2X = xf2.position.x + (xf2.R.col1.x * poly2.m_vertices[index].x + xf2.R.col2.x * poly2.m_vertices[index].y); var v2Y = xf2.position.y + (xf2.R.col1.y * poly2.m_vertices[index].x + xf2.R.col2.y * poly2.m_vertices[index].y); var separation = (v2X - v1X) * normal1WorldX + (v2Y - v1Y) * normal1WorldY; return separation; }; /** * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly1 * @param {!Box2D.Common.Math.b2Transform} xf1 * @param {!Box2D.Collision.Shapes.b2PolygonShape} poly2 * @param {!Box2D.Common.Math.b2Transform} xf1 * @return {{bestEdge: number, separation: number}} */ Box2D.Collision.b2Collision.FindMaxSeparation = function(poly1, xf1, poly2, xf2) { var dX = xf2.position.x + (xf2.R.col1.x * poly2.m_centroid.x + xf2.R.col2.x * poly2.m_centroid.y); var dY = xf2.position.y + (xf2.R.col1.y * poly2.m_centroid.x + xf2.R.col2.y * poly2.m_centroid.y); dX -= xf1.position.x + (xf1.R.col1.x * poly1.m_centroid.x + xf1.R.col2.x * poly1.m_centroid.y); dY -= xf1.position.y + (xf1.R.col1.y * poly1.m_centroid.x + xf1.R.col2.y * poly1.m_centroid.y); var dLocal1X = (dX * xf1.R.col1.x + dY * xf1.R.col1.y); var dLocal1Y = (dX * xf1.R.col2.x + dY * xf1.R.col2.y); var edge = 0; var maxDot = (-Number.MAX_VALUE); for (var i = 0; i < poly1.m_vertexCount; ++i) { var dot = (poly1.m_normals[i].x * dLocal1X + poly1.m_normals[i].y * dLocal1Y); if (dot > maxDot) { maxDot = dot; edge = i; } } var s = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2); var prevEdge = edge - 1; if (prevEdge < 0) { prevEdge = poly1.m_vertexCount - 1; } var sPrev = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2); var nextEdge = edge + 1; if (nextEdge >= poly1.m_vertexCount) { nextEdge = 0; } var sNext = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2); var bestEdge = 0; var bestSeparation = 0; if (sPrev > s && sPrev > sNext) { bestEdge = prevEdge; bestSeparation = sPrev; while (true) { edge = bestEdge - 1; if (edge < 0) { edge = poly1.m_vertexCount - 1; } s = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > bestSeparation) { bestEdge = edge; bestSeparation = s; } else { break; } } } else if (sNext > s) { bestEdge = nextEdge; bestSeparation = sNext; while (true) { edge = bestEdge + 1; if (edge >= poly1.m_vertexCount) { edge = 0; } s = Box2D.Collision.b2Collision.EdgeSeparation(poly1, xf1, edge, poly2, xf2); if (s > bestSeparation) { bestEdge = edge; bestSeparation = s; } else { break; } } } else { bestEdge = edge; bestSeparation = s; } return {bestEdge: bestEdge, separation: bestSeparation}; }; Box2D.Collision.b2Collision.FindIncidentEdge = function(c, poly1, xf1, edge1, poly2, xf2) { if (edge1 === undefined) edge1 = 0; var normal1X = (xf1.R.col1.x * poly1.m_normals[edge1].x + xf1.R.col2.x * poly1.m_normals[edge1].y); var normal1Y = (xf1.R.col1.y * poly1.m_normals[edge1].x + xf1.R.col2.y * poly1.m_normals[edge1].y); var tX = (xf2.R.col1.x * normal1X + xf2.R.col1.y * normal1Y); normal1Y = (xf2.R.col2.x * normal1X + xf2.R.col2.y * normal1Y); normal1X = tX; var i1 = 0; var minDot = Number.MAX_VALUE; for (var i = 0; i < poly2.m_vertexCount; i++) { var dot = (normal1X * poly2.m_normals[i].x + normal1Y * poly2.m_normals[i].y); if (dot < minDot) { minDot = dot; i1 = i; } } var i2 = i1 + 1; if (i2 >= poly2.m_vertexCount) { i2 = 0; } c[0].v.x = xf2.position.x + (xf2.R.col1.x * poly2.m_vertices[i1].x + xf2.R.col2.x * poly2.m_vertices[i1].y); c[0].v.y = xf2.position.y + (xf2.R.col1.y * poly2.m_vertices[i1].x + xf2.R.col2.y * poly2.m_vertices[i1].y); c[0].id.SetReferenceEdge(edge1); c[0].id.SetIncidentEdge(i1); c[0].id.SetIncidentVertex(0); c[1].v.x = xf2.position.x + (xf2.R.col1.x * poly2.m_vertices[i2].x + xf2.R.col2.x * poly2.m_vertices[i2].y); c[1].v.y = xf2.position.y + (xf2.R.col1.y * poly2.m_vertices[i2].x + xf2.R.col2.y * poly2.m_vertices[i2].y); c[1].id.SetReferenceEdge(edge1); c[1].id.SetIncidentEdge(i2); c[1].id.SetIncidentVertex(1); }; Box2D.Collision.b2Collision.MakeClipPointVector = function() { return [new Box2D.Collision.ClipVertex(), new Box2D.Collision.ClipVertex()]; }; Box2D.Collision.b2Collision.CollidePolygons = function(manifold, polyA, xfA, polyB, xfB) { manifold.m_pointCount = 0; var totalRadius = polyA.m_radius + polyB.m_radius; var separationEdgeA = Box2D.Collision.b2Collision.FindMaxSeparation(polyA, xfA, polyB, xfB); var edge1 = separationEdgeA.bestEdge; if (separationEdgeA.separation > totalRadius) { return; } var separationEdgeB = Box2D.Collision.b2Collision.FindMaxSeparation(polyB, xfB, polyA, xfA); if (separationEdgeB.separation > totalRadius) { return; } var poly1 = polyA; var poly2 = polyB; var xf1 = xfA; var xf2 = xfB; var flip = 0; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; if (separationEdgeB.separation > 0.98 /* k_relativeTol */ * separationEdgeA.separation + 0.001 /* k_absoluteTol */ ) { poly1 = polyB; poly2 = polyA; xf1 = xfB; xf2 = xfA; edge1 = separationEdgeB.bestEdge; manifold.m_type = Box2D.Collision.b2Manifold.e_faceB; flip = 1; } var incidentEdge = Box2D.Collision.b2Collision.s_incidentEdge; Box2D.Collision.b2Collision.FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); var local_v11 = poly1.m_vertices[edge1]; var local_v12; if (edge1 + 1 < poly1.m_vertexCount) { local_v12 = poly1.m_vertices[edge1 + 1]; } else { local_v12 = poly1.m_vertices[0]; } Box2D.Collision.b2Collision.s_localTangent.Set(local_v12.x - local_v11.x, local_v12.y - local_v11.y); Box2D.Collision.b2Collision.s_localTangent.Normalize(); Box2D.Collision.b2Collision.s_localNormal.x = Box2D.Collision.b2Collision.s_localTangent.y; Box2D.Collision.b2Collision.s_localNormal.y = (-Box2D.Collision.b2Collision.s_localTangent.x); Box2D.Collision.b2Collision.s_planePoint.Set(0.5 * (local_v11.x + local_v12.x), 0.5 * (local_v11.y + local_v12.y)); Box2D.Collision.b2Collision.s_tangent.x = (xf1.R.col1.x * Box2D.Collision.b2Collision.s_localTangent.x + xf1.R.col2.x * Box2D.Collision.b2Collision.s_localTangent.y); Box2D.Collision.b2Collision.s_tangent.y = (xf1.R.col1.y * Box2D.Collision.b2Collision.s_localTangent.x + xf1.R.col2.y * Box2D.Collision.b2Collision.s_localTangent.y); Box2D.Collision.b2Collision.s_tangent2.x = (-Box2D.Collision.b2Collision.s_tangent.x); Box2D.Collision.b2Collision.s_tangent2.y = (-Box2D.Collision.b2Collision.s_tangent.y); Box2D.Collision.b2Collision.s_normal.x = Box2D.Collision.b2Collision.s_tangent.y; Box2D.Collision.b2Collision.s_normal.y = (-Box2D.Collision.b2Collision.s_tangent.x); Box2D.Collision.b2Collision.s_v11.x = xf1.position.x + (xf1.R.col1.x * local_v11.x + xf1.R.col2.x * local_v11.y); Box2D.Collision.b2Collision.s_v11.y = xf1.position.y + (xf1.R.col1.y * local_v11.x + xf1.R.col2.y * local_v11.y); Box2D.Collision.b2Collision.s_v12.x = xf1.position.x + (xf1.R.col1.x * local_v12.x + xf1.R.col2.x * local_v12.y); Box2D.Collision.b2Collision.s_v12.y = xf1.position.y + (xf1.R.col1.y * local_v12.x + xf1.R.col2.y * local_v12.y); var sideOffset1 = (-Box2D.Collision.b2Collision.s_tangent.x * Box2D.Collision.b2Collision.s_v11.x) - Box2D.Collision.b2Collision.s_tangent.y * Box2D.Collision.b2Collision.s_v11.y + totalRadius; if (Box2D.Collision.b2Collision.ClipSegmentToLine(Box2D.Collision.b2Collision.s_clipPoints1, incidentEdge, Box2D.Collision.b2Collision.s_tangent2, sideOffset1) < 2) { return; } var sideOffset2 = Box2D.Collision.b2Collision.s_tangent.x * Box2D.Collision.b2Collision.s_v12.x + Box2D.Collision.b2Collision.s_tangent.y * Box2D.Collision.b2Collision.s_v12.y + totalRadius; if (Box2D.Collision.b2Collision.ClipSegmentToLine(Box2D.Collision.b2Collision.s_clipPoints2, Box2D.Collision.b2Collision.s_clipPoints1, Box2D.Collision.b2Collision.s_tangent, sideOffset2) < 2) { return; } manifold.m_localPlaneNormal.SetV(Box2D.Collision.b2Collision.s_localNormal); manifold.m_localPoint.SetV(Box2D.Collision.b2Collision.s_planePoint); var frontOffset = Box2D.Collision.b2Collision.s_normal.x * Box2D.Collision.b2Collision.s_v11.x + Box2D.Collision.b2Collision.s_normal.y * Box2D.Collision.b2Collision.s_v11.y; var pointCount = 0; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; ++i) { var separation = Box2D.Collision.b2Collision.s_normal.x * Box2D.Collision.b2Collision.s_clipPoints2[i].v.x + Box2D.Collision.b2Collision.s_normal.y * Box2D.Collision.b2Collision.s_clipPoints2[i].v.y - frontOffset; if (separation <= totalRadius) { var tX = Box2D.Collision.b2Collision.s_clipPoints2[i].v.x - xf2.position.x; var tY = Box2D.Collision.b2Collision.s_clipPoints2[i].v.y - xf2.position.y; manifold.m_points[pointCount].m_localPoint.x = (tX * xf2.R.col1.x + tY * xf2.R.col1.y); manifold.m_points[pointCount].m_localPoint.y = (tX * xf2.R.col2.x + tY * xf2.R.col2.y); manifold.m_points[pointCount].m_id.Set(Box2D.Collision.b2Collision.s_clipPoints2[i].id); manifold.m_points[pointCount].m_id.SetFlip(flip); pointCount++; } } manifold.m_pointCount = pointCount; }; Box2D.Collision.b2Collision.CollideCircles = function(manifold, circle1, xf1, circle2, xf2) { manifold.m_pointCount = 0; var p1X = xf1.position.x + (xf1.R.col1.x * circle1.m_p.x + xf1.R.col2.x * circle1.m_p.y); var p1Y = xf1.position.y + (xf1.R.col1.y * circle1.m_p.x + xf1.R.col2.y * circle1.m_p.y); var p2X = xf2.position.x + (xf2.R.col1.x * circle2.m_p.x + xf2.R.col2.x * circle2.m_p.y); var p2Y = xf2.position.y + (xf2.R.col1.y * circle2.m_p.x + xf2.R.col2.y * circle2.m_p.y); var dX = p2X - p1X; var dY = p2Y - p1Y; var distSqr = dX * dX + dY * dY; var radius = circle1.m_radius + circle2.m_radius; if (distSqr > radius * radius) { return; } manifold.m_type = Box2D.Collision.b2Manifold.e_circles; manifold.m_localPoint.SetV(circle1.m_p); manifold.m_localPlaneNormal.SetZero(); manifold.m_pointCount = 1; manifold.m_points[0].m_localPoint.SetV(circle2.m_p); manifold.m_points[0].m_id.SetKey(0); }; Box2D.Collision.b2Collision.CollidePolygonAndCircle = function(manifold, polygon, xf1, circle, xf2) { manifold.m_pointCount = 0; var dX = xf2.position.x + (xf2.R.col1.x * circle.m_p.x + xf2.R.col2.x * circle.m_p.y) - xf1.position.x; var dY = xf2.position.y + (xf2.R.col1.y * circle.m_p.x + xf2.R.col2.y * circle.m_p.y) - xf1.position.y; var cLocalX = (dX * xf1.R.col1.x + dY * xf1.R.col1.y); var cLocalY = (dX * xf1.R.col2.x + dY * xf1.R.col2.y); var normalIndex = 0; var separation = (-Number.MAX_VALUE); var radius = polygon.m_radius + circle.m_radius; for (var i = 0; i < polygon.m_vertexCount; ++i) { var s = polygon.m_normals[i].x * (cLocalX - polygon.m_vertices[i].x) + polygon.m_normals[i].y * (cLocalY - polygon.m_vertices[i].y); if (s > radius) { return; } if (s > separation) { separation = s; normalIndex = i; } } var vertIndex2 = normalIndex + 1; if (vertIndex2 >= polygon.m_vertexCount) { vertIndex2 = 0; } var v1 = polygon.m_vertices[normalIndex]; var v2 = polygon.m_vertices[vertIndex2]; if (separation < Number.MIN_VALUE) { manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.SetV(polygon.m_normals[normalIndex]); manifold.m_localPoint.x = 0.5 * (v1.x + v2.x); manifold.m_localPoint.y = 0.5 * (v1.y + v2.y); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } else { var u1 = (cLocalX - v1.x) * (v2.x - v1.x) + (cLocalY - v1.y) * (v2.y - v1.y); if (u1 <= 0.0) { if ((cLocalX - v1.x) * (cLocalX - v1.x) + (cLocalY - v1.y) * (cLocalY - v1.y) > radius * radius) return; manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.x = cLocalX - v1.x; manifold.m_localPlaneNormal.y = cLocalY - v1.y; manifold.m_localPlaneNormal.Normalize(); manifold.m_localPoint.SetV(v1); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } else { var u2 = (cLocalX - v2.x) * (v1.x - v2.x) + (cLocalY - v2.y) * (v1.y - v2.y); if (u2 <= 0) { if ((cLocalX - v2.x) * (cLocalX - v2.x) + (cLocalY - v2.y) * (cLocalY - v2.y) > radius * radius) return; manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.x = cLocalX - v2.x; manifold.m_localPlaneNormal.y = cLocalY - v2.y; manifold.m_localPlaneNormal.Normalize(); manifold.m_localPoint.SetV(v2); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } else { var faceCenterX = 0.5 * (v1.x + v2.x); var faceCenterY = 0.5 * (v1.y + v2.y); separation = (cLocalX - faceCenterX) * polygon.m_normals[normalIndex].x + (cLocalY - faceCenterY) * polygon.m_normals[normalIndex].y; if (separation > radius) return; manifold.m_pointCount = 1; manifold.m_type = Box2D.Collision.b2Manifold.e_faceA; manifold.m_localPlaneNormal.x = polygon.m_normals[normalIndex].x; manifold.m_localPlaneNormal.y = polygon.m_normals[normalIndex].y; manifold.m_localPlaneNormal.Normalize(); manifold.m_localPoint.Set(faceCenterX, faceCenterY); manifold.m_points[0].m_localPoint.SetV(circle.m_p); manifold.m_points[0].m_id.SetKey(0); } } } }; Box2D.Collision.b2Collision.TestOverlap = function(a, b) { if (b.lowerBound_.x - a.upperBound_.x > 0) { return false; } if (b.lowerBound_.y - a.upperBound_.y > 0) { return false; } if (a.lowerBound_.x - b.upperBound_.x > 0) { return false; } if (a.lowerBound_.y - b.upperBound_.y > 0) { return false; } return true; }; /** * @constructor */ Box2D.Collision.b2ContactPoint = function() { this.position = Box2D.Common.Math.b2Vec2.Get(0, 0); this.velocity = Box2D.Common.Math.b2Vec2.Get(0, 0); this.normal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.id = new Box2D.Collision.b2ContactID(); }; /** * @param {!Box2D.Collision.b2DistanceOutput} output * @param {!Box2D.Collision.b2SimplexCache} cache * @param {!Box2D.Collision.b2DistanceInput} input */ Box2D.Collision.b2Distance.Distance = function(output, cache, input) { var s_simplex = new Box2D.Collision.b2Simplex(); s_simplex.ReadCache(cache, input.proxyA, input.transformA, input.proxyB, input.transformB); if (s_simplex.m_count < 1 || s_simplex.m_count > 3) { ; } var iter = 0; while (iter < 20) { var save = []; for (var i = 0; i < s_simplex.m_count; i++) { save[i] = {}; save[i].indexA = s_simplex.m_vertices[i].indexA; save[i].indexB = s_simplex.m_vertices[i].indexB; } if (s_simplex.m_count == 2) { s_simplex.Solve2(); } else if (s_simplex.m_count == 3) { s_simplex.Solve3(); } if (s_simplex.m_count == 3) { break; } var d = s_simplex.GetSearchDirection(); if (d.LengthSquared() < Box2D.Common.b2Settings.MIN_VALUE_SQUARED) { break; } var negD = d.GetNegative(); s_simplex.m_vertices[s_simplex.m_count].indexA = input.proxyA.GetSupport(Box2D.Common.Math.b2Math.MulTMV(input.transformA.R, negD)); s_simplex.m_vertices[s_simplex.m_count].wA = Box2D.Common.Math.b2Math.MulX(input.transformA, input.proxyA.GetVertex(s_simplex.m_vertices[s_simplex.m_count].indexA)); s_simplex.m_vertices[s_simplex.m_count].indexB = input.proxyB.GetSupport(Box2D.Common.Math.b2Math.MulTMV(input.transformB.R, d)); s_simplex.m_vertices[s_simplex.m_count].wB = Box2D.Common.Math.b2Math.MulX(input.transformB, input.proxyB.GetVertex(s_simplex.m_vertices[s_simplex.m_count].indexB)); s_simplex.m_vertices[s_simplex.m_count].w = Box2D.Common.Math.b2Math.SubtractVV(s_simplex.m_vertices[s_simplex.m_count].wB, s_simplex.m_vertices[s_simplex.m_count].wA); Box2D.Common.Math.b2Vec2.Free(d); Box2D.Common.Math.b2Vec2.Free(negD); iter++; var duplicate = false; for (var i = 0; i < save.length; i++) { if (s_simplex.m_vertices[s_simplex.m_count].indexA == save[i].indexA && s_simplex.m_vertices[s_simplex.m_count].indexB == save[i].indexB) { duplicate = true; break; } } if (duplicate) { break; } s_simplex.m_count++; } s_simplex.GetWitnessPoints(output.pointA, output.pointB); output.distance = Box2D.Common.Math.b2Math.SubtractVV(output.pointA, output.pointB).Length(); s_simplex.WriteCache(cache); if (input.useRadii) { var rA = input.proxyA.m_radius; var rB = input.proxyB.m_radius; if (output.distance > rA + rB && output.distance > Number.MIN_VALUE) { output.distance -= rA + rB; var normal = Box2D.Common.Math.b2Math.SubtractVV(output.pointB, output.pointA); normal.Normalize(); output.pointA.x += rA * normal.x; output.pointA.y += rA * normal.y; output.pointB.x -= rB * normal.x; output.pointB.y -= rB * normal.y; Box2D.Common.Math.b2Vec2.Free(normal); } else { var p = Box2D.Common.Math.b2Vec2.Get(0, 0); p.x = 0.5 * (output.pointA.x + output.pointB.x); p.y = 0.5 * (output.pointA.y + output.pointB.y); output.pointA.x = output.pointB.x = p.x; output.pointA.y = output.pointB.y = p.y; output.distance = 0.0; Box2D.Common.Math.b2Vec2.Free(p); } } }; /** * @constructor */ Box2D.Collision.b2DistanceInput = function () {}; /** * @constructor */ Box2D.Collision.b2DistanceOutput = function () { /** @type {!Box2D.Common.Math.b2Vec2} */ this.pointA = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {!Box2D.Common.Math.b2Vec2} */ this.pointB = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {number} */ this.distance = 0; }; /** * @constructor */ Box2D.Collision.b2DistanceProxy = function() {}; Box2D.Collision.b2DistanceProxy.prototype.Set = function (shape) { shape.SetDistanceProxy(this); }; Box2D.Collision.b2DistanceProxy.prototype.GetSupport = function (d) { var bestIndex = 0; var bestValue = this.m_vertices[0].x * d.x + this.m_vertices[0].y * d.y; for (var i = 1; i < this.m_count; i++) { var value = this.m_vertices[i].x * d.x + this.m_vertices[i].y * d.y; if (value > bestValue) { bestIndex = i; bestValue = value; } } return bestIndex; }; Box2D.Collision.b2DistanceProxy.prototype.GetSupportVertex = function (d) { return this.m_vertices[this.GetSupport(d)]; }; Box2D.Collision.b2DistanceProxy.prototype.GetVertexCount = function () { return this.m_count; }; Box2D.Collision.b2DistanceProxy.prototype.GetVertex = function (index) { if (index === undefined) index = 0; ; return this.m_vertices[index]; }; /** * @constructor */ Box2D.Collision.b2DynamicTree = function() { /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.m_root = null; /** @type {number} */ this.m_path = 0; /** @type {number} */ this.m_insertionCount = 0; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {Box2D.Dynamics.b2Fixture} fixture * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTree.prototype.CreateProxy = function(aabb, fixture) { var node = Box2D.Collision.b2DynamicTreeNode.Get(fixture); var extendX = Box2D.Common.b2Settings.b2_aabbExtension; var extendY = Box2D.Common.b2Settings.b2_aabbExtension; node.aabb.lowerBound_.x = aabb.lowerBound_.x - extendX; node.aabb.lowerBound_.y = aabb.lowerBound_.y - extendY; node.aabb.upperBound_.x = aabb.upperBound_.x + extendX; node.aabb.upperBound_.y = aabb.upperBound_.y + extendY; this.InsertLeaf(node); return node; }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy */ Box2D.Collision.b2DynamicTree.prototype.DestroyProxy = function(proxy) { this.RemoveLeaf(proxy); proxy.Destroy(); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Vec2} displacement * @return {boolean} */ Box2D.Collision.b2DynamicTree.prototype.MoveProxy = function(proxy, aabb, displacement) { ; if (proxy.aabb.Contains(aabb)) { return false; } this.RemoveLeaf(proxy); var extendX = Box2D.Common.b2Settings.b2_aabbExtension + Box2D.Common.b2Settings.b2_aabbMultiplier * Math.abs(displacement.x); var extendY = Box2D.Common.b2Settings.b2_aabbExtension + Box2D.Common.b2Settings.b2_aabbMultiplier * Math.abs(displacement.y); proxy.aabb.lowerBound_.x = aabb.lowerBound_.x - extendX; proxy.aabb.lowerBound_.y = aabb.lowerBound_.y - extendY; proxy.aabb.upperBound_.x = aabb.upperBound_.x + extendX; proxy.aabb.upperBound_.y = aabb.upperBound_.y + extendY; this.InsertLeaf(proxy); return true; }; /** * @param {number} iterations */ Box2D.Collision.b2DynamicTree.prototype.Rebalance = function(iterations) { if (this.m_root !== null) { for (var i = 0; i < iterations; i++) { var node = this.m_root; var bit = 0; while (!node.IsLeaf()) { node = (this.m_path >> bit) & 1 ? node.child2 : node.child1; bit = (bit + 1) & 31; } this.m_path++; this.RemoveLeaf(node); this.InsertLeaf(node); } } }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2DynamicTree.prototype.GetFatAABB = function(proxy) { return proxy.aabb; }; /** * @param {function(!Box2D.Dynamics.b2Fixture): boolean} callback * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Collision.b2DynamicTree.prototype.Query = function(callback, aabb) { if (this.m_root !== null) { var stack = []; stack.push(this.m_root); while (stack.length > 0) { var node = stack.pop(); if (node.aabb.TestOverlap(aabb)) { if (node.IsLeaf()) { if (!callback(node.fixture)) { return; } } else { stack.push(node.child1); stack.push(node.child2); } } } } }; /** * @param {function(!Box2D.Collision.b2RayCastInput, !Box2D.Dynamics.b2Fixture): number} callback * @param {!Box2D.Collision.b2RayCastInput} input */ Box2D.Collision.b2DynamicTree.prototype.RayCast = function(callback, input) { if (this.m_root === null) { return; } var r = Box2D.Common.Math.b2Math.SubtractVV(input.p1, input.p2); r.Normalize(); var v = Box2D.Common.Math.b2Math.CrossFV(1.0, r); var abs_v = Box2D.Common.Math.b2Math.AbsV(v); var maxFraction = input.maxFraction; var tX = input.p1.x + maxFraction * (input.p2.x - input.p1.x); var tY = input.p1.y + maxFraction * (input.p2.y - input.p1.y); var segmentAABB = Box2D.Collision.b2AABB.Get(); segmentAABB.lowerBound_.x = Math.min(input.p1.x, tX); segmentAABB.lowerBound_.y = Math.min(input.p1.y, tY); segmentAABB.upperBound_.x = Math.max(input.p1.x, tX); segmentAABB.upperBound_.y = Math.max(input.p1.y, tY); var stack = []; stack.push(this.m_root); while (stack.length > 0) { var node = stack.pop(); if (!node.aabb.TestOverlap(segmentAABB)) { continue; } var c = node.aabb.GetCenter(); var h = node.aabb.GetExtents(); var separation = Math.abs(v.x * (input.p1.x - c.x) + v.y * (input.p1.y - c.y)) - abs_v.x * h.x - abs_v.y * h.y; if (separation > 0.0) { continue; } if (node.IsLeaf()) { var subInput = new Box2D.Collision.b2RayCastInput(input.p1, input.p2, input.maxFraction); maxFraction = callback(input, node.fixture); if (maxFraction == 0.0) { break; } if (maxFraction > 0.0) { tX = input.p1.x + maxFraction * (input.p2.x - input.p1.x); tY = input.p1.y + maxFraction * (input.p2.y - input.p1.y); segmentAABB.lowerBound_.x = Math.min(input.p1.x, tX); segmentAABB.lowerBound_.y = Math.min(input.p1.y, tY); segmentAABB.upperBound_.x = Math.max(input.p1.x, tX); segmentAABB.upperBound_.y = Math.max(input.p1.y, tY); } } else { stack.push(node.child1); stack.push(node.child2); } } Box2D.Collision.b2AABB.Free(segmentAABB); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} leaf */ Box2D.Collision.b2DynamicTree.prototype.InsertLeaf = function(leaf) { this.m_insertionCount++; if (this.m_root === null) { this.m_root = leaf; this.m_root.parent = null; return; } var sibling = this.GetBestSibling(leaf); var parent = sibling.parent; var node2 = Box2D.Collision.b2DynamicTreeNode.Get(); node2.parent = parent; node2.aabb.Combine(leaf.aabb, sibling.aabb); if (parent) { if (sibling.parent.child1 == sibling) { parent.child1 = node2; } else { parent.child2 = node2; } node2.child1 = sibling; node2.child2 = leaf; sibling.parent = node2; leaf.parent = node2; while (parent) { if (parent.aabb.Contains(node2.aabb)) { break; } parent.aabb.Combine(parent.child1.aabb, parent.child2.aabb); node2 = parent; parent = parent.parent; } } else { node2.child1 = sibling; node2.child2 = leaf; sibling.parent = node2; leaf.parent = node2; this.m_root = node2; } }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} leaf * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTree.prototype.GetBestSibling = function(leaf) { var center = leaf.aabb.GetCenter(); var sibling = this.m_root; while(!sibling.IsLeaf()) { var child1 = sibling.child1; var child2 = sibling.child2; var norm1 = Math.abs((child1.aabb.lowerBound_.x + child1.aabb.upperBound_.x) / 2 - center.x) + Math.abs((child1.aabb.lowerBound_.y + child1.aabb.upperBound_.y) / 2 - center.y); var norm2 = Math.abs((child2.aabb.lowerBound_.x + child2.aabb.upperBound_.x) / 2 - center.x) + Math.abs((child2.aabb.lowerBound_.y + child2.aabb.upperBound_.y) / 2 - center.y); if (norm1 < norm2) { sibling = child1; } else { sibling = child2; } } Box2D.Common.Math.b2Vec2.Free(center); return sibling; }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} leaf */ Box2D.Collision.b2DynamicTree.prototype.RemoveLeaf = function(leaf) { if (leaf == this.m_root) { this.m_root = null; return; } var node2 = leaf.parent; var node1 = node2.parent; var sibling; if (node2.child1 == leaf) { sibling = node2.child2; } else { sibling = node2.child1; } if (node1) { if (node1.child1 == node2) { node1.child1 = sibling; } else { node1.child2 = sibling; } sibling.parent = node1; while (node1) { var oldAABB = node1.aabb; node1.aabb.Combine(node1.child1.aabb, node1.child2.aabb); if (oldAABB.Contains(node1.aabb)) { break; } node1 = node1.parent; } } else { this.m_root = sibling; sibling.parent = null; } node2.Destroy(); }; /** * @constructor */ Box2D.Collision.b2DynamicTreeBroadPhase = function() { /** * @private * @type {!Box2D.Collision.b2DynamicTree} */ this.m_tree = new Box2D.Collision.b2DynamicTree(); /** * @private * @type {Array.<!Box2D.Collision.b2DynamicTreeNode>} */ this.m_moveBuffer = []; }; /** * @param {!Box2D.Collision.b2AABB} aabb * @param {Box2D.Dynamics.b2Fixture} fixture * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.CreateProxy = function(aabb, fixture) { var proxy = this.m_tree.CreateProxy(aabb, fixture); this.BufferMove(proxy); return proxy; }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.DestroyProxy = function(proxy) { this.UnBufferMove(proxy); this.m_tree.DestroyProxy(proxy); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @param {!Box2D.Collision.b2AABB} aabb * @param {!Box2D.Common.Math.b2Vec2} displacement */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.MoveProxy = function(proxy, aabb, displacement) { var buffer = this.m_tree.MoveProxy(proxy, aabb, displacement); if (buffer) { this.BufferMove(proxy); } }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxyA * @param {!Box2D.Collision.b2DynamicTreeNode} proxyB * @return {boolean} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.TestOverlap = function(proxyA, proxyB) { var aabbA = this.m_tree.GetFatAABB(proxyA); var aabbB = this.m_tree.GetFatAABB(proxyB); return aabbA.TestOverlap(aabbB); }; /** * @param {!Box2D.Collision.b2DynamicTreeNode} proxy * @return {!Box2D.Collision.b2AABB} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.GetFatAABB = function(proxy) { return this.m_tree.GetFatAABB(proxy); }; /** * @return {number} */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.GetProxyCount = function() { return this.m_tree.length; }; /** * @param {function(!Box2D.Dynamics.b2Fixture, !Box2D.Dynamics.b2Fixture)} callback */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.UpdatePairs = function(callback) { var __this = this; var pairs = []; while (this.m_moveBuffer.length > 0) { var queryProxy = this.m_moveBuffer.pop(); var QueryCallback = function(fixture) { if (fixture != queryProxy.fixture) { pairs.push(new Box2D.Collision.b2DynamicTreePair(queryProxy.fixture, fixture)); } return true; }; var fatAABB = this.m_tree.GetFatAABB(queryProxy); this.m_tree.Query(QueryCallback, fatAABB); } var i = 0; while(i < pairs.length) { var primaryPair = pairs[i]; callback(primaryPair.fixtureA, primaryPair.fixtureB); i++; while(i < pairs.length) { var pair = pairs[i]; if (!(pair.fixtureA == primaryPair.fixtureA && pair.fixtureB == primaryPair.fixtureB) && !(pair.fixtureA == primaryPair.fixtureB && pair.fixtureB == primaryPair.fixtureA)) { break; } i++; } } }; /** * @param {function(!Box2D.Dynamics.b2Fixture): boolean} callback * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.Query = function(callback, aabb) { this.m_tree.Query(callback, aabb); }; /** * @param {function(!Box2D.Collision.b2RayCastInput, !Box2D.Dynamics.b2Fixture): number} callback * @param {!Box2D.Collision.b2RayCastInput} input */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.RayCast = function(callback, input) { this.m_tree.RayCast(callback, input); }; /** * @param {number} iterations */ Box2D.Collision.b2DynamicTreeBroadPhase.prototype.Rebalance = function(iterations) { this.m_tree.Rebalance(iterations); }; Box2D.Collision.b2DynamicTreeBroadPhase.prototype.BufferMove = function(proxy) { this.m_moveBuffer.push(proxy); }; Box2D.Collision.b2DynamicTreeBroadPhase.prototype.UnBufferMove = function(proxy) { cr.arrayFindRemove(this.m_moveBuffer, proxy); }; Box2D.Collision.b2DynamicTreeBroadPhase.__implements = {}; Box2D.Collision.b2DynamicTreeBroadPhase.__implements[Box2D.Collision.IBroadPhase] = true; /** * @private * @param {Box2D.Dynamics.b2Fixture=} fixture * @constructor */ Box2D.Collision.b2DynamicTreeNode = function(fixture) { /** @type {!Box2D.Collision.b2AABB} */ this.aabb = Box2D.Collision.b2AABB.Get(); /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.child1 = null; /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.child2 = null; /** @type {Box2D.Collision.b2DynamicTreeNode} */ this.parent = null; /** @type {Box2D.Dynamics.b2Fixture} */ this.fixture = null; if (typeof(fixture) != "undefined") { this.fixture = fixture; } }; /** * @private * @type {Array.<!Box2D.Collision.b2DynamicTreeNode>} */ Box2D.Collision.b2DynamicTreeNode._freeCache = []; /** * @param {Box2D.Dynamics.b2Fixture=} fixture * @return {!Box2D.Collision.b2DynamicTreeNode} */ Box2D.Collision.b2DynamicTreeNode.Get = function(fixture) { if (Box2D.Collision.b2DynamicTreeNode._freeCache.length > 0) { var node = Box2D.Collision.b2DynamicTreeNode._freeCache.pop(); if (typeof(fixture) != "undefined") { node.fixture = fixture; } node.aabb.SetZero(); return node; } return new Box2D.Collision.b2DynamicTreeNode(fixture); }; Box2D.Collision.b2DynamicTreeNode.prototype.Destroy = function() { this.child1 = null; this.child2 = null; this.parent = null; this.fixture = null; Box2D.Collision.b2DynamicTreeNode._freeCache.push(this); }; /** * @return boolean */ Box2D.Collision.b2DynamicTreeNode.prototype.IsLeaf = function () { return this.child1 === null; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor */ Box2D.Collision.b2DynamicTreePair = function(fixtureA, fixtureB) { /** @type {!Box2D.Dynamics.b2Fixture} */ this.fixtureA = fixtureA; /** @type {!Box2D.Dynamics.b2Fixture} */ this.fixtureB = fixtureB; }; /** * @constructor */ Box2D.Collision.b2Manifold = function() { this.m_pointCount = 0; this.m_type = 0; this.m_points = []; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i] = new Box2D.Collision.b2ManifoldPoint(); } this.m_localPlaneNormal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Collision.b2Manifold.prototype.Reset = function() { for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i].Reset(); } this.m_localPlaneNormal.SetZero(); this.m_localPoint.SetZero(); this.m_type = 0; this.m_pointCount = 0; }; Box2D.Collision.b2Manifold.prototype.Set = function(m) { this.m_pointCount = m.m_pointCount; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i].Set(m.m_points[i]); } this.m_localPlaneNormal.SetV(m.m_localPlaneNormal); this.m_localPoint.SetV(m.m_localPoint); this.m_type = m.m_type; }; Box2D.Collision.b2Manifold.prototype.Copy = function() { var copy = new Box2D.Collision.b2Manifold(); copy.Set(this); return copy; }; Box2D.Collision.b2Manifold.e_circles = 0x0001; Box2D.Collision.b2Manifold.e_faceA = 0x0002; Box2D.Collision.b2Manifold.e_faceB = 0x0004; /** * @constructor */ Box2D.Collision.b2ManifoldPoint = function() { this.m_localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_id = new Box2D.Collision.b2ContactID(); this.Reset(); }; Box2D.Collision.b2ManifoldPoint.prototype.Reset = function() { this.m_localPoint.SetZero(); this.m_normalImpulse = 0.0; this.m_tangentImpulse = 0.0; this.m_id.SetKey(0); }; Box2D.Collision.b2ManifoldPoint.prototype.Set = function(m) { this.m_localPoint.SetV(m.m_localPoint); this.m_normalImpulse = m.m_normalImpulse; this.m_tangentImpulse = m.m_tangentImpulse; this.m_id.Set(m.m_id); }; /** * @param {!Box2D.Common.Math.b2Vec2} p1 * @param {!Box2D.Common.Math.b2Vec2} p2 * @param {number} maxFraction * @constructor */ Box2D.Collision.b2RayCastInput = function(p1, p2, maxFraction) { this.p1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.p2 = Box2D.Common.Math.b2Vec2.Get(0, 0); if (maxFraction === undefined) maxFraction = 1; if (p1) this.p1.SetV(p1); if (p2) this.p2.SetV(p2); this.maxFraction = maxFraction; }; /** * @constructor */ Box2D.Collision.b2RayCastOutput = function() { this.normal = Box2D.Common.Math.b2Vec2.Get(0, 0); }; /** * @constructor */ Box2D.Collision.b2Segment = function() { this.p1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.p2 = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Collision.b2Segment.prototype.TestSegment = function(lambda, normal, segment, maxLambda) { if (maxLambda === undefined) maxLambda = 0; var s = segment.p1; var rX = segment.p2.x - s.x; var rY = segment.p2.y - s.y; var dX = this.p2.x - this.p1.x; var dY = this.p2.y - this.p1.y; var nX = dY; var nY = (-dX); var k_slop = 100.0 * Number.MIN_VALUE; var denom = (-(rX * nX + rY * nY)); if (denom > k_slop) { var bX = s.x - this.p1.x; var bY = s.y - this.p1.y; var a = (bX * nX + bY * nY); if (0.0 <= a && a <= maxLambda * denom) { var mu2 = (-rX * bY) + rY * bX; if ((-k_slop * denom) <= mu2 && mu2 <= denom * (1.0 + k_slop)) { a /= denom; var nLen = Math.sqrt(nX * nX + nY * nY); nX /= nLen; nY /= nLen; lambda[0] = a; normal.Set(nX, nY); return true; } } } return false; }; Box2D.Collision.b2Segment.prototype.Extend = function(aabb) { this.ExtendForward(aabb); this.ExtendBackward(aabb); }; Box2D.Collision.b2Segment.prototype.ExtendForward = function(aabb) { var dX = this.p2.x - this.p1.x; var dY = this.p2.y - this.p1.y; var lambda = Math.min(dX > 0 ? (aabb.upperBound_.x - this.p1.x) / dX : dX < 0 ? (aabb.lowerBound_.x - this.p1.x) / dX : Number.POSITIVE_INFINITY, dY > 0 ? (aabb.upperBound_.y - this.p1.y) / dY : dY < 0 ? (aabb.lowerBound_.y - this.p1.y) / dY : Number.POSITIVE_INFINITY); this.p2.x = this.p1.x + dX * lambda; this.p2.y = this.p1.y + dY * lambda; }; Box2D.Collision.b2Segment.prototype.ExtendBackward = function(aabb) { var dX = (-this.p2.x) + this.p1.x; var dY = (-this.p2.y) + this.p1.y; var lambda = Math.min(dX > 0 ? (aabb.upperBound_.x - this.p2.x) / dX : dX < 0 ? (aabb.lowerBound_.x - this.p2.x) / dX : Number.POSITIVE_INFINITY, dY > 0 ? (aabb.upperBound_.y - this.p2.y) / dY : dY < 0 ? (aabb.lowerBound_.y - this.p2.y) / dY : Number.POSITIVE_INFINITY); this.p1.x = this.p2.x + dX * lambda; this.p1.y = this.p2.y + dY * lambda; }; /** * @constructor */ Box2D.Collision.b2SeparationFunction = function() { this.m_localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_axis = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Collision.b2SeparationFunction.prototype.Initialize = function(cache, proxyA, transformA, proxyB, transformB) { this.m_proxyA = proxyA; this.m_proxyB = proxyB; var count = cache.count; ; var localPointA; var localPointA1; var localPointA2; var localPointB; var localPointB1; var localPointB2; var pointAX = 0; var pointAY = 0; var pointBX = 0; var pointBY = 0; var normalX = 0; var normalY = 0; var tMat; var tVec; var s = 0; var sgn = 0; if (count == 1) { this.m_type = Box2D.Collision.b2SeparationFunction.e_points; localPointA = this.m_proxyA.GetVertex(cache.indexA[0]); localPointB = this.m_proxyB.GetVertex(cache.indexB[0]); tVec = localPointA; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointB; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); this.m_axis.x = pointBX - pointAX; this.m_axis.y = pointBY - pointAY; this.m_axis.Normalize(); } else if (cache.indexB[0] == cache.indexB[1]) { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceA; localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]); localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]); localPointB = this.m_proxyB.GetVertex(cache.indexB[0]); this.m_localPoint.x = 0.5 * (localPointA1.x + localPointA2.x); this.m_localPoint.y = 0.5 * (localPointA1.y + localPointA2.y); this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointA2, localPointA1), 1.0); this.m_axis.Normalize(); tVec = this.m_axis; tMat = transformA.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointB; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); s = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } else if (cache.indexA[0] == cache.indexA[0]) { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceB; localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]); localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]); localPointA = this.m_proxyA.GetVertex(cache.indexA[0]); this.m_localPoint.x = 0.5 * (localPointB1.x + localPointB2.x); this.m_localPoint.y = 0.5 * (localPointB1.y + localPointB2.y); this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointB2, localPointB1), 1.0); this.m_axis.Normalize(); tVec = this.m_axis; tMat = transformB.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointA; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); s = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } else { localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]); localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]); localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]); localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]); var dA = Box2D.Common.Math.b2Math.MulMV(transformA.R, Box2D.Common.Math.b2Math.SubtractVV(localPointA2, localPointA1)); var dB = Box2D.Common.Math.b2Math.MulMV(transformB.R, Box2D.Common.Math.b2Math.SubtractVV(localPointB2, localPointB1)); var a = dA.x * dA.x + dA.y * dA.y; var e = dB.x * dB.x + dB.y * dB.y; var r = Box2D.Common.Math.b2Math.SubtractVV(dB, dA); var c = dA.x * r.x + dA.y * r.y; var f = dB.x * r.x + dB.y * r.y; var b = dA.x * dB.x + dA.y * dB.y; var denom = a * e - b * b; s = 0.0; if (denom != 0.0) { s = Box2D.Common.Math.b2Math.Clamp((b * f - c * e) / denom, 0.0, 1.0); } var t = (b * s + f) / e; if (t < 0.0) { t = 0.0; s = Box2D.Common.Math.b2Math.Clamp((b - c) / a, 0.0, 1.0); } localPointA = Box2D.Common.Math.b2Vec2.Get(0, 0); localPointA.x = localPointA1.x + s * (localPointA2.x - localPointA1.x); localPointA.y = localPointA1.y + s * (localPointA2.y - localPointA1.y); localPointB = Box2D.Common.Math.b2Vec2.Get(0, 0); localPointB.x = localPointB1.x + s * (localPointB2.x - localPointB1.x); localPointB.y = localPointB1.y + s * (localPointB2.y - localPointB1.y); if (s == 0.0 || s == 1.0) { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceB; this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointB2, localPointB1), 1.0); this.m_axis.Normalize(); this.m_localPoint = localPointB; tVec = this.m_axis; tMat = transformB.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointA; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); sgn = (pointAX - pointBX) * normalX + (pointAY - pointBY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } else { this.m_type = Box2D.Collision.b2SeparationFunction.e_faceA; this.m_axis = Box2D.Common.Math.b2Math.CrossVF(Box2D.Common.Math.b2Math.SubtractVV(localPointA2, localPointA1), 1.0); this.m_localPoint = localPointA; tVec = this.m_axis; tMat = transformA.R; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tVec = this.m_localPoint; tMat = transformA.R; pointAX = transformA.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointAY = transformA.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tVec = localPointB; tMat = transformB.R; pointBX = transformB.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); pointBY = transformB.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); sgn = (pointBX - pointAX) * normalX + (pointBY - pointAY) * normalY; if (s < 0.0) { this.m_axis.NegativeSelf(); } } } }; Box2D.Collision.b2SeparationFunction.prototype.Evaluate = function(transformA, transformB) { var axisA; var axisB; var localPointA; var localPointB; var pointA; var pointB; var seperation = 0; var normal; switch (this.m_type) { case Box2D.Collision.b2SeparationFunction.e_points: axisA = Box2D.Common.Math.b2Math.MulTMV(transformA.R, this.m_axis); axisB = Box2D.Common.Math.b2Math.MulTMV(transformB.R, this.m_axis.GetNegative()); localPointA = this.m_proxyA.GetSupportVertex(axisA); localPointB = this.m_proxyB.GetSupportVertex(axisB); pointA = Box2D.Common.Math.b2Math.MulX(transformA, localPointA); pointB = Box2D.Common.Math.b2Math.MulX(transformB, localPointB); seperation = (pointB.x - pointA.x) * this.m_axis.x + (pointB.y - pointA.y) * this.m_axis.y; break; case Box2D.Collision.b2SeparationFunction.e_faceA: normal = Box2D.Common.Math.b2Math.MulMV(transformA.R, this.m_axis); pointA = Box2D.Common.Math.b2Math.MulX(transformA, this.m_localPoint); axisB = Box2D.Common.Math.b2Math.MulTMV(transformB.R, normal.GetNegative()); localPointB = this.m_proxyB.GetSupportVertex(axisB); pointB = Box2D.Common.Math.b2Math.MulX(transformB, localPointB); seperation = (pointB.x - pointA.x) * normal.x + (pointB.y - pointA.y) * normal.y; break; case Box2D.Collision.b2SeparationFunction.e_faceB: normal = Box2D.Common.Math.b2Math.MulMV(transformB.R, this.m_axis); pointB = Box2D.Common.Math.b2Math.MulX(transformB, this.m_localPoint); axisA = Box2D.Common.Math.b2Math.MulTMV(transformA.R, normal.GetNegative()); localPointA = this.m_proxyA.GetSupportVertex(axisA); pointA = Box2D.Common.Math.b2Math.MulX(transformA, localPointA); seperation = (pointA.x - pointB.x) * normal.x + (pointA.y - pointB.y) * normal.y; break; default: ; break; } return seperation; }; Box2D.Collision.b2SeparationFunction.e_points = 0x01; Box2D.Collision.b2SeparationFunction.e_faceA = 0x02; Box2D.Collision.b2SeparationFunction.e_faceB = 0x04; /** * @constructor */ Box2D.Collision.b2Simplex = function() { this.m_v1 = new Box2D.Collision.b2SimplexVertex(); this.m_v2 = new Box2D.Collision.b2SimplexVertex(); this.m_v3 = new Box2D.Collision.b2SimplexVertex(); this.m_vertices = [this.m_v1, this.m_v2, this.m_v3]; }; Box2D.Collision.b2Simplex.prototype.ReadCache = function(cache, proxyA, transformA, proxyB, transformB) { ; var wALocal; var wBLocal; this.m_count = cache.count; var vertices = this.m_vertices; for (var i = 0; i < this.m_count; i++) { var v = vertices[i]; v.indexA = cache.indexA[i]; v.indexB = cache.indexB[i]; wALocal = proxyA.GetVertex(v.indexA); wBLocal = proxyB.GetVertex(v.indexB); v.wA = Box2D.Common.Math.b2Math.MulX(transformA, wALocal); v.wB = Box2D.Common.Math.b2Math.MulX(transformB, wBLocal); v.w = Box2D.Common.Math.b2Math.SubtractVV(v.wB, v.wA); v.a = 0; } if (this.m_count > 1) { var metric1 = cache.metric; var metric2 = this.GetMetric(); if (metric2 < .5 * metric1 || 2.0 * metric1 < metric2 || metric2 < Number.MIN_VALUE) { this.m_count = 0; } } if (this.m_count == 0) { v = vertices[0]; v.indexA = 0; v.indexB = 0; wALocal = proxyA.GetVertex(0); wBLocal = proxyB.GetVertex(0); v.wA = Box2D.Common.Math.b2Math.MulX(transformA, wALocal); v.wB = Box2D.Common.Math.b2Math.MulX(transformB, wBLocal); v.w = Box2D.Common.Math.b2Math.SubtractVV(v.wB, v.wA); this.m_count = 1; } }; Box2D.Collision.b2Simplex.prototype.WriteCache = function(cache) { cache.metric = this.GetMetric(); cache.count = this.m_count; var vertices = this.m_vertices; for (var i = 0; i < this.m_count; i++) { cache.indexA[i] = vertices[i].indexA; cache.indexB[i] = vertices[i].indexB; } }; Box2D.Collision.b2Simplex.prototype.GetSearchDirection = function() { if (this.m_count == 1) { return this.m_v1.w.GetNegative(); } else if (this.m_count == 2) { var e12 = Box2D.Common.Math.b2Math.SubtractVV(this.m_v2.w, this.m_v1.w); var sgn = Box2D.Common.Math.b2Math.CrossVV(e12, this.m_v1.w.GetNegative()); if (sgn > 0.0) { return Box2D.Common.Math.b2Math.CrossFV(1.0, e12); } else { return Box2D.Common.Math.b2Math.CrossVF(e12, 1.0); } } else { ; return Box2D.Common.Math.b2Vec2.Get(0, 0); } }; Box2D.Collision.b2Simplex.prototype.GetClosestPoint = function() { if (this.m_count == 1) { return this.m_v1.w; } else if (this.m_count == 2) { return Box2D.Common.Math.b2Vec2.Get(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); } else { ; return Box2D.Common.Math.b2Vec2.Get(0, 0); } }; Box2D.Collision.b2Simplex.prototype.GetWitnessPoints = function(pA, pB) { if (this.m_count == 1) { pA.SetV(this.m_v1.wA); pB.SetV(this.m_v1.wB); } else if (this.m_count == 2) { pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x; pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y; pB.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x; pB.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y; } else if (this.m_count == 3) { pB.x = pA.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; pB.y = pA.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; } else { ; } }; Box2D.Collision.b2Simplex.prototype.GetMetric = function() { if (this.m_count == 1) { return 0.0; } else if (this.m_count == 2) { return Box2D.Common.Math.b2Math.SubtractVV(this.m_v1.w, this.m_v2.w).Length(); } else if (this.m_count == 3) { return Box2D.Common.Math.b2Math.CrossVV(Box2D.Common.Math.b2Math.SubtractVV(this.m_v2.w, this.m_v1.w), Box2D.Common.Math.b2Math.SubtractVV(this.m_v3.w, this.m_v1.w)); } else { ; return 0.0; } }; Box2D.Collision.b2Simplex.prototype.Solve2 = function() { var w1 = this.m_v1.w; var w2 = this.m_v2.w; var e12 = Box2D.Common.Math.b2Math.SubtractVV(w2, w1); var d12_2 = (-(w1.x * e12.x + w1.y * e12.y)); if (d12_2 <= 0.0) { this.m_v1.a = 1.0; this.m_count = 1; return; } var d12_1 = (w2.x * e12.x + w2.y * e12.y); if (d12_1 <= 0.0) { this.m_v2.a = 1.0; this.m_count = 1; this.m_v1.Set(this.m_v2); return; } var inv_d12 = 1.0 / (d12_1 + d12_2); this.m_v1.a = d12_1 * inv_d12; this.m_v2.a = d12_2 * inv_d12; this.m_count = 2; }; Box2D.Collision.b2Simplex.prototype.Solve3 = function() { var w1 = this.m_v1.w; var w2 = this.m_v2.w; var w3 = this.m_v3.w; var e12 = Box2D.Common.Math.b2Math.SubtractVV(w2, w1); var w1e12 = Box2D.Common.Math.b2Math.Dot(w1, e12); var w2e12 = Box2D.Common.Math.b2Math.Dot(w2, e12); var d12_1 = w2e12; var d12_2 = (-w1e12); var e13 = Box2D.Common.Math.b2Math.SubtractVV(w3, w1); var w1e13 = Box2D.Common.Math.b2Math.Dot(w1, e13); var w3e13 = Box2D.Common.Math.b2Math.Dot(w3, e13); var d13_1 = w3e13; var d13_2 = (-w1e13); var e23 = Box2D.Common.Math.b2Math.SubtractVV(w3, w2); var w2e23 = Box2D.Common.Math.b2Math.Dot(w2, e23); var w3e23 = Box2D.Common.Math.b2Math.Dot(w3, e23); var d23_1 = w3e23; var d23_2 = (-w2e23); var n123 = Box2D.Common.Math.b2Math.CrossVV(e12, e13); var d123_1 = n123 * Box2D.Common.Math.b2Math.CrossVV(w2, w3); var d123_2 = n123 * Box2D.Common.Math.b2Math.CrossVV(w3, w1); var d123_3 = n123 * Box2D.Common.Math.b2Math.CrossVV(w1, w2); if (d12_2 <= 0.0 && d13_2 <= 0.0) { this.m_v1.a = 1.0; this.m_count = 1; return; } if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) { var inv_d12 = 1.0 / (d12_1 + d12_2); this.m_v1.a = d12_1 * inv_d12; this.m_v2.a = d12_2 * inv_d12; this.m_count = 2; return; } if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) { var inv_d13 = 1.0 / (d13_1 + d13_2); this.m_v1.a = d13_1 * inv_d13; this.m_v3.a = d13_2 * inv_d13; this.m_count = 2; this.m_v2.Set(this.m_v3); return; } if (d12_1 <= 0.0 && d23_2 <= 0.0) { this.m_v2.a = 1.0; this.m_count = 1; this.m_v1.Set(this.m_v2); return; } if (d13_1 <= 0.0 && d23_1 <= 0.0) { this.m_v3.a = 1.0; this.m_count = 1; this.m_v1.Set(this.m_v3); return; } if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) { var inv_d23 = 1.0 / (d23_1 + d23_2); this.m_v2.a = d23_1 * inv_d23; this.m_v3.a = d23_2 * inv_d23; this.m_count = 2; this.m_v1.Set(this.m_v3); return; } var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3); this.m_v1.a = d123_1 * inv_d123; this.m_v2.a = d123_2 * inv_d123; this.m_v3.a = d123_3 * inv_d123; this.m_count = 3; }; /** * @constructor */ Box2D.Collision.b2SimplexCache = function() { this.indexA = [0, 0, 0]; this.indexB = [0, 0, 0]; }; /** * @constructor */ Box2D.Collision.b2SimplexVertex = function() {}; Box2D.Collision.b2SimplexVertex.prototype.Set = function(other) { this.wA.SetV(other.wA); this.wB.SetV(other.wB); this.w.SetV(other.w); this.a = other.a; this.indexA = other.indexA; this.indexB = other.indexB; }; /** * @constructor */ Box2D.Collision.b2TOIInput = function() { this.proxyA = new Box2D.Collision.b2DistanceProxy(); this.proxyB = new Box2D.Collision.b2DistanceProxy(); this.sweepA = new Box2D.Common.Math.b2Sweep(); this.sweepB = new Box2D.Common.Math.b2Sweep(); }; Box2D.Collision.b2TimeOfImpact = {}; Box2D.Collision.b2TimeOfImpact.TimeOfImpact = function(input) { Box2D.Collision.b2TimeOfImpact.b2_toiCalls++; var proxyA = input.proxyA; var proxyB = input.proxyB; var sweepA = input.sweepA; var sweepB = input.sweepB; ; ; var radius = proxyA.m_radius + proxyB.m_radius; var tolerance = input.tolerance; var alpha = 0.0; var k_maxIterations = 1000; var iter = 0; var target = 0.0; Box2D.Collision.b2TimeOfImpact.s_cache.count = 0; Box2D.Collision.b2TimeOfImpact.s_distanceInput.useRadii = false; for (;;) { sweepA.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfA, alpha); sweepB.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfB, alpha); Box2D.Collision.b2TimeOfImpact.s_distanceInput.proxyA = proxyA; Box2D.Collision.b2TimeOfImpact.s_distanceInput.proxyB = proxyB; Box2D.Collision.b2TimeOfImpact.s_distanceInput.transformA = Box2D.Collision.b2TimeOfImpact.s_xfA; Box2D.Collision.b2TimeOfImpact.s_distanceInput.transformB = Box2D.Collision.b2TimeOfImpact.s_xfB; Box2D.Collision.b2Distance.Distance(Box2D.Collision.b2TimeOfImpact.s_distanceOutput, Box2D.Collision.b2TimeOfImpact.s_cache, Box2D.Collision.b2TimeOfImpact.s_distanceInput); if (Box2D.Collision.b2TimeOfImpact.s_distanceOutput.distance <= 0.0) { alpha = 1.0; break; } Box2D.Collision.b2TimeOfImpact.s_fcn.Initialize(Box2D.Collision.b2TimeOfImpact.s_cache, proxyA, Box2D.Collision.b2TimeOfImpact.s_xfA, proxyB, Box2D.Collision.b2TimeOfImpact.s_xfB); var separation = Box2D.Collision.b2TimeOfImpact.s_fcn.Evaluate(Box2D.Collision.b2TimeOfImpact.s_xfA, Box2D.Collision.b2TimeOfImpact.s_xfB); if (separation <= 0.0) { alpha = 1.0; break; } if (iter == 0) { if (separation > radius) { target = Math.max(radius - tolerance, 0.75 * radius); } else { target = Math.max(separation - tolerance, 0.02 * radius); } } if (separation - target < 0.5 * tolerance) { if (iter == 0) { alpha = 1.0; break; } break; } var newAlpha = alpha; { var x1 = alpha; var x2 = 1.0; var f1 = separation; sweepA.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfA, x2); sweepB.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfB, x2); var f2 = Box2D.Collision.b2TimeOfImpact.s_fcn.Evaluate(Box2D.Collision.b2TimeOfImpact.s_xfA, Box2D.Collision.b2TimeOfImpact.s_xfB); if (f2 >= target) { alpha = 1.0; break; } var rootIterCount = 0; for (;;) { var x = 0; if (rootIterCount & 1) { x = x1 + (target - f1) * (x2 - x1) / (f2 - f1); } else { x = 0.5 * (x1 + x2); } sweepA.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfA, x); sweepB.GetTransform(Box2D.Collision.b2TimeOfImpact.s_xfB, x); var f = Box2D.Collision.b2TimeOfImpact.s_fcn.Evaluate(Box2D.Collision.b2TimeOfImpact.s_xfA, Box2D.Collision.b2TimeOfImpact.s_xfB); if (Math.abs(f - target) < 0.025 * tolerance) { newAlpha = x; break; } if (f > target) { x1 = x; f1 = f; } else { x2 = x; f2 = f; } rootIterCount++; Box2D.Collision.b2TimeOfImpact.b2_toiRootIters++; if (rootIterCount == 50) { break; } } Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = Math.max(Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters, rootIterCount); } if (newAlpha < (1.0 + 100.0 * Number.MIN_VALUE) * alpha) { break; } alpha = newAlpha; iter++; Box2D.Collision.b2TimeOfImpact.b2_toiIters++; if (iter == k_maxIterations) { break; } } Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = Math.max(Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters, iter); return alpha; }; /** * @constructor */ Box2D.Collision.b2WorldManifold = function() { /** @type {!Box2D.Common.Math.b2Vec2} */ this.m_normal = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {Array.<!Box2D.Common.Math.b2Vec2>} */ this.m_points = []; /** @type {number} */ this.m_pointCount = 0; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); } }; /** * @param {!Box2D.Collision.b2Manifold} manifold * @param {!Box2D.Common.Math.b2Transform} xfA * @param {number} radiusA * @param {!Box2D.Common.Math.b2Transform} xfB * @param {number} radiusB */ Box2D.Collision.b2WorldManifold.prototype.Initialize = function(manifold, xfA, radiusA, xfB, radiusB) { if (manifold.m_pointCount == 0) { return; } var i = 0; var tVec; var tMat; var normalX = 0; var normalY = 0; var planePointX = 0; var planePointY = 0; var clipPointX = 0; var clipPointY = 0; switch (manifold.m_type) { case Box2D.Collision.b2Manifold.e_circles: tMat = xfA.R; tVec = manifold.m_localPoint; var pointAX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; var pointAY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = xfB.R; tVec = manifold.m_points[0].m_localPoint; var pointBX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; var pointBY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; var dX = pointBX - pointAX; var dY = pointBY - pointAY; var d2 = dX * dX + dY * dY; if (d2 > Box2D.Common.b2Settings.MIN_VALUE_SQUARED) { var d = Math.sqrt(d2); this.m_normal.x = dX / d; this.m_normal.y = dY / d; } else { this.m_normal.x = 1; this.m_normal.y = 0; } var cAX = pointAX + radiusA * this.m_normal.x; var cAY = pointAY + radiusA * this.m_normal.y; var cBX = pointBX - radiusB * this.m_normal.x; var cBY = pointBY - radiusB * this.m_normal.y; this.m_points[0].x = 0.5 * (cAX + cBX); this.m_points[0].y = 0.5 * (cAY + cBY); break; case Box2D.Collision.b2Manifold.e_faceA: tMat = xfA.R; tVec = manifold.m_localPlaneNormal; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = xfA.R; tVec = manifold.m_localPoint; planePointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; planePointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_normal.x = normalX; this.m_normal.y = normalY; for (i = 0; i < manifold.m_pointCount; i++) { tMat = xfB.R; tVec = manifold.m_points[i].m_localPoint; clipPointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; clipPointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_points[i].x = clipPointX + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalX; this.m_points[i].y = clipPointY + 0.5 * (radiusA - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusB) * normalY; } break; case Box2D.Collision.b2Manifold.e_faceB: tMat = xfB.R; tVec = manifold.m_localPlaneNormal; normalX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; normalY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = xfB.R; tVec = manifold.m_localPoint; planePointX = xfB.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; planePointY = xfB.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_normal.x = (-normalX); this.m_normal.y = (-normalY); for (i = 0; i < manifold.m_pointCount; i++) { tMat = xfA.R; tVec = manifold.m_points[i].m_localPoint; clipPointX = xfA.position.x + tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; clipPointY = xfA.position.y + tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; this.m_points[i].x = clipPointX + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalX; this.m_points[i].y = clipPointY + 0.5 * (radiusB - (clipPointX - planePointX) * normalX - (clipPointY - planePointY) * normalY - radiusA) * normalY; } break; } }; /** * @param {!Box2D.Dynamics.b2BodyDef} bd * @param {!Box2D.Dynamics.b2World} world * @constructor */ Box2D.Dynamics.b2Body = function(bd, world) { /** * @const * @private * @type {string} */ this.ID = "Body" + Box2D.Dynamics.b2Body.NEXT_ID++; /** * @private * @type {!Box2D.Common.Math.b2Transform} */ this.m_xf = new Box2D.Common.Math.b2Transform(); this.m_xf.position.SetV(bd.position); this.m_xf.R.Set(bd.angle); /** * @private * @type {!Box2D.Common.Math.b2Sweep} */ this.m_sweep = new Box2D.Common.Math.b2Sweep(); this.m_sweep.localCenter.SetZero(); this.m_sweep.t0 = 1.0; this.m_sweep.a0 = this.m_sweep.a = bd.angle; this.m_sweep.c.x = (this.m_xf.R.col1.x * this.m_sweep.localCenter.x + this.m_xf.R.col2.x * this.m_sweep.localCenter.y); this.m_sweep.c.y = (this.m_xf.R.col1.y * this.m_sweep.localCenter.x + this.m_xf.R.col2.y * this.m_sweep.localCenter.y); this.m_sweep.c.x += this.m_xf.position.x; this.m_sweep.c.y += this.m_xf.position.y; this.m_sweep.c0.SetV(this.m_sweep.c); /** * @private * @type {!Box2D.Common.Math.b2Vec2} */ this.m_linearVelocity = bd.linearVelocity.Copy(); /** * @private * @type {!Box2D.Common.Math.b2Vec2} */ this.m_force = Box2D.Common.Math.b2Vec2.Get(0, 0); /** * @private * @type {boolean} */ this.m_bullet = bd.bullet; /** * @private * @type {boolean} */ this.m_fixedRotation = bd.fixedRotation; /** * @private * @type {boolean} */ this.m_allowSleep = bd.allowSleep; /** * @private * @type {boolean} */ this.m_awake = bd.awake; /** * @private * @type {boolean} */ this.m_active = bd.active; /** * @private * @type {!Box2D.Dynamics.b2World} */ this.m_world = world; /** * @private * @type {Box2D.Dynamics.Joints.b2Joint} */ this.m_jointList = null; /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.contactList = new Box2D.Dynamics.Contacts.b2ContactList(); /** * @private * @type {!Box2D.Dynamics.Controllers.b2ControllerList} */ this.controllerList = new Box2D.Dynamics.Controllers.b2ControllerList(); /** * @private * @type {number} */ this.m_controllerCount = 0; /** * @private * @type {number} */ this.m_angularVelocity = bd.angularVelocity; /** * @private * @type {number} */ this.m_linearDamping = bd.linearDamping; /** * @private * @type {number} */ this.m_angularDamping = bd.angularDamping; /** * @private * @type {number} */ this.m_torque = 0; /** * @private * @type {number} */ this.m_sleepTime = 0; /** * @private * @type {number} */ this.m_type = bd.type; /** * @private * @type {number} */ this.m_mass = this.m_type == Box2D.Dynamics.b2BodyDef.b2_dynamicBody ? 1 : 0; /** * @private * @type {number} */ this.m_invMass = this.m_type == Box2D.Dynamics.b2BodyDef.b2_dynamicBody ? 1 : 0; /** * @private * @type {number} */ this.m_I = 0; /** * @private * @type {number} */ this.m_invI = 0; /** * @private * @type {number} */ this.m_inertiaScale = bd.inertiaScale; /** * @private * @type {!Box2D.Dynamics.b2FixtureList} */ this.fixtureList = new Box2D.Dynamics.b2FixtureList(); /** * @private * @type {Array.<!Box2D.Dynamics.b2BodyList>} */ this.m_lists = []; }; /** * @param {!Box2D.Dynamics.b2FixtureDef} def */ Box2D.Dynamics.b2Body.prototype.CreateFixture = function(def) { ; var fixture = new Box2D.Dynamics.b2Fixture(this, this.m_xf, def); if (this.m_active) { var broadPhase = this.m_world.m_contactManager.m_broadPhase; fixture.CreateProxy(broadPhase, this.m_xf); } this.fixtureList.AddFixture(fixture); fixture.m_body = this; if (fixture.m_density > 0.0) { this.ResetMassData(); } this.m_world.m_newFixture = true; return fixture; }; Box2D.Dynamics.b2Body.prototype.CreateFixture2 = function(shape, density) { if (density === undefined) density = 0.0; var def = new Box2D.Dynamics.b2FixtureDef(); def.shape = shape; def.density = density; return this.CreateFixture(def); }; Box2D.Dynamics.b2Body.prototype.Destroy = function() { Box2D.Common.Math.b2Vec2.Free(this.m_linearVelocity); Box2D.Common.Math.b2Vec2.Free(this.m_force); }; Box2D.Dynamics.b2Body.prototype.DestroyFixture = function(fixture) { ; this.fixtureList.RemoveFixture(fixture); for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (fixture == contactNode.contact.m_fixtureA || fixture == contactNode.contact.m_fixtureB) { this.m_world.m_contactManager.Destroy(contactNode.contact); } } if (this.m_active) { var broadPhase = this.m_world.m_contactManager.m_broadPhase; fixture.DestroyProxy(broadPhase); } fixture.Destroy(); fixture.m_body = null; this.ResetMassData(); }; /** * @param {!Box2D.Common.Math.b2Vec2} position * @param {number} angle */ Box2D.Dynamics.b2Body.prototype.SetPositionAndAngle = function(position, angle) { ; this.m_xf.R.Set(angle); this.m_xf.position.SetV(position); var tMat = this.m_xf.R; var tVec = this.m_sweep.localCenter; this.m_sweep.c.x = (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); this.m_sweep.c.y = (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); this.m_sweep.c.x += this.m_xf.position.x; this.m_sweep.c.y += this.m_xf.position.y; this.m_sweep.c0.SetV(this.m_sweep.c); this.m_sweep.a0 = this.m_sweep.a = angle; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.Synchronize(broadPhase, this.m_xf, this.m_xf); } this.m_world.m_contactManager.FindNewContacts(); }; /** * @param {!Box2D.Common.Math.b2Transform} xf */ Box2D.Dynamics.b2Body.prototype.SetTransform = function(xf) { this.SetPositionAndAngle(xf.position, xf.GetAngle()); }; /** * @return {!Box2D.Common.Math.b2Transform} */ Box2D.Dynamics.b2Body.prototype.GetTransform = function() { return this.m_xf; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Dynamics.b2Body.prototype.GetPosition = function() { return this.m_xf.position; }; /** * @param {!Box2D.Common.Math.b2Vec2} position */ Box2D.Dynamics.b2Body.prototype.SetPosition = function(position) { this.SetPositionAndAngle(position, this.GetAngle()); }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetAngle = function() { return this.m_sweep.a; }; /** * @param {number} angle */ Box2D.Dynamics.b2Body.prototype.SetAngle = function(angle) { this.SetPositionAndAngle(this.GetPosition(), angle); }; Box2D.Dynamics.b2Body.prototype.GetWorldCenter = function() { return this.m_sweep.c; }; Box2D.Dynamics.b2Body.prototype.GetLocalCenter = function() { return this.m_sweep.localCenter; }; Box2D.Dynamics.b2Body.prototype.SetLinearVelocity = function(v) { if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody) { return; } this.m_linearVelocity.SetV(v); }; Box2D.Dynamics.b2Body.prototype.GetLinearVelocity = function() { return this.m_linearVelocity; }; Box2D.Dynamics.b2Body.prototype.SetAngularVelocity = function(omega) { if (omega === undefined) omega = 0; if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody) { return; } this.m_angularVelocity = omega; }; Box2D.Dynamics.b2Body.prototype.GetAngularVelocity = function() { return this.m_angularVelocity; }; Box2D.Dynamics.b2Body.prototype.GetDefinition = function() { var bd = new Box2D.Dynamics.b2BodyDef(); bd.type = this.GetType(); bd.allowSleep = this.m_allowSleep; bd.angle = this.GetAngle(); bd.angularDamping = this.m_angularDamping; bd.angularVelocity = this.m_angularVelocity; bd.fixedRotation = this.m_fixedRotation; bd.bullet = this.m_bullet; bd.active = this.m_active; bd.awake = this.m_awake; bd.linearDamping = this.m_linearDamping; bd.linearVelocity.SetV(this.GetLinearVelocity()); bd.position = this.GetPosition(); return bd; }; Box2D.Dynamics.b2Body.prototype.ApplyForce = function(force, point) { if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.SetAwake(true); this.m_force.x += force.x; this.m_force.y += force.y; this.m_torque += ((point.x - this.m_sweep.c.x) * force.y - (point.y - this.m_sweep.c.y) * force.x); }; Box2D.Dynamics.b2Body.prototype.ApplyTorque = function(torque) { if (torque === undefined) torque = 0; if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.SetAwake(true); this.m_torque += torque; }; Box2D.Dynamics.b2Body.prototype.ApplyImpulse = function(impulse, point) { if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.SetAwake(true); this.m_linearVelocity.x += this.m_invMass * impulse.x; this.m_linearVelocity.y += this.m_invMass * impulse.y; this.m_angularVelocity += this.m_invI * ((point.x - this.m_sweep.c.x) * impulse.y - (point.y - this.m_sweep.c.y) * impulse.x); }; Box2D.Dynamics.b2Body.prototype.Split = function(callback) { var linearVelocity = this.GetLinearVelocity().Copy(); var angularVelocity = this.GetAngularVelocity(); var center = this.GetWorldCenter(); var body1 = this; var body2 = this.m_world.CreateBody(this.GetDefinition()); var prev; for (var node = body1.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { var f = node.fixture; if (callback(f)) { body1.fixtureList.RemoveFixture(f); body2.fixtureList.AddFixture(f); } } body1.ResetMassData(); body2.ResetMassData(); var center1 = body1.GetWorldCenter(); var center2 = body2.GetWorldCenter(); var velocity1 = Box2D.Common.Math.b2Math.AddVV(linearVelocity, Box2D.Common.Math.b2Math.CrossFV(angularVelocity, Box2D.Common.Math.b2Math.SubtractVV(center1, center))); var velocity2 = Box2D.Common.Math.b2Math.AddVV(linearVelocity, Box2D.Common.Math.b2Math.CrossFV(angularVelocity, Box2D.Common.Math.b2Math.SubtractVV(center2, center))); body1.SetLinearVelocity(velocity1); body2.SetLinearVelocity(velocity2); body1.SetAngularVelocity(angularVelocity); body2.SetAngularVelocity(angularVelocity); body1.SynchronizeFixtures(); body2.SynchronizeFixtures(); return body2; }; Box2D.Dynamics.b2Body.prototype.Merge = function(other) { for (var node = other.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { this.fixtureList.AddFixture(node.fixture); other.fixtureList.RemoveFixture(node.fixture); } other.ResetMassData(); this.ResetMassData(); this.SynchronizeFixtures(); }; Box2D.Dynamics.b2Body.prototype.GetMass = function() { return this.m_mass; }; Box2D.Dynamics.b2Body.prototype.GetInertia = function() { return this.m_I; }; /** * @param {Box2D.Collision.Shapes.b2MassData=} massData * @return {!Box2D.Collision.Shapes.b2MassData} */ Box2D.Dynamics.b2Body.prototype.GetMassData = function(massData) { if (!massData) { massData = new Box2D.Collision.Shapes.b2MassData(); } massData.mass = this.m_mass; massData.I = this.m_I; massData.center.SetV(this.m_sweep.localCenter); return massData; }; /** * @param {!Box2D.Collision.Shapes.b2MassData} massData */ Box2D.Dynamics.b2Body.prototype.SetMassData = function(massData) { ; if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return; } this.m_invMass = 0.0; this.m_I = 0.0; this.m_invI = 0.0; this.m_mass = massData.mass; if (this.m_mass <= 0.0) { this.m_mass = 1.0; } this.m_invMass = 1.0 / this.m_mass; if (massData.I > 0.0 && !this.m_fixedRotation) { this.m_I = massData.I - this.m_mass * (massData.center.x * massData.center.x + massData.center.y * massData.center.y); this.m_invI = 1.0 / this.m_I; } var oldCenter = this.m_sweep.c.Copy(); this.m_sweep.localCenter.SetV(massData.center); this.m_sweep.c0.SetV(Box2D.Common.Math.b2Math.MulX(this.m_xf, this.m_sweep.localCenter)); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y)); this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x)); }; Box2D.Dynamics.b2Body.prototype.ResetMassData = function() { this.m_mass = 0.0; this.m_invMass = 0.0; this.m_I = 0.0; this.m_invI = 0.0; this.m_sweep.localCenter.SetZero(); if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody || this.m_type == Box2D.Dynamics.b2BodyDef.b2_kinematicBody) { return; } var center = Box2D.Common.Math.b2Vec2.Get(0, 0); for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { var f = node.fixture; if (f.m_density == 0.0) { continue; } var massData = f.GetMassData(); this.m_mass += massData.mass; center.x += massData.center.x * massData.mass; center.y += massData.center.y * massData.mass; this.m_I += massData.I; } if (this.m_mass > 0.0) { this.m_invMass = 1.0 / this.m_mass; center.x *= this.m_invMass; center.y *= this.m_invMass; } else { this.m_mass = 1.0; this.m_invMass = 1.0; } if (this.m_I > 0.0 && !this.m_fixedRotation) { this.m_I -= this.m_mass * (center.x * center.x + center.y * center.y); this.m_I *= this.m_inertiaScale; ; this.m_invI = 1.0 / this.m_I; } else { this.m_I = 0.0; this.m_invI = 0.0; } var oldCenter = this.m_sweep.c.Copy(); this.m_sweep.localCenter.SetV(center); this.m_sweep.c0.SetV(Box2D.Common.Math.b2Math.MulX(this.m_xf, this.m_sweep.localCenter)); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_linearVelocity.x += this.m_angularVelocity * (-(this.m_sweep.c.y - oldCenter.y)); this.m_linearVelocity.y += this.m_angularVelocity * (+(this.m_sweep.c.x - oldCenter.x)); Box2D.Common.Math.b2Vec2.Free(center); Box2D.Common.Math.b2Vec2.Free(oldCenter); }; Box2D.Dynamics.b2Body.prototype.GetWorldPoint = function(localPoint) { var A = this.m_xf.R; var u = Box2D.Common.Math.b2Vec2.Get(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y); u.x += this.m_xf.position.x; u.y += this.m_xf.position.y; return u; }; Box2D.Dynamics.b2Body.prototype.GetWorldVector = function(localVector) { return Box2D.Common.Math.b2Math.MulMV(this.m_xf.R, localVector); }; Box2D.Dynamics.b2Body.prototype.GetLocalPoint = function(worldPoint) { return Box2D.Common.Math.b2Math.MulXT(this.m_xf, worldPoint); }; Box2D.Dynamics.b2Body.prototype.GetLocalVector = function(worldVector) { return Box2D.Common.Math.b2Math.MulTMV(this.m_xf.R, worldVector); }; Box2D.Dynamics.b2Body.prototype.GetLinearVelocityFromWorldPoint = function(worldPoint) { return Box2D.Common.Math.b2Vec2.Get(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x)); }; Box2D.Dynamics.b2Body.prototype.GetLinearVelocityFromLocalPoint = function(localPoint) { var A = this.m_xf.R; var worldPoint = Box2D.Common.Math.b2Vec2.Get(A.col1.x * localPoint.x + A.col2.x * localPoint.y, A.col1.y * localPoint.x + A.col2.y * localPoint.y); worldPoint.x += this.m_xf.position.x; worldPoint.y += this.m_xf.position.y; var velocity = Box2D.Common.Math.b2Vec2.Get(this.m_linearVelocity.x - this.m_angularVelocity * (worldPoint.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (worldPoint.x - this.m_sweep.c.x)); Box2D.Common.Math.b2Vec2.Free(worldPoint); return velocity; }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetLinearDamping = function() { return this.m_linearDamping; }; /** * @param {number} linearDamping */ Box2D.Dynamics.b2Body.prototype.SetLinearDamping = function(linearDamping) { this.m_linearDamping = linearDamping; }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetAngularDamping = function() { return this.m_angularDamping; }; /** * @param {number} angularDamping */ Box2D.Dynamics.b2Body.prototype.SetAngularDamping = function(angularDamping) { this.m_angularDamping = angularDamping; }; /** * @param {number} type */ Box2D.Dynamics.b2Body.prototype.SetType = function(type) { if (this.m_type == type) { return; } this.m_type = type; this.ResetMassData(); if (this.m_type == Box2D.Dynamics.b2BodyDef.b2_staticBody) { this.m_linearVelocity.SetZero(); this.m_angularVelocity = 0.0; } this.SetAwake(true); this.m_force.SetZero(); this.m_torque = 0.0; for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.FlagForFiltering(); } for (var i = 0; i < this.m_lists.length; i++) { this.m_lists[i].UpdateBody(this); } }; /** * @return {number} */ Box2D.Dynamics.b2Body.prototype.GetType = function() { return this.m_type; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetBullet = function(flag) { this.m_bullet = flag; }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsBullet = function() { return this.m_bullet; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetSleepingAllowed = function(flag) { this.m_allowSleep = flag; if (!flag) { this.SetAwake(true); } }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetAwake = function(flag) { if (this.m_awake != flag) { this.m_awake = flag; this.m_sleepTime = 0; if (!flag) { this.m_linearVelocity.SetZero(); this.m_angularVelocity = 0.0; this.m_force.SetZero(); this.m_torque = 0.0; } for (var i = 0; i < this.m_lists.length; i++) { this.m_lists[i].UpdateBody(this); } } }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsAwake = function() { return this.m_awake; }; /** * @param {boolean} fixed */ Box2D.Dynamics.b2Body.prototype.SetFixedRotation = function(fixed) { this.m_fixedRotation = fixed; this.ResetMassData(); }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsFixedRotation = function() { return this.m_fixedRotation; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2Body.prototype.SetActive = function(flag) { if (flag == this.m_active) { return; } if (flag) { this.m_active = true; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.CreateProxy(broadPhase, this.m_xf); } } else { this.m_active = false; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.DestroyProxy(broadPhase); } for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { this.m_world.m_contactManager.Destroy(contactNode.contact); } } for (var i = 0; i < this.m_lists.length; i++) { this.m_lists[i].UpdateBody(this); } }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsActive = function() { return this.m_active; }; /** * @return {boolean} */ Box2D.Dynamics.b2Body.prototype.IsSleepingAllowed = function() { return this.m_allowSleep; }; Box2D.Dynamics.b2Body.prototype.GetFixtureList = function() { return this.fixtureList; }; Box2D.Dynamics.b2Body.prototype.GetJointList = function() { return this.m_jointList; }; Box2D.Dynamics.b2Body.prototype.GetControllerList = function() { return this.controllerList; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.b2Body.prototype.AddController = function(controller) { this.controllerList.AddController(controller); }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.b2Body.prototype.RemoveController = function(controller) { this.controllerList.RemoveController(controller); }; Box2D.Dynamics.b2Body.prototype.GetContactList = function() { return this.contactList; }; Box2D.Dynamics.b2Body.prototype.GetWorld = function() { return this.m_world; }; Box2D.Dynamics.b2Body.prototype.SynchronizeFixtures = function() { var xf1 = Box2D.Dynamics.b2Body.s_xf1; xf1.R.Set(this.m_sweep.a0); var tMat = xf1.R; var tVec = this.m_sweep.localCenter; xf1.position.x = this.m_sweep.c0.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); xf1.position.y = this.m_sweep.c0.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); var f; var broadPhase = this.m_world.m_contactManager.m_broadPhase; for (var node = this.fixtureList.GetFirstNode(); node; node = node.GetNextNode()) { node.fixture.Synchronize(broadPhase, xf1, this.m_xf); } }; Box2D.Dynamics.b2Body.prototype.SynchronizeTransform = function() { this.m_xf.R.Set(this.m_sweep.a); var tMat = this.m_xf.R; var tVec = this.m_sweep.localCenter; this.m_xf.position.x = this.m_sweep.c.x - (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); this.m_xf.position.y = this.m_sweep.c.y - (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); }; Box2D.Dynamics.b2Body.prototype.ShouldCollide = function(other) { if (this.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody && other.m_type != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { return false; } for (var jn = this.m_jointList; jn; jn = jn.next) { if (jn.other == other) if (jn.joint.m_collideConnected == false) { return false; } } return true; }; /** * @param {number} t */ Box2D.Dynamics.b2Body.prototype.Advance = function(t) { this.m_sweep.Advance(t); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_sweep.a = this.m_sweep.a0; this.SynchronizeTransform(); }; /** * @type {number} * @private */ Box2D.Dynamics.b2Body.NEXT_ID = 0; /** * @constructor */ Box2D.Dynamics.b2BodyDef = function() { /** @type {!Box2D.Common.Math.b2Vec2} */ this.position = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {!Box2D.Common.Math.b2Vec2} */ this.linearVelocity = Box2D.Common.Math.b2Vec2.Get(0, 0); /** @type {number} */ this.angle = 0.0; /** @type {number} */ this.angularVelocity = 0.0; /** @type {number} */ this.linearDamping = 0.0; /** @type {number} */ this.angularDamping = 0.0; /** @type {boolean} */ this.allowSleep = true; /** @type {boolean} */ this.awake = true; /** @type {boolean} */ this.fixedRotation = false; /** @type {boolean} */ this.bullet = false; /** @type {number} */ this.type = Box2D.Dynamics.b2BodyDef.b2_staticBody; /** @type {boolean} */ this.active = true; /** @type {number} */ this.inertiaScale = 1.0; }; /** * @const * @type {number} */ Box2D.Dynamics.b2BodyDef.b2_staticBody = 0; /** * @const * @type {number} */ Box2D.Dynamics.b2BodyDef.b2_kinematicBody = 1; /** * @const * @type {number} */ Box2D.Dynamics.b2BodyDef.b2_dynamicBody = 2; /** * @constructor */ Box2D.Dynamics.b2BodyList = function() { /** * @private * @type {Array.<Box2D.Dynamics.b2BodyListNode>} */ this.bodyFirstNodes = []; for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { this.bodyFirstNodes[i] = null; } /** * @private * @type {Array.<Box2D.Dynamics.b2BodyListNode>} */ this.bodyLastNodes = []; for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { this.bodyLastNodes[i] = null; } /** * @private * @type {Object.<Array.<Box2D.Dynamics.b2BodyListNode>>} */ this.bodyNodeLookup = {}; /** * @private * @type {number} */ this.bodyCount = 0; }; /** * @param {number} type * @return {Box2D.Dynamics.b2BodyListNode} */ Box2D.Dynamics.b2BodyList.prototype.GetFirstNode = function(type) { return this.bodyFirstNodes[type]; }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2BodyList.prototype.AddBody = function(body) { var bodyID = body.ID; if (this.bodyNodeLookup[bodyID] == null) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.allBodies); this.UpdateBody(body); body.m_lists.push(this); this.bodyCount++; } }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2BodyList.prototype.UpdateBody = function(body) { var type = body.GetType(); var bodyID = body.ID; var awake = body.IsAwake(); var active = body.IsActive(); if (type == Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.dynamicBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.dynamicBodies); } if (type != Box2D.Dynamics.b2BodyDef.b2_staticBody) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticBodies); } if (type != Box2D.Dynamics.b2BodyDef.b2_staticBody && active && awake) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); } if (awake) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); } if (active) { this.CreateNode(body, bodyID, Box2D.Dynamics.b2BodyList.TYPES.activeBodies); } else { this.RemoveNode(bodyID, Box2D.Dynamics.b2BodyList.TYPES.activeBodies); } }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2BodyList.prototype.RemoveBody = function(body) { var bodyID = body.ID; if (this.bodyNodeLookup[bodyID] != null) { cr.arrayFindRemove(body.m_lists, this); for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { this.RemoveNode(bodyID, i); } delete this.bodyNodeLookup[bodyID]; this.bodyCount--; } }; /** * @param {string} bodyID * @param {number} type */ Box2D.Dynamics.b2BodyList.prototype.RemoveNode = function(bodyID, type) { var nodeList = this.bodyNodeLookup[bodyID]; if (nodeList == null) { return; } var node = nodeList[type]; if (node == null) { return; } nodeList[type] = null; var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.bodyFirstNodes[type] = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.bodyLastNodes[type] = prevNode; } else { nextNode.SetPreviousNode(prevNode); } }; /** * @param {!Box2D.Dynamics.b2Body} body * @param {string} bodyID * @param {number} type */ Box2D.Dynamics.b2BodyList.prototype.CreateNode = function(body, bodyID, type) { var nodeList = this.bodyNodeLookup[bodyID]; if (nodeList == null) { nodeList = []; for(var i = 0; i <= Box2D.Dynamics.b2BodyList.TYPES.allBodies; i++) { nodeList[i] = null; } this.bodyNodeLookup[bodyID] = nodeList; } if (nodeList[type] == null) { nodeList[type] = new Box2D.Dynamics.b2BodyListNode(body); var prevNode = this.bodyLastNodes[type]; if (prevNode != null) { prevNode.SetNextNode(nodeList[type]); } else { this.bodyFirstNodes[type] = nodeList[type]; } nodeList[type].SetPreviousNode(prevNode); this.bodyLastNodes[type] = nodeList[type]; } }; /** * @return {number} */ Box2D.Dynamics.b2BodyList.prototype.GetBodyCount = function() { return this.bodyCount; }; /** * @enum {number} */ Box2D.Dynamics.b2BodyList.TYPES = { dynamicBodies: 0, nonStaticBodies: 1, activeBodies: 2, nonStaticActiveAwakeBodies: 3, awakeBodies: 4, allBodies: 5 // Assumed to be last by above code }; /** * @param {!Box2D.Dynamics.b2Body} body * @constructor */ Box2D.Dynamics.b2BodyListNode = function(body) { /** * @const * @type {!Box2D.Dynamics.b2Body} */ this.body = body; /** * @private * @type {Box2D.Dynamics.b2BodyListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.b2BodyListNode} */ this.previous = null; }; /** * @param {Box2D.Dynamics.b2BodyListNode} node */ Box2D.Dynamics.b2BodyListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.b2BodyListNode} node */ Box2D.Dynamics.b2BodyListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2BodyListNode.prototype.GetBody = function() { return this.body; }; /** * @return {Box2D.Dynamics.b2BodyListNode} */ Box2D.Dynamics.b2BodyListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.b2BodyListNode} */ Box2D.Dynamics.b2BodyListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @constructor */ Box2D.Dynamics.b2ContactFilter = function() {}; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @return {boolean} */ Box2D.Dynamics.b2ContactFilter.prototype.ShouldCollide = function(fixtureA, fixtureB) { var filter1 = fixtureA.GetFilterData(); var filter2 = fixtureB.GetFilterData(); if (filter1.groupIndex == filter2.groupIndex && filter1.groupIndex != 0) { return filter1.groupIndex > 0; } return (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0; }; /** @type {!Box2D.Dynamics.b2ContactFilter} */ Box2D.Dynamics.b2ContactFilter.b2_defaultFilter = new Box2D.Dynamics.b2ContactFilter(); /** * @constructor */ Box2D.Dynamics.b2ContactImpulse = function () { this.normalImpulses = []; this.tangentImpulses = []; }; /** * @constructor */ Box2D.Dynamics.b2ContactListener = function () {}; Box2D.Dynamics.b2ContactListener.prototype.BeginContact = function (contact) {}; Box2D.Dynamics.b2ContactListener.prototype.EndContact = function (contact) {}; Box2D.Dynamics.b2ContactListener.prototype.PreSolve = function (contact, oldManifold) {}; Box2D.Dynamics.b2ContactListener.prototype.PostSolve = function (contact, impulse) {}; /** * @param {!Box2D.Dynamics.b2World} world * @constructor */ Box2D.Dynamics.b2ContactManager = function(world) { /** * @private * @const * @type {!Box2D.Dynamics.b2World} */ this.m_world = world; /** * @private * @type {!Box2D.Dynamics.b2ContactFilter} */ this.m_contactFilter = Box2D.Dynamics.b2ContactFilter.b2_defaultFilter; /** * @private * @type {!Box2D.Dynamics.b2ContactListener} */ this.m_contactListener = Box2D.Dynamics.b2ContactListener.b2_defaultListener; /** * @private * @const * @type {!Box2D.Dynamics.Contacts.b2ContactFactory} */ this.m_contactFactory = new Box2D.Dynamics.Contacts.b2ContactFactory(); /** * @private * @type {!Box2D.Collision.b2DynamicTreeBroadPhase} */ this.m_broadPhase = new Box2D.Collision.b2DynamicTreeBroadPhase(); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.b2ContactManager.prototype.AddPair = function (fixtureA, fixtureB) { var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); if (bodyA == bodyB) { return; } if (!bodyB.ShouldCollide(bodyA)) { return; } if (!this.m_contactFilter.ShouldCollide(fixtureA, fixtureB)) { return; } for (var contactNode = bodyB.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { var fA = contactNode.contact.m_fixtureA; if (fA == fixtureA) { var fB = contactNode.contact.m_fixtureB; if (fB == fixtureB) { return; } } else if (fA == fixtureB) { var fB = contactNode.contact.m_fixtureB; if (fB == fixtureA) { return; } } } var c = this.m_contactFactory.Create(fixtureA, fixtureB); }; Box2D.Dynamics.b2ContactManager.prototype.FindNewContacts = function () { var self = this; /** @type {function(!Box2D.Dynamics.b2Fixture, !Box2D.Dynamics.b2Fixture)} */ var addPairCallback = function(fixtureA, fixtureB) { self.AddPair(fixtureA, fixtureB) }; this.m_broadPhase.UpdatePairs(addPairCallback); }; Box2D.Dynamics.b2ContactManager.prototype.Destroy = function (c) { var fixtureA = c.m_fixtureA; var fixtureB = c.m_fixtureB; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); if (c.touching) { this.m_contactListener.EndContact(c); } if (c.m_manifold.m_pointCount > 0) { c.m_fixtureA.GetBody().SetAwake(true); c.m_fixtureB.GetBody().SetAwake(true); } c.RemoveFromLists(); this.m_contactFactory.Destroy(c); }; Box2D.Dynamics.b2ContactManager.prototype.Collide = function() { for (var contactNode = this.m_world.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { var c = contactNode.contact; var fixtureA = c.m_fixtureA; var fixtureB = c.m_fixtureB; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); if (bodyA.IsAwake() == false && bodyB.IsAwake() == false) { continue; } if (c.IsFiltering()) { if (bodyB.ShouldCollide(bodyA) == false) { this.Destroy(c); continue; } if (this.m_contactFilter.ShouldCollide(fixtureA, fixtureB) == false) { this.Destroy(c); continue; } c.ClearFiltering(); } var proxyA = fixtureA.m_proxy; var proxyB = fixtureB.m_proxy; var overlap = this.m_broadPhase.TestOverlap(proxyA, proxyB); if (overlap == false) { this.Destroy(c); continue; } c.Update(this.m_contactListener); } }; /** * @constructor */ Box2D.Dynamics.b2DestructionListener = function () {}; Box2D.Dynamics.b2DestructionListener.prototype.SayGoodbyeJoint = function (joint) {}; Box2D.Dynamics.b2DestructionListener.prototype.SayGoodbyeFixture = function (fixture) {}; /** * @constructor */ Box2D.Dynamics.b2FilterData = function () { this.categoryBits = 0x0001; this.maskBits = 0xFFFF; this.groupIndex = 0; }; /** * @return {!Box2D.Dynamics.b2FilterData} */ Box2D.Dynamics.b2FilterData.prototype.Copy = function () { var copy = new Box2D.Dynamics.b2FilterData(); copy.categoryBits = this.categoryBits; copy.maskBits = this.maskBits; copy.groupIndex = this.groupIndex; return copy; }; /** * @param {!Box2D.Dynamics.b2Body} body * @param {!Box2D.Common.Math.b2Transform} xf * @param {!Box2D.Dynamics.b2FixtureDef} def * @constructor */ Box2D.Dynamics.b2Fixture = function(body, xf, def) { /** * @const * @private * @type {string} */ this.ID = "Fixture" + Box2D.Dynamics.b2Fixture.NEXT_ID++; /** * @private * @type {!Box2D.Dynamics.b2FilterData} */ this.m_filter = def.filter.Copy(); /** * @private * @type {!Box2D.Collision.b2AABB} */ this.m_aabb = Box2D.Collision.b2AABB.Get(); /** * @private * @type {!Box2D.Dynamics.b2Body} */ this.m_body = body; /** * @private * @type {!Box2D.Collision.Shapes.b2Shape} */ this.m_shape = def.shape.Copy(); /** * @private * @type {number} */ this.m_density = def.density; /** * @private * @type {number} */ this.m_friction = def.friction; /** * @private * @type {number} */ this.m_restitution = def.restitution; /** * @private * @type {boolean} */ this.m_isSensor = def.isSensor; }; /** * @return {!Box2D.Collision.Shapes.b2Shape} */ Box2D.Dynamics.b2Fixture.prototype.GetShape = function() { return this.m_shape; }; /** * @param {boolean} sensor */ Box2D.Dynamics.b2Fixture.prototype.SetSensor = function(sensor) { if (this.m_isSensor == sensor) { return; } this.m_isSensor = sensor; if (this.m_body == null) { return; } for (var contactNode = this.m_body.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { var fixtureA = contactNode.contact.m_fixtureA; var fixtureB = contactNode.contact.m_fixtureB; if (fixtureA == this || fixtureB == this) { contactNode.contact.SetSensor(fixtureA.sensor || fixtureB.sensor); } } }; /** * @return {boolean} */ Box2D.Dynamics.b2Fixture.prototype.IsSensor = function() { return this.m_isSensor; }; /** * @param {!Box2D.Dynamics.b2FilterData} filter */ Box2D.Dynamics.b2Fixture.prototype.SetFilterData = function(filter) { this.m_filter = filter.Copy(); if (this.m_body == null) { return; } for (var contactNode = this.m_body.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (contactNode.contact.m_fixtureA == this || contactNode.contact.m_fixtureB == this) { contactNode.contact.FlagForFiltering(); } } }; /** * @return {!Box2D.Dynamics.b2FilterData} */ Box2D.Dynamics.b2Fixture.prototype.GetFilterData = function() { return this.m_filter.Copy(); }; /** * @return {Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2Fixture.prototype.GetBody = function() { return this.m_body; }; /** * @param {!Box2D.Common.Math.b2Vec2} p * @return {boolean} */ Box2D.Dynamics.b2Fixture.prototype.TestPoint = function(p) { return this.m_shape.TestPoint(this.m_body.GetTransform(), p); }; /** * @param {!Box2D.Collision.b2RayCastOutput} output * @param {!Box2D.Collision.b2RayCastInput} input * @return {boolean} */ Box2D.Dynamics.b2Fixture.prototype.RayCast = function(output, input) { return this.m_shape.RayCast(output, input, this.m_body.GetTransform()); }; /** * @param {Box2D.Collision.Shapes.b2MassData=} massData * @return {!Box2D.Collision.Shapes.b2MassData} */ Box2D.Dynamics.b2Fixture.prototype.GetMassData = function(massData) { if (!massData) { massData = new Box2D.Collision.Shapes.b2MassData(); } this.m_shape.ComputeMass(massData, this.m_density); return massData; }; /** * @param {number} density */ Box2D.Dynamics.b2Fixture.prototype.SetDensity = function(density) { this.m_density = density; }; /** * @return {number} */ Box2D.Dynamics.b2Fixture.prototype.GetDensity = function() { return this.m_density; }; /** * @return {number} */ Box2D.Dynamics.b2Fixture.prototype.GetFriction = function() { return this.m_friction; }; /** * @param {number} friction */ Box2D.Dynamics.b2Fixture.prototype.SetFriction = function(friction) { this.m_friction = friction; }; /** * @return {number} */ Box2D.Dynamics.b2Fixture.prototype.GetRestitution = function() { return this.m_restitution; }; /** * @param {number} restitution */ Box2D.Dynamics.b2Fixture.prototype.SetRestitution = function(restitution) { this.m_restitution = restitution; }; /** * @return {!Box2D.Collision.b2AABB} */ Box2D.Dynamics.b2Fixture.prototype.GetAABB = function() { return this.m_aabb; }; Box2D.Dynamics.b2Fixture.prototype.Destroy = function() { Box2D.Collision.b2AABB.Free(this.m_aabb); }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase * @param {!Box2D.Common.Math.b2Transform} xf */ Box2D.Dynamics.b2Fixture.prototype.CreateProxy = function(broadPhase, xf) { this.m_shape.ComputeAABB(this.m_aabb, xf); this.m_proxy = broadPhase.CreateProxy(this.m_aabb, this); }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase */ Box2D.Dynamics.b2Fixture.prototype.DestroyProxy = function(broadPhase) { if (this.m_proxy == null) { return; } broadPhase.DestroyProxy(this.m_proxy); this.m_proxy = null; }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase * @param {!Box2D.Common.Math.b2Transform} transform1 * @param {!Box2D.Common.Math.b2Transform} transform2 */ Box2D.Dynamics.b2Fixture.prototype.Synchronize = function(broadPhase, transform1, transform2) { if (!this.m_proxy) return; var aabb1 = Box2D.Collision.b2AABB.Get(); var aabb2 = Box2D.Collision.b2AABB.Get(); this.m_shape.ComputeAABB(aabb1, transform1); this.m_shape.ComputeAABB(aabb2, transform2); this.m_aabb.Combine(aabb1, aabb2); Box2D.Collision.b2AABB.Free(aabb1); Box2D.Collision.b2AABB.Free(aabb2); var displacement = Box2D.Common.Math.b2Math.SubtractVV(transform2.position, transform1.position); broadPhase.MoveProxy(this.m_proxy, this.m_aabb, displacement); Box2D.Common.Math.b2Vec2.Free(displacement); }; /** * @type {number} * @private */ Box2D.Dynamics.b2Fixture.NEXT_ID = 0; /** * @constructor */ Box2D.Dynamics.b2FixtureDef = function () { /** * @type {!Box2D.Dynamics.b2FilterData} */ this.filter = new Box2D.Dynamics.b2FilterData(); this.filter.categoryBits = 0x0001; this.filter.maskBits = 0xFFFF; this.filter.groupIndex = 0; /** * @type {Box2D.Collision.Shapes.b2Shape} */ this.shape = null; /** * @type {number} */ this.friction = 0.2; /** * @type {number} */ this.restitution = 0.0; /** * @type {number} */ this.density = 0.0; /** * @type {boolean} */ this.isSensor = false; }; /** * @constructor */ Box2D.Dynamics.b2FixtureList = function() { /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.fixtureFirstNode = null; /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.fixtureLastNode = null; /** * @private * @type {Object.<Box2D.Dynamics.b2FixtureListNode>} */ this.fixtureNodeLookup = {}; /** * @private * @type {number} */ this.fixtureCount = 0; }; /** * @return {Box2D.Dynamics.b2FixtureListNode} */ Box2D.Dynamics.b2FixtureList.prototype.GetFirstNode = function() { return this.fixtureFirstNode; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixture */ Box2D.Dynamics.b2FixtureList.prototype.AddFixture = function(fixture) { var fixtureID = fixture.ID; if (this.fixtureNodeLookup[fixtureID] == null) { var node = new Box2D.Dynamics.b2FixtureListNode(fixture); var prevNode = this.fixtureLastNode; if (prevNode != null) { prevNode.SetNextNode(node); } else { this.fixtureFirstNode = node; } node.SetPreviousNode(prevNode); this.fixtureLastNode = node; this.fixtureNodeLookup[fixtureID] = node; this.fixtureCount++; } }; /** * @param {!Box2D.Dynamics.b2Fixture} fixture */ Box2D.Dynamics.b2FixtureList.prototype.RemoveFixture = function(fixture) { var fixtureID = fixture.ID; var node = this.fixtureNodeLookup[fixtureID]; if (node == null) { return; } var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.fixtureFirstNode = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.fixtureLastNode = prevNode; } else { nextNode.SetPreviousNode(prevNode); } delete this.fixtureNodeLookup[fixtureID]; this.fixtureCount--; }; /** * @return {number} */ Box2D.Dynamics.b2FixtureList.prototype.GetFixtureCount = function() { return this.fixtureCount; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixture * @constructor */ Box2D.Dynamics.b2FixtureListNode = function(fixture) { /** * @const * @type {!Box2D.Dynamics.b2Fixture} */ this.fixture = fixture; /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.b2FixtureListNode} */ this.previous = null; }; /** * @param {Box2D.Dynamics.b2FixtureListNode} node */ Box2D.Dynamics.b2FixtureListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.b2FixtureListNode} node */ Box2D.Dynamics.b2FixtureListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {Box2D.Dynamics.b2FixtureListNode} */ Box2D.Dynamics.b2FixtureListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.b2FixtureListNode} */ Box2D.Dynamics.b2FixtureListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @param {!Box2D.Dynamics.b2ContactListener} listener * @param {!Box2D.Dynamics.Contacts.b2ContactSolver} contactSolver * @constructor */ Box2D.Dynamics.b2Island = function(listener, contactSolver) { /** * @private * @type {!Box2D.Dynamics.b2ContactListener} */ this.m_listener = listener; /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactSolver} */ this.m_contactSolver = contactSolver; /** * @private * @type {Array.<!Box2D.Dynamics.b2Body>} */ this.m_bodies = []; /** * @private * @type {Array.<!Box2D.Dynamics.b2Body>} */ this.m_dynamicBodies = []; /** * @private * @type {Array.<!Box2D.Dynamics.b2Body>} */ this.m_nonStaticBodies = []; /** * @private * @type {Array.<!Box2D.Dynamics.Contacts.b2Contact>} */ this.m_contacts = []; /** * @private * @type {Array.<!Box2D.Dynamics.Joints.b2Joint>} */ this.m_joints = []; }; Box2D.Dynamics.b2Island.prototype.Clear = function() { this.m_bodies = []; this.m_dynamicBodies = []; this.m_nonStaticBodies = []; this.m_contacts = []; this.m_joints = []; }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {!Box2D.Common.Math.b2Vec2} gravity * @param {boolean} allowSleep */ Box2D.Dynamics.b2Island.prototype.Solve = function(step, gravity, allowSleep) { this._InitializeVelocities(step, gravity); this.m_contactSolver.Initialize(step, this.m_contacts, this.m_contacts.length); this._SolveVelocityConstraints(step); this._SolveBodies(step); this._SolvePositionConstraints(step); this.Report(this.m_contactSolver.m_constraints); if (allowSleep) { this._SleepIfTired(step); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {!Box2D.Common.Math.b2Vec2} gravity * @private */ Box2D.Dynamics.b2Island.prototype._InitializeVelocities = function(step, gravity) { for (var i = 0; i < this.m_dynamicBodies.length; i++) { var b = this.m_dynamicBodies[i]; b.m_linearVelocity.x += step.dt * (gravity.x + b.m_invMass * b.m_force.x); b.m_linearVelocity.y += step.dt * (gravity.y + b.m_invMass * b.m_force.y); b.m_angularVelocity += step.dt * b.m_invI * b.m_torque; b.m_linearVelocity.Multiply(Box2D.Common.Math.b2Math.Clamp(1.0 - step.dt * b.m_linearDamping, 0.0, 1.0)); b.m_angularVelocity *= Box2D.Common.Math.b2Math.Clamp(1.0 - step.dt * b.m_angularDamping, 0.0, 1.0); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SolveVelocityConstraints = function(step) { this.m_contactSolver.InitVelocityConstraints(step); for (var jointInitIdx = 0; jointInitIdx < this.m_joints.length; jointInitIdx++) { this.m_joints[jointInitIdx].InitVelocityConstraints(step); } for (var velocityIterationCnt = 0; velocityIterationCnt < step.velocityIterations; velocityIterationCnt++) { for (var jointSolveIdx = 0; jointSolveIdx < this.m_joints.length; jointSolveIdx++) { this.m_joints[jointSolveIdx].SolveVelocityConstraints(step); } this.m_contactSolver.SolveVelocityConstraints(); } for (var jointFinalizeIdx = 0; jointFinalizeIdx < this.m_joints.length; jointFinalizeIdx++) { this.m_joints[jointFinalizeIdx].FinalizeVelocityConstraints(); } this.m_contactSolver.FinalizeVelocityConstraints(); }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SolveBodies = function(step) { for (var i = 0; i < this.m_nonStaticBodies.length; ++i) { var b = this.m_nonStaticBodies[i]; var translationX = step.dt * b.m_linearVelocity.x; var translationY = step.dt * b.m_linearVelocity.y; if ((translationX * translationX + translationY * translationY) > Box2D.Common.b2Settings.b2_maxTranslationSquared) { b.m_linearVelocity.Normalize(); b.m_linearVelocity.x *= Box2D.Common.b2Settings.b2_maxTranslation * step.inv_dt; b.m_linearVelocity.y *= Box2D.Common.b2Settings.b2_maxTranslation * step.inv_dt; } var rotation = step.dt * b.m_angularVelocity; if (rotation * rotation > Box2D.Common.b2Settings.b2_maxRotationSquared) { if (b.m_angularVelocity < 0.0) { b.m_angularVelocity = -Box2D.Common.b2Settings.b2_maxRotation * step.inv_dt; } else { b.m_angularVelocity = Box2D.Common.b2Settings.b2_maxRotation * step.inv_dt; } } b.m_sweep.c0.SetV(b.m_sweep.c); b.m_sweep.a0 = b.m_sweep.a; b.m_sweep.c.x += step.dt * b.m_linearVelocity.x; b.m_sweep.c.y += step.dt * b.m_linearVelocity.y; b.m_sweep.a += step.dt * b.m_angularVelocity; b.SynchronizeTransform(); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SolvePositionConstraints = function(step) { for (var i = 0; i < step.positionIterations; i++) { var contactsOkay = this.m_contactSolver.SolvePositionConstraints(Box2D.Common.b2Settings.b2_contactBaumgarte); var jointsOkay = true; for (var j = 0; j < this.m_joints.length; j++) { var jointOkay = this.m_joints[j].SolvePositionConstraints(Box2D.Common.b2Settings.b2_contactBaumgarte); jointsOkay = jointsOkay && jointOkay; } if (contactsOkay && jointsOkay) { break; } } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @private */ Box2D.Dynamics.b2Island.prototype._SleepIfTired = function(step) { var minSleepTime = Number.MAX_VALUE; for (var nonstaticBodyIdx = 0; nonstaticBodyIdx < this.m_nonStaticBodies.length; nonstaticBodyIdx++) { var b = this.m_nonStaticBodies[nonstaticBodyIdx]; if (!b.m_allowSleep || Math.abs(b.m_angularVelocity) > Box2D.Common.b2Settings.b2_angularSleepTolerance || Box2D.Common.Math.b2Math.Dot(b.m_linearVelocity, b.m_linearVelocity) > Box2D.Common.b2Settings.b2_linearSleepToleranceSquared) { b.m_sleepTime = 0.0; minSleepTime = 0.0; } else { b.m_sleepTime += step.dt; minSleepTime = Math.min(minSleepTime, b.m_sleepTime); } } if (minSleepTime >= Box2D.Common.b2Settings.b2_timeToSleep) { for (var bodyIdx = 0; bodyIdx < this.m_bodies.length; bodyIdx++) { this.m_bodies[bodyIdx].SetAwake(false); } } }; /** * @param {!Box2D.Dynamics.b2TimeStep} subStep */ Box2D.Dynamics.b2Island.prototype.SolveTOI = function(subStep) { var i = 0; var j = 0; this.m_contactSolver.Initialize(subStep, this.m_contacts, this.m_contacts.length); var contactSolver = this.m_contactSolver; for (i = 0; i < this.m_joints.length; ++i) { this.m_joints[i].InitVelocityConstraints(subStep); } for (i = 0; i < subStep.velocityIterations; ++i) { contactSolver.SolveVelocityConstraints(); for (j = 0; j < this.m_joints.length; ++j) { this.m_joints[j].SolveVelocityConstraints(subStep); } } for (i = 0; i < this.m_nonStaticBodies.length; ++i) { var b = this.m_nonStaticBodies[i]; var translationX = subStep.dt * b.m_linearVelocity.x; var translationY = subStep.dt * b.m_linearVelocity.y; if ((translationX * translationX + translationY * translationY) > Box2D.Common.b2Settings.b2_maxTranslationSquared) { b.m_linearVelocity.Normalize(); b.m_linearVelocity.x *= Box2D.Common.b2Settings.b2_maxTranslation * subStep.inv_dt; b.m_linearVelocity.y *= Box2D.Common.b2Settings.b2_maxTranslation * subStep.inv_dt; } var rotation = subStep.dt * b.m_angularVelocity; if (rotation * rotation > Box2D.Common.b2Settings.b2_maxRotationSquared) { if (b.m_angularVelocity < 0.0) { b.m_angularVelocity = (-Box2D.Common.b2Settings.b2_maxRotation * subStep.inv_dt); } else { b.m_angularVelocity = Box2D.Common.b2Settings.b2_maxRotation * subStep.inv_dt; } } b.m_sweep.c0.SetV(b.m_sweep.c); b.m_sweep.a0 = b.m_sweep.a; b.m_sweep.c.x += subStep.dt * b.m_linearVelocity.x; b.m_sweep.c.y += subStep.dt * b.m_linearVelocity.y; b.m_sweep.a += subStep.dt * b.m_angularVelocity; b.SynchronizeTransform(); } var k_toiBaumgarte = 0.75; for (i = 0; i < subStep.positionIterations; ++i) { var contactsOkay = contactSolver.SolvePositionConstraints(k_toiBaumgarte); var jointsOkay = true; for (j = 0; j < this.m_joints.length; ++j) { var jointOkay = this.m_joints[j].SolvePositionConstraints(Box2D.Common.b2Settings.b2_contactBaumgarte); jointsOkay = jointsOkay && jointOkay; } if (contactsOkay && jointsOkay) { break; } } this.Report(contactSolver.m_constraints); }; /** * @param {Array.<!Box2D.Dynamics.Contacts.b2ContactConstraint>} constraints */ Box2D.Dynamics.b2Island.prototype.Report = function(constraints) { if (this.m_listener == null) { return; } for (var i = 0; i < this.m_contacts.length; ++i) { var c = this.m_contacts[i]; var cc = constraints[i]; var impulse = new Box2D.Dynamics.b2ContactImpulse(); for (var j = 0; j < cc.pointCount; ++j) { impulse.normalImpulses[j] = cc.points[j].normalImpulse; impulse.tangentImpulses[j] = cc.points[j].tangentImpulse; } this.m_listener.PostSolve(c, impulse); } }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.b2Island.prototype.AddBody = function(body) { this.m_bodies.push(body); if (body.GetType() != Box2D.Dynamics.b2BodyDef.b2_staticBody) { this.m_nonStaticBodies.push(body); if (body.GetType() == Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { this.m_dynamicBodies.push(body); } } }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.b2Island.prototype.AddContact = function(contact) { this.m_contacts.push(contact); }; /** * @param {!Box2D.Dynamics.Joints.b2Joint} joint */ Box2D.Dynamics.b2Island.prototype.AddJoint = function(joint) { this.m_joints.push(joint); }; /** * @param {number} dt * @param {number} dtRatio * @param {number} positionIterations * @param {number} velocityIterations * @param {boolean} warmStarting * @constructor */ Box2D.Dynamics.b2TimeStep = function(dt, dtRatio, positionIterations, velocityIterations, warmStarting) { /** * @const * @type {number} */ this.dt = dt; var invDT = 0; if (dt > 0) { invDT = 1 / dt; } /** * @const * @type {number} */ this.inv_dt = invDT; /** * @const * @type {number} */ this.dtRatio = dtRatio; /** * @const * @type {number} */ this.positionIterations = positionIterations; /** * @const * @type {number} */ this.velocityIterations = velocityIterations; /** * @const * @type {boolean} */ this.warmStarting = warmStarting; }; /** * @param {!Box2D.Common.Math.b2Vec2} gravity * @param {boolean} doSleep * @constructor */ Box2D.Dynamics.b2World = function(gravity, doSleep) { /** * @private * @type {!Box2D.Dynamics.b2ContactManager} */ this.m_contactManager = new Box2D.Dynamics.b2ContactManager(this); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactSolver} */ this.m_contactSolver = new Box2D.Dynamics.Contacts.b2ContactSolver(); /** * @private * @type {boolean} */ this.m_isLocked = false; /** * @private * @type {boolean} */ this.m_newFixture = false; /** * @private * @type {Box2D.Dynamics.b2DestructionListener} */ this.m_destructionListener = null; /** * @private * @type {!Box2D.Dynamics.b2BodyList} */ this.bodyList = new Box2D.Dynamics.b2BodyList(); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.contactList = new Box2D.Dynamics.Contacts.b2ContactList(); /** * @private * @type {Box2D.Dynamics.Joints.b2Joint} */ this.m_jointList = null; /** * @private * @type {!Box2D.Dynamics.Controllers.b2ControllerList} */ this.controllerList = new Box2D.Dynamics.Controllers.b2ControllerList(); /** * @private * @type {number} */ this.m_jointCount = 0; /** * @private * @type {boolean} */ this.m_warmStarting = true; /** * @private * @type {boolean} */ this.m_continuousPhysics = true; /** * @private * @type {boolean} */ this.m_allowSleep = doSleep; /** * @private * @type {!Box2D.Common.Math.b2Vec2} */ this.m_gravity = gravity; /** * @private * @type {number} */ this.m_inv_dt0 = 0.0; /** * @private * @type {!Box2D.Dynamics.b2Body} */ this.m_groundBody = this.CreateBody(new Box2D.Dynamics.b2BodyDef()); }; /** * @const * @type {number} */ Box2D.Dynamics.b2World.MAX_TOI = 1.0 - 100.0 * Number.MIN_VALUE; /** * @param {!Box2D.Dynamics.b2DestructionListener} listener */ Box2D.Dynamics.b2World.prototype.SetDestructionListener = function(listener) { this.m_destructionListener = listener; }; /** * @param {!Box2D.Dynamics.b2ContactFilter} filter */ Box2D.Dynamics.b2World.prototype.SetContactFilter = function(filter) { this.m_contactManager.m_contactFilter = filter; }; /** * @param {!Box2D.Dynamics.b2ContactListener} listener */ Box2D.Dynamics.b2World.prototype.SetContactListener = function(listener) { this.m_contactManager.m_contactListener = listener; }; /** * @param {!Box2D.Collision.b2DynamicTreeBroadPhase} broadPhase */ Box2D.Dynamics.b2World.prototype.SetBroadPhase = function(broadPhase) { var oldBroadPhase = this.m_contactManager.m_broadPhase; this.m_contactManager.m_broadPhase = broadPhase; for (var node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); node; node = node.GetNextNode()) { for (var fixtureNode = node.body.GetFixtureList().GetFirstNode(); fixtureNode; fixtureNode = fixtureNode.GetNextNode()) { var f = fixtureNode.fixture; f.m_proxy = broadPhase.CreateProxy(oldBroadPhase.GetFatAABB(f.m_proxy), f); } } }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetProxyCount = function() { return this.m_contactManager.m_broadPhase.GetProxyCount(); }; /** * @param {!Box2D.Dynamics.b2BodyDef} def * @return {!Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2World.prototype.CreateBody = function(def) { ; var b = new Box2D.Dynamics.b2Body(def, this); this.bodyList.AddBody(b); return b; }; /** * @param {!Box2D.Dynamics.b2Body} b */ Box2D.Dynamics.b2World.prototype.DestroyBody = function(b) { ; var jn = b.m_jointList; while (jn) { var jn0 = jn; jn = jn.next; if (this.m_destructionListener) { this.m_destructionListener.SayGoodbyeJoint(jn0.joint); } this.DestroyJoint(jn0.joint); } for (var node = b.GetControllerList().GetFirstNode(); node; node = node.GetNextNode()) { node.controller.RemoveBody(b); } for (var contactNode = b.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { this.m_contactManager.Destroy(contactNode.contact); } for (var fixtureNode = b.GetFixtureList().GetFirstNode(); fixtureNode; fixtureNode = fixtureNode.GetNextNode()) { if (this.m_destructionListener) { this.m_destructionListener.SayGoodbyeFixture(fixtureNode.fixture); } b.DestroyFixture(fixtureNode.fixture); } b.Destroy(); this.bodyList.RemoveBody(b); }; /** * @param {!Box2D.Dynamics.Joints.b2JointDef} def * @return {!Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.b2World.prototype.CreateJoint = function(def) { var j = Box2D.Dynamics.Joints.b2Joint.Create(def); j.m_prev = null; j.m_next = this.m_jointList; if (this.m_jointList) { this.m_jointList.m_prev = j; } this.m_jointList = j; this.m_jointCount++; j.m_edgeA.joint = j; j.m_edgeA.other = j.m_bodyB; j.m_edgeA.prev = null; j.m_edgeA.next = j.m_bodyA.m_jointList; if (j.m_bodyA.m_jointList) { j.m_bodyA.m_jointList.prev = j.m_edgeA; } j.m_bodyA.m_jointList = j.m_edgeA; j.m_edgeB.joint = j; j.m_edgeB.other = j.m_bodyA; j.m_edgeB.prev = null; j.m_edgeB.next = j.m_bodyB.m_jointList; if (j.m_bodyB.m_jointList) { j.m_bodyB.m_jointList.prev = j.m_edgeB; } j.m_bodyB.m_jointList = j.m_edgeB; var bodyA = def.bodyA; var bodyB = def.bodyB; if (!def.collideConnected) { for (var contactNode = bodyB.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (contactNode.contact.GetOther(bodyB) == bodyA) { contactNode.contact.FlagForFiltering(); } } } return j; }; /** * @param {!Box2D.Dynamics.Joints.b2Joint} j */ Box2D.Dynamics.b2World.prototype.DestroyJoint = function(j) { var collideConnected = j.m_collideConnected; if (j.m_prev) { j.m_prev.m_next = j.m_next; } if (j.m_next) { j.m_next.m_prev = j.m_prev; } if (j == this.m_jointList) { this.m_jointList = j.m_next; } var bodyA = j.m_bodyA; var bodyB = j.m_bodyB; bodyA.SetAwake(true); bodyB.SetAwake(true); if (j.m_edgeA.prev) { j.m_edgeA.prev.next = j.m_edgeA.next; } if (j.m_edgeA.next) { j.m_edgeA.next.prev = j.m_edgeA.prev; } if (j.m_edgeA == bodyA.m_jointList) { bodyA.m_jointList = j.m_edgeA.next; } j.m_edgeA.prev = null; j.m_edgeA.next = null; if (j.m_edgeB.prev) { j.m_edgeB.prev.next = j.m_edgeB.next; } if (j.m_edgeB.next) { j.m_edgeB.next.prev = j.m_edgeB.prev; } if (j.m_edgeB == bodyB.m_jointList) { bodyB.m_jointList = j.m_edgeB.next; } j.m_edgeB.prev = null; j.m_edgeB.next = null; this.m_jointCount--; if (!collideConnected) { for (var contactNode = bodyB.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (contactNode.contact.GetOther(bodyB) == bodyA) { contactNode.contact.FlagForFiltering(); } } } }; /** * @return {!Box2D.Dynamics.Controllers.b2ControllerList} */ Box2D.Dynamics.b2World.prototype.GetControllerList = function() { return this.controllerList; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} c * @return {!Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.b2World.prototype.AddController = function(c) { if (c.m_world !== null && c.m_world != this) { throw new Error("Controller can only be a member of one world"); } this.controllerList.AddController(c); c.m_world = this; return c; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} c */ Box2D.Dynamics.b2World.prototype.RemoveController = function(c) { this.controllerList.RemoveController(c); c.m_world = null; c.Clear(); }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller * @return {!Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.b2World.prototype.CreateController = function(controller) { return this.AddController(controller); }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.b2World.prototype.DestroyController = function(controller) { this.RemoveController(controller); }; /** * @param {boolean} flag */ Box2D.Dynamics.b2World.prototype.SetWarmStarting = function(flag) { this.m_warmStarting = flag; }; /** * @param {boolean} flag */ Box2D.Dynamics.b2World.prototype.SetContinuousPhysics = function(flag) { this.m_continuousPhysics = flag; }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetBodyCount = function() { return this.bodyList.GetBodyCount(); }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetJointCount = function() { return this.m_jointCount; }; /** * @return {number} */ Box2D.Dynamics.b2World.prototype.GetContactCount = function() { return this.contactList.GetContactCount(); }; /** * @param {!Box2D.Common.Math.b2Vec2} gravity */ Box2D.Dynamics.b2World.prototype.SetGravity = function(gravity) { this.m_gravity = gravity; }; /** * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Dynamics.b2World.prototype.GetGravity = function() { return this.m_gravity; }; /** * @return {!Box2D.Dynamics.b2Body} */ Box2D.Dynamics.b2World.prototype.GetGroundBody = function() { return this.m_groundBody; }; /** * @param {number} dt * @param {number} velocityIterations * @param {number} positionIterations */ Box2D.Dynamics.b2World.prototype.Step = function(dt, velocityIterations, positionIterations) { if (this.m_newFixture) { this.m_contactManager.FindNewContacts(); this.m_newFixture = false; } this.m_isLocked = true; var step = new Box2D.Dynamics.b2TimeStep(dt, this.m_inv_dt0 * dt /* dtRatio */, velocityIterations, positionIterations, this.m_warmStarting); this.m_contactManager.Collide(); if (step.dt > 0.0) { this.Solve(step); if (this.m_continuousPhysics) { this.SolveTOI(step); } this.m_inv_dt0 = step.inv_dt; } this.m_isLocked = false; }; Box2D.Dynamics.b2World.prototype.ClearForces = function() { for (var node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.dynamicBodies); node; node = node.GetNextNode()) { node.body.m_force.SetZero(); node.body.m_torque = 0.0; } }; /** * @param {function(!Box2D.Dynamics.b2Fixture):boolean} callback * @param {!Box2D.Collision.b2AABB} aabb */ Box2D.Dynamics.b2World.prototype.QueryAABB = function(callback, aabb) { this.m_contactManager.m_broadPhase.Query(callback, aabb); }; /** * @param {function(!Box2D.Dynamics.b2Fixture): boolean} callback * @param {!Box2D.Common.Math.b2Vec2} p */ Box2D.Dynamics.b2World.prototype.QueryPoint = function(callback, p) { /** @type {function(!Box2D.Dynamics.b2Fixture): boolean} */ var WorldQueryWrapper = function(fixture) { if (fixture.TestPoint(p)) { return callback(fixture); } else { return true; } }; var aabb = Box2D.Collision.b2AABB.Get(); aabb.lowerBound_.Set(p.x - Box2D.Common.b2Settings.b2_linearSlop, p.y - Box2D.Common.b2Settings.b2_linearSlop); aabb.upperBound_.Set(p.x + Box2D.Common.b2Settings.b2_linearSlop, p.y + Box2D.Common.b2Settings.b2_linearSlop); this.m_contactManager.m_broadPhase.Query(WorldQueryWrapper, aabb); Box2D.Collision.b2AABB.Free(aabb); }; /** * @param {function(!Box2D.Dynamics.b2Fixture, !Box2D.Common.Math.b2Vec2, !Box2D.Common.Math.b2Vec2, number): number} callback * @param {!Box2D.Common.Math.b2Vec2} point1 * @param {!Box2D.Common.Math.b2Vec2} point2 */ Box2D.Dynamics.b2World.prototype.RayCast = function(callback, point1, point2) { var broadPhase = this.m_contactManager.m_broadPhase; var output = new Box2D.Collision.b2RayCastOutput(); /** * @param {!Box2D.Collision.b2RayCastInput} input * @param {!Box2D.Dynamics.b2Fixture} fixture */ var RayCastWrapper = function(input, fixture) { var hit = fixture.RayCast(output, input); if (hit) { var flipFrac = 1 - output.fraction; var point = Box2D.Common.Math.b2Vec2.Get(flipFrac * point1.x + output.fraction * point2.x, flipFrac * point1.y + output.fraction * point2.y); var retVal = callback(fixture, point, output.normal, output.fraction); Box2D.Common.Math.b2Vec2.Free(point); return retVal; } else { return input.maxFraction; } }; var input = new Box2D.Collision.b2RayCastInput(point1, point2, 1 /* maxFraction */ ); broadPhase.RayCast(RayCastWrapper, input); }; /** * @param {!Box2D.Common.Math.b2Vec2} point1 * @param {!Box2D.Common.Math.b2Vec2} point2 * @return {Box2D.Dynamics.b2Fixture} */ Box2D.Dynamics.b2World.prototype.RayCastOne = function(point1, point2) { var result = null; /** * @param {!Box2D.Dynamics.b2Fixture} fixture * @param {!Box2D.Common.Math.b2Vec2} point * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} fraction * @return {number} */ var RayCastOneWrapper = function(fixture, point, normal, fraction) { result = fixture; return fraction; }; this.RayCast(RayCastOneWrapper, point1, point2); return result; }; /** * @param {!Box2D.Common.Math.b2Vec2} point1 * @param {!Box2D.Common.Math.b2Vec2} point2 * @return {Array.<Box2D.Dynamics.b2Fixture>} */ Box2D.Dynamics.b2World.prototype.RayCastAll = function(point1, point2) { var result = []; /** * @param {!Box2D.Dynamics.b2Fixture} fixture * @param {!Box2D.Common.Math.b2Vec2} point * @param {!Box2D.Common.Math.b2Vec2} normal * @param {number} fraction * @return {number} */ var RayCastAllWrapper = function(fixture, point, normal, fraction) { result.push(fixture); return 1; }; this.RayCast(RayCastAllWrapper, point1, point2); return result; }; /** * @return {!Box2D.Dynamics.b2BodyList} */ Box2D.Dynamics.b2World.prototype.GetBodyList = function() { return this.bodyList; }; /** * @return {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.b2World.prototype.GetJointList = function() { return this.m_jointList; }; /** * @return {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.b2World.prototype.GetContactList = function() { return this.contactList; }; /** * @return {boolean} */ Box2D.Dynamics.b2World.prototype.IsLocked = function() { return this.m_isLocked; }; var b2solvearray = []; /** * @param {!Box2D.Dynamics.b2TimeStep} step */ Box2D.Dynamics.b2World.prototype.Solve = function(step) { for (var controllerNode = this.controllerList.GetFirstNode(); controllerNode; controllerNode = controllerNode.GetNextNode()) { controllerNode.controller.Step(step); } var m_island = new Box2D.Dynamics.b2Island(this.m_contactManager.m_contactListener, this.m_contactSolver); for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { bodyNode.body.m_islandFlag = false; } for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.m_islandFlag = false; } for (var j = this.m_jointList; j; j = j.m_next) { j.m_islandFlag = false; } for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var seed = bodyNode.body; if (seed.m_islandFlag) { continue; } m_island.Clear(); b2solvearray.length = 0; var stack = b2solvearray; stack.push(seed); seed.m_islandFlag = true; while (stack.length > 0) { var b = stack.pop(); m_island.AddBody(b); if (!b.IsAwake()) { b.SetAwake(true); } if (b.GetType() == Box2D.Dynamics.b2BodyDef.b2_staticBody) { continue; } for (var contactNode = b.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); contactNode; contactNode = contactNode.GetNextNode()) { var contact = contactNode.contact; if (contact.m_islandFlag) { continue; } m_island.AddContact(contact); contact.m_islandFlag = true; var other = contact.GetOther(b); if (other.m_islandFlag) { continue; } stack.push(other); other.m_islandFlag = true; } for (var jn = b.m_jointList; jn; jn = jn.next) { if (jn.joint.m_islandFlag || !jn.other.IsActive()) { continue; } m_island.AddJoint(jn.joint); jn.joint.m_islandFlag = true; if (jn.other.m_islandFlag) { continue; } stack.push(jn.other); jn.other.m_islandFlag = true; } } m_island.Solve(step, this.m_gravity, this.m_allowSleep); } for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.nonStaticActiveAwakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { bodyNode.body.SynchronizeFixtures(); } this.m_contactManager.FindNewContacts(); }; /** * @param {!Box2D.Dynamics.b2TimeStep} step */ Box2D.Dynamics.b2World.prototype.SolveTOI = function(step) { var m_island = new Box2D.Dynamics.b2Island(this.m_contactManager.m_contactListener, this.m_contactSolver); for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var b = bodyNode.body; b.m_islandFlag = false; b.m_sweep.t0 = 0.0; } for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.m_islandFlag = false; contactNode.contact.m_toi = null; } for (var j = this.m_jointList; j; j = j.m_next) { j.m_islandFlag = false; } while (true) { var toi2 = this._SolveTOI2(step); var minContact = toi2.minContact; var minTOI = toi2.minTOI; if (minContact === null || Box2D.Dynamics.b2World.MAX_TOI < minTOI) { break; } var fixtureABody = minContact.m_fixtureA.GetBody(); var fixtureBBody = minContact.m_fixtureB.GetBody(); Box2D.Dynamics.b2World.s_backupA.Set(fixtureABody.m_sweep); Box2D.Dynamics.b2World.s_backupB.Set(fixtureBBody.m_sweep); fixtureABody.Advance(minTOI); fixtureBBody.Advance(minTOI); minContact.Update(this.m_contactManager.m_contactListener); minContact.m_toi = null; if (minContact.sensor || !minContact.enabled) { fixtureABody.m_sweep.Set(Box2D.Dynamics.b2World.s_backupA); fixtureBBody.m_sweep.Set(Box2D.Dynamics.b2World.s_backupB); fixtureABody.SynchronizeTransform(); fixtureBBody.SynchronizeTransform(); continue; } if (!minContact.touching) { continue; } var seed = fixtureABody; if (seed.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { seed = fixtureBBody; } m_island.Clear(); b2solvearray.length = 0; var queue = b2solvearray; queue.push(seed); seed.m_islandFlag = true; while (queue.length > 0) { var b = queue.pop(); m_island.AddBody(b); if (!b.IsAwake()) { b.SetAwake(true); } if (b.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { continue; } for (var contactNode = b.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); contactNode; contactNode = contactNode.GetNextNode()) { if (m_island.m_contactCount == Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland) { break; } var contact = contactNode.contact; if (contact.m_islandFlag) { continue; } m_island.AddContact(contact); contact.m_islandFlag = true; var other = contact.GetOther(b); if (other.m_islandFlag) { continue; } if (other.GetType() != Box2D.Dynamics.b2BodyDef.b2_staticBody) { other.Advance(minTOI); other.SetAwake(true); queue.push(other); } other.m_islandFlag = true; } for (var jEdge = b.m_jointList; jEdge; jEdge = jEdge.next) { if (m_island.m_jointCount == Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland) { continue; } if (jEdge.joint.m_islandFlag || !jEdge.other.IsActive()) { continue; } m_island.AddJoint(jEdge.joint); jEdge.joint.m_islandFlag = true; if (jEdge.other.m_islandFlag) { continue; } if (jEdge.other.GetType() != Box2D.Dynamics.b2BodyDef.b2_staticBody) { jEdge.other.Advance(minTOI); jEdge.other.SetAwake(true); queue.push(jEdge.other); } jEdge.other.m_islandFlag = true; } } m_island.SolveTOI(new Box2D.Dynamics.b2TimeStep((1.0 - minTOI) * step.dt /* dt */, 0 /* dtRatio */, step.velocityIterations, step.positionIterations, false /* warmStarting */)); for (var i = 0; i < m_island.m_bodies.length; i++) { m_island.m_bodies[i].m_islandFlag = false; if (!m_island.m_bodies[i].IsAwake() || m_island.m_bodies[i].GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) { continue; } m_island.m_bodies[i].SynchronizeFixtures(); for (var contactNode = m_island.m_bodies[i].contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); contactNode; contactNode = contactNode.GetNextNode()) { contactNode.contact.m_toi = null; } } for (var i = 0; i < m_island.m_contactCount; i++) { m_island.m_contacts[i].m_islandFlag = false; m_island.m_contacts[i].m_toi = null; } for (var i = 0; i < m_island.m_jointCount; i++) { m_island.m_joints[i].m_islandFlag = false; } this.m_contactManager.FindNewContacts(); } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @return {{minContact: Box2D.Dynamics.Contacts.b2Contact, minTOI: number}} */ Box2D.Dynamics.b2World.prototype._SolveTOI2 = function(step) { var minContact = null; var minTOI = 1.0; var contacts = 0; for (var contactNode = this.contactList.GetFirstNode(Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledContinuousContacts); contactNode; contactNode = contactNode.GetNextNode()) { var c = contactNode.contact; if (this._SolveTOI2SkipContact(step, c)) { continue; } var toi = 1.0; if (c.m_toi != null) { toi = c.m_toi; } else if (c.touching) { toi = 1; c.m_toi = toi; } else { var fixtureABody = c.m_fixtureA.GetBody(); var fixtureBBody = c.m_fixtureB.GetBody(); var t0 = fixtureABody.m_sweep.t0; if (fixtureABody.m_sweep.t0 < fixtureBBody.m_sweep.t0) { t0 = fixtureBBody.m_sweep.t0; fixtureABody.m_sweep.Advance(t0); } else if (fixtureBBody.m_sweep.t0 < fixtureABody.m_sweep.t0) { t0 = fixtureABody.m_sweep.t0; fixtureBBody.m_sweep.Advance(t0); } toi = c.ComputeTOI(fixtureABody.m_sweep, fixtureBBody.m_sweep); ; if (toi > 0.0 && toi < 1.0) { toi = (1.0 - toi) * t0 + toi; } c.m_toi = toi; } if (Number.MIN_VALUE < toi && toi < minTOI) { minContact = c; minTOI = toi; } } return { minContact: minContact, minTOI: minTOI }; }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {!Box2D.Dynamics.Contacts.b2Contact} c * @return {boolean} */ Box2D.Dynamics.b2World.prototype._SolveTOI2SkipContact = function(step, c) { var fixtureABody = c.m_fixtureA.GetBody(); var fixtureBBody = c.m_fixtureB.GetBody(); if ((fixtureABody.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || !fixtureABody.IsAwake()) && (fixtureBBody.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || !fixtureBBody.IsAwake())) { return true; } return false; }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor */ Box2D.Dynamics.Contacts.b2Contact = function(fixtureA, fixtureB) { /** * @const * @private * @type {string} */ this.ID = "Contact" + Box2D.Dynamics.Contacts.b2Contact.NEXT_ID++; /** * @private * @type {!Box2D.Collision.b2Manifold} */ this.m_manifold = new Box2D.Collision.b2Manifold(); /** * @private * @type {!Box2D.Collision.b2Manifold} */ this.m_oldManifold = new Box2D.Collision.b2Manifold(); /** * @private * @type {boolean} */ this.touching = false; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); /** * @private * @type {boolean} */ this.continuous = (bodyA.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyA.IsBullet() || (bodyB.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyB.IsBullet(); /** * @private * @type {boolean} */ this.sensor = fixtureA.IsSensor() || fixtureB.IsSensor(); /** * @private * @type {boolean} */ this.filtering = false; /** * @private * @type {!Box2D.Dynamics.b2Fixture} */ this.m_fixtureA = fixtureA; /** * @private * @type {!Box2D.Dynamics.b2Fixture} */ this.m_fixtureB = fixtureB; /** * @private * @type {boolean} */ this.enabled = true; /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.bodyAList = bodyA.GetContactList(); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.bodyBList = bodyB.GetContactList(); /** * @private * @type {!Box2D.Dynamics.Contacts.b2ContactList} */ this.worldList = bodyB.GetWorld().GetContactList(); this.AddToLists(); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2Contact.prototype.Reset = function(fixtureA, fixtureB) { this.m_manifold.Reset(); this.m_oldManifold.Reset(); this.touching = false; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); this.continuous = (bodyA.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyA.IsBullet() || (bodyB.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody) || bodyB.IsBullet(); this.sensor = fixtureA.IsSensor() || fixtureB.IsSensor(); this.filtering = false; this.m_fixtureA = fixtureA; this.m_fixtureB = fixtureB; this.enabled = true; this.bodyAList = bodyA.GetContactList(); this.bodyBList = bodyB.GetContactList(); this.worldList = bodyB.GetWorld().GetContactList(); this.AddToLists(); }; Box2D.Dynamics.Contacts.b2Contact.prototype.AddToLists = function () { this.bodyAList.AddContact(this); this.bodyBList.AddContact(this); this.worldList.AddContact(this); this.UpdateLists(); }; Box2D.Dynamics.Contacts.b2Contact.prototype.UpdateLists = function () { var nonSensorEnabledTouching = false; var nonSensorEnabledContinuous = false; if (!this.IsSensor() && this.IsEnabled()) { if (this.IsTouching()) { nonSensorEnabledTouching = true; } if (this.IsContinuous()) { nonSensorEnabledContinuous = true; } } this.bodyAList.UpdateContact(this, nonSensorEnabledTouching, nonSensorEnabledContinuous); this.bodyBList.UpdateContact(this, nonSensorEnabledTouching, nonSensorEnabledContinuous); this.worldList.UpdateContact(this, nonSensorEnabledTouching, nonSensorEnabledContinuous); }; Box2D.Dynamics.Contacts.b2Contact.prototype.RemoveFromLists = function () { this.bodyAList.RemoveContact(this); this.bodyBList.RemoveContact(this); this.worldList.RemoveContact(this); }; /** * @return {!Box2D.Collision.b2Manifold} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetManifold = function () { return this.m_manifold; }; /** * @param {!Box2D.Collision.b2WorldManifold} worldManifold */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetWorldManifold = function (worldManifold) { var bodyA = this.m_fixtureA.GetBody(); var bodyB = this.m_fixtureB.GetBody(); var shapeA = this.m_fixtureA.GetShape(); var shapeB = this.m_fixtureB.GetShape(); worldManifold.Initialize(this.m_manifold, bodyA.GetTransform(), shapeA.m_radius, bodyB.GetTransform(), shapeB.m_radius); }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsTouching = function () { return this.touching; }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsContinuous = function () { return this.continuous; }; /** * @param {boolean} sensor */ Box2D.Dynamics.Contacts.b2Contact.prototype.SetSensor = function (sensor) { this.sensor = sensor; this.UpdateLists(); }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsSensor = function () { return this.sensor; }; /** * @param {boolean} flag */ Box2D.Dynamics.Contacts.b2Contact.prototype.SetEnabled = function (flag) { this.enabled = flag; this.UpdateLists(); }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsEnabled = function () { return this.enabled; }; /** * @return {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetNext = function () { return this.m_next; }; /** * @return {!Box2D.Dynamics.b2Fixture} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetFixtureA = function () { return this.m_fixtureA; }; /** * @return {!Box2D.Dynamics.b2Fixture} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetFixtureB = function () { return this.m_fixtureB; }; /** * @param {!Box2D.Dynamics.b2Body} body * @return {!Box2D.Dynamics.b2Body} */ Box2D.Dynamics.Contacts.b2Contact.prototype.GetOther = function (body) { var bodyA = this.m_fixtureA.GetBody(); if (bodyA != body) { return bodyA; } else { return this.m_fixtureB.GetBody(); } }; Box2D.Dynamics.Contacts.b2Contact.prototype.FlagForFiltering = function () { this.filtering = true; }; Box2D.Dynamics.Contacts.b2Contact.prototype.ClearFiltering = function () { this.filtering = false; }; /** * @return {boolean} */ Box2D.Dynamics.Contacts.b2Contact.prototype.IsFiltering = function () { return this.filtering; }; Box2D.Dynamics.Contacts.b2Contact.prototype.Update = function (listener) { var tManifold = this.m_oldManifold; this.m_oldManifold = this.m_manifold; this.m_manifold = tManifold; this.enabled = true; var touching = false; var wasTouching = this.IsTouching(); var bodyA = this.m_fixtureA.GetBody(); var bodyB = this.m_fixtureB.GetBody(); var aabbOverlap = this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb); if (this.sensor) { if (aabbOverlap) { touching = Box2D.Collision.Shapes.b2Shape.TestOverlap(this.m_fixtureA.GetShape(), bodyA.GetTransform(), this.m_fixtureB.GetShape(), bodyB.GetTransform()); } this.m_manifold.m_pointCount = 0; } else { if (bodyA.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || bodyA.IsBullet() || bodyB.GetType() != Box2D.Dynamics.b2BodyDef.b2_dynamicBody || bodyB.IsBullet()) { this.continuous = true; } else { this.continuous = false; } if (aabbOverlap) { this.Evaluate(); touching = this.m_manifold.m_pointCount > 0; for (var i = 0; i < this.m_manifold.m_pointCount; i++) { var mp2 = this.m_manifold.m_points[i]; mp2.m_normalImpulse = 0.0; mp2.m_tangentImpulse = 0.0; for (var j = 0; j < this.m_oldManifold.m_pointCount; j++) { var mp1 = this.m_oldManifold.m_points[j]; if (mp1.m_id.GetKey() == mp2.m_id.GetKey()) { mp2.m_normalImpulse = mp1.m_normalImpulse; mp2.m_tangentImpulse = mp1.m_tangentImpulse; break; } } } } else { this.m_manifold.m_pointCount = 0; } if (touching != wasTouching) { bodyA.SetAwake(true); bodyB.SetAwake(true); } } this.touching = touching; if (touching != wasTouching) { this.UpdateLists(); } if (!wasTouching && touching) { listener.BeginContact(this); } if (wasTouching && !touching) { listener.EndContact(this); } if (!this.sensor) { listener.PreSolve(this, this.m_oldManifold); } }; Box2D.Dynamics.Contacts.b2Contact.prototype.Evaluate = function () {}; Box2D.Dynamics.Contacts.b2Contact.prototype.ComputeTOI = function (sweepA, sweepB) { Box2D.Dynamics.Contacts.b2Contact.s_input.proxyA.Set(this.m_fixtureA.GetShape()); Box2D.Dynamics.Contacts.b2Contact.s_input.proxyB.Set(this.m_fixtureB.GetShape()); Box2D.Dynamics.Contacts.b2Contact.s_input.sweepA = sweepA; Box2D.Dynamics.Contacts.b2Contact.s_input.sweepB = sweepB; Box2D.Dynamics.Contacts.b2Contact.s_input.tolerance = Box2D.Common.b2Settings.b2_linearSlop; return Box2D.Collision.b2TimeOfImpact.TimeOfImpact(Box2D.Dynamics.Contacts.b2Contact.s_input); }; Box2D.Dynamics.Contacts.b2Contact.s_input = new Box2D.Collision.b2TOIInput(); /** * @type {number} * @private */ Box2D.Dynamics.Contacts.b2Contact.NEXT_ID = 0; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2CircleContact = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2CircleContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2CircleContact.prototype.Reset = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2CircleContact.prototype.Evaluate = function() { Box2D.Collision.b2Collision.CollideCircles(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactConstraint = function() { this.localPlaneNormal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.normal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.normalMass = new Box2D.Common.Math.b2Mat22(); this.K = new Box2D.Common.Math.b2Mat22(); this.points = []; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.points[i] = new Box2D.Dynamics.Contacts.b2ContactConstraintPoint(); } }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactConstraintPoint = function() { this.localPoint = Box2D.Common.Math.b2Vec2.Get(0, 0); this.rA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.rB = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Dynamics.Contacts.b2ContactConstraintPoint.prototype.Reset = function() { this.localPoint.Set(0, 0); this.rA.Set(0, 0); this.rB.Set(0, 0); }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactFactory = function() { /** * @private */ this.m_registers = {}; /** * @private * @type {Object.<Object.<Array.<!Box2D.Dynamics.b2Contact>>>} */ this.m_freeContacts = {}; this.AddType(Box2D.Dynamics.Contacts.b2CircleContact, Box2D.Collision.Shapes.b2CircleShape.NAME, Box2D.Collision.Shapes.b2CircleShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2PolyAndCircleContact, Box2D.Collision.Shapes.b2PolygonShape.NAME, Box2D.Collision.Shapes.b2CircleShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2PolygonContact, Box2D.Collision.Shapes.b2PolygonShape.NAME, Box2D.Collision.Shapes.b2PolygonShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2EdgeAndCircleContact, Box2D.Collision.Shapes.b2EdgeShape.NAME, Box2D.Collision.Shapes.b2CircleShape.NAME); this.AddType(Box2D.Dynamics.Contacts.b2PolyAndEdgeContact, Box2D.Collision.Shapes.b2PolygonShape.NAME, Box2D.Collision.Shapes.b2EdgeShape.NAME); }; Box2D.Dynamics.Contacts.b2ContactFactory.prototype.AddType = function(ctor, type1, type2) { this.m_freeContacts[type1] = this.m_freeContacts[type1] || {}; this.m_freeContacts[type1][type2] = this.m_freeContacts[type1][type2] || []; this.m_registers[type1] = this.m_registers[type1] || {}; this.m_registers[type1][type2] = new Box2D.Dynamics.Contacts.b2ContactRegister(); this.m_registers[type1][type2].ctor = ctor; this.m_registers[type1][type2].primary = true; if (type1 != type2) { this.m_registers[type2] = this.m_registers[type2] || {}; this.m_registers[type2][type1] = new Box2D.Dynamics.Contacts.b2ContactRegister(); this.m_registers[type2][type1].ctor = ctor; this.m_registers[type2][type1].primary = false; } }; Box2D.Dynamics.Contacts.b2ContactFactory.prototype.Create = function(fixtureA, fixtureB) { var type1 = fixtureA.GetShape().GetTypeName(); var type2 = fixtureB.GetShape().GetTypeName(); var reg = this.m_registers[type1][type2]; var ctor = reg.ctor; if (ctor != null) { if (reg.primary) { if (this.m_freeContacts[type1][type2].length > 0) { var c = this.m_freeContacts[type1][type2].pop(); c.Reset(fixtureA, fixtureB); return c; } return new ctor(fixtureA, fixtureB); } else { if (this.m_freeContacts[type2][type1].length > 0) { var c = this.m_freeContacts[type2][type1].pop(); c.Reset(fixtureB, fixtureA); return c; } return new ctor(fixtureB, fixtureA); } } else { return null; } }; Box2D.Dynamics.Contacts.b2ContactFactory.prototype.Destroy = function(contact) { var type1 = contact.m_fixtureA.GetShape().GetTypeName(); var type2 = contact.m_fixtureB.GetShape().GetTypeName(); this.m_freeContacts[type1][type2].push(contact); }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactList = function() { /** * @private * @type {Array.<Box2D.Dynamics.Contacts.b2ContactListNode>} */ this.contactFirstNodes = []; for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.contactFirstNodes[i] = null; } /** * @private * @type {Array.<Box2D.Dynamics.Contacts.b2ContactListNode>} */ this.contactLastNodes = []; for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.contactLastNodes[i] = null; } /** * @private * @type {Object.<Array.<Box2D.Dynamics.Contacts.b2ContactListNode>>} */ this.contactNodeLookup = {}; /** * @private * @type {number} */ this.contactCount = 0; }; /** * @param {number} type * @return {Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactList.prototype.GetFirstNode = function(type) { return this.contactFirstNodes[type]; }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.Contacts.b2ContactList.prototype.AddContact = function(contact) { var contactID = contact.ID; if (this.contactNodeLookup[contactID] == null) { this.contactNodeLookup[contactID] = []; for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.contactNodeLookup[contactID][i] = null; } this.CreateNode(contact, contactID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts); this.contactCount++; } }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.Contacts.b2ContactList.prototype.UpdateContact = function(contact, nonSensorEnabledTouching, nonSensorEnabledContinuous) { if (nonSensorEnabledTouching) { this.CreateNode(contact, contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); } else { this.RemoveNode(contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledTouchingContacts); } if (nonSensorEnabledContinuous) { this.CreateNode(contact, contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledContinuousContacts); } else { this.RemoveNode(contact.ID, Box2D.Dynamics.Contacts.b2ContactList.TYPES.nonSensorEnabledContinuousContacts); } }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact */ Box2D.Dynamics.Contacts.b2ContactList.prototype.RemoveContact = function(contact) { var contactID = contact.ID; if (this.contactNodeLookup[contactID] != null) { for(var i = 0; i <= Box2D.Dynamics.Contacts.b2ContactList.TYPES.allContacts; i++) { this.RemoveNode(contactID, i); } delete this.contactNodeLookup[contactID]; this.contactCount--; } }; /** * @param {string} contactID * @param {number} type */ Box2D.Dynamics.Contacts.b2ContactList.prototype.RemoveNode = function(contactID, type) { var nodeList = this.contactNodeLookup[contactID]; if (nodeList == null) { return; } var node = nodeList[type]; if (node == null) { return; } nodeList[type] = null; var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.contactFirstNodes[type] = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.contactLastNodes[type] = prevNode; } else { nextNode.SetPreviousNode(prevNode); } Box2D.Dynamics.Contacts.b2ContactListNode.FreeNode(node); }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact * @param {string} contactID * @param {number} type */ Box2D.Dynamics.Contacts.b2ContactList.prototype.CreateNode = function(contact, contactID, type) { var nodeList = this.contactNodeLookup[contactID]; if (nodeList[type] == null) { nodeList[type] = Box2D.Dynamics.Contacts.b2ContactListNode.GetNode(contact); var prevNode = this.contactLastNodes[type]; if (prevNode != null) { prevNode.SetNextNode(nodeList[type]); nodeList[type].SetPreviousNode(prevNode); } else { this.contactFirstNodes[type] = nodeList[type]; } this.contactLastNodes[type] = nodeList[type]; } }; /** * @return {number} */ Box2D.Dynamics.Contacts.b2ContactList.prototype.GetContactCount = function() { return this.contactCount; }; /** * @enum {number} */ Box2D.Dynamics.Contacts.b2ContactList.TYPES = { nonSensorEnabledTouchingContacts: 0, nonSensorEnabledContinuousContacts: 1, allContacts: 2 // Assumed to be last by above code }; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact * @constructor */ Box2D.Dynamics.Contacts.b2ContactListNode = function(contact) { /** * @private * @type {!Box2D.Dynamics.Contacts.b2Contact} */ this.contact = contact; /** * @private * @type {Box2D.Dynamics.Contacts.b2ContactListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.Contacts.b2ContactListNode} */ this.previous = null; }; /** * @private * @type {Array.<!Box2D.Dynamics.Contacts.b2ContactListNode> */ Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes = []; /** * @param {!Box2D.Dynamics.Contacts.b2Contact} contact * @return {!Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactListNode.GetNode = function(contact) { if (Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes.length > 0) { var node = Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes.pop(); node.next = null; node.previous = null; node.contact = contact; return node; } else { return new Box2D.Dynamics.Contacts.b2ContactListNode(contact); } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactListNode} node */ Box2D.Dynamics.Contacts.b2ContactListNode.FreeNode = function(node) { Box2D.Dynamics.Contacts.b2ContactListNode.freeNodes.push(node); }; /** * @param {Box2D.Dynamics.Contacts.b2ContactListNode} node */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.Contacts.b2ContactListNode} node */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {!Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.GetContact = function() { return this.contact; }; /** * @return {Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.Contacts.b2ContactListNode} */ Box2D.Dynamics.Contacts.b2ContactListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactRegister = function () { this.pool = null; this.poolCount = 0; }; /** * @constructor */ Box2D.Dynamics.Contacts.b2PositionSolverManifold = function() { this.m_normal = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_separations = []; this.m_points = []; for (var i = 0; i < Box2D.Common.b2Settings.b2_maxManifoldPoints; i++) { this.m_points[i] = Box2D.Common.Math.b2Vec2.Get(0, 0); } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype.Initialize = function(cc) { ; switch (cc.type) { case Box2D.Collision.b2Manifold.e_circles: this._InitializeCircles(cc); break; case Box2D.Collision.b2Manifold.e_faceA: this._InitializeFaceA(cc); break; case Box2D.Collision.b2Manifold.e_faceB: this._InitializeFaceB(cc); break; } }; /** * @private * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype._InitializeCircles = function(cc) { var tMat = cc.bodyA.m_xf.R; var tVec = cc.localPoint; var pointAX = cc.bodyA.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var pointAY = cc.bodyA.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); tMat = cc.bodyB.m_xf.R; tVec = cc.points[0].localPoint; var pointBX = cc.bodyB.m_xf.position.x + (tMat.col1.x * tVec.x + tMat.col2.x * tVec.y); var pointBY = cc.bodyB.m_xf.position.y + (tMat.col1.y * tVec.x + tMat.col2.y * tVec.y); var dX = pointBX - pointAX; var dY = pointBY - pointAY; var d2 = dX * dX + dY * dY; if (d2 > Box2D.Common.b2Settings.MIN_VALUE_SQUARED) { var d = Math.sqrt(d2); this.m_normal.x = dX / d; this.m_normal.y = dY / d; } else { this.m_normal.x = 1.0; this.m_normal.y = 0.0; } this.m_points[0].x = 0.5 * (pointAX + pointBX); this.m_points[0].y = 0.5 * (pointAY + pointBY); this.m_separations[0] = dX * this.m_normal.x + dY * this.m_normal.y - cc.radius; }; /** * @private * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype._InitializeFaceA = function(cc) { this.m_normal.x = cc.bodyA.m_xf.R.col1.x * cc.localPlaneNormal.x + cc.bodyA.m_xf.R.col2.x * cc.localPlaneNormal.y; this.m_normal.y = cc.bodyA.m_xf.R.col1.y * cc.localPlaneNormal.x + cc.bodyA.m_xf.R.col2.y * cc.localPlaneNormal.y; var planePointX = cc.bodyA.m_xf.position.x + (cc.bodyA.m_xf.R.col1.x * cc.localPoint.x + cc.bodyA.m_xf.R.col2.x * cc.localPoint.y); var planePointY = cc.bodyA.m_xf.position.y + (cc.bodyA.m_xf.R.col1.y * cc.localPoint.x + cc.bodyA.m_xf.R.col2.y * cc.localPoint.y); for (var i = 0; i < cc.pointCount; i++) { var clipPointX = cc.bodyB.m_xf.position.x + (cc.bodyB.m_xf.R.col1.x * cc.points[i].localPoint.x + cc.bodyB.m_xf.R.col2.x * cc.points[i].localPoint.y); var clipPointY = cc.bodyB.m_xf.position.y + (cc.bodyB.m_xf.R.col1.y * cc.points[i].localPoint.x + cc.bodyB.m_xf.R.col2.y * cc.points[i].localPoint.y); this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius; this.m_points[i].x = clipPointX; this.m_points[i].y = clipPointY; } }; /** * @private * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} cc */ Box2D.Dynamics.Contacts.b2PositionSolverManifold.prototype._InitializeFaceB = function(cc) { this.m_normal.x = cc.bodyB.m_xf.R.col1.x * cc.localPlaneNormal.x + cc.bodyB.m_xf.R.col2.x * cc.localPlaneNormal.y; this.m_normal.y = cc.bodyB.m_xf.R.col1.y * cc.localPlaneNormal.x + cc.bodyB.m_xf.R.col2.y * cc.localPlaneNormal.y; var planePointX = cc.bodyB.m_xf.position.x + (cc.bodyB.m_xf.R.col1.x * cc.localPoint.x + cc.bodyB.m_xf.R.col2.x * cc.localPoint.y); var planePointY = cc.bodyB.m_xf.position.y + (cc.bodyB.m_xf.R.col1.y * cc.localPoint.x + cc.bodyB.m_xf.R.col2.y * cc.localPoint.y); for (var i = 0; i < cc.pointCount; i++) { var clipPointX = cc.bodyA.m_xf.position.x + (cc.bodyA.m_xf.R.col1.x * cc.points[i].localPoint.x + cc.bodyA.m_xf.R.col2.x * cc.points[i].localPoint.y); var clipPointY = cc.bodyA.m_xf.position.y + (cc.bodyA.m_xf.R.col1.y * cc.points[i].localPoint.x + cc.bodyA.m_xf.R.col2.y * cc.points[i].localPoint.y); this.m_separations[i] = (clipPointX - planePointX) * this.m_normal.x + (clipPointY - planePointY) * this.m_normal.y - cc.radius; this.m_points[i].Set(clipPointX, clipPointY); } this.m_normal.x *= -1; this.m_normal.y *= -1; }; /** * @constructor */ Box2D.Dynamics.Contacts.b2ContactSolver = function() { /** * @private * @type {Array.<!Box2D.Dynamics.Contacts.b2ContactConstraint>} */ this.m_constraints = []; }; /** * @param {!Box2D.Dynamics.b2TimeStep} step * @param {Array.<!Box2D.Dynamics.Contacts.b2Contact>} contacts * @param {number} contactCount */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.Initialize = function(step, contacts, contactCount) { this.m_constraintCount = contactCount; while (this.m_constraints.length < this.m_constraintCount) { this.m_constraints[this.m_constraints.length] = new Box2D.Dynamics.Contacts.b2ContactConstraint(); } for (var i = 0; i < contactCount; i++) { var contact = contacts[i]; var fixtureA = contact.m_fixtureA; var fixtureB = contact.m_fixtureB; var shapeA = fixtureA.m_shape; var shapeB = fixtureB.m_shape; var radiusA = shapeA.m_radius; var radiusB = shapeB.m_radius; var bodyA = fixtureA.GetBody(); var bodyB = fixtureB.GetBody(); var manifold = contact.GetManifold(); var friction = Box2D.Common.b2Settings.b2MixFriction(fixtureA.GetFriction(), fixtureB.GetFriction()); var restitution = Box2D.Common.b2Settings.b2MixRestitution(fixtureA.GetRestitution(), fixtureB.GetRestitution()); var vAX = bodyA.m_linearVelocity.x; var vAY = bodyA.m_linearVelocity.y; var vBX = bodyB.m_linearVelocity.x; var vBY = bodyB.m_linearVelocity.y; var wA = bodyA.m_angularVelocity; var wB = bodyB.m_angularVelocity; ; Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.Initialize(manifold, bodyA.m_xf, radiusA, bodyB.m_xf, radiusB); var normalX = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_normal.x; var normalY = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_normal.y; var cc = this.m_constraints[i]; cc.bodyA = bodyA; cc.bodyB = bodyB; cc.manifold = manifold; cc.normal.x = normalX; cc.normal.y = normalY; cc.pointCount = manifold.m_pointCount; cc.friction = friction; cc.restitution = restitution; cc.localPlaneNormal.x = manifold.m_localPlaneNormal.x; cc.localPlaneNormal.y = manifold.m_localPlaneNormal.y; cc.localPoint.x = manifold.m_localPoint.x; cc.localPoint.y = manifold.m_localPoint.y; cc.radius = radiusA + radiusB; cc.type = manifold.m_type; for (var k = 0; k < cc.pointCount; ++k) { var cp = manifold.m_points[k]; var ccp = cc.points[k]; ccp.normalImpulse = cp.m_normalImpulse; ccp.tangentImpulse = cp.m_tangentImpulse; ccp.localPoint.SetV(cp.m_localPoint); var rAX = ccp.rA.x = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].x - bodyA.m_sweep.c.x; var rAY = ccp.rA.y = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].y - bodyA.m_sweep.c.y; var rBX = ccp.rB.x = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].x - bodyB.m_sweep.c.x; var rBY = ccp.rB.y = Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold.m_points[k].y - bodyB.m_sweep.c.y; var rnA = rAX * normalY - rAY * normalX; var rnB = rBX * normalY - rBY * normalX; rnA *= rnA; rnB *= rnB; var kNormal = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rnA + bodyB.m_invI * rnB; ccp.normalMass = 1.0 / kNormal; var kEqualized = bodyA.m_mass * bodyA.m_invMass + bodyB.m_mass * bodyB.m_invMass; kEqualized += bodyA.m_mass * bodyA.m_invI * rnA + bodyB.m_mass * bodyB.m_invI * rnB; ccp.equalizedMass = 1.0 / kEqualized; var tangentX = normalY; var tangentY = (-normalX); var rtA = rAX * tangentY - rAY * tangentX; var rtB = rBX * tangentY - rBY * tangentX; rtA *= rtA; rtB *= rtB; var kTangent = bodyA.m_invMass + bodyB.m_invMass + bodyA.m_invI * rtA + bodyB.m_invI * rtB; ccp.tangentMass = 1.0 / kTangent; ccp.velocityBias = 0.0; var tX = vBX + ((-wB * rBY)) - vAX - ((-wA * rAY)); var tY = vBY + (wB * rBX) - vAY - (wA * rAX); var vRel = cc.normal.x * tX + cc.normal.y * tY; if (vRel < (-Box2D.Common.b2Settings.b2_velocityThreshold)) { ccp.velocityBias += (-cc.restitution * vRel); } } if (cc.pointCount == 2) { var ccp1 = cc.points[0]; var ccp2 = cc.points[1]; var invMassA = bodyA.m_invMass; var invIA = bodyA.m_invI; var invMassB = bodyB.m_invMass; var invIB = bodyB.m_invI; var rn1A = ccp1.rA.x * normalY - ccp1.rA.y * normalX; var rn1B = ccp1.rB.x * normalY - ccp1.rB.y * normalX; var rn2A = ccp2.rA.x * normalY - ccp2.rA.y * normalX; var rn2B = ccp2.rB.x * normalY - ccp2.rB.y * normalX; var k11 = invMassA + invMassB + invIA * rn1A * rn1A + invIB * rn1B * rn1B; var k22 = invMassA + invMassB + invIA * rn2A * rn2A + invIB * rn2B * rn2B; var k12 = invMassA + invMassB + invIA * rn1A * rn2A + invIB * rn1B * rn2B; var k_maxConditionNumber = 100.0; if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { cc.K.col1.Set(k11, k12); cc.K.col2.Set(k12, k22); cc.K.GetInverse(cc.normalMass); } else { cc.pointCount = 1; } } } }; /** * @param {!Box2D.Dynamics.b2TimeStep} step */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.InitVelocityConstraints = function(step) { for (var i = 0; i < this.m_constraintCount; ++i) { var c = this.m_constraints[i]; var bodyA = c.bodyA; var bodyB = c.bodyB; var invMassA = bodyA.m_invMass; var invIA = bodyA.m_invI; var invMassB = bodyB.m_invMass; var invIB = bodyB.m_invI; var normalX = c.normal.x; var normalY = c.normal.y; var tangentX = normalY; var tangentY = (-normalX); var tX = 0; var j = 0; var tCount = 0; if (step.warmStarting) { tCount = c.pointCount; for (j = 0; j < tCount; ++j) { var ccp = c.points[j]; ccp.normalImpulse *= step.dtRatio; ccp.tangentImpulse *= step.dtRatio; var PX = ccp.normalImpulse * normalX + ccp.tangentImpulse * tangentX; var PY = ccp.normalImpulse * normalY + ccp.tangentImpulse * tangentY; bodyA.m_angularVelocity -= invIA * (ccp.rA.x * PY - ccp.rA.y * PX); bodyA.m_linearVelocity.x -= invMassA * PX; bodyA.m_linearVelocity.y -= invMassA * PY; bodyB.m_angularVelocity += invIB * (ccp.rB.x * PY - ccp.rB.y * PX); bodyB.m_linearVelocity.x += invMassB * PX; bodyB.m_linearVelocity.y += invMassB * PY; } } else { tCount = c.pointCount; for (j = 0; j < tCount; ++j) { var ccp2 = c.points[j]; ccp2.normalImpulse = 0.0; ccp2.tangentImpulse = 0.0; } } } }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints = function() { for (var i = 0; i < this.m_constraintCount; i++) { this.SolveVelocityConstraints_Constraint(this.m_constraints[i]); } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} c */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_Constraint = function(c) { var normalX = c.normal.x; var normalY = c.normal.y; for (var j = 0; j < c.pointCount; j++) { Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_ConstraintPoint(c, c.points[j]); } if (c.pointCount == 1) { var ccp = c.points[0]; var dvX = c.bodyB.m_linearVelocity.x - (c.bodyB.m_angularVelocity * ccp.rB.y) - c.bodyA.m_linearVelocity.x + (c.bodyA.m_angularVelocity * ccp.rA.y); var dvY = c.bodyB.m_linearVelocity.y + (c.bodyB.m_angularVelocity * ccp.rB.x) - c.bodyA.m_linearVelocity.y - (c.bodyA.m_angularVelocity * ccp.rA.x); var vn = dvX * normalX + dvY * normalY; var newImpulse = ccp.normalImpulse - (ccp.normalMass * (vn - ccp.velocityBias)); newImpulse = newImpulse > 0 ? newImpulse : 0.0; var impulseLambda = newImpulse - ccp.normalImpulse; var PX = impulseLambda * normalX; var PY = impulseLambda * normalY; c.bodyA.m_linearVelocity.x -= c.bodyA.m_invMass * PX; c.bodyA.m_linearVelocity.y -= c.bodyA.m_invMass * PY; c.bodyA.m_angularVelocity -= c.bodyA.m_invI * (ccp.rA.x * PY - ccp.rA.y * PX); c.bodyB.m_linearVelocity.x += c.bodyB.m_invMass * PX; c.bodyB.m_linearVelocity.y += c.bodyB.m_invMass * PY; c.bodyB.m_angularVelocity += c.bodyB.m_invI * (ccp.rB.x * PY - ccp.rB.y * PX); ccp.normalImpulse = newImpulse; } else { var cp1 = c.points[0]; var cp2 = c.points[1]; var aX = cp1.normalImpulse; var aY = cp2.normalImpulse; var dv1X = c.bodyB.m_linearVelocity.x - c.bodyB.m_angularVelocity * cp1.rB.y - c.bodyA.m_linearVelocity.x + c.bodyA.m_angularVelocity * cp1.rA.y; var dv1Y = c.bodyB.m_linearVelocity.y + c.bodyB.m_angularVelocity * cp1.rB.x - c.bodyA.m_linearVelocity.y - c.bodyA.m_angularVelocity * cp1.rA.x; var dv2X = c.bodyB.m_linearVelocity.x - c.bodyB.m_angularVelocity * cp2.rB.y - c.bodyA.m_linearVelocity.x + c.bodyA.m_angularVelocity * cp2.rA.y; var dv2Y = c.bodyB.m_linearVelocity.y + c.bodyB.m_angularVelocity * cp2.rB.x - c.bodyA.m_linearVelocity.y - c.bodyA.m_angularVelocity * cp2.rA.x; var bX = (dv1X * normalX + dv1Y * normalY) - cp1.velocityBias; var bY = (dv2X * normalX + dv2Y * normalY) - cp2.velocityBias; bX -= c.K.col1.x * aX + c.K.col2.x * aY; bY -= c.K.col1.y * aX + c.K.col2.y * aY; for (;;) { var firstX = (-(c.normalMass.col1.x * bX + c.normalMass.col2.x * bY)); if (firstX >= 0) { var firstY = (-(c.normalMass.col1.y * bX + c.normalMass.col2.y * bY)); if(firstY >= 0) { var dX = firstX - aX; var dY = firstY - aY; this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, firstX - aX, firstY - aY); cp1.normalImpulse = firstX; cp2.normalImpulse = firstY; break; } } var secondX = (-cp1.normalMass * bX); if (secondX >= 0) { if ((c.K.col1.y * secondX + bY) >= 0) { var dX = secondX - aX; var dY = -aY; this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, secondX - aX, -aY); cp1.normalImpulse = secondX; cp2.normalImpulse = 0; break; } } var secondY = (-cp2.normalMass * bY); if (secondY >= 0) { if ((c.K.col2.x * secondY + bX) >= 0) { this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, -aX, secondY - aY); cp1.normalImpulse = 0; cp2.normalImpulse = secondY; break; } } if (bX >= 0 && bY >= 0) { this.SolveVelocityConstraints_ConstraintPointUpdate(c, cp1, cp2, -aX, -aY); cp1.normalImpulse = 0; cp2.normalImpulse = 0; break; } break; } } }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} c * @param {!Box2D.Dynamics.Contacts.b2ContactConstraintPoint} ccp */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_ConstraintPoint = function(c, ccp) { var tangentX = c.normal.y; var tangentY = -c.normal.x; var dvX = c.bodyB.m_linearVelocity.x - c.bodyB.m_angularVelocity * ccp.rB.y - c.bodyA.m_linearVelocity.x + c.bodyA.m_angularVelocity * ccp.rA.y; var dvY = c.bodyB.m_linearVelocity.y + c.bodyB.m_angularVelocity * ccp.rB.x - c.bodyA.m_linearVelocity.y - c.bodyA.m_angularVelocity * ccp.rA.x; var vt = dvX * tangentX + dvY * tangentY; var maxFriction = c.friction * ccp.normalImpulse; var newImpulse = Box2D.Common.Math.b2Math.Clamp(ccp.tangentImpulse - ccp.tangentMass * vt, -maxFriction, maxFriction); var impulseLambda = newImpulse - ccp.tangentImpulse; var PX = impulseLambda * tangentX; var PY = impulseLambda * tangentY; c.bodyA.m_linearVelocity.x -= c.bodyA.m_invMass * PX; c.bodyA.m_linearVelocity.y -= c.bodyA.m_invMass * PY; c.bodyA.m_angularVelocity -= c.bodyA.m_invI * (ccp.rA.x * PY - ccp.rA.y * PX); c.bodyB.m_linearVelocity.x += c.bodyB.m_invMass * PX; c.bodyB.m_linearVelocity.y += c.bodyB.m_invMass * PY; c.bodyB.m_angularVelocity += c.bodyB.m_invI * (ccp.rB.x * PY - ccp.rB.y * PX); ccp.tangentImpulse = newImpulse; }; /** * @param {!Box2D.Dynamics.Contacts.b2ContactConstraint} c * @param {!Box2D.Dynamics.Contacts.b2ContactConstraintPoint} cp1 * @param {!Box2D.Dynamics.Contacts.b2ContactConstraintPoint} cp2 * @param {number} dX * @param {number} dY */ Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolveVelocityConstraints_ConstraintPointUpdate = function(c, cp1, cp2, dX, dY) { var P1X = dX * c.normal.x; var P1Y = dX * c.normal.y; var P2X = dY * c.normal.x; var P2Y = dY * c.normal.y; c.bodyA.m_linearVelocity.x -= c.bodyA.m_invMass * (P1X + P2X); c.bodyA.m_linearVelocity.y -= c.bodyA.m_invMass * (P1Y + P2Y); c.bodyA.m_angularVelocity -= c.bodyA.m_invI * (cp1.rA.x * P1Y - cp1.rA.y * P1X + cp2.rA.x * P2Y - cp2.rA.y * P2X); c.bodyB.m_linearVelocity.x += c.bodyB.m_invMass * (P1X + P2X); c.bodyB.m_linearVelocity.y += c.bodyB.m_invMass * (P1Y + P2Y); c.bodyB.m_angularVelocity += c.bodyB.m_invI * (cp1.rB.x * P1Y - cp1.rB.y * P1X + cp2.rB.x * P2Y - cp2.rB.y * P2X); cp1.normalImpulse = 0; cp2.normalImpulse = 0; }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.FinalizeVelocityConstraints = function() { for (var i = 0; i < this.m_constraintCount; ++i) { var c = this.m_constraints[i]; var m = c.manifold; for (var j = 0; j < c.pointCount; ++j) { var point1 = m.m_points[j]; var point2 = c.points[j]; point1.m_normalImpulse = point2.normalImpulse; point1.m_tangentImpulse = point2.tangentImpulse; } } }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var minSeparation = 0.0; for (var i = 0; i < this.m_constraintCount; i++) { var c = this.m_constraints[i]; var bodyA = c.bodyA; var bodyB = c.bodyB; var invMassA = bodyA.m_mass * bodyA.m_invMass; var invIA = bodyA.m_mass * bodyA.m_invI; var invMassB = bodyB.m_mass * bodyB.m_invMass; var invIB = bodyB.m_mass * bodyB.m_invI; Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.Initialize(c); var normal = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_normal; for (var j = 0; j < c.pointCount; j++) { var ccp = c.points[j]; var point = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_points[j]; var separation = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_separations[j]; var rAX = point.x - bodyA.m_sweep.c.x; var rAY = point.y - bodyA.m_sweep.c.y; var rBX = point.x - bodyB.m_sweep.c.x; var rBY = point.y - bodyB.m_sweep.c.y; minSeparation = minSeparation < separation ? minSeparation : separation; var C = Box2D.Common.Math.b2Math.Clamp(baumgarte * (separation + Box2D.Common.b2Settings.b2_linearSlop), (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); var impulse = (-ccp.equalizedMass * C); var PX = impulse * normal.x; var PY = impulse * normal.y; bodyA.m_sweep.c.x -= invMassA * PX; bodyA.m_sweep.c.y -= invMassA * PY; bodyA.m_sweep.a -= invIA * (rAX * PY - rAY * PX); bodyA.SynchronizeTransform(); bodyB.m_sweep.c.x += invMassB * PX; bodyB.m_sweep.c.y += invMassB * PY; bodyB.m_sweep.a += invIB * (rBX * PY - rBY * PX); bodyB.SynchronizeTransform(); } } return minSeparation > (-1.5 * Box2D.Common.b2Settings.b2_linearSlop); }; Box2D.Dynamics.Contacts.b2ContactSolver.prototype.SolvePositionConstraints_NEW = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var minSeparation = 0.0; for (var i = 0; i < this.m_constraintCount; i++) { var c = this.m_constraints[i]; var bodyA = c.bodyA; var bodyB = c.bodyB; var invMassA = bodyA.m_mass * bodyA.m_invMass; var invIA = bodyA.m_mass * bodyA.m_invI; var invMassB = bodyB.m_mass * bodyB.m_invMass; var invIB = bodyB.m_mass * bodyB.m_invI; Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.Initialize(c); var normal = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_normal; for (var j = 0; j < c.pointCount; j++) { var ccp = c.points[j]; var point = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_points[j]; var separation = Box2D.Dynamics.Contacts.b2ContactSolver.s_psm.m_separations[j]; var rAX = point.x - bodyA.m_sweep.c.x; var rAY = point.y - bodyA.m_sweep.c.y; var rBX = point.x - bodyB.m_sweep.c.x; var rBY = point.y - bodyB.m_sweep.c.y; if (separation < minSeparation) { minSeparation = separation; } var C = 0; if (baumgarte != 0) { Box2D.Common.Math.b2Math.Clamp(baumgarte * (separation + Box2D.Common.b2Settings.b2_linearSlop), (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); } var impulse = (-ccp.equalizedMass * C); var PX = impulse * normal.x; var PY = impulse * normal.y; bodyA.m_sweep.c.x -= invMassA * PX; bodyA.m_sweep.c.y -= invMassA * PY; bodyA.m_sweep.a -= invIA * (rAX * PY - rAY * PX); bodyA.SynchronizeTransform(); bodyB.m_sweep.c.x += invMassB * PX; bodyB.m_sweep.c.y += invMassB * PY; bodyB.m_sweep.a += invIB * (rBX * PY - rBY * PX); bodyB.SynchronizeTransform(); } } return minSeparation > (-1.5 * Box2D.Common.b2Settings.b2_linearSlop); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2EdgeAndCircleContact = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2EdgeAndCircleContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2EdgeAndCircleContact.prototype.Reset = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2EdgeAndCircleContact.prototype.Evaluate = function() { var bA = this.m_fixtureA.GetBody(); var bB = this.m_fixtureB.GetBody(); this.b2CollideEdgeAndCircle(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; Box2D.Dynamics.Contacts.b2EdgeAndCircleContact.prototype.b2CollideEdgeAndCircle = function(manifold, edge, xf1, circle, xf2) {}; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2PolyAndCircleContact = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2PolyAndCircleContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2PolyAndCircleContact.prototype.Reset = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2PolyAndCircleContact.prototype.Evaluate = function() { Box2D.Collision.b2Collision.CollidePolygonAndCircle(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2PolyAndEdgeContact = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2PolyAndEdgeContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2PolyAndEdgeContact.prototype.Reset = function(fixtureA, fixtureB) { ; ; Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2PolyAndEdgeContact.prototype.Evaluate = function() { this.b2CollidePolyAndEdge(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; Box2D.Dynamics.Contacts.b2PolyAndEdgeContact.prototype.b2CollidePolyAndEdge = function (manifold, polygon, xf1, edge, xf2) {}; /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB * @constructor * @extends {Box2D.Dynamics.Contacts.b2Contact} */ Box2D.Dynamics.Contacts.b2PolygonContact = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.call(this, fixtureA, fixtureB); }; c2inherit(Box2D.Dynamics.Contacts.b2PolygonContact, Box2D.Dynamics.Contacts.b2Contact); /** * @param {!Box2D.Dynamics.b2Fixture} fixtureA * @param {!Box2D.Dynamics.b2Fixture} fixtureB */ Box2D.Dynamics.Contacts.b2PolygonContact.prototype.Reset = function(fixtureA, fixtureB) { Box2D.Dynamics.Contacts.b2Contact.prototype.Reset.call(this, fixtureA, fixtureB); }; Box2D.Dynamics.Contacts.b2PolygonContact.prototype.Evaluate = function() { Box2D.Collision.b2Collision.CollidePolygons(this.m_manifold, this.m_fixtureA.GetShape(), this.m_fixtureA.GetBody().m_xf, this.m_fixtureB.GetShape(), this.m_fixtureB.GetBody().m_xf); }; /** * @constructor */ Box2D.Dynamics.Controllers.b2Controller = function() { /** * @const * @private * @type {string} */ this.ID = "Controller" + Box2D.Dynamics.Controllers.b2Controller.NEXT_ID++; /** * @type {Box2D.Dynamics.b2World} */ this.m_world = null; /** * @private * @type {!Box2D.Dynamics.b2BodyList} */ this.bodyList = new Box2D.Dynamics.b2BodyList(); }; Box2D.Dynamics.Controllers.b2Controller.prototype.Step = function(step) {}; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.Controllers.b2Controller.prototype.AddBody = function(body) { this.bodyList.AddBody(body); body.AddController(this); }; /** * @param {!Box2D.Dynamics.b2Body} body */ Box2D.Dynamics.Controllers.b2Controller.prototype.RemoveBody = function(body) { this.bodyList.RemoveBody(body); body.RemoveController(this); }; Box2D.Dynamics.Controllers.b2Controller.prototype.Clear = function() { for (var node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); node; node = node.GetNextNode()) { this.RemoveBody(node.body); } }; /** * @return {!Box2D.Dynamics.b2BodyList} */ Box2D.Dynamics.Controllers.b2Controller.prototype.GetBodyList = function() { return this.bodyList; }; /** * @type {number} * @private */ Box2D.Dynamics.Controllers.b2Controller.NEXT_ID = 0; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2BuoyancyController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.normal = Box2D.Common.Math.b2Vec2.Get(0, -1); this.offset = 0; this.density = 0; this.velocity = Box2D.Common.Math.b2Vec2.Get(0, 0); this.linearDrag = 2; this.angularDrag = 1; this.useDensity = false; this.useWorldGravity = true; this.gravity = null; }; c2inherit(Box2D.Dynamics.Controllers.b2BuoyancyController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2BuoyancyController.prototype.Step = function(step) { if (this.useWorldGravity) { this.gravity = this.m_world.GetGravity().Copy(); } for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; var areac = Box2D.Common.Math.b2Vec2.Get(0, 0); var massc = Box2D.Common.Math.b2Vec2.Get(0, 0); var area = 0.0; var mass = 0.0; for (var fixtureNode = body.GetFixtureList().GetFirstNode(); fixtureNode; fixtureNode = fixtureNode.GetNextNode()) { var sc = Box2D.Common.Math.b2Vec2.Get(0, 0); var sarea = fixtureNode.fixture.GetShape().ComputeSubmergedArea(this.normal, this.offset, body.GetTransform(), sc); area += sarea; areac.x += sarea * sc.x; areac.y += sarea * sc.y; var shapeDensity = 0; if (this.useDensity) { shapeDensity = 1; } else { shapeDensity = 1; } mass += sarea * shapeDensity; massc.x += sarea * sc.x * shapeDensity; massc.y += sarea * sc.y * shapeDensity; } if (area < Number.MIN_VALUE) { continue; } areac.x /= area; areac.y /= area; massc.x /= mass; massc.y /= mass; var buoyancyForce = this.gravity.GetNegative(); buoyancyForce.Multiply(this.density * area); body.ApplyForce(buoyancyForce, massc); var dragForce = body.GetLinearVelocityFromWorldPoint(areac); dragForce.Subtract(this.velocity); dragForce.Multiply((-this.linearDrag * area)); body.ApplyForce(dragForce, areac); body.ApplyTorque((-body.GetInertia() / body.GetMass() * area * body.GetAngularVelocity() * this.angularDrag)); Box2D.Common.Math.b2Vec2.Free(areac); Box2D.Common.Math.b2Vec2.Free(massc); } }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2ConstantAccelController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.A = Box2D.Common.Math.b2Vec2.Get(0, 0); }; c2inherit(Box2D.Dynamics.Controllers.b2ConstantAccelController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2ConstantAccelController.prototype.Step = function(step) { var smallA = Box2D.Common.Math.b2Vec2.Get(this.A.x * step.dt, this.A.y * step.dt); for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; var oldVelocity = body.GetLinearVelocity(); body.SetLinearVelocity(Box2D.Common.Math.b2Vec2.Get(oldVelocity.x + smallA.x, oldVelocity.y + smallA.y)); } Box2D.Common.Math.b2Vec2.Free(smallA); }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2ConstantForceController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.F = Box2D.Common.Math.b2Vec2.Get(0, 0); }; c2inherit(Box2D.Dynamics.Controllers.b2ConstantForceController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2ConstantForceController.prototype.Step = function(step) { for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; body.ApplyForce(this.F, body.GetWorldCenter()); } }; /** * @constructor */ Box2D.Dynamics.Controllers.b2ControllerList = function() { /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.controllerFirstNode = null; /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.controllerLastNode = null; /** * @private * @type {Object.<Box2D.Dynamics.Controllers.b2ControllerListNode>} */ this.controllerNodeLookup = {}; /** * @private * @type {number} */ this.controllerCount = 0; }; /** * @return {Box2D.Dynamics.Controllers.b2ControllerListNode} */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.GetFirstNode = function() { return this.controllerFirstNode; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.AddController = function(controller) { var controllerID = controller.ID; if (this.controllerNodeLookup[controllerID] == null) { var node = new Box2D.Dynamics.Controllers.b2ControllerListNode(controller); var prevNode = this.controllerLastNode; if (prevNode != null) { prevNode.SetNextNode(node); } else { this.controllerFirstNode = node; } node.SetPreviousNode(prevNode); this.controllerLastNode = node; this.controllerNodeLookup[controllerID] = node; this.controllerCount++; } }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.RemoveController = function(controller) { var controllerID = controller.ID; var node = this.controllerNodeLookup[controllerID]; if (node == null) { return; } var prevNode = node.GetPreviousNode(); var nextNode = node.GetNextNode(); if (prevNode == null) { this.controllerFirstNode = nextNode; } else { prevNode.SetNextNode(nextNode); } if (nextNode == null) { this.controllerLastNode = prevNode; } else { nextNode.SetPreviousNode(prevNode); } delete this.controllerNodeLookup[controllerID]; this.controllerCount--; }; /** * @return {number} */ Box2D.Dynamics.Controllers.b2ControllerList.prototype.GetControllerCount = function() { return this.controllerCount; }; /** * @param {!Box2D.Dynamics.Controllers.b2Controller} controller * @constructor */ Box2D.Dynamics.Controllers.b2ControllerListNode = function(controller) { /** * @const * @type {!Box2D.Dynamics.Controllers.b2Controller} */ this.controller = controller; /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.next = null; /** * @private * @type {Box2D.Dynamics.Controllers.b2ControllerListNode} */ this.previous = null; }; /** * @param {Box2D.Dynamics.Controllers.b2ControllerListNode} node */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.SetNextNode = function(node) { this.next = node; }; /** * @param {Box2D.Dynamics.Controllers.b2ControllerListNode} node */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.SetPreviousNode = function(node) { this.previous = node; }; /** * @return {Box2D.Dynamics.Controllers.b2ControllerListNode} */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.GetNextNode = function() { return this.next; }; /** * @return {Box2D.Dynamics.Controllers.b2ControllerListNode} */ Box2D.Dynamics.Controllers.b2ControllerListNode.prototype.GetPreviousNode = function() { return this.previous; }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2GravityController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.G = 1; this.invSqr = true; }; c2inherit(Box2D.Dynamics.Controllers.b2GravityController, Box2D.Dynamics.Controllers.b2Controller); Box2D.Dynamics.Controllers.b2GravityController.prototype.Step = function(step) { var i = null; var body1 = null; var p1 = null; var mass1 = 0; var j = null; var body2 = null; var p2 = null; var dx = 0; var dy = 0; var r2 = 0; var f = null; if (this.invSqr) { for (var body1Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body1Node; body1Node = body1Node.GetNextNode()) { var body1 = body1Node.body; var p1 = body1.GetWorldCenter(); var mass1 = body1.GetMass(); for (var body2Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body2Node; body2Node = body2Node.GetNextNode()) { var body2 = body2Node.body; if ( !body1.IsAwake() && !body2.IsAwake() ) { continue; } var p2 = body2.GetWorldCenter(); var dx = p2.x - p1.x; var dy = p2.y - p1.y; var r2 = dx * dx + dy * dy; if (r2 < Number.MIN_VALUE) { continue; } var f = Box2D.Common.Math.b2Vec2.Get(dx, dy); f.Multiply(this.G / r2 / Math.sqrt(r2) * mass1 * body2.GetMass()); if (body1.IsAwake()) { body1.ApplyForce(f, p1); } f.Multiply(-1); if (body2.IsAwake()) { body2.ApplyForce(f, p2); } Box2D.Common.Math.b2Vec2.Free(f); } } } else { for (var body1Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body1Node; body1Node = body1Node.GetNextNode()) { var body1 = bodyNode.body; var p1 = body1.GetWorldCenter(); var mass1 = body1.GetMass(); for (var body2Node = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.allBodies); body2Node; body2Node = body2Node.GetNextNode()) { var body2 = bodyNode.body; if ( !body1.IsAwake() && !body2.IsAwake() ) { continue; } var p2 = body2.GetWorldCenter(); var dx = p2.x - p1.x; var dy = p2.y - p1.y; var r2 = dx * dx + dy * dy; if (r2 < Number.MIN_VALUE) { continue; } var f = Box2D.Common.Math.b2Vec2.Get(dx, dy); f.Multiply(this.G / r2 * mass1 * body2.GetMass()); if (body1.IsAwake()) { body1.ApplyForce(f, p1); } f.Multiply(-1); if (body2.IsAwake()) { body2.ApplyForce(f, p2); } Box2D.Common.Math.b2Vec2.Free(f); } } } }; /** * @constructor * @extends {Box2D.Dynamics.Controllers.b2Controller} */ Box2D.Dynamics.Controllers.b2TensorDampingController = function() { Box2D.Dynamics.Controllers.b2Controller.call(this); this.T = new Box2D.Common.Math.b2Mat22(); this.maxTimestep = 0; }; c2inherit(Box2D.Dynamics.Controllers.b2TensorDampingController, Box2D.Dynamics.Controllers.b2Controller); /** * @param {number} xDamping * @param {number} yDamping */ Box2D.Dynamics.Controllers.b2TensorDampingController.prototype.SetAxisAligned = function(xDamping, yDamping) { this.T.col1.x = (-xDamping); this.T.col1.y = 0; this.T.col2.x = 0; this.T.col2.y = (-yDamping); if (xDamping > 0 || yDamping > 0) { this.maxTimestep = 1 / Math.max(xDamping, yDamping); } else { this.maxTimestep = 0; } }; Box2D.Dynamics.Controllers.b2TensorDampingController.prototype.Step = function(step) { var timestep = step.dt; if (timestep <= Number.MIN_VALUE) return; if (timestep > this.maxTimestep && this.maxTimestep > 0) timestep = this.maxTimestep; for (var bodyNode = this.bodyList.GetFirstNode(Box2D.Dynamics.b2BodyList.TYPES.awakeBodies); bodyNode; bodyNode = bodyNode.GetNextNode()) { var body = bodyNode.body; var damping = body.GetWorldVector(Box2D.Common.Math.b2Math.MulMV(this.T, body.GetLocalVector(body.GetLinearVelocity()))); body.SetLinearVelocity(Box2D.Common.Math.b2Vec2.Get(body.GetLinearVelocity().x + damping.x * timestep, body.GetLinearVelocity().y + damping.y * timestep)); } }; /** * @param {!Box2D.Dynamics.Joints.b2JointDef} def * @constructor */ Box2D.Dynamics.Joints.b2Joint = function(def) { this.m_edgeA = new Box2D.Dynamics.Joints.b2JointEdge(); this.m_edgeB = new Box2D.Dynamics.Joints.b2JointEdge(); this.m_localCenterA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localCenterB = Box2D.Common.Math.b2Vec2.Get(0, 0); ; this.m_type = def.type; this.m_prev = null; this.m_next = null; this.m_bodyA = def.bodyA; this.m_bodyB = def.bodyB; this.m_collideConnected = def.collideConnected; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetType = function() { return this.m_type; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetAnchorA = function() { return null; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetAnchorB = function() { return null; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return null; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return 0.0; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetBodyA = function() { return this.m_bodyA; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetBodyB = function() { return this.m_bodyB; }; Box2D.Dynamics.Joints.b2Joint.prototype.GetNext = function() { return this.m_next; }; Box2D.Dynamics.Joints.b2Joint.prototype.IsActive = function() { return this.m_bodyA.IsActive() && this.m_bodyB.IsActive(); }; Box2D.Dynamics.Joints.b2Joint.Create = function(def) { return def.Create(); }; Box2D.Dynamics.Joints.b2Joint.prototype.InitVelocityConstraints = function(step) {}; Box2D.Dynamics.Joints.b2Joint.prototype.SolveVelocityConstraints = function(step) {}; Box2D.Dynamics.Joints.b2Joint.prototype.FinalizeVelocityConstraints = function() {}; Box2D.Dynamics.Joints.b2Joint.prototype.SolvePositionConstraints = function(baumgarte) { return false; }; Box2D.Dynamics.Joints.b2Joint.e_unknownJoint = 0; Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint = 1; Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint = 2; Box2D.Dynamics.Joints.b2Joint.e_distanceJoint = 3; Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint = 4; Box2D.Dynamics.Joints.b2Joint.e_mouseJoint = 5; Box2D.Dynamics.Joints.b2Joint.e_gearJoint = 6; Box2D.Dynamics.Joints.b2Joint.e_lineJoint = 7; Box2D.Dynamics.Joints.b2Joint.e_weldJoint = 8; Box2D.Dynamics.Joints.b2Joint.e_frictionJoint = 9; Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit = 0; Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit = 1; Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit = 2; Box2D.Dynamics.Joints.b2Joint.e_equalLimits = 3; /** * @constructor */ Box2D.Dynamics.Joints.b2JointDef = function () { this.type = Box2D.Dynamics.Joints.b2Joint.e_unknownJoint; this.bodyA = null; this.bodyB = null; this.collideConnected = false; }; /** * @constructor */ Box2D.Dynamics.Joints.b2JointEdge = function () {}; /** * @param {!Box2D.Dynamics.Joints.b2DistanceJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2DistanceJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_u = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_length = def.length; this.m_frequencyHz = def.frequencyHz; this.m_dampingRatio = def.dampingRatio; this.m_impulse = 0.0; this.m_gamma = 0.0; this.m_bias = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2DistanceJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; /** * @param {number} inv_dt */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetReactionForce = function(inv_dt) { return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse * this.m_u.x, inv_dt * this.m_impulse * this.m_u.y); }; /** * @param {number} inv_dt */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetReactionTorque = function(inv_dt) { return 0.0; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetLength = function() { return this.m_length; }; /** * @param {number} length */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SetLength = function(length) { this.m_length = length; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetFrequency = function() { return this.m_frequencyHz; }; /** * @param {number} hz */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SetFrequency = function(hz) { this.m_frequencyHz = hz; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.GetDampingRatio = function() { return this.m_dampingRatio; }; /** * @param {number} ratio */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SetDampingRatio = function(ratio) { this.m_dampingRatio = ratio; }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.InitVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; this.m_u.x = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; this.m_u.y = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; var length = Math.sqrt(this.m_u.x * this.m_u.x + this.m_u.y * this.m_u.y); if (length > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u.Multiply(1.0 / length); } else { this.m_u.SetZero(); } var cr1u = (r1X * this.m_u.y - r1Y * this.m_u.x); var cr2u = (r2X * this.m_u.y - r2Y * this.m_u.x); var invMass = bA.m_invMass + bA.m_invI * cr1u * cr1u + bB.m_invMass + bB.m_invI * cr2u * cr2u; this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; if (this.m_frequencyHz > 0.0) { var C = length - this.m_length; var omega = 2.0 * Math.PI * this.m_frequencyHz; var d = 2.0 * this.m_mass * this.m_dampingRatio * omega; var k = this.m_mass * omega * omega; this.m_gamma = step.dt * (d + step.dt * k); this.m_gamma = this.m_gamma != 0.0 ? 1 / this.m_gamma : 0.0; this.m_bias = C * step.dt * k * this.m_gamma; this.m_mass = invMass + this.m_gamma; this.m_mass = this.m_mass != 0.0 ? 1.0 / this.m_mass : 0.0; } if (step.warmStarting) { this.m_impulse *= step.dtRatio; var PX = this.m_impulse * this.m_u.x; var PY = this.m_impulse * this.m_u.y; bA.m_linearVelocity.x -= bA.m_invMass * PX; bA.m_linearVelocity.y -= bA.m_invMass * PY; bA.m_angularVelocity -= bA.m_invI * (r1X * PY - r1Y * PX); bB.m_linearVelocity.x += bB.m_invMass * PX; bB.m_linearVelocity.y += bB.m_invMass * PY; bB.m_angularVelocity += bB.m_invI * (r2X * PY - r2Y * PX); } else { this.m_impulse = 0.0; } }; Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SolveVelocityConstraints = function(step) { var r1X = this.m_localAnchor1.x - this.m_bodyA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - this.m_bodyA.m_sweep.localCenter.y; var tX = (this.m_bodyA.m_xf.R.col1.x * r1X + this.m_bodyA.m_xf.R.col2.x * r1Y); r1Y = (this.m_bodyA.m_xf.R.col1.y * r1X + this.m_bodyA.m_xf.R.col2.y * r1Y); r1X = tX; var r2X = this.m_localAnchor2.x - this.m_bodyB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - this.m_bodyB.m_sweep.localCenter.y; tX = (this.m_bodyB.m_xf.R.col1.x * r2X + this.m_bodyB.m_xf.R.col2.x * r2Y); r2Y = (this.m_bodyB.m_xf.R.col1.y * r2X + this.m_bodyB.m_xf.R.col2.y * r2Y); r2X = tX; var v1X = this.m_bodyA.m_linearVelocity.x - this.m_bodyA.m_angularVelocity * r1Y; var v1Y = this.m_bodyA.m_linearVelocity.y + this.m_bodyA.m_angularVelocity * r1X; var v2X = this.m_bodyB.m_linearVelocity.x - this.m_bodyB.m_angularVelocity * r2Y; var v2Y = this.m_bodyB.m_linearVelocity.y + this.m_bodyB.m_angularVelocity * r2X; var Cdot = (this.m_u.x * (v2X - v1X) + this.m_u.y * (v2Y - v1Y)); var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); this.m_impulse += impulse; var PX = impulse * this.m_u.x; var PY = impulse * this.m_u.y; this.m_bodyA.m_linearVelocity.x -= this.m_bodyA.m_invMass * PX; this.m_bodyA.m_linearVelocity.y -= this.m_bodyA.m_invMass * PY; this.m_bodyA.m_angularVelocity -= this.m_bodyA.m_invI * (r1X * PY - r1Y * PX); this.m_bodyB.m_linearVelocity.x += this.m_bodyB.m_invMass * PX; this.m_bodyB.m_linearVelocity.y += this.m_bodyB.m_invMass * PY; this.m_bodyB.m_angularVelocity += this.m_bodyB.m_invI * (r2X * PY - r2Y * PX); }; /** * @param {number} baumgarte */ Box2D.Dynamics.Joints.b2DistanceJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (this.m_frequencyHz > 0.0) { return true; } var r1X = this.m_localAnchor1.x - this.m_bodyA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - this.m_bodyA.m_sweep.localCenter.y; var tX = (this.m_bodyA.m_xf.R.col1.x * r1X + this.m_bodyA.m_xf.R.col2.x * r1Y); r1Y = (this.m_bodyA.m_xf.R.col1.y * r1X + this.m_bodyA.m_xf.R.col2.y * r1Y); r1X = tX; var r2X = this.m_localAnchor2.x - this.m_bodyB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - this.m_bodyB.m_sweep.localCenter.y; tX = (this.m_bodyB.m_xf.R.col1.x * r2X + this.m_bodyB.m_xf.R.col2.x * r2Y); r2Y = (this.m_bodyB.m_xf.R.col1.y * r2X + this.m_bodyB.m_xf.R.col2.y * r2Y); r2X = tX; var dX = this.m_bodyB.m_sweep.c.x + r2X - this.m_bodyA.m_sweep.c.x - r1X; var dY = this.m_bodyB.m_sweep.c.y + r2Y - this.m_bodyA.m_sweep.c.y - r1Y; var length = Math.sqrt(dX * dX + dY * dY); dX /= length; dY /= length; var C = Box2D.Common.Math.b2Math.Clamp(length - this.m_length, -Box2D.Common.b2Settings.b2_maxLinearCorrection, Box2D.Common.b2Settings.b2_maxLinearCorrection); var impulse = -this.m_mass * C; this.m_u.Set(dX, dY); var PX = impulse * this.m_u.x; var PY = impulse * this.m_u.y; this.m_bodyA.m_sweep.c.x -= this.m_bodyA.m_invMass * PX; this.m_bodyA.m_sweep.c.y -= this.m_bodyA.m_invMass * PY; this.m_bodyA.m_sweep.a -= this.m_bodyA.m_invI * (r1X * PY - r1Y * PX); this.m_bodyB.m_sweep.c.x += this.m_bodyB.m_invMass * PX; this.m_bodyB.m_sweep.c.y += this.m_bodyB.m_invMass * PY; this.m_bodyB.m_sweep.a += this.m_bodyB.m_invI * (r2X * PY - r2Y * PX); this.m_bodyA.SynchronizeTransform(); this.m_bodyB.SynchronizeTransform(); return Math.abs(C) < Box2D.Common.b2Settings.b2_linearSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2DistanceJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_distanceJoint; this.length = 1.0; this.frequencyHz = 0.0; this.dampingRatio = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2DistanceJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2DistanceJointDef.prototype.Initialize = function(bA, bB, anchorA, anchorB) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchorA)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchorB)); var dX = anchorB.x - anchorA.x; var dY = anchorB.y - anchorA.y; this.length = Math.sqrt(dX * dX + dY * dY); this.frequencyHz = 0.0; this.dampingRatio = 0.0; }; Box2D.Dynamics.Joints.b2DistanceJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2DistanceJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2FrictionJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2FrictionJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_linearMass = new Box2D.Common.Math.b2Mat22(); this.m_linearImpulse = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchorA.SetV(def.localAnchorA); this.m_localAnchorB.SetV(def.localAnchorB); this.m_linearMass.SetZero(); this.m_angularMass = 0.0; this.m_linearImpulse.SetZero(); this.m_angularImpulse = 0.0; this.m_maxForce = def.maxForce; this.m_maxTorque = def.maxTorque; }; c2inherit(Box2D.Dynamics.Joints.b2FrictionJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA); }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB); }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return new b2Vec2(inv_dt * this.m_linearImpulse.x, inv_dt * this.m_linearImpulse.y); }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_angularImpulse; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SetMaxForce = function(force) { if (force === undefined) force = 0; this.m_maxForce = force; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetMaxForce = function() { return this.m_maxForce; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SetMaxTorque = function(torque) { if (torque === undefined) torque = 0; this.m_maxTorque = torque; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.GetMaxTorque = function() { return this.m_maxTorque; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.InitVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; var K = new Box2D.Common.Math.b2Mat22(); K.col1.x = mA + mB; K.col2.x = 0.0; K.col1.y = 0.0; K.col2.y = mA + mB; K.col1.x += iA * rAY * rAY; K.col2.x += (-iA * rAX * rAY); K.col1.y += (-iA * rAX * rAY); K.col2.y += iA * rAX * rAX; K.col1.x += iB * rBY * rBY; K.col2.x += (-iB * rBX * rBY); K.col1.y += (-iB * rBX * rBY); K.col2.y += iB * rBX * rBX; K.GetInverse(this.m_linearMass); this.m_angularMass = iA + iB; if (this.m_angularMass > 0.0) { this.m_angularMass = 1.0 / this.m_angularMass; } if (step.warmStarting) { this.m_linearImpulse.x *= step.dtRatio; this.m_linearImpulse.y *= step.dtRatio; this.m_angularImpulse *= step.dtRatio; var P = this.m_linearImpulse; bA.m_linearVelocity.x -= mA * P.x; bA.m_linearVelocity.y -= mA * P.y; bA.m_angularVelocity -= iA * (rAX * P.y - rAY * P.x + this.m_angularImpulse); bB.m_linearVelocity.x += mB * P.x; bB.m_linearVelocity.y += mB * P.y; bB.m_angularVelocity += iB * (rBX * P.y - rBY * P.x + this.m_angularImpulse); } else { this.m_linearImpulse.SetZero(); this.m_angularImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SolveVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var vA = bA.m_linearVelocity; var wA = bA.m_angularVelocity; var vB = bB.m_linearVelocity; var wB = bB.m_angularVelocity; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var maxImpulse = 0; var Cdot = wB - wA; var impulse = (-this.m_angularMass * Cdot); var oldImpulse = this.m_angularImpulse; maxImpulse = step.dt * this.m_maxTorque; this.m_angularImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_angularImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_angularImpulse - oldImpulse; wA -= iA * impulse; wB += iB * impulse; var CdotX = vB.x - wB * rBY - vA.x + wA * rAY; var CdotY = vB.y + wB * rBX - vA.y - wA * rAX; var impulseV = Box2D.Common.Math.b2Math.MulMV(this.m_linearMass, Box2D.Common.Math.b2Vec2.Get((-CdotX), (-CdotY))); var oldImpulseV = this.m_linearImpulse.Copy(); this.m_linearImpulse.Add(impulseV); maxImpulse = step.dt * this.m_maxForce; if (this.m_linearImpulse.LengthSquared() > maxImpulse * maxImpulse) { this.m_linearImpulse.Normalize(); this.m_linearImpulse.Multiply(maxImpulse); } impulseV = Box2D.Common.Math.b2Math.SubtractVV(this.m_linearImpulse, oldImpulseV); vA.x -= mA * impulseV.x; vA.y -= mA * impulseV.y; wA -= iA * (rAX * impulseV.y - rAY * impulseV.x); vB.x += mB * impulseV.x; vB.y += mB * impulseV.y; wB += iB * (rBX * impulseV.y - rBY * impulseV.x); bA.m_angularVelocity = wA; bB.m_angularVelocity = wB; }; Box2D.Dynamics.Joints.b2FrictionJoint.prototype.SolvePositionConstraints = function(baumgarte) { return true; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2FrictionJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_frictionJoint; this.maxForce = 0.0; this.maxTorque = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2FrictionJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2FrictionJointDef.prototype.Initialize = function (bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor)); }; Box2D.Dynamics.Joints.b2FrictionJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2FrictionJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2GearJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2GearJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_groundAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_groundAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_J = new Box2D.Dynamics.Joints.b2Jacobian(); var type1 = def.joint1.m_type; var type2 = def.joint2.m_type; this.m_revolute1 = null; this.m_prismatic1 = null; this.m_revolute2 = null; this.m_prismatic2 = null; var coordinate1 = 0; var coordinate2 = 0; this.m_ground1 = def.joint1.GetBodyA(); this.m_bodyA = def.joint1.GetBodyB(); if (type1 == Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint) { this.m_revolute1 = def.joint1; this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1); this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2); coordinate1 = this.m_revolute1.GetJointAngle(); } else { this.m_prismatic1 = def.joint1; this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1); this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2); coordinate1 = this.m_prismatic1.GetJointTranslation(); } this.m_ground2 = def.joint2.GetBodyA(); this.m_bodyB = def.joint2.GetBodyB(); if (type2 == Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint) { this.m_revolute2 = def.joint2; this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1); this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2); coordinate2 = this.m_revolute2.GetJointAngle(); } else { this.m_prismatic2 = def.joint2; this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1); this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2); coordinate2 = this.m_prismatic2.GetJointTranslation(); } this.m_ratio = def.ratio; this.m_constant = coordinate1 + this.m_ratio * coordinate2; this.m_impulse = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2GearJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2GearJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse * this.m_J.linearB.x, inv_dt * this.m_impulse * this.m_J.linearB.y); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; var tMat = this.m_bodyB.m_xf.R; var rX = this.m_localAnchor1.x - this.m_bodyB.m_sweep.localCenter.x; var rY = this.m_localAnchor1.y - this.m_bodyB.m_sweep.localCenter.y; var tX = tMat.col1.x * rX + tMat.col2.x * rY; rY = tMat.col1.y * rX + tMat.col2.y * rY; rX = tX; var PX = this.m_impulse * this.m_J.linearB.x; var PY = this.m_impulse * this.m_J.linearB.y; return inv_dt * (this.m_impulse * this.m_J.angularB - rX * PY + rY * PX); }; Box2D.Dynamics.Joints.b2GearJoint.prototype.GetRatio = function() { return this.m_ratio; }; Box2D.Dynamics.Joints.b2GearJoint.prototype.SetRatio = function(ratio) { if (ratio === undefined) ratio = 0; this.m_ratio = ratio; }; Box2D.Dynamics.Joints.b2GearJoint.prototype.InitVelocityConstraints = function(step) { var g1 = this.m_ground1; var g2 = this.m_ground2; var bA = this.m_bodyA; var bB = this.m_bodyB; var ugX = 0; var ugY = 0; var rX = 0; var rY = 0; var tMat; var tVec; var crug = 0; var tX = 0; var K = 0.0; this.m_J.SetZero(); if (this.m_revolute1) { this.m_J.angularA = (-1.0); K += bA.m_invI; } else { tMat = g1.m_xf.R; tVec = this.m_prismatic1.m_localXAxis1; ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = bA.m_xf.R; rX = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; rY = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = tMat.col1.x * rX + tMat.col2.x * rY; rY = tMat.col1.y * rX + tMat.col2.y * rY; rX = tX; crug = rX * ugY - rY * ugX; this.m_J.linearA.Set((-ugX), (-ugY)); this.m_J.angularA = (-crug); K += bA.m_invMass + bA.m_invI * crug * crug; } if (this.m_revolute2) { this.m_J.angularB = (-this.m_ratio); K += this.m_ratio * this.m_ratio * bB.m_invI; } else { tMat = g2.m_xf.R; tVec = this.m_prismatic2.m_localXAxis1; ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y; ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y; tMat = bB.m_xf.R; rX = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; rY = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = tMat.col1.x * rX + tMat.col2.x * rY; rY = tMat.col1.y * rX + tMat.col2.y * rY; rX = tX; crug = rX * ugY - rY * ugX; this.m_J.linearB.Set((-this.m_ratio * ugX), (-this.m_ratio * ugY)); this.m_J.angularB = (-this.m_ratio * crug); K += this.m_ratio * this.m_ratio * (bB.m_invMass + bB.m_invI * crug * crug); } this.m_mass = K > 0.0 ? 1.0 / K : 0.0; if (step.warmStarting) { bA.m_linearVelocity.x += bA.m_invMass * this.m_impulse * this.m_J.linearA.x; bA.m_linearVelocity.y += bA.m_invMass * this.m_impulse * this.m_J.linearA.y; bA.m_angularVelocity += bA.m_invI * this.m_impulse * this.m_J.angularA; bB.m_linearVelocity.x += bB.m_invMass * this.m_impulse * this.m_J.linearB.x; bB.m_linearVelocity.y += bB.m_invMass * this.m_impulse * this.m_J.linearB.y; bB.m_angularVelocity += bB.m_invI * this.m_impulse * this.m_J.angularB; } else { this.m_impulse = 0.0; } }; Box2D.Dynamics.Joints.b2GearJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var Cdot = this.m_J.Compute(bA.m_linearVelocity, bA.m_angularVelocity, bB.m_linearVelocity, bB.m_angularVelocity); var impulse = (-this.m_mass * Cdot); this.m_impulse += impulse; bA.m_linearVelocity.x += bA.m_invMass * impulse * this.m_J.linearA.x; bA.m_linearVelocity.y += bA.m_invMass * impulse * this.m_J.linearA.y; bA.m_angularVelocity += bA.m_invI * impulse * this.m_J.angularA; bB.m_linearVelocity.x += bB.m_invMass * impulse * this.m_J.linearB.x; bB.m_linearVelocity.y += bB.m_invMass * impulse * this.m_J.linearB.y; bB.m_angularVelocity += bB.m_invI * impulse * this.m_J.angularB; }; Box2D.Dynamics.Joints.b2GearJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var linearError = 0.0; var bA = this.m_bodyA; var bB = this.m_bodyB; var coordinate1 = 0; var coordinate2 = 0; if (this.m_revolute1) { coordinate1 = this.m_revolute1.GetJointAngle(); } else { coordinate1 = this.m_prismatic1.GetJointTranslation(); } if (this.m_revolute2) { coordinate2 = this.m_revolute2.GetJointAngle(); } else { coordinate2 = this.m_prismatic2.GetJointTranslation(); } var C = this.m_constant - (coordinate1 + this.m_ratio * coordinate2); var impulse = (-this.m_mass * C); bA.m_sweep.c.x += bA.m_invMass * impulse * this.m_J.linearA.x; bA.m_sweep.c.y += bA.m_invMass * impulse * this.m_J.linearA.y; bA.m_sweep.a += bA.m_invI * impulse * this.m_J.angularA; bB.m_sweep.c.x += bB.m_invMass * impulse * this.m_J.linearB.x; bB.m_sweep.c.y += bB.m_invMass * impulse * this.m_J.linearB.y; bB.m_sweep.a += bB.m_invI * impulse * this.m_J.angularB; bA.SynchronizeTransform(); bB.SynchronizeTransform(); return linearError < Box2D.Common.b2Settings.b2_linearSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2GearJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.type = Box2D.Dynamics.Joints.b2Joint.e_gearJoint; this.joint1 = null; this.joint2 = null; this.ratio = 1.0; }; c2inherit(Box2D.Dynamics.Joints.b2GearJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2GearJointDef.prototype.Initialize = function(joint1, joint2, ratio) { this.joint1 = joint1; this.bodyA = joint1.GetBodyA(); this.joint2 = joint2; this.bodyB = joint2.GetBodyA(); this.ratio = ratio; }; Box2D.Dynamics.Joints.b2GearJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2GearJoint(this); }; /** * @constructor */ Box2D.Dynamics.Joints.b2Jacobian = function() { this.linearA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.linearB = Box2D.Common.Math.b2Vec2.Get(0, 0); }; Box2D.Dynamics.Joints.b2Jacobian.prototype.SetZero = function() { this.linearA.SetZero(); this.angularA = 0.0; this.linearB.SetZero(); this.angularB = 0.0; }; Box2D.Dynamics.Joints.b2Jacobian.prototype.Set = function(x1, a1, x2, a2) { if (a1 === undefined) a1 = 0; if (a2 === undefined) a2 = 0; this.linearA.SetV(x1); this.angularA = a1; this.linearB.SetV(x2); this.angularB = a2; }; Box2D.Dynamics.Joints.b2Jacobian.prototype.Compute = function(x1, a1, x2, a2) { if (a1 === undefined) a1 = 0; if (a2 === undefined) a2 = 0; return (this.linearA.x * x1.x + this.linearA.y * x1.y) + this.angularA * a1 + (this.linearB.x * x2.x + this.linearB.y * x2.y) + this.angularB * a2; }; /** * @param {!Box2D.Dynamics.Joints.b2LineJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2LineJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localXAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localYAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_axis = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_perp = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_K = new Box2D.Common.Math.b2Mat22(); this.m_impulse = Box2D.Common.Math.b2Vec2.Get(0, 0); var tMat; var tX = 0; var tY = 0; this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_localXAxis1.SetV(def.localAxisA); this.m_localYAxis1.x = (-this.m_localXAxis1.y); this.m_localYAxis1.y = this.m_localXAxis1.x; this.m_impulse.SetZero(); this.m_motorMass = 0.0; this.m_motorImpulse = 0.0; this.m_lowerTranslation = def.lowerTranslation; this.m_upperTranslation = def.upperTranslation; this.m_maxMotorForce = def.maxMotorForce; this.m_motorSpeed = def.motorSpeed; this.m_enableLimit = def.enableLimit; this.m_enableMotor = def.enableMotor; this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_axis.SetZero(); this.m_perp.SetZero(); }; c2inherit(Box2D.Dynamics.Joints.b2LineJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2LineJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y)); }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_impulse.y; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetJointTranslation = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var p1 = bA.GetWorldPoint(this.m_localAnchor1); var p2 = bB.GetWorldPoint(this.m_localAnchor2); var dX = p2.x - p1.x; var dY = p2.y - p1.y; var axis = bA.GetWorldVector(this.m_localXAxis1); var translation = axis.x * dX + axis.y * dY; return translation; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetJointSpeed = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var p1X = bA.m_sweep.c.x + r1X; var p1Y = bA.m_sweep.c.y + r1Y; var p2X = bB.m_sweep.c.x + r2X; var p2Y = bB.m_sweep.c.y + r2Y; var dX = p2X - p1X; var dY = p2Y - p1Y; var axis = bA.GetWorldVector(this.m_localXAxis1); var v1 = bA.m_linearVelocity; var v2 = bB.m_linearVelocity; var w1 = bA.m_angularVelocity; var w2 = bB.m_angularVelocity; var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X))); return speed; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.EnableLimit = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableLimit = flag; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetLowerLimit = function() { return this.m_lowerTranslation; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetUpperLimit = function() { return this.m_upperTranslation; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SetLimits = function(lower, upper) { if (lower === undefined) lower = 0; if (upper === undefined) upper = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_lowerTranslation = lower; this.m_upperTranslation = upper; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.EnableMotor = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableMotor = flag; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SetMotorSpeed = function(speed) { if (speed === undefined) speed = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_motorSpeed = speed; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SetMaxMotorForce = function(force) { if (force === undefined) force = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_maxMotorForce = force; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetMaxMotorForce = function() { return this.m_maxMotorForce; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.GetMotorForce = function() { return this.m_motorImpulse; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; this.m_localCenterA.SetV(bA.GetLocalCenter()); this.m_localCenterB.SetV(bB.GetLocalCenter()); var xf1 = bA.GetTransform(); var xf2 = bB.GetTransform(); tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; this.m_invMassA = bA.m_invMass; this.m_invMassB = bB.m_invMass; this.m_invIA = bA.m_invI; this.m_invIB = bB.m_invI; this.m_axis.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localXAxis1)); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2; this.m_motorMass = this.m_motorMass > Number.MIN_VALUE ? 1.0 / this.m_motorMass : 0.0; this.m_perp.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localYAxis1)); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var m1 = this.m_invMassA; var m2 = this.m_invMassB; var i1 = this.m_invIA; var i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; if (this.m_enableLimit) { var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_equalLimits; } else if (jointTransition <= this.m_lowerTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit; this.m_impulse.y = 0.0; } } else if (jointTransition >= this.m_upperTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; this.m_impulse.y = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse.y = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; } if (this.m_enableMotor == false) { this.m_motorImpulse = 0.0; } if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_motorImpulse *= step.dtRatio; var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x; var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y; var L1 = this.m_impulse.x * this.m_s1 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a1; var L2 = this.m_impulse.x * this.m_s2 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a2; bA.m_linearVelocity.x -= this.m_invMassA * PX; bA.m_linearVelocity.y -= this.m_invMassA * PY; bA.m_angularVelocity -= this.m_invIA * L1; bB.m_linearVelocity.x += this.m_invMassB * PX; bB.m_linearVelocity.y += this.m_invMassB * PY; bB.m_angularVelocity += this.m_invIB * L2; } else { this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var v1 = bA.m_linearVelocity; var w1 = bA.m_angularVelocity; var v2 = bB.m_linearVelocity; var w2 = bB.m_angularVelocity; var PX = 0; var PY = 0; var L1 = 0; var L2 = 0; if (this.m_enableMotor && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); var oldImpulse = this.m_motorImpulse; var maxImpulse = step.dt * this.m_maxMotorForce; this.m_motorImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_motorImpulse - oldImpulse; PX = impulse * this.m_axis.x; PY = impulse * this.m_axis.y; L1 = impulse * this.m_a1; L2 = impulse * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } var Cdot1 = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1; if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var f1 = this.m_impulse.Copy(); var df = this.m_K.Solve(Box2D.Common.Math.b2Vec2.Get(0, 0), (-Cdot1), (-Cdot2)); this.m_impulse.Add(df); if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_impulse.y = Math.max(this.m_impulse.y, 0.0); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_impulse.y = Math.min(this.m_impulse.y, 0.0); } var b = (-Cdot1) - (this.m_impulse.y - f1.y) * this.m_K.col2.x; var f2r = 0; if (this.m_K.col1.x != 0.0) { f2r = b / this.m_K.col1.x + f1.x; } else { f2r = f1.x; } this.m_impulse.x = f2r; df.x = this.m_impulse.x - f1.x; df.y = this.m_impulse.y - f1.y; PX = df.x * this.m_perp.x + df.y * this.m_axis.x; PY = df.x * this.m_perp.y + df.y * this.m_axis.y; L1 = df.x * this.m_s1 + df.y * this.m_a1; L2 = df.x * this.m_s2 + df.y * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } else { var df2 = 0; if (this.m_K.col1.x != 0.0) { df2 = ((-Cdot1)) / this.m_K.col1.x; } else { df2 = 0.0; } this.m_impulse.x += df2; PX = df2 * this.m_perp.x; PY = df2 * this.m_perp.y; L1 = df2 * this.m_s1; L2 = df2 * this.m_s2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } bA.m_linearVelocity.SetV(v1); bA.m_angularVelocity = w1; bB.m_linearVelocity.SetV(v2); bB.m_angularVelocity = w2; }; Box2D.Dynamics.Joints.b2LineJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var limitC = 0; var oldLimitImpulse = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var c1 = bA.m_sweep.c; var a1 = bA.m_sweep.a; var c2 = bB.m_sweep.c; var a2 = bB.m_sweep.a; var tMat; var tX = 0; var m1 = 0; var m2 = 0; var i1 = 0; var i2 = 0; var linearError = 0.0; var angularError = 0.0; var active = false; var C2 = 0.0; var R1 = Box2D.Common.Math.b2Mat22.FromAngle(a1); var R2 = Box2D.Common.Math.b2Mat22.FromAngle(a2); tMat = R1; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = R2; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = c2.x + r2X - c1.x - r1X; var dY = c2.y + r2Y - c1.y - r1Y; if (this.m_enableLimit) { this.m_axis = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localXAxis1); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; var translation = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { C2 = Box2D.Common.Math.b2Math.Clamp(translation, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = Math.abs(translation); active = true; } else if (translation <= this.m_lowerTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_lowerTranslation + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); linearError = this.m_lowerTranslation - translation; active = true; } else if (translation >= this.m_upperTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_upperTranslation + Box2D.Common.b2Settings.b2_linearSlop, 0.0, Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = translation - this.m_upperTranslation; active = true; } } this.m_perp = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localYAxis1); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var impulse = Box2D.Common.Math.b2Vec2.Get(0, 0); var C1 = this.m_perp.x * dX + this.m_perp.y * dY; linearError = Math.max(linearError, Math.abs(C1)); angularError = 0.0; if (active) { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; this.m_K.Solve(impulse, (-C1), (-C2)); } else { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; var impulse1 = 0; if (k11 != 0.0) { impulse1 = ((-C1)) / k11; } else { impulse1 = 0.0; } impulse.x = impulse1; impulse.y = 0.0; } var PX = impulse.x * this.m_perp.x + impulse.y * this.m_axis.x; var PY = impulse.x * this.m_perp.y + impulse.y * this.m_axis.y; var L1 = impulse.x * this.m_s1 + impulse.y * this.m_a1; var L2 = impulse.x * this.m_s2 + impulse.y * this.m_a2; c1.x -= this.m_invMassA * PX; c1.y -= this.m_invMassA * PY; a1 -= this.m_invIA * L1; c2.x += this.m_invMassB * PX; c2.y += this.m_invMassB * PY; a2 += this.m_invIB * L2; bA.m_sweep.a = a1; bB.m_sweep.a = a2; bA.SynchronizeTransform(); bB.SynchronizeTransform(); return linearError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2LineJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAxisA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_lineJoint; this.localAxisA.Set(1.0, 0.0); this.enableLimit = false; this.lowerTranslation = 0.0; this.upperTranslation = 0.0; this.enableMotor = false; this.maxMotorForce = 0.0; this.motorSpeed = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2LineJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2LineJointDef.prototype.Initialize = function(bA, bB, anchor, axis) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.localAxisA = this.bodyA.GetLocalVector(axis); }; Box2D.Dynamics.Joints.b2LineJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2LineJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2PrismaticJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2PrismaticJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localXAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localYAxis1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_axis = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_perp = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_K = new Box2D.Common.Math.b2Mat33(); this.m_impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_localXAxis1.SetV(def.localAxisA); this.m_localYAxis1.x = (-this.m_localXAxis1.y); this.m_localYAxis1.y = this.m_localXAxis1.x; this.m_refAngle = def.referenceAngle; this.m_impulse.SetZero(); this.m_motorMass = 0.0; this.m_motorImpulse = 0.0; this.m_lowerTranslation = def.lowerTranslation; this.m_upperTranslation = def.upperTranslation; this.m_maxMotorForce = def.maxMotorForce; this.m_motorSpeed = def.motorSpeed; this.m_enableLimit = def.enableLimit; this.m_enableMotor = def.enableMotor; this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_axis.SetZero(); this.m_perp.SetZero(); }; c2inherit(Box2D.Dynamics.Joints.b2PrismaticJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y)); }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_impulse.y; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetJointTranslation = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var p1 = bA.GetWorldPoint(this.m_localAnchor1); var p2 = bB.GetWorldPoint(this.m_localAnchor2); var dX = p2.x - p1.x; var dY = p2.y - p1.y; var axis = bA.GetWorldVector(this.m_localXAxis1); var translation = axis.x * dX + axis.y * dY; return translation; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetJointSpeed = function() { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var p1X = bA.m_sweep.c.x + r1X; var p1Y = bA.m_sweep.c.y + r1Y; var p2X = bB.m_sweep.c.x + r2X; var p2Y = bB.m_sweep.c.y + r2Y; var dX = p2X - p1X; var dY = p2Y - p1Y; var axis = bA.GetWorldVector(this.m_localXAxis1); var v1 = bA.m_linearVelocity; var v2 = bB.m_linearVelocity; var w1 = bA.m_angularVelocity; var w2 = bB.m_angularVelocity; var speed = (dX * ((-w1 * axis.y)) + dY * (w1 * axis.x)) + (axis.x * (((v2.x + ((-w2 * r2Y))) - v1.x) - ((-w1 * r1Y))) + axis.y * (((v2.y + (w2 * r2X)) - v1.y) - (w1 * r1X))); return speed; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.EnableLimit = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableLimit = flag; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetLowerLimit = function() { return this.m_lowerTranslation; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetUpperLimit = function() { return this.m_upperTranslation; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SetLimits = function(lower, upper) { if (lower === undefined) lower = 0; if (upper === undefined) upper = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_lowerTranslation = lower; this.m_upperTranslation = upper; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.EnableMotor = function(flag) { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_enableMotor = flag; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SetMotorSpeed = function(speed) { if (speed === undefined) speed = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_motorSpeed = speed; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SetMaxMotorForce = function(force) { if (force === undefined) force = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_maxMotorForce = force; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.GetMotorForce = function() { return this.m_motorImpulse; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; this.m_localCenterA.SetV(bA.GetLocalCenter()); this.m_localCenterB.SetV(bB.GetLocalCenter()); var xf1 = bA.GetTransform(); var xf2 = bB.GetTransform(); tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; var dY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; this.m_invMassA = bA.m_invMass; this.m_invMassB = bB.m_invMass; this.m_invIA = bA.m_invI; this.m_invIB = bB.m_invI; this.m_axis.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localXAxis1)); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2; if (this.m_motorMass > Number.MIN_VALUE) this.m_motorMass = 1.0 / this.m_motorMass; this.m_perp.SetV(Box2D.Common.Math.b2Math.MulMV(xf1.R, this.m_localYAxis1)); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var m1 = this.m_invMassA; var m2 = this.m_invMassB; var i1 = this.m_invIA; var i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2; this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = i1 + i2; this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2; this.m_K.col3.x = this.m_K.col1.z; this.m_K.col3.y = this.m_K.col2.z; this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; if (this.m_enableLimit) { var jointTransition = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_equalLimits; } else if (jointTransition <= this.m_lowerTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit; this.m_impulse.z = 0.0; } } else if (jointTransition >= this.m_upperTranslation) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; this.m_impulse.z = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse.z = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; } if (this.m_enableMotor == false) { this.m_motorImpulse = 0.0; } if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_motorImpulse *= step.dtRatio; var PX = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x; var PY = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y; var L1 = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; var L2 = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; bA.m_linearVelocity.x -= this.m_invMassA * PX; bA.m_linearVelocity.y -= this.m_invMassA * PY; bA.m_angularVelocity -= this.m_invIA * L1; bB.m_linearVelocity.x += this.m_invMassB * PX; bB.m_linearVelocity.y += this.m_invMassB * PY; bB.m_angularVelocity += this.m_invIB * L2; } else { this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var v1 = bA.m_linearVelocity; var w1 = bA.m_angularVelocity; var v2 = bB.m_linearVelocity; var w2 = bB.m_angularVelocity; var PX = 0; var PY = 0; var L1 = 0; var L2 = 0; if (this.m_enableMotor && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { var Cdot = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); var oldImpulse = this.m_motorImpulse; var maxImpulse = step.dt * this.m_maxMotorForce; this.m_motorImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_motorImpulse - oldImpulse; PX = impulse * this.m_axis.x; PY = impulse * this.m_axis.y; L1 = impulse * this.m_a1; L2 = impulse * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } var Cdot1X = this.m_perp.x * (v2.x - v1.x) + this.m_perp.y * (v2.y - v1.y) + this.m_s2 * w2 - this.m_s1 * w1; var Cdot1Y = w2 - w1; if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { var Cdot2 = this.m_axis.x * (v2.x - v1.x) + this.m_axis.y * (v2.y - v1.y) + this.m_a2 * w2 - this.m_a1 * w1; var f1 = this.m_impulse.Copy(); var df = this.m_K.Solve33(new Box2D.Common.Math.b2Vec3(0, 0, 0), (-Cdot1X), (-Cdot1Y), (-Cdot2)); this.m_impulse.Add(df); if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_impulse.z = Math.max(this.m_impulse.z, 0.0); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_impulse.z = Math.min(this.m_impulse.z, 0.0); } var bX = (-Cdot1X) - (this.m_impulse.z - f1.z) * this.m_K.col3.x; var bY = (-Cdot1Y) - (this.m_impulse.z - f1.z) * this.m_K.col3.y; var f2r = this.m_K.Solve22(Box2D.Common.Math.b2Vec2.Get(0, 0), bX, bY); f2r.x += f1.x; f2r.y += f1.y; this.m_impulse.x = f2r.x; this.m_impulse.y = f2r.y; df.x = this.m_impulse.x - f1.x; df.y = this.m_impulse.y - f1.y; df.z = this.m_impulse.z - f1.z; PX = df.x * this.m_perp.x + df.z * this.m_axis.x; PY = df.x * this.m_perp.y + df.z * this.m_axis.y; L1 = df.x * this.m_s1 + df.y + df.z * this.m_a1; L2 = df.x * this.m_s2 + df.y + df.z * this.m_a2; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } else { var df2 = this.m_K.Solve22(Box2D.Common.Math.b2Vec2.Get(0, 0), (-Cdot1X), (-Cdot1Y)); this.m_impulse.x += df2.x; this.m_impulse.y += df2.y; PX = df2.x * this.m_perp.x; PY = df2.x * this.m_perp.y; L1 = df2.x * this.m_s1 + df2.y; L2 = df2.x * this.m_s2 + df2.y; v1.x -= this.m_invMassA * PX; v1.y -= this.m_invMassA * PY; w1 -= this.m_invIA * L1; v2.x += this.m_invMassB * PX; v2.y += this.m_invMassB * PY; w2 += this.m_invIB * L2; } bA.m_linearVelocity.SetV(v1); bA.m_angularVelocity = w1; bB.m_linearVelocity.SetV(v2); bB.m_angularVelocity = w2; }; Box2D.Dynamics.Joints.b2PrismaticJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var limitC = 0; var oldLimitImpulse = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var c1 = bA.m_sweep.c; var a1 = bA.m_sweep.a; var c2 = bB.m_sweep.c; var a2 = bB.m_sweep.a; var tMat; var tX = 0; var m1 = 0; var m2 = 0; var i1 = 0; var i2 = 0; var linearError = 0.0; var angularError = 0.0; var active = false; var C2 = 0.0; var R1 = Box2D.Common.Math.b2Mat22.FromAngle(a1); var R2 = Box2D.Common.Math.b2Mat22.FromAngle(a2); tMat = R1; var r1X = this.m_localAnchor1.x - this.m_localCenterA.x; var r1Y = this.m_localAnchor1.y - this.m_localCenterA.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = R2; var r2X = this.m_localAnchor2.x - this.m_localCenterB.x; var r2Y = this.m_localAnchor2.y - this.m_localCenterB.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var dX = c2.x + r2X - c1.x - r1X; var dY = c2.y + r2Y - c1.y - r1Y; if (this.m_enableLimit) { this.m_axis = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localXAxis1); this.m_a1 = (dX + r1X) * this.m_axis.y - (dY + r1Y) * this.m_axis.x; this.m_a2 = r2X * this.m_axis.y - r2Y * this.m_axis.x; var translation = this.m_axis.x * dX + this.m_axis.y * dY; if (Math.abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Box2D.Common.b2Settings.b2_linearSlop) { C2 = Box2D.Common.Math.b2Math.Clamp(translation, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = Math.abs(translation); active = true; } else if (translation <= this.m_lowerTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_lowerTranslation + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); linearError = this.m_lowerTranslation - translation; active = true; } else if (translation >= this.m_upperTranslation) { C2 = Box2D.Common.Math.b2Math.Clamp(translation - this.m_upperTranslation + Box2D.Common.b2Settings.b2_linearSlop, 0.0, Box2D.Common.b2Settings.b2_maxLinearCorrection); linearError = translation - this.m_upperTranslation; active = true; } } this.m_perp = Box2D.Common.Math.b2Math.MulMV(R1, this.m_localYAxis1); this.m_s1 = (dX + r1X) * this.m_perp.y - (dY + r1Y) * this.m_perp.x; this.m_s2 = r2X * this.m_perp.y - r2Y * this.m_perp.x; var impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); var C1X = this.m_perp.x * dX + this.m_perp.y * dY; var C1Y = a2 - a1 - this.m_refAngle; linearError = Math.max(linearError, Math.abs(C1X)); angularError = Math.abs(C1Y); if (active) { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; this.m_K.col1.x = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; this.m_K.col1.y = i1 * this.m_s1 + i2 * this.m_s2; this.m_K.col1.z = i1 * this.m_s1 * this.m_a1 + i2 * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = i1 + i2; this.m_K.col2.z = i1 * this.m_a1 + i2 * this.m_a2; this.m_K.col3.x = this.m_K.col1.z; this.m_K.col3.y = this.m_K.col2.z; this.m_K.col3.z = m1 + m2 + i1 * this.m_a1 * this.m_a1 + i2 * this.m_a2 * this.m_a2; this.m_K.Solve33(impulse, (-C1X), (-C1Y), (-C2)); } else { m1 = this.m_invMassA; m2 = this.m_invMassB; i1 = this.m_invIA; i2 = this.m_invIB; var k11 = m1 + m2 + i1 * this.m_s1 * this.m_s1 + i2 * this.m_s2 * this.m_s2; var k12 = i1 * this.m_s1 + i2 * this.m_s2; var k22 = i1 + i2; this.m_K.col1.Set(k11, k12, 0.0); this.m_K.col2.Set(k12, k22, 0.0); var impulse1 = this.m_K.Solve22(Box2D.Common.Math.b2Vec2.Get(0, 0), (-C1X), (-C1Y)); impulse.x = impulse1.x; impulse.y = impulse1.y; impulse.z = 0.0; } var PX = impulse.x * this.m_perp.x + impulse.z * this.m_axis.x; var PY = impulse.x * this.m_perp.y + impulse.z * this.m_axis.y; var L1 = impulse.x * this.m_s1 + impulse.y + impulse.z * this.m_a1; var L2 = impulse.x * this.m_s2 + impulse.y + impulse.z * this.m_a2; c1.x -= this.m_invMassA * PX; c1.y -= this.m_invMassA * PY; a1 -= this.m_invIA * L1; c2.x += this.m_invMassB * PX; c2.y += this.m_invMassB * PY; a2 += this.m_invIB * L2; bA.m_sweep.a = a1; bB.m_sweep.a = a2; bA.SynchronizeTransform(); bB.SynchronizeTransform(); return linearError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2PrismaticJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAxisA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint; this.localAxisA.Set(1.0, 0.0); this.referenceAngle = 0.0; this.enableLimit = false; this.lowerTranslation = 0.0; this.upperTranslation = 0.0; this.enableMotor = false; this.maxMotorForce = 0.0; this.motorSpeed = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2PrismaticJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2PrismaticJointDef.prototype.Initialize = function(bA, bB, anchor, axis) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.localAxisA = this.bodyA.GetLocalVector(axis); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2PrismaticJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2PrismaticJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2PulleyJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2PulleyJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_groundAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_groundAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_u1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_u2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_ground = this.m_bodyA.m_world.m_groundBody; this.m_groundAnchor1.x = def.groundAnchorA.x - this.m_ground.m_xf.position.x; this.m_groundAnchor1.y = def.groundAnchorA.y - this.m_ground.m_xf.position.y; this.m_groundAnchor2.x = def.groundAnchorB.x - this.m_ground.m_xf.position.x; this.m_groundAnchor2.y = def.groundAnchorB.y - this.m_ground.m_xf.position.y; this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_ratio = def.ratio; this.m_constant = def.lengthA + this.m_ratio * def.lengthB; this.m_maxLength1 = Math.min(def.maxLengthA, this.m_constant - this.m_ratio * Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength); this.m_maxLength2 = Math.min(def.maxLengthB, (this.m_constant - Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength) / this.m_ratio); this.m_impulse = 0.0; this.m_limitImpulse1 = 0.0; this.m_limitImpulse2 = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2PulleyJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse * this.m_u2.x, inv_dt * this.m_impulse * this.m_u2.y); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return 0.0; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetGroundAnchorA = function() { var a = this.m_ground.m_xf.position.Copy(); a.Add(this.m_groundAnchor1); return a; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetGroundAnchorB = function() { var a = this.m_ground.m_xf.position.Copy(); a.Add(this.m_groundAnchor2); return a; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetLength1 = function() { var p = this.m_bodyA.GetWorldPoint(this.m_localAnchor1); var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x; var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y; var dX = p.x - sX; var dY = p.y - sY; return Math.sqrt(dX * dX + dY * dY); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetLength2 = function() { var p = this.m_bodyB.GetWorldPoint(this.m_localAnchor2); var sX = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x; var sY = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; var dX = p.x - sX; var dY = p.y - sY; return Math.sqrt(dX * dX + dY * dY); }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.GetRatio = function() { return this.m_ratio; }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var p1X = bA.m_sweep.c.x + r1X; var p1Y = bA.m_sweep.c.y + r1Y; var p2X = bB.m_sweep.c.x + r2X; var p2Y = bB.m_sweep.c.y + r2Y; var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x; var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y; var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x; var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; this.m_u1.Set(p1X - s1X, p1Y - s1Y); this.m_u2.Set(p2X - s2X, p2Y - s2Y); var length1 = this.m_u1.Length(); var length2 = this.m_u2.Length(); if (length1 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u1.Multiply(1.0 / length1); } else { this.m_u1.SetZero(); } if (length2 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u2.Multiply(1.0 / length2); } else { this.m_u2.SetZero(); } var C = this.m_constant - length1 - this.m_ratio * length2; if (C > 0.0) { this.m_state = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse = 0.0; } else { this.m_state = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } if (length1 < this.m_maxLength1) { this.m_limitState1 = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_limitImpulse1 = 0.0; } else { this.m_limitState1 = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } if (length2 < this.m_maxLength2) { this.m_limitState2 = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_limitImpulse2 = 0.0; } else { this.m_limitState2 = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } var cr1u1 = r1X * this.m_u1.y - r1Y * this.m_u1.x; var cr2u2 = r2X * this.m_u2.y - r2Y * this.m_u2.x; this.m_limitMass1 = bA.m_invMass + bA.m_invI * cr1u1 * cr1u1; this.m_limitMass2 = bB.m_invMass + bB.m_invI * cr2u2 * cr2u2; this.m_pulleyMass = this.m_limitMass1 + this.m_ratio * this.m_ratio * this.m_limitMass2; this.m_limitMass1 = 1.0 / this.m_limitMass1; this.m_limitMass2 = 1.0 / this.m_limitMass2; this.m_pulleyMass = 1.0 / this.m_pulleyMass; if (step.warmStarting) { this.m_impulse *= step.dtRatio; this.m_limitImpulse1 *= step.dtRatio; this.m_limitImpulse2 *= step.dtRatio; var P1X = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.x; var P1Y = ((-this.m_impulse) - this.m_limitImpulse1) * this.m_u1.y; var P2X = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.x; var P2Y = ((-this.m_ratio * this.m_impulse) - this.m_limitImpulse2) * this.m_u2.y; bA.m_linearVelocity.x += bA.m_invMass * P1X; bA.m_linearVelocity.y += bA.m_invMass * P1Y; bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X); bB.m_linearVelocity.x += bB.m_invMass * P2X; bB.m_linearVelocity.y += bB.m_invMass * P2Y; bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X); } else { this.m_impulse = 0.0; this.m_limitImpulse1 = 0.0; this.m_limitImpulse2 = 0.0; } }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; var tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var v1X = 0; var v1Y = 0; var v2X = 0; var v2Y = 0; var P1X = 0; var P1Y = 0; var P2X = 0; var P2Y = 0; var Cdot = 0; var impulse = 0; var oldImpulse = 0; if (this.m_state == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y)); v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X); v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y)); v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X); Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y)) - this.m_ratio * (this.m_u2.x * v2X + this.m_u2.y * v2Y); impulse = this.m_pulleyMass * ((-Cdot)); oldImpulse = this.m_impulse; this.m_impulse = Math.max(0.0, this.m_impulse + impulse); impulse = this.m_impulse - oldImpulse; P1X = (-impulse * this.m_u1.x); P1Y = (-impulse * this.m_u1.y); P2X = (-this.m_ratio * impulse * this.m_u2.x); P2Y = (-this.m_ratio * impulse * this.m_u2.y); bA.m_linearVelocity.x += bA.m_invMass * P1X; bA.m_linearVelocity.y += bA.m_invMass * P1Y; bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X); bB.m_linearVelocity.x += bB.m_invMass * P2X; bB.m_linearVelocity.y += bB.m_invMass * P2Y; bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X); } if (this.m_limitState1 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { v1X = bA.m_linearVelocity.x + ((-bA.m_angularVelocity * r1Y)); v1Y = bA.m_linearVelocity.y + (bA.m_angularVelocity * r1X); Cdot = (-(this.m_u1.x * v1X + this.m_u1.y * v1Y)); impulse = (-this.m_limitMass1 * Cdot); oldImpulse = this.m_limitImpulse1; this.m_limitImpulse1 = Math.max(0.0, this.m_limitImpulse1 + impulse); impulse = this.m_limitImpulse1 - oldImpulse; P1X = (-impulse * this.m_u1.x); P1Y = (-impulse * this.m_u1.y); bA.m_linearVelocity.x += bA.m_invMass * P1X; bA.m_linearVelocity.y += bA.m_invMass * P1Y; bA.m_angularVelocity += bA.m_invI * (r1X * P1Y - r1Y * P1X); } if (this.m_limitState2 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { v2X = bB.m_linearVelocity.x + ((-bB.m_angularVelocity * r2Y)); v2Y = bB.m_linearVelocity.y + (bB.m_angularVelocity * r2X); Cdot = (-(this.m_u2.x * v2X + this.m_u2.y * v2Y)); impulse = (-this.m_limitMass2 * Cdot); oldImpulse = this.m_limitImpulse2; this.m_limitImpulse2 = Math.max(0.0, this.m_limitImpulse2 + impulse); impulse = this.m_limitImpulse2 - oldImpulse; P2X = (-impulse * this.m_u2.x); P2Y = (-impulse * this.m_u2.y); bB.m_linearVelocity.x += bB.m_invMass * P2X; bB.m_linearVelocity.y += bB.m_invMass * P2Y; bB.m_angularVelocity += bB.m_invI * (r2X * P2Y - r2Y * P2X); } }; Box2D.Dynamics.Joints.b2PulleyJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var s1X = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x; var s1Y = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y; var s2X = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x; var s2Y = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; var r1X = 0; var r1Y = 0; var r2X = 0; var r2Y = 0; var p1X = 0; var p1Y = 0; var p2X = 0; var p2Y = 0; var length1 = 0; var length2 = 0; var C = 0; var impulse = 0; var oldImpulse = 0; var oldLimitPositionImpulse = 0; var tX = 0; var linearError = 0.0; if (this.m_state == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; p1X = bA.m_sweep.c.x + r1X; p1Y = bA.m_sweep.c.y + r1Y; p2X = bB.m_sweep.c.x + r2X; p2Y = bB.m_sweep.c.y + r2Y; this.m_u1.Set(p1X - s1X, p1Y - s1Y); this.m_u2.Set(p2X - s2X, p2Y - s2Y); length1 = this.m_u1.Length(); length2 = this.m_u2.Length(); if (length1 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u1.Multiply(1.0 / length1); } else { this.m_u1.SetZero(); } if (length2 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u2.Multiply(1.0 / length2); } else { this.m_u2.SetZero(); } C = this.m_constant - length1 - this.m_ratio * length2; linearError = Math.max(linearError, (-C)); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); impulse = (-this.m_pulleyMass * C); p1X = (-impulse * this.m_u1.x); p1Y = (-impulse * this.m_u1.y); p2X = (-this.m_ratio * impulse * this.m_u2.x); p2Y = (-this.m_ratio * impulse * this.m_u2.y); bA.m_sweep.c.x += bA.m_invMass * p1X; bA.m_sweep.c.y += bA.m_invMass * p1Y; bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X); bB.m_sweep.c.x += bB.m_invMass * p2X; bB.m_sweep.c.y += bB.m_invMass * p2Y; bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X); bA.SynchronizeTransform(); bB.SynchronizeTransform(); } if (this.m_limitState1 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; p1X = bA.m_sweep.c.x + r1X; p1Y = bA.m_sweep.c.y + r1Y; this.m_u1.Set(p1X - s1X, p1Y - s1Y); length1 = this.m_u1.Length(); if (length1 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u1.x *= 1.0 / length1; this.m_u1.y *= 1.0 / length1; } else { this.m_u1.SetZero(); } C = this.m_maxLength1 - length1; linearError = Math.max(linearError, (-C)); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); impulse = (-this.m_limitMass1 * C); p1X = (-impulse * this.m_u1.x); p1Y = (-impulse * this.m_u1.y); bA.m_sweep.c.x += bA.m_invMass * p1X; bA.m_sweep.c.y += bA.m_invMass * p1Y; bA.m_sweep.a += bA.m_invI * (r1X * p1Y - r1Y * p1X); bA.SynchronizeTransform(); } if (this.m_limitState2 == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; p2X = bB.m_sweep.c.x + r2X; p2Y = bB.m_sweep.c.y + r2Y; this.m_u2.Set(p2X - s2X, p2Y - s2Y); length2 = this.m_u2.Length(); if (length2 > Box2D.Common.b2Settings.b2_linearSlop) { this.m_u2.x *= 1.0 / length2; this.m_u2.y *= 1.0 / length2; } else { this.m_u2.SetZero(); } C = this.m_maxLength2 - length2; linearError = Math.max(linearError, (-C)); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_linearSlop, (-Box2D.Common.b2Settings.b2_maxLinearCorrection), 0.0); impulse = (-this.m_limitMass2 * C); p2X = (-impulse * this.m_u2.x); p2Y = (-impulse * this.m_u2.y); bB.m_sweep.c.x += bB.m_invMass * p2X; bB.m_sweep.c.y += bB.m_invMass * p2Y; bB.m_sweep.a += bB.m_invI * (r2X * p2Y - r2Y * p2X); bB.SynchronizeTransform(); } return linearError < Box2D.Common.b2Settings.b2_linearSlop; }; Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength = 1.0; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2PulleyJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.groundAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.groundAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint; this.groundAnchorA.Set((-1.0), 1.0); this.groundAnchorB.Set(1.0, 1.0); this.localAnchorA.Set((-1.0), 0.0); this.localAnchorB.Set(1.0, 0.0); this.lengthA = 0.0; this.maxLengthA = 0.0; this.lengthB = 0.0; this.maxLengthB = 0.0; this.ratio = 1.0; this.collideConnected = true; }; c2inherit(Box2D.Dynamics.Joints.b2PulleyJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2PulleyJointDef.prototype.Initialize = function(bA, bB, gaA, gaB, anchorA, anchorB, r) { if (r === undefined) r = 0; this.bodyA = bA; this.bodyB = bB; this.groundAnchorA.SetV(gaA); this.groundAnchorB.SetV(gaB); this.localAnchorA = this.bodyA.GetLocalPoint(anchorA); this.localAnchorB = this.bodyB.GetLocalPoint(anchorB); var d1X = anchorA.x - gaA.x; var d1Y = anchorA.y - gaA.y; this.lengthA = Math.sqrt(d1X * d1X + d1Y * d1Y); var d2X = anchorB.x - gaB.x; var d2Y = anchorB.y - gaB.y; this.lengthB = Math.sqrt(d2X * d2X + d2Y * d2Y); this.ratio = r; var C = this.lengthA + this.ratio * this.lengthB; this.maxLengthA = C - this.ratio * Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength; this.maxLengthB = (C - Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength) / this.ratio; }; Box2D.Dynamics.Joints.b2PulleyJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2PulleyJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2RevoluteJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2RevoluteJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.K = new Box2D.Common.Math.b2Mat22(); this.K1 = new Box2D.Common.Math.b2Mat22(); this.K2 = new Box2D.Common.Math.b2Mat22(); this.K3 = new Box2D.Common.Math.b2Mat22(); this.impulse3 = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.impulse2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.reduced = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor1 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchor2 = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass = new Box2D.Common.Math.b2Mat33(); this.m_localAnchor1.SetV(def.localAnchorA); this.m_localAnchor2.SetV(def.localAnchorB); this.m_referenceAngle = def.referenceAngle; this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; this.m_lowerAngle = def.lowerAngle; this.m_upperAngle = def.upperAngle; this.m_maxMotorTorque = def.maxMotorTorque; this.m_motorSpeed = def.motorSpeed; this.m_enableLimit = def.enableLimit; this.m_enableMotor = def.enableMotor; this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; }; c2inherit(Box2D.Dynamics.Joints.b2RevoluteJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1); }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2); }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetReactionForce = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y); }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetReactionTorque = function(inv_dt) { if (inv_dt === undefined) inv_dt = 0; return inv_dt * this.m_impulse.z; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetJointAngle = function() { return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetJointSpeed = function() { return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.EnableLimit = function(flag) { this.m_enableLimit = flag; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetLowerLimit = function() { return this.m_lowerAngle; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetUpperLimit = function() { return this.m_upperAngle; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SetLimits = function(lower, upper) { if (lower === undefined) lower = 0; if (upper === undefined) upper = 0; this.m_lowerAngle = lower; this.m_upperAngle = upper; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.IsMotorEnabled = function() { this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); return this.m_enableMotor; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.EnableMotor = function(flag) { this.m_enableMotor = flag; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SetMotorSpeed = function(speed) { if (speed === undefined) speed = 0; this.m_bodyA.SetAwake(true); this.m_bodyB.SetAwake(true); this.m_motorSpeed = speed; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SetMaxMotorTorque = function(torque) { if (torque === undefined) torque = 0; this.m_maxMotorTorque = torque; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.GetMotorTorque = function() { return this.m_maxMotorTorque; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.InitVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var m1 = bA.m_invMass; var m2 = bB.m_invMass; var i1 = bA.m_invI; var i2 = bB.m_invI; this.m_mass.col1.x = m1 + m2 + r1Y * r1Y * i1 + r2Y * r2Y * i2; this.m_mass.col2.x = (-r1Y * r1X * i1) - r2Y * r2X * i2; this.m_mass.col3.x = (-r1Y * i1) - r2Y * i2; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = m1 + m2 + r1X * r1X * i1 + r2X * r2X * i2; this.m_mass.col3.y = r1X * i1 + r2X * i2; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = i1 + i2; this.m_motorMass = 1.0 / (i1 + i2); if (!this.m_enableMotor) { this.m_motorImpulse = 0.0; } if (this.m_enableLimit) { var jointAngle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; if (Math.abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Box2D.Common.b2Settings.b2_angularSlop) { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_equalLimits; } else if (jointAngle <= this.m_lowerAngle) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { this.m_impulse.z = 0.0; } this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit; } else if (jointAngle >= this.m_upperAngle) { if (this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { this.m_impulse.z = 0.0; } this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit; } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; this.m_impulse.z = 0.0; } } else { this.m_limitState = Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit; } if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_motorImpulse *= step.dtRatio; var PX = this.m_impulse.x; var PY = this.m_impulse.y; bA.m_linearVelocity.x -= m1 * PX; bA.m_linearVelocity.y -= m1 * PY; bA.m_angularVelocity -= i1 * ((r1X * PY - r1Y * PX) + this.m_motorImpulse + this.m_impulse.z); bB.m_linearVelocity.x += m2 * PX; bB.m_linearVelocity.y += m2 * PY; bB.m_angularVelocity += i2 * ((r2X * PY - r2Y * PX) + this.m_motorImpulse + this.m_impulse.z); } else { this.m_impulse.SetZero(); this.m_motorImpulse = 0.0; } }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SolveVelocityConstraints = function(step) { var bA = this.m_bodyA; var bB = this.m_bodyB; var tMat; var tX = 0; var newImpulse = 0; var r1X = 0; var r1Y = 0; var r2X = 0; var r2Y = 0; var v1 = bA.m_linearVelocity; var w1 = bA.m_angularVelocity; var v2 = bB.m_linearVelocity; var w2 = bB.m_angularVelocity; var m1 = bA.m_invMass; var m2 = bB.m_invMass; var i1 = bA.m_invI; var i2 = bB.m_invI; if (this.m_enableMotor && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { var Cdot = w2 - w1 - this.m_motorSpeed; var impulse = this.m_motorMass * ((-Cdot)); var oldImpulse = this.m_motorImpulse; var maxImpulse = step.dt * this.m_maxMotorTorque; this.m_motorImpulse = Box2D.Common.Math.b2Math.Clamp(this.m_motorImpulse + impulse, (-maxImpulse), maxImpulse); impulse = this.m_motorImpulse - oldImpulse; w1 -= i1 * impulse; w2 += i2 * impulse; } if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var Cdot1X = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y)); var Cdot1Y = v2.y + (w2 * r2X) - v1.y - (w1 * r1X); var Cdot2 = w2 - w1; this.m_mass.Solve33(this.impulse3, (-Cdot1X), (-Cdot1Y), (-Cdot2)); if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { this.m_impulse.Add(this.impulse3); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { newImpulse = this.m_impulse.z + this.impulse3.z; if (newImpulse < 0.0) { this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y)); this.impulse3.x = this.reduced.x; this.impulse3.y = this.reduced.y; this.impulse3.z = (-this.m_impulse.z); this.m_impulse.x += this.reduced.x; this.m_impulse.y += this.reduced.y; this.m_impulse.z = 0.0; } } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { newImpulse = this.m_impulse.z + this.impulse3.z; if (newImpulse > 0.0) { this.m_mass.Solve22(this.reduced, (-Cdot1X), (-Cdot1Y)); this.impulse3.x = this.reduced.x; this.impulse3.y = this.reduced.y; this.impulse3.z = (-this.m_impulse.z); this.m_impulse.x += this.reduced.x; this.m_impulse.y += this.reduced.y; this.m_impulse.z = 0.0; } } v1.x -= m1 * this.impulse3.x; v1.y -= m1 * this.impulse3.y; w1 -= i1 * (r1X * this.impulse3.y - r1Y * this.impulse3.x + this.impulse3.z); v2.x += m2 * this.impulse3.x; v2.y += m2 * this.impulse3.y; w2 += i2 * (r2X * this.impulse3.y - r2Y * this.impulse3.x + this.impulse3.z); } else { tMat = bA.m_xf.R; r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var CdotX = v2.x + ((-w2 * r2Y)) - v1.x - ((-w1 * r1Y)); var CdotY = v2.y + (w2 * r2X) - v1.y - (w1 * r1X); this.m_mass.Solve22(this.impulse2, (-CdotX), (-CdotY)); this.m_impulse.x += this.impulse2.x; this.m_impulse.y += this.impulse2.y; v1.x -= m1 * this.impulse2.x; v1.y -= m1 * this.impulse2.y; w1 -= i1 * (r1X * this.impulse2.y - r1Y * this.impulse2.x); v2.x += m2 * this.impulse2.x; v2.y += m2 * this.impulse2.y; w2 += i2 * (r2X * this.impulse2.y - r2Y * this.impulse2.x); } bA.m_linearVelocity.SetV(v1); bA.m_angularVelocity = w1; bB.m_linearVelocity.SetV(v2); bB.m_angularVelocity = w2; }; Box2D.Dynamics.Joints.b2RevoluteJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var oldLimitImpulse = 0; var C = 0; var tMat; var bA = this.m_bodyA; var bB = this.m_bodyB; var angularError = 0.0; var positionError = 0.0; var tX = 0; var impulseX = 0; var impulseY = 0; if (this.m_enableLimit && this.m_limitState != Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit) { var angle = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; var limitImpulse = 0.0; if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_equalLimits) { C = Box2D.Common.Math.b2Math.Clamp(angle - this.m_lowerAngle, (-Box2D.Common.b2Settings.b2_maxAngularCorrection), Box2D.Common.b2Settings.b2_maxAngularCorrection); limitImpulse = (-this.m_motorMass * C); angularError = Math.abs(C); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit) { C = angle - this.m_lowerAngle; angularError = (-C); C = Box2D.Common.Math.b2Math.Clamp(C + Box2D.Common.b2Settings.b2_angularSlop, (-Box2D.Common.b2Settings.b2_maxAngularCorrection), 0.0); limitImpulse = (-this.m_motorMass * C); } else if (this.m_limitState == Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit) { C = angle - this.m_upperAngle; angularError = C; C = Box2D.Common.Math.b2Math.Clamp(C - Box2D.Common.b2Settings.b2_angularSlop, 0.0, Box2D.Common.b2Settings.b2_maxAngularCorrection); limitImpulse = (-this.m_motorMass * C); } bA.m_sweep.a -= bA.m_invI * limitImpulse; bB.m_sweep.a += bB.m_invI * limitImpulse; bA.SynchronizeTransform(); bB.SynchronizeTransform(); } tMat = bA.m_xf.R; var r1X = this.m_localAnchor1.x - bA.m_sweep.localCenter.x; var r1Y = this.m_localAnchor1.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * r1X + tMat.col2.x * r1Y); r1Y = (tMat.col1.y * r1X + tMat.col2.y * r1Y); r1X = tX; tMat = bB.m_xf.R; var r2X = this.m_localAnchor2.x - bB.m_sweep.localCenter.x; var r2Y = this.m_localAnchor2.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * r2X + tMat.col2.x * r2Y); r2Y = (tMat.col1.y * r2X + tMat.col2.y * r2Y); r2X = tX; var CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; var CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; var CLengthSquared = CX * CX + CY * CY; var CLength = Math.sqrt(CLengthSquared); positionError = CLength; var invMass1 = bA.m_invMass; var invMass2 = bB.m_invMass; var invI1 = bA.m_invI; var invI2 = bB.m_invI; var k_allowedStretch = 10.0 * Box2D.Common.b2Settings.b2_linearSlop; if (CLengthSquared > k_allowedStretch * k_allowedStretch) { var uX = CX / CLength; var uY = CY / CLength; var k = invMass1 + invMass2; var m = 1.0 / k; impulseX = m * ((-CX)); impulseY = m * ((-CY)); var k_beta = 0.5; bA.m_sweep.c.x -= k_beta * invMass1 * impulseX; bA.m_sweep.c.y -= k_beta * invMass1 * impulseY; bB.m_sweep.c.x += k_beta * invMass2 * impulseX; bB.m_sweep.c.y += k_beta * invMass2 * impulseY; CX = bB.m_sweep.c.x + r2X - bA.m_sweep.c.x - r1X; CY = bB.m_sweep.c.y + r2Y - bA.m_sweep.c.y - r1Y; } this.K1.col1.x = invMass1 + invMass2; this.K1.col2.x = 0.0; this.K1.col1.y = 0.0; this.K1.col2.y = invMass1 + invMass2; this.K2.col1.x = invI1 * r1Y * r1Y; this.K2.col2.x = (-invI1 * r1X * r1Y); this.K2.col1.y = (-invI1 * r1X * r1Y); this.K2.col2.y = invI1 * r1X * r1X; this.K3.col1.x = invI2 * r2Y * r2Y; this.K3.col2.x = (-invI2 * r2X * r2Y); this.K3.col1.y = (-invI2 * r2X * r2Y); this.K3.col2.y = invI2 * r2X * r2X; this.K.SetM(this.K1); this.K.AddM(this.K2); this.K.AddM(this.K3); this.K.Solve(Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse, (-CX), (-CY)); impulseX = Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse.x; impulseY = Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse.y; bA.m_sweep.c.x -= bA.m_invMass * impulseX; bA.m_sweep.c.y -= bA.m_invMass * impulseY; bA.m_sweep.a -= bA.m_invI * (r1X * impulseY - r1Y * impulseX); bB.m_sweep.c.x += bB.m_invMass * impulseX; bB.m_sweep.c.y += bB.m_invMass * impulseY; bB.m_sweep.a += bB.m_invI * (r2X * impulseY - r2Y * impulseX); bA.SynchronizeTransform(); bB.SynchronizeTransform(); return positionError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse = Box2D.Common.Math.b2Vec2.Get(0, 0); /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2RevoluteJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint; this.localAnchorA.SetZero(); this.localAnchorB.SetZero(); this.referenceAngle = 0.0; this.lowerAngle = 0.0; this.upperAngle = 0.0; this.maxMotorTorque = 0.0; this.motorSpeed = 0.0; this.enableLimit = false; this.enableMotor = false; }; c2inherit(Box2D.Dynamics.Joints.b2RevoluteJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2RevoluteJointDef.prototype.Initialize = function(bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA = this.bodyA.GetLocalPoint(anchor); this.localAnchorB = this.bodyB.GetLocalPoint(anchor); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2RevoluteJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2RevoluteJoint(this); }; /** * @param {!Box2D.Dynamics.Joints.b2WeldJointDef} def * @constructor * @extends {Box2D.Dynamics.Joints.b2Joint} */ Box2D.Dynamics.Joints.b2WeldJoint = function(def) { Box2D.Dynamics.Joints.b2Joint.call(this, def); this.m_localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.m_impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass = new Box2D.Common.Math.b2Mat33(); this.m_localAnchorA.SetV(def.localAnchorA); this.m_localAnchorB.SetV(def.localAnchorB); this.m_referenceAngle = def.referenceAngle; }; c2inherit(Box2D.Dynamics.Joints.b2WeldJoint, Box2D.Dynamics.Joints.b2Joint); Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA); }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB); }; /** * @param {number} inv_dt * @return {!Box2D.Common.Math.b2Vec2} */ Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetReactionForce = function(inv_dt) { return Box2D.Common.Math.b2Vec2.Get(inv_dt * this.m_impulse.x, inv_dt * this.m_impulse.y); }; /** * @param {number} inv_dt * @return {number} */ Box2D.Dynamics.Joints.b2WeldJoint.prototype.GetReactionTorque = function(inv_dt) { return inv_dt * this.m_impulse.z; }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.InitVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB; this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB; this.m_mass.col3.x = (-rAY * iA) - rBY * iB; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB; this.m_mass.col3.y = rAX * iA + rBX * iB; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = iA + iB; if (step.warmStarting) { this.m_impulse.x *= step.dtRatio; this.m_impulse.y *= step.dtRatio; this.m_impulse.z *= step.dtRatio; bA.m_linearVelocity.x -= mA * this.m_impulse.x; bA.m_linearVelocity.y -= mA * this.m_impulse.y; bA.m_angularVelocity -= iA * (rAX * this.m_impulse.y - rAY * this.m_impulse.x + this.m_impulse.z); bB.m_linearVelocity.x += mB * this.m_impulse.x; bB.m_linearVelocity.y += mB * this.m_impulse.y; bB.m_angularVelocity += iB * (rBX * this.m_impulse.y - rBY * this.m_impulse.x + this.m_impulse.z); } else { this.m_impulse.SetZero(); } }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.SolveVelocityConstraints = function(step) { var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; var vA = bA.m_linearVelocity; var wA = bA.m_angularVelocity; var vB = bB.m_linearVelocity; var wB = bB.m_angularVelocity; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var Cdot1X = vB.x - wB * rBY - vA.x + wA * rAY; var Cdot1Y = vB.y + wB * rBX - vA.y - wA * rAX; var Cdot2 = wB - wA; var impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass.Solve33(impulse, (-Cdot1X), (-Cdot1Y), (-Cdot2)); this.m_impulse.Add(impulse); vA.x -= mA * impulse.x; vA.y -= mA * impulse.y; wA -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z); vB.x += mB * impulse.x; vB.y += mB * impulse.y; wB += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z); bA.m_angularVelocity = wA; bB.m_angularVelocity = wB; }; Box2D.Dynamics.Joints.b2WeldJoint.prototype.SolvePositionConstraints = function(baumgarte) { if (baumgarte === undefined) baumgarte = 0; var tMat; var tX = 0; var bA = this.m_bodyA; var bB = this.m_bodyB; tMat = bA.m_xf.R; var rAX = this.m_localAnchorA.x - bA.m_sweep.localCenter.x; var rAY = this.m_localAnchorA.y - bA.m_sweep.localCenter.y; tX = (tMat.col1.x * rAX + tMat.col2.x * rAY); rAY = (tMat.col1.y * rAX + tMat.col2.y * rAY); rAX = tX; tMat = bB.m_xf.R; var rBX = this.m_localAnchorB.x - bB.m_sweep.localCenter.x; var rBY = this.m_localAnchorB.y - bB.m_sweep.localCenter.y; tX = (tMat.col1.x * rBX + tMat.col2.x * rBY); rBY = (tMat.col1.y * rBX + tMat.col2.y * rBY); rBX = tX; var mA = bA.m_invMass; var mB = bB.m_invMass; var iA = bA.m_invI; var iB = bB.m_invI; var C1X = bB.m_sweep.c.x + rBX - bA.m_sweep.c.x - rAX; var C1Y = bB.m_sweep.c.y + rBY - bA.m_sweep.c.y - rAY; var C2 = bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; var k_allowedStretch = 10.0 * Box2D.Common.b2Settings.b2_linearSlop; var positionError = Math.sqrt(C1X * C1X + C1Y * C1Y); var angularError = Math.abs(C2); if (positionError > k_allowedStretch) { iA *= 1.0; iB *= 1.0; } this.m_mass.col1.x = mA + mB + rAY * rAY * iA + rBY * rBY * iB; this.m_mass.col2.x = (-rAY * rAX * iA) - rBY * rBX * iB; this.m_mass.col3.x = (-rAY * iA) - rBY * iB; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = mA + mB + rAX * rAX * iA + rBX * rBX * iB; this.m_mass.col3.y = rAX * iA + rBX * iB; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = iA + iB; var impulse = new Box2D.Common.Math.b2Vec3(0, 0, 0); this.m_mass.Solve33(impulse, (-C1X), (-C1Y), (-C2)); bA.m_sweep.c.x -= mA * impulse.x; bA.m_sweep.c.y -= mA * impulse.y; bA.m_sweep.a -= iA * (rAX * impulse.y - rAY * impulse.x + impulse.z); bB.m_sweep.c.x += mB * impulse.x; bB.m_sweep.c.y += mB * impulse.y; bB.m_sweep.a += iB * (rBX * impulse.y - rBY * impulse.x + impulse.z); bA.SynchronizeTransform(); bB.SynchronizeTransform(); return positionError <= Box2D.Common.b2Settings.b2_linearSlop && angularError <= Box2D.Common.b2Settings.b2_angularSlop; }; /** * @constructor * @extends {Box2D.Dynamics.Joints.b2JointDef} */ Box2D.Dynamics.Joints.b2WeldJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.call(this); this.localAnchorA = Box2D.Common.Math.b2Vec2.Get(0, 0); this.localAnchorB = Box2D.Common.Math.b2Vec2.Get(0, 0); this.type = Box2D.Dynamics.Joints.b2Joint.e_weldJoint; this.referenceAngle = 0.0; }; c2inherit(Box2D.Dynamics.Joints.b2WeldJointDef, Box2D.Dynamics.Joints.b2JointDef); Box2D.Dynamics.Joints.b2WeldJointDef.prototype.Initialize = function(bA, bB, anchor) { this.bodyA = bA; this.bodyB = bB; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(anchor)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(anchor)); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); }; Box2D.Dynamics.Joints.b2WeldJointDef.prototype.Create = function() { return new Box2D.Dynamics.Joints.b2WeldJoint(this); }; Box2D.Collision.b2Collision.s_incidentEdge = Box2D.Collision.b2Collision.MakeClipPointVector(); Box2D.Collision.b2Collision.s_clipPoints1 = Box2D.Collision.b2Collision.MakeClipPointVector(); Box2D.Collision.b2Collision.s_clipPoints2 = Box2D.Collision.b2Collision.MakeClipPointVector(); Box2D.Collision.b2Collision.s_localTangent = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_localNormal = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_planePoint = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_normal = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_tangent = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_tangent2 = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_v11 = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2Collision.s_v12 = Box2D.Common.Math.b2Vec2.Get(0, 0); Box2D.Collision.b2TimeOfImpact.b2_toiCalls = 0; Box2D.Collision.b2TimeOfImpact.b2_toiIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiRootIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = 0; Box2D.Collision.b2TimeOfImpact.s_cache = new Box2D.Collision.b2SimplexCache(); Box2D.Collision.b2TimeOfImpact.s_distanceInput = new Box2D.Collision.b2DistanceInput(); Box2D.Collision.b2TimeOfImpact.s_xfA = new Box2D.Common.Math.b2Transform(); Box2D.Collision.b2TimeOfImpact.s_xfB = new Box2D.Common.Math.b2Transform(); Box2D.Collision.b2TimeOfImpact.s_fcn = new Box2D.Collision.b2SeparationFunction(); Box2D.Collision.b2TimeOfImpact.s_distanceOutput = new Box2D.Collision.b2DistanceOutput(); /** @type {!Box2D.Common.Math.b2Transform} */ Box2D.Dynamics.b2Body.s_xf1 = new Box2D.Common.Math.b2Transform(); Box2D.Dynamics.b2ContactListener.b2_defaultListener = new Box2D.Dynamics.b2ContactListener(); Box2D.Dynamics.b2ContactManager.s_evalCP = new Box2D.Collision.b2ContactPoint(); /** @type {!Box2D.Common.Math.b2Transform} */ Box2D.Dynamics.b2World.s_xf = new Box2D.Common.Math.b2Transform(); /** @type {!Box2D.Common.Math.b2Sweep} */ Box2D.Dynamics.b2World.s_backupA = new Box2D.Common.Math.b2Sweep(); /** @type {!Box2D.Common.Math.b2Sweep} */ Box2D.Dynamics.b2World.s_backupB = new Box2D.Common.Math.b2Sweep(); Box2D.Dynamics.Contacts.b2Contact.s_input = new Box2D.Collision.b2TOIInput(); Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold = new Box2D.Collision.b2WorldManifold(); Box2D.Dynamics.Contacts.b2ContactSolver.s_psm = new Box2D.Dynamics.Contacts.b2PositionSolverManifold(); } /* * Convex Separator for Box2D Flash * * This class has been written by Antoan Angelov. * It is designed to work with Erin Catto's Box2D physics library. * * Everybody can use this software for any purpose, under two restrictions: * 1. You cannot claim that you wrote this software. * 2. You can not remove or alter this notice. * */ cr.b2Separator = function() {}; cr.b2Separator.det = function(x1, y1, x2, y2, x3, y3) { return x1*y2 + x2*y3 + x3*y1 - y1*x2 - y2*x3 - y3*x1; }; cr.b2Separator.hitRay = function(x1, y1, x2, y2, x3, y3, x4, y4) { var t1 = x3-x1, t2 = y3-y1, t3 = x2-x1, t4 = y2-y1, t5 = x4-x3, t6 = y4-y3, t7 = t4*t5 - t3*t6; var a = (t5*t2 - t6*t1) / t7; var px = x1 + a*t3, py = y1 + a*t4; var b1 = cr.b2Separator.isOnSegment(x2, y2, x1, y1, px, py); var b2 = cr.b2Separator.isOnSegment(px, py, x3, y3, x4, y4); if (b1 && b2) return Box2D.Common.Math.b2Vec2.Get(px, py); else return null; }; cr.b2Separator.isOnSegment = function(px, py, x1, y1, x2, y2) { var b1 = (x1+0.1 >= px && px >= x2-0.1) || (x1-0.1 <= px && px <= x2+0.1); var b2 = (y1+0.1 >= py && py >= y2-0.1) || (y1-0.1 <= py && py <= y2+0.1); return (b1 && b2) && cr.b2Separator.isOnLine(px, py, x1, y1, x2, y2); }; cr.b2Separator.isOnLine = function(px, py, x1, y1, x2, y2) { if (Math.abs(x2-x1) > 0.1) { var a = (y2-y1) / (x2-x1); var possibleY = a * (px-x1)+y1; var diff = Math.abs(possibleY-py); return diff < 0.1; } return Math.abs(px-x1) < 0.1; }; cr.b2Separator.pointsMatch = function(x1, y1, x2, y2) { return Math.abs(x2-x1) < 0.1 && Math.abs(y2-y1) < 0.1; }; cr.b2Separator.Separate = function(verticesVec /*array of b2Vec2*/, objarea) { var b2Vec2 = Box2D.Common.Math.b2Vec2; var calced = cr.b2Separator.calcShapes(verticesVec); var ret = []; var poly, a, b, c; var i, len, j, lenj; var areasum; for (i = 0, len = calced.length; i < len; i++) { a = calced[i]; poly = []; poly.length = a.length; areasum = 0; for (j = 0, lenj = a.length; j < lenj; j++) { b = a[j]; c = a[(j + 1) % lenj]; areasum += (b.x * c.y - b.y * c.x); poly[j] = b2Vec2.Get(b.x, b.y); } areasum = Math.abs(areasum / 2); if (areasum >= objarea * 0.001) ret.push(poly); } ; return ret; }; cr.b2Separator.calcShapes = function(verticesVec /*array of b2Vec2*/) { var vec = []; // array of b2Vec2 var i = 0, n = 0, j = 0; // ints var d = 0, t = 0, dx = 0, dy = 0, minLen = 0; // numbers var i1 = 0, i2 = 0, i3 = 0; // ints var p1, p2, p3, v1, v2, v, hitV; // b2Vec2s var j1 = 0, j2 = 0, k = 0, h = 0; // ints var vec1 = [], vec2 = []; // array of b2Vec2 var isConvex = false; // boolean var figsVec = [], queue = []; // Arrays queue.push(verticesVec); while (queue.length) { vec = queue[0]; n = vec.length; isConvex = true; for (i = 0; i < n; i++) { i1 = i; i2 = (i < n-1) ? i+1 : i+1-n; i3 = (i < n-2) ? i+2 : i+2-n; p1 = vec[i1]; p2 = vec[i2]; p3 = vec[i3]; d = cr.b2Separator.det(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y); if (d < 0) { isConvex = false; minLen = 1e9; for (j = 0; j < n; j++) { if ((j !== i1) && (j !== i2)) { j1 = j; j2 = (j<n - 1) ? j+1 : 0; v1 = vec[j1]; v2 = vec[j2]; v = cr.b2Separator.hitRay(p1.x, p1.y, p2.x, p2.y, v1.x, v1.y, v2.x, v2.y); if (v) { dx = p2.x - v.x; dy = p2.y - v.y; t = dx*dx + dy*dy; if (t < minLen) { h = j1; k = j2; hitV = v; minLen = t; } } } } if (minLen === 1e9) return []; vec1 = []; vec2 = []; j1 = h; j2 = k; v1 = vec[j1]; v2 = vec[j2]; if (!cr.b2Separator.pointsMatch(hitV.x, hitV.y, v2.x, v2.y)) vec1.push(hitV); if (!cr.b2Separator.pointsMatch(hitV.x, hitV.y, v1.x, v1.y)) vec2.push(hitV); h = -1; k = i1; while (true) { if (k !== j2) vec1.push(vec[k]); else { if (h < 0 || h >= n) return []; if (!cr.b2Separator.isOnSegment(v2.x, v2.y, vec[h].x, vec[h].y, p1.x, p1.y)) vec1.push(vec[k]); break; } h = k; if (k-1 < 0) k = n-1; else k--; } vec1.reverse(); h = -1; k = i2; while (true) { if (k !== j1) vec2.push(vec[k]); else { if (h < 0 || h >= n) return []; if (k === j1 && !cr.b2Separator.isOnSegment(v1.x, v1.y, vec[h].x, vec[h].y, p2.x, p2.y)) vec2.push(vec[k]); break; } h = k; if (k+1 > n-1) k = 0; else k++; } queue.push(vec1, vec2); queue.shift(); break; } } if (isConvex) figsVec.push(queue.shift()); } return figsVec; }; ; ; cr.behaviors.Physics = function(runtime) { for (var i = 0; i < 4000; i++) Box2D.Common.Math.b2Vec2._freeCache.push(new Box2D.Common.Math.b2Vec2(0, 0)); this.runtime = runtime; this.world = new Box2D.Dynamics.b2World( Box2D.Common.Math.b2Vec2.Get(0, 10), // gravity true); // allow sleep this.worldG = 10; this.lastUpdateTick = -1; var listener = new Box2D.Dynamics.b2ContactListener; listener.behavior = this; listener.BeginContact = function(contact) { var behA = contact.m_fixtureA.GetBody().c2userdata; var behB = contact.m_fixtureB.GetBody().c2userdata; this.behavior.runtime.registerCollision(behA.inst, behB.inst); }; this.world.SetContactListener(listener); var filter = new Box2D.Dynamics.b2ContactFilter; filter.behavior = this; filter.ShouldCollide = function (fixtureA, fixtureB) { if (this.behavior.allCollisionsEnabled) return true; var typeA = fixtureA.GetBody().c2userdata.inst.type; var typeB = fixtureB.GetBody().c2userdata.inst.type; var s = typeA.extra.Physics_DisabledCollisions; if (s && s.contains(typeB)) return false; s = typeB.extra.Physics_DisabledCollisions; if (s && s.contains(typeA)) return false; return true; }; this.world.SetContactFilter(filter); this.steppingMode = 0; // fixed this.velocityIterations = 8; this.positionIterations = 3; this.allCollisionsEnabled = true; }; (function () { var b2Vec2 = Box2D.Common.Math.b2Vec2, b2BodyDef = Box2D.Dynamics.b2BodyDef, b2Body = Box2D.Dynamics.b2Body, b2FixtureDef = Box2D.Dynamics.b2FixtureDef, b2Fixture = Box2D.Dynamics.b2Fixture, b2World = Box2D.Dynamics.b2World, b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape, b2CircleShape = Box2D.Collision.Shapes.b2CircleShape, b2DistanceJointDef = Box2D.Dynamics.Joints.b2DistanceJointDef, b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef, b2Transform = Box2D.Common.Math.b2Transform, b2Mat22 = Box2D.Common.Math.b2Mat22; var TILE_FLIPPED_HORIZONTAL = -0x80000000 // note: pretend is a signed int, so negate var TILE_FLIPPED_VERTICAL = 0x40000000 var TILE_FLIPPED_DIAGONAL = 0x20000000 var TILE_FLAGS_MASK = 0xE0000000 var worldScale = 0.02; var behaviorProto = cr.behaviors.Physics.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; this.world = this.behavior.world; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.immovable = (this.properties[0] !== 0); this.collisionmask = this.properties[1]; this.preventRotation = (this.properties[2] !== 0); this.density = this.properties[3]; this.friction = this.properties[4]; this.restitution = this.properties[5]; this.linearDamping = this.properties[6]; this.angularDamping = this.properties[7]; this.bullet = (this.properties[8] !== 0); this.enabled = (this.properties[9] !== 0); this.body = null; this.inst.update_bbox(); this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; this.lastKnownAngle = this.inst.angle; this.lastWidth = 0; this.lastHeight = 0; this.lastTickOverride = false; this.recreateBody = false; this.lastAnimation = null; // for sprites only - will be undefined for other objects this.lastAnimationFrame = -1; // for sprites only - will be undefined for other objects if (this.myJoints) { this.myJoints.length = 0; this.myCreatedJoints.length = 0; this.joiningMe.clear(); } else { this.myJoints = []; // Created Box2D joints this.myCreatedJoints = []; // List of actions called to create joints this.joiningMe = new cr.ObjectSet(); // Instances with joints to me } var self = this; if (!this.recycled) { this.myDestroyCallback = (function(inst) { self.onInstanceDestroyed(inst); }); } this.runtime.addDestroyCallback(this.myDestroyCallback); }; behinstProto.postCreate = function () { this.inst.update_bbox(); this.createBody(); this.lastAnimation = this.inst.cur_animation; this.lastAnimationFrame = this.inst.cur_frame; }; behinstProto.onDestroy = function() { this.destroyMyJoints(); this.myCreatedJoints.length = 0; this.joiningMe.clear(); if (this.body) { this.world.DestroyBody(this.body); this.body = null; } this.runtime.removeDestroyCallback(this.myDestroyCallback); }; behinstProto.saveToJSON = function () { var o = { "e": this.enabled, "im": this.immovable, "pr": this.preventRotation, "d": this.density, "fr": this.friction, "re": this.restitution, "ld": this.linearDamping, "ad": this.angularDamping, "b": this.bullet, "mcj": this.myCreatedJoints }; if (this.enabled) { var temp = b2Vec2.Get(0, 0); temp.SetV(this.body.GetLinearVelocity()); o["vx"] = temp.x; o["vy"] = temp.y; o["om"] = this.body.GetAngularVelocity(); } return o; }; behinstProto.loadFromJSON = function (o) { this.destroyMyJoints(); this.myCreatedJoints.length = 0; this.joiningMe.clear(); if (this.body) { this.world.DestroyBody(this.body); this.body = null; } this.enabled = o["e"]; this.immovable = o["im"]; this.preventRotation = o["pr"]; this.density = o["d"]; this.friction = o["fr"]; this.restitution = o["re"]; this.linearDamping = o["ld"]; this.angularDamping = o["ad"]; this.bullet = o["b"]; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; this.lastKnownAngle = this.inst.angle; this.lastWidth = this.inst.width; this.lastHeight = this.inst.height; if (this.enabled) { this.createBody(); this.body.SetLinearVelocity(b2Vec2.Get(o["vx"], o["vy"])); this.body.SetAngularVelocity(o["om"]); if (o["vx"] !== 0 || o["vy"] !== 0 || o["om"] !== 0) this.body.SetAwake(true); this.myCreatedJoints = o["mcj"]; } }; behinstProto.afterLoad = function () { if (this.enabled) this.recreateMyJoints(); this.behavior.lastUpdateTick = this.runtime.tickcount - 1; }; behinstProto.onInstanceDestroyed = function (inst) { var i, len, j, instuid = inst.uid; for (i = 0, j = 0, len = this.myCreatedJoints.length; i < len; i++) { this.myCreatedJoints[j] = this.myCreatedJoints[i]; if (j < this.myJoints.length) this.myJoints[j] = this.myJoints[i]; if (this.myCreatedJoints[i].params[1] == instuid) // attached instance is always 2nd param this.world.DestroyJoint(this.myJoints[i]); else j++; } this.myCreatedJoints.length = j; if (j < this.myJoints.length) this.myJoints.length = j; this.joiningMe.remove(inst); }; behinstProto.destroyMyJoints = function() { var i, len; for (i = 0, len = this.myJoints.length; i < len; i++) this.world.DestroyJoint(this.myJoints[i]); this.myJoints.length = 0; }; behinstProto.recreateMyJoints = function() { var i, len, j; for (i = 0, len = this.myCreatedJoints.length; i < len; i++) { j = this.myCreatedJoints[i]; switch (j.type) { case 0: // distance joint this.doCreateDistanceJoint(j.params[0], j.params[1], j.params[2], j.params[3], j.params[4]); break; case 1: // revolute joint this.doCreateRevoluteJoint(j.params[0], j.params[1]); break; case 2: // limited revolute joint this.doCreateLimitedRevoluteJoint(j.params[0], j.params[1], j.params[2], j.params[3]); break; default: ; } } }; behinstProto.destroyBody = function() { if (!this.body) return; this.destroyMyJoints(); this.world.DestroyBody(this.body); this.body = null; this.inst.extra.box2dbody = null; }; var collrects = []; behinstProto.createBody = function() { if (!this.enabled) return; var inst = this.inst; var hadOldBody = false; var oldVelocity = null; var oldOmega = null; var i, len, j, lenj, k, lenk, vec, arr, b, c, rc, pts_cache, pts_count, convexpolys, cp, offx, offy, oldAngle; if (this.body) { hadOldBody = true; oldVelocity = b2Vec2.Get(0, 0); oldVelocity.SetV(this.body.GetLinearVelocity()); oldOmega = this.body.GetAngularVelocity(); arr = this.joiningMe.valuesRef(); for (i = 0, len = arr.length; i < len; i++) { b = arr[i].extra.box2dbody.c2userdata; b.destroyMyJoints(); } this.destroyBody(); } var fixDef = new b2FixtureDef; fixDef.density = this.density; fixDef.friction = this.friction; fixDef.restitution = this.restitution; var bodyDef = new b2BodyDef; if (this.immovable) bodyDef.type = 0; //b2BodyDef.b2_staticBody else bodyDef.type = 2; //b2BodyDef.b2_dynamicBody inst.update_bbox(); bodyDef.position.x = inst.bquad.midX() * worldScale; bodyDef.position.y = inst.bquad.midY() * worldScale; bodyDef.angle = inst.angle; bodyDef.fixedRotation = this.preventRotation; bodyDef.linearDamping = this.linearDamping; bodyDef.angularDamping = this.angularDamping; bodyDef.bullet = this.bullet; var hasPoly = this.inst.collision_poly && !this.inst.collision_poly.is_empty(); this.body = this.world.CreateBody(bodyDef); this.body.c2userdata = this; var usecollisionmask = this.collisionmask; if (!hasPoly && !this.inst.tilemap_exists && this.collisionmask === 0) usecollisionmask = 1; var instw = Math.max(Math.abs(inst.width), 1); var insth = Math.max(Math.abs(inst.height), 1); var ismirrored = inst.width < 0; var isflipped = inst.height < 0; if (usecollisionmask === 0) { if (inst.tilemap_exists) { offx = inst.bquad.midX() - inst.x; offy = inst.bquad.midY() - inst.y; inst.getAllCollisionRects(collrects); arr = []; for (i = 0, len = collrects.length; i < len; ++i) { c = collrects[i]; rc = c.rc; if (c.poly) { if (!c.poly.convexpolys) { pts_cache = c.poly.pts_cache; pts_count = c.poly.pts_count; for (j = 0; j < pts_count; ++j) { arr.push(b2Vec2.Get(pts_cache[j*2], pts_cache[j*2+1])); } var flags = (c.id & TILE_FLAGS_MASK); if (flags === TILE_FLIPPED_HORIZONTAL || flags === TILE_FLIPPED_VERTICAL || flags === TILE_FLIPPED_DIAGONAL || ((flags & TILE_FLIPPED_HORIZONTAL) && (flags & TILE_FLIPPED_VERTICAL) && (flags & TILE_FLIPPED_DIAGONAL))) { arr.reverse(); } c.poly.convexpolys = cr.b2Separator.Separate(arr, (rc.right - rc.left) * (rc.bottom - rc.top)); for (j = 0, lenj = arr.length; j < lenj; ++j) b2Vec2.Free(arr[j]); arr.length = 0; } for (j = 0, lenj = c.poly.convexpolys.length; j < lenj; ++j) { cp = c.poly.convexpolys[j]; ; for (k = 0, lenk = cp.length; k < lenk; ++k) { arr.push(b2Vec2.Get((rc.left + cp[k].x - offx) * worldScale, (rc.top + cp[k].y - offy) * worldScale)); } fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsArray(arr, arr.length); // copies content of arr this.body.CreateFixture(fixDef); for (k = 0, lenk = arr.length; k < lenk; ++k) b2Vec2.Free(arr[k]); arr.length = 0; } } else { arr.push(b2Vec2.Get((rc.left - offx) * worldScale, (rc.top - offy) * worldScale)); arr.push(b2Vec2.Get((rc.right - offx) * worldScale, (rc.top - offy) * worldScale)); arr.push(b2Vec2.Get((rc.right - offx) * worldScale, (rc.bottom - offy) * worldScale)); arr.push(b2Vec2.Get((rc.left - offx) * worldScale, (rc.bottom - offy) * worldScale)); fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsArray(arr, arr.length); // copies content of arr this.body.CreateFixture(fixDef); } for (j = 0, lenj = arr.length; j < lenj; ++j) b2Vec2.Free(arr[j]); arr.length = 0; } } else { oldAngle = inst.angle; inst.angle = 0; inst.set_bbox_changed(); inst.update_bbox(); offx = inst.bquad.midX() - inst.x; offy = inst.bquad.midY() - inst.y; inst.angle = oldAngle; inst.set_bbox_changed(); inst.collision_poly.cache_poly(ismirrored ? -instw : instw, isflipped ? -insth : insth, 0); pts_cache = inst.collision_poly.pts_cache; pts_count = inst.collision_poly.pts_count; arr = []; arr.length = pts_count; for (i = 0; i < pts_count; i++) { arr[i] = b2Vec2.Get(pts_cache[i*2] - offx, pts_cache[i*2+1] - offy); } if (ismirrored !== isflipped) arr.reverse(); // wrong clockwise order when flipped convexpolys = cr.b2Separator.Separate(arr, instw * insth); for (i = 0; i < pts_count; i++) b2Vec2.Free(arr[i]); if (convexpolys.length) { for (i = 0, len = convexpolys.length; i < len; i++) { arr = convexpolys[i]; ; for (j = 0, lenj = arr.length; j < lenj; j++) { vec = arr[j]; vec.x *= worldScale; vec.y *= worldScale; } fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsArray(arr, arr.length); // copies content of arr this.body.CreateFixture(fixDef); for (j = 0, lenj = arr.length; j < lenj; j++) b2Vec2.Free(arr[j]); } } else { fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsBox(instw * worldScale * 0.5, insth * worldScale * 0.5); this.body.CreateFixture(fixDef); } } } else if (usecollisionmask === 1) { fixDef.shape = new b2PolygonShape; fixDef.shape.SetAsBox(instw * worldScale * 0.5, insth * worldScale * 0.5); this.body.CreateFixture(fixDef); } else { fixDef.shape = new b2CircleShape(Math.min(instw, insth) * worldScale * 0.5); this.body.CreateFixture(fixDef); } inst.extra.box2dbody = this.body; this.lastWidth = inst.width; this.lastHeight = inst.height; if (hadOldBody) { this.body.SetLinearVelocity(oldVelocity); this.body.SetAngularVelocity(oldOmega); b2Vec2.Free(oldVelocity); this.recreateMyJoints(); arr = this.joiningMe.valuesRef(); for (i = 0, len = arr.length; i < len; i++) { b = arr[i].extra.box2dbody.c2userdata; b.recreateMyJoints(); } } collrects.length = 0; }; /* behinstProto.draw = function (ctx) { if (!this.myconvexpolys) return; this.inst.update_bbox(); var midx = this.inst.bquad.midX(); var midy = this.inst.bquad.midY(); var i, len, j, lenj; var sina = 0; var cosa = 1; if (this.inst.angle !== 0) { sina = Math.sin(this.inst.angle); cosa = Math.cos(this.inst.angle); } var strokeStyles = ["#f00", "#0f0", "#00f", "#ff0", "#0ff", "#f0f"]; ctx.lineWidth = 2; var i, len, j, lenj, ax, ay, bx, by, poly, va, vb; for (i = 0, len = this.myconvexpolys.length; i < len; i++) { poly = this.myconvexpolys[i]; ctx.strokeStyle = strokeStyles[i]; for (j = 0, lenj = poly.length; j < lenj; j++) { va = poly[j]; vb = poly[(j + 1) % lenj]; ax = va.x / worldScale; ay = va.y / worldScale; bx = vb.x / worldScale; by = vb.y / worldScale; ctx.beginPath(); ctx.moveTo(((ax * cosa) - (ay * sina)) + midx, ((ay * cosa) + (ax * sina)) + midy); ctx.lineTo(((bx * cosa) - (by * sina)) + midx, ((by * cosa) + (bx * sina)) + midy); ctx.stroke(); ctx.closePath(); } } }; */ behinstProto.tick = function () { if (!this.enabled) return; var inst = this.inst; var dt; if (this.behavior.steppingMode === 0) // fixed dt = this.runtime.timescale / 60; else { dt = this.runtime.getDt(this.inst); if (dt > 1 / 30) dt = 1 / 30; } if (this.runtime.tickcount > this.behavior.lastUpdateTick && this.runtime.timescale > 0) { this.world.Step(dt, this.behavior.velocityIterations, this.behavior.positionIterations); // still apply timescale this.world.ClearForces(); this.behavior.lastUpdateTick = this.runtime.tickcount; } if (this.recreateBody || inst.width !== this.lastWidth || inst.height !== this.lastHeight || inst.cur_animation !== this.lastAnimation || inst.cur_frame !== this.lastAnimationFrame || (inst.tilemap_exists && inst.physics_changed)) { this.createBody(); this.recreateBody = false; this.lastAnimation = inst.cur_animation; this.lastAnimationFrame = inst.cur_frame; if (inst.tilemap_exists && inst.physics_changed) inst.physics_changed = false; } var pos_changed = (inst.x !== this.lastKnownX || inst.y !== this.lastKnownY); var angle_changed = (inst.angle !== this.lastKnownAngle); if (pos_changed) { inst.update_bbox(); var newmidx = inst.bquad.midX(); var newmidy = inst.bquad.midY(); var diffx = newmidx - this.lastKnownX; var diffy = newmidy - this.lastKnownY; this.body.SetPosition(b2Vec2.Get(newmidx * worldScale, newmidy * worldScale)); this.body.SetLinearVelocity(b2Vec2.Get(diffx, diffy)); this.lastTickOverride = true; this.body.SetAwake(true); } else if (this.lastTickOverride) { this.lastTickOverride = false; this.body.SetLinearVelocity(b2Vec2.Get(0, 0)); this.body.SetPosition(b2Vec2.Get(inst.bquad.midX() * worldScale, inst.bquad.midY() * worldScale)); } if (angle_changed) { this.body.SetAngle(inst.angle); this.body.SetAwake(true); } var pos = this.body.GetPosition(); var newx = pos.x / worldScale; var newy = pos.y / worldScale; var newangle = this.body.GetAngle(); if (newx !== inst.x || newy !== inst.y || newangle !== inst.angle) { inst.x = newx; inst.y = newy; inst.angle = newangle; inst.set_bbox_changed(); inst.update_bbox(); var dx = inst.bquad.midX() - inst.x; var dy = inst.bquad.midY() - inst.y; if (dx !== 0 || dy !== 0) { inst.x -= dx; inst.y -= dy; inst.set_bbox_changed(); } } this.lastKnownX = inst.x; this.lastKnownY = inst.y; this.lastKnownAngle = inst.angle; }; behinstProto.getInstImgPointX = function(imgpt) { if (imgpt === -1 || !this.inst.getImagePoint) return this.inst.x; if (imgpt === 0 && this.body) return (this.body.GetPosition().x + this.body.GetLocalCenter().x) / worldScale; return this.inst.getImagePoint(imgpt, true); }; behinstProto.getInstImgPointY = function(imgpt) { if (imgpt === -1 || !this.inst.getImagePoint) return this.inst.y; if (imgpt === 0 && this.body) return (this.body.GetPosition().y + this.body.GetLocalCenter().y) / worldScale; return this.inst.getImagePoint(imgpt, false); }; function Cnds() {}; Cnds.prototype.IsSleeping = function () { if (!this.enabled) return false; return !this.body.IsAwake(); }; Cnds.prototype.CompareVelocity = function (which_, cmp_, x_) { if (!this.enabled) return false; var velocity_vec = this.body.GetLinearVelocity(); var v, vx, vy; if (which_ === 0) // X velocity v = velocity_vec.x / worldScale; else if (which_ === 1) // Y velocity v = velocity_vec.y / worldScale; else // Overall velocity { vx = velocity_vec.x / worldScale; vy = velocity_vec.y / worldScale; v = cr.distanceTo(0, 0, vx, vy); } return cr.do_cmp(v, cmp_, x_); }; Cnds.prototype.CompareAngularVelocity = function (cmp_, x_) { if (!this.enabled) return false; var av = cr.to_degrees(this.body.GetAngularVelocity()); return cr.do_cmp(av, cmp_, x_); }; Cnds.prototype.CompareMass = function (cmp_, x_) { if (!this.enabled) return false; var mass = this.body.GetMass() / worldScale; return cr.do_cmp(mass, cmp_, x_); }; Cnds.prototype.IsEnabled = function () { return this.enabled; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.ApplyForce = function (fx, fy, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyForce(b2Vec2.Get(fx, fy), b2Vec2.Get(x * worldScale, y * worldScale)); }; Acts.prototype.ApplyForceToward = function (f, px, py, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); var a = cr.angleTo(x, y, px, py); this.body.ApplyForce(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); }; Acts.prototype.ApplyForceAtAngle = function (f, a, imgpt) { if (!this.enabled) return; a = cr.to_radians(a); var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyForce(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); }; Acts.prototype.ApplyImpulse = function (fx, fy, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyImpulse(b2Vec2.Get(fx, fy), b2Vec2.Get(x * worldScale, y * worldScale)); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.ApplyImpulseToward = function (f, px, py, imgpt) { if (!this.enabled) return; var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); var a = cr.angleTo(x, y, px, py); this.body.ApplyImpulse(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.ApplyImpulseAtAngle = function (f, a, imgpt) { if (!this.enabled) return; a = cr.to_radians(a); var x = this.getInstImgPointX(imgpt); var y = this.getInstImgPointY(imgpt); this.body.ApplyImpulse(b2Vec2.Get(Math.cos(a) * f, Math.sin(a) * f), b2Vec2.Get(x * worldScale, y * worldScale)); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.ApplyTorque = function (m) { if (!this.enabled) return; this.body.ApplyTorque(cr.to_radians(m)); }; Acts.prototype.ApplyTorqueToAngle = function (m, a) { if (!this.enabled) return; m = cr.to_radians(m); a = cr.to_radians(a); if (cr.angleClockwise(this.inst.angle, a)) this.body.ApplyTorque(-m); else this.body.ApplyTorque(m); }; Acts.prototype.ApplyTorqueToPosition = function (m, x, y) { if (!this.enabled) return; m = cr.to_radians(m); var a = cr.angleTo(this.inst.x, this.inst.y, x, y); if (cr.angleClockwise(this.inst.angle, a)) this.body.ApplyTorque(-m); else this.body.ApplyTorque(m); }; Acts.prototype.SetAngularVelocity = function (v) { if (!this.enabled) return; this.body.SetAngularVelocity(cr.to_radians(v)); this.body.SetAwake(true); }; Acts.prototype.CreateDistanceJoint = function (imgpt, obj, objimgpt, damping, freq) { if (!obj || !this.enabled) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst || otherinst == this.inst) return; if (!otherinst.extra.box2dbody) return; // no physics behavior on other object this.myCreatedJoints.push({type: 0, params: [imgpt, otherinst.uid, objimgpt, damping, freq]}); this.doCreateDistanceJoint(imgpt, otherinst.uid, objimgpt, damping, freq); }; behinstProto.doCreateDistanceJoint = function (imgpt, otherinstuid, objimgpt, damping, freq) { if (!this.enabled) return; var otherinst = this.runtime.getObjectByUID(otherinstuid); if (!otherinst || otherinst == this.inst || !otherinst.extra.box2dbody) return; otherinst.extra.box2dbody.c2userdata.joiningMe.add(this.inst); var myx = this.getInstImgPointX(imgpt); var myy = this.getInstImgPointY(imgpt); var theirx, theiry; if (otherinst.getImagePoint) { theirx = otherinst.getImagePoint(objimgpt, true); theiry = otherinst.getImagePoint(objimgpt, false); } else { theirx = otherinst.x; theiry = otherinst.y; } var dx = myx - theirx; var dy = myy - theiry; var jointDef = new b2DistanceJointDef(); jointDef.Initialize(this.body, otherinst.extra.box2dbody, b2Vec2.Get(myx * worldScale, myy * worldScale), b2Vec2.Get(theirx * worldScale, theiry * worldScale)); jointDef.length = Math.sqrt(dx*dx + dy*dy) * worldScale; jointDef.dampingRatio = damping; jointDef.frequencyHz = freq; this.myJoints.push(this.world.CreateJoint(jointDef)); }; Acts.prototype.CreateRevoluteJoint = function (imgpt, obj) { if (!obj || !this.enabled) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst || otherinst == this.inst) return; if (!otherinst.extra.box2dbody) return; // no physics behavior on other object this.myCreatedJoints.push({type: 1, params: [imgpt, otherinst.uid]}); this.doCreateRevoluteJoint(imgpt, otherinst.uid); }; behinstProto.doCreateRevoluteJoint = function (imgpt, otherinstuid) { if (!this.enabled) return; var otherinst = this.runtime.getObjectByUID(otherinstuid); if (!otherinst || otherinst == this.inst || !otherinst.extra.box2dbody) return; otherinst.extra.box2dbody.c2userdata.joiningMe.add(this.inst); var myx = this.getInstImgPointX(imgpt); var myy = this.getInstImgPointY(imgpt); var jointDef = new b2RevoluteJointDef(); jointDef.Initialize(this.body, otherinst.extra.box2dbody, b2Vec2.Get(myx * worldScale, myy * worldScale)); this.myJoints.push(this.world.CreateJoint(jointDef)); }; Acts.prototype.CreateLimitedRevoluteJoint = function (imgpt, obj, lower, upper) { if (!obj || !this.enabled) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst || otherinst == this.inst) return; if (!otherinst.extra.box2dbody) return; // no physics behavior on other object this.myCreatedJoints.push({type: 2, params: [imgpt, otherinst.uid, lower, upper]}); this.doCreateLimitedRevoluteJoint(imgpt, otherinst.uid, lower, upper); }; behinstProto.doCreateLimitedRevoluteJoint = function (imgpt, otherinstuid, lower, upper) { if (!this.enabled) return; var otherinst = this.runtime.getObjectByUID(otherinstuid); if (!otherinst || otherinst == this.inst || !otherinst.extra.box2dbody) return; otherinst.extra.box2dbody.c2userdata.joiningMe.add(this.inst); var myx = this.getInstImgPointX(imgpt); var myy = this.getInstImgPointY(imgpt); var jointDef = new b2RevoluteJointDef(); jointDef.Initialize(this.body, otherinst.extra.box2dbody, b2Vec2.Get(myx * worldScale, myy * worldScale)); jointDef.enableLimit = true; jointDef.lowerAngle = cr.to_radians(lower); jointDef.upperAngle = cr.to_radians(upper); this.myJoints.push(this.world.CreateJoint(jointDef)); }; Acts.prototype.SetWorldGravity = function (g) { if (g === this.behavior.worldG) return; this.world.SetGravity(b2Vec2.Get(0, g)); this.behavior.worldG = g; var i, len, arr = this.behavior.my_instances.valuesRef(); for (i = 0, len = arr.length; i < len; i++) { if (arr[i].extra.box2dbody) arr[i].extra.box2dbody.SetAwake(true); } }; Acts.prototype.SetSteppingMode = function (mode) { this.behavior.steppingMode = mode; }; Acts.prototype.SetIterations = function (vel, pos) { if (vel < 1) vel = 1; if (pos < 1) pos = 1; this.behavior.velocityIterations = vel; this.behavior.positionIterations = pos; }; Acts.prototype.SetVelocity = function (vx, vy) { if (!this.enabled) return; this.body.SetLinearVelocity(b2Vec2.Get(vx * worldScale, vy * worldScale)); this.body.SetAwake(true); this.lastTickOverride = false; this.lastKnownX = this.inst.x; this.lastKnownY = this.inst.y; }; Acts.prototype.SetDensity = function (d) { if (!this.enabled) return; if (this.density === d) return; this.density = d; this.recreateBody = true; }; Acts.prototype.SetFriction = function (f) { if (!this.enabled) return; if (this.friction === f) return; this.friction = f; this.recreateBody = true; }; Acts.prototype.SetElasticity = function (e) { if (!this.enabled) return; if (this.restitution === e) return; this.restitution = e; this.recreateBody = true; }; Acts.prototype.SetLinearDamping = function (ld) { if (!this.enabled) return; if (this.linearDamping === ld) return; this.linearDamping = ld; this.body.SetLinearDamping(ld); }; Acts.prototype.SetAngularDamping = function (ad) { if (!this.enabled) return; if (this.angularDamping === ad) return; this.angularDamping = ad; this.body.SetAngularDamping(ad); }; Acts.prototype.SetImmovable = function (i) { if (!this.enabled) return; if (this.immovable === (i !== 0)) return; this.immovable = (i !== 0); this.body.SetType(this.immovable ? 0 /*b2BodyDef.b2_staticBody*/ : 2 /*b2BodyDef.b2_dynamicBody*/); this.body.SetAwake(true); }; function SetCollisionsEnabled(typeA, typeB, state) { var s; if (state) { s = typeA.extra.Physics_DisabledCollisions; if (s) s.remove(typeB); s = typeB.extra.Physics_DisabledCollisions; if (s) s.remove(typeA); } else { if (!typeA.extra.Physics_DisabledCollisions) typeA.extra.Physics_DisabledCollisions = new cr.ObjectSet(); typeA.extra.Physics_DisabledCollisions.add(typeB); if (!typeB.extra.Physics_DisabledCollisions) typeB.extra.Physics_DisabledCollisions = new cr.ObjectSet(); typeB.extra.Physics_DisabledCollisions.add(typeA); } }; Acts.prototype.EnableCollisions = function (obj, state) { if (!obj || !this.enabled) return; var i, len; if (obj.is_family) { for (i = 0, len = obj.members.length; i < len; i++) { SetCollisionsEnabled(this.inst.type, obj.members[i], state !== 0); } } else { SetCollisionsEnabled(this.inst.type, obj, state !== 0); } this.behavior.allCollisionsEnabled = false; }; Acts.prototype.SetPreventRotate = function (i) { if (!this.enabled) return; if (this.preventRotation === (i !== 0)) return; this.preventRotation = (i !== 0); this.body.SetFixedRotation(this.preventRotation); this.body.m_torque = 0; this.body.SetAngularVelocity(0); this.body.SetAwake(true); }; Acts.prototype.SetBullet = function (i) { if (!this.enabled) return; if (this.bullet === (i !== 0)) return; this.bullet = (i !== 0); this.body.SetBullet(this.bullet); this.body.SetAwake(true); }; Acts.prototype.RemoveJoints = function () { if (!this.enabled) return; this.destroyMyJoints(); this.myCreatedJoints.length = 0; this.joiningMe.clear(); }; Acts.prototype.SetEnabled = function (e) { if (this.enabled && e === 0) { this.destroyBody(); this.enabled = false; } else if (!this.enabled && e === 1) { this.enabled = true; this.createBody(); } }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.VelocityX = function (ret) { ret.set_float(this.enabled ? this.body.GetLinearVelocity().x / worldScale : 0); }; Exps.prototype.VelocityY = function (ret) { ret.set_float(this.enabled ? this.body.GetLinearVelocity().y / worldScale : 0); }; Exps.prototype.AngularVelocity = function (ret) { ret.set_float(this.enabled ? cr.to_degrees(this.body.GetAngularVelocity()) : 0); }; Exps.prototype.Mass = function (ret) { ret.set_float(this.enabled ? this.body.GetMass() / worldScale : 0); }; Exps.prototype.CenterOfMassX = function (ret) { ret.set_float(this.enabled ? (this.body.GetPosition().x + this.body.GetLocalCenter().x) / worldScale : 0); }; Exps.prototype.CenterOfMassY = function (ret) { ret.set_float(this.enabled ? (this.body.GetPosition().y + this.body.GetLocalCenter().y) / worldScale : 0); }; Exps.prototype.Density = function (ret) { ret.set_float(this.enabled ? this.density : 0); }; Exps.prototype.Friction = function (ret) { ret.set_float(this.enabled ? this.friction : 0); }; Exps.prototype.Elasticity = function (ret) { ret.set_float(this.enabled ? this.restitution : 0); }; Exps.prototype.LinearDamping = function (ret) { ret.set_float(this.enabled ? this.linearDamping : 0); }; Exps.prototype.AngularDamping = function (ret) { ret.set_float(this.enabled ? this.angularDamping : 0); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Pin = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Pin.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.pinObject = null; this.pinObjectUid = -1; // for loading this.pinAngle = 0; this.pinDist = 0; this.myStartAngle = 0; this.theirStartAngle = 0; this.lastKnownAngle = 0; this.mode = 0; // 0 = position & angle; 1 = position; 2 = angle; 3 = rope; 4 = bar var self = this; if (!this.recycled) { this.myDestroyCallback = (function(inst) { self.onInstanceDestroyed(inst); }); } this.runtime.addDestroyCallback(this.myDestroyCallback); }; behinstProto.saveToJSON = function () { return { "uid": this.pinObject ? this.pinObject.uid : -1, "pa": this.pinAngle, "pd": this.pinDist, "msa": this.myStartAngle, "tsa": this.theirStartAngle, "lka": this.lastKnownAngle, "m": this.mode }; }; behinstProto.loadFromJSON = function (o) { this.pinObjectUid = o["uid"]; // wait until afterLoad to look up this.pinAngle = o["pa"]; this.pinDist = o["pd"]; this.myStartAngle = o["msa"]; this.theirStartAngle = o["tsa"]; this.lastKnownAngle = o["lka"]; this.mode = o["m"]; }; behinstProto.afterLoad = function () { if (this.pinObjectUid === -1) this.pinObject = null; else { this.pinObject = this.runtime.getObjectByUID(this.pinObjectUid); ; } this.pinObjectUid = -1; }; behinstProto.onInstanceDestroyed = function (inst) { if (this.pinObject == inst) this.pinObject = null; }; behinstProto.onDestroy = function() { this.pinObject = null; this.runtime.removeDestroyCallback(this.myDestroyCallback); }; behinstProto.tick = function () { }; behinstProto.tick2 = function () { if (!this.pinObject) return; if (this.lastKnownAngle !== this.inst.angle) this.myStartAngle = cr.clamp_angle(this.myStartAngle + (this.inst.angle - this.lastKnownAngle)); var newx = this.inst.x; var newy = this.inst.y; if (this.mode === 3 || this.mode === 4) // rope mode or bar mode { var dist = cr.distanceTo(this.inst.x, this.inst.y, this.pinObject.x, this.pinObject.y); if ((dist > this.pinDist) || (this.mode === 4 && dist < this.pinDist)) { var a = cr.angleTo(this.pinObject.x, this.pinObject.y, this.inst.x, this.inst.y); newx = this.pinObject.x + Math.cos(a) * this.pinDist; newy = this.pinObject.y + Math.sin(a) * this.pinDist; } } else { newx = this.pinObject.x + Math.cos(this.pinObject.angle + this.pinAngle) * this.pinDist; newy = this.pinObject.y + Math.sin(this.pinObject.angle + this.pinAngle) * this.pinDist; } var newangle = cr.clamp_angle(this.myStartAngle + (this.pinObject.angle - this.theirStartAngle)); this.lastKnownAngle = newangle; if ((this.mode === 0 || this.mode === 1 || this.mode === 3 || this.mode === 4) && (this.inst.x !== newx || this.inst.y !== newy)) { this.inst.x = newx; this.inst.y = newy; this.inst.set_bbox_changed(); } if ((this.mode === 0 || this.mode === 2) && (this.inst.angle !== newangle)) { this.inst.angle = newangle; this.inst.set_bbox_changed(); } }; function Cnds() {}; Cnds.prototype.IsPinned = function () { return !!this.pinObject; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.Pin = function (obj, mode_) { if (!obj) return; var otherinst = obj.getFirstPicked(this.inst); if (!otherinst) return; this.pinObject = otherinst; this.pinAngle = cr.angleTo(otherinst.x, otherinst.y, this.inst.x, this.inst.y) - otherinst.angle; this.pinDist = cr.distanceTo(otherinst.x, otherinst.y, this.inst.x, this.inst.y); this.myStartAngle = this.inst.angle; this.lastKnownAngle = this.inst.angle; this.theirStartAngle = otherinst.angle; this.mode = mode_; }; Acts.prototype.Unpin = function () { this.pinObject = null; }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.PinnedUID = function (ret) { ret.set_int(this.pinObject ? this.pinObject.uid : -1); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Rotate = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Rotate.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.speed = cr.to_radians(this.properties[0]); this.acc = cr.to_radians(this.properties[1]); }; behinstProto.saveToJSON = function () { return { "speed": this.speed, "acc": this.acc }; }; behinstProto.loadFromJSON = function (o) { this.speed = o["speed"]; this.acc = o["acc"]; }; behinstProto.tick = function () { var dt = this.runtime.getDt(this.inst); if (dt === 0) return; if (this.acc !== 0) this.speed += this.acc * dt; if (this.speed !== 0) { this.inst.angle = cr.clamp_angle(this.inst.angle + this.speed * dt); this.inst.set_bbox_changed(); } }; function Cnds() {}; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetSpeed = function (s) { this.speed = cr.to_radians(s); }; Acts.prototype.SetAcceleration = function (a) { this.acc = cr.to_radians(a); }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.Speed = function (ret) { ret.set_float(cr.to_degrees(this.speed)); }; Exps.prototype.Acceleration = function (ret) { ret.set_float(cr.to_degrees(this.acc)); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.Sin = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.Sin.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; this.i = 0; // period offset (radians) }; var behinstProto = behaviorProto.Instance.prototype; var _2pi = 2 * Math.PI; var _pi_2 = Math.PI / 2; var _3pi_2 = (3 * Math.PI) / 2; behinstProto.onCreate = function() { this.active = (this.properties[0] === 1); this.movement = this.properties[1]; // 0=Horizontal|1=Vertical|2=Size|3=Width|4=Height|5=Angle|6=Opacity|7=Value only this.wave = this.properties[2]; // 0=Sine|1=Triangle|2=Sawtooth|3=Reverse sawtooth|4=Square this.period = this.properties[3]; this.period += Math.random() * this.properties[4]; // period random if (this.period === 0) this.i = 0; else { this.i = (this.properties[5] / this.period) * _2pi; // period offset this.i += ((Math.random() * this.properties[6]) / this.period) * _2pi; // period offset random } this.mag = this.properties[7]; // magnitude this.mag += Math.random() * this.properties[8]; // magnitude random this.initialValue = 0; this.initialValue2 = 0; this.ratio = 0; this.init(); }; behinstProto.saveToJSON = function () { return { "i": this.i, "a": this.active, "mv": this.movement, "w": this.wave, "p": this.period, "mag": this.mag, "iv": this.initialValue, "iv2": this.initialValue2, "r": this.ratio, "lkv": this.lastKnownValue, "lkv2": this.lastKnownValue2 }; }; behinstProto.loadFromJSON = function (o) { this.i = o["i"]; this.active = o["a"]; this.movement = o["mv"]; this.wave = o["w"]; this.period = o["p"]; this.mag = o["mag"]; this.initialValue = o["iv"]; this.initialValue2 = o["iv2"] || 0; this.ratio = o["r"]; this.lastKnownValue = o["lkv"]; this.lastKnownValue2 = o["lkv2"] || 0; }; behinstProto.init = function () { switch (this.movement) { case 0: // horizontal this.initialValue = this.inst.x; break; case 1: // vertical this.initialValue = this.inst.y; break; case 2: // size this.initialValue = this.inst.width; this.ratio = this.inst.height / this.inst.width; break; case 3: // width this.initialValue = this.inst.width; break; case 4: // height this.initialValue = this.inst.height; break; case 5: // angle this.initialValue = this.inst.angle; this.mag = cr.to_radians(this.mag); // convert magnitude from degrees to radians break; case 6: // opacity this.initialValue = this.inst.opacity; break; case 7: this.initialValue = 0; break; case 8: // forwards/backwards this.initialValue = this.inst.x; this.initialValue2 = this.inst.y; break; default: ; } this.lastKnownValue = this.initialValue; this.lastKnownValue2 = this.initialValue2; }; behinstProto.waveFunc = function (x) { x = x % _2pi; switch (this.wave) { case 0: // sine return Math.sin(x); case 1: // triangle if (x <= _pi_2) return x / _pi_2; else if (x <= _3pi_2) return 1 - (2 * (x - _pi_2) / Math.PI); else return (x - _3pi_2) / _pi_2 - 1; case 2: // sawtooth return 2 * x / _2pi - 1; case 3: // reverse sawtooth return -2 * x / _2pi + 1; case 4: // square return x < Math.PI ? -1 : 1; }; return 0; }; behinstProto.tick = function () { var dt = this.runtime.getDt(this.inst); if (!this.active || dt === 0) return; if (this.period === 0) this.i = 0; else { this.i += (dt / this.period) * _2pi; this.i = this.i % _2pi; } switch (this.movement) { case 0: // horizontal if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; this.inst.x = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; break; case 1: // vertical if (this.inst.y !== this.lastKnownValue) this.initialValue += this.inst.y - this.lastKnownValue; this.inst.y = this.initialValue + this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.y; break; case 2: // size this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; this.inst.height = this.inst.width * this.ratio; break; case 3: // width this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 4: // height this.inst.height = this.initialValue + this.waveFunc(this.i) * this.mag; break; case 5: // angle if (this.inst.angle !== this.lastKnownValue) this.initialValue = cr.clamp_angle(this.initialValue + (this.inst.angle - this.lastKnownValue)); this.inst.angle = cr.clamp_angle(this.initialValue + this.waveFunc(this.i) * this.mag); this.lastKnownValue = this.inst.angle; break; case 6: // opacity this.inst.opacity = this.initialValue + (this.waveFunc(this.i) * this.mag) / 100; if (this.inst.opacity < 0) this.inst.opacity = 0; else if (this.inst.opacity > 1) this.inst.opacity = 1; break; case 8: // forwards/backwards if (this.inst.x !== this.lastKnownValue) this.initialValue += this.inst.x - this.lastKnownValue; if (this.inst.y !== this.lastKnownValue2) this.initialValue2 += this.inst.y - this.lastKnownValue2; this.inst.x = this.initialValue + Math.cos(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.inst.y = this.initialValue2 + Math.sin(this.inst.angle) * this.waveFunc(this.i) * this.mag; this.lastKnownValue = this.inst.x; this.lastKnownValue2 = this.inst.y; break; } this.inst.set_bbox_changed(); }; behinstProto.onSpriteFrameChanged = function (prev_frame, next_frame) { switch (this.movement) { case 2: // size this.initialValue *= (next_frame.width / prev_frame.width); this.ratio = next_frame.height / next_frame.width; break; case 3: // width this.initialValue *= (next_frame.width / prev_frame.width); break; case 4: // height this.initialValue *= (next_frame.height / prev_frame.height); break; } }; function Cnds() {}; Cnds.prototype.IsActive = function () { return this.active; }; Cnds.prototype.CompareMovement = function (m) { return this.movement === m; }; Cnds.prototype.ComparePeriod = function (cmp, v) { return cr.do_cmp(this.period, cmp, v); }; Cnds.prototype.CompareMagnitude = function (cmp, v) { if (this.movement === 5) return cr.do_cmp(this.mag, cmp, cr.to_radians(v)); else return cr.do_cmp(this.mag, cmp, v); }; Cnds.prototype.CompareWave = function (w) { return this.wave === w; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetActive = function (a) { this.active = (a === 1); }; Acts.prototype.SetPeriod = function (x) { this.period = x; }; Acts.prototype.SetMagnitude = function (x) { this.mag = x; if (this.movement === 5) // angle this.mag = cr.to_radians(this.mag); }; Acts.prototype.SetMovement = function (m) { if (this.movement === 5) this.mag = cr.to_degrees(this.mag); this.movement = m; this.init(); }; Acts.prototype.SetWave = function (w) { this.wave = w; }; Acts.prototype.SetPhase = function (x) { this.i = (x * _2pi) % _2pi; }; behaviorProto.acts = new Acts(); function Exps() {}; Exps.prototype.CyclePosition = function (ret) { ret.set_float(this.i / _2pi); }; Exps.prototype.Period = function (ret) { ret.set_float(this.period); }; Exps.prototype.Magnitude = function (ret) { if (this.movement === 5) // angle ret.set_float(cr.to_degrees(this.mag)); else ret.set_float(this.mag); }; Exps.prototype.Value = function (ret) { ret.set_float(this.waveFunc(this.i) * this.mag); }; behaviorProto.exps = new Exps(); }()); ; ; cr.behaviors.solid = function(runtime) { this.runtime = runtime; }; (function () { var behaviorProto = cr.behaviors.solid.prototype; behaviorProto.Type = function(behavior, objtype) { this.behavior = behavior; this.objtype = objtype; this.runtime = behavior.runtime; }; var behtypeProto = behaviorProto.Type.prototype; behtypeProto.onCreate = function() { }; behaviorProto.Instance = function(type, inst) { this.type = type; this.behavior = type.behavior; this.inst = inst; // associated object instance to modify this.runtime = type.runtime; }; var behinstProto = behaviorProto.Instance.prototype; behinstProto.onCreate = function() { this.inst.extra.solidEnabled = (this.properties[0] !== 0); }; behinstProto.tick = function () { }; function Cnds() {}; Cnds.prototype.IsEnabled = function () { return this.inst.extra.solidEnabled; }; behaviorProto.cnds = new Cnds(); function Acts() {}; Acts.prototype.SetEnabled = function (e) { this.inst.extra.solidEnabled = !!e; }; behaviorProto.acts = new Acts(); }()); cr.getProjectModel = function() { return [ null, "Loading", [ [ cr.plugins_.Browser, true, false, false, false, false, false, false, false, false ] , [ cr.plugins_.Audio, true, false, false, false, false, false, false, false, false ] , [ cr.plugins_.Keyboard, true, false, false, false, false, false, false, false, false ] , [ cr.plugins_.Mouse, true, false, false, false, false, false, false, false, false ] , [ cr.plugins_.Sprite, false, true, true, true, true, true, true, true, false ] , [ cr.plugins_.Spritefont2, false, true, true, true, true, true, true, true, true ] , [ cr.plugins_.TiledBg, false, true, true, true, true, true, true, true, true ] , [ cr.plugins_.Touch, true, false, false, false, false, false, false, false, false ] , [ cr.plugins_.WebStorage, true, false, false, false, false, false, false, false, false ] ], [ [ "t0", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9129523786384768, [ ["images/btnleft-sheet0.png", 11833, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 2936413078645254, [], null ] , [ "t1", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 3542393951694915, [ ["images/btnmenu-sheet0.png", 12835, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3299601170435198, [], null ] , [ "t2", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "PauseON", 5, false, 1, 0, false, 9996798617883216, [ ["images/btnpause-sheet0.png", 12233, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] , [ "PauseOFF", 5, false, 1, 0, false, 4947203562200396, [ ["images/btnpause-sheet1.png", 11503, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 176825439006082, [], null ] , [ "t3", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1072824472225361, [ ["images/btninfo-sheet0.png", 11897, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 5054807478948511, [], null ] , [ "t4", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 803069019545285, [ ["images/btnmoregames-sheet0.png", 11799, 0, 0, 261, 234, 1, 0.5019156932830811, 0.5,[],[],0] ] ] ], [ ], false, false, 715664407092078, [], null ] , [ "t5", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "MusicON", 5, false, 1, 0, false, 9619042206571097, [ ["images/btnmusic-sheet0.png", 12344, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] , [ "MusicOFF", 5, false, 1, 0, false, 9929902425475106, [ ["images/btnmusic-sheet1.png", 14077, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 9646628255266154, [], null ] , [ "t6", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8119102382330997, [ ["images/btnplay-sheet0.png", 46291, 0, 0, 300, 300, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 5316567393187423, [], null ] , [ "t7", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7425509760993616, [ ["images/btnrestart-sheet0.png", 12812, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 7279992618571643, [], null ] , [ "t8", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 5304017814927498, [ ["images/btnhome-sheet0.png", 11428, 0, 0, 110, 110, 1, 0.5, 0.5,[],[0.5,0.5,-0.5,0.5,-0.5,-0.5,0.5,-0.5],0] ] ] ], [ ], false, false, 2509932120139382, [], null ] , [ "t9", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9906360157953906, [ ["images/btnright-sheet0.png", 11790, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3165622863387263, [], null ] , [ "t10", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "SoundON", 5, false, 1, 0, false, 2298555843452549, [ ["images/btnsound-sheet0.png", 12839, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] , [ "SoundOFF", 5, false, 1, 0, false, 7511668879003382, [ ["images/btnsound-sheet1.png", 14485, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 236444748083455, [], null ] , [ "t11", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 0, false, 1, 0, false, 2923116395705254, [ ["images/cursor-sheet0.png", 3889, 67, 1, 28, 40, 1, 0.3571428656578064, 0.02500000037252903,[],[],0], ["images/cursor-sheet0.png", 3889, 1, 1, 64, 64, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 493201377246635, [], null ] , [ "t12", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 0, false, 1, 0, false, 1766147429691876, [ ["images/cursorhover-sheet0.png", 4717, 67, 1, 28, 40, 1, 0.3571428656578064, 0.02500000037252903,[],[],0], ["images/cursorhover-sheet0.png", 4717, 1, 1, 64, 64, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 9276547155778238, [], null ] , [ "t13", cr.plugins_.Spritefont2, false, [], 0, 0, ["images/scorefont.png", 94670, 0], null, [ ], false, false, 2228849329748515, [], null ] , [ "t14", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 9982328057177836, [ ["images/sunlight-sheet0.png", 135790, 0, 0, 662, 662, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Rotate", cr.behaviors.Rotate, 1305574658229988 ] ], false, false, 2099786131239821, [], null ] , [ "t15", cr.plugins_.Spritefont2, false, [], 0, 0, ["images/magazinefont.png", 98566, 0], null, [ ], false, false, 4950876878223394, [], null ] , [ "t16", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "FullscreenON", 5, false, 1, 0, false, 497245855563842, [ ["images/btnfullscreen-sheet0.png", 12196, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] , [ "FullscreenOFF", 5, false, 1, 0, false, 6525280525817383, [ ["images/btnfullscreen-sheet1.png", 12134, 0, 0, 110, 110, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 5993151613532956, [], null ] , [ "t17", cr.plugins_.Spritefont2, false, [], 0, 0, ["images/scorefont.png", 94670, 0], null, [ ], false, false, 6388610642427932, [], null ] , [ "t18", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 349517559448237, [ ["images/playerzone-sheet0.png", 140, 0, 0, 16, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 4390962653476727, [], null ] , [ "t19", cr.plugins_.Spritefont2, false, [], 0, 0, ["images/killsfont.png", 100918, 0], null, [ ], false, false, 8699493572571821, [], null ] , [ "t20", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 6461400368837027, [ ["images/btnscreenshot-sheet0.png", 5297, 0, 0, 128, 128, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3226408095199039, [], null ] , [ "t21", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 0, false, 1, 0, false, 8681103089906776, [ ["images/frame-sheet0.png", 31779, 1, 153, 512, 192, 1, 0.5, 0.5,[],[],0], ["images/frame-sheet0.png", 31779, 1, 1, 1000, 150, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 9687884067205136, [], null ] , [ "t22", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7039066700343425, [ ["images/killsframe-sheet0.png", 8311, 0, 0, 70, 72, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 2309706245172839, [], null ] , [ "t23", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9093727413972097, [ ["images/magazineframe-sheet0.png", 4142, 0, 0, 54, 72, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 9154830489150409, [], null ] , [ "t24", cr.plugins_.Spritefont2, false, [], 1, 0, ["images/magazinefont.png", 98566, 0], null, [ [ "Fade", cr.behaviors.Fade, 5028085659324728 ] ], false, false, 3228210023844801, [], null ] , [ "t25", cr.plugins_.Spritefont2, false, [], 1, 0, ["images/magazinefont.png", 98566, 0], null, [ [ "Fade", cr.behaviors.Fade, 4430102549067784 ] ], false, false, 6764660182633465, [], null ] , [ "t26", cr.plugins_.Spritefont2, false, [], 0, 0, ["images/killsfont.png", 100918, 0], null, [ ], false, false, 8945387346560818, [], null ] , [ "t27", cr.plugins_.Spritefont2, false, [], 0, 0, ["images/magazinefont.png", 98566, 0], null, [ ], false, false, 4394531536085616, [], null ] , [ "t28", cr.plugins_.Sprite, false, [9456805718639482], 0, 0, null, [ [ "Default", 0, false, 1, 0, false, 7412629966261278, [ ["images/btnlevels-sheet0.png", 32647, 1, 1, 180, 200, 1, 0.5, 0.5,[],[],0], ["images/btnlevels-sheet0.png", 32647, 183, 1, 180, 200, 1, 0.5, 0.5,[],[],0], ["images/btnlevels-sheet0.png", 32647, 1, 203, 180, 200, 1, 0.5, 0.5,[],[],0], ["images/btnlevels-sheet0.png", 32647, 183, 203, 180, 200, 1, 0.5, 0.5,[],[],0], ["images/btnlevels-sheet1.png", 8907, 0, 0, 180, 200, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 4948721343888123, [], null ] , [ "t29", cr.plugins_.Spritefont2, false, [4902224337075244], 1, 0, ["images/levelsfont.png", 36045, 0], null, [ [ "Sine", cr.behaviors.Sin, 8189304529106444 ] ], false, false, 6347477707775566, [], null ] , [ "t30", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1871140385514345, [ ["images/levelselect-sheet0.png", 13050, 0, 0, 700, 70, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 4081123690958734, [], null ] , [ "t31", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 3879012071041406, [ ["images/levelcompletedframe-sheet0.png", 225614, 0, 0, 600, 600, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3183678542231115, [], null ] , [ "t32", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8348863776843728, [ ["images/btnmenubig-sheet0.png", 18861, 0, 0, 137, 143, 1, 0.5109488964080811, 0.5104895234107971,[],[],0] ] ] ], [ ], false, false, 6141607346849389, [], null ] , [ "t33", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 4307597035033003, [ ["images/btnnextlevel-sheet0.png", 17651, 0, 0, 137, 143, 1, 0.5036496520042419, 0.503496527671814,[],[],0] ] ] ], [ ], false, false, 2309327241125567, [], null ] , [ "t34", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 666783261827661, [ ["images/btnrestartbig-sheet0.png", 18826, 0, 0, 137, 143, 1, 0.5036496520042419, 0.503496527671814,[],[],0] ] ] ], [ ], false, false, 7774651475470874, [], null ] , [ "t35", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "On", 1, false, 1, 0, false, 2417716367424578, [ ["images/star_1-sheet0.png", 21147, 0, 0, 138, 140, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3668243498271634, [], null ] , [ "t36", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 3206214914511127, [ ["images/star_1_base-sheet0.png", 6900, 0, 0, 130, 132, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3159559784337541, [], null ] , [ "t37", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "On", 1, false, 1, 0, false, 2826332950967425, [ ["images/star_2-sheet0.png", 27068, 0, 0, 175, 167, 1, 0.5028571486473084, 0.5029940009117127,[],[],0] ] ] ], [ ], false, false, 3077585149997318, [], null ] , [ "t38", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2041561513461886, [ ["images/star_2_base-sheet0.png", 8719, 0, 0, 175, 167, 1, 0.5028571486473084, 0.5029940009117127,[],[],0] ] ] ], [ ], false, false, 1363734954363143, [], null ] , [ "t39", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "On", 1, false, 1, 0, false, 2653928220650925, [ ["images/star_3-sheet0.png", 20509, 0, 0, 138, 139, 1, 0.5, 0.5035971403121948,[],[],0] ] ] ], [ ], false, false, 4618243179005842, [], null ] , [ "t40", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7906207761926212, [ ["images/star_3_base-sheet0.png", 6932, 0, 0, 138, 139, 1, 0.5, 0.5035971403121948,[],[],0] ] ] ], [ ], false, false, 9245750094537907, [], null ] , [ "t41", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 0, false, 1, 0, false, 7296072486319487, [ ["images/levelcompletedtext-sheet0.png", 64579, 1, 1, 640, 128, 1, 0.5, 0.5,[],[],0], ["images/levelcompletedtext-sheet0.png", 64579, 1, 131, 640, 128, 1, 0.5, 0.5,[],[],0], ["images/levelcompletedtext-sheet0.png", 64579, 1, 261, 640, 128, 1, 0.5, 0.5,[],[],0], ["images/levelcompletedtext-sheet0.png", 64579, 1, 391, 640, 128, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Sine", cr.behaviors.Sin, 6797897311688116 ] ], false, false, 9325984273818881, [], null ] , [ "t42", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 0, false, 1, 0, false, 2325016722271286, [ ["images/background_part_1-sheet0.png", 97174, 1, 1, 1920, 960, 1, 0.5, 0.5,[],[],0], ["images/background_part_1-sheet0.png", 97174, 1, 963, 1920, 960, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 3992375054181664, [], null ] , [ "t43", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 0, false, 1, 0, false, 9183545134018548, [ ["images/background_part_2-sheet0.png", 126340, 1, 1, 1920, 398, 1, 0.5, 0.5,[],[],0], ["images/background_part_2-sheet0.png", 126340, 1, 401, 1920, 398, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Sine", cr.behaviors.Sin, 1889878597031143 ] ], false, false, 2052581038519326, [], null ] , [ "t44", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 5424326597842014, [ ["images/background_part_3-sheet0.png", 134741, 0, 0, 1920, 274, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Sine", cr.behaviors.Sin, 8005267195885496 ] ], false, false, 4506580576256088, [], null ] , [ "t45", cr.plugins_.TiledBg, false, [], 2, 0, ["images/smoke_1.png", 19459, 0], null, [ [ "Bullet", cr.behaviors.Bullet, 7184633819719223 ] , [ "Sine", cr.behaviors.Sin, 6010656562708047 ] ], false, false, 5491633402017752, [], null ] , [ "t46", cr.plugins_.TiledBg, false, [], 2, 0, ["images/smoke_2.png", 14561, 0], null, [ [ "Bullet", cr.behaviors.Bullet, 9228100236545029 ] , [ "Sine", cr.behaviors.Sin, 1232250296711784 ] ], false, false, 3100024741078018, [], null ] , [ "t47", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 0, false, 1, 0, false, 5376593237886195, [ ["images/sun-sheet0.png", 41048, 1, 1, 333, 253, 1, 0.5015015006065369, 0.5019763112068176,[],[],0], ["images/sun-sheet0.png", 41048, 1, 256, 333, 253, 1, 0.5015015006065369, 0.5019763112068176,[],[],0] ] ] ], [ ], false, false, 7480589064982047, [], null ] , [ "t48", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 1806810916479002, [ ["images/gamelogo-sheet0.png", 277253, 0, 0, 1024, 512, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Sine", cr.behaviors.Sin, 1809042530087715 ] ], false, false, 9127393359807706, [], null ] , [ "t49", cr.plugins_.Audio, false, [], 0, 0, null, null, [ ], false, false, 3712534451485021, [], null ,[0,0,1,1,600,600,10000,1,5000,1] ] , [ "t50", cr.plugins_.Browser, false, [], 0, 0, null, null, [ ], false, false, 9964248079545776, [], null ,[] ] , [ "t51", cr.plugins_.Keyboard, false, [], 0, 0, null, null, [ ], false, false, 1585642040210775, [], null ,[] ] , [ "t52", cr.plugins_.Mouse, false, [], 0, 0, null, null, [ ], false, false, 6317912906987195, [], null ,[] ] , [ "t53", cr.plugins_.Touch, false, [], 0, 0, null, null, [ ], false, false, 8668376113493913, [], null ,[1] ] , [ "t54", cr.plugins_.WebStorage, false, [], 0, 0, null, null, [ ], false, false, 5981584057185597, [], null ,[] ] , [ "t55", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 2366757197138168, [ ["images/loading-sheet0.png", 4390, 0, 0, 64, 64, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Rotate", cr.behaviors.Rotate, 9722951157889943 ] ], false, true, 1423154209089245, [], null ] , [ "t56", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 4, true, 1, 0, false, 1177476104547402, [ ["images/loadingtext-sheet0.png", 40822, 1, 1, 256, 64, 1, 0.5, 0.5,[],[],0], ["images/loadingtext-sheet0.png", 40822, 1, 67, 256, 64, 1, 0.5, 0.5,[],[],0], ["images/loadingtext-sheet0.png", 40822, 1, 133, 256, 64, 1, 0.5, 0.5,[],[],0], ["images/loadingtext-sheet0.png", 40822, 1, 199, 256, 64, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, true, 5668404107291095, [], null ] , [ "t57", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9505380361698905, [ ["images/gameicon-sheet0.png", 116470, 0, 0, 256, 256, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, true, 8664498133462144, [], null ] , [ "t58", cr.plugins_.Sprite, false, [], 2, 0, null, [ [ "Default", 5, false, 1, 0, false, 3364523478199356, [ ["images/anchor_1-sheet0.png", 460, 0, 0, 36, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 8385425971443877 ] , [ "Physics", cr.behaviors.Physics, 8329383612406423 ] ], false, false, 7706167868265359, [], null ] , [ "t59", cr.plugins_.Sprite, false, [], 2, 0, null, [ [ "Default", 5, false, 1, 0, false, 7019653330529002, [ ["images/anchor_1-sheet0.png", 460, 0, 0, 36, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 918289260490926 ] , [ "Physics", cr.behaviors.Physics, 1641312152409074 ] ], false, false, 687975143275261, [], null ] , [ "t60", cr.plugins_.Sprite, false, [], 2, 0, null, [ [ "Default", 5, false, 1, 0, false, 2495614920999423, [ ["images/anchor_1-sheet0.png", 460, 0, 0, 36, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 5335652362570827 ] , [ "Physics", cr.behaviors.Physics, 357179219964008 ] ], false, false, 4938471714781403, [], null ] , [ "t61", cr.plugins_.Sprite, false, [], 2, 0, null, [ [ "Default", 5, false, 1, 0, false, 7126802337048892, [ ["images/anchor_1-sheet0.png", 460, 0, 0, 36, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 8313049298784512 ] , [ "Physics", cr.behaviors.Physics, 3691900664426928 ] ], false, false, 8329866062120447, [], null ] , [ "t62", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 6413475296886337, [ ["images/anchorobject_1-sheet0.png", 156, 0, 0, 16, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 6613098020916477 ] ], false, false, 8829879927760345, [], null ] , [ "t63", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 9315505317363226, [ ["images/anchorobject_2-sheet0.png", 140, 0, 0, 16, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 4780598884944224 ] ], false, false, 6425017179040466, [], null ] , [ "t64", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 5401519586867352, [ ["images/anchorobject_3-sheet0.png", 140, 0, 0, 16, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 6619440689891047 ] ], false, false, 4235645671281072, [], null ] , [ "t65", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 7595307537086614, [ ["images/anchorobject_4-sheet0.png", 140, 0, 0, 16, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 1048556077662354 ] ], false, false, 1208482751506304, [], null ] , [ "t66", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 3542588700738581, [ ["images/ball-sheet0.png", 7436, 0, 0, 128, 128, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 8924608169859321 ] ], false, false, 6924662820637453, [], null ] , [ "t67", cr.plugins_.TiledBg, false, [], 2, 0, ["images/block.png", 4310, 0], null, [ [ "Solid", cr.behaviors.solid, 944273427127345 ] , [ "Physics", cr.behaviors.Physics, 6692888683582443 ] ], false, false, 9826695854524786, [], null ] , [ "t68", cr.plugins_.Sprite, false, [649563301983387], 2, 0, null, [ [ "Default", 0, false, 1, 0, false, 6512219145168674, [ ["images/bullet-sheet0.png", 781, 0, 0, 28, 11, 1, 0.5, 0.5454545617103577,[],[],0] ] ] ], [ [ "Bullet", cr.behaviors.Bullet, 2018521606016438 ] , [ "Physics", cr.behaviors.Physics, 1127288151525117 ] ], false, false, 9308928732763306, [], null ] , [ "t69", cr.plugins_.Sprite, false, [], 2, 0, null, [ [ "Default", 5, false, 1, 0, false, 1389776585352447, [ ["images/collision-sheet0.png", 158, 0, 0, 32, 32, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 5622412574190845 ] , [ "Physics", cr.behaviors.Physics, 6799817121215541 ] ], false, false, 2539148314732154, [], null ] , [ "t70", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 0, false, 1, 0, false, 6462532408965956, [ ["images/link_1-sheet0.png", 1084, 1, 19, 26, 8, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0], ["images/link_1-sheet0.png", 1084, 1, 1, 26, 16, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 9171732959299138 ] ], false, false, 7456009090818837, [], null ] , [ "t71", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 0, false, 1, 0, false, 5480176921451734, [ ["images/link_1-sheet0.png", 1084, 1, 19, 26, 8, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0], ["images/link_1-sheet0.png", 1084, 1, 1, 26, 16, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 8232350425201106 ] ], false, false, 4172635549419419, [], null ] , [ "t72", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 0, false, 1, 0, false, 4913616095478179, [ ["images/link_1-sheet0.png", 1084, 1, 19, 26, 8, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0], ["images/link_1-sheet0.png", 1084, 1, 1, 26, 16, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 1580137550156115 ] ], false, false, 8657491479475866, [], null ] , [ "t73", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 0, false, 1, 0, false, 5379376852335633, [ ["images/link_1-sheet0.png", 1084, 1, 19, 26, 8, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0], ["images/link_1-sheet0.png", 1084, 1, 1, 26, 16, 1, 0.5, 0.5,[["Left", 0.2307692319154739, 0.5],["Right", 0.7692307829856873, 0.5]],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 2522093829162962 ] ], false, false, 6913351604479689, [], null ] , [ "t74", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 4641915836307597, [ ["images/zombie_1_part_1-sheet0.png", 11979, 0, 0, 86, 89, 1, 0.5, 0,[],[-0.337680995464325,0.1568630039691925,-0.001448988914489746,0,0.3637679815292358,0.1316529959440231,0.5,0.4985989928245544,0.3057969808578491,0.8123250007629395,-0.001448988914489746,1,-0.2768120169639587,0.784313976764679,-0.4797101020812988,0.4985989928245544],0] ] ] ], [ ], false, false, 981511733222754, [], null ] , [ "t75", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 964039605958345, [ ["images/zombie_1_part_2-sheet0.png", 4255, 0, 0, 51, 63, 1, 0.5098039507865906, 0.5079365372657776,[],[-0.3921569585800171,-0.4126984477043152,-0.01960796117782593,-0.5079365372657776,0.2941180467605591,-0.3492065370082855,0.4705880284309387,-0.01587355136871338,0.3725490570068359,0.3968254327774048,-0.01960796117782593,0.4920634627342224,-0.3921569585800171,0.3968254327774048,-0.4901961386203766,-0.01587355136871338],0] ] ] ], [ ], false, false, 4226020432336009, [], null ] , [ "t76", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8103005305028293, [ ["images/zombie_1_part_3-sheet0.png", 4287, 0, 0, 25, 88, 1, 0.4799999892711639, 0.1363636404275894,[],[-0.239999994635582,-0.0681818425655365,0,-0.1363636404275894,0.2800000011920929,-0.0681818425655365,0.320000022649765,0.3636363744735718,0.2400000393390656,0.7840913534164429,0,0.8636363744735718,-0.4399999976158142,0.8522723913192749,-0.1599999964237213,0.3636363744735718],0] ] ] ], [ ], false, false, 9135905942861348, [], null ] , [ "t77", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1209544684702971, [ ["images/zombie_1_part_4-sheet0.png", 4276, 0, 0, 26, 91, 1, 0.5769230723381043, 0.1318681389093399,[],[-0.3076920807361603,-0.05494503676891327,-0.07692307233810425,-0.1318681389093399,0.2692309021949768,-0.08791214227676392,0.2307689189910889,0.3626368641853333,0.2307689189910889,0.8131868839263916,-0.07692307233810425,0.8681318759918213,-0.4999999701976776,0.8461538553237915,-0.2307690680027008,0.3626368641853333],0] ] ] ], [ ], false, false, 9032685646724405, [], null ] , [ "t78", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7081539605593203, [ ["images/zombie_1_part_5-sheet0.png", 2547, 0, 0, 30, 49, 1, 0.6666666865348816, 0.1020408198237419,[],[-0.3666666746139526,0.08163217455148697,-0.1666666865348816,-0.08163262158632278,0.2666662931442261,-0.06122452020645142,0.03333330154418945,0.3877551853656769,0.1666663289070129,0.7959181666374207,-0.1666666865348816,0.8979591727256775,-0.5999999642372131,0.8571431636810303,-0.5666666626930237,0.3877551853656769],0] ] ] ], [ ], false, false, 3692233161452555, [], null ] , [ "t79", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9363276983422412, [ ["images/zombie_1_part_6-sheet0.png", 2732, 0, 0, 36, 53, 1, 0.25, 0.1698113232851028,[],[-0.1666667014360428,-0.1132075190544128,0.25,-0.03773632645606995,0.3055559992790222,0.1320756822824478,0.4722219705581665,0.3207546472549439,0.6111109852790833,0.7358486652374268,0.25,0.8113206624984741,0.1388889849185944,0.5660377144813538,-0.08333300054073334,0.3207546472549439],0] ] ] ], [ ], false, false, 8464489297522572, [], null ] , [ "t80", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 650678073766785, [ ["images/zombie_2_part_1-sheet0.png", 14468, 0, 0, 106, 89, 1, 0.5, 0,[],[-0.337680995464325,0.1568630039691925,-0.001448988914489746,0,0.3637679815292358,0.1316529959440231,0.5,0.4985989928245544,0.3057969808578491,0.8123250007629395,-0.001448988914489746,1,-0.2768120169639587,0.784313976764679,-0.4797101020812988,0.4985989928245544],0] ] ] ], [ ], false, false, 6660447137120458, [], null ] , [ "t81", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2870938330621875, [ ["images/zombie_2_part_2-sheet0.png", 4228, 0, 0, 51, 63, 1, 0.5098039507865906, 0.5079365372657776,[],[-0.3921569585800171,-0.4126984477043152,-0.01960796117782593,-0.5079365372657776,0.2941180467605591,-0.3492065370082855,0.4705880284309387,-0.01587355136871338,0.3725490570068359,0.3968254327774048,-0.01960796117782593,0.4920634627342224,-0.3921569585800171,0.3968254327774048,-0.4901961386203766,-0.01587355136871338],0] ] ] ], [ ], false, false, 251995933575883, [], null ] , [ "t82", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2585253308092728, [ ["images/zombie_2_part_3-sheet0.png", 4390, 0, 0, 25, 90, 1, 0.4799999892711639, 0.1333333402872086,[],[-0.239999994635582,-0.06515154242515564,0,-0.1333333402872086,0.2800000011920929,-0.06515154242515564,0.320000022649765,0.3666666746139526,0.2400000393390656,0.7871216535568237,0,0.8666666746139526,-0.4399999976158142,0.8553026914596558,-0.1599999964237213,0.3666666746139526],0] ] ] ], [ ], false, false, 3322565287401257, [], null ] , [ "t83", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 4973978128471184, [ ["images/zombie_2_part_4-sheet0.png", 4265, 0, 0, 28, 88, 1, 0.5714285969734192, 0.1363636404275894,[],[-0.5,-0.1136363446712494,-0.07142859697341919,-0.09090913832187653,0.07142841815948486,-0.02272763848304749,0.2500004172325134,0.3636363744735718,0.2142853736877441,0.7954543828964233,-0.07142859697341919,0.8409093618392944,-0.4642856121063232,0.8295453786849976,-0.1785716116428375,0.3636363744735718],0] ] ] ], [ ], false, false, 6788727493926383, [], null ] , [ "t84", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7905816570902311, [ ["images/zombie_2_part_5-sheet0.png", 2520, 0, 0, 30, 49, 1, 0.6666666865348816, 0.1020408198237419,[],[-0.3666666746139526,0.08163217455148697,-0.1666666865348816,-0.08163262158632278,0.2666662931442261,-0.06122452020645142,0.03333330154418945,0.3877551853656769,0.1666663289070129,0.7959181666374207,-0.1666666865348816,0.8979591727256775,-0.5999999642372131,0.8571431636810303,-0.5666666626930237,0.3877551853656769],0] ] ] ], [ ], false, false, 8031753179649202, [], null ] , [ "t85", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2467393348725709, [ ["images/zombie_2_part_6-sheet0.png", 2719, 0, 0, 36, 53, 1, 0.25, 0.1698113232851028,[],[-0.1666667014360428,-0.1132075190544128,0.25,-0.03773632645606995,0.3055559992790222,0.1320756822824478,0.4722219705581665,0.3207546472549439,0.6111109852790833,0.7358486652374268,0.25,0.8113206624984741,0.1388889849185944,0.5660377144813538,-0.08333300054073334,0.3207546472549439],0] ] ] ], [ ], false, false, 7871816848603854, [], null ] , [ "t86", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8035814459013564, [ ["images/zombie_3_part_1-sheet0.png", 11547, 0, 0, 86, 89, 1, 0.5, 0,[],[-0.337680995464325,0.1568630039691925,-0.001448988914489746,0,0.3637679815292358,0.1316529959440231,0.5,0.4985989928245544,0.3057969808578491,0.8123250007629395,-0.001448988914489746,1,-0.2768120169639587,0.784313976764679,-0.4797101020812988,0.4985989928245544],0] ] ] ], [ ], false, false, 5836620099755118, [], null ] , [ "t87", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1823827538715569, [ ["images/zombie_3_part_2-sheet0.png", 5195, 0, 0, 67, 68, 1, 0.5074626803398132, 0.5147058963775635,[],[-0.3898156881332398,-0.4194678068161011,-0.01726669073104858,-0.5147058963775635,0.2964593172073364,-0.3559758961200714,0.4729292988777161,-0.02264291048049927,0.3748903274536133,0.3900560736656189,-0.01726669073104858,0.4852941036224365,-0.3898156881332398,0.3900560736656189,-0.4878548681735992,-0.02264291048049927],0] ] ] ], [ ], false, false, 2004289116238187, [], null ] , [ "t88", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2409295638285823, [ ["images/zombie_3_part_3-sheet0.png", 4463, 0, 0, 26, 97, 1, 0.4615384638309479, 0.1340206116437912,[],[-0.3076924681663513,-0.09278351068496704,0.03846153616905212,-0.1237113103270531,0.230769544839859,-0.05154640972614288,0.1538465321063995,0.3608244061470032,0.3076925575733185,0.8041234016418457,0.03846153616905212,0.8659793734550476,-0.3846153616905212,0.8453603982925415,-0.2692304849624634,0.3608244061470032],0] ] ] ], [ ], false, false, 422307590307005, [], null ] , [ "t89", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9600247965031052, [ ["images/zombie_3_part_4-sheet0.png", 4237, 0, 0, 27, 90, 1, 0.5925925970077515, 0.1333333402872086,[],[-0.2222225964069367,-0.02222234010696411,-0.1111116111278534,-0.1111111417412758,0.2962964177131653,-0.1000000387430191,0.2222223877906799,0.8111106753349304,-0.1111116111278534,0.8666666746139526,-0.4814816117286682,0.8333336710929871,-0.2962965965270996,0.3666666746139526],0] ] ] ], [ ], false, false, 6573550720707781, [], null ] , [ "t90", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7053388033690277, [ ["images/zombie_3_part_5-sheet0.png", 2668, 0, 0, 30, 49, 1, 0.6666666865348816, 0.1020408198237419,[],[-0.3666666746139526,0.08163217455148697,-0.1666666865348816,-0.08163262158632278,0.2666662931442261,-0.06122452020645142,0.03333330154418945,0.3877551853656769,0.1666663289070129,0.7959181666374207,-0.1666666865348816,0.8979591727256775,-0.5999999642372131,0.8571431636810303,-0.5666666626930237,0.3877551853656769],0] ] ] ], [ ], false, false, 2192839433817015, [], null ] , [ "t91", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7192800890505259, [ ["images/zombie_3_part_6-sheet0.png", 2683, 0, 0, 36, 52, 1, 0.25, 0.1730769276618958,[],[-0.1666667014360428,-0.1164731234312058,0.25,-0.04100193083286285,0.3055559992790222,0.1288100779056549,0.4722219705581665,0.3174890577793121,0.6111109852790833,0.7325830459594727,0.25,0.80805504322052,0.1388889849185944,0.5627720952033997,-0.08333300054073334,0.3174890577793121],0] ] ] ], [ ], false, false, 1636374595993115, [], null ] , [ "t92", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9187334460050751, [ ["images/zombie_4_part_1-sheet0.png", 15194, 0, 0, 105, 89, 1, 0.5047619342803955, 0,[],[-0.3424429297447205,0.1568630039691925,-0.006210923194885254,0,0.3590060472488403,0.1316529959440231,0.4952380657196045,0.4985989928245544,0.3010350465774536,0.8123250007629395,-0.006210923194885254,1,-0.2815739512443543,0.784313976764679,-0.4844720363616943,0.4985989928245544],0] ] ] ], [ ], false, false, 2236072825081002, [], null ] , [ "t93", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2415277759515629, [ ["images/zombie_4_part_2-sheet0.png", 4772, 0, 0, 63, 68, 1, 0.5079365372657776, 0.5147058963775635,[],[-0.3902895450592041,-0.4194678068161011,-0.01774054765701294,-0.5147058963775635,0.2959854602813721,-0.3559758961200714,0.4724554419517517,-0.02264291048049927,0.3744164705276489,0.3900560736656189,-0.01774054765701294,0.4852941036224365,-0.3902895450592041,0.3900560736656189,-0.4883287250995636,-0.02264291048049927],0] ] ] ], [ ], false, false, 5146170778293459, [], null ] , [ "t94", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1625257682244637, [ ["images/zombie_4_part_3-sheet0.png", 4520, 0, 0, 31, 89, 1, 0.4838709533214569, 0.1348314583301544,[],[-0.4193548560142517,-0.1123595610260963,5.960464477539063e-008,-0.04494386166334152,0.09677407145500183,0.01123553514480591,0.322581022977829,0.3595505356788635,0.2903230488300324,0.786516547203064,5.960464477539063e-008,0.8089885711669922,-0.2903229594230652,0.7977524995803833,-0.06451594829559326,0.3595505356788635],0] ] ] ], [ ], false, false, 6053208907141223, [], null ] , [ "t95", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1604333029756951, [ ["images/zombie_4_part_4-sheet0.png", 4388, 0, 0, 30, 89, 1, 0.5666666626930237, 0.1348314583301544,[],[-0.4999999701976776,-0.1123595610260963,-0.06666666269302368,-0.07865165919065476,0.06666636466979981,-0.01123546063899994,0.3333333134651184,0.3595505356788635,0.2666663527488709,0.8089885711669922,-0.06666666269302368,0.8314605951309204,-0.4333336651325226,0.8202245235443115,-0.09999966621398926,0.3595505356788635],0] ] ] ], [ ], false, false, 1503997641657242, [], null ] , [ "t96", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8241329173955844, [ ["images/zombie_4_part_5-sheet0.png", 2522, 0, 0, 30, 49, 1, 0.6666666865348816, 0.1020408198237419,[],[-0.3666666746139526,0.08163217455148697,-0.1666666865348816,-0.08163262158632278,0.2666662931442261,-0.06122452020645142,0.03333330154418945,0.3877551853656769,0.1666663289070129,0.7959181666374207,-0.1666666865348816,0.8979591727256775,-0.5999999642372131,0.8571431636810303,-0.5666666626930237,0.3877551853656769],0] ] ] ], [ ], false, false, 1310191764239747, [], null ] , [ "t97", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 3797432036700923, [ ["images/zombie_4_part_6-sheet0.png", 2852, 0, 0, 36, 53, 1, 0.25, 0.1698113232851028,[],[-0.1666667014360428,-0.1132075190544128,0.25,-0.03773632645606995,0.3055559992790222,0.1320756822824478,0.4722219705581665,0.3207546472549439,0.6111109852790833,0.7358486652374268,0.25,0.8113206624984741,0.1388889849185944,0.5660377144813538,-0.08333300054073334,0.3207546472549439],0] ] ] ], [ ], false, false, 3331580732536314, [], null ] , [ "t98", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1161954610461065, [ ["images/zombie_5_part_1-sheet0.png", 11979, 0, 0, 86, 89, 1, 0.5, 0,[],[-0.337680995464325,0.1568630039691925,-0.001448988914489746,0,0.3637679815292358,0.1316529959440231,0.5,0.4985989928245544,0.3057969808578491,0.8123250007629395,-0.001448988914489746,1,-0.2768120169639587,0.784313976764679,-0.4797101020812988,0.4985989928245544],0] ] ] ], [ ], false, false, 162869372773031, [], null ] , [ "t99", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8213741595534776, [ ["images/zombie_5_part_2-sheet0.png", 4344, 0, 0, 51, 63, 1, 0.5098039507865906, 0.5079365372657776,[],[-0.3921569585800171,-0.4126984477043152,-0.01960796117782593,-0.5079365372657776,0.2941180467605591,-0.3492065370082855,0.4705880284309387,-0.01587355136871338,0.3529410362243652,0.3809524774551392,-0.01960796117782593,0.4920634627342224,-0.3921569585800171,0.3968254327774048,-0.4901961386203766,-0.01587355136871338],0] ] ] ], [ ], false, false, 6991212136570856, [], null ] , [ "t100", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1069058788145968, [ ["images/zombie_5_part_3-sheet0.png", 4405, 0, 0, 25, 90, 1, 0.4799999892711639, 0.1333333402872086,[],[-0.239999994635582,-0.06515154242515564,0,-0.1333333402872086,0.2800000011920929,-0.06515154242515564,0.320000022649765,0.3666666746139526,0.2400000393390656,0.7871216535568237,0,0.8666666746139526,-0.4399999976158142,0.8553026914596558,-0.1599999964237213,0.3666666746139526],0] ] ] ], [ ], false, false, 585100218658023, [], null ] , [ "t101", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9963640520197487, [ ["images/zombie_5_part_4-sheet0.png", 4365, 0, 0, 30, 91, 1, 0.5666666626930237, 0.1318681389093399,[],[-0.2974356710910797,-0.05494503676891327,-0.06666666269302368,-0.1318681389093399,0.2794873118400574,-0.08791214227676392,0.2410253286361694,0.3626368641853333,0.2410253286361694,0.8131868839263916,-0.06666666269302368,0.8681318759918213,-0.4897435605525971,0.8461538553237915,-0.2205126583576202,0.3626368641853333],0] ] ] ], [ ], false, false, 9843338208590317, [], null ] , [ "t102", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8628441334265482, [ ["images/zombie_5_part_5-sheet0.png", 2588, 0, 0, 30, 49, 1, 0.6666666865348816, 0.1020408198237419,[],[-0.3666666746139526,0.08163217455148697,-0.1666666865348816,-0.08163262158632278,0.2666662931442261,-0.06122452020645142,0.03333330154418945,0.3877551853656769,0.1666663289070129,0.7959181666374207,-0.1666666865348816,0.8979591727256775,-0.5999999642372131,0.8571431636810303,-0.5666666626930237,0.3877551853656769],0] ] ] ], [ ], false, false, 5337803760736563, [], null ] , [ "t103", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 3706002198290695, [ ["images/zombie_5_part_6-sheet0.png", 2686, 0, 0, 36, 53, 1, 0.25, 0.1698113232851028,[],[-0.1666667014360428,-0.1132075190544128,0.25,-0.03773632645606995,0.3055559992790222,0.1320756822824478,0.4722219705581665,0.3207546472549439,0.6111109852790833,0.7358486652374268,0.25,0.8113206624984741,0.1388889849185944,0.5660377144813538,-0.08333300054073334,0.3207546472549439],0] ] ] ], [ ], false, false, 5783262861753283, [], null ] , [ "t104", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1043026393778923, [ ["images/zombie_5_part_7-sheet0.png", 7579, 0, 0, 87, 91, 1, 0.517241358757019, 0,[],[-0.2500003576278687,0.06868129968643189,0.1681036353111267,0.04395610094070435,0.471264660358429,0.3681319952011108,0.3448276519775391,0.824176013469696,-0.4999999701976776,0.4230769872665405],0] ] ] ], [ ], false, false, 4542354581912381, [], null ] , [ "t105", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 5731355503763413, [ ["images/zombie_6_part_1-sheet0.png", 11535, 0, 0, 86, 89, 1, 0.5, 0,[],[-0.337680995464325,0.1568630039691925,-0.001448988914489746,0,0.3637679815292358,0.1316529959440231,0.5,0.4985989928245544,0.3057969808578491,0.8123250007629395,-0.001448988914489746,1,-0.2768120169639587,0.784313976764679,-0.4797101020812988,0.4985989928245544],0] ] ] ], [ ], false, false, 9065000763825291, [], null ] , [ "t106", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 1287282768025295, [ ["images/zombie_6_part_2-sheet0.png", 6406, 0, 0, 67, 81, 1, 0.5074626803398132, 0.5061728358268738,[],[-0.3432836830615997,-0.3703708350658417,-0.01492568850517273,-0.4814814329147339,0.2985073328018189,-0.345678836107254,0.3880593180656433,0.4074071645736694,-0.01492568850517273,0.4938271641731262,-0.4029846787452698,0.4074071645736694,-0.4776119887828827,-0.01234585046768189],0] ] ] ], [ ], false, false, 3709147868815261, [], null ] , [ "t107", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 6679726580377579, [ ["images/zombie_6_part_3-sheet0.png", 4329, 0, 0, 25, 91, 1, 0.4799999892711639, 0.1318681389093399,[],[-0.239999994635582,-0.06368634104728699,0,-0.1318681389093399,0.2800000011920929,-0.06368634104728699,0.320000022649765,0.3681318759918213,0.2400000393390656,0.7885868549346924,0,0.8681318759918213,-0.4399999976158142,0.8567678928375244,-0.1599999964237213,0.3681318759918213],0] ] ] ], [ ], false, false, 2323735274359941, [], null ] , [ "t108", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2037958648640107, [ ["images/zombie_6_part_4-sheet0.png", 4438, 0, 0, 32, 90, 1, 0.5625, 0.1333333402872086,[],[-0.5,-0.1111111417412758,-0.0625,-0.05555553734302521,0.03125,0.01111066341400147,0.21875,0.3666666746139526,0.25,0.7999996542930603,-0.0625,0.8111106753349304,-0.34375,0.788888692855835,-0.3125,0.3666666746139526],0] ] ] ], [ ], false, false, 6953235130648423, [], null ] , [ "t109", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 9766574035568378, [ ["images/zombie_6_part_5-sheet0.png", 2622, 0, 0, 30, 49, 1, 0.6666666865348816, 0.1020408198237419,[],[-0.3666666746139526,0.08163217455148697,-0.1666666865348816,-0.08163262158632278,0.2666662931442261,-0.06122452020645142,0.03333330154418945,0.3877551853656769,0.1666663289070129,0.7959181666374207,-0.1666666865348816,0.8979591727256775,-0.5999999642372131,0.8571431636810303,-0.5666666626930237,0.3877551853656769],0] ] ] ], [ ], false, false, 2774973571563726, [], null ] , [ "t110", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7241085373230946, [ ["images/zombie_6_part_6-sheet0.png", 2764, 0, 0, 36, 53, 1, 0.25, 0.1698113232851028,[],[-0.1666667014360428,-0.1132075190544128,0.25,-0.03773632645606995,0.3055559992790222,0.1320756822824478,0.4722219705581665,0.3207546472549439,0.6111109852790833,0.7358486652374268,0.25,0.8113206624984741,0.1388889849185944,0.5660377144813538,-0.08333300054073334,0.3207546472549439],0] ] ] ], [ ], false, false, 3344359214904119, [], null ] , [ "t111", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2818542946110317, [ ["images/zombie_6_part_7-sheet0.png", 6035, 0, 0, 137, 64, 1, 0.4160583913326263, 0,[],[-0.1605843901634216,0.546875,0.08029159903526306,0.078125,0.3576646149158478,0.484375,0.4014596045017242,0.5,0.5474456548690796,0.921875,0.08029159903526306,0.78125,-0.2992703914642334,0.75,-0.4014599025249481,0.5],0] ] ] ], [ ], false, false, 9032416909432145, [], null ] , [ "t112", cr.plugins_.Sprite, false, [], 3, 0, null, [ [ "Default", 5, false, 1, 0, false, 271478406745552, [ ["images/beam_1-sheet0.png", 20988, 0, 0, 410, 64, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 9114967664874782 ] , [ "Physics", cr.behaviors.Physics, 2673320415809788 ] , [ "Sine", cr.behaviors.Sin, 4251833823164773 ] ], false, false, 9744666014419423, [], null ] , [ "t113", cr.plugins_.Sprite, false, [], 4, 0, null, [ [ "Default", 5, false, 1, 0, false, 1220292251219253, [ ["images/beam_3-sheet0.png", 5862, 0, 0, 419, 23, 1, 0.5011933445930481, 0.52173912525177,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 6676668813336611 ] , [ "Physics", cr.behaviors.Physics, 4592558350355471 ] , [ "Rotate", cr.behaviors.Rotate, 3419310946278502 ] , [ "Pin", cr.behaviors.Pin, 5532720507945591 ] ], false, false, 9452544015878835, [], null ] , [ "t114", cr.plugins_.Sprite, false, [7366971492581197,9142157375543927], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 4729585383184832, [ ["images/zombiecollision-sheet0.png", 140, 0, 0, 16, 16, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 5481150447684709, [], null ] , [ "t115", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 1997061929814415, [ ["images/beam_4-sheet0.png", 5809, 0, 0, 419, 23, 1, 0.5011933445930481, 0.52173912525177,[["Imagepoint 1", 1, 0.52173912525177]],[0.4988066554069519,-0.52173912525177,0.4988066554069519,0.47826087474823,-0.5011933445930481,0.47826087474823,-0.5011933445930481,-0.52173912525177],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 5045244363663205 ] ], false, false, 663019536326253, [], null ] , [ "t116", cr.plugins_.Sprite, false, [], 3, 0, null, [ [ "Default", 5, false, 1, 0, false, 3538018885136474, [ ["images/beam_1-sheet0.png", 20988, 0, 0, 410, 64, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Solid", cr.behaviors.solid, 4677098159230005 ] , [ "Physics", cr.behaviors.Physics, 1036427114126764 ] , [ "Sine", cr.behaviors.Sin, 3269388902967431 ] ], false, false, 7036250771499427, [], null ] , [ "t117", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 5019025993614734, [ ["images/box-sheet0.png", 5736, 0, 0, 45, 45, 1, 0.5111111402511597, 0.5111111402511597,[["Imagepoint 1", 1, 0.5111111402511597]],[0.4888888597488403,-0.5111111402511597,0.4888888597488403,0.4888888597488403,-0.5111111402511597,0.4888888597488403,-0.5111111402511597,-0.5111111402511597],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 3445168298090335 ] ], false, false, 7954511893583051, [], null ] , [ "t118", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 6770367548251586, [ ["images/wheel-sheet0.png", 11998, 0, 0, 80, 80, 1, 0.5, 0.5,[],[],0] ] ] ], [ [ "Physics", cr.behaviors.Physics, 893530003479766 ] ], false, false, 7405587310315708, [], null ] , [ "t119", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 2816644318359487, [ ["images/player_part_1-sheet0.png", 19169, 0, 0, 116, 113, 1, 0.5, 0.5044247508049011,[],[-0.3362070024013519,-0.3362827301025391,0,-0.5044247508049011,0.3534479737281799,-0.3539827466011047,0.4827589988708496,-0.008849740028381348,0.3448280096054077,0.336283266544342,0,0.4955752491950989,-0.3275859951972961,0.3185842633247376,-0.4568966031074524,-0.008849740028381348],0] ] ] ], [ ], false, false, 4152959671855137, [], null ] , [ "t120", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8995014589234249, [ ["images/player_part_3-sheet0.png", 1593, 0, 0, 44, 23, 1, 0.1363636404275894, 0.260869562625885,[],[0.02742935717105866,-0.09272755682468414,0.3636363744735718,-0.260869562625885,0.7170843482017517,-0.1104275584220886,0.8463953733444214,0.2347054481506348,0.7084643840789795,0.5798384547233582,0.3636363744735718,0.739130437374115,0.03605036437511444,0.5621394515037537,-0.09326024353504181,0.2347054481506348],0] ] ] ], [ ], false, false, 5834121076541965, [], null ] , [ "t121", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 4945151728027823, [ ["images/player_part_6-sheet0.png", 818, 0, 0, 21, 25, 1, 0.4285714328289032, 0,[],[-0.2647784352302551,0.1681420058012009,0.0714285671710968,0,0.4248765408992767,0.1504420042037964,0.554187536239624,0.4955750107765198,0.4162565767765045,0.8407080173492432,0.0714285671710968,1,-0.2561574280261993,0.8230090141296387,-0.3854680359363556,0.4955750107765198],0] ] ] ], [ ], false, false, 319190867896374, [], null ] , [ "t122", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 8599507789036653, [ ["images/player_part_5-sheet0.png", 1077, 0, 0, 22, 25, 1, 0.4090909063816071, 0,[],[-0.245297908782959,0.1681420058012009,0.09090909361839294,0,0.4443570673465729,0.1504420042037964,0.5736681222915649,0.4955750107765198,0.4357371032238007,0.8407080173492432,0.09090909361839294,1,-0.2366769015789032,0.8230090141296387,-0.3659875094890595,0.4955750107765198],0] ] ] ], [ ], false, false, 5512311767885803, [], null ] , [ "t123", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 7768566550972351, [ ["images/player_part_2-sheet0.png", 5671, 0, 0, 57, 61, 1, 0.5087719559669495, 0.5081967115402222,[],[-0.3449789583683014,-0.3400546908378601,-0.008771955966949463,-0.5081967115402222,0.3446760177612305,-0.3577547073364258,0.4739870429039002,-0.01262170076370239,0.3360560536384583,0.332511305809021,-0.008771955966949463,0.4918032884597778,-0.3363579511642456,0.3148123025894165,-0.4656685590744019,-0.01262170076370239],0] ] ] ], [ ], false, false, 3564432137157789, [], null ] , [ "t124", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 4524107655145513, [ ["images/player_part_4-sheet0.png", 1820, 0, 0, 40, 21, 1, 0.1749999970197678, 0.4285714328289032,[],[-0.01120699942111969,-0.2604294419288635,0.324999988079071,-0.4285714328289032,0.678447961807251,-0.2781294286251068,0.8077589869499207,0.06700357794761658,0.6698279976844788,0.41213658452034,0.324999988079071,0.5714285373687744,-0.002585992217063904,0.3944375813007355,-0.1318966001272202,0.06700357794761658],0] ] ] ], [ ], false, false, 2081004849140771, [], null ] , [ "t125", cr.plugins_.Sprite, false, [], 1, 0, null, [ [ "Default", 5, false, 1, 0, false, 9232250989977235, [ ["images/playergun-sheet0.png", 4012, 0, 0, 87, 41, 1, 0, 0.5121951103210449,[["Bullet", 1, 0.2926829159259796]],[0.4109199941158295,-0.5121951103210449,0.8663790225982666,-0.4329268038272858,1,-0.3170731067657471,1,-0.09756112098693848,0.4594509899616242,-0.01219511032104492,0.5,0.4878048896789551,0.380746990442276,0.4878048896789551,0,-0.3628051280975342],0] ] ] ], [ [ "Pin", cr.behaviors.Pin, 8819351385020856 ] ], false, false, 3052119405686241, [], null ] , [ "t126", cr.plugins_.Sprite, false, [], 0, 0, null, [ [ "Default", 5, false, 1, 0, false, 6142656537571488, [ ["images/background_part_4-sheet0.png", 142869, 0, 0, 1920, 354, 1, 0.5, 0.5,[],[],0] ] ] ], [ ], false, false, 4468423055459342, [], null ] , [ "t127", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Sine", cr.behaviors.Sin, 2049811579057513 ] ], false, false, 2159222911975116, [], null ] , [ "t128", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 3035279859925462, [], null ] , [ "t129", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 6258406124845492, [], null ] , [ "t130", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 6779713209566786, [], null ] , [ "t131", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 6618182350552416, [], null ] , [ "t132", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 7780563970306521, [], null ] , [ "t133", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 656584847302774 ] ], false, false, 7281008880953996, [], null ] , [ "t134", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 2437442751050123 ] ], false, false, 375585021556094, [], null ] , [ "t135", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics2", cr.behaviors.Physics, 3858961190307364 ] ], false, false, 6075107499647208, [], null ] , [ "t136", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics3", cr.behaviors.Physics, 3793404468674392 ] ], false, false, 4094999053461854, [], null ] , [ "t137", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 9938739880838968 ] ], false, false, 2166665381509729, [], null ] , [ "t138", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 929830481218381 ] ], false, false, 4244343636427708, [], null ] , [ "t139", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 7015236586573393 ] ], false, false, 6594968153099452, [], null ] , [ "t140", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics2", cr.behaviors.Physics, 1040767144274105 ] ], false, false, 2750901587559303, [], null ] , [ "t141", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics3", cr.behaviors.Physics, 6605167427920706 ] ], false, false, 1470393140820274, [], null ] , [ "t142", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics4", cr.behaviors.Physics, 480731105369625 ] ], false, false, 1317555825427217, [], null ] , [ "t143", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics5", cr.behaviors.Physics, 7720405751454063 ] ], false, false, 6823839228435869, [], null ] , [ "t144", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics6", cr.behaviors.Physics, 3488585807840483 ] ], false, false, 9267500616574452, [], null ] , [ "t145", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics7", cr.behaviors.Physics, 891604590965618 ] ], false, false, 5108919675323076, [], null ] , [ "t146", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics8", cr.behaviors.Physics, 7460726523873805 ] ], false, false, 589434516336154, [], null ] , [ "t147", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics9", cr.behaviors.Physics, 1937481941677615 ] ], false, false, 2859558527544394, [], null ] , [ "t148", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics10", cr.behaviors.Physics, 5700213985380328 ] ], false, false, 146286647717771, [], null ] , [ "t149", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics11", cr.behaviors.Physics, 6644397313168047 ] ], false, false, 3194569114898558, [], null ] , [ "t150", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics12", cr.behaviors.Physics, 3526433368329584 ] ], false, false, 4475061163478922, [], null ] , [ "t151", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics13", cr.behaviors.Physics, 2622787159382941 ] ], false, false, 421062325421283, [], null ] , [ "t152", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics14", cr.behaviors.Physics, 5267522703148764 ] ], false, false, 5774387338367762, [], null ] , [ "t153", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 363104642480658 ] ], false, false, 6514699759577481, [], null ] , [ "t154", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics3", cr.behaviors.Physics, 1311194383031108 ] ], false, false, 9961821160253167, [], null ] , [ "t155", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics4", cr.behaviors.Physics, 2157360034956371 ] ], false, false, 2012831682086574, [], null ] , [ "t156", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics5", cr.behaviors.Physics, 4713608822740915 ] ], false, false, 6818343430544824, [], null ] , [ "t157", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics6", cr.behaviors.Physics, 3690304642120975 ] ], false, false, 1847028486169731, [], null ] , [ "t158", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics7", cr.behaviors.Physics, 258923151667812 ] ], false, false, 7586841565433413, [], null ] , [ "t159", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics8", cr.behaviors.Physics, 842363662172795 ] ], false, false, 1455273192166533, [], null ] , [ "t160", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics9", cr.behaviors.Physics, 9773662397728986 ] ], false, false, 7468287316115066, [], null ] , [ "t161", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics10", cr.behaviors.Physics, 9525186241955155 ] ], false, false, 7440495555636716, [], null ] , [ "t162", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics11", cr.behaviors.Physics, 4827368217543414 ] ], false, false, 4162538443658023, [], null ] , [ "t163", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics12", cr.behaviors.Physics, 2243861770666606 ] ], false, false, 350214028176364, [], null ] , [ "t164", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics13", cr.behaviors.Physics, 535147073232702 ] ], false, false, 555119067220454, [], null ] , [ "t165", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics14", cr.behaviors.Physics, 5637635455089255 ] ], false, false, 8772464207226942, [], null ] , [ "t166", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics", cr.behaviors.Physics, 2152853038607472 ] ], false, false, 8361015594629733, [], null ] , [ "t167", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics2", cr.behaviors.Physics, 61117590376901 ] ], false, false, 7826818131343365, [], null ] , [ "t168", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics4", cr.behaviors.Physics, 87727342620152 ] ], false, false, 4661878548614732, [], null ] , [ "t169", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics5", cr.behaviors.Physics, 7444249819937544 ] ], false, false, 5914572077115718, [], null ] , [ "t170", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics6", cr.behaviors.Physics, 2924789179819955 ] ], false, false, 7010958400730695, [], null ] , [ "t171", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics7", cr.behaviors.Physics, 7590400074992025 ] ], false, false, 420933420696146, [], null ] , [ "t172", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics8", cr.behaviors.Physics, 6934110572313146 ] ], false, false, 483839083104148, [], null ] , [ "t173", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics9", cr.behaviors.Physics, 7996534569766595 ] ], false, false, 9497865772167301, [], null ] , [ "t174", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics10", cr.behaviors.Physics, 3067088181793438 ] ], false, false, 2555297582626355, [], null ] , [ "t175", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics11", cr.behaviors.Physics, 7106787184310765 ] ], false, false, 1424038478716683, [], null ] , [ "t176", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics12", cr.behaviors.Physics, 7478895912723343 ] ], false, false, 156637144380334, [], null ] , [ "t177", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics13", cr.behaviors.Physics, 5529041559892228 ] ], false, false, 2316873586799488, [], null ] , [ "t178", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics14", cr.behaviors.Physics, 294773531747235 ] ], false, false, 6308292201128763, [], null ] , [ "t179", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics2", cr.behaviors.Physics, 3108472965477103 ] ], false, false, 5430152981005262, [], null ] , [ "t180", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics3", cr.behaviors.Physics, 7770600231458014 ] ], false, false, 4804516879581827, [], null ] , [ "t181", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics4", cr.behaviors.Physics, 6461692973017686 ] ], false, false, 408679267955426, [], null ] , [ "t182", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics5", cr.behaviors.Physics, 4846487905446122 ] ], false, false, 5386336751442077, [], null ] , [ "t183", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics6", cr.behaviors.Physics, 7103929504240495 ] ], false, false, 7667326662024347, [], null ] , [ "t184", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics7", cr.behaviors.Physics, 2789187480449926 ] ], false, false, 865451866445801, [], null ] , [ "t185", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics8", cr.behaviors.Physics, 909053202110576 ] ], false, false, 5726700269977439, [], null ] , [ "t186", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics9", cr.behaviors.Physics, 2308524872168611 ] ], false, false, 1288276494096687, [], null ] , [ "t187", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics10", cr.behaviors.Physics, 7731320278469309 ] ], false, false, 9445925126979403, [], null ] , [ "t188", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics11", cr.behaviors.Physics, 3671016158911499 ] ], false, false, 2205005780224701, [], null ] , [ "t189", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics12", cr.behaviors.Physics, 5676666057474568 ] ], false, false, 1557643487152618, [], null ] , [ "t190", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics13", cr.behaviors.Physics, 8163145747798912 ] ], false, false, 2519945417066505, [], null ] , [ "t191", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics14", cr.behaviors.Physics, 607261645822512 ] ], false, false, 1456991112772104, [], null ] , [ "t192", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics2", cr.behaviors.Physics, 1543115747867887 ] ], false, false, 5969871604982877, [], null ] , [ "t193", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics3", cr.behaviors.Physics, 3469246017904774 ] ], false, false, 7303009249218547, [], null ] , [ "t194", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics4", cr.behaviors.Physics, 7850995812651581 ] ], false, false, 3315669545040855, [], null ] , [ "t195", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics5", cr.behaviors.Physics, 2292894235889596 ] ], false, false, 2350520692415061, [], null ] , [ "t196", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics6", cr.behaviors.Physics, 7092068129151388 ] ], false, false, 1595113136343255, [], null ] , [ "t197", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics7", cr.behaviors.Physics, 2450797579833289 ] ], false, false, 3258343347859274, [], null ] , [ "t198", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics8", cr.behaviors.Physics, 870603563286838 ] ], false, false, 7141371674969411, [], null ] , [ "t199", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics9", cr.behaviors.Physics, 4391183648421326 ] ], false, false, 2541196608139485, [], null ] , [ "t200", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics10", cr.behaviors.Physics, 8704454152330009 ] ], false, false, 6003289710994672, [], null ] , [ "t201", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics11", cr.behaviors.Physics, 3299171739983421 ] ], false, false, 7844843169535394, [], null ] , [ "t202", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics12", cr.behaviors.Physics, 7926765864870523 ] ], false, false, 6008932060089776, [], null ] , [ "t203", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics13", cr.behaviors.Physics, 4110493876511018 ] ], false, false, 5240158095867628, [], null ] , [ "t204", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics14", cr.behaviors.Physics, 2085369941637074 ] ], false, false, 6953928034403275, [], null ] , [ "t205", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics2", cr.behaviors.Physics, 6154977724255231 ] ], false, false, 7554746238007148, [], null ] , [ "t206", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics3", cr.behaviors.Physics, 3143690572947139 ] ], false, false, 6639485484006556, [], null ] , [ "t207", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics4", cr.behaviors.Physics, 516265258054682 ] ], false, false, 335193210640831, [], null ] , [ "t208", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics5", cr.behaviors.Physics, 4447773336041121 ] ], false, false, 4780796790620518, [], null ] , [ "t209", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics6", cr.behaviors.Physics, 6056106547422064 ] ], false, false, 7404534872082483, [], null ] , [ "t210", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics7", cr.behaviors.Physics, 8735740740921968 ] ], false, false, 7224857230027722, [], null ] , [ "t211", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics8", cr.behaviors.Physics, 8730827043024598 ] ], false, false, 8354092512304695, [], null ] , [ "t212", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics9", cr.behaviors.Physics, 470268112403409 ] ], false, false, 1004646948749743, [], null ] , [ "t213", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics10", cr.behaviors.Physics, 9874050180117179 ] ], false, false, 819818154246383, [], null ] , [ "t214", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics11", cr.behaviors.Physics, 4571751070021748 ] ], false, false, 947666701609905, [], null ] , [ "t215", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics12", cr.behaviors.Physics, 3545407746056773 ] ], false, false, 2378575319162022, [], null ] , [ "t216", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics13", cr.behaviors.Physics, 1674669904067956 ] ], false, false, 376787031870051, [], null ] , [ "t217", cr.plugins_.Sprite, true, [], 1, 0, null, null, [ [ "Physics14", cr.behaviors.Physics, 1328820195093014 ] ], false, false, 8740355065425694, [], null ] , [ "t218", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 4026221492482879, [], null ] , [ "t219", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 6046595910215458, [], null ] , [ "t220", cr.plugins_.Sprite, true, [], 0, 0, null, null, [ ], false, false, 9454574645500931, [], null ] ], [ [127,16,8,3,0,28,1,32,4,5,33,2,6,7,34,9,20,10] , [128,58,59,60,61,112,116,70,71,72,73] , [129,70] , [130,71] , [131,72] , [132,73] , [133,119,123,120,124,122,121,125] , [134,74,75,76,77,78,79] , [135,80,81,82,83,84,85] , [136,86,87,88,89,90,91] , [137,92,93,94,95,96,97] , [138,98,99,100,101,102,103,104] , [139,105,106,107,108,109,110,111] , [140,74,75,76,77,78,79] , [141,74,75,76,77,78,79] , [142,74,75,76,77,78,79] , [143,74,75,76,77,78,79] , [144,74,75,76,77,78,79] , [145,74,75,76,77,78,79] , [146,74,75,76,77,78,79] , [147,74,75,76,77,78,79] , [148,74,75,76,77,78,79] , [149,74,75,76,77,78,79] , [150,74,75,76,77,78,79] , [151,74,75,76,77,78,79] , [152,74,75,76,77,78,79] , [153,80,81,82,83,84,85] , [154,80,81,82,83,84,85] , [155,80,81,82,83,84,85] , [156,80,81,82,83,84,85] , [157,80,81,82,83,84,85] , [158,80,81,82,83,84,85] , [159,80,81,82,83,84,85] , [160,80,81,82,83,84,85] , [161,80,81,82,83,84,85] , [162,80,81,82,83,84,85] , [163,80,81,82,83,84,85] , [164,80,81,82,83,84,85] , [165,80,81,82,83,84,85] , [166,86,87,88,89,90,91] , [167,86,87,88,89,90,91] , [168,86,87,88,89,90,91] , [169,86,87,88,89,90,91] , [170,86,87,88,89,90,91] , [171,86,87,88,89,90,91] , [172,86,87,88,89,90,91] , [173,86,87,88,89,90,91] , [174,86,87,88,89,90,91] , [175,86,87,88,89,90,91] , [176,86,87,88,89,90,91] , [177,86,87,88,89,90,91] , [178,86,87,88,89,90,91] , [179,92,93,94,95,96,97] , [180,92,93,94,95,96,97] , [181,92,93,94,95,96,97] , [182,92,93,94,95,96,97] , [183,92,93,94,95,96,97] , [184,92,93,94,95,96,97] , [185,92,93,94,95,96,97] , [186,92,93,94,95,96,97] , [187,92,93,94,95,96,97] , [188,92,93,94,95,96,97] , [189,92,93,94,95,96,97] , [190,92,93,94,95,96,97] , [191,92,93,94,95,96,97] , [192,98,99,100,101,102,103,104] , [193,98,99,100,101,102,103,104] , [194,98,99,100,101,102,103,104] , [195,98,99,100,101,102,103,104] , [196,98,99,100,101,102,103,104] , [197,98,99,100,101,102,103,104] , [198,98,99,100,101,102,103,104] , [199,98,99,100,101,102,103,104] , [200,98,99,100,101,102,103,104] , [201,98,99,100,101,102,103,104] , [202,98,99,100,101,102,103,104] , [203,98,99,100,101,102,103,104] , [204,98,99,100,101,102,103,104] , [205,105,106,107,108,109,110,111] , [206,105,106,107,108,109,110,111] , [207,105,106,107,108,109,110,111] , [208,105,106,107,108,109,110,111] , [209,105,106,107,108,109,110,111] , [210,105,106,107,108,109,110,111] , [211,105,106,107,108,109,110,111] , [212,105,106,107,108,109,110,111] , [213,105,106,107,108,109,110,111] , [214,105,106,107,108,109,110,111] , [215,105,106,107,108,109,110,111] , [216,105,106,107,108,109,110,111] , [217,105,106,107,108,109,110,111] , [218,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111] , [219,113,115,117] , [220,66,69] ], [ [ "Level_001", 1920, 1080, false, "GameSettings", 2493300923520822, [ [ "Back", 0, 5582377743093869, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 11, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 65, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 66, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 132, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 133, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 134, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 8985312297838371, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 47, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 48, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 50, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 51, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 52, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 53, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 62, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 120, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 121, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 838, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 839, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 840, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 299, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 300, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 301, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 302, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 303, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 304, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 305, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 306, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 307, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 308, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 309, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 310, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 311, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 312, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 313, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 314, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 315, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 316, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 317, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 318, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 319, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1702.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 320, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [63, 363, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 321, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1716.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 322, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1693.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 323, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1680.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 324, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1706.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 325, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1723.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 326, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1696.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 327, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [76, 405, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 328, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [53, 404, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 329, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [40, 366, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 330, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66, 376, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 331, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [83, 358, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 332, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [56, 271, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 333, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 334, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 335, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 336, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 337, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 338, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 339, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 340, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [128, 480, 0, 256, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 341, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [334, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4264, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [384, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4269, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [434, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4270, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [484, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4285, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [534, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4286, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [334, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4292, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [384, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4293, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [434, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4294, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [484, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4302, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [534, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4303, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [584, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4315, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [634, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4316, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [684, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4321, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [734, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4325, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [784, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4326, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [584, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4339, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [634, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4343, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [684, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4344, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [734, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4345, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [784, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4350, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [334, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4428, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [384, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4433, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [434, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4434, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [484, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4435, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [534, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4436, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [334, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4438, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [384, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4439, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [434, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4440, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [484, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4441, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [534, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4442, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [584, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4443, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [634, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4444, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [684, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4445, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [734, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4446, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [784, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4447, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [584, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4449, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [634, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4450, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [684, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4451, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [734, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4452, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [784, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4453, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [620, 220, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 4263, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [620, 148, 0, 80, 80, 0, 0, 1, 0.5, 0.5, 0, 0, []], 118, 4291, [ ], [ [ 0, 2, 0, 3, 0.5, 0.5, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 180, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 4327, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1456, 84, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 4351, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [190.1428833007813, 362.8570556640625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4363, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [204.3095092773438, 403.8570556640625, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 4437, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [181.3095092773438, 402.8570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 4448, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [168.3095092773438, 364.8570556640625, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 4454, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [194.3095092773438, 374.8570556640625, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 4455, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [211.3095092773438, 356.8570556640625, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 4456, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [187.3095092773438, 267.8570556640625, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 4457, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1838, 849.8570556640625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4458, [ [8], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1852, 892.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 4459, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1829, 892.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 4460, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1816, 850.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 4461, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1842, 860.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 4462, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1857, 842.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 4463, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1832, 755.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 4464, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1575, 849, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4465, [ [9], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1588, 890, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4466, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1565, 890, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4467, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1555, 851, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4468, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1578, 859, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4469, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 841, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4470, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1566, 759, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4471, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 8200353685310395, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 67, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 130, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 129, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 127, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 126, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 125, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 45, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 128, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 4230408635671376, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 64, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 863, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 874, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 861, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 140, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 136, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 137, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 135, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 8, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 7, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 19, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 21, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 22, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 28, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 29, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 30, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 34, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 35, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 55, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 131, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 138, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 139, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 844, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 862, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 843, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 864, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 865, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 866, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 867, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 868, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 869, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 870, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 871, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 872, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 873, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 811020243059621, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_002", 1920, 1080, false, "GameSettings", 3807042627827771, [ [ "Back", 0, 7818692963487252, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 342, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 343, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 344, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 345, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 346, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 347, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 5777757954664047, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 348, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 349, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 350, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 351, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [96, 540, 0, 192, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 352, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1568, 432, 0, 704, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 354, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [900, 540, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 355, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1598, 27, 0, 1024, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 356, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [900, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 358, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 359, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 375, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 360, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1425, 315, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 361, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1575, 315, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 362, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1725, 315, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 363, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1439, 357, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 364, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1416, 356, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 365, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1403, 318, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 366, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1429, 328, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 367, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1446, 310, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 368, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1419, 223, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 875, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1591, 357, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 876, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1568, 356, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 877, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1555, 318, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 878, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1581, 328, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 879, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1598, 310, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 880, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1571, 223, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 881, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1741, 357, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 882, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1718, 356, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 883, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1705, 318, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 884, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1731, 328, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 885, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1748, 310, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 886, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1721, 223, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 887, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1779, 849, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 888, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1629, 848, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 889, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1793, 891, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 890, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770, 890, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 891, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757, 852, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 892, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783, 862, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 893, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800, 844, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 894, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773, 757, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 895, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1642, 890, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 896, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1619, 889, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 897, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1606, 851, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 898, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1632, 861, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 899, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1649, 843, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 900, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1622, 756, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 901, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [740, 877, 0, 64, 128, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 910, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [181, 298, 0, 419, 23, 0, -1.570796489715576, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 115, 357, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 375, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3904, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [964, 862, 0, 419, 23, 0, 0.3110175430774689, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3905, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [107, 426, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 353, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [120, 467, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 902, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [97, 466, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 904, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [84, 428, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 905, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [110, 438, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 906, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [127, 420, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 907, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [103, 331, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 908, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 3318402998986174, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 911, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 915, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 919, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 920, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 923, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 924, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 926, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 927, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 2408028804134753, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 928, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 929, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 930, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 931, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 932, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 933, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 934, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 935, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 936, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 937, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 938, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 939, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 940, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 941, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 942, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 943, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 944, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 945, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 946, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 947, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 948, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 949, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 950, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 951, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 952, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 953, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 954, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 955, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 956, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 957, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 958, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 959, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 960, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 961, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 962, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 1361825825875921, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_003", 1920, 1080, false, "GameSettings", 7796702892186276, [ [ "Back", 0, 1613346337807229, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 963, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 964, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 965, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 966, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 967, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 968, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 9896899366824006, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 969, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 970, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 971, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 972, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 124, 0, 64, 128, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 973, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 974, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1200, 744, 0, 64, 448, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 975, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 520, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 976, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 1, 0, 4, 0, 0, 0, 200, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 28, 0, 1920, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 977, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1560, 520, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 978, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 982, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 985, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 986, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 987, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 988, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 989, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 990, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [720, 744, 0, 64, 448, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 909, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1410.71435546875, 853.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 980, [ [2], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1560.71435546875, 853.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 981, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1710.71435546875, 853.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 983, [ [4], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1423.880981445313, 894.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 984, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1400.880981445313, 893.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 991, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1387.880981445313, 855.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 992, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1413.880981445313, 865.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 993, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1430.880981445313, 847.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 994, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1406.880981445313, 758.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 995, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1574.880981445313, 895.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 996, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1551.880981445313, 894.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 997, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1538.880981445313, 856.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 998, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1564.880981445313, 866.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 999, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1581.880981445313, 848.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1000, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1557.880981445313, 759.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1001, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1723.880981445313, 894.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1002, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1700.880981445313, 893.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1003, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1687.880981445313, 855.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1004, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1713.880981445313, 865.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1005, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1730.880981445313, 847.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1006, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1706.880981445313, 758.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1007, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [327.5714721679688, 853.428466796875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1008, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1092, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1009, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [341.7380981445313, 895.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1010, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [318.7380981445313, 894.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1011, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [305.7380981445313, 856.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1012, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [331.7380981445313, 866.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1013, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [348.7380981445313, 848.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1014, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [324.7380981445313, 759.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1015, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1105, 894, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1016, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1082, 893, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1017, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1069, 855, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1018, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1095, 865, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1019, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112, 847, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1020, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1088, 758, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1021, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [831, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1022, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [845, 894, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1023, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [822, 893, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1024, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [809, 855, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3906, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 865, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3907, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [852, 847, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3908, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [828, 758, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3909, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 8213391293823052, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1025, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1026, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1027, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1028, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1029, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1030, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1031, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1032, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 6800776656416096, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1033, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1034, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1035, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1036, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1037, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1038, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1039, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1040, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1041, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1042, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1043, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1044, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1045, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1046, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1047, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1048, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1049, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1050, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1051, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1052, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1053, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1054, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1055, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1056, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1057, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1058, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1059, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1060, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1061, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1062, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1063, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1064, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1065, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1066, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1067, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 7386985781653578, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_004", 1920, 1080, false, "GameSettings", 1869882768738342, [ [ "Back", 0, 629682963397277, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1068, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1069, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1070, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1071, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1072, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1073, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 2103283691057731, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1074, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1075, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1076, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1077, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1079, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 128, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1080, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [256, 624, 0, 512, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1082, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 464, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1083, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [256, 312, 0, 512, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 122, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 910, 0, 384, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 979, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1664, 620, 0, 512, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1078, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1664, 308, 0, 512, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1081, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1513.714233398438, 502.28564453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1084, [ [1], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1663.714233398438, 502.28564453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1085, [ [2], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1813.714233398438, 502.28564453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1086, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1526.880859375, 544.28564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1087, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1503.880859375, 543.28564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1088, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1490.880859375, 505.28564453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1089, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1516.880859375, 515.28564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1090, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1533.880859375, 497.28564453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1091, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1509.880859375, 408.28564453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1092, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676.880859375, 543.28564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1093, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1653.880859375, 542.28564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1094, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1640.880859375, 504.28564453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1095, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1666.880859375, 514.28564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1096, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1683.880859375, 496.28564453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1097, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1659.880859375, 407.28564453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1098, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1827.880859375, 544.28564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1099, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1804.880859375, 543.28564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1100, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1791.880859375, 505.28564453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1101, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1817.880859375, 515.28564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1102, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1834.880859375, 497.28564453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1103, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1810.880859375, 408.28564453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1104, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [104.7142333984375, 507.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1105, [ [4], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [254.7142333984375, 507.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1106, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [404.7142333984375, 507.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1107, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [117.8808898925781, 548.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1108, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [94.88088989257813, 547.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1109, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [81.88088989257813, 509.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1110, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [107.8808898925781, 519.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1111, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [124.8808898925781, 501.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1112, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [100.8808898925781, 412.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1113, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [268.880859375, 549.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1114, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [245.880859375, 548.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1115, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [232.880859375, 510.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1116, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [258.880859375, 520.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1117, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [275.880859375, 502.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1118, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [251.880859375, 413.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1119, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [417.880859375, 548.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1120, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [394.880859375, 547.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1121, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [381.880859375, 509.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1122, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [407.880859375, 519.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1123, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [424.880859375, 501.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1124, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [400.880859375, 412.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1125, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [178.5712890625, 195.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1126, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [328.5712890625, 195.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1127, [ [8], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [192.7379150390625, 236.8570556640625, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1128, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [169.7379150390625, 235.8570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1129, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [156.7379150390625, 197.8570556640625, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3910, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [182.7379150390625, 207.8570556640625, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3911, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [199.7379150390625, 189.8570556640625, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3912, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [175.7379150390625, 100.8570556640625, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3913, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [341.7379150390625, 236.8570556640625, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3914, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [318.7379150390625, 235.8570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3915, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [305.7379150390625, 197.8570556640625, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3916, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [331.7379150390625, 207.8570556640625, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3917, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [348.7379150390625, 189.8570556640625, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3918, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [324.7379150390625, 100.8570556640625, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3919, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1588.142822265625, 192.428466796875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3920, [ [9], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1738.142822265625, 192.428466796875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3921, [ [10], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1602.309448242188, 233.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3922, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1579.309448242188, 232.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3923, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1566.309448242188, 194.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3924, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1592.309448242188, 204.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3925, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1609.309448242188, 186.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3926, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1585.309448242188, 97.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3927, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1752.309448242188, 234.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3928, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1729.309448242188, 233.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3929, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1716.309448242188, 195.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3930, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1742.309448242188, 205.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3931, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1759.309448242188, 187.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3932, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1735.309448242188, 98.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3933, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 2227624924877954, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1130, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1131, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1132, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1133, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1134, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1135, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1136, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1137, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 7139127998412485, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1138, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1139, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1140, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1141, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1142, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1143, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1144, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1145, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1146, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1147, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1148, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1149, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1150, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1151, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1152, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1153, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1154, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1155, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1156, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1157, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1158, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1159, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1160, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1161, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1162, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1163, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1164, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1165, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1166, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1167, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1168, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1169, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1170, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1171, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1172, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 8772003055969531, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_005", 1920, 1080, false, "GameSettings", 3793936867044062, [ [ "Back", 0, 2173439621585793, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1173, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1174, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1175, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1176, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1177, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1178, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 416241147058901, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1179, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1180, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1181, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1182, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1184, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 685, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1185, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [480, 360, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 1186, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 200, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 280, 0, 640, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1187, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1440, 360, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 1183, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 200, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [735.4285888671875, 162.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1188, [ [1], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [885.4285888671875, 162.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1189, [ [2], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1035.428588867188, 162.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1190, [ [3], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1185.428588867188, 162.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1191, [ [4], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [749.4285888671875, 205.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1192, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [726.4285888671875, 205.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1193, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [713.4285888671875, 163.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1194, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [739.4285888671875, 173.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1195, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [754.4285888671875, 155.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1196, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [729.4285888671875, 68.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1197, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [900.4285888671875, 205.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1198, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [877.4285888671875, 205.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1199, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [864.4285888671875, 163.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1200, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [890.4285888671875, 173.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1201, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [905.4285888671875, 155.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1202, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [880.4285888671875, 68.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1203, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1047.428588867188, 205.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1204, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1024.428588867188, 205.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1205, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1011.428588867188, 163.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1206, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1037.428588867188, 173.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1207, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1052.428588867188, 155.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1208, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1027.428588867188, 68.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1209, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1198.428588867188, 205.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1210, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1175.428588867188, 205.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1211, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1162.428588867188, 163.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1212, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1188.428588867188, 173.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1213, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1203.428588867188, 155.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1214, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1178.428588867188, 68.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1215, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140.48583984375, 851.6856689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1216, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1290.48583984375, 851.6856689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1217, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1440.48583984375, 851.6856689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1218, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1590.48583984375, 851.6856689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1219, [ [8], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1740.48583984375, 851.6856689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1220, [ [9], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1154.652587890625, 893.6856689453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1221, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1131.652587890625, 892.6856689453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1222, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118.652587890625, 854.6856689453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1223, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1144.652587890625, 864.6856689453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1224, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1161.652587890625, 846.6856689453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1225, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1137.652587890625, 757.6856689453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1226, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1303.652587890625, 892.6856689453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1227, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1280.652587890625, 891.6856689453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1228, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1267.652587890625, 853.6856689453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1229, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1293.652587890625, 863.6856689453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1230, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1310.652587890625, 845.6856689453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1231, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1286.652587890625, 756.6856689453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1232, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1454.652587890625, 892.6856689453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1233, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1431.652587890625, 891.6856689453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1234, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1418.652587890625, 853.6856689453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3934, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1444.652587890625, 863.6856689453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3935, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1461.652587890625, 845.6856689453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3936, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1437.652587890625, 756.6856689453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3937, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603.652587890625, 892.6856689453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3938, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1580.652587890625, 891.6856689453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3939, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1567.652587890625, 853.6856689453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3940, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1593.652587890625, 863.6856689453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3941, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1610.652587890625, 845.6856689453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3942, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1586.652587890625, 756.6856689453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3943, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1754.652587890625, 892.6856689453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3944, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1731.652587890625, 891.6856689453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3945, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1718.652587890625, 853.6856689453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3946, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1744.652587890625, 863.6856689453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3947, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1761.652587890625, 845.6856689453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3948, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1737.652587890625, 756.6856689453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3949, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 2005544736692549, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1235, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1236, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1237, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1238, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1239, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1240, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1241, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1242, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 2694567576959297, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1243, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1244, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1245, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1246, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1247, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1248, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1249, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1250, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1251, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1252, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1253, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1254, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1255, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1256, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1257, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1258, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1259, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1260, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1261, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1262, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1263, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1264, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1265, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1266, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1267, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1268, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1269, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1270, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1271, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1272, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1273, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1274, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1275, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1276, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1277, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 8040029200862491, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_006", 1920, 1080, false, "GameSettings", 9092470657549114, [ [ "Back", 0, 4008711854330869, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1278, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1279, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1280, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1281, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1282, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1283, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 6710319906308993, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1284, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1285, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1286, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1287, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 815, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1288, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1289, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1440, 815, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1290, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 312, 0, 1024, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1292, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [480, 815, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1339, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [720, 560, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1291, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1200, 560, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1293, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [594.5714111328125, 851.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1294, [ [1], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [844.5714111328125, 851.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1295, [ [2], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [608.5714111328125, 894.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1296, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [585.5714111328125, 894.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1297, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [572.5714111328125, 852.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1298, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [598.5714111328125, 862.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1299, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [613.5714111328125, 844.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1300, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [588.5714111328125, 757.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1301, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [859.5714111328125, 894.3570556640625, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1302, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [836.5714111328125, 894.3570556640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1303, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [823.5714111328125, 852.3570556640625, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1304, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [849.5714111328125, 862.3570556640625, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1305, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [864.5714111328125, 844.3570556640625, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1306, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [839.5714111328125, 757.3570556640625, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1307, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1068.769287109375, 851.96142578125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1308, [ [3], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1318.769287109375, 851.96142578125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1309, [ [4], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1080.769287109375, 894.46142578125, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1310, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1057.769287109375, 894.46142578125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1311, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1070.769287109375, 862.46142578125, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1312, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085.769287109375, 844.46142578125, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1313, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1060.769287109375, 757.46142578125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1314, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1331.769287109375, 894.46142578125, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1315, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1308.769287109375, 894.46142578125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1316, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1295.769287109375, 852.46142578125, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1317, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1321.769287109375, 862.46142578125, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1318, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1336.769287109375, 844.46142578125, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1319, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1311.769287109375, 757.46142578125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1320, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [585.4285278320313, 193.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1321, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [735.4285278320313, 193.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1322, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [885.4285278320313, 193.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1323, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1035.428466796875, 193.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1324, [ [8], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1185.428466796875, 193.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1325, [ [9], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1335.428466796875, 193.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1326, [ [10], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [599.5951538085938, 235.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1327, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [576.5951538085938, 234.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1328, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [563.5951538085938, 196.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1329, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [589.5951538085938, 206.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1330, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [606.5951538085938, 188.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1331, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [582.5951538085938, 99.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1332, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [748.5951538085938, 234.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1333, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [725.5951538085938, 233.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1334, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [712.5951538085938, 195.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1335, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [738.5951538085938, 205.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1336, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [755.5951538085938, 187.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1337, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [731.5951538085938, 98.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1338, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [899.5951538085938, 234.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3950, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [876.5951538085938, 233.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3951, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [863.5951538085938, 195.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3952, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [889.5951538085938, 205.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3953, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [906.5951538085938, 187.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3954, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [882.5951538085938, 98.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3955, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1048.59521484375, 234.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3956, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1025.59521484375, 233.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3957, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1012.595153808594, 195.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3958, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1038.59521484375, 205.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3959, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1055.59521484375, 187.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3960, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1031.59521484375, 98.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3961, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1199.59521484375, 234.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3962, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1176.59521484375, 233.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3963, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1163.59521484375, 195.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3964, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1189.59521484375, 205.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3965, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1206.59521484375, 187.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3966, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1182.59521484375, 98.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3967, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1349.59521484375, 235.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 3968, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1326.59521484375, 234.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 3969, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1313.59521484375, 196.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 3970, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1339.59521484375, 206.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 3971, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1356.59521484375, 188.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 3972, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1332.59521484375, 99.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 3973, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 2084359354833222, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1340, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1341, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1342, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1343, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1344, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1345, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1346, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1347, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 7270473511276088, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1348, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1349, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1350, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1351, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1352, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1353, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1354, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1355, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1356, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1357, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1358, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1359, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1360, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1361, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1362, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1363, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1364, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1365, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1366, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1367, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1368, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1369, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1370, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1371, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1372, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1373, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1374, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1375, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1376, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1377, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1378, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1379, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1380, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1381, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1382, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 6482402300663878, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_007", 1920, 1080, false, "GameSettings", 1442794786209072, [ [ "Back", 0, 5534335369927005, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1383, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1384, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1385, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1386, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1387, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1388, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 5883234708016498, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1389, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1390, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1391, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1392, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1394, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [480, 288, 0, 64, 448, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1395, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 376, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 1396, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 32, 0, 1920, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1397, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 72, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 1399, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 80, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 1400, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 376, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 1401, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [480, 845, 0, 64, 192, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1444, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1540, 70.66665649414063, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 59, 1398, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 78.66665649414063, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 71, 1403, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 376, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 116, 1404, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 376, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 63, 1402, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [674.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1405, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [824.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1406, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [974.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1407, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1124.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1408, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1274.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1409, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1424.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1410, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1574.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1411, [ [7], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1724.6787109375, 852.106689453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1412, [ [8], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [688.3453979492188, 893.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1413, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [665.3453979492188, 892.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1414, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [652.3453979492188, 854.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1415, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [678.3453979492188, 864.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1416, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [695.3453979492188, 846.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1417, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [668.3453979492188, 759.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1418, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840.3453369140625, 893.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1419, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [817.3453369140625, 892.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1420, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [804.3453369140625, 854.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1421, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [830.3453369140625, 864.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1422, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [847.3453369140625, 846.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1423, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [820.3453369140625, 759.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1424, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [990.3453369140625, 893.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1425, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [967.3453369140625, 892.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1426, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [954.3453369140625, 854.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1427, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [980.3453369140625, 864.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1428, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [997.3453369140625, 846.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1429, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.3453369140625, 759.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1430, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1138.345336914063, 893.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1431, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1115.345336914063, 892.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1432, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1102.345336914063, 854.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1433, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1128.345336914063, 864.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1434, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1145.345336914063, 846.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1435, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118.345336914063, 759.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1436, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1287.345336914063, 893.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1437, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1264.345336914063, 892.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1438, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1251.345336914063, 854.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1439, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1277.345336914063, 864.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1440, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1294.345336914063, 846.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1441, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1267.345336914063, 759.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1442, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1438.345458984375, 892.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1443, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1415.345458984375, 891.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3974, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1402.345458984375, 853.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3975, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1428.345458984375, 863.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3976, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.345458984375, 845.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3977, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1418.345458984375, 758.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3978, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1588.345458984375, 894.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3979, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1565.345458984375, 893.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3980, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1552.345458984375, 855.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3981, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1578.345458984375, 865.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3982, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1595.345458984375, 847.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3983, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1568.345458984375, 760.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3984, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1738.345458984375, 892.7733154296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3985, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1715.345458984375, 891.7733154296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3986, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1702.345458984375, 853.7733154296875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3987, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1728.345458984375, 863.7733154296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3988, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1745.345458984375, 845.7733154296875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3989, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1718.345458984375, 758.7733154296875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3990, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 5730850785626992, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1445, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1446, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1447, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1448, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1449, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1450, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1451, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1452, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 1011642235185193, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1453, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1454, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1455, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1456, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1457, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1458, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1459, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1460, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1461, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1462, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1463, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1464, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1465, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1466, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1467, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1468, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1469, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1470, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1471, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1472, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1473, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1474, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1475, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1476, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1477, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1478, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1479, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1480, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1481, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1482, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1483, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1484, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1485, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1486, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1487, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 1571052676907872, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_008", 1920, 1080, false, "GameSettings", 1575058283199909, [ [ "Back", 0, 9445822392660174, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1488, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1489, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1490, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1491, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1492, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1493, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 6508242145762406, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1494, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1495, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1496, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1497, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [150, 300, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1498, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1499, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1460, 490, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1500, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1502, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 1504, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 1505, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 1506, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [640, 510, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1549, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 580, 0, 419, 23, 0, -1.570796489715576, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 115, 1501, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [300, 640, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1503, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [900, 800, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1507, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1810, 370, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1508, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1660, 800, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1509, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [860, 330, 0, 64, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1510, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [300.0000305175781, 522.8570556640625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1511, [ [1], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [312.1666564941406, 563.523681640625, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1512, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [289.1666564941406, 563.523681640625, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1513, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [279.1666564941406, 524.523681640625, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1514, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [302.1666564941406, 532.523681640625, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1515, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [327.1666564941406, 514.523681640625, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1516, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [290.1666564941406, 432.523681640625, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1517, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1656, 683, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1518, [ [2], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1671, 725, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1519, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1648, 725, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1520, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1635, 683, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1521, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1661, 693, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1522, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676, 675, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1523, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651, 588, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1524, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 373, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1525, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1470, 415, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1526, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1447, 414, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1527, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1434, 376, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1528, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1460, 386, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1529, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1477, 368, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1530, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1453, 279, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1531, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1808, 252.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1532, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1821.666625976563, 293.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1533, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1798.666625976563, 292.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1534, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1785.666625976563, 254.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1535, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1811.666625976563, 264.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1536, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1828.666625976563, 246.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1537, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1801.666625976563, 159.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1538, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [636.1428833007813, 390.9998779296875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1539, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [650.3095092773438, 432.9998779296875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1540, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [627.3095092773438, 431.9998779296875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1541, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [614.3095092773438, 393.9998779296875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1542, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [640.3095092773438, 403.9998779296875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1543, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [657.3095092773438, 385.9998779296875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1544, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [633.3095092773438, 296.9998779296875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1545, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [147, 182, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1546, [ [6], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [160, 225, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1547, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [137, 225, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1548, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [124, 183, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 3991, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [150, 193, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 3992, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [165, 175, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 3993, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [140, 88, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 3994, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [894, 681, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3995, [ [7], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [908, 724, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3996, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 723, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3997, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [872, 685, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3998, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [898, 695, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3999, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [915, 677, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4000, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [888, 590, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4001, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [858, 212, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4002, [ [8], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [870, 253, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4003, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [847, 253, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4004, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [837, 214, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4005, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [860, 222, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4006, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 204, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4007, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [848, 122, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4008, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 5149149487713438, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1550, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1551, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1552, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1553, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1554, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1555, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1556, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1557, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 7563258404358146, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1558, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1559, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1560, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1561, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1562, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1563, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1564, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1565, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1566, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1567, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1568, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1569, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1570, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1571, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1572, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1573, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1574, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1575, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1576, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1577, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1578, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1579, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1580, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1581, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1582, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1583, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1584, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1585, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1586, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1587, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1588, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1589, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1590, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1591, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1592, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 2935401657256664, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_009", 1920, 1080, false, "GameSettings", 5173691688370076, [ [ "Back", 0, 1757594569531998, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1593, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1594, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1595, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1596, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1597, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1598, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 8502988407051248, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1599, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1600, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1601, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1602, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [200, 200, 0, 192, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1603, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1604, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [200, 392, 0, 64, 320, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1605, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1460, 584, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1608, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ -180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [392, 456, 0, 64, 192, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1654, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [130, 104, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1606, [ ], [ [ 0, 2, 0, 5, 0, 1, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [488, 401, 0, 419, 23, 0, 0.7420158386230469, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 115, 1607, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [432, 1525, 0, 64, 448, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1609, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [680, 584, 0, 1024, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1610, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [194, 851, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1611, [ [1], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1832, 849, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1612, [ [2], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1046.428588867188, 465.28564453125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1613, [ [3], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [207, 892, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1614, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [184, 892, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1615, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [174, 853, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1616, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [197, 861, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1617, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [222, 843, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1618, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [185, 761, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1619, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1845, 891, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1620, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1822, 891, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1621, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1812, 852, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1622, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1835, 860, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1623, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1860, 842, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1624, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1823, 760, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1625, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1060.59521484375, 506.9522705078125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1626, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1037.59521484375, 506.9522705078125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1627, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1027.59521484375, 467.9522705078125, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1628, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050.59521484375, 475.9522705078125, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1629, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1075.59521484375, 457.9522705078125, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1630, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1038.59521484375, 375.9522705078125, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1631, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1824, 584, 0, 192, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1653, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1824, 467.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4009, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1837.666625976563, 508.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4010, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1814.666625976563, 507.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4011, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1801.666625976563, 469.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4012, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1827.666625976563, 479.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4013, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1844.666625976563, 461.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4014, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1817.666625976563, 374.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4015, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [746.4285278320313, 854.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1632, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [896.4285278320313, 854.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1633, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1046.428466796875, 854.5714111328125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1634, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [760.5951538085938, 896.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1635, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [737.5951538085938, 895.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1636, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [724.5951538085938, 857.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1637, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [750.5951538085938, 867.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1638, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [767.5951538085938, 849.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1639, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [743.5951538085938, 760.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1640, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [909.5951538085938, 895.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1641, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [886.5951538085938, 894.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1642, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [873.5951538085938, 856.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1643, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [899.5951538085938, 866.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1644, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [916.5951538085938, 848.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1645, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [892.5951538085938, 759.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1646, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1060.59521484375, 895.5714111328125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1647, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1037.59521484375, 894.5714111328125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1648, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1024.59521484375, 856.5714111328125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1649, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050.59521484375, 866.5714111328125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1650, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1067.59521484375, 848.5714111328125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1651, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1043.59521484375, 759.5714111328125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1652, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 3519697586682231, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1655, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1656, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1657, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1658, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1659, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1660, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1661, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1662, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 5212082617669695, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1663, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1664, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1665, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1666, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1667, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1668, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1669, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1670, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1671, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1672, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1673, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1674, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1675, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1676, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1677, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1678, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1679, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1680, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1681, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1682, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1683, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1684, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1685, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1686, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1687, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1688, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1689, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1690, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1691, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1692, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1693, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1694, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1695, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1696, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1697, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 2363853832906525, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_010", 1920, 1080, false, "GameSettings", 3290272803127312, [ [ "Back", 0, 2875805799078356, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1698, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1699, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1700, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1701, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1702, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1703, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3391679323098832, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1704, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1705, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1706, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1707, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1709, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [302, 810, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1710, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1416, 383, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 1711, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1416, 32, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1712, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [853, 383, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1713, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1416, 71, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 1714, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1416, 79, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 1715, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1416, 383, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 1716, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [303, 336, 0, 448, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1759, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1326, 329, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1717, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1506, 329, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1719, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1576, 329, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1720, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1256, 329, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1721, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 284, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1722, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1292, 284, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1723, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [131, 282, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1708, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [198, 282, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1724, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [261, 282, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1725, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [322, 282, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1726, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [388, 282, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1727, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [438, 282, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1728, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [411, 237, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1729, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [351, 237, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1730, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [285, 237, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1731, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [230, 237, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1732, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [159, 237, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1733, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [382, 192, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1734, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [320, 192, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1735, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [255, 192, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1736, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [194, 192, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1737, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [347, 147, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1738, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [289, 147, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1739, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [225, 147, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1740, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [313, 102, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1741, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [254, 102, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1742, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [455, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1743, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [605, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1744, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [755, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1745, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [905, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1746, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1055, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1747, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1205, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1748, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1355, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1749, [ [7], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1505, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1750, [ [8], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1655, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1751, [ [9], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1805, 853, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1752, [ [10], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [468, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1753, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [445, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1754, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [432, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1755, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [458, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1756, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [475, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1757, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [448, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1758, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [620, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4016, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [597, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4017, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [584, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4018, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [610, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4019, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [627, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4020, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4021, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [770, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4022, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [747, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4023, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [734, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4024, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [760, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4025, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [777, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4026, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4027, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [918, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4028, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [895, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4029, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [882, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4030, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [908, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4031, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [925, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4032, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [898, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4033, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1067, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4034, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1044, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4035, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1031, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4036, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1057, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4037, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1074, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4038, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1047, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4039, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1218, 894, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4040, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1195, 893, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4041, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1182, 855, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4042, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1208, 865, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4043, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1225, 847, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4044, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1198, 760, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4045, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1368, 896, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4046, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1345, 895, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4047, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1332, 857, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4048, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1358, 867, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4049, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1375, 849, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4050, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1348, 762, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4051, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1518, 894, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4052, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1495, 893, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4053, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1482, 855, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4054, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1508, 865, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4055, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1525, 847, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4056, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1498, 760, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4057, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1669, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4058, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1646, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4059, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1633, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4060, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1659, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4061, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4062, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1649, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4063, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1818, 895, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 4064, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1795, 894, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 4065, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 856, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 4066, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1808, 866, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 4067, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1825, 848, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 4068, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1798, 761, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 4069, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [279, 57, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4070, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 3487275807064881, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1760, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1761, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1762, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1763, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1764, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1765, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1766, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1767, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 4039006920169141, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1768, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1769, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1770, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1771, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1772, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1773, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1774, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1775, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1776, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1777, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1778, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1779, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1780, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1781, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1782, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1783, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1784, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1785, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1786, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1787, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1788, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1789, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1790, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1791, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1792, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1793, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1794, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1795, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1796, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1797, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1798, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1799, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1800, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1801, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1802, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 8404813694006227, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_011", 1920, 1080, false, "GameSettings", 5593022152612928, [ [ "Back", 0, 6123872060461642, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1803, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1804, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1805, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1806, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1807, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1808, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 2620748180825357, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1809, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1810, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1811, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1812, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1814, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 685, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1815, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [710, 480, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1818, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [460, 685, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1813, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1460, 685, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 1816, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1210, 480, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1817, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [458.0000610351563, 332.000244140625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1819, [ [1], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [476.5346069335938, 386.785888671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 1820, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [450.5346069335938, 385.785888671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 1821, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [437.5346069335938, 347.785888671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 1822, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [463.5346069335938, 357.785888671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 1823, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [482.5346069335938, 342.785888671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 1824, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [453.5346069335938, 255.785888671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 1825, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [465.7922973632813, 231.285888671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 1826, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [959.1250610351563, 331.000244140625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1827, [ [2], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [978.6596069335938, 385.785888671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 1828, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [952.6596069335938, 384.785888671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 1829, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [939.6596069335938, 346.785888671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 1830, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [965.6596069335938, 356.785888671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 1831, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [984.6596069335938, 341.785888671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 1832, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [955.6596069335938, 254.785888671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 1833, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [967.9172973632813, 230.285888671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 1834, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1459.125, 330.000244140625, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1835, [ [3], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1478.659545898438, 384.785888671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 1836, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1452.659545898438, 383.785888671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 1837, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1439.659545898438, 345.785888671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 1838, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1465.659545898438, 355.785888671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 1839, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1484.659545898438, 340.785888671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 1840, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455.659545898438, 253.785888671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 1841, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1467.917236328125, 229.285888671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 1842, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [634.0000610351563, 852.4285888671875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1843, [ [4], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [784.0000610351563, 852.4285888671875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1844, [ [5], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [646.1666870117188, 894.09521484375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1845, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [623.1666870117188, 894.09521484375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1846, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [613.1666870117188, 855.09521484375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1847, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [636.1666870117188, 863.09521484375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1848, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [661.1666870117188, 845.09521484375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1849, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [624.1666870117188, 763.09521484375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1850, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [796.1666870117188, 893.09521484375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1851, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [773.1666870117188, 893.09521484375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1852, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [763.1666870117188, 854.09521484375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1853, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [786.1666870117188, 862.09521484375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1854, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [811.1666870117188, 844.09521484375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1855, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [774.1666870117188, 762.09521484375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1856, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135.428466796875, 851.4285888671875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1857, [ [6], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1285.428466796875, 851.4285888671875, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1858, [ [7], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1147.59521484375, 893.09521484375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 1859, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1124.59521484375, 893.09521484375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 1860, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1114.59521484375, 854.09521484375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 1861, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1137.59521484375, 862.09521484375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 1862, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1162.59521484375, 844.09521484375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 1863, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1125.59521484375, 762.09521484375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 1864, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1296.59521484375, 892.09521484375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4071, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1273.59521484375, 892.09521484375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4072, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1263.59521484375, 853.09521484375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4073, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1286.59521484375, 861.09521484375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4074, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1311.59521484375, 843.09521484375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4075, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1274.59521484375, 761.09521484375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4076, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 7328605989469669, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1865, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1866, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1867, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1868, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1869, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1870, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1871, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1872, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 4919405504812222, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1873, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1874, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1875, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1876, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1877, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1878, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1879, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1880, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1881, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1882, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1883, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1884, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1885, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1886, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1887, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1888, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1889, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1890, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1891, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1892, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1893, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1894, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 1895, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1896, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 1897, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 1898, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 1899, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 1900, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 1901, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 1902, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 1903, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 1904, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 1905, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 1906, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 1907, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 9936281867220763, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_012", 1920, 1080, false, "GameSettings", 2982370750452251, [ [ "Back", 0, 5309525851168569, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 1908, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 1909, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 1910, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 1911, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 1912, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 1913, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 8944350690273073, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1914, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1915, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1916, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 1917, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 1919, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [160, 280, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1922, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 600, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 1923, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [480, 600, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1918, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 280, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1920, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1440, 600, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1924, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1760, 280, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 1925, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [84.14286804199219, 161.999755859375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1926, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [234.1428680419922, 161.999755859375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1927, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [97.80953216552734, 203.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1928, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.80953216552734, 202.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1929, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [61.80953216552734, 164.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1930, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [87.80953216552734, 174.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1931, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [104.8095321655273, 156.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1932, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [77.80953216552734, 69.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1933, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [249.8095245361328, 203.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 1934, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [226.8095245361328, 202.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 1935, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [213.8095245361328, 164.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 1936, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [239.8095245361328, 174.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 1937, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [256.8095092773438, 156.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 1938, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [229.8095245361328, 69.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 1939, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [884.5714111328125, 163.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1940, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1034.571411132813, 163.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1941, [ [4], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [898.738037109375, 205.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1942, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [875.738037109375, 204.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1943, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862.738037109375, 166.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1944, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [888.738037109375, 176.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1945, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [905.738037109375, 158.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1946, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [881.738037109375, 69.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1947, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1047.738037109375, 204.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 1948, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1024.738037109375, 203.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 1949, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1011.738037109375, 165.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 1950, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1037.738037109375, 175.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 1951, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1054.738037109375, 157.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 1952, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1030.738037109375, 68.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 1953, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1685.428466796875, 161.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1954, [ [5], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1835.428466796875, 161.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1955, [ [6], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1699.428466796875, 203.928466796875, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1956, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676.428466796875, 203.928466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1957, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1663.428466796875, 161.928466796875, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1958, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1689.428466796875, 171.928466796875, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1959, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1704.428466796875, 153.928466796875, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1960, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1679.428466796875, 66.928466796875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1961, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1848.428466796875, 204.928466796875, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 1962, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1825.428466796875, 204.928466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 1963, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1812.428466796875, 162.928466796875, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 1964, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1838.428466796875, 172.928466796875, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 1965, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1853.428466796875, 154.928466796875, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 1966, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1828.428466796875, 67.928466796875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 1967, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [405.428466796875, 481.857177734375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1968, [ [7], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [555.428466796875, 481.857177734375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 1969, [ [8], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [416.5950927734375, 522.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4077, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [393.5950927734375, 522.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4078, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [383.5950927734375, 483.5238037109375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4079, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [406.5950927734375, 491.5238037109375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4080, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [431.5950927734375, 473.5238037109375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4081, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [394.5950927734375, 391.5238037109375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4082, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [567.5950927734375, 522.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4083, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [544.5950927734375, 522.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4084, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [534.5950927734375, 483.5238037109375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4085, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [557.5950927734375, 491.5238037109375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4086, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [582.5950927734375, 473.5238037109375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4087, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [545.5950927734375, 391.5238037109375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4088, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1362.437622070313, 470.437744140625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4089, [ [9], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1512.437622070313, 470.437744140625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4090, [ [10], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1380.97216796875, 525.223388671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4091, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1354.97216796875, 524.223388671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4092, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1341.97216796875, 486.223388671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4093, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1367.97216796875, 496.223388671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4094, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1386.97216796875, 481.223388671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4095, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1357.97216796875, 394.223388671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4096, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1370.229858398438, 369.723388671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4097, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1529.97216796875, 524.223388671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4098, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1503.97216796875, 523.223388671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4099, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1490.97216796875, 485.223388671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4100, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1516.97216796875, 495.223388671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4101, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1535.97216796875, 480.223388671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4102, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1506.97216796875, 393.223388671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4103, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1519.229858398438, 368.723388671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4104, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [685, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4189, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [735, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4190, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4191, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4192, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4193, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4194, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [685, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4195, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [735, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4196, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4197, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4198, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4199, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4200, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4201, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4202, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4203, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4204, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1185, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4205, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1235, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4206, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4207, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4208, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4209, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4210, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1185, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4211, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1235, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4212, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 195294884551474, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 1970, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 1971, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 1972, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 1973, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 1974, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 1975, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 1976, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 1977, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 5057768185201793, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 1978, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 1979, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 1980, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1981, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 1982, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1983, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1984, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 1985, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 1986, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 1987, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 1988, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 1989, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 1990, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 1991, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 1992, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 1993, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 1994, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 1995, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 1996, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 1997, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 1998, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 1999, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2000, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2001, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2002, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2003, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2004, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2005, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2006, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2007, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2008, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2009, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2010, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2011, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2012, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 1669888793371785, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_013", 1920, 1080, false, "GameSettings", 4013722146141654, [ [ "Back", 0, 7936781703823239, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2013, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2014, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2015, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2016, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2017, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2018, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3111971737900317, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [1247, 645, 0, 256, 64, 0, 0.0872664600610733, 1, 0.5, 0.5, 0, 0, []], 67, 2023, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1273, 365, 0, 320, 64, 0, 0.0872664600610733, 1, 0.5, 0.5, 0, 0, []], 67, 2030, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2019, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2020, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2021, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2022, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1888, 512, 0, 64, 896, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2025, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1645, 500, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2026, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 1, 0, 4, 0, 0, 0, 400, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 32, 0, 1920, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2027, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1404, 784, 0, 64, 320, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2028, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1058, 562, 0, 80, 80, 0, 0, 1, 0.5, 0.5, 0, 0, []], 118, 2024, [ ], [ [ 0, 2, 0, 3, 0.5, 0.5, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1052, 280, 0, 80, 80, 0, 0, 1, 0.5, 0.5, 0, 0, []], 118, 2029, [ ], [ [ 0, 2, 0, 3, 0.5, 0.5, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1361, 242, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2038, [ [5], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1381, 299, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 2067, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1358, 298, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 2068, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1345, 260, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 2069, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1371, 270, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 2070, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1388, 252, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 2071, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1361, 165, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 2072, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1346, 138, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 2073, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1377.1748046875, 524.699462890625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4217, [ [10], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1394.709350585938, 578.485107421875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4246, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1368.709350585938, 577.485107421875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4247, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1355.709350585938, 539.485107421875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4248, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1381.709350585938, 549.485107421875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4249, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1400.709350585938, 534.485107421875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4250, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1371.709350585938, 447.485107421875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4251, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1383.967041015625, 422.985107421875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4252, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1052, 352, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2031, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1058, 634, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2032, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [800, 352, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2033, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [800, 634, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2034, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [600, 352, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2035, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [600, 634, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2036, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [801, 917, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2039, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [601, 917, 0, 128, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2040, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [597.5000610351563, 222, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2058, [ [3], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [616.9634399414063, 279.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 2059, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [593.9634399414063, 278.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 2060, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [580.9634399414063, 240.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 2061, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [606.9634399414063, 250.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 2062, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [623.9634399414063, 232.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 2063, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [596.9634399414063, 145.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 2064, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [582.7191772460938, 119.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 2065, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [797.5000610351563, 222, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2066, [ [4], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [816.9634399414063, 279.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 2074, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [793.9634399414063, 278.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 4213, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [780.9634399414063, 240.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 4214, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [806.9634399414063, 250.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 4215, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [823.9634399414063, 232.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 4216, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [796.9634399414063, 145.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 4218, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [782.7191772460938, 119.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 4219, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [598, 789, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4220, [ [6], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [617, 843, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4221, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [591, 842, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4222, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [578, 804, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4223, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [604, 814, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4224, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [623, 799, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4225, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [594, 712, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4226, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [606, 687, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4227, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [798, 789, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4228, [ [7], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [817, 843, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4229, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [791, 842, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4230, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [778, 804, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4231, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [804, 814, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4232, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [823, 799, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4233, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [794, 712, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4234, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [806, 687, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4235, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [597, 505.875244140625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4236, [ [8], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [615.5345458984375, 559.660888671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4237, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [589.5345458984375, 558.660888671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4238, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [576.5345458984375, 520.660888671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4239, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [602.5345458984375, 530.660888671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4240, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [621.5345458984375, 515.660888671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4241, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [592.5345458984375, 428.660888671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4242, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [604.792236328125, 404.160888671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4243, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [797, 505.000244140625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4244, [ [9], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [815.5345458984375, 559.785888671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 4245, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [789.5345458984375, 558.785888671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 4253, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [776.5345458984375, 520.785888671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 4254, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [802.5345458984375, 530.785888671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 4255, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [821.5345458984375, 515.785888671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 4256, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [792.5345458984375, 428.785888671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 4257, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [804.792236328125, 404.285888671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 4258, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 9705228788436576, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2075, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2076, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2077, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2078, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2079, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2080, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2081, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2082, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 789730910852403, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2083, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2084, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2085, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2086, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2087, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2088, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2089, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2090, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2091, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2092, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2093, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2094, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2095, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2096, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2097, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2098, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2099, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2100, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2101, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2102, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2103, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2104, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2105, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2106, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2107, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2108, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2109, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2110, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2111, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2112, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2113, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2114, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2115, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2116, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2117, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 6097185708143387, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_014", 1920, 1080, false, "GameSettings", 4971758401041082, [ [ "Back", 0, 5488005413494871, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2118, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2119, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2120, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2121, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2122, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2123, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3608224109493426, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2124, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2125, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2126, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2127, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2129, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1664, 310, 0, 512, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2132, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1170, 240, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2133, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 920, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2055, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 920, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2056, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 920, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2057, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 870, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2140, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 870, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2141, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 870, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2142, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 820, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2158, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 820, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2159, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 820, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2160, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 770, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2164, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 770, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2165, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 770, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2166, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 720, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2176, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 720, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2177, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 720, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2178, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 670, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4274, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 670, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4275, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 670, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4276, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 620, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4280, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 620, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4281, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 620, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4282, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 570, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4298, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 570, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4299, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 570, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4300, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 520, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4304, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 520, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4305, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 520, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4306, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 470, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4322, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 470, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4323, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 470, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4324, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 420, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4328, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 420, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4329, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 420, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4330, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 370, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4340, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 370, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4341, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 370, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4342, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 320, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4358, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 320, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4359, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 320, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4360, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 270, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4364, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 270, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4365, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 270, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4366, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1170, 700, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2128, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1665, 620, 0, 512, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2130, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1513.714233398438, 191.28564453125, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2131, [ [1], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1663.714233398438, 191.28564453125, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2134, [ [2], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1813.714233398438, 191.28564453125, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2135, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1526.880859375, 233.28564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 2136, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1503.880859375, 232.28564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 2179, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1490.880859375, 194.28564453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 4367, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1516.880859375, 204.28564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 4368, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1533.880859375, 186.28564453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 4369, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1509.880859375, 97.28564453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 4370, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676.880859375, 232.28564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 4371, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1653.880859375, 231.28564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 4372, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1640.880859375, 193.28564453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 4373, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1666.880859375, 203.28564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 4374, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1683.880859375, 185.28564453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 4375, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1659.880859375, 96.28564453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 4376, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1827.880859375, 233.28564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 4377, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1804.880859375, 232.28564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 4378, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1791.880859375, 194.28564453125, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 4379, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1817.880859375, 204.28564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 4380, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1834.880859375, 186.28564453125, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 4381, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1810.880859375, 97.28564453125, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 4382, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1514, 501.28564453125, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4383, [ [4], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1664, 501.28564453125, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4384, [ [5], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1814, 501.28564453125, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4385, [ [6], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1526.166625976563, 542.9522705078125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4386, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1503.166625976563, 542.9522705078125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4387, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1493.166625976563, 503.9522705078125, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4388, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1516.166625976563, 511.9522705078125, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4389, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1541.166625976563, 493.9522705078125, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4390, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1504.166625976563, 411.9522705078125, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4391, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676.166625976563, 541.9522705078125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4392, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1653.166625976563, 541.9522705078125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4393, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1643.166625976563, 502.9522705078125, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4394, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1666.166625976563, 510.9522705078125, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4395, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1691.166625976563, 492.9522705078125, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4396, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1654.166625976563, 410.9522705078125, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4397, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1826.166625976563, 542.9522705078125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 4398, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1803.166625976563, 542.9522705078125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 4399, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.166625976563, 503.9522705078125, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 4400, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1816.166625976563, 511.9522705078125, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 4401, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1841.166625976563, 493.9522705078125, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 4402, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1804.166625976563, 411.9522705078125, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 4403, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1511.500244140625, 838.875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4404, [ [7], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1661.500244140625, 838.875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4405, [ [8], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1811.500244140625, 838.875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 4406, [ [9], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1530.963623046875, 895.374755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 4407, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1507.963623046875, 894.374755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 4408, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1494.963623046875, 856.374755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 4409, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1520.963623046875, 866.374755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 4410, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1537.963623046875, 848.374755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 4411, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1510.963623046875, 761.374755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 4412, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1496.719360351563, 734.8759765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 4413, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1681.963623046875, 895.374755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 4414, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1658.963623046875, 894.374755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 4415, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1645.963623046875, 856.374755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 4416, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1671.963623046875, 866.374755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 4417, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1688.963623046875, 848.374755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 4418, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1661.963623046875, 761.374755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 4419, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1647.719360351563, 734.8759765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 4420, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1829.963623046875, 895.374755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 4421, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1806.963623046875, 894.374755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 4422, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.963623046875, 856.374755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 4423, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1819.963623046875, 866.374755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 4424, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1836.963623046875, 848.374755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 4425, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1809.963623046875, 761.374755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 4426, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1795.719360351563, 734.8759765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 4427, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 220, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2037, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 220, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2041, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 220, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2042, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 170, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2043, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 170, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2044, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 170, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2045, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 120, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2046, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 120, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2047, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 120, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2048, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 70, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2049, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 70, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2050, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 70, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2051, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [819, 20, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2052, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [869, 20, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2053, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [919, 20, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 2054, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 1340815962796401, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2180, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2181, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2182, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2183, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2184, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2185, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2186, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2187, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 4785627131149978, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2188, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2189, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2190, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2191, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2192, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2193, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2194, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2195, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2196, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2197, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2198, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2199, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2200, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2201, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2202, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2203, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2204, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2205, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2206, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2207, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2208, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2209, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2210, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2211, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2212, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2213, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2214, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2215, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2216, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2217, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2218, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2219, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2220, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2221, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2222, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 9825187857534142, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_015", 1920, 1080, false, "GameSettings", 8811628645654303, [ [ "Back", 0, 2122538883009377, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2223, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2224, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2225, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2226, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2227, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2228, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 9298643831993529, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2229, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2230, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2231, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2232, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [128, 620, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2233, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2234, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1792, 342, 0, 256, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2235, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [960, 384, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2236, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 32, 0, 1920, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2237, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [500, 620, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2238, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 72, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2239, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 80, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2240, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 384, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2241, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [128, 342, 0, 256, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2284, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1420, 620, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2137, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1792, 620, 0, 256, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2138, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [500, 342, 0, 128, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2139, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1420, 342, 0, 128, 64, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2143, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [55.14286804199219, 501.999755859375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2144, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [205.1428680419922, 501.999755859375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2145, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [68.80953216552734, 543.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2146, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [45.80953216552734, 542.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2147, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [32.80953216552734, 504.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2148, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [58.80953216552734, 514.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2149, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [75.80953216552734, 496.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2150, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [48.80953216552734, 409.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2151, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [220.8095245361328, 543.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2152, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [197.8095245361328, 542.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2153, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [184.8095245361328, 504.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2154, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [210.8095245361328, 514.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2155, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [227.8095245361328, 496.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2156, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [200.8095245361328, 409.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2157, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1716.571411132813, 502.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2161, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1866.571411132813, 502.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2162, [ [4], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1730.738037109375, 544.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 2163, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1707.738037109375, 543.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 2167, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1694.738037109375, 505.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 2168, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1720.738037109375, 515.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 2169, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1737.738037109375, 497.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 2170, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1713.738037109375, 408.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 2171, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1879.738037109375, 543.428466796875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 2172, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1856.738037109375, 542.428466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 2173, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1843.738037109375, 504.428466796875, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 2174, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1869.738037109375, 514.428466796875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 2175, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1886.738037109375, 496.428466796875, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 2242, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1862.738037109375, 407.428466796875, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 2243, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1717.428466796875, 222.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2244, [ [5], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1867.428466796875, 222.428466796875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2245, [ [6], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1731.428466796875, 264.928466796875, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 2246, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1708.428466796875, 264.928466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 2247, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1695.428466796875, 222.928466796875, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 2248, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1721.428466796875, 232.928466796875, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 2249, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1736.428466796875, 214.928466796875, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 2250, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1711.428466796875, 127.928466796875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 2251, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1880.428466796875, 265.928466796875, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 2252, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1857.428466796875, 265.928466796875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 2253, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1844.428466796875, 223.928466796875, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 2254, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1870.428466796875, 233.928466796875, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 2255, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1885.428466796875, 215.928466796875, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 2256, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1860.428466796875, 128.928466796875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 2257, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [64.428466796875, 223.857177734375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2258, [ [7], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [214.428466796875, 223.857177734375, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2259, [ [8], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [75.5950927734375, 264.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 2260, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [52.5950927734375, 264.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 2261, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [42.5950927734375, 225.5238037109375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 2262, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.5950927734375, 233.5238037109375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 2263, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [90.5950927734375, 215.5238037109375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 2264, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [53.5950927734375, 133.5238037109375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 2265, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [226.5950927734375, 264.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 2266, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [203.5950927734375, 264.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 2267, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193.5950927734375, 225.5238037109375, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 2268, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [216.5950927734375, 233.5238037109375, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 2269, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [241.5950927734375, 215.5238037109375, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 2270, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [204.5950927734375, 133.5238037109375, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 2271, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [497, 210.000244140625, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2272, [ [9], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [515.5345458984375, 264.785888671875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 2273, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [489.5345458984375, 263.785888671875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 2274, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [476.5345458984375, 225.785888671875, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 2275, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [502.5345458984375, 235.785888671875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 2276, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [521.5345458984375, 220.785888671875, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 2277, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [492.5345458984375, 133.785888671875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 2278, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [504.792236328125, 109.285888671875, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 2279, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1418.375122070313, 210.875, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2280, [ [10], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1436.838500976563, 267.374755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 2281, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1413.838500976563, 266.374755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 2282, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1400.838500976563, 228.374755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 2283, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1426.838500976563, 238.374755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 4259, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1443.838500976563, 220.374755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 4260, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1416.838500976563, 133.374755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 4261, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1402.59423828125, 106.8759765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 4262, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4265, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4266, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4267, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4268, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4271, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4272, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4273, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4277, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4278, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4279, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4283, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 917, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4284, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4287, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4288, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4289, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 867, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4290, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4295, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4296, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4297, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4301, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4307, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4308, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4309, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4310, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4311, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4312, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4313, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 817, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4314, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4317, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4318, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4319, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 767, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4320, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4331, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4332, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4333, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4334, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4335, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4336, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4337, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 717, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4338, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4346, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4347, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4348, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4349, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [785, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4352, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [835, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4353, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [885, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4354, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [935, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4355, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4356, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4357, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4361, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 667, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4362, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [985, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4429, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1035, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4430, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1085, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4431, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1135, 617, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4432, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Top", 2, 9278375792319493, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2285, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2286, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2287, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2288, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2289, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2290, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2291, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2292, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 5686496159540934, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2293, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2294, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2295, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2296, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2297, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2298, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2299, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2300, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2301, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2302, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2303, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2304, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2305, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2306, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2307, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2308, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2309, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2310, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2311, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2312, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2313, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2314, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2315, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2316, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2317, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2318, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2319, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2320, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2321, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2322, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2323, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2324, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2325, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2326, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2327, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 7467896467506186, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_016", 1920, 1080, false, "GameSettings", 368251963921088, [ [ "Back", 0, 8638087935520061, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2328, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2329, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2330, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2331, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2332, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2333, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 7774063752663526, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2334, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2335, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2336, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2337, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2338, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2339, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2340, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2341, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2342, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2343, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2344, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2345, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2346, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2347, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2348, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2349, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2350, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2351, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2352, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2353, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2354, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2355, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2356, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2357, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2358, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2359, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2360, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2361, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2362, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2363, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2364, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2365, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2366, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2367, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2368, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2369, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2370, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2371, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2372, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2373, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2374, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2375, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2376, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2377, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2378, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2379, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2380, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2381, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2382, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2383, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2384, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2385, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2386, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2387, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2388, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2389, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 5141196885536557, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2390, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2391, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2392, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2393, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2394, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2395, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2396, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2397, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 8365324860286973, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2398, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2399, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2400, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2401, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2402, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2403, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2404, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2405, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2406, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2407, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2408, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2409, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2410, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2411, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2412, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2413, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2414, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2415, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2416, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2417, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2418, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2419, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2420, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2421, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2422, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2423, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2424, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2425, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2426, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2427, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2428, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2429, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2430, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2431, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2432, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 6439480509022747, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_017", 1920, 1080, false, "GameSettings", 1704865982281818, [ [ "Back", 0, 4736185978289892, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2433, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2434, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2435, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2436, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2437, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2438, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 4297577428550004, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2439, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2440, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2441, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2442, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2443, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2444, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2445, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2446, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2447, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2448, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2449, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2450, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2451, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2452, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2453, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2454, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2455, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2456, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2457, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2458, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2459, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2460, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2461, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2462, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2463, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2464, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2465, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2466, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2467, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2468, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2469, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2470, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2471, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2472, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2473, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2474, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2475, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2476, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2477, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2478, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2479, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2480, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2481, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2482, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2483, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2484, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2485, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2486, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2487, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2488, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2489, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2490, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2491, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2492, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2493, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2494, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 2010716744321197, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2495, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2496, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2497, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2498, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2499, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2500, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2501, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2502, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 1015449806181796, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2503, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2504, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2505, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2506, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2507, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2508, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2509, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2510, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2511, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2512, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2513, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2514, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2515, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2516, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2517, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2518, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2519, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2520, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2521, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2522, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2523, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2524, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2525, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2526, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2527, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2528, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2529, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2530, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2531, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2532, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2533, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2534, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2535, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2536, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2537, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 7078835281850941, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_018", 1920, 1080, false, "GameSettings", 7488129083262042, [ [ "Back", 0, 7210622107556181, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2538, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2539, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2540, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2541, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2542, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2543, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 2543022586486413, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2544, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2545, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2546, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2547, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2548, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2549, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2550, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2551, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2552, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2553, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2554, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2555, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2556, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2557, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2558, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2559, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2560, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2561, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2562, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2563, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2564, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2565, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2566, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2567, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2568, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2569, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2570, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2571, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2572, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2573, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2574, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2575, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2576, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2577, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2578, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2579, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2580, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2581, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2582, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2583, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2584, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2585, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2586, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2587, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2588, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2589, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2590, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2591, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2592, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2593, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2594, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2595, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2596, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2597, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2598, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2599, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 4790386171040447, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2600, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2601, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2602, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2603, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2604, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2605, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2606, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2607, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 3823708240864189, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2608, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2609, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2610, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2611, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2612, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2613, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2614, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2615, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2616, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2617, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2618, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2619, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2620, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2621, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2622, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2623, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2624, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2625, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2626, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2627, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2628, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2629, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2630, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2631, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2632, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2633, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2634, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2635, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2636, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2637, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2638, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2639, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2640, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2641, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2642, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 2536432891498513, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_019", 1920, 1080, false, "GameSettings", 6991085891496231, [ [ "Back", 0, 1397378667214798, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2643, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2644, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2645, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2646, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2647, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2648, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3366134908322621, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2649, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2650, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2651, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2652, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2653, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2654, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2655, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2656, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2657, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2658, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2659, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2660, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2661, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2662, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2663, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2664, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2665, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2666, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2667, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2668, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2669, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2670, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2671, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2672, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2673, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2674, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2675, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2676, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2677, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2678, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2679, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2680, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2681, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2682, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2683, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2684, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2685, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2686, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2687, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2688, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2689, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2690, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2691, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2692, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2693, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2694, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2695, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2696, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2697, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2698, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2699, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2700, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2701, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2702, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2703, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2704, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 9676861367996262, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2705, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2706, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2707, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2708, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2709, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2710, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2711, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2712, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 9583154839616755, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2713, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2714, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2715, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2716, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2717, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2718, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2719, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2720, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2721, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2722, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2723, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2724, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2725, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2726, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2727, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2728, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2729, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2730, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2731, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2732, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2733, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2734, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2735, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2736, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2737, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2738, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2739, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2740, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2741, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2742, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2743, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2744, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2745, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2746, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2747, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 5707698995226302, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_020", 1920, 1080, false, "GameSettings", 8643717383966255, [ [ "Back", 0, 2106992742787423, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2748, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2749, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2750, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2751, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2752, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2753, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3621012885701127, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2754, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2755, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2756, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2757, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2758, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2759, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2760, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2761, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2762, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2763, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2764, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2765, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2766, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2767, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2768, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2769, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2770, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2771, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2772, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2773, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2774, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2775, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2776, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2777, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2778, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2779, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2780, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2781, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2782, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2783, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2784, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2785, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2786, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2787, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2788, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2789, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2790, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2791, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2792, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2793, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2794, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2795, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2796, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2797, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2798, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2799, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2800, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2801, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2802, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2803, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2804, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2805, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2806, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2807, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2808, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2809, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 8710094080714821, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2810, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2811, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2812, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2813, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2814, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2815, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2816, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2817, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 1218486202150608, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2818, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2819, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2820, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2821, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2822, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2823, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2824, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2825, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2826, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2827, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2828, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2829, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2830, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2831, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2832, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2833, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2834, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2835, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2836, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2837, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2838, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2839, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2840, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2841, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2842, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2843, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2844, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2845, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2846, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2847, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2848, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2849, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2850, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2851, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2852, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 1799532070547442, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_021", 1920, 1080, false, "GameSettings", 8868793176115898, [ [ "Back", 0, 4864673738598154, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2853, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2854, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2855, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2856, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2857, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2858, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 1192032625435304, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2859, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2860, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2861, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2862, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2863, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2864, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2865, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2866, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2867, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2868, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2869, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2870, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2871, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2872, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2873, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2874, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2875, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2876, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2877, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2878, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2879, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2880, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2881, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2882, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2883, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2884, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2885, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2886, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2887, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2888, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2889, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2890, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2891, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2892, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2893, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2894, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2895, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2896, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2897, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2898, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2899, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2900, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2901, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2902, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2903, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2904, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2905, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2906, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2907, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2908, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2909, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2910, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2911, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2912, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2913, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2914, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 5368006708178957, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 2915, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 2916, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 2917, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 2918, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 2919, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 2920, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 2921, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 2922, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 4260919717029986, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 2923, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 2924, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 2925, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2926, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 2927, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2928, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2929, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2930, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 2931, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 2932, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 2933, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 2934, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 2935, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 2936, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 2937, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 2938, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 2939, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 2940, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 2941, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 2942, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 2943, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 2944, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 2945, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 2946, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 2947, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 2948, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 2949, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 2950, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 2951, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 2952, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 2953, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 2954, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 2955, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 2956, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 2957, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 9347971552312421, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_022", 1920, 1080, false, "GameSettings", 4862876865555863, [ [ "Back", 0, 1202246930954052, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 2958, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 2959, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 2960, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 2961, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 2962, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 2963, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 8968277646917365, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2964, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2965, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2966, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 2967, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2968, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 2969, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 2970, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 2971, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 2972, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 2973, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 2974, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 2975, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 2976, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2977, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2978, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2979, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2980, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2981, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2982, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2983, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2984, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2985, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2986, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2987, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2988, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2989, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2990, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2991, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 2992, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 2993, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 2994, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 2995, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 2996, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 2997, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2998, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 2999, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3000, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3001, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3002, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3003, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3004, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3005, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3006, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3007, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3008, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3009, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3010, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3011, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3012, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3013, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3014, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3015, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3016, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3017, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3018, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3019, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 793881841589234, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3020, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3021, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3022, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3023, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3024, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3025, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3026, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3027, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 422584358599549, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3028, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3029, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3030, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3031, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3032, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3033, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3034, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3035, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3036, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3037, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3038, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3039, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3040, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3041, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3042, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3043, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3044, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3045, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3046, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3047, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3048, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3049, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3050, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3051, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3052, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3053, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3054, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3055, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3056, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3057, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3058, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3059, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3060, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3061, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3062, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 1168281149216675, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_023", 1920, 1080, false, "GameSettings", 1466860173763771, [ [ "Back", 0, 4714002583726571, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3063, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3064, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3065, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3066, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3067, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3068, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 1051242858238608, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3069, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3070, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3071, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3072, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3073, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3074, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3075, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3076, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3077, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3078, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3079, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3080, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3081, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3082, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3083, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3084, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3085, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3086, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3087, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3088, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3089, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3090, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3091, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3092, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3093, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3094, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3095, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3096, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3097, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3098, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3099, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3100, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3101, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3102, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3103, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3104, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3105, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3106, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3107, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3108, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3109, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3110, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3111, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3112, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3113, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3114, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3115, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3116, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3117, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3118, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3119, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3120, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3121, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3122, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3123, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3124, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 8351121905873279, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3125, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3126, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3127, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3128, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3129, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3130, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3131, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3132, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 6951844105860647, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3133, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3134, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3135, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3136, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3137, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3138, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3139, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3140, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3141, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3142, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3143, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3144, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3145, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3146, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3147, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3148, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3149, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3150, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3151, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3152, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3153, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3154, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3155, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3156, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3157, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3158, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3159, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3160, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3161, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3162, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3163, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3164, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3165, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3166, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3167, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 6796065234433611, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_024", 1920, 1080, false, "GameSettings", 39633171874797, [ [ "Back", 0, 2443291662081135, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3168, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3169, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3170, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3171, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3172, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3173, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 2901382955984214, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3174, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3175, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3176, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3177, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3178, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3179, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3180, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3181, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3182, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3183, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3184, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3185, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3186, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3187, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3188, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3189, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3190, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3191, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3192, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3193, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3194, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3195, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3196, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3197, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3198, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3199, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3200, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3201, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3202, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3203, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3204, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3205, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3206, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3207, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3208, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3209, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3210, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3211, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3212, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3213, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3214, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3215, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3216, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3217, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3218, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3219, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3220, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3221, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3222, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3223, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3224, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3225, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3226, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3227, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3228, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3229, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 8754026354256977, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3230, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3231, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3232, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3233, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3234, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3235, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3236, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3237, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 6652229174440341, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3238, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3239, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3240, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3241, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3242, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3243, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3244, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3245, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3246, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3247, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3248, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3249, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3250, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3251, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3252, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3253, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3254, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3255, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3256, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3257, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3258, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3259, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3260, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3261, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3262, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3263, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3264, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3265, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3266, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3267, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3268, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3269, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3270, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3271, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3272, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 7120981806512999, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_025", 1920, 1080, false, "GameSettings", 2923812437577445, [ [ "Back", 0, 502266493930811, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3273, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3274, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3275, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3276, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3277, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3278, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 5102449165418823, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3279, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3280, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3281, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3282, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3283, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3284, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3285, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3286, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3287, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3288, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3289, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3290, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3291, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3292, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3293, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3294, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3295, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3296, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3297, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3298, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3299, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3300, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3301, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3302, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3303, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3304, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3305, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3306, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3307, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3308, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3309, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3310, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3311, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3312, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3313, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3314, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3315, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3316, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3317, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3318, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3319, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3320, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3321, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3322, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3323, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3324, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3325, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3326, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3327, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3328, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3329, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3330, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3331, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3332, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3333, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3334, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 5188841556803488, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3335, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3336, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3337, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3338, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3339, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3340, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3341, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3342, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 9045845991012398, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3343, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3344, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3345, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3346, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3347, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3348, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3349, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3350, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3351, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3352, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3353, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3354, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3355, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3356, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3357, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3358, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3359, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3360, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3361, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3362, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3363, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3364, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3365, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3366, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3367, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3368, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3369, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3370, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3371, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3372, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3373, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3374, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3375, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3376, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3377, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 4584940952985696, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_026", 1920, 1080, false, "GameSettings", 4665081631231505, [ [ "Back", 0, 4288492590049561, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3378, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3379, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3380, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3381, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3382, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3383, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 5903726425430785, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3384, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3385, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3386, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3387, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3388, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3389, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3390, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3391, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3392, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3393, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3394, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3395, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3396, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3397, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3398, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3399, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3400, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3401, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3402, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3403, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3404, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3405, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3406, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3407, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3408, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3409, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3410, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3411, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3412, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3413, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3414, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3415, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3416, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3417, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3418, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3419, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3420, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3421, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3422, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3423, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3424, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3425, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3426, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3427, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3428, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3429, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3430, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3431, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3432, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3433, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3434, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3435, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3436, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3437, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3438, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3439, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 4515506381041626, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3440, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3441, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3442, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3443, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3444, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3445, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3446, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3447, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 766850970644226, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3448, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3449, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3450, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3451, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3452, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3453, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3454, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3455, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3456, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3457, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3458, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3459, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3460, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3461, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3462, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3463, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3464, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3465, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3466, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3467, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3468, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3469, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3470, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3471, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3472, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3473, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3474, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3475, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3476, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3477, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3478, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3479, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3480, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3481, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3482, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 3643986608997549, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_027", 1920, 1080, false, "GameSettings", 3853538850400468, [ [ "Back", 0, 6577654722217755, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3483, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3484, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3485, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3486, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3487, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3488, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3631667952600089, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3489, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3490, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3491, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3492, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3493, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3494, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3495, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3496, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3497, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3498, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3499, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3500, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3501, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3502, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3503, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3504, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3505, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3506, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3507, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3508, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3509, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3510, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3511, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3512, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3513, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3514, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3515, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3516, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3517, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3518, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3519, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3520, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3521, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3522, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3523, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3524, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3525, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3526, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3527, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3528, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3529, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3530, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3531, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3532, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3533, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3534, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3535, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3536, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3537, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3538, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3539, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3540, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3541, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3542, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3543, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3544, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 2440896059506782, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3545, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3546, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3547, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3548, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3549, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3550, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3551, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3552, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 9277799775715919, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3553, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3554, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3555, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3556, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3557, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3558, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3559, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3560, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3561, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3562, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3563, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3564, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3565, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3566, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3567, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3568, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3569, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3570, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3571, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3572, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3573, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3574, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3575, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3576, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3577, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3578, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3579, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3580, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3581, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3582, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3583, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3584, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3585, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3586, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3587, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 9312155153042551, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_028", 1920, 1080, false, "GameSettings", 2413255142019878, [ [ "Back", 0, 3126366075627914, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3588, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3589, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3590, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3591, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3592, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3593, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3168044273094953, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3594, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3595, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3596, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3597, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3598, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3599, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3600, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3601, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3602, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3603, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3604, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3605, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3606, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3607, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3608, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3609, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3610, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3611, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3612, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3613, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3614, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3615, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3616, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3617, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3618, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3619, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3620, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3621, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3622, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3623, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3624, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3625, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3626, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3627, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3628, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3629, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3630, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3631, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3632, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3633, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3634, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3635, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3636, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3637, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3638, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3639, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3640, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3641, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3642, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3643, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3644, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3645, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3646, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3647, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3648, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3649, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 2609152207919859, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3650, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3651, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3652, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3653, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3654, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3655, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3656, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3657, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 7119909635616017, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3658, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3659, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3660, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3661, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3662, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3663, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3664, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3665, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3666, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3667, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3668, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3669, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3670, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3671, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3672, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3673, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3674, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3675, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3676, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3677, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3678, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3679, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3680, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3681, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3682, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3683, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3684, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3685, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3686, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3687, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3688, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3689, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3690, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3691, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3692, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 2666776730179544, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_029", 1920, 1080, false, "GameSettings", 3408081025353226, [ [ "Back", 0, 3821847238732941, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3693, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3694, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3695, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3696, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3697, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3698, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 3128353671173786, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3699, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3700, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3701, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3702, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3703, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3704, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3705, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3706, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3707, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3708, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3709, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3710, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3711, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3712, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3713, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3714, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3715, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3716, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3717, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3718, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3719, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3720, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3721, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3722, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3723, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3724, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3725, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3726, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3727, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3728, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3729, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3730, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3731, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3732, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3733, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3734, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3735, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3736, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3737, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3738, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3739, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3740, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3741, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3742, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3743, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3744, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3745, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3746, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3747, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3748, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3749, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3750, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3751, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3752, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3753, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3754, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 4691921972085076, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3755, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3756, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3757, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3758, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3759, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3760, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3761, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3762, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 9368638810414309, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3763, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3764, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3765, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3766, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3767, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3768, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3769, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3770, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3771, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3772, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3773, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3774, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3775, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3776, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3777, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3778, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3779, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3780, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3781, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3782, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3783, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3784, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3785, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3786, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3787, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3788, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3789, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3790, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3791, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3792, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3793, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3794, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3795, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3796, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3797, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 2399948148768899, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Level_030", 1920, 1080, false, "GameSettings", 1074528645986461, [ [ "Back", 0, 8281430928744271, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 3798, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 3799, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 3800, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 3801, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 3802, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 3803, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] ], [ ] ] , [ "Player", 1, 9641884562416068, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [-16, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3804, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [1936, 540, 0, 32, 1144, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3805, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, -16, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3806, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [960, 955, 0, 1984, 32, 0, 0, 1, 0.5, 0.5, 0, 0, []], 69, 3807, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [862, 124, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3808, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [2032, -15, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 3809, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1456, 702, 0, 64, 512, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3810, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1118, 379, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 3811, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 28, 0, 448, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 67, 3812, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] , [ [1705, 510, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 3813, [ ], [ [ 1 ], [ 0, 1, 0, 5, 5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 67, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 3814, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 75, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 3815, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1118, 379, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 3816, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [966.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3817, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1116.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3818, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1266.857177734375, 853.0001220703125, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3819, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [980.5238647460938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3820, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [957.5238647460938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3821, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [944.5238647460938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3822, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [970.5238647460938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3823, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [987.5238647460938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3824, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960.5238647460938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3825, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1132.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3826, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1109.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3827, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1096.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3828, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1122.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3829, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1139.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3830, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1112.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3831, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1282.523803710938, 894.666748046875, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3832, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1259.523803710938, 893.666748046875, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3833, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1246.523803710938, 855.666748046875, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3834, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1272.523803710938, 865.666748046875, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3835, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1289.523803710938, 847.666748046875, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3836, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1262.523803710938, 760.666748046875, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3837, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1630.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3838, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1780.428588867188, 849.999755859375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3839, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1644.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3840, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1621.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3841, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1608.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3842, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1634.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3843, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1651.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3844, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1624.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3845, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.09521484375, 891.6663818359375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3846, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1770.09521484375, 890.6663818359375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3847, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1757.09521484375, 852.6663818359375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3848, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1783.09521484375, 862.6663818359375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3849, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.09521484375, 844.6663818359375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3850, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1773.09521484375, 757.6663818359375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3851, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1455, 364.857177734375, 0, 90, 180, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 3852, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1468.666625976563, 405.5238037109375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 3853, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1445.666625976563, 404.5238037109375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 3854, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1432.666625976563, 366.5238037109375, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 3855, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1458.666625976563, 376.5238037109375, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 3856, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1475.666625976563, 358.5238037109375, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 3857, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1448.666625976563, 271.5238037109375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 3858, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [862, 822, 0, 64, 256, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 67, 3859, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 1 ] ] ], [ ] ] , [ "Top", 2, 3522334137929983, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 3860, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [93.89970397949219, 908.2835083007813, 0, 21, 25, 0, 0, 1, 0.4285714328289032, 0, 0, 0, []], 121, 3861, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65.39907836914063, 908.7844848632813, 0, 22, 25, 0, 0, 1, 0.4090909063816071, 0, 0, 0, []], 122, 3862, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [96.50010681152344, 871.000244140625, 0, 40, 21, 0, 0.8566004633903503, 1, 0.1749999970197678, 0.4285714328289032, 0, 0, []], 124, 3863, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [79.50010681152344, 882.000244140625, 0, 57, 61, 0, 0, 1, 0.5087719559669495, 0.5081967115402222, 0, 0, []], 123, 3864, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [74.50010681152344, 806.000244140625, 0, 116, 113, 0, 0, 1, 0.5, 0.5044247508049011, 0, 0, []], 119, 3865, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [66.00013732910156, 867.5005493164063, 0, 87, 41, 0, 0, 1, 0, 0.5121951103210449, 0, 0, []], 125, 3866, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [58.50010681152344, 870.000244140625, 0, 44, 23, 0, 0, 1, 0.1363636404275894, 0.260869562625885, 0, 0, []], 120, 3867, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 3, 7624951665925207, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [960, 470, 0, 1920, 940, 0, 0, 0.300000011920929, 0.5, 0.5, 0, 0, []], 18, 3868, [ ], [ ], [ 1, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 1, 0.5, 0.5, 0, 0, []], 31, 3869, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1640, 0, 600, 600, 0, 0, 0.5, 0.5, 0.5, 1, 0, []], 14, 3870, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [65, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3871, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1240, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 20, 3872, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1782, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3873, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 1055, 0, 1000, 150, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3874, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [138, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3875, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 3876, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 3877, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 1, 3878, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 7, 3879, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1603, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 2, 3880, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 11, 3881, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [1080, 1240, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 12, 3882, [ ], [ ], [ 0, "Default", 1, 1 ] ] , [ [960, 1040, 0, 384, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 13, 3883, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "$0", 1, 0, 1, 1, 1, 0, -24, 0 ] ] , [ [690, 1040, 0, 288, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 15, 3884, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "MG:00", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 3885, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 17, 3886, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "FPS:80", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1340, 1040, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 19, 3887, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "X000", 1, 0, 0, 1, 1, 0, -24, 0 ] ] , [ [1213, 1040, 0, 70, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 22, 3888, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [523, 1040, 0, 54, 72, 0, 0, 1, 0.5, 0.5, 0, 0, []], 23, 3889, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [150, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 27, 3890, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "LVL:100", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [1865, -10, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 3891, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1770, 35, 0, 320, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 26, 3892, [ ], [ ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "KILL:00", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [960, 1455, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 38, 3893, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 1497, 0, 130, 132, 0, 0, 1, 0.5, 0.5, 0, 0, []], 36, 3894, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 1494, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 40, 3895, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [787, 2087, 0, 138, 140, 0, 0, 1, 0.5, 0.5, 0, 0, []], 35, 3896, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 2045, 0, 175, 167, 0, 0, 1, 0.5028571486473084, 0.5029940009117127, 0, 0, []], 37, 3897, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1137, 2084, 0, 138, 139, 0, 0, 1, 0.5, 0.5035971403121948, 0, 0, []], 39, 3898, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [780, 1825, 0, 137, 143, 0, 0, 1, 0.5109488964080811, 0.5104895234107971, 0, 0, []], 32, 3899, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 34, 3900, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1140, 1825, 0, 137, 143, 0, 0, 1, 0.5036496520042419, 0.503496527671814, 0, 0, []], 33, 3901, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, -280, 0, 640, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 41, 3902, [ ], [ [ 1, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 4, 6062479958239119, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "LevelsMenu", 1920, 1080, false, "GameSettings", 324108248710137, [ [ "Back", 0, 2627518155316315, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 817, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 818, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 819, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 820, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 821, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 822, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] , [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 903, [ ], [ ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 1, 1619800834376111, true, [255, 255, 255], true, 0, 0, 1, false, 1, 0, 0, [ [ [1906, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 912, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 35, 0, 1000, 150, 0, 3.141592741012573, 1, 0.5, 0.5, 0, 0, []], 21, 913, [ ], [ ], [ 0, "Default", 2, 1 ] ] , [ [14, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 914, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 916, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 917, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [840, 1240, 0, 28, 40, 0, 0, 1, 0.3571428656578064, 0.02500000037252903, 0, 0, []], 11, 921, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [1080, 1240, 0, 28, 40, 0, 0, 1, 0.3571428656578064, 0.02500000037252903, 0, 0, []], 12, 922, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 925, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 275, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 823, [ [3] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 525, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 824, [ [8] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 775, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 825, [ [13] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [670, 275, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 826, [ [2] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [670, 525, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 827, [ [7] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [670, 775, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 828, [ [12] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [380, 275, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 829, [ [1] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [380, 525, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 830, [ [6] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [380, 775, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 831, [ [11] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 275, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 832, [ [5] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 525, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 833, [ [10] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1540, 775, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 834, [ [15] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1250, 275, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 835, [ [4] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1250, 525, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 836, [ [9] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1250, 775, 0, 180, 200, 0, 0, 1, 0.5, 0.5, 0, 0, []], 28, 837, [ [14] ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1780, 525, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 9, 841, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [140, 525, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 0, 842, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [380, 265, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 845, [ [1] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "1", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [670, 265, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 846, [ [2] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "2", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [960, 265, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 847, [ [3] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "3", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [1250, 265, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 848, [ [4] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "4", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [1540, 265, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 849, [ [5] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "5", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [380, 515, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 850, [ [6] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "6", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [670, 515, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 851, [ [7] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "7", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [960, 515, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 852, [ [8] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "8", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [1250, 515, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 853, [ [9] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "9", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [1540, 515, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 854, [ [10] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "10", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [380, 765, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 855, [ [11] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "11", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [670, 765, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 856, [ [12] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "12", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [960, 765, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 857, [ [13] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "13", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [1250, 765, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 858, [ [14] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "14", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [1540, 765, 0, 200, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []], 29, 859, [ [15] ], [ [ 0, 6, 0, 1, 0, 0, 0, 50, 0 ] ], [ 128, 128, "0123456789:=+-/%", "15", 0.75, 0, 1, 1, 1, 0, -44, 0 ] ] , [ [960, 45, 0, 700, 70, 0, 0, 1, 0.5, 0.5, 0, 0, []], 30, 860, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 8, 4479, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 2, 7292557373671776, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "StartMenu", 1920, 1080, false, "AddSettings", 3978585123239567, [ [ "Back", 0, 1792610370566321, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 480, 0, 1920, 960, 0, 0, 1, 0.5, 0.5, 0, 0, []], 42, 12, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 880, 0, 1920, 398, 0, 0, 1, 0.5, 0.5, 0, 0, []], 43, 4478, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 6, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1583, 225, 0, 333, 253, 0, 0, 1, 0.5015015006065369, 0.5019763112068176, 0, 0, []], 47, 4474, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [-40, 160, 0, 3840, 139, 0, 0, 1, 0, 0, 0, 0, []], 45, 4475, [ ], [ [ -40, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 5, 0, 0, 0, 30, 0 ] ], [ 0, 0 ] ] , [ [-40, 380, 0, 3840, 96, 0, 0, 1, 0, 0, 0, 0, []], 46, 4476, [ ], [ [ -60, 0, 0, 0, 0, 1 ], [ 1, 6, 0, 4, 0, 0, 0, 40, 0 ] ], [ 0, 0 ] ] , [ [960, 840, 0, 1920, 274, 0, 0, 1, 0.5, 0.5, 0, 0, []], 44, 4477, [ ], [ [ 1, 1, 0, 6, 0, 0, 0, 3, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 905, 0, 1920, 354, 0, 0, 1, 0.5, 0.5, 0, 0, []], 126, 4473, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 270, 0, 768, 384, 0, 0, 1, 0.5, 0.5, 0, 0, []], 48, 36, [ ], [ [ 1, 2, 0, 1, 0, 0, 0, 30, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Gui", 1, 212461774030782, true, [255, 255, 255], true, 1, 1, 1, false, 1, 0, 0, [ [ [1906, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 4472, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [14, 1036, 0, 512, 192, 0, 0, 1, 0.5, 0.5, 0, 0, []], 21, 18, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 660, 0, 662, 662, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 14, 15, [ ], [ [ 45, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1794, 113, 0, 261, 234, 0, 0, 1, 0.5019156932830811, 0.5, 0, 0, []], 4, 6, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1727, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 5, 10, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1851, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 10, 9, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 660, 0, 300, 300, 0, 0, 1, 0.5, 0.5, 0, 0, []], 6, 13, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [940, 1250, 0, 28, 40, 0, 0, 1, 0.3571428656578064, 0.02500000037252903, 0, 0, []], 11, 26, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [980, 1250, 0, 28, 40, 0, 0, 1, 0.3571428656578064, 0.02500000037252903, 0, 0, []], 12, 27, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [193, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 3, 14, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [69, 1014, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 16, 20, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 2, 2748718748799495, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Loading", 1920, 1080, false, "LoadingSettings", 6977654044237399, [ [ "Back", 0, 9428626988825408, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ [ [960, 760, 0, 64, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 55, 16, [ ], [ [ 180, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [960, 900, 0, 256, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 56, 17, [ ], [ ], [ 0, "Default", 0, 1 ] ] , [ [960, 500, 0, 256, 256, 0, 0, 1, 0.5, 0.5, 0, 0, []], 57, 918, [ ], [ ], [ 0, "Default", 0, 1 ] ] ], [ ] ] , [ "Shadow", 2, 6992062109644912, true, [0, 0, 0], false, 1, 1, 1, false, 1, 0, 0, [ ], [ ] ] ], [ ], [] ] , [ "Resources", 1920, 1080, false, null, 7212726882043811, [ [ "Layer", 0, 9839710180768553, true, [255, 255, 255], false, 1, 1, 1, false, 1, 0, 0, [ [ [1120, 594, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 118, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1097, 593, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 117, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1084, 555, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 115, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [923, 594, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 111, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [897, 593, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 110, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [884, 555, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 108, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [720, 596, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 105, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [697, 596, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 104, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [687, 557, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 102, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [520, 597, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 99, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [497, 597, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 98, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [120, 594, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 75, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [97, 593, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 74, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [320, 594, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 93, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [297, 593, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 92, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [284, 555, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 90, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [100, 52, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 58, 68, [ ], [ [ 1 ], [ 1, 0, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [100, 60, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 70, 69, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [100, 360, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 62, 70, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [120, 900, 0, 128, 128, 0, 0, 1, 0.5, 0.5, 0, 0, []], 66, 71, [ ], [ [ 0, 2, 0, 0.2, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [300, 1080, 0, 64, 256, 0, 3.141592741012573, 1, 0, 0, 0, 0, []], 67, 72, [ ], [ [ 1 ], [ 1, 1, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, 0 ] ] , [ [84, 555, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 73, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [110, 565, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 76, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [127, 547, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 78, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [200, 52, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 59, 82, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [300, 52, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 60, 83, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [400, 52, 0, 36, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 61, 84, [ ], [ [ 1 ], [ 1, 1, 0, 0.1, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [200, 360, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 63, 85, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [300, 360, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 64, 86, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [400, 360, 0, 16, 16, 0, 0, 1, 0.5, 0.5, 0, 0, []], 65, 87, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0.1, 0.1, 0, 1 ] ], [ 1, "Default", 0, 1 ] ] , [ [200, 60, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 71, 79, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [300, 60, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 72, 80, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [400, 60, 0, 26, 8, 0, 1.570796370506287, 1, 0.5, 0.5, 0, 0, []], 73, 81, [ ], [ [ 0, 1, 0, 1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [310, 565, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 89, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [327, 547, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 91, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [484, 555, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 95, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [510, 565, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 96, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [525, 547, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 97, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [710, 565, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 101, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [735, 547, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 103, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [910, 565, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 107, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [929, 550, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 109, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 463, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 106, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [698, 465, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 100, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 460, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 94, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [303, 458, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 88, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [100, 460, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 77, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1110, 565, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 114, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1127, 547, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 116, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1100, 460, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 113, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1087.755737304688, 433.5010986328125, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 119, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [913.2576904296875, 437.5, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 112, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 1000, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 113, 123, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 180, 0 ], [ ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 860, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 112, 124, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1003, 850, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 0, 23, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1103, 856, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 8, 25, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1221, 861, 0, 110, 110, 0, 0, 1, 0.5, 0.5, 0, 0, []], 9, 24, [ ], [ [ 0, 2, 0, 1, 0, 0, 0, 10, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [86, 755, 0, 28, 11, 0, 0, 1, 0.5, 0.5454545617103577, 0, 0, []], 68, 31, [ [5] ], [ [ 2000, 0, 0, 1, 1, 1 ], [ 0, 1, 1, 6, 0, 0, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1280, 1040, 0, 640, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 24, 32, [ ], [ [ 1, 1, 1, 1, 1 ] ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "SCREENSHOT SAVED!", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [0, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 33, [ [1], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [872, 1042, 0, 192, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 25, 56, [ ], [ [ 1, 0, 0, 1, 1 ] ], [ 64, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!-~&()\\/+=$<>^%*{}[]▲▼✔", "+350", 1, 0, 1, 1, 1, 0, -28, 0 ] ] , [ [150, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 46, [ [2], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [300, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 49, [ [3], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [450, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 54, [ [4], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [600, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 57, [ [5], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [750, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 58, [ [6], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [900, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 59, [ [7], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1050, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 60, [ [8], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1200, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 61, [ [9], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1350, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 63, [ [10], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1500, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 141, [ [11], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1650, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 142, [ [12], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1800, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 143, [ [13], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1950, 1200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 144, [ [14], [1] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [0, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 145, [ [1], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [150, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 146, [ [2], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [300, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 147, [ [3], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [450, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 148, [ [4], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [600, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 149, [ [5], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [750, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 150, [ [6], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [900, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 151, [ [7], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1050, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 152, [ [8], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1200, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 153, [ [9], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1350, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 154, [ [10], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1500, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 155, [ [11], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1650, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 156, [ [12], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1800, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 157, [ [13], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1950, 1450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 158, [ [14], [2] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [0, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 159, [ [1], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [150, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 160, [ [2], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [300, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 161, [ [3], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [450, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 162, [ [4], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [600, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 163, [ [5], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [750, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 164, [ [6], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [900, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 165, [ [7], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1050, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 166, [ [8], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1200, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 167, [ [9], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1350, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 168, [ [10], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1500, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 169, [ [11], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1650, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 170, [ [12], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1800, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 171, [ [13], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1950, 1700, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 172, [ [14], [3] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [0, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 173, [ [1], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [150, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 174, [ [2], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [300, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 175, [ [3], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [450, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 176, [ [4], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [600, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 177, [ [5], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [750, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 178, [ [6], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [900, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 179, [ [7], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1050, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 180, [ [8], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1200, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 181, [ [9], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1350, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 182, [ [10], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1500, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 183, [ [11], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1650, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 184, [ [12], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1800, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 185, [ [13], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1950, 1950, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 186, [ [14], [4] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [0, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 187, [ [1], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [150, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 188, [ [2], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [300, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 189, [ [3], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [450, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 190, [ [4], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [600, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 191, [ [5], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [750, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 192, [ [6], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [900, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 193, [ [7], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1050, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 194, [ [8], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1200, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 195, [ [9], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1350, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 196, [ [10], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1500, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 197, [ [11], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1650, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 198, [ [12], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1800, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 199, [ [13], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1950, 2200, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 200, [ [14], [5] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [0, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 201, [ [1], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [150, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 202, [ [2], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [300, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 203, [ [3], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [450, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 204, [ [4], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [600, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 205, [ [5], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [750, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 206, [ [6], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [900, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 207, [ [7], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1050, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 208, [ [8], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1200, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 209, [ [9], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1350, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 210, [ [10], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1500, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 211, [ [11], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1650, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 212, [ [12], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1800, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 213, [ [13], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [1950, 2450, 0, 100, 200, 0, 0, 0.5, 0.5, 0.5, 0, 0, []], 114, 214, [ [14], [6] ], [ ], [ 1, "Default", 0, 1 ] ] , [ [13.66666412353516, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 215, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-9.333335876464844, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 216, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-22.33333587646484, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 217, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [3.666664123535156, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 218, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [20.66666412353516, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 219, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-6.333335876464844, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 220, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [165.6666564941406, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 221, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [142.6666564941406, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 222, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [129.6666564941406, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 223, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [155.6666564941406, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 224, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [172.6666564941406, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 225, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [145.6666564941406, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 226, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [315.6666564941406, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 227, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [292.6666564941406, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 228, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [279.6666564941406, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 229, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [305.6666564941406, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 230, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [322.6666564941406, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 231, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [295.6666564941406, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 232, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [463.6666564941406, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 233, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [440.6666564941406, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 234, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [427.6666564941406, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 235, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [453.6666564941406, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 236, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [470.6666564941406, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 237, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [443.6666564941406, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 238, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [612.6666259765625, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 239, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [589.6666259765625, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 240, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [576.6666259765625, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 241, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [602.6666259765625, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 242, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [619.6666259765625, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 243, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [592.6666259765625, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 244, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [763.6666870117188, 1240.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 245, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [740.6666870117188, 1239.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 246, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [727.6666870117188, 1201.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 247, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [753.6666870117188, 1211.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 248, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [770.6666870117188, 1193.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 249, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [743.6666870117188, 1106.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 250, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [913.6666870117188, 1242.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 251, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [890.6666870117188, 1241.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 252, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [877.6666870117188, 1203.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 253, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [903.6666870117188, 1213.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 254, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [920.6666870117188, 1195.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 255, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [893.6666870117188, 1108.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 256, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1063.666748046875, 1240.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 257, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1040.666748046875, 1239.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 258, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1027.666748046875, 1201.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 259, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1053.666748046875, 1211.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 260, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1070.666748046875, 1193.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 261, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1043.666748046875, 1106.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 262, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1214.666625976563, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 263, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1191.666625976563, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 264, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1178.666625976563, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 265, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1204.666625976563, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 266, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1221.666625976563, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 267, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1194.666625976563, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 268, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1363.666625976563, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 269, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1340.666625976563, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 270, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1327.666625976563, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 271, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1353.666625976563, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 272, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1370.666625976563, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 273, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1343.666625976563, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 274, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1514.666625976563, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 275, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1491.666625976563, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 276, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1478.666625976563, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 277, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1504.666625976563, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 278, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1521.666625976563, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 279, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1494.666625976563, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 280, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1664.666625976563, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 281, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1641.666625976563, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 282, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1628.666625976563, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 283, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1654.666625976563, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 284, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1671.666625976563, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 285, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1644.666625976563, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 286, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1814.666625976563, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 287, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1791.666625976563, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 288, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1778.666625976563, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 289, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1804.666625976563, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 290, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1821.666625976563, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 291, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1794.666625976563, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 292, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1963.666625976563, 1241.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 79, 293, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1940.666625976563, 1240.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 78, 294, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1927.666625976563, 1202.666625976563, 0, 25, 88, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1363636404275894, 0, 0, []], 76, 295, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1953.666625976563, 1212.666625976563, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 75, 296, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1970.666625976563, 1194.666625976563, 0, 26, 91, 0, -0.2617998123168945, 1, 0.5769230723381043, 0.1318681389093399, 0, 0, []], 77, 297, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1943.666625976563, 1107.666625976563, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 74, 298, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [13.16665649414063, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 369, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-9.833343505859375, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 370, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-22.83334350585938, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 371, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [3.166656494140625, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 372, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [20.16665649414063, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 373, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-3.833343505859375, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 374, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [163.1666564941406, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 375, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [140.1666564941406, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 376, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [127.1666564941406, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 377, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [153.1666564941406, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 378, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [170.1666564941406, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 379, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [146.1666564941406, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 380, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [314.1666564941406, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 381, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [291.1666564941406, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 382, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [278.1666564941406, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 383, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [304.1666564941406, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 384, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [321.1666564941406, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 385, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [297.1666564941406, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 386, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [463.1666564941406, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 387, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [440.1666564941406, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 388, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [427.1666564941406, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 389, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [453.1666564941406, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 390, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [470.1666564941406, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 391, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [446.1666564941406, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 392, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [614.1666259765625, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 393, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [591.1666259765625, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 394, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [578.1666259765625, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 395, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [604.1666259765625, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 396, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [621.1666259765625, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 397, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [597.1666259765625, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 398, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [763.1666259765625, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 399, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [740.1666259765625, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 400, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [727.1666259765625, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 401, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [753.1666259765625, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 402, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [770.1666259765625, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 403, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [746.1666259765625, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 404, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [914.1666259765625, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 405, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [891.1666259765625, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 406, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [878.1666259765625, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 407, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [904.1666259765625, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 408, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [921.1666259765625, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 409, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [897.1666259765625, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 410, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1063.166625976563, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 411, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1040.166625976563, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 412, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1027.166625976563, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 413, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1053.166625976563, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 414, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1070.166625976563, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 415, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1046.166625976563, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 416, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1214.166625976563, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 417, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1191.166625976563, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 418, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1178.166625976563, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 419, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1204.166625976563, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 420, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1221.166625976563, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 421, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1197.166625976563, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 422, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1364.166625976563, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 423, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1341.166625976563, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 424, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1328.166625976563, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 425, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1354.166625976563, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 426, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1371.166625976563, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 427, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1347.166625976563, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 428, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1513.166625976563, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 429, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1490.166625976563, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 430, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1477.166625976563, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 431, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1503.166625976563, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 432, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1520.166625976563, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 433, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1496.166625976563, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 434, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1663.166625976563, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 435, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1640.166625976563, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 436, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1627.166625976563, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 437, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1653.166625976563, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 438, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1670.166625976563, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 439, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1646.166625976563, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 440, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1812.166625976563, 1492, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 441, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1789.166625976563, 1491, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 442, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1776.166625976563, 1453, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 443, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1802.166625976563, 1463, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 444, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1819.166625976563, 1445, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 445, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1795.166625976563, 1356, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 446, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1964.166625976563, 1491, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 85, 447, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1941.166625976563, 1490, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 84, 448, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1928.166625976563, 1452, 0, 25, 90, 0, 0.1869172602891922, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 82, 449, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1954.166625976563, 1462, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 81, 450, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1971.166625976563, 1444, 0, 28, 88, 0, -0.121991939842701, 1, 0.5714285969734192, 0.1363636404275894, 0, 0, []], 83, 451, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1947.166625976563, 1355, 0, 106, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 80, 452, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [14, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 453, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-9, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 454, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-22, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 455, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [4, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 456, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [19, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 457, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-6, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 458, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [165, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 459, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [142, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 460, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [129, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 461, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [155, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 462, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [170, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 463, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [145, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 464, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [312, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 465, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [289, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 466, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [276, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 467, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [302, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 468, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [317, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 469, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [292, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 470, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [463, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 471, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [440, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 472, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [427, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 473, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [453, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 474, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [468, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 475, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [443, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 476, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [614, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 477, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [591, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 478, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [578, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 479, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [604, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 480, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [619, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 481, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [594, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 482, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [763, 1743.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 483, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [740, 1743.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 484, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [727, 1701.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 485, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [753, 1711.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 486, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [768, 1693.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 487, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [743, 1606.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 488, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [915, 1743.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 489, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [892, 1743.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 490, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [879, 1701.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 491, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [905, 1711.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 492, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [920, 1693.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 493, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [895, 1606.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 494, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1064, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 495, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1041, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 496, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1028, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 497, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1054, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 498, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1069, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 499, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1044, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 500, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1214, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 501, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1191, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 502, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1178, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 503, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1204, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 504, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1219, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 505, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1194, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 506, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1363, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 507, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1340, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 508, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1327, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 509, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1353, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 510, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1368, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 511, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1343, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 512, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1515, 1743.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 513, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1492, 1743.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 514, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1479, 1701.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 515, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1505, 1711.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 516, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1520, 1693.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 517, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1495, 1606.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 518, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1664, 1743.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 519, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1641, 1743.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 520, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1628, 1701.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 521, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1654, 1711.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 522, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1669, 1693.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 523, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1644, 1606.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 524, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1815, 1742.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 525, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1792, 1742.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 526, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1779, 1700.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 527, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1805, 1710.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 528, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1820, 1692.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 529, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1795, 1605.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 530, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1964, 1743.5, 0, 36, 52, 0, 0, 1, 0.25, 0.1730769276618958, 0, 0, []], 91, 531, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1941, 1743.5, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 90, 532, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1928, 1701.5, 0, 26, 97, 0, 0.2617993950843811, 1, 0.4615384638309479, 0.1340206116437912, 0, 0, []], 88, 533, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1954, 1711.5, 0, 67, 68, 0, 0, 1, 0.5074626803398132, 0.5147058963775635, 0, 0, []], 87, 534, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1969, 1693.5, 0, 27, 90, 0, -0.2617998123168945, 1, 0.5925925970077515, 0.1333333402872086, 0, 0, []], 89, 535, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1944, 1606.5, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 86, 536, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [12.1666259765625, 1990.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 537, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-10.8333740234375, 1990.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 538, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-20.8333740234375, 1951.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 539, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [2.1666259765625, 1959.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 540, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [27.1666259765625, 1941.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 541, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-9.8333740234375, 1859.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 542, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [162.1666259765625, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 543, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [139.1666259765625, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 544, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [129.1666259765625, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 545, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [152.1666259765625, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 546, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [177.1666259765625, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 547, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [140.1666259765625, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 548, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [314.1666259765625, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 549, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [291.1666259765625, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 550, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [281.1666259765625, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 551, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [304.1666259765625, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 552, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [329.1666259765625, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 553, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [292.1666259765625, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 554, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [462.1666259765625, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 555, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [439.1666259765625, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 556, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [429.1666259765625, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 557, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [452.1666259765625, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 558, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [477.1666259765625, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 559, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [440.1666259765625, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 560, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [612.1666259765625, 1990.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 561, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [589.1666259765625, 1990.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 562, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [579.1666259765625, 1951.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 563, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [602.1666259765625, 1959.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 564, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [627.1666259765625, 1941.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 565, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [590.1666259765625, 1859.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 566, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [762.1666259765625, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 567, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [739.1666259765625, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 568, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [729.1666259765625, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 569, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [752.1666259765625, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 570, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [777.1666259765625, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 571, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [740.1666259765625, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 572, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [911.1666259765625, 1990.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 573, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [888.1666259765625, 1990.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 574, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [878.1666259765625, 1951.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 575, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [901.1666259765625, 1959.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 576, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [926.1666259765625, 1941.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 577, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [889.1666259765625, 1859.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 578, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1062.166625976563, 1990.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 579, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1039.166625976563, 1990.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 580, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1029.166625976563, 1951.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 581, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1052.166625976563, 1959.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 582, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1077.166625976563, 1941.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 583, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1040.166625976563, 1859.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 584, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1213.166625976563, 1990.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 585, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1190.166625976563, 1990.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 586, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1180.166625976563, 1951.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 587, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1203.166625976563, 1959.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 588, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1228.166625976563, 1941.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 589, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1191.166625976563, 1859.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 590, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1363.166625976563, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 591, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1340.166625976563, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 592, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1330.166625976563, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 593, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1353.166625976563, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 594, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1378.166625976563, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 595, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1341.166625976563, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 596, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1511.166625976563, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 597, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1488.166625976563, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 598, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1478.166625976563, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 599, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1501.166625976563, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 600, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1526.166625976563, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 601, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1489.166625976563, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 602, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1662.166625976563, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 603, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1639.166625976563, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 604, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1629.166625976563, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 605, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1652.166625976563, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 606, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1677.166625976563, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 607, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1640.166625976563, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 608, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1812.166625976563, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 609, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1789.166625976563, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 610, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1779.166625976563, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 611, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1802.166625976563, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 612, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1827.166625976563, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 613, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1790.166625976563, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 614, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1962.166625976563, 1991.666625976563, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 97, 615, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1939.166625976563, 1991.666625976563, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 96, 616, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1929.166625976563, 1952.666625976563, 0, 31, 89, 0, 0.2617993950843811, 1, 0.4838709533214569, 0.1348314583301544, 0, 0, []], 94, 617, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1952.166625976563, 1960.666625976563, 0, 63, 68, 0, 0, 1, 0.5079365372657776, 0.5147058963775635, 0, 0, []], 93, 618, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1977.166625976563, 1942.666625976563, 0, 30, 89, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1348314583301544, 0, 0, []], 95, 619, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1940.166625976563, 1860.666625976563, 0, 105, 89, 0, 0, 1, 0.5047619342803955, 0, 0, 0, []], 92, 620, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [18.5345458984375, 2254.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 621, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-7.4654541015625, 2253.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 622, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-20.4654541015625, 2215.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 623, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [5.5345458984375, 2225.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 624, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [24.5345458984375, 2210.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 625, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-4.4654541015625, 2123.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 626, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [7.792236328125, 2099.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 627, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [169.5345458984375, 2254.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 628, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [143.5345458984375, 2253.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 629, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [130.5345458984375, 2215.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 630, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [156.5345458984375, 2225.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 631, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [175.5345458984375, 2210.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 632, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [146.5345458984375, 2123.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 633, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [158.792236328125, 2099.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 634, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [319.5345458984375, 2254.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 635, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [293.5345458984375, 2253.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 636, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [280.5345458984375, 2215.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 637, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [306.5345458984375, 2225.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 638, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [325.5345458984375, 2210.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 639, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [296.5345458984375, 2123.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 640, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [308.792236328125, 2099.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 641, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [469.5345458984375, 2254.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 642, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [443.5345458984375, 2253.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 643, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [430.5345458984375, 2215.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 644, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [456.5345458984375, 2225.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 645, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [475.5345458984375, 2210.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 646, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [446.5345458984375, 2123.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 647, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [458.792236328125, 2099.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 648, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [616.5345458984375, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 649, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [590.5345458984375, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 650, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [577.5345458984375, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 651, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [603.5345458984375, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 652, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [622.5345458984375, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 653, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [593.5345458984375, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 654, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [605.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 655, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [768.5345458984375, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 656, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [742.5345458984375, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 657, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [729.5345458984375, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 658, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [755.5345458984375, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 659, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [774.5345458984375, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 660, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [745.5345458984375, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 661, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [757.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 662, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [918.5345458984375, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 663, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [892.5345458984375, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 664, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [879.5345458984375, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 665, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [905.5345458984375, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 666, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [924.5345458984375, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 667, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [895.5345458984375, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 668, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [907.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 669, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1068.534545898438, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 670, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1042.534545898438, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 671, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1029.534545898438, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 672, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1055.534545898438, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 673, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1074.534545898438, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 674, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1045.534545898438, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 675, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1057.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 676, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1218.534545898438, 2254.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 677, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1192.534545898438, 2253.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 678, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1179.534545898438, 2215.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 679, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1205.534545898438, 2225.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 680, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1224.534545898438, 2210.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 681, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1195.534545898438, 2123.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 682, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1207.792236328125, 2099.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 683, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1367.534545898438, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 684, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1341.534545898438, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 685, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1328.534545898438, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 686, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1354.534545898438, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 687, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1373.534545898438, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 688, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1344.534545898438, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 689, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1356.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 690, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1518.534545898438, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 691, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1492.534545898438, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 692, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1479.534545898438, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 693, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1505.534545898438, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 694, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1524.534545898438, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 695, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1495.534545898438, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 696, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1507.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 697, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1668.534545898438, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 698, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1642.534545898438, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 699, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1629.534545898438, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 700, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1655.534545898438, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 701, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1674.534545898438, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 702, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1645.534545898438, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 703, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1657.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 704, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1819.534545898438, 2255.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 705, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1793.534545898438, 2254.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 706, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1780.534545898438, 2216.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 707, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1806.534545898438, 2226.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 708, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1825.534545898438, 2211.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 709, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1796.534545898438, 2124.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 710, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1808.792236328125, 2100.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 711, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1968.534545898438, 2253.78564453125, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 103, 712, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1942.534545898438, 2252.78564453125, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 102, 713, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1929.534545898438, 2214.78564453125, 0, 25, 90, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1333333402872086, 0, 0, []], 100, 714, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1955.534545898438, 2224.78564453125, 0, 51, 63, 0, 0, 1, 0.5098039507865906, 0.5079365372657776, 0, 0, []], 99, 715, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1974.534545898438, 2209.78564453125, 0, 30, 91, 0, -0.2617998123168945, 1, 0.5666666626930237, 0.1318681389093399, 0, 0, []], 101, 716, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1945.534545898438, 2122.78564453125, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 98, 717, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1957.792236328125, 2098.28564453125, 0, 87, 91, 0, 0, 1, 0.517241358757019, 0, 0, 0, []], 104, 718, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [20.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 719, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-2.53662109375, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 720, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-15.53662109375, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 721, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [10.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 722, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [27.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 723, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [0.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 724, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [-13.7808837890625, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 725, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [170.46337890625, 2507.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 726, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [147.46337890625, 2506.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 727, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [134.46337890625, 2468.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 728, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [160.46337890625, 2478.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 729, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [177.46337890625, 2460.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 730, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [150.46337890625, 2373.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 731, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [136.2191162109375, 2347.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 732, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [319.46337890625, 2507.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 733, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [296.46337890625, 2506.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 734, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [283.46337890625, 2468.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 735, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [309.46337890625, 2478.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 736, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [326.46337890625, 2460.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 737, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [299.46337890625, 2373.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 738, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [285.2191162109375, 2347.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 739, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [469.46337890625, 2507.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 740, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [446.46337890625, 2506.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 741, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [433.46337890625, 2468.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 742, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [459.46337890625, 2478.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 743, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [476.46337890625, 2460.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 744, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [449.46337890625, 2373.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 745, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [435.2191162109375, 2347.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 746, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [619.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 747, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [596.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 748, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [583.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 749, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [609.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 750, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [626.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 751, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [599.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 752, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [585.2191162109375, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 753, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [769.46337890625, 2507.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 754, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [746.46337890625, 2506.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 755, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [733.46337890625, 2468.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 756, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [759.46337890625, 2478.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 757, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [776.46337890625, 2460.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 758, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [749.46337890625, 2373.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 759, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [735.2191162109375, 2347.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 760, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [919.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 761, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [896.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 762, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [883.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 763, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [909.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 764, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [926.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 765, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [899.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 766, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [885.2191162109375, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 767, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1070.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 768, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1047.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 769, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1034.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 770, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1060.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 771, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1077.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 772, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 773, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1036.219116210938, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 774, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1218.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 775, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1195.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 776, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1182.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 777, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1208.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 778, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1225.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 779, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1198.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 780, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1184.219116210938, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 781, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1368.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 782, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1345.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 783, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1332.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 784, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1358.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 785, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1375.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 786, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1348.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 787, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1334.219116210938, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 788, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1520.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 789, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1497.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 790, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1484.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 791, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1510.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 792, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1527.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 793, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1500.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 794, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1486.219116210938, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 795, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1669.46337890625, 2507.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 796, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1646.46337890625, 2506.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 797, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1633.46337890625, 2468.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 798, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1659.46337890625, 2478.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 799, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1676.46337890625, 2460.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 800, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1649.46337890625, 2373.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 801, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1635.219116210938, 2347.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 802, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1820.46337890625, 2506.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 803, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1797.46337890625, 2505.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 804, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1784.46337890625, 2467.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 805, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1810.46337890625, 2477.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 806, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1827.46337890625, 2459.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 807, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1800.46337890625, 2372.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 808, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1786.219116210938, 2346.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 809, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [1969.46337890625, 2505.499755859375, 0, 36, 53, 0, 0, 1, 0.25, 0.1698113232851028, 0, 0, []], 110, 810, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1946.46337890625, 2504.499755859375, 0, 30, 49, 0, 0, 1, 0.6666666865348816, 0.1020408198237419, 0, 0, []], 109, 811, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1933.46337890625, 2466.499755859375, 0, 25, 91, 0, 0.2617993950843811, 1, 0.4799999892711639, 0.1318681389093399, 0, 0, []], 107, 812, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1959.46337890625, 2476.499755859375, 0, 67, 81, 0, 0, 1, 0.5074626803398132, 0.5061728358268738, 0, 0, []], 106, 813, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1976.46337890625, 2458.499755859375, 0, 32, 90, 0, -0.2617998123168945, 1, 0.5625, 0.1333333402872086, 0, 0, []], 108, 814, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1949.46337890625, 2371.499755859375, 0, 86, 89, 0, 0, 1, 0.5, 0, 0, 0, []], 105, 815, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1935.219116210938, 2345.0009765625, 0, 137, 64, 0, 0, 1, 0.4160583913326263, 0, 0, 0, []], 111, 816, [ ], [ [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 1, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 0 ], [ 0, 0, 0, 0.1, 0.5, 0.2, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [351, 671, 0, 419, 23, 0, 0, 1, 0.5011933445930481, 0.52173912525177, 0, 0, []], 115, 3903, [ ], [ [ 0, 0, 0, 1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 750, 0, 410, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []], 116, 1393, [ ], [ [ 1 ], [ 0, 1, 0, 0.1, 5, 0.2, 0, 0, 0, 1 ], [ 0, 0, 0, 4, 0, 0, 0, 50, 0 ] ], [ 0, "Default", 0, 1 ] ] , [ [130, 1023, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 1718, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [226, 752, 0, 80, 80, 0, 0, 1, 0.5, 0.5, 0, 0, []], 118, 1921, [ ], [ [ 0, 2, 0, 3, 0.5, 0.5, 0, 0, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4105, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4106, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4107, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4108, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4109, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4110, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4111, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4112, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4113, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4114, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4115, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4116, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4117, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4118, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4119, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4120, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4121, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 350, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4122, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4123, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4124, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4125, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4126, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4127, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 300, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4128, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4129, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4130, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4131, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4132, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4133, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4134, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4135, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4136, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4137, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4138, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4139, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4140, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4141, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4142, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4143, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4144, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4145, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 250, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4146, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4147, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4148, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4149, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4150, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4151, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 200, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4152, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4153, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4154, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4155, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4156, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4157, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4158, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4159, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4160, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4161, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4162, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4163, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 150, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4164, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4165, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4166, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4167, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4168, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4169, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4170, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [500, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4171, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [550, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4172, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [600, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4173, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [650, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4174, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [700, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4175, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [750, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4176, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4177, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4178, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4179, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4180, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4181, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 100, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4182, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [800, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4183, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [850, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4184, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [900, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4185, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [950, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4186, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1000, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4187, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] , [ [1050, 50, 0, 45, 45, 0, 0, 1, 0.5111111402511597, 0.5111111402511597, 0, 0, []], 117, 4188, [ ], [ [ 0, 1, 0, 0.1, 0.5, 0.2, 0, 0.01, 0, 1 ] ], [ 0, "Default", 0, 1 ] ] ], [ ] ] ], [ ], [] ] ], [ [ "GameSettings", [ [ 1, "Level_Stars_001", 0, 0, false,false,930212791515176,false ] , [ 1, "Level_Stars_002", 0, 0, false,false,5656688112231439,false ] , [ 1, "Level_Stars_003", 0, 0, false,false,1521971955702962,false ] , [ 1, "Level_Stars_004", 0, 0, false,false,1330495716317331,false ] , [ 1, "Level_Stars_005", 0, 0, false,false,4825927792570909,false ] , [ 1, "Level_Stars_006", 0, 0, false,false,9785387384648912,false ] , [ 1, "Level_Stars_007", 0, 0, false,false,2532668636159548,false ] , [ 1, "Level_Stars_008", 0, 0, false,false,580491496391884,false ] , [ 1, "Level_Stars_009", 0, 0, false,false,9985964293917364,false ] , [ 1, "Level_Stars_010", 0, 0, false,false,2850339263166979,false ] , [ 1, "Level_Stars_011", 0, 0, false,false,9247765647071886,false ] , [ 1, "Level_Stars_012", 0, 0, false,false,1187074552526279,false ] , [ 1, "Level_Stars_013", 0, 0, false,false,2342079674923925,false ] , [ 1, "Level_Stars_014", 0, 0, false,false,6913155556847737,false ] , [ 1, "Level_Stars_015", 0, 0, false,false,6239531522112688,false ] , [ 1, "Level_Stars_016", 0, 0, false,false,4555782404339307,false ] , [ 1, "Level_Stars_017", 0, 0, false,false,8138026730057744,false ] , [ 1, "Level_Stars_018", 0, 0, false,false,8818708849221795,false ] , [ 1, "Level_Stars_019", 0, 0, false,false,3178666950497897,false ] , [ 1, "Level_Stars_020", 0, 0, false,false,1893129298453826,false ] , [ 1, "Level_Stars_021", 0, 0, false,false,9923314883846738,false ] , [ 1, "Level_Stars_022", 0, 0, false,false,4285006155529669,false ] , [ 1, "Level_Stars_023", 0, 0, false,false,184262315903041,false ] , [ 1, "Level_Stars_024", 0, 0, false,false,3233625962081343,false ] , [ 1, "Level_Stars_025", 0, 0, false,false,5443817966277923,false ] , [ 1, "Level_Stars_026", 0, 0, false,false,7952302059114268,false ] , [ 1, "Level_Stars_027", 0, 0, false,false,7530870913732113,false ] , [ 1, "Level_Stars_028", 0, 0, false,false,6941503704735389,false ] , [ 1, "Level_Stars_029", 0, 0, false,false,1260398835927615,false ] , [ 1, "Level_Stars_030", 0, 0, false,false,4916655323885301,false ] , [ 1, "Kills", 0, 0, false,false,3169057015064931,false ] , [ 1, "Stars", 0, 0, false,false,3654474641061344,false ] , [ 1, "Score", 0, 0, false,false,5668424733100801,false ] , [ 1, "Seconds", 0, 0, false,false,4026794033393233,false ] , [ 1, "LevelKills", 0, 0, false,false,1858540322815198,false ] , [ 1, "Magazine", 0, 0, false,false,797990618775126,false ] , [ 1, "Chain_1_Prev", 0, 0, false,false,9413397635270258,false ] , [ 1, "Chain_2_Prev", 0, 0, false,false,4776679352753434,false ] , [ 1, "Chain_3_Prev", 0, 0, false,false,8031165952109979,false ] , [ 1, "Chain_4_Prev", 0, 0, false,false,2645024816233329,false ] , [ 1, "LevelNumber", 0, 0, false,false,8043708627900889,false ] , [ 2, "AddSettings", false ] , [ 2, "IncludeSettings", false ] , [ 0, null, false, null, 8070522345285556, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 6526683297626218, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 867446056139033, false ,[ [ 11, "Seconds" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9061994110618187, false ,[ [ 11, "Kills" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 4717095185454129, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 8802262452234981, false ,[ [ 11, "Score" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 1913676161824746, false ,[ [ 11, "Pause" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 439938533003018, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 7058723172462537, false ,[ [ 11, "Level_Stars_001" ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3144381097947122, false ,[ [ 1, [ 2, "Chain_1_Start_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6032295596348269, false ,[ [ 1, [ 2, "Chain_1_Restart_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4908124190005667, false ,[ [ 1, [ 2, "Chain_2_Start_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8167546779344902, false ,[ [ 1, [ 2, "Chain_2_Restart_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 80915198872163, false ,[ [ 1, [ 2, "Chain_3_Start_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9674065943193274, false ,[ [ 1, [ 2, "Chain_3_Restart_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4812421245895516, false ,[ [ 1, [ 2, "Chain_4_Start_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9551687144521273, false ,[ [ 1, [ 2, "Chain_4_Restart_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3538222475367796, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9811364098522946, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9238294760687459, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] , [ 3, 0 ] ] ] , [ 125, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 3245520142649567, false ,[ [ 4, 120 ] , [ 3, 0 ] ] ] , [ 0, cr.plugins_.Sprite.prototype.acts.SetY, null, 9686315823415378, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 9, cr.plugins_.Sprite.prototype.acts.SetY, null, 1026962166024671, false ,[ [ 0, [ 0, 2000 ] ] ] ] ] ,[ [ 0, null, false, null, 996434399858953, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 5770481115711727, false ,[ [ 1, [ 2, "Score" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8553830119950741, false ,[ [ 11, "Score" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Score" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9944963390959809, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 1029997809899896, false ,[ [ 1, [ 2, "Kills" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8148789948644531, false ,[ [ 11, "Kills" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Kills" ] ] ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9048451640037508, [ [ -1, cr.system_object.prototype.cnds.Every, null, 0, false, false, false, 6624163214318583, false ,[ [ 0, [ 1, 0.1 ] ] ] ] ], [ [ 13, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 2555457907979192, false ,[ [ 7, [ 10, [ 2, "$" ] ,[ 23, "Score" ] ] ] ] ] , [ 17, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1907988177228109, false ,[ [ 7, [ 10, [ 2, "FPS:" ] ,[ 19, cr.system_object.prototype.exps.fps ] ] ] ] ] , [ 26, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5577823703657299, false ,[ [ 7, [ 10, [ 2, "KILL:" ] ,[ 23, "LevelKills" ] ] ] ] ] , [ 15, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 6140755482233574, false ,[ [ 7, [ 10, [ 2, "MG:" ] ,[ 23, "Magazine" ] ] ] ] ] , [ 27, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4081928349377953, false ,[ [ 7, [ 10, [ 2, "LVL:" ] ,[ 23, "LevelNumber" ] ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4492230450994112, false ,[ [ 7, [ 21, 29, false, null ,0 ] ] ] ] ] ] , [ 0, null, false, null, 9629366487351826, [ [ -1, cr.system_object.prototype.cnds.Every, null, 0, false, false, false, 4014667327991692, false ,[ [ 0, [ 1, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8056333476081486, false ,[ [ 11, "Seconds" ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, [true, "Levels_Settings"], false, null, 6184477140316932, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 6184477140316932, false ,[ [ 1, [ 2, "Levels_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2742535403560257, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8796686812834843, false ,[ [ 4, 28 ] ] ] ], [ ] ,[ [ 0, null, false, null, 3979023509010233, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareFrame, null, 0, false, false, false, 9624980738983066, false ,[ [ 8, 5 ] , [ 0, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4514917418249053, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 1463653525550298, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2656624083836669, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7756674693370135, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] ] ,[ [ 0, null, false, null, 6625484199766145, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7771469214501599, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8185611787445632, false ,[ [ 1, [ 2, "Level_001" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 9748111184610509, false ,[ [ 6, "Level_001" ] ] ] ] ] , [ 0, null, false, null, 2985689901771856, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2519998841683148, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8194385561392873, false ,[ [ 1, [ 2, "Level_002" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1262237953204774, false ,[ [ 6, "Level_002" ] ] ] ] ] , [ 0, null, false, null, 7663049200548585, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8327493749687913, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4733379148743672, false ,[ [ 1, [ 2, "Level_003" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7346227696171742, false ,[ [ 6, "Level_003" ] ] ] ] ] , [ 0, null, false, null, 4985072076588972, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1947655717598767, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6495504905099273, false ,[ [ 1, [ 2, "Level_004" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 2768502387597659, false ,[ [ 6, "Level_004" ] ] ] ] ] , [ 0, null, false, null, 3729533121490345, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5572116300307009, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5359333795801575, false ,[ [ 1, [ 2, "Level_005" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 2275708877973688, false ,[ [ 6, "Level_005" ] ] ] ] ] , [ 0, null, false, null, 1332378365914206, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7540590997667361, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8356315843262383, false ,[ [ 1, [ 2, "Level_006" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7331146942095792, false ,[ [ 6, "Level_006" ] ] ] ] ] , [ 0, null, false, null, 7218058669049742, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7708061373815566, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3993528434904484, false ,[ [ 1, [ 2, "Level_007" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 3897732991037998, false ,[ [ 6, "Level_007" ] ] ] ] ] , [ 0, null, false, null, 5703767621242132, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1377543658536784, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4562293155208473, false ,[ [ 1, [ 2, "Level_008" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1109008202053979, false ,[ [ 6, "Level_008" ] ] ] ] ] , [ 0, null, false, null, 5978562949437205, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6600986684756071, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8844051404015131, false ,[ [ 1, [ 2, "Level_009" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 816288027703061, false ,[ [ 6, "Level_009" ] ] ] ] ] , [ 0, null, false, null, 5821005983351066, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2914351153503476, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8714602391558646, false ,[ [ 1, [ 2, "Level_010" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 3158106810496197, false ,[ [ 6, "Level_010" ] ] ] ] ] , [ 0, null, false, null, 1532976432985266, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8764744600994904, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2530162715438935, false ,[ [ 1, [ 2, "Level_011" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8279738502971045, false ,[ [ 6, "Level_011" ] ] ] ] ] , [ 0, null, false, null, 649376940933108, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4176436314043453, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5408412854630771, false ,[ [ 1, [ 2, "Level_012" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 5592211587446501, false ,[ [ 6, "Level_012" ] ] ] ] ] , [ 0, null, false, null, 4486998680300632, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1967734795973716, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9581384145565139, false ,[ [ 1, [ 2, "Level_013" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 3947913837831488, false ,[ [ 6, "Level_013" ] ] ] ] ] , [ 0, null, false, null, 7314117964835323, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6423042692273045, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7851091287819382, false ,[ [ 1, [ 2, "Level_014" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 9999161692598986, false ,[ [ 6, "Level_014" ] ] ] ] ] , [ 0, null, false, null, 7775375669185304, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9338607060797179, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6038790274336421, false ,[ [ 1, [ 2, "Level_015" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 4002478863426928, false ,[ [ 6, "Level_015" ] ] ] ] ] , [ 0, null, false, null, 4192167067111896, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2648780929704259, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3841781802882245, false ,[ [ 1, [ 2, "Level_016" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8494267470661008, false ,[ [ 6, "Level_016" ] ] ] ] ] , [ 0, null, false, null, 2147416495127379, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 199340753633121, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6518488361258399, false ,[ [ 1, [ 2, "Level_017" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6739559269218339, false ,[ [ 6, "Level_017" ] ] ] ] ] , [ 0, null, false, null, 5163886610117203, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4719160194362643, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1321998360500955, false ,[ [ 1, [ 2, "Level_018" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 9419725062584862, false ,[ [ 6, "Level_018" ] ] ] ] ] , [ 0, null, false, null, 4344413588311909, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3967946671859169, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5210415391120386, false ,[ [ 1, [ 2, "Level_019" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 4310045411130513, false ,[ [ 6, "Level_019" ] ] ] ] ] , [ 0, null, false, null, 531323690368651, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1264303047800888, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 498726200897222, false ,[ [ 1, [ 2, "Level_020" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6040933617782435, false ,[ [ 6, "Level_020" ] ] ] ] ] , [ 0, null, false, null, 5166351361892815, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7551305839453017, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2841335621830317, false ,[ [ 1, [ 2, "Level_021" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 3939218821486419, false ,[ [ 6, "Level_021" ] ] ] ] ] , [ 0, null, false, null, 2762340773712772, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1338870115965377, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7415684325675153, false ,[ [ 1, [ 2, "Level_022" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 9635316271093987, false ,[ [ 6, "Level_022" ] ] ] ] ] , [ 0, null, false, null, 8247997903309237, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5468589868858303, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6471443174095864, false ,[ [ 1, [ 2, "Level_023" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8771720276377937, false ,[ [ 6, "Level_023" ] ] ] ] ] , [ 0, null, false, null, 5818891199690197, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 266552807616528, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6092401895767882, false ,[ [ 1, [ 2, "Level_024" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1011960083429529, false ,[ [ 6, "Level_024" ] ] ] ] ] , [ 0, null, false, null, 1196572377269364, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 119901283415589, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3613436406593402, false ,[ [ 1, [ 2, "Level_025" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8965281361919573, false ,[ [ 6, "Level_025" ] ] ] ] ] , [ 0, null, false, null, 1078369007905843, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 84937260118525, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5724511683655808, false ,[ [ 1, [ 2, "Level_026" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 4865210877569662, false ,[ [ 6, "Level_026" ] ] ] ] ] , [ 0, null, false, null, 4008006069056677, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1486470120664849, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5406704426520412, false ,[ [ 1, [ 2, "Level_027" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8289111323793589, false ,[ [ 6, "Level_027" ] ] ] ] ] , [ 0, null, false, null, 6323044607920412, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3523459030742753, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671564206175269, false ,[ [ 1, [ 2, "Level_028" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7137183243300286, false ,[ [ 6, "Level_028" ] ] ] ] ] , [ 0, null, false, null, 5801055349801286, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1941102254578723, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8783740987271063, false ,[ [ 1, [ 2, "Level_029" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 3308639666756746, false ,[ [ 6, "Level_029" ] ] ] ] ] , [ 0, null, false, null, 1497055042924124, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7596626340119571, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7716680094586202, false ,[ [ 1, [ 2, "Level_030" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6207384543902851, false ,[ [ 6, "Level_030" ] ] ] ] ] ] ] ] ] , [ 0, [true, "Levels_Stars_Settings"], false, null, 8757977289755843, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 8757977289755843, false ,[ [ 1, [ 2, "Levels_Stars_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7743289847967577, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8759918653508793, false ,[ [ 11, "Level_Stars_001" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8182652128416625, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6864064713523728, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1388091962913612, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6262860297385212, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6789351652488097, false ,[ [ 11, "Level_Stars_001" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2650587482526933, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5229411076874947, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2775657459503846, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8925243826220317, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7659074874425147, false ,[ [ 11, "Level_Stars_001" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5784802990639419, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2345791388945147, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8675703478597963, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1693287863722377, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2572320283627601, false ,[ [ 11, "Level_Stars_001" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 421641179368219, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3663247909419494, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5316176862967738, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 712465118830663, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3289962844884708, false ,[ [ 11, "Level_Stars_002" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8994958433653987, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9666343411217515, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7445452453620442, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4629568761471099, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3491257049224059, false ,[ [ 11, "Level_Stars_002" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9034886743771192, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8518197080154962, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8465939809428625, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7453988770006954, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5241746428200944, false ,[ [ 11, "Level_Stars_002" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1549635975684287, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4494823924969817, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1650717693435269, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1577843110010313, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2147488221412855, false ,[ [ 11, "Level_Stars_002" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5600203497891224, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2785632290525799, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3479305170268648, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8345960148932443, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7442602054295263, false ,[ [ 11, "Level_Stars_002" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8247114654877789, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5304902468536142, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3874275241796169, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5870890923983399, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5684347967265522, false ,[ [ 11, "Level_Stars_003" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 223694746672956, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9767372754234105, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7504410667479283, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1076906483409158, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 784680659812873, false ,[ [ 11, "Level_Stars_003" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1066123519174454, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3612066944953283, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6569185175300727, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9250236370834937, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6559393370676828, false ,[ [ 11, "Level_Stars_003" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5481992587475664, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5675329170819172, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7340935527670819, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3792216103640656, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2218468380285984, false ,[ [ 11, "Level_Stars_003" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1816328086437679, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7036533427347421, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3166195669072257, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2271703533648169, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3253367735005156, false ,[ [ 11, "Level_Stars_003" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4433400540975796, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 308836058195137, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6933329324447532, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3960709087022297, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3498753891287452, false ,[ [ 11, "Level_Stars_004" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 799129879371953, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7850932990557145, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1260409938615846, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5727164838665076, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2583739913403096, false ,[ [ 11, "Level_Stars_004" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 154459533703653, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9276664392180972, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2270461991146659, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9718980266659184, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9491518964502627, false ,[ [ 11, "Level_Stars_004" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8304404373373417, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5608763267667739, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5152371642960301, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4953849835537336, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2525669576650878, false ,[ [ 11, "Level_Stars_004" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4119143836609609, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6278023618133075, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 806324500392441, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1008358851773966, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8597855077917717, false ,[ [ 11, "Level_Stars_004" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9022528422729694, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4012037512929734, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 390655707539884, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7108437553773445, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4376956397655955, false ,[ [ 11, "Level_Stars_005" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4321073408473208, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 213238489942371, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9230156429909875, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5082304798664789, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3971189393178262, false ,[ [ 11, "Level_Stars_005" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2615798670154516, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1283498754500573, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3794195376114403, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9956104107627206, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4864694203586225, false ,[ [ 11, "Level_Stars_005" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 860027054570898, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8435765561176135, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9743153264924134, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3745754791399591, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5846302634737563, false ,[ [ 11, "Level_Stars_005" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8660886487234729, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9765946324544627, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2792337219932156, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1470963772323327, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5902055886091513, false ,[ [ 11, "Level_Stars_005" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 62472396307261, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1394405734320353, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5437496404913561, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 791138508220518, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9518519429787367, false ,[ [ 11, "Level_Stars_006" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4858605521127143, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 739204873600113, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4440925641749238, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7809847158539472, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4830075010839827, false ,[ [ 11, "Level_Stars_006" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8681667460534504, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2645751364523077, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5205168063215674, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 172559827487419, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3211850613704742, false ,[ [ 11, "Level_Stars_006" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7642986447625879, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9173801280153778, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5505765782502125, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5496964123809037, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1376863563216956, false ,[ [ 11, "Level_Stars_006" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6868715054434669, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6021357307358461, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1674250166135512, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6421112762268537, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3690692667209934, false ,[ [ 11, "Level_Stars_006" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 592024653475509, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2662019705032987, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5634927505594058, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5055768758104241, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2277294181658222, false ,[ [ 11, "Level_Stars_007" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5396533717561298, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1221205444409847, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2301539574967471, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9750710060072854, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9724947114364199, false ,[ [ 11, "Level_Stars_007" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9592769712855214, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9299998143218051, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8326083867378731, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6359148307388859, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6707018908995817, false ,[ [ 11, "Level_Stars_007" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1695854309228708, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9680219417950661, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3053177206584045, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5671601936086773, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2066051094561651, false ,[ [ 11, "Level_Stars_007" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3597726590726393, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8362296827230078, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4357955458779839, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7743570315924943, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2328643329910788, false ,[ [ 11, "Level_Stars_007" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3520882754247106, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9381456537907993, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3499217641960103, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6104903956509779, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9931388110216218, false ,[ [ 11, "Level_Stars_008" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5802786182767269, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3892123525280317, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1192610135019513, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9322452552911646, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 597651168299082, false ,[ [ 11, "Level_Stars_008" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6087562785943165, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4750191197762904, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8994368049131471, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9520982182957134, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2414999217251016, false ,[ [ 11, "Level_Stars_008" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5920291041411794, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3155461833434766, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5601337357345453, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1684616196376539, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 932846836995501, false ,[ [ 11, "Level_Stars_008" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6710431428114638, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1013740463733471, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5568521005564131, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 262137978250509, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8501589579793683, false ,[ [ 11, "Level_Stars_008" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7234845868715893, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2327547521076365, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6375138127109916, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 37236003812195, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4727466621853065, false ,[ [ 11, "Level_Stars_009" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8360600242619516, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9679192142905049, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4674268900026122, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4434121560426149, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5562394553933994, false ,[ [ 11, "Level_Stars_009" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 483129614377105, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9766423724430194, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2408318302405417, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1649163019855763, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4230831796879625, false ,[ [ 11, "Level_Stars_009" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6826390125066961, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1116189325656518, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 476009665629442, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 596463083936452, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7608763980060688, false ,[ [ 11, "Level_Stars_009" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1921001146796944, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9520241818319954, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7063960153316328, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8887809075558627, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6921734870018938, false ,[ [ 11, "Level_Stars_009" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4998784529337243, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6219823013419132, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3859230135818303, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 313548360081652, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 144042380727388, false ,[ [ 11, "Level_Stars_010" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8700771436499961, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6275391672253358, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4427245942049721, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2742396519598304, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2903439637458532, false ,[ [ 11, "Level_Stars_010" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 717416282671815, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9294881319132495, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9064360849455776, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5950657494405216, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8832049494820396, false ,[ [ 11, "Level_Stars_010" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6634551751328968, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6963957337549724, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2109618927366711, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7484882814878419, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3322208419149917, false ,[ [ 11, "Level_Stars_010" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9385344061169917, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2213805560270679, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1104798551618655, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1648966593538078, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3344775365709641, false ,[ [ 11, "Level_Stars_010" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9719247549766097, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4274811521427261, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6112311333588588, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5466224032729357, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4848063336385942, false ,[ [ 11, "Level_Stars_011" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9622786297238875, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9330020000024645, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1750476024539004, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5712836948833927, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7576808651575341, false ,[ [ 11, "Level_Stars_011" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1381725633108933, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4500012205950107, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7601007155250647, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6105972331073061, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4471096482627013, false ,[ [ 11, "Level_Stars_011" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8600889197910139, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1401829541966341, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9954947687704376, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9020773520906479, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1563216500449529, false ,[ [ 11, "Level_Stars_011" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4372589542647691, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7762732961251762, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1778087388952992, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2192170193613192, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4369234725627608, false ,[ [ 11, "Level_Stars_011" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7403925547245306, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3373637527045017, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3133004624305813, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7843789489662639, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4373022062909759, false ,[ [ 11, "Level_Stars_012" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3664849117040248, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3565296156733079, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3306344182768917, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7812436801985929, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8050525177260786, false ,[ [ 11, "Level_Stars_012" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9840272132456198, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4350851940482104, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 349478484942923, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3808671577380716, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2119022307690796, false ,[ [ 11, "Level_Stars_012" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1301566777063269, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7672995648539855, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5669326057537035, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7345657910344804, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4588737131254298, false ,[ [ 11, "Level_Stars_012" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 372063062493799, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3006217042259541, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5811300571777655, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5877743880587113, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3013746372138066, false ,[ [ 11, "Level_Stars_012" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5816755724496797, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5358171914491346, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7079643572045875, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2845211394881316, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3230134294185861, false ,[ [ 11, "Level_Stars_013" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2236686674206561, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4255349565125438, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5638323075970111, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1771281077193226, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2590448387437796, false ,[ [ 11, "Level_Stars_013" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3994141699593273, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2787487433478943, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 674976575250203, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3618977326115586, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2796694899409652, false ,[ [ 11, "Level_Stars_013" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6860764231073142, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8031290061839526, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3409658464781914, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5776707010267174, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9071936014713236, false ,[ [ 11, "Level_Stars_013" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 913058490277887, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 579338688004528, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6417101060488428, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5401809022317634, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1311703889497733, false ,[ [ 11, "Level_Stars_013" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2204134339654556, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9964201675711942, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2272326939290022, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 614631073647221, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4837870415312648, false ,[ [ 11, "Level_Stars_014" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9141865974623371, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9565747992318183, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1096733037260175, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3977295387675426, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4655827174847822, false ,[ [ 11, "Level_Stars_014" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7288482610869947, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8350934107223277, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4490845076201321, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 908357021900483, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7549245307965837, false ,[ [ 11, "Level_Stars_014" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8158604211275795, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6608441561007656, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3059146146514383, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6879890160313532, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9265206518759445, false ,[ [ 11, "Level_Stars_014" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3479389690742456, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8678849923240829, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1346320545949398, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4575713953409112, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4534294967323215, false ,[ [ 11, "Level_Stars_014" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4670795333436644, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1520329078065659, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8013257971452308, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5870744518201798, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7533096364108372, false ,[ [ 11, "Level_Stars_015" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1686476024162495, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7020555010044147, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8871371703556644, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4486278534249746, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5562722422880102, false ,[ [ 11, "Level_Stars_015" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2168115433547173, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7512949503863599, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6965408105754623, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5916082711797402, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2859708858789006, false ,[ [ 11, "Level_Stars_015" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4191968185198522, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7835409599601092, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2298423676907686, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8158646460643363, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 861640058930943, false ,[ [ 11, "Level_Stars_015" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7412377666184981, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7538969108902911, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7763083825580279, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8337017239099264, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7564907413816241, false ,[ [ 11, "Level_Stars_015" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4828720807023899, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6277429441707711, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 572030105165048, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9726761806324894, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2386830490725062, false ,[ [ 11, "Level_Stars_016" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7017252012559916, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4337884743759712, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1161948078112771, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 470028014706792, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5535072951613608, false ,[ [ 11, "Level_Stars_016" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1526727856255488, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1166896274845711, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8306439611243241, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6132864092866247, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7060198233588553, false ,[ [ 11, "Level_Stars_016" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6766328374407869, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6459250884438779, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6391926726710019, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8037348501342741, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5387089086510653, false ,[ [ 11, "Level_Stars_016" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1873343494221662, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3210939685056382, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9002591762593238, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2331610209319641, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8542908935506395, false ,[ [ 11, "Level_Stars_016" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9661728654469142, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5709066183647712, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2427150363115047, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1608921498389976, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6077541453854321, false ,[ [ 11, "Level_Stars_017" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2177013472364242, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4286410375272685, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9710162004883506, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5858675421545199, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9135549772111022, false ,[ [ 11, "Level_Stars_017" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8192549186900755, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 332176335866845, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4736092900110433, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3573516321105746, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1410709179532332, false ,[ [ 11, "Level_Stars_017" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2971581073181794, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7401766557338702, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9076710084428961, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2897678564276592, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6050079594895063, false ,[ [ 11, "Level_Stars_017" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1333960676827591, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6932342707245673, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2266110883175181, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2429460449575179, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5340401015117291, false ,[ [ 11, "Level_Stars_017" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7356550265042323, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8015382348066249, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4916818899614897, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6305249212845954, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5239925057260738, false ,[ [ 11, "Level_Stars_018" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8525065274993948, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9843766096180733, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3927886386099333, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2398596990682489, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7980560388874412, false ,[ [ 11, "Level_Stars_018" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 831054920951118, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5740378951139446, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6661074745690729, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7653646377385299, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4806103194967181, false ,[ [ 11, "Level_Stars_018" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 550800158254255, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6968682725278666, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2166213056151054, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4423628379355977, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3435289589229226, false ,[ [ 11, "Level_Stars_018" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1829033479255658, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4933517651114705, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9508426695277437, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2796829296766898, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8656322175351812, false ,[ [ 11, "Level_Stars_018" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1149595292389124, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6777793933979205, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7400821392987841, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8886694788500927, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6399326576415672, false ,[ [ 11, "Level_Stars_019" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8985196300315967, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8501560546285802, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 416090937390178, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4169644041998265, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7947800388045106, false ,[ [ 11, "Level_Stars_019" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8310449482369427, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5451586753795212, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1517706495925181, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9067613579457589, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 719431208836233, false ,[ [ 11, "Level_Stars_019" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 493494667098414, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3982237034998472, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 789057094508808, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 990420325930242, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6405789324642997, false ,[ [ 11, "Level_Stars_019" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7186199346131168, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 518176732805012, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4846250892444717, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2097348350912943, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3143955358892207, false ,[ [ 11, "Level_Stars_019" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1576417200145258, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7587262068275272, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8002378699097815, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8897419614119723, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7255758413184982, false ,[ [ 11, "Level_Stars_020" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7104237398592579, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7861197729972728, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3098852729954506, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4341612018471888, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6483249123818788, false ,[ [ 11, "Level_Stars_020" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4296077376658721, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2375239841869988, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2023175039131124, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5044221571021116, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9600807220576555, false ,[ [ 11, "Level_Stars_020" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3101420966986704, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3148282644081167, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2592437204969888, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3389985531096461, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7418042260875685, false ,[ [ 11, "Level_Stars_020" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1952632703654457, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9313625193712622, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6621479358111683, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6745403882751509, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3466696278144188, false ,[ [ 11, "Level_Stars_020" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7340922320730949, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3611412390397342, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1651305396406549, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7275493335431874, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2967577123318883, false ,[ [ 11, "Level_Stars_021" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4758406245322163, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3061565955366523, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1826959950666641, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3477540967584234, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6420256452168751, false ,[ [ 11, "Level_Stars_021" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4956963230464391, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5659676671029907, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8261078281015324, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 627230350383966, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1566901782606193, false ,[ [ 11, "Level_Stars_021" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2072777540748807, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5051806314837269, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3844679935153794, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5468017344053063, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1651273730255657, false ,[ [ 11, "Level_Stars_021" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2463736701037192, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3560682812579549, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1264532559281213, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8714948706773163, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9659611400763219, false ,[ [ 11, "Level_Stars_021" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9270056461125454, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5272191241132147, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1450432238455983, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8490469807028378, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 308246464570007, false ,[ [ 11, "Level_Stars_022" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8363460648210645, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9861689144189414, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2010806407142563, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4338293220876743, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8755166432955347, false ,[ [ 11, "Level_Stars_022" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2463127465619672, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7660686006139606, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7943442660104184, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3651077957289751, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2929486729775075, false ,[ [ 11, "Level_Stars_022" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9144497375481872, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6093649890448885, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7875842777590968, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5568418721850242, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1902802746370928, false ,[ [ 11, "Level_Stars_022" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5027901737280641, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8480154773759793, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6334981420605094, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7169425157285091, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6985554365480283, false ,[ [ 11, "Level_Stars_022" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9804278417403234, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7871929231056691, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6732049922908106, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6505850625966953, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5120211214901769, false ,[ [ 11, "Level_Stars_023" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4762506669341294, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7987233763327515, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4602177744332055, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 154295494229305, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4368295186041323, false ,[ [ 11, "Level_Stars_023" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2706485058883046, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7478455248893201, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5106957284888666, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1680851772248287, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4022296768002616, false ,[ [ 11, "Level_Stars_023" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8941268224891927, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6884748033793935, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4438454469559868, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 404449078488875, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1834524939711944, false ,[ [ 11, "Level_Stars_023" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4444874520120714, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5359135394685732, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7472761707777568, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6380109693847962, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 768208870512186, false ,[ [ 11, "Level_Stars_023" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6769248939787034, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1202000116469933, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3688188802386471, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1685661351403, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9595254030243573, false ,[ [ 11, "Level_Stars_024" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4533657097423883, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3223613377877128, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6545035236337487, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9503362649388059, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4194060208009687, false ,[ [ 11, "Level_Stars_024" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4403798843698577, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 428596864757842, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2111841201356317, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3115936642402037, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2100155676785372, false ,[ [ 11, "Level_Stars_024" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5637008795912906, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 869840882870928, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 533071789039574, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 369289600416158, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5957428170717747, false ,[ [ 11, "Level_Stars_024" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1167890348201185, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2455785380635172, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3544483699136058, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3573438012213372, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6237593087537839, false ,[ [ 11, "Level_Stars_024" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5878887161074659, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5171267747665801, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1888434982784804, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5957618296565397, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5571242170225327, false ,[ [ 11, "Level_Stars_025" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1059987107685164, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3873266576521141, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2064234151710235, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8489581459141827, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5972647502227784, false ,[ [ 11, "Level_Stars_025" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8340633227463567, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5316674300927349, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5366415701178451, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4150998097627754, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5618927190762302, false ,[ [ 11, "Level_Stars_025" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9245827143340527, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4157227201458404, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 649904759462685, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7782540325651863, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4568508044684172, false ,[ [ 11, "Level_Stars_025" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 950722319682928, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3481113062844669, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8576398953924786, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5315449988561651, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4929824634673395, false ,[ [ 11, "Level_Stars_025" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1963198912763067, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6239986312189686, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 169597734650458, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1035883532278058, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8696166096160964, false ,[ [ 11, "Level_Stars_026" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8438717817418175, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2075130222219493, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5792037252808723, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8757531994543138, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7944816751969441, false ,[ [ 11, "Level_Stars_026" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1496758054704774, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8137988535414478, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8253969227562715, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3454578417234279, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6106071899077666, false ,[ [ 11, "Level_Stars_026" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6321504270240068, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1376684650809082, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8597458750049846, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6443604179703975, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8161805461283722, false ,[ [ 11, "Level_Stars_026" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1152170584906602, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9186616060515858, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8002895332649176, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6585871567071074, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9151804826336899, false ,[ [ 11, "Level_Stars_026" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1862040021592715, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4127352810467102, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3862830158341839, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6486548787215169, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5002870115336588, false ,[ [ 11, "Level_Stars_027" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3419381346831937, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1354463223367754, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9391916856619649, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3852850939582328, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9810040217233083, false ,[ [ 11, "Level_Stars_027" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6005259956949568, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2445155702476231, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8368187179659087, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7018179704651037, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2661432031821539, false ,[ [ 11, "Level_Stars_027" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9855800396805894, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 151050838381616, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 319905296315246, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7010248356217129, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6273932218320938, false ,[ [ 11, "Level_Stars_027" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8267035476904661, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7945661203726415, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7481853942901243, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3978427919311584, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7885336340144487, false ,[ [ 11, "Level_Stars_027" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9463434870324101, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5289205315927176, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2457840322910598, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 376869162352197, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6327085387069707, false ,[ [ 11, "Level_Stars_028" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5046529269824725, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1207768815793604, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2876250720208736, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8956861688850306, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4703525233322133, false ,[ [ 11, "Level_Stars_028" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1748962437077576, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4148955249223979, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9976838497581097, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5858089557657325, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4574350645905974, false ,[ [ 11, "Level_Stars_028" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9568353899464258, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7574272330462567, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6998416013253046, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7372346342286218, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7689661968904522, false ,[ [ 11, "Level_Stars_028" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9523131767988258, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5318347392569766, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5326671601451323, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3469097468940841, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6767189426339465, false ,[ [ 11, "Level_Stars_028" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5351392564745119, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6333415923534923, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 636495763556785, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 377646462865524, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6880480085533926, false ,[ [ 11, "Level_Stars_029" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9321402839616069, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5083602751608063, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 7293161424441618, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2103640439610031, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7864119034495818, false ,[ [ 11, "Level_Stars_029" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5659660465732082, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 642994877876691, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3947915489794753, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8952325699415582, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4680021804800207, false ,[ [ 11, "Level_Stars_029" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 184754259648384, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 51892568070651, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8596517426034873, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 594226849779166, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3975782116636255, false ,[ [ 11, "Level_Stars_029" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4408063525611407, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9564462296369968, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8670269498985089, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3188301641462769, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1432088911490646, false ,[ [ 11, "Level_Stars_029" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8311828596479902, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3653848091902435, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6110872918431511, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 638941820403751, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9268434621609291, false ,[ [ 11, "Level_Stars_030" ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9254001178930226, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2384209061411081, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3331104552222654, false ,[ [ 0, [ 0, 4 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2019455443412079, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 660717407465042, false ,[ [ 11, "Level_Stars_030" ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5303592665082875, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8132998851168642, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1795897015834513, false ,[ [ 0, [ 0, 3 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9666127814973017, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5741900811345468, false ,[ [ 11, "Level_Stars_030" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1907785875327397, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9038620658563676, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5472623014151731, false ,[ [ 0, [ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3918504948168365, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8484057978797273, false ,[ [ 11, "Level_Stars_030" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 585368351720658, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1002856312134402, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6631626018544634, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3161904158115171, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2259827021453831, false ,[ [ 11, "Level_Stars_030" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4881446634986296, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6964630732287622, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1099619980037689, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Stars_Selected_Settings"], false, null, 4167261295737083, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 4167261295737083, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5555049683413107, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4560513965804988, false ,[ [ 11, "Magazine" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1284537334673755, false ,[ [ 11, "LevelKills" ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 5068183395949277, false ,[ [ 11, "Stars" ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6850156829904957, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 31, cr.plugins_.Sprite.prototype.acts.SetPos, null, 6685781333354719, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 14, cr.plugins_.Sprite.prototype.acts.SetPos, null, 1981571711787407, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 36, cr.plugins_.Sprite.prototype.acts.SetPos, null, 6765287570458909, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 38, cr.plugins_.Sprite.prototype.acts.SetPos, null, 2794745864857135, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 355 ] ] ] ] , [ 40, cr.plugins_.Sprite.prototype.acts.SetPos, null, 4927463164310186, false ,[ [ 0, [ 0, 1137 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetPos, null, 2696012891035476, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 550 ] ] ] ] , [ 32, cr.plugins_.Sprite.prototype.acts.SetPos, null, 8770293903393638, false ,[ [ 0, [ 0, 780 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 34, cr.plugins_.Sprite.prototype.acts.SetPos, null, 7506512058252046, false ,[ [ 0, [ 0, 1140 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 193750029422769, false ,[ [ 0, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3183951504897939, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6400994825527396, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3698519003914676, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] , [ 3, 0 ] ] ] , [ 16, cr.plugins_.Sprite.prototype.acts.SetY, null, 4487616762796904, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 1, cr.plugins_.Sprite.prototype.acts.SetY, null, 1669754616364326, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 7, cr.plugins_.Sprite.prototype.acts.SetY, null, 9999312539906644, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 2, cr.plugins_.Sprite.prototype.acts.SetY, null, 8136984473512173, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 5, cr.plugins_.Sprite.prototype.acts.SetY, null, 4204984722003214, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 10, cr.plugins_.Sprite.prototype.acts.SetY, null, 460508878314265, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 21, cr.plugins_.Sprite.prototype.acts.SetY, null, 3561621010658391, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 19, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 7376788419498175, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 22, cr.plugins_.Sprite.prototype.acts.SetY, null, 3932840648829688, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 26, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9961325664954743, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 27, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 8307581142815103, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 15, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9170417245610762, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 23, cr.plugins_.Sprite.prototype.acts.SetY, null, 1404918654978155, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 13, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 8551047434826249, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 216365658983926, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 24, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 377527437899248, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 20, cr.plugins_.Sprite.prototype.acts.SetY, null, 2254828764305734, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 17, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 7173624867060725, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 127336285374443, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 5340703727674091, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1662781059369858, false ,[ [ 11, "Magazine" ] , [ 8, 3 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8837521868128573, false ,[ [ 11, "LevelKills" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 1514641402161372, false ,[ [ 11, "Stars" ] , [ 7, [ 0, 2 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 4396851526252665, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 31, cr.plugins_.Sprite.prototype.acts.SetPos, null, 5109822621038186, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 14, cr.plugins_.Sprite.prototype.acts.SetPos, null, 7504399729354498, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 36, cr.plugins_.Sprite.prototype.acts.SetPos, null, 1752895156902895, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 38, cr.plugins_.Sprite.prototype.acts.SetPos, null, 7127339408292699, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 355 ] ] ] ] , [ 40, cr.plugins_.Sprite.prototype.acts.SetPos, null, 9102969712500161, false ,[ [ 0, [ 0, 1137 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetPos, null, 8640942356243474, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 550 ] ] ] ] , [ 32, cr.plugins_.Sprite.prototype.acts.SetPos, null, 4999668459172721, false ,[ [ 0, [ 0, 780 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 34, cr.plugins_.Sprite.prototype.acts.SetPos, null, 4054564772967043, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 33, cr.plugins_.Sprite.prototype.acts.SetPos, null, 5669100067006195, false ,[ [ 0, [ 0, 1140 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 77085873898389, false ,[ [ 0, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6019358099841795, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5723583063816076, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1172857579690662, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] , [ 3, 0 ] ] ] , [ 16, cr.plugins_.Sprite.prototype.acts.SetY, null, 321115941363933, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 1, cr.plugins_.Sprite.prototype.acts.SetY, null, 5979996279993023, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 7, cr.plugins_.Sprite.prototype.acts.SetY, null, 9279197639337267, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 2, cr.plugins_.Sprite.prototype.acts.SetY, null, 6058754931541287, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 5, cr.plugins_.Sprite.prototype.acts.SetY, null, 761416624559908, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 10, cr.plugins_.Sprite.prototype.acts.SetY, null, 8916967417664966, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 21, cr.plugins_.Sprite.prototype.acts.SetY, null, 6695735334207589, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 19, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 5333185312064204, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 22, cr.plugins_.Sprite.prototype.acts.SetY, null, 4975980317805783, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 26, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 3031630687577253, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 27, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9821671910942132, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 15, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 994706812181779, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 23, cr.plugins_.Sprite.prototype.acts.SetY, null, 3801559674336437, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 13, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9414891689792034, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 6038146219995965, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 24, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 1447780130473415, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 20, cr.plugins_.Sprite.prototype.acts.SetY, null, 1241426718182242, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 17, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 1041754057989909, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 7953791289764237, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 35, cr.plugins_.Sprite.prototype.acts.SetPos, null, 4809846915416707, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3207998306032774, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 2595719371169128, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1156423588590769, false ,[ [ 11, "Magazine" ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9513968811744931, false ,[ [ 11, "LevelKills" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8863991433921862, false ,[ [ 11, "Stars" ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 4295973933065789, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 31, cr.plugins_.Sprite.prototype.acts.SetPos, null, 3346672873362123, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 14, cr.plugins_.Sprite.prototype.acts.SetPos, null, 5285980600204172, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 36, cr.plugins_.Sprite.prototype.acts.SetPos, null, 7757576656605779, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 38, cr.plugins_.Sprite.prototype.acts.SetPos, null, 1013291553816618, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 355 ] ] ] ] , [ 40, cr.plugins_.Sprite.prototype.acts.SetPos, null, 5973338895659821, false ,[ [ 0, [ 0, 1137 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetPos, null, 3071471206802047, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 550 ] ] ] ] , [ 32, cr.plugins_.Sprite.prototype.acts.SetPos, null, 2866224485287411, false ,[ [ 0, [ 0, 780 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 34, cr.plugins_.Sprite.prototype.acts.SetPos, null, 205646153975649, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 33, cr.plugins_.Sprite.prototype.acts.SetPos, null, 6299868679245225, false ,[ [ 0, [ 0, 1140 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6644653672055841, false ,[ [ 0, [ 0, 2 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8599199411026716, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8317725510392869, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6720921607689927, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] , [ 3, 0 ] ] ] , [ 16, cr.plugins_.Sprite.prototype.acts.SetY, null, 4443080647117532, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 1, cr.plugins_.Sprite.prototype.acts.SetY, null, 7554326811674631, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 7, cr.plugins_.Sprite.prototype.acts.SetY, null, 6476093605885605, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 2, cr.plugins_.Sprite.prototype.acts.SetY, null, 9080301400544095, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 5, cr.plugins_.Sprite.prototype.acts.SetY, null, 6651255484734844, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 10, cr.plugins_.Sprite.prototype.acts.SetY, null, 6522483981498622, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 21, cr.plugins_.Sprite.prototype.acts.SetY, null, 6544594173131173, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 19, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 5006235087189518, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 22, cr.plugins_.Sprite.prototype.acts.SetY, null, 7798713077609459, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 26, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 4951597844679282, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 27, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 4393570357473483, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 15, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 5366354835148091, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 23, cr.plugins_.Sprite.prototype.acts.SetY, null, 6341055620505445, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 13, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 334399036295085, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 6745791568743855, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 24, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 3147524524404352, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 20, cr.plugins_.Sprite.prototype.acts.SetY, null, 8828446807085231, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 17, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 4760540420534795, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 406121377647977, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 35, cr.plugins_.Sprite.prototype.acts.SetPos, null, 5798436962146325, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 2770524262563041, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ 37, cr.plugins_.Sprite.prototype.acts.SetPos, null, 2972909047708654, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 355 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2244370670201858, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 3146790539466829, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6953172528132828, false ,[ [ 11, "Magazine" ] , [ 8, 5 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4251812049031426, false ,[ [ 11, "LevelKills" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 4060235209332252, false ,[ [ 11, "Stars" ] , [ 7, [ 0, 4 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 3066490930438513, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 31, cr.plugins_.Sprite.prototype.acts.SetPos, null, 1773853756717205, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 14, cr.plugins_.Sprite.prototype.acts.SetPos, null, 8297848491519374, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 540 ] ] ] ] , [ 36, cr.plugins_.Sprite.prototype.acts.SetPos, null, 1378798053169786, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 38, cr.plugins_.Sprite.prototype.acts.SetPos, null, 758332910507362, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 355 ] ] ] ] , [ 40, cr.plugins_.Sprite.prototype.acts.SetPos, null, 5968667063392404, false ,[ [ 0, [ 0, 1137 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetPos, null, 605746596390246, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 550 ] ] ] ] , [ 32, cr.plugins_.Sprite.prototype.acts.SetPos, null, 8037423386430534, false ,[ [ 0, [ 0, 780 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 34, cr.plugins_.Sprite.prototype.acts.SetPos, null, 7214417496891544, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 33, cr.plugins_.Sprite.prototype.acts.SetPos, null, 7156021428452418, false ,[ [ 0, [ 0, 1140 ] ] , [ 0, [ 0, 725 ] ] ] ] , [ 41, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 2015642791893471, false ,[ [ 0, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8796051943738364, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7681074028304042, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1891152958862123, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] , [ 3, 0 ] ] ] , [ 16, cr.plugins_.Sprite.prototype.acts.SetY, null, 7704021404230415, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 1, cr.plugins_.Sprite.prototype.acts.SetY, null, 4051500054943091, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 7, cr.plugins_.Sprite.prototype.acts.SetY, null, 7287487054638769, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 2, cr.plugins_.Sprite.prototype.acts.SetY, null, 6578213794254907, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 5, cr.plugins_.Sprite.prototype.acts.SetY, null, 5680903951831393, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 10, cr.plugins_.Sprite.prototype.acts.SetY, null, 3503517964236774, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 21, cr.plugins_.Sprite.prototype.acts.SetY, null, 9051092638855862, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 19, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 2961676544106672, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 22, cr.plugins_.Sprite.prototype.acts.SetY, null, 2936599020413209, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 26, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 776387248651494, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 27, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 4066160982336284, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 15, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 4561264199683298, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 23, cr.plugins_.Sprite.prototype.acts.SetY, null, 5194477021021697, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 13, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9088055271203302, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 2122629685565349, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 24, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9483966459525955, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 20, cr.plugins_.Sprite.prototype.acts.SetY, null, 388857088204213, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ 17, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 9003548530033977, false ,[ [ 0, [ 0, 2000 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 335356140922985, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 35, cr.plugins_.Sprite.prototype.acts.SetPos, null, 1668557800456116, false ,[ [ 0, [ 0, 787 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 5146810911533082, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ 37, cr.plugins_.Sprite.prototype.acts.SetPos, null, 9938637371719179, false ,[ [ 0, [ 0, 960 ] ] , [ 0, [ 0, 355 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 3170985297702892, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ 39, cr.plugins_.Sprite.prototype.acts.SetPos, null, 2694978976037657, false ,[ [ 0, [ 0, 1137 ] ] , [ 0, [ 0, 397 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3120713099056135, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] ] ] ] ] , [ 0, [false, "Levels_Check_Settings"], false, null, 7373305384346961, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7373305384346961, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4428664469439089, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 7827770531936554, false ] ], [ ] ,[ [ 0, null, false, null, 7835439015241489, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 7910267170531871, false ,[ [ 1, [ 2, "Level_Stars_001" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8853260772532842, false ,[ [ 11, "Level_Stars_001" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_001" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8039523774889443, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 8721662114136522, false ,[ [ 1, [ 2, "Level_Stars_002" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 4896499167454854, false ,[ [ 11, "Level_Stars_002" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_002" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 4858966728125096, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 8596857007535351, false ,[ [ 1, [ 2, "Level_Stars_003" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 1297421317656855, false ,[ [ 11, "Level_Stars_003" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_003" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8077410130896133, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 9685409466397573, false ,[ [ 1, [ 2, "Level_Stars_004" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8022510458606317, false ,[ [ 11, "Level_Stars_004" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_004" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9135712539662594, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 9173545225345997, false ,[ [ 1, [ 2, "Level_Stars_005" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9459008985365388, false ,[ [ 11, "Level_Stars_005" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_005" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5981323534903195, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 635595085228908, false ,[ [ 1, [ 2, "Level_Stars_006" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 498658485357619, false ,[ [ 11, "Level_Stars_006" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_006" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8233155924061475, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 302063994378805, false ,[ [ 1, [ 2, "Level_Stars_007" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8151775601303778, false ,[ [ 11, "Level_Stars_007" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_007" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9655867782524586, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 8440460683567051, false ,[ [ 1, [ 2, "Level_Stars_008" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2099874223939098, false ,[ [ 11, "Level_Stars_008" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_008" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8983575696266757, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 3441470922846303, false ,[ [ 1, [ 2, "Level_Stars_009" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2226701011426564, false ,[ [ 11, "Level_Stars_009" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_009" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9799230735715865, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 9075086379652486, false ,[ [ 1, [ 2, "Level_Stars_010" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2127175746808099, false ,[ [ 11, "Level_Stars_010" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_010" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 113629461431723, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 3381016664150244, false ,[ [ 1, [ 2, "Level_Stars_011" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9618042661104472, false ,[ [ 11, "Level_Stars_011" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_011" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2323096172388086, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 6799846974991493, false ,[ [ 1, [ 2, "Level_Stars_012" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 1213229645672951, false ,[ [ 11, "Level_Stars_012" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_012" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 221401856418016, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 1347143974829259, false ,[ [ 1, [ 2, "Level_Stars_013" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 854631313308216, false ,[ [ 11, "Level_Stars_013" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_013" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1717645163857189, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 4376688925795129, false ,[ [ 1, [ 2, "Level_Stars_014" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 6103511678946475, false ,[ [ 11, "Level_Stars_014" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_014" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1413556344566269, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 6445426738332916, false ,[ [ 1, [ 2, "Level_Stars_015" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2328887031851304, false ,[ [ 11, "Level_Stars_015" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_015" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2181986057689589, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 945371803606745, false ,[ [ 1, [ 2, "Level_Stars_016" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 1779337668589872, false ,[ [ 11, "Level_Stars_016" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_016" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7532333003692911, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 3207820598232286, false ,[ [ 1, [ 2, "Level_Stars_017" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 333527945436854, false ,[ [ 11, "Level_Stars_017" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_017" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1811409160513267, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 9812264252245709, false ,[ [ 1, [ 2, "Level_Stars_018" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 5252364153115108, false ,[ [ 11, "Level_Stars_018" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_018" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7941607500961272, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 6152904669275185, false ,[ [ 1, [ 2, "Level_Stars_019" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2303965401465838, false ,[ [ 11, "Level_Stars_019" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_019" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9925421180268147, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 564778011391584, false ,[ [ 1, [ 2, "Level_Stars_020" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 5933078641935642, false ,[ [ 11, "Level_Stars_020" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_020" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3683667299661118, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 8684236256245948, false ,[ [ 1, [ 2, "Level_Stars_021" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2555543648078083, false ,[ [ 11, "Level_Stars_021" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_021" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 723831090166905, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 2913897713380711, false ,[ [ 1, [ 2, "Level_Stars_022" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8341765072435817, false ,[ [ 11, "Level_Stars_022" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_022" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 7480941325429553, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 7498242115920936, false ,[ [ 1, [ 2, "Level_Stars_023" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 3289192183942203, false ,[ [ 11, "Level_Stars_023" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_023" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1097447960333319, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 7602613870961977, false ,[ [ 1, [ 2, "Level_Stars_024" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 5263675701702831, false ,[ [ 11, "Level_Stars_024" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_024" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8761484299797968, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 6146508838835703, false ,[ [ 1, [ 2, "Level_Stars_025" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 5720909624251909, false ,[ [ 11, "Level_Stars_025" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_025" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5527513950344664, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 2251496608387672, false ,[ [ 1, [ 2, "Level_Stars_026" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7878327892207532, false ,[ [ 11, "Level_Stars_026" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_026" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1455479554596551, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 195293807490558, false ,[ [ 1, [ 2, "Level_Stars_027" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 1656048040836911, false ,[ [ 11, "Level_Stars_027" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_027" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 598141894794336, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 2185681452470846, false ,[ [ 1, [ 2, "Level_Stars_028" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9171831281605638, false ,[ [ 11, "Level_Stars_028" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_028" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2077671792126428, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 216901583594459, false ,[ [ 1, [ 2, "Level_Stars_029" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 5834198393951137, false ,[ [ 11, "Level_Stars_029" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_029" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 6721030468327882, [ [ 54, cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists, null, 0, false, false, false, 275353555822113, false ,[ [ 1, [ 2, "Level_Stars_030" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 3085812646862237, false ,[ [ 11, "Level_Stars_030" ] , [ 7, [ 20, 54, cr.plugins_.WebStorage.prototype.exps.LocalValue, true, null ,[ [ 2, "Level_Stars_030" ] ] ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Level_001"], false, null, 5506606692661454, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 5506606692661454, false ,[ [ 1, [ 2, "Level_001" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 306812380390525, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 3044738699085709, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9811667521746621, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 1953536836627432, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 18 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 7608486642995551, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1958376924385892, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] , [ 112, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 6913701109174239, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 62 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 8239925293334697, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 7252742629325716, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4826410257519116, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9762493061756096, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9640326459612832, false ,[ [ 1, [ 2, "Level_001" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1841758038206617, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 995187339444539, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2502384109244164, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 1372677149620565, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8697420065651329, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 1881795540407163, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 6549362309069351, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7166628663636126, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1028285495984957, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4864752450849202, false ,[ [ 1, [ 2, "Level_001" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3365906725642017, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7657207013389485, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5385471340996383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 665044417743619, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1469279240728944, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 7840415814644466, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4004907651396541, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 337127445342499, false ,[ [ 1, [ 2, "Level_Stars_001" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4278728914240921, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 6440660439844376, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 7515083273808207, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8994701900860164, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5176352900151384, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1228591541511453, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 4470844182099088, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7229828102963958, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5453504286213878, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5297899620603331, false ,[ [ 1, [ 2, "Level_001" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 764113622263857, false ,[ [ 6, "Level_001" ] ] ] ] ] , [ 0, null, false, null, 3552501021171891, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 6053819850839754, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4636548162552008, false ,[ [ 1, [ 2, "Level_Stars_001" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 5973838783560663, false ,[ [ 1, [ 2, "Level_Stars_002" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 17458972319349, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9488065020730101, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 9955946324121411, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3427974051835775, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 1455580311537933, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1252841073208585, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2981320041297376, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6108667874295986, false ,[ [ 1, [ 2, "Level_002" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3138414042282759, false ,[ [ 1, [ 2, "Level_001" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7006316649155713, false ,[ [ 6, "Level_002" ] ] ] ] ] ] ] , [ 0, [false, "Level_002"], false, null, 9462799016431059, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9462799016431059, false ,[ [ 1, [ 2, "Level_002" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 2 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] , [ 66, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 8503823234654449, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 62 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 2957422258943433, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 7072061892969875, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6627557418263996, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7340592537130384, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2632652332651325, false ,[ [ 1, [ 2, "Level_002" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6555979831469747, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6547793361623269, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 153816030728124, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3077632866616735, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 9600243822475199, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 1592334760603125, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 936155918706786, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3160834689175755, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8097154715457957, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6422284177478938, false ,[ [ 1, [ 2, "Level_002" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6461215464091843, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2843222319876673, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 7914296887567524, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 5176901128459379, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6937643073161003, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 4705540636666761, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 7163517956606036, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 684984784278685, false ,[ [ 1, [ 2, "Level_Stars_002" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 6336516605983142, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 2556143857696596, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_002" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_002" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_002" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_003" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 6771726403585246, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3293108138901525, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 10167817123243, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6245819729576498, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5924262680724332, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5608287827031867, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_003" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_002" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_003" ] ] ] ] ] ] ] , [ 0, [false, "Level_003"], false, null, 9516140972575143, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9516140972575143, false ,[ [ 1, [ 2, "Level_003" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 14 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 3 ] ] ] ] , [ 112, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 821369670845689, false ,[ [ 3, 1 ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 7731948692163663, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_003" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_003" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_003" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_003" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_003" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_003" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_004" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_004" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_003" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_004" ] ] ] ] ] ] ] , [ 0, [false, "Level_004"], false, null, 5650632017646976, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 5650632017646976, false ,[ [ 1, [ 2, "Level_004" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 20 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 4 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 92073220999251, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_004" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_004" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_004" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_004" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_004" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_004" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_005" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_005" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_004" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_005" ] ] ] ] ] ] ] , [ 0, [false, "Level_005"], false, null, 9791721092520692, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9791721092520692, false ,[ [ 1, [ 2, "Level_005" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 18 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 5 ] ] ] ] , [ 112, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 7065448503179667, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_005" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_005" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_005" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_005" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_005" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_005" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_006" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_006" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_005" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_006" ] ] ] ] ] ] ] , [ 0, [false, "Level_006"], false, null, 3248595750807611, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3248595750807611, false ,[ [ 1, [ 2, "Level_006" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 20 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 6 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 7170874126801092, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_006" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_006" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_006" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_006" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_006" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_006" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_007" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_007" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_006" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_007" ] ] ] ] ] ] ] , [ 0, [false, "Level_007"], false, null, 3932800421009744, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3932800421009744, false ,[ [ 1, [ 2, "Level_007" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 8 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 16 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7384067383572489, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 152530950880824, false ,[ [ 1, [ 2, "Chain_2_Settings" ] ] , [ 3, 1 ] ] ] , [ 112, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 7814150252046824, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 62 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] , [ 116, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 5271509832205577, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 63 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8702766821398472, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 119561993104281, false ,[ [ 1, [ 2, "Chain_2_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_007" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 215181115732114, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8701156841948647, false ,[ [ 1, [ 2, "Chain_2_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_007" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_007" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_007" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_007" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_007" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_008" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_008" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_007" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_008" ] ] ] ] ] ] ] , [ 0, [false, "Level_008"], false, null, 8204839127017829, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 8204839127017829, false ,[ [ 1, [ 2, "Level_008" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 8 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 8 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] , [ 115, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 7713031543117414, false ,[ [ 7, [ 0, 1 ] ] , [ 4, 62 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_008" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_008" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_008" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_008" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_008" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_008" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_009" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_009" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_008" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_009" ] ] ] ] ] ] ] , [ 0, [false, "Level_009"], false, null, 7525209873202337, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7525209873202337, false ,[ [ 1, [ 2, "Level_009" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 9 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 5811612393664498, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_009" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_009" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_009" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_009" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_009" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_009" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_010" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_010" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_009" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_010" ] ] ] ] ] ] ] , [ 0, [false, "Level_010"], false, null, 7104530890416253, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7104530890416253, false ,[ [ 1, [ 2, "Level_010" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 14 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] , [ 112, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 7451227740696092, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 62 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 4728649934715781, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_010" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_010" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_010" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_010" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_010" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_010" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_011" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_011" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_010" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_011" ] ] ] ] ] ] ] , [ 0, [false, "Level_011"], false, null, 3219438824506403, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3219438824506403, false ,[ [ 1, [ 2, "Level_011" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 14 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 11 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 8897550980365847, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_011" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_011" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_011" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_011" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_011" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_011" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_012" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_012" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_011" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_012" ] ] ] ] ] ] ] , [ 0, [false, "Level_012"], false, null, 557651586521976, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 557651586521976, false ,[ [ 1, [ 2, "Level_012" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 16 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 12 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 5815730074349848, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_012" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_012" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_012" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_012" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_012" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_012" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_013" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_013" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_012" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_013" ] ] ] ] ] ] ] , [ 0, [false, "Level_013"], false, null, 9526353142307365, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9526353142307365, false ,[ [ 1, [ 2, "Level_013" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 8 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 16 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 13 ] ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_013" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_013" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_013" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_013" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_013" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_013" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_014" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_014" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_013" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_014" ] ] ] ] ] ] ] , [ 0, [false, "Level_014"], false, null, 3225339507617427, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3225339507617427, false ,[ [ 1, [ 2, "Level_014" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 24 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 14 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 4274894455711439, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_014" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_014" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_014" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_014" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_014" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_014" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_015" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_015" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_014" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_015" ] ] ] ] ] ] ] , [ 0, [false, "Level_015"], false, null, 9450844471382975, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9450844471382975, false ,[ [ 1, [ 2, "Level_015" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 10 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 30 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] , [ 112, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 9821152279385783, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 62 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] , [ 113, cr.behaviors.Pin.prototype.acts.Pin, "Pin", 5037340920659976, false ,[ [ 4, 42 ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_015" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_015" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_015" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_015" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_015" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_015" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_016" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_015" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7823851706635282, false ,[ [ 6, "StartMenu" ] ] ] ] ] ] ] , [ 0, [false, "Level_016"], false, null, 701700865905285, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 701700865905285, false ,[ [ 1, [ 2, "Level_016" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 16 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_016" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_016" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_016" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_016" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_016" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_016" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_017" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_017" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_016" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_017" ] ] ] ] ] ] ] , [ 0, [false, "Level_017"], false, null, 7703963752147972, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7703963752147972, false ,[ [ 1, [ 2, "Level_017" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_017" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_017" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_017" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_017" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_017" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_017" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_018" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_018" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_017" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_018" ] ] ] ] ] ] ] , [ 0, [false, "Level_018"], false, null, 3356953553562494, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3356953553562494, false ,[ [ 1, [ 2, "Level_018" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 18 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_018" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_018" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_018" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_018" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_018" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_018" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_019" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_019" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_018" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_019" ] ] ] ] ] ] ] , [ 0, [false, "Level_019"], false, null, 6147443285452049, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 6147443285452049, false ,[ [ 1, [ 2, "Level_019" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_019" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_019" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_019" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_019" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_019" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_019" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_020" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_020" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_019" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_020" ] ] ] ] ] ] ] , [ 0, [false, "Level_020"], false, null, 2081165323174974, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 2081165323174974, false ,[ [ 1, [ 2, "Level_020" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 20 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_020" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_020" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_020" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_020" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_020" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_020" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_021" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_021" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_020" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_021" ] ] ] ] ] ] ] , [ 0, [false, "Level_021"], false, null, 4946205540202294, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 4946205540202294, false ,[ [ 1, [ 2, "Level_021" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_021" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_021" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_021" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_021" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_021" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_021" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_022" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_022" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_021" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_022" ] ] ] ] ] ] ] , [ 0, [false, "Level_022"], false, null, 4059345996169395, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 4059345996169395, false ,[ [ 1, [ 2, "Level_022" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 22 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_022" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_022" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_022" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_022" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_022" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_022" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_023" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_023" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_022" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_023" ] ] ] ] ] ] ] , [ 0, [false, "Level_023"], false, null, 8229216479978767, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 8229216479978767, false ,[ [ 1, [ 2, "Level_023" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_023" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_023" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_023" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_023" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_023" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_023" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_024" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_024" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_023" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_024" ] ] ] ] ] ] ] , [ 0, [false, "Level_024"], false, null, 6866510547029446, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 6866510547029446, false ,[ [ 1, [ 2, "Level_024" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 24 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_024" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_024" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_024" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_024" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_024" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_024" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_025" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_025" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_024" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_025" ] ] ] ] ] ] ] , [ 0, [false, "Level_025"], false, null, 2691311731173991, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 2691311731173991, false ,[ [ 1, [ 2, "Level_025" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_025" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_025" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_025" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_025" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_025" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_025" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_026" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_026" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_025" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_026" ] ] ] ] ] ] ] , [ 0, [false, "Level_026"], false, null, 5590470402419373, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 5590470402419373, false ,[ [ 1, [ 2, "Level_026" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 26 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_026" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_026" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_026" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_026" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_026" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_026" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_027" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_027" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_026" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_027" ] ] ] ] ] ] ] , [ 0, [false, "Level_027"], false, null, 2778659627561509, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 2778659627561509, false ,[ [ 1, [ 2, "Level_027" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_027" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_027" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_027" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_027" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_027" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_027" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_028" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_028" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_027" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_028" ] ] ] ] ] ] ] , [ 0, [false, "Level_028"], false, null, 836913356283522, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 836913356283522, false ,[ [ 1, [ 2, "Level_028" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 28 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_028" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_028" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_028" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_028" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_028" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_028" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_029" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_029" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_028" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_029" ] ] ] ] ] ] ] , [ 0, [false, "Level_029"], false, null, 467320503765382, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 467320503765382, false ,[ [ 1, [ 2, "Level_029" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_029" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_029" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_029" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_029" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_029" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_029" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_030" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5565935297299344, false ,[ [ 1, [ 2, "Level_030" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_029" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "Level_030" ] ] ] ] ] ] ] , [ 0, [false, "Level_030"], false, null, 7787299505289869, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7787299505289869, false ,[ [ 1, [ 2, "Level_030" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2887506509771638, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 8771165559329848, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 749751580528439, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 6 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9444301919225058, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 12 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 5820598400724704, false ,[ [ 11, "LevelNumber" ] , [ 7, [ 0, 30 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5671012870956821, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3027835779599345, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5779772273958313, false ,[ [ 4, 1 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1060141848906018, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4784991849057622, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3249291414489003, false ,[ [ 1, [ 2, "Level_030" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1009211232237542, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8212319439498223, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 2301444107230859, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 8574666053274474, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 1817495528694625, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3509531105866845, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5638717604482938, false ,[ [ 4, 32 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7677903918317416, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7791303313466824, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9855188822199528, false ,[ [ 1, [ 2, "Level_030" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9343754505816997, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3705658722759561, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9694959649981466, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 3284494658904608, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 469787058391665, false ,[ [ 6, "LevelsMenu" ] ] ] ] ,[ [ 0, null, false, null, 5691508756524901, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8764350166665203, false ,[ [ 11, "Score" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 3376346483891622, false ,[ [ 1, [ 2, "Level_Stars_030" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 9692038562563216, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 1634722822775998, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] ] ] ] ] , [ 0, null, true, null, 3444046418989653, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8230744062444634, false ,[ [ 4, 7 ] ] ] , [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 54130548157036, false ,[ [ 4, 34 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8472843316124019, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 6218020135166627, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6435307620637391, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9747086021293815, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8854136287148081, false ,[ [ 1, [ 2, "Level_030" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 7426247337209463, false ,[ [ 6, "Level_030" ] ] ] ] ] , [ 0, null, false, null, 1530517612307878, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5011965382075793, false ,[ [ 4, 33 ] ] ] ], [ [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 4311918316313074, false ,[ [ 1, [ 2, "Level_Stars_030" ] ] , [ 7, [ 23, "Stars" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 543967099945446, false ,[ [ 1, [ 2, "Level_Stars_031" ] ] , [ 7, [ 0, 1 ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 8000058809321706, false ,[ [ 1, [ 2, "Score" ] ] , [ 7, [ 23, "Score" ] ] ] ] , [ 54, cr.plugins_.WebStorage.prototype.acts.StoreLocal, null, 30574989425688, false ,[ [ 1, [ 2, "Kills" ] ] , [ 7, [ 23, "Kills" ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 6700587235323292, false ,[ [ 0, [ 1, 0.5 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6203997877837245, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 5506334842869383, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9517381078197286, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 2329005339697124, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4684330923752667, false ,[ [ 1, [ 2, "Level_030" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 6306046993144992, false ,[ [ 6, "StartMenu" ] ] ] ] ] ] ] ] ] , [ 0, [true, "Kills_Settings"], false, null, 7682216862132908, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7682216862132908, false ,[ [ 1, [ 2, "Kills_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1446452775183381, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 328537147620846, false ,[ [ 11, "Kills" ] , [ 8, 4 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 19, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 3223622950886641, false ,[ [ 7, [ 10, [ 2, "X0" ] ,[ 23, "Kills" ] ] ] ] ] ] ] , [ 0, null, false, null, 9863818700485352, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5181129793984413, false ,[ [ 11, "Kills" ] , [ 8, 2 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 19, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1794227021214432, false ,[ [ 7, [ 10, [ 2, "X00" ] ,[ 23, "Kills" ] ] ] ] ] ] ] , [ 0, null, false, null, 7043146768376773, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2906816929620958, false ,[ [ 11, "Kills" ] , [ 8, 4 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4353558181324939, false ,[ [ 11, "Kills" ] , [ 8, 2 ] , [ 7, [ 0, 100 ] ] ] ] ], [ [ 19, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 2108065794051069, false ,[ [ 7, [ 10, [ 2, "X0" ] ,[ 23, "Kills" ] ] ] ] ] ] ] , [ 0, null, false, null, 4900446769305783, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 2764688521275684, false ,[ [ 11, "Kills" ] , [ 8, 4 ] , [ 7, [ 0, 99 ] ] ] ] ], [ [ 19, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 8884422367410087, false ,[ [ 7, [ 10, [ 2, "X" ] ,[ 23, "Kills" ] ] ] ] ] ] ] ] ] , [ 0, [true, "Player_Settings"], false, null, 7020404899704167, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7020404899704167, false ,[ [ 1, [ 2, "Player_Settings" ] ] ] ] ], [ ] ,[ [ 0, [true, "Magazine_Settings"], false, null, 2240778511883634, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 2240778511883634, false ,[ [ 1, [ 2, "Magazine_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4047416325879951, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6427305538320473, false ,[ [ 11, "Magazine" ] , [ 8, 3 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2783873444160529, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 7554389786962097, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4378731344598222, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3904316463239611, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 4178456846314003, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 301797843615382, false ,[ [ 11, "Magazine" ] , [ 8, 4 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 15, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 7045887973985422, false ,[ [ 7, [ 10, [ 2, "MG:" ] ,[ 23, "Magazine" ] ] ] ] ] ] ] , [ 0, null, false, null, 5889755081013625, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6108688343490523, false ,[ [ 11, "Magazine" ] , [ 8, 2 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 15, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1003419455981457, false ,[ [ 7, [ 10, [ 2, "MG:0" ] ,[ 23, "Magazine" ] ] ] ] ] ] ] ] ] , [ 0, [true, "Shoot_Settings"], false, null, 1632527885133189, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 1632527885133189, false ,[ [ 1, [ 2, "Shoot_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1798375361087415, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 9531155321796805, false ,[ [ 4, 18 ] ] ] ], [ [ 125, cr.plugins_.Sprite.prototype.acts.Spawn, null, 3473255717629329, false ,[ [ 4, 68 ] , [ 5, [ 0, 1 ] ] , [ 7, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2415690775133872, [ [ -1, cr.system_object.prototype.cnds.EveryTick, null, 0, false, false, false, 6412237711918974, false ] ], [ [ 120, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 407217052825923, false ,[ [ 0, [ 20, 52, cr.plugins_.Mouse.prototype.exps.X, false, null ] ] , [ 0, [ 20, 52, cr.plugins_.Mouse.prototype.exps.Y, false, null ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetY, null, 2314274395827472, false ,[ [ 0, [ 5, [ 20, 25, cr.plugins_.Spritefont2.prototype.exps.Y, false, null ] ,[ 0, 5 ] ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetAngle, null, 8186994411673052, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, true, null, 4899402889939929, [ [ 133, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 142853327779313, false ,[ [ 4, 66 ] ] ] , [ 133, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9973042829312868, false ,[ [ 4, 112 ] ] ] , [ 133, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7753668327132705, false ,[ [ 4, 113 ] ] ] ], [ [ 125, cr.behaviors.Pin.prototype.acts.Unpin, "Pin", 9821386157070058, false ] , [ 125, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 4587327678257913, false ,[ [ 3, 1 ] ] ] , [ 119, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 9555668639717742, false ,[ [ 3, 1 ] ] ] , [ 123, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 2258709312204921, false ,[ [ 3, 1 ] ] ] , [ 120, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 8048939933547537, false ,[ [ 3, 1 ] ] ] , [ 124, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 2950601083392377, false ,[ [ 3, 1 ] ] ] , [ 122, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 9756260805632734, false ,[ [ 3, 1 ] ] ] , [ 121, cr.behaviors.Physics.prototype.acts.SetEnabled, "Physics", 6272790846408988, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 364898840252666, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCreated, null, 1, false, false, false, 5945840729731796, false ] ], [ [ 68, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 3833403538485391, false ,[ [ 0, [ 20, 53, cr.plugins_.Touch.prototype.exps.X, false, null ] ] , [ 0, [ 20, 53, cr.plugins_.Touch.prototype.exps.Y, false, null ] ] ] ] , [ -1, cr.system_object.prototype.acts.SubVar, null, 7284044612336103, false ,[ [ 11, "Magazine" ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, null, true, null, 9235928530724794, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7632809032432671, false ,[ [ 4, 67 ] ] ] , [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 1730748065701456, false ,[ [ 4, 128 ] ] ] , [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 535495781356476, false ,[ [ 4, 219 ] ] ] , [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7831970026177643, false ,[ [ 4, 220 ] ] ] ], [ [ 68, cr.plugins_.Sprite.prototype.acts.SubInstanceVar, null, 149646733122676, false ,[ [ 10, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ 68, cr.behaviors.Bullet.prototype.acts.SetSpeed, "Bullet", 8648474553705305, false ,[ [ 0, [ 4, [ 22, 68, "Bullet", cr.behaviors.Bullet.prototype.exps.Speed, false, null ] ,[ 20, 68, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] ] , [ 0, null, false, null, 7744663551333598, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6838372566790772, false ,[ [ 4, 70 ] ] ] ], [ [ 70, cr.behaviors.Physics.prototype.acts.RemoveJoints, "Physics", 9467688030588362, false ] ] ] , [ 0, null, false, null, 4663180963864043, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6222741702013382, false ,[ [ 4, 71 ] ] ] ], [ [ 71, cr.behaviors.Physics.prototype.acts.RemoveJoints, "Physics", 1135452902585096, false ] ] ] , [ 0, null, false, null, 9838491161537537, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 3431212585390166, false ,[ [ 4, 72 ] ] ] ], [ [ 72, cr.behaviors.Physics.prototype.acts.RemoveJoints, "Physics", 6728975416065934, false ] ] ] , [ 0, null, false, null, 8369148110956156, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6184878877244966, false ,[ [ 4, 73 ] ] ] ], [ [ 73, cr.behaviors.Physics.prototype.acts.RemoveJoints, "Physics", 2756078319000011, false ] ] ] , [ 0, null, false, null, 9534428804204317, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 3565357088353586, false ,[ [ 4, 66 ] ] ] ], [ [ 66, cr.behaviors.Physics.prototype.acts.RemoveJoints, "Physics", 2546011054521352, false ] ] ] , [ 0, null, false, null, 8834899115202979, [ [ 68, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2963519756117186, false ,[ [ 10, 0 ] , [ 8, 3 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 68, cr.plugins_.Sprite.prototype.acts.Destroy, null, 1419614854097318, false ] ] ] ] ] , [ 0, [true, "Zombie_Settings"], false, null, 9563379865327203, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9563379865327203, false ,[ [ 1, [ 2, "Zombie_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, true, null, 9240220236575149, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5747496548047817, false ,[ [ 4, 114 ] ] ] , [ 66, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 2165803421589742, false ,[ [ 4, 114 ] ] ] , [ 117, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 1539161857642413, false ,[ [ 4, 114 ] ] ] , [ 118, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5604132503258731, false ,[ [ 4, 114 ] ] ] , [ 112, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5023682315589094, false ,[ [ 4, 114 ] ] ] , [ 113, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7260508004384013, false ,[ [ 4, 114 ] ] ] , [ 115, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9280952747107413, false ,[ [ 4, 114 ] ] ] , [ 116, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 1292365179527511, false ,[ [ 4, 114 ] ] ] ], [ ] ,[ [ 0, null, false, null, 7798813393368708, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3362826866676084, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 7275496783327835, false ] , [ 134, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics", 6839617823391946, false ,[ [ 3, 0 ] ] ] , [ 153, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics", 7745930864072625, false ,[ [ 3, 0 ] ] ] , [ 166, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics", 5051668415039365, false ,[ [ 3, 0 ] ] ] , [ 137, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics", 2545365661983994, false ,[ [ 3, 0 ] ] ] , [ 138, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics", 5973841657106542, false ,[ [ 3, 0 ] ] ] , [ 139, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics", 1109423927734513, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 5304438398347833, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2431882684656639, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 7508506371491437, false ] , [ 140, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics2", 7265853512830461, false ,[ [ 3, 0 ] ] ] , [ 135, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics2", 9622736503998123, false ,[ [ 3, 0 ] ] ] , [ 167, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics2", 6687291617640709, false ,[ [ 3, 0 ] ] ] , [ 179, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics2", 7850002368130356, false ,[ [ 3, 0 ] ] ] , [ 192, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics2", 6234415495407972, false ,[ [ 3, 0 ] ] ] , [ 205, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics2", 9544244350117223, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 7639305728428502, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1747647489806179, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 1305318364036839, false ] , [ 141, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics3", 7910547560891047, false ,[ [ 3, 0 ] ] ] , [ 154, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics3", 2822869349072863, false ,[ [ 3, 0 ] ] ] , [ 136, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics3", 6291133805928756, false ,[ [ 3, 0 ] ] ] , [ 180, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics3", 9260498557575805, false ,[ [ 3, 0 ] ] ] , [ 193, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics3", 3042174261608843, false ,[ [ 3, 0 ] ] ] , [ 206, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics3", 981354596131644, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 8654812859136444, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 882114851270914, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 8394136522871288, false ] , [ 142, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics4", 9260123884940015, false ,[ [ 3, 0 ] ] ] , [ 155, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics4", 6357934456816015, false ,[ [ 3, 0 ] ] ] , [ 168, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics4", 3582788132381437, false ,[ [ 3, 0 ] ] ] , [ 181, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics4", 8983689970038328, false ,[ [ 3, 0 ] ] ] , [ 194, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics4", 4502833979257945, false ,[ [ 3, 0 ] ] ] , [ 207, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics4", 6805003325114494, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 8191560005268918, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 704212229107785, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 9476857282316392, false ] , [ 143, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics5", 6491231512240782, false ,[ [ 3, 0 ] ] ] , [ 156, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics5", 6105193925472186, false ,[ [ 3, 0 ] ] ] , [ 169, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics5", 1752001533806894, false ,[ [ 3, 0 ] ] ] , [ 182, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics5", 4166855696565578, false ,[ [ 3, 0 ] ] ] , [ 195, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics5", 784013678850436, false ,[ [ 3, 0 ] ] ] , [ 208, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics5", 9568673457330033, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 2696120773723787, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6422255232491257, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 9498181736725143, false ] , [ 144, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics6", 6960544326270464, false ,[ [ 3, 0 ] ] ] , [ 157, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics6", 7307640310985606, false ,[ [ 3, 0 ] ] ] , [ 170, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics6", 5748149070976444, false ,[ [ 3, 0 ] ] ] , [ 183, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics6", 4884056562485291, false ,[ [ 3, 0 ] ] ] , [ 196, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics6", 5458967274125444, false ,[ [ 3, 0 ] ] ] , [ 209, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics6", 9394525320295728, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 6289331917632183, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9375226318238529, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 519956874756309, false ] , [ 145, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics7", 7705104012572663, false ,[ [ 3, 0 ] ] ] , [ 158, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics7", 3924064409031208, false ,[ [ 3, 0 ] ] ] , [ 171, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics7", 7221129057633045, false ,[ [ 3, 0 ] ] ] , [ 184, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics7", 7259833029250429, false ,[ [ 3, 0 ] ] ] , [ 197, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics7", 8534947482279982, false ,[ [ 3, 0 ] ] ] , [ 210, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics7", 9875220653598373, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 1722564508504808, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1050800681311187, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 993784519277281, false ] , [ 146, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics8", 7604988072433606, false ,[ [ 3, 0 ] ] ] , [ 159, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics8", 4549850555790543, false ,[ [ 3, 0 ] ] ] , [ 172, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics8", 41834624534604, false ,[ [ 3, 0 ] ] ] , [ 185, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics8", 1400391142923754, false ,[ [ 3, 0 ] ] ] , [ 198, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics8", 1366466632232947, false ,[ [ 3, 0 ] ] ] , [ 211, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics8", 3256138453597137, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 3812494963361992, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9592764530005372, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 1104345837984347, false ] , [ 147, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics9", 4790406121076273, false ,[ [ 3, 0 ] ] ] , [ 160, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics9", 1738987712153723, false ,[ [ 3, 0 ] ] ] , [ 173, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics9", 6363590416677361, false ,[ [ 3, 0 ] ] ] , [ 186, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics9", 8500021124958797, false ,[ [ 3, 0 ] ] ] , [ 199, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics9", 6533706472212373, false ,[ [ 3, 0 ] ] ] , [ 212, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics9", 1220221271272078, false ,[ [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 1898967258808798, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1842206113866569, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 114, cr.plugins_.Sprite.prototype.acts.Destroy, null, 3300253998755144, false ] , [ 148, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics10", 7068691370626633, false ,[ [ 3, 0 ] ] ] , [ 161, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics10", 9123903409681022, false ,[ [ 3, 0 ] ] ] , [ 174, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics10", 9409919674148886, false ,[ [ 3, 0 ] ] ] , [ 187, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics10", 5949209588658957, false ,[ [ 3, 0 ] ] ] , [ 200, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics10", 7208648859293784, false ,[ [ 3, 0 ] ] ] , [ 213, cr.behaviors.Physics.prototype.acts.SetImmovable, "Physics10", 2606174733241315, false ,[ [ 3, 0 ] ] ] ] ] ] ] , [ 0, null, true, null, 7078451942438283, [ [ 62, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, null, 1, false, false, false, 5460089967153114, false ] , [ 63, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, null, 1, false, false, false, 2417144912162563, false ] , [ 64, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, null, 1, false, false, false, 8070770403456331, false ] , [ 65, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, null, 1, false, false, false, 4327291833719142, false ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 2735646313722306, false ,[ [ 11, "Kills" ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, null, false, null, 4577118364037532, [ [ 114, cr.plugins_.Sprite.prototype.cnds.OnDestroyed, null, 1, false, false, false, 3009458849576437, false ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8046566255167538, false ,[ [ 11, "Kills" ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SubVar, null, 7509760916851767, false ,[ [ 11, "LevelKills" ] , [ 7, [ 0, 1 ] ] ] ] ] ,[ [ 0, null, false, null, 5127130646881738, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4745473395199282, false ,[ [ 10, 1 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 7109262949529127, false ,[ [ 11, "Score" ] , [ 7, [ 0, 100 ] ] ] ] , [ 114, cr.plugins_.Sprite.prototype.acts.Spawn, null, 426658165450661, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5698386797062528, false ,[ [ 7, [ 2, "+100" ] ] ] ] ] ] , [ 0, null, false, null, 8759498604897057, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3768713456098644, false ,[ [ 10, 1 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 420400737096279, false ,[ [ 11, "Score" ] , [ 7, [ 0, 150 ] ] ] ] , [ 114, cr.plugins_.Sprite.prototype.acts.Spawn, null, 361919813375866, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 9467819362266183, false ,[ [ 7, [ 2, "+150" ] ] ] ] ] ] , [ 0, null, false, null, 4416753246373342, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8810156270443556, false ,[ [ 10, 1 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6323062392181546, false ,[ [ 11, "Score" ] , [ 7, [ 0, 200 ] ] ] ] , [ 114, cr.plugins_.Sprite.prototype.acts.Spawn, null, 6950521744250238, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4466102764679546, false ,[ [ 7, [ 2, "+200" ] ] ] ] ] ] , [ 0, null, false, null, 4284303672582058, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7414360060189233, false ,[ [ 10, 1 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6857389615642421, false ,[ [ 11, "Score" ] , [ 7, [ 0, 250 ] ] ] ] , [ 114, cr.plugins_.Sprite.prototype.acts.Spawn, null, 1813677614709904, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1203402300619938, false ,[ [ 7, [ 2, "+250" ] ] ] ] ] ] , [ 0, null, false, null, 8514332746078283, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7155727474959608, false ,[ [ 10, 1 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 1246603659273634, false ,[ [ 11, "Score" ] , [ 7, [ 0, 300 ] ] ] ] , [ 114, cr.plugins_.Sprite.prototype.acts.Spawn, null, 73609061093797, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 8066913485312006, false ,[ [ 7, [ 2, "+300" ] ] ] ] ] ] , [ 0, null, false, null, 5873799738165437, [ [ 114, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7574968689636218, false ,[ [ 10, 1 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8158599188491012, false ,[ [ 11, "Score" ] , [ 7, [ 0, 350 ] ] ] ] , [ 114, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8955005943525548, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 8426857993187374, false ,[ [ 7, [ 2, "+350" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 2822092157313113, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 950646918715305, false ,[ [ 4, 74 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 3001117913730059, false ,[ [ 11, "Score" ] , [ 7, [ 0, 50 ] ] ] ] , [ 74, cr.plugins_.Sprite.prototype.acts.Spawn, null, 1668513451753845, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4393486419124512, false ,[ [ 7, [ 2, "+50" ] ] ] ] ] ] , [ 0, null, false, null, 9749290407881789, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 1984746355674003, false ,[ [ 4, 75 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6522321693624445, false ,[ [ 11, "Score" ] , [ 7, [ 0, 40 ] ] ] ] , [ 75, cr.plugins_.Sprite.prototype.acts.Spawn, null, 9578935068650698, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4107901283160134, false ,[ [ 7, [ 2, "+40" ] ] ] ] ] ] , [ 0, null, false, null, 1090810405002769, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 3433940065659318, false ,[ [ 4, 76 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 4505125346218276, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 76, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7346476794621417, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 3977734696677008, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 6081333443976853, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5598880850913882, false ,[ [ 4, 77 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 4536039498208998, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 77, cr.plugins_.Sprite.prototype.acts.Spawn, null, 81399871276238, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4212379974037237, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 8628223871557633, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8831165679097478, false ,[ [ 4, 78 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 5090794712471591, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 78, cr.plugins_.Sprite.prototype.acts.Spawn, null, 241655140262851, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 7294809469459798, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 5456023295219112, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6619099455376952, false ,[ [ 4, 79 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 515454149086773, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 79, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8850313329809608, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 6461862015366346, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 2955813087453896, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8064648170638899, false ,[ [ 4, 80 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 1906117136848363, false ,[ [ 11, "Score" ] , [ 7, [ 0, 50 ] ] ] ] , [ 80, cr.plugins_.Sprite.prototype.acts.Spawn, null, 4826305581865201, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 264613630788677, false ,[ [ 7, [ 2, "+50" ] ] ] ] ] ] , [ 0, null, false, null, 2390010356695576, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8223077399809672, false ,[ [ 4, 81 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 1791301624720345, false ,[ [ 11, "Score" ] , [ 7, [ 0, 40 ] ] ] ] , [ 81, cr.plugins_.Sprite.prototype.acts.Spawn, null, 75227131273317, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5981037073139341, false ,[ [ 7, [ 2, "+40" ] ] ] ] ] ] , [ 0, null, false, null, 9786520006564905, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8549022231682195, false ,[ [ 4, 82 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8247473526577716, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 82, cr.plugins_.Sprite.prototype.acts.Spawn, null, 4614894881040914, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 2499724999584729, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 8661968672406813, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9931414498981182, false ,[ [ 4, 83 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 3493113862166029, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 83, cr.plugins_.Sprite.prototype.acts.Spawn, null, 9930760970877509, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4967144528136692, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 4964424053259683, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 84287896730194, false ,[ [ 4, 84 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 5782535953566687, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 84, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7279302126320812, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 3090881719965284, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 6171480204653846, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6683678913336015, false ,[ [ 4, 85 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8319115702222346, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 85, cr.plugins_.Sprite.prototype.acts.Spawn, null, 734124480941367, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4844220668617804, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 4207260840566246, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 2115915706421504, false ,[ [ 4, 86 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 9124654486103705, false ,[ [ 11, "Score" ] , [ 7, [ 0, 50 ] ] ] ] , [ 86, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8923143689899161, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5382817492815781, false ,[ [ 7, [ 2, "+50" ] ] ] ] ] ] , [ 0, null, false, null, 5446019412951304, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8788398288341072, false ,[ [ 4, 87 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 4888485317151513, false ,[ [ 11, "Score" ] , [ 7, [ 0, 40 ] ] ] ] , [ 87, cr.plugins_.Sprite.prototype.acts.Spawn, null, 2203006596104174, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1000442900793432, false ,[ [ 7, [ 2, "+40" ] ] ] ] ] ] , [ 0, null, false, null, 6739035805446217, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7181964598242486, false ,[ [ 4, 88 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 7111537622349172, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 88, cr.plugins_.Sprite.prototype.acts.Spawn, null, 5324617834315347, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5305762383084255, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 6179213679274022, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5439343710291757, false ,[ [ 4, 89 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6396512168305874, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 89, cr.plugins_.Sprite.prototype.acts.Spawn, null, 1050318278958683, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4696180885994579, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 9905238721461623, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8452510324333495, false ,[ [ 4, 90 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8057731715406136, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 90, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8441722717085285, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 8667633994111702, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 2541267924648511, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6410860420034674, false ,[ [ 4, 91 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 808860995284168, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 91, cr.plugins_.Sprite.prototype.acts.Spawn, null, 6320002634215062, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4188669118500246, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 2773010530846533, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5052961072877864, false ,[ [ 4, 92 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 4366103644616614, false ,[ [ 11, "Score" ] , [ 7, [ 0, 50 ] ] ] ] , [ 92, cr.plugins_.Sprite.prototype.acts.Spawn, null, 6380746016866911, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5834256814473204, false ,[ [ 7, [ 2, "+50" ] ] ] ] ] ] , [ 0, null, false, null, 9330622864143836, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9907281248146929, false ,[ [ 4, 93 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8675531236734485, false ,[ [ 11, "Score" ] , [ 7, [ 0, 40 ] ] ] ] , [ 93, cr.plugins_.Sprite.prototype.acts.Spawn, null, 5174721348362211, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 9719270482538768, false ,[ [ 7, [ 2, "+40" ] ] ] ] ] ] , [ 0, null, false, null, 2530407927766215, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7579941117712668, false ,[ [ 4, 94 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8248473660641051, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 94, cr.plugins_.Sprite.prototype.acts.Spawn, null, 4303072426975315, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 3327871116297924, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 7793217464246513, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7578361668067917, false ,[ [ 4, 95 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8962084713094309, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 95, cr.plugins_.Sprite.prototype.acts.Spawn, null, 2982281879035166, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5063098051733753, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 7419057263501419, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7644942286403048, false ,[ [ 4, 96 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 2836280411874703, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 96, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8884742334784088, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 128991806160241, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 3380431954562336, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 2200661383427095, false ,[ [ 4, 97 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 9392970781192757, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 97, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7254843434653576, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 8302776926359592, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 8816669587290545, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9645657293659504, false ,[ [ 4, 98 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 5871986576572776, false ,[ [ 11, "Score" ] , [ 7, [ 0, 50 ] ] ] ] , [ 98, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8789589289383725, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 3921685428611419, false ,[ [ 7, [ 2, "+50" ] ] ] ] ] ] , [ 0, null, false, null, 646040190920298, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 4702660838707254, false ,[ [ 4, 99 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 7007640747255182, false ,[ [ 11, "Score" ] , [ 7, [ 0, 40 ] ] ] ] , [ 99, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8647197769653922, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 6910909066027705, false ,[ [ 7, [ 2, "+40" ] ] ] ] ] ] , [ 0, null, false, null, 8924885937367572, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 2808764812106164, false ,[ [ 4, 100 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6286603675294333, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 100, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7134043391093816, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1003273496677378, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 4879520530088766, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8710622522944051, false ,[ [ 4, 101 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 700600824800853, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 101, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7369652265891089, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 7041410144247523, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 4876046716995603, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 938259450107255, false ,[ [ 4, 102 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 7773554389327895, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 102, cr.plugins_.Sprite.prototype.acts.Spawn, null, 5158308408947687, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1301465358366747, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 5551866495851562, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 2757812628342384, false ,[ [ 4, 103 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 4316866879856061, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 103, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7897431398171442, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1101191345068477, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 5629052549792294, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7529720042599793, false ,[ [ 4, 104 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 1163985313203432, false ,[ [ 11, "Score" ] , [ 7, [ 0, 10 ] ] ] ] , [ 104, cr.plugins_.Sprite.prototype.acts.Spawn, null, 7929520788867178, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5375584858757764, false ,[ [ 7, [ 2, "+10" ] ] ] ] ] ] , [ 0, null, false, null, 6203282785235392, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5938406610059016, false ,[ [ 4, 105 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 9245762693796413, false ,[ [ 11, "Score" ] , [ 7, [ 0, 50 ] ] ] ] , [ 105, cr.plugins_.Sprite.prototype.acts.Spawn, null, 4544648673698607, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 9422411476474532, false ,[ [ 7, [ 2, "+50" ] ] ] ] ] ] , [ 0, null, false, null, 2837867190217511, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 2527729781965784, false ,[ [ 4, 106 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6993627523186083, false ,[ [ 11, "Score" ] , [ 7, [ 0, 40 ] ] ] ] , [ 106, cr.plugins_.Sprite.prototype.acts.Spawn, null, 1970731185494603, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 1468317486926277, false ,[ [ 7, [ 2, "+40" ] ] ] ] ] ] , [ 0, null, false, null, 9768272594528368, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9304496242022814, false ,[ [ 4, 107 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 5020117495203185, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 107, cr.plugins_.Sprite.prototype.acts.Spawn, null, 9564233550928607, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 4734571187105572, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 6223585755150936, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7191017940083278, false ,[ [ 4, 108 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 4851629632386828, false ,[ [ 11, "Score" ] , [ 7, [ 0, 30 ] ] ] ] , [ 108, cr.plugins_.Sprite.prototype.acts.Spawn, null, 1403053863433821, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 9883410048235646, false ,[ [ 7, [ 2, "+30" ] ] ] ] ] ] , [ 0, null, false, null, 3158266684779773, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 3481143578946273, false ,[ [ 4, 109 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 6736898037110654, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 109, cr.plugins_.Sprite.prototype.acts.Spawn, null, 8954779402080816, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 8695443393680527, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 8500412287524755, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7911112029623786, false ,[ [ 4, 110 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 988970474443092, false ,[ [ 11, "Score" ] , [ 7, [ 0, 20 ] ] ] ] , [ 110, cr.plugins_.Sprite.prototype.acts.Spawn, null, 9409899794860372, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 638459793117447, false ,[ [ 7, [ 2, "+20" ] ] ] ] ] ] , [ 0, null, false, null, 2920207727808972, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 7492204354944361, false ,[ [ 4, 111 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 8242499769480596, false ,[ [ 11, "Score" ] , [ 7, [ 0, 10 ] ] ] ] , [ 111, cr.plugins_.Sprite.prototype.acts.Spawn, null, 3661194470014596, false ,[ [ 4, 25 ] , [ 5, [ 0, 3 ] ] , [ 7, [ 0, 0 ] ] ] ] , [ 25, cr.plugins_.Spritefont2.prototype.acts.SetText, null, 5540413721997331, false ,[ [ 7, [ 2, "+10" ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_1_Settings"], false, null, 4622261994999048, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 4622261994999048, false ,[ [ 1, [ 2, "Chain_1_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3734148173381024, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 6220095631437297, false ] ], [ [ 70, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 2362143653561833, false ,[ [ 0, [ 20, 62, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 62, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ,[ [ 0, null, false, null, 5813744271446286, [ [ -1, cr.system_object.prototype.cnds.For, null, 0, true, false, false, 153487997148733, false ,[ [ 1, [ 2, "Chain_1" ] ] , [ 0, [ 0, 1 ] ] , [ 0, [ 7, [ 19, cr.system_object.prototype.exps.distance ,[ [ 20, 70, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 70, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 20, 62, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 62, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ,[ 0, 14 ] ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.CreateObject, null, 7234548056505694, false ,[ [ 4, 70 ] , [ 5, [ 0, 1 ] ] , [ 0, [ 4, [ 20, 70, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.cos ,[ [ 20, 70, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] , [ 0, [ 4, [ 20, 70, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.sin ,[ [ 20, 70, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] ] ] , [ 70, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 1869779923577235, false ,[ [ 0, [ 20, 62, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 62, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1165830262800354, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8673234733580629, false ,[ [ 11, "Seconds" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3642423579317887, false ,[ [ 1, [ 2, "Chain_1_Restart_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6006658174114923, false ,[ [ 1, [ 2, "Chain_1_Start_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, [true, "Chain_1_Restart_Settings"], false, null, 3885985321004786, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3885985321004786, false ,[ [ 1, [ 2, "Chain_1_Restart_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1790756564483546, [ [ -1, cr.system_object.prototype.cnds.ForEach, null, 0, true, false, false, 7483817661921733, false ,[ [ 4, 70 ] ] ] ], [ ] ,[ [ 0, null, false, null, 673610014247806, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2622141002238823, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 70, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 7312421021643177, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 58 ] ] ] ] ] , [ 0, null, false, null, 7620492334515303, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3785739677470879, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 129, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 9304548179786634, false ,[ [ 0, [ 23, "Chain_1_Prev" ] ] ] ] ], [ [ 70, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 1939991942716636, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 129 ] ] ] ] ] , [ 0, null, false, null, 3654684516885121, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8054662515496624, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 70, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 62, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 2933953521594658, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 70 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3045902620153493, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7878163312594963, false ,[ [ 11, "Chain_1_Prev" ] , [ 7, [ 20, 70, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 4950801915976016, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3627682720051526, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7671486120534502, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 95589055788385, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3605751040771474, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1690930129795884, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1543784904514134, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1147963195405244, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2693202887557349, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7442987799306854, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2299534022368619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1338536399937803, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3375777451540276, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9830620392733645, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9440358888070201, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3502488452541845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3648406363050619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8191035686871234, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 421230468377801, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 70, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9019663075118699, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_1_Start_Settings"], false, null, 903376981570241, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 903376981570241, false ,[ [ 1, [ 2, "Chain_1_Start_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1790756564483546, [ [ -1, cr.system_object.prototype.cnds.Every, null, 0, false, false, false, 4934686404885862, false ,[ [ 0, [ 1, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 673610014247806, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2622141002238823, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 70, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 7312421021643177, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 58 ] ] ] ] ] , [ 0, null, false, null, 7620492334515303, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3785739677470879, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 129, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 9304548179786634, false ,[ [ 0, [ 23, "Chain_1_Prev" ] ] ] ] ], [ [ 70, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 1939991942716636, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 129 ] ] ] ] ] , [ 0, null, false, null, 3654684516885121, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8054662515496624, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 70, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 62, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 2933953521594658, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 70 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3045902620153493, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7878163312594963, false ,[ [ 11, "Chain_1_Prev" ] , [ 7, [ 20, 70, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 4950801915976016, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3627682720051526, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7671486120534502, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 95589055788385, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3605751040771474, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1690930129795884, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1543784904514134, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1147963195405244, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2693202887557349, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7442987799306854, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2299534022368619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1338536399937803, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3375777451540276, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9830620392733645, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9440358888070201, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3502488452541845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3648406363050619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8191035686871234, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 421230468377801, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 70, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9019663075118699, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_2_Settings"], false, null, 6490538765401644, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 6490538765401644, false ,[ [ 1, [ 2, "Chain_2_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3734148173381024, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 6220095631437297, false ] ], [ [ 71, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 2362143653561833, false ,[ [ 0, [ 20, 63, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 63, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ,[ [ 0, null, false, null, 5813744271446286, [ [ -1, cr.system_object.prototype.cnds.For, null, 0, true, false, false, 153487997148733, false ,[ [ 1, [ 2, "Chain_2" ] ] , [ 0, [ 0, 1 ] ] , [ 0, [ 7, [ 19, cr.system_object.prototype.exps.distance ,[ [ 20, 71, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 71, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 20, 63, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 63, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ,[ 0, 14 ] ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.CreateObject, null, 7234548056505694, false ,[ [ 4, 71 ] , [ 5, [ 0, 1 ] ] , [ 0, [ 4, [ 20, 71, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.cos ,[ [ 20, 71, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] , [ 0, [ 4, [ 20, 71, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.sin ,[ [ 20, 71, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] ] ] , [ 71, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 917126385951817, false ,[ [ 0, [ 20, 63, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 63, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1165830262800354, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8673234733580629, false ,[ [ 11, "Seconds" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3642423579317887, false ,[ [ 1, [ 2, "Chain_2_Restart_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6006658174114923, false ,[ [ 1, [ 2, "Chain_2_Start_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, [true, "Chain_2_Restart_Settings"], false, null, 3885985321004786, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3885985321004786, false ,[ [ 1, [ 2, "Chain_2_Restart_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1790756564483546, [ [ -1, cr.system_object.prototype.cnds.ForEach, null, 0, true, false, false, 7483817661921733, false ,[ [ 4, 71 ] ] ] ], [ ] ,[ [ 0, null, false, null, 673610014247806, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2622141002238823, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 71, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 7312421021643177, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 59 ] ] ] ] ] , [ 0, null, false, null, 7620492334515303, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3785739677470879, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 130, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 9304548179786634, false ,[ [ 0, [ 23, "Chain_2_Prev" ] ] ] ] ], [ [ 71, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 1939991942716636, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 130 ] ] ] ] ] , [ 0, null, false, null, 3654684516885121, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8054662515496624, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 71, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 63, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 2933953521594658, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 71 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3045902620153493, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7878163312594963, false ,[ [ 11, "Chain_2_Prev" ] , [ 7, [ 20, 71, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 4950801915976016, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3627682720051526, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7671486120534502, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 95589055788385, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3605751040771474, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1690930129795884, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1543784904514134, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1147963195405244, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2693202887557349, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7442987799306854, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2299534022368619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1338536399937803, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3375777451540276, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9830620392733645, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9440358888070201, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3502488452541845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3648406363050619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8191035686871234, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 421230468377801, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 71, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9019663075118699, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_2_Start_Settings"], false, null, 903376981570241, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 903376981570241, false ,[ [ 1, [ 2, "Chain_2_Start_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7955299213612111, [ [ -1, cr.system_object.prototype.cnds.Every, null, 0, false, false, false, 828698786187659, false ,[ [ 0, [ 1, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5750624525802864, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9481324168805751, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 71, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 4104150392083664, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 59 ] ] ] ] ] , [ 0, null, false, null, 7869658693158888, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5816259514836289, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 130, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 4067766291717117, false ,[ [ 0, [ 23, "Chain_2_Prev" ] ] ] ] ], [ [ 71, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 7178430602787956, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 130 ] ] ] ] ] , [ 0, null, false, null, 3657030676755856, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3933895958524062, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 71, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 63, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 7733893963480448, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 71 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 9754228001760233, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 4603953498354329, false ,[ [ 11, "Chain_2_Prev" ] , [ 7, [ 20, 71, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 1832410190090422, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9550316161687445, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1788468455228547, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5580981154520845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5019227008981743, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 4582700908315143, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 926629964596751, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8227163653739097, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8489171953158804, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5404898547921978, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1228807951367237, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7217009434096458, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3041373177400766, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5724137655123708, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5767042581220845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3852278720689318, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2411265737501157, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7826904362377821, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 6735904887330234, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 71, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3849924488553482, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_3_Settings"], false, null, 8354065289262919, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 8354065289262919, false ,[ [ 1, [ 2, "Chain_3_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3734148173381024, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 6220095631437297, false ] ], [ [ 72, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 2362143653561833, false ,[ [ 0, [ 20, 64, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 64, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ,[ [ 0, null, false, null, 5813744271446286, [ [ -1, cr.system_object.prototype.cnds.For, null, 0, true, false, false, 153487997148733, false ,[ [ 1, [ 2, "Chain_3" ] ] , [ 0, [ 0, 1 ] ] , [ 0, [ 7, [ 19, cr.system_object.prototype.exps.distance ,[ [ 20, 72, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 72, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 20, 64, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 64, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ,[ 0, 14 ] ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.CreateObject, null, 7234548056505694, false ,[ [ 4, 72 ] , [ 5, [ 0, 1 ] ] , [ 0, [ 4, [ 20, 72, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.cos ,[ [ 20, 72, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] , [ 0, [ 4, [ 20, 72, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.sin ,[ [ 20, 72, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] ] ] , [ 72, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 3527278302740752, false ,[ [ 0, [ 20, 64, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 64, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1165830262800354, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8673234733580629, false ,[ [ 11, "Seconds" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3642423579317887, false ,[ [ 1, [ 2, "Chain_3_Restart_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6006658174114923, false ,[ [ 1, [ 2, "Chain_3_Start_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, [true, "Chain_3_Restart_Settings"], false, null, 3885985321004786, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3885985321004786, false ,[ [ 1, [ 2, "Chain_3_Restart_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1790756564483546, [ [ -1, cr.system_object.prototype.cnds.ForEach, null, 0, true, false, false, 7483817661921733, false ,[ [ 4, 72 ] ] ] ], [ ] ,[ [ 0, null, false, null, 673610014247806, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2622141002238823, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 72, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 7312421021643177, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 60 ] ] ] ] ] , [ 0, null, false, null, 7620492334515303, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3785739677470879, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 131, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 9304548179786634, false ,[ [ 0, [ 23, "Chain_3_Prev" ] ] ] ] ], [ [ 72, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 1939991942716636, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 131 ] ] ] ] ] , [ 0, null, false, null, 3654684516885121, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8054662515496624, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 72, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 64, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 2933953521594658, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 72 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3045902620153493, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7878163312594963, false ,[ [ 11, "Chain_3_Prev" ] , [ 7, [ 20, 72, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 4950801915976016, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3627682720051526, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7671486120534502, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 95589055788385, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3605751040771474, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1690930129795884, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1543784904514134, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1147963195405244, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2693202887557349, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7442987799306854, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2299534022368619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1338536399937803, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3375777451540276, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9830620392733645, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9440358888070201, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3502488452541845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3648406363050619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8191035686871234, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 421230468377801, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 72, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9019663075118699, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_3_Start_Settings"], false, null, 903376981570241, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 903376981570241, false ,[ [ 1, [ 2, "Chain_3_Start_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8108543591947002, [ [ -1, cr.system_object.prototype.cnds.Every, null, 0, false, false, false, 1183837980897861, false ,[ [ 0, [ 1, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3672421478188047, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5678927915292564, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 72, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 4300568276551972, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 60 ] ] ] ] ] , [ 0, null, false, null, 9859783612575296, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8834562940170399, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 131, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 6665068508625092, false ,[ [ 0, [ 23, "Chain_3_Prev" ] ] ] ] ], [ [ 72, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 9843510922885151, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 131 ] ] ] ] ] , [ 0, null, false, null, 1778105704430119, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8566252541112983, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 72, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 64, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 8466691967081978, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 72 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3528716403569101, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7434703492935673, false ,[ [ 11, "Chain_3_Prev" ] , [ 7, [ 20, 72, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 41015426415627, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9983283748239042, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 4117696606500875, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7685629337347015, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2564756301732467, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7809082296905372, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7203663835126811, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 6801321385151704, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 4481690889386991, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 747070021351753, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 6135100648381056, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5339666458532194, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3955407719324259, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2031714601052967, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1159539089658374, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5544146724175037, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 6319460898647613, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2998547003621988, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5084594658958077, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 72, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3380068318963085, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_4_Settings"], false, null, 669508352574168, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 669508352574168, false ,[ [ 1, [ 2, "Chain_4_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3734148173381024, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 6220095631437297, false ] ], [ [ 73, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 2362143653561833, false ,[ [ 0, [ 20, 65, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 65, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ,[ [ 0, null, false, null, 5813744271446286, [ [ -1, cr.system_object.prototype.cnds.For, null, 0, true, false, false, 153487997148733, false ,[ [ 1, [ 2, "Chain_4" ] ] , [ 0, [ 0, 1 ] ] , [ 0, [ 7, [ 19, cr.system_object.prototype.exps.distance ,[ [ 20, 73, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 73, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 20, 65, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 20, 65, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ,[ 0, 14 ] ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.CreateObject, null, 7234548056505694, false ,[ [ 4, 73 ] , [ 5, [ 0, 1 ] ] , [ 0, [ 4, [ 20, 73, cr.plugins_.Sprite.prototype.exps.X, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.cos ,[ [ 20, 73, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] , [ 0, [ 4, [ 20, 73, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ,[ 6, [ 6, [ 0, 14 ] ,[ 19, cr.system_object.prototype.exps.loopindex ] ] ,[ 19, cr.system_object.prototype.exps.sin ,[ [ 20, 73, cr.plugins_.Sprite.prototype.exps.Angle, false, null ] ] ] ] ] ] ] ] , [ 73, cr.plugins_.Sprite.prototype.acts.SetTowardPosition, null, 7092973588160427, false ,[ [ 0, [ 20, 65, cr.plugins_.Sprite.prototype.exps.X, false, null ] ] , [ 0, [ 20, 65, cr.plugins_.Sprite.prototype.exps.Y, false, null ] ] ] ] ] ] ] ] , [ 0, null, false, null, 1165830262800354, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8673234733580629, false ,[ [ 11, "Seconds" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3642423579317887, false ,[ [ 1, [ 2, "Chain_4_Restart_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6006658174114923, false ,[ [ 1, [ 2, "Chain_4_Start_Settings" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, [true, "Chain_4_Restart_Settings"], false, null, 3885985321004786, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3885985321004786, false ,[ [ 1, [ 2, "Chain_4_Restart_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1790756564483546, [ [ -1, cr.system_object.prototype.cnds.ForEach, null, 0, true, false, false, 7483817661921733, false ,[ [ 4, 73 ] ] ] ], [ ] ,[ [ 0, null, false, null, 673610014247806, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2622141002238823, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 73, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 7312421021643177, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 61 ] ] ] ] ] , [ 0, null, false, null, 7620492334515303, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3785739677470879, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 132, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 9304548179786634, false ,[ [ 0, [ 23, "Chain_4_Prev" ] ] ] ] ], [ [ 73, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 1939991942716636, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 132 ] ] ] ] ] , [ 0, null, false, null, 3654684516885121, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8054662515496624, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 73, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 65, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 2933953521594658, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 73 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 3045902620153493, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 7878163312594963, false ,[ [ 11, "Chain_4_Prev" ] , [ 7, [ 20, 73, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 4950801915976016, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3627682720051526, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7671486120534502, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 95589055788385, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3605751040771474, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1690930129795884, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1543784904514134, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1147963195405244, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2693202887557349, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7442987799306854, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2299534022368619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1338536399937803, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3375777451540276, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9830620392733645, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9440358888070201, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3502488452541845, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3648406363050619, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8191035686871234, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 421230468377801, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 73, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 9019663075118699, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] , [ 0, [false, "Chain_4_Start_Settings"], false, null, 903376981570241, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 903376981570241, false ,[ [ 1, [ 2, "Chain_4_Start_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5505261781794043, [ [ -1, cr.system_object.prototype.cnds.Every, null, 0, false, false, false, 8448786879499902, false ,[ [ 0, [ 1, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5368972279772058, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9289584602607753, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 73, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 3314895778769353, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 61 ] ] ] ] ] , [ 0, null, false, null, 244801167702423, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2746403233138829, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 4 ] , [ 7, [ 0, 0 ] ] ] ] , [ 132, cr.plugins_.Sprite.prototype.cnds.PickByUID, null, 0, false, false, true, 7076971464468322, false ,[ [ 0, [ 23, "Chain_4_Prev" ] ] ] ] ], [ [ 73, cr.behaviors.Physics.prototype.acts.CreateRevoluteJoint, "Physics", 8975939575518921, false ,[ [ 7, [ 2, "Left" ] ] , [ 4, 132 ] ] ] ] ] , [ 0, null, false, null, 7216857034501783, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 1299169472447043, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 5, [ 20, 73, cr.plugins_.Sprite.prototype.exps.Count, false, null ] ,[ 0, 1 ] ] ] ] ] ], [ [ 65, cr.behaviors.Physics.prototype.acts.CreateLimitedRevoluteJoint, "Physics", 8161416854915607, false ,[ [ 7, [ 0, 0 ] ] , [ 4, 73 ] , [ 0, [ 0, 0 ] ] , [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 6132214174630819, [ ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 8007041638666014, false ,[ [ 11, "Chain_4_Prev" ] , [ 7, [ 20, 73, cr.plugins_.Sprite.prototype.exps.UID, false, null ] ] ] ] ] ] , [ 0, null, true, null, 3653023646806823, [ [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2026599339076583, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8917228489926084, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3420813109852541, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 6240236553857673, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7689280139195428, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 454065699375408, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8763435594573547, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 7800572056112485, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3880194031214953, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3856132747291345, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3566855855569087, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 9411695110846824, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 3713087567578474, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 8388798338358319, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 2543420681771309, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5805622755460092, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 31 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 5089968402975002, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 33 ] ] ] ] , [ -1, cr.system_object.prototype.cnds.Compare, null, 0, false, false, false, 6807038506481929, false ,[ [ 7, [ 19, cr.system_object.prototype.exps.loopindex ] ] , [ 8, 0 ] , [ 7, [ 0, 35 ] ] ] ] ], [ [ 73, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 8214711696818526, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] ] ] ] ] ] ] , [ "LoadingSettings", [ [ 2, "IncludeSettings", false ] , [ 0, null, false, null, 1922465596694407, [ [ -1, cr.system_object.prototype.cnds.OnLoadFinished, null, 1, false, false, false, 3624528299905031, false ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 4873110616274592, false ,[ [ 2, ["button",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 5374369955854896, false ,[ [ 2, ["levelcomplete",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 1531957476986914, false ,[ [ 2, ["levelrestart",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 5892458531060731, false ,[ [ 2, ["metalhit",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 6979237090175155, false ,[ [ 2, ["nobullet",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 1949492127934719, false ,[ [ 2, ["ricochet",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 5318772617123596, false ,[ [ 2, ["shot",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 9091951013842129, false ,[ [ 2, ["stars",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 2221501993121383, false ,[ [ 2, ["woodhit",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 3148296614550422, false ,[ [ 2, ["zombiehit",false] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Preload, null, 9539948661675375, false ,[ [ 2, ["gamemusic",true] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 7704380717743479, false ,[ [ 2, ["gamemusic",true] ] , [ 3, 1 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Music" ] ] ] ] ] ,[ [ 0, null, false, null, 2006577281257728, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9022808521575061, false ,[ [ 1, [ 2, "Shadow_Out_Settings" ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 419419589128693, false ,[ [ 1, [ 2, "Shadow_Out" ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 1526924342951115, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 8884341497642147, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 4126307145127889, false ,[ [ 6, "StartMenu" ] ] ] ] ] , [ 0, null, false, null, 5444244664682596, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 3188531125575251, false ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 9989963603131133, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 9971060677989608, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8273779412681722, false ,[ [ 6, "StartMenu" ] ] ] ] ] ] ] ] ] , [ "AddSettings", [ [ 1, "Pause", 0, 0, false,false,2919454314187255,false ] , [ 1, "Music", 0, 1, false,false,3078672169202225,false ] , [ 1, "Sound", 0, 1, false,false,2453679286033784,false ] , [ 1, "Fullscreen", 0, 0, false,false,4696602114087996,false ] , [ 1, "Levels_Rotate", 0, 0, false,false,3650567923293019,false ] , [ 2, "IncludeSettings", false ] , [ 0, [true, "Sound_Settings"], false, null, 9612023960626339, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9612023960626339, false ,[ [ 1, [ 2, "Sound_Settings" ] ] ] ] ], [ ] ,[ [ 0, [true, "Sound_Shoot_Settings"], false, null, 4379435171896137, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 4379435171896137, false ,[ [ 1, [ 2, "Sound_Shoot_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2803726115377793, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 9249566297844509, false ,[ [ 4, 18 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 5182218260402102, false ,[ [ 2, ["shot",false] ] , [ 3, 0 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] ] ] , [ 0, [false, "Sound_Magazine_Settings"], false, null, 5554008024947746, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 5554008024947746, false ,[ [ 1, [ 2, "Sound_Magazine_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2803726115377793, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 9249566297844509, false ,[ [ 4, 18 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 5182218260402102, false ,[ [ 2, ["nobullet",false] ] , [ 3, 0 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9297900190297552, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 8248262266400197, false ,[ [ 4, 127 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 6847734712022287, false ,[ [ 2, ["button",false] ] , [ 3, 0 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 3872771057999884, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 3184806705262079, false ,[ [ 4, 218 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 205836540394511, false ,[ [ 2, ["zombiehit",false] ] , [ 3, 0 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 7831641841011515, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 9049286617972111, false ,[ [ 4, 128 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 2604268902286518, false ,[ [ 2, ["metalhit",false] ] , [ 3, 0 ] , [ 0, [ 0, -24 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 3926076042204919, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 4809531081843224, false ,[ [ 4, 219 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 3425199871382716, false ,[ [ 2, ["woodhit",false] ] , [ 3, 0 ] , [ 0, [ 0, -24 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 6070424206729684, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8767332431929202, false ,[ [ 4, 220 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 4056059984210237, false ,[ [ 2, ["ricochet",false] ] , [ 3, 0 ] , [ 0, [ 0, -24 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 5646084782438152, [ [ 68, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6905032722572947, false ,[ [ 4, 67 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 4261931068733884, false ,[ [ 2, ["ricochet",false] ] , [ 3, 0 ] , [ 0, [ 0, -24 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 1925962796911923, [ [ 35, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 5261641406620016, false ,[ [ 4, 36 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 8841847855011201, false ,[ [ 2, ["stars",false] ] , [ 3, 0 ] , [ 0, [ 0, 0 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 8792964242228692, [ [ 37, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 6805571954627242, false ,[ [ 4, 38 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 5097749939740643, false ,[ [ 2, ["stars",false] ] , [ 3, 0 ] , [ 0, [ 0, 0 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 8184066224548759, [ [ 39, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 865250212889467, false ,[ [ 4, 40 ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 91478920189177, false ,[ [ 2, ["stars",false] ] , [ 3, 0 ] , [ 0, [ 0, 0 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] , [ 0, null, false, null, 9881982504718497, [ [ 31, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 4402659415675987, false ,[ [ 4, 41 ] ] ] ], [ ] ,[ [ 0, null, false, null, 9663407576959155, [ [ 41, cr.plugins_.Sprite.prototype.cnds.CompareFrame, null, 0, false, false, false, 6117602974417768, false ,[ [ 8, 0 ] , [ 0, [ 0, 0 ] ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 4009616622982434, false ,[ [ 2, ["levelrestart",false] ] , [ 3, 0 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3777056377347539, [ [ 31, cr.plugins_.Sprite.prototype.cnds.OnCollision, null, 0, false, false, true, 8812347641419121, false ,[ [ 4, 41 ] ] ] ], [ ] ,[ [ 0, null, false, null, 9912135714298967, [ [ 41, cr.plugins_.Sprite.prototype.cnds.CompareFrame, null, 0, false, false, false, 1552149032972967, false ,[ [ 8, 5 ] , [ 0, [ 0, 1 ] ] ] ] ], [ [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 9786885575077611, false ,[ [ 2, ["levelcomplete",false] ] , [ 3, 0 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Sound" ] ] ] ] ] ] ] ] ] ] , [ 0, [true, "Touch_Settings"], false, null, 7393232176747902, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7393232176747902, false ,[ [ 1, [ 2, "Touch_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3635791802942203, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 2957837226940495, false ,[ [ 4, 4 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.Wait, null, 5860307183371574, false ,[ [ 0, [ 1, 0.3 ] ] ] ] , [ 50, cr.plugins_.Browser.prototype.acts.GoToURL, null, 9825723041227359, false ,[ [ 1, [ 2, "http://codecanyon.net/user/muscle-ss/portfolio" ] ] , [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 2710078331050817, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 9184848911190145, false ,[ [ 4, 3 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.Wait, null, 1300466067896509, false ,[ [ 0, [ 1, 0.3 ] ] ] ] , [ 50, cr.plugins_.Browser.prototype.acts.GoToURL, null, 2974733315484615, false ,[ [ 1, [ 2, "http://codecanyon.net/user/muscle-ss" ] ] , [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 7991209294545343, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 144164838271599, false ,[ [ 4, 8 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6775624896436204, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 8327391517642899, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8361216003756049, false ,[ [ 6, "StartMenu" ] ] ] ] ] , [ 0, null, false, null, 4996276053400883, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 7370974820016947, false ,[ [ 4, 6 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6006775986550007, false ,[ [ 1, [ 2, "Stars_Selected_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6783006233836672, false ,[ [ 1, [ 2, "Levels_Check_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8066848709215423, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.WaitForSignal, null, 1994431836672693, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] , [ -1, cr.system_object.prototype.acts.GoToLayout, null, 8827467806703796, false ,[ [ 6, "LevelsMenu" ] ] ] ] ] , [ 0, null, false, null, 3213857330399099, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 7294181883343911, false ,[ [ 4, 5 ] ] ] ], [ ] ,[ [ 0, null, false, null, 198726958296542, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8280822520759036, false ,[ [ 11, "Music" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 1724748758215652, false ,[ [ 11, "Music" ] , [ 7, [ 0, 0 ] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Stop, null, 8945821576959599, false ,[ [ 1, [ 2, "Music" ] ] ] ] ] ] , [ 0, null, false, null, 9556591418664959, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 6739075001140947, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9452513047709415, false ,[ [ 11, "Music" ] , [ 7, [ 0, 1 ] ] ] ] , [ 49, cr.plugins_.Audio.prototype.acts.Play, null, 1640409056679846, false ,[ [ 2, ["gamemusic",true] ] , [ 3, 1 ] , [ 0, [ 0, -6 ] ] , [ 1, [ 2, "Music" ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5153378831119185, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 2323562135905554, false ,[ [ 4, 10 ] ] ] ], [ ] ,[ [ 0, null, false, null, 506229007085351, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 578424533557573, false ,[ [ 11, "Sound" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9321231176197251, false ,[ [ 11, "Sound" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 3782975296971426, false ,[ [ 1, [ 2, "Sound_Settings" ] ] , [ 3, 0 ] ] ] ] ] , [ 0, null, false, null, 4518397367748074, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 6310345431900885, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2736301826012196, false ,[ [ 11, "Sound" ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 5855046589935346, false ,[ [ 1, [ 2, "Sound_Settings" ] ] , [ 3, 1 ] ] ] ] ] ] ] , [ 0, null, false, null, 43524023532763, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9921433297460737, false ,[ [ 11, "Music" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 5, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 5361649823859509, false ,[ [ 1, [ 2, "MusicON" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 9107952515471452, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 6006430505120267, false ] ], [ [ 5, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 2141701778628601, false ,[ [ 1, [ 2, "MusicOFF" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 7640474290426683, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3363636770997882, false ,[ [ 11, "Sound" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 10, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 8053976247057559, false ,[ [ 1, [ 2, "SoundON" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 7772709764435478, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 506024846116267, false ] ], [ [ 10, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 6591625619841546, false ,[ [ 1, [ 2, "SoundOFF" ] ] , [ 3, 1 ] ] ] ] ] ] ] , [ 0, [true, "Mouse_Settings"], false, null, 3442024420587492, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3442024420587492, false ,[ [ 1, [ 2, "Mouse_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, true, null, 8470025712124507, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsButtonDown, null, 0, false, false, false, 9939046005488177, false ,[ [ 3, 0 ] ] ] , [ 52, cr.plugins_.Mouse.prototype.cnds.IsButtonDown, null, 0, false, false, false, 7630994241224498, false ,[ [ 3, 2 ] ] ] ], [ [ 52, cr.plugins_.Mouse.prototype.acts.SetCursorSprite, null, 7691787218632383, false ,[ [ 4, 12 ] ] ] ] ] , [ 0, null, false, null, 6379462854799293, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 8525802489632009, false ] ], [ [ 52, cr.plugins_.Mouse.prototype.acts.SetCursorSprite, null, 9954578828343742, false ,[ [ 4, 11 ] ] ] ] ] , [ 0, null, false, null, 3360654085162572, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 7406294783279978, false ,[ [ 4, 6 ] ] ] ], [ [ 6, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 6357434150166094, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 4411724126415938, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 5300198220937478, false ,[ [ 4, 6 ] ] ] ], [ [ 6, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 2085469294419286, false ,[ [ 3, 0 ] ] ] , [ 6, cr.plugins_.Sprite.prototype.acts.SetSize, null, 7534581386704358, false ,[ [ 0, [ 0, 300 ] ] , [ 0, [ 0, 300 ] ] ] ] ] ] , [ 0, null, false, null, 4800583895675508, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 212539442385168, false ,[ [ 4, 8 ] ] ] ], [ [ 8, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 2191501376219387, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 7984919944927321, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 1915007370436386, false ,[ [ 4, 8 ] ] ] ], [ [ 8, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 2758851937549799, false ,[ [ 3, 0 ] ] ] , [ 8, cr.plugins_.Sprite.prototype.acts.SetSize, null, 6225842331502371, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 6113711582082141, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 3442828502242893, false ,[ [ 4, 5 ] ] ] ], [ [ 5, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4068221585149843, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 7556955097040342, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 4464791036782291, false ,[ [ 4, 5 ] ] ] ], [ [ 5, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 9497077902315076, false ,[ [ 3, 0 ] ] ] , [ 5, cr.plugins_.Sprite.prototype.acts.SetSize, null, 8668251353440586, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 3436454873284165, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 806594827149039, false ,[ [ 4, 10 ] ] ] ], [ [ 10, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4070489726744557, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3173234170605964, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 2730399337082585, false ,[ [ 4, 10 ] ] ] ], [ [ 10, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 6851880073487076, false ,[ [ 3, 0 ] ] ] , [ 10, cr.plugins_.Sprite.prototype.acts.SetSize, null, 6034699238802603, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 2036879064543931, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 4566673277884557, false ,[ [ 4, 7 ] ] ] ], [ [ 7, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 3916905211172109, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 676128604011155, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 2248066312854202, false ,[ [ 4, 7 ] ] ] ], [ [ 7, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 6311222485746238, false ,[ [ 3, 0 ] ] ] , [ 7, cr.plugins_.Sprite.prototype.acts.SetSize, null, 2940065343387958, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 957464151657626, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 2286632581982192, false ,[ [ 4, 1 ] ] ] ], [ [ 1, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 1913841458591296, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 2500074702459741, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 5506565447462363, false ,[ [ 4, 1 ] ] ] ], [ [ 1, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4950591036370018, false ,[ [ 3, 0 ] ] ] , [ 1, cr.plugins_.Sprite.prototype.acts.SetSize, null, 8265607798430168, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 1646554069318097, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 4283061632216566, false ,[ [ 4, 2 ] ] ] ], [ [ 2, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 2340586155712087, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 6517879242678843, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 2119596855599719, false ,[ [ 4, 2 ] ] ] ], [ [ 2, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 8196204309852628, false ,[ [ 3, 0 ] ] ] , [ 2, cr.plugins_.Sprite.prototype.acts.SetSize, null, 2723779676735282, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 8644924281669956, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 9511773701870141, false ,[ [ 4, 3 ] ] ] ], [ [ 3, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4808589571118874, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 9270100045429652, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 9584413100437838, false ,[ [ 4, 3 ] ] ] ], [ [ 3, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 8126097841746971, false ,[ [ 3, 0 ] ] ] , [ 3, cr.plugins_.Sprite.prototype.acts.SetSize, null, 5329540771682973, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 102846983271994, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 2217586574313901, false ,[ [ 4, 0 ] ] ] ], [ [ 0, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 6315824821815632, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 7705002964694607, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 1985465484691321, false ,[ [ 4, 0 ] ] ] ], [ [ 0, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4782972619906017, false ,[ [ 3, 0 ] ] ] , [ 0, cr.plugins_.Sprite.prototype.acts.SetSize, null, 180796703600054, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 1996316001081011, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 1119086099970949, false ,[ [ 4, 9 ] ] ] ], [ [ 9, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 448098772981123, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 940329424455689, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 5799670821386778, false ,[ [ 4, 9 ] ] ] ], [ [ 9, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 376283723658867, false ,[ [ 3, 0 ] ] ] , [ 9, cr.plugins_.Sprite.prototype.acts.SetSize, null, 5342903674277468, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 6588380286971923, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 6723603306404175, false ,[ [ 4, 16 ] ] ] ], [ [ 16, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 952150303720819, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 3081762940301713, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 1672316151285647, false ,[ [ 4, 16 ] ] ] ], [ [ 16, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 8872374619815741, false ,[ [ 3, 0 ] ] ] , [ 16, cr.plugins_.Sprite.prototype.acts.SetSize, null, 8728982885281673, false ,[ [ 0, [ 0, 110 ] ] , [ 0, [ 0, 110 ] ] ] ] ] ] , [ 0, null, false, null, 9707422806828562, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 3603416510073325, false ,[ [ 4, 20 ] ] ] ], [ [ 20, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 654199203767335, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 5587468799757385, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 7172248202170974, false ,[ [ 4, 20 ] ] ] ], [ [ 20, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 7988345056089826, false ,[ [ 3, 0 ] ] ] , [ 20, cr.plugins_.Sprite.prototype.acts.SetSize, null, 6130287717100824, false ,[ [ 0, [ 0, 128 ] ] , [ 0, [ 0, 128 ] ] ] ] ] ] , [ 0, null, false, null, 9158398019279572, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 9088637063153719, false ,[ [ 4, 28 ] ] ] ], [ [ 28, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 6637343002535185, false ,[ [ 3, 1 ] ] ] ] ,[ [ 0, null, false, null, 9562138806140368, [ [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9119228226991672, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 21, 28, false, null ,0 ] ] ] ] ], [ [ 29, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4323036001386849, false ,[ [ 3, 1 ] ] ] ] ] ] ] , [ 0, null, false, null, 8548182667057622, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 2844981272207966, false ,[ [ 4, 28 ] ] ] ], [ [ 28, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 7351234767252759, false ,[ [ 3, 0 ] ] ] , [ 28, cr.plugins_.Sprite.prototype.acts.SetSize, null, 9021460090053686, false ,[ [ 0, [ 0, 180 ] ] , [ 0, [ 0, 200 ] ] ] ] ] ,[ [ 0, null, false, null, 8649384172458785, [ [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, true, false, 7349840844546908, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 21, 28, false, null ,0 ] ] ] ] ], [ [ 29, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 4283399835082283, false ,[ [ 3, 0 ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetOpacity, null, 7777378702489659, false ,[ [ 0, [ 0, 100 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 9691105263269818, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 2707294276294248, false ,[ [ 4, 32 ] ] ] ], [ [ 32, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 3052759590585264, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 6244158833126808, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 7702047974205573, false ,[ [ 4, 32 ] ] ] ], [ [ 32, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 2617182946734487, false ,[ [ 3, 0 ] ] ] , [ 32, cr.plugins_.Sprite.prototype.acts.SetSize, null, 4369452614045074, false ,[ [ 0, [ 0, 137 ] ] , [ 0, [ 0, 143 ] ] ] ] ] ] , [ 0, null, false, null, 6668658474019481, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 371247247259089, false ,[ [ 4, 34 ] ] ] ], [ [ 34, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 2869291561889775, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 450644365096707, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 8959887001726666, false ,[ [ 4, 34 ] ] ] ], [ [ 34, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 8540775048178989, false ,[ [ 3, 0 ] ] ] , [ 34, cr.plugins_.Sprite.prototype.acts.SetSize, null, 495664201349754, false ,[ [ 0, [ 0, 137 ] ] , [ 0, [ 0, 143 ] ] ] ] ] ] , [ 0, null, false, null, 9802474043608554, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, false, false, 355733524666981, false ,[ [ 4, 33 ] ] ] ], [ [ 33, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 1110990424292327, false ,[ [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 6567152038107553, [ [ 52, cr.plugins_.Mouse.prototype.cnds.IsOverObject, null, 0, false, true, false, 2486065807831273, false ,[ [ 4, 33 ] ] ] ], [ [ 33, cr.behaviors.Sin.prototype.acts.SetActive, "Sine", 7880206449304978, false ,[ [ 3, 0 ] ] ] , [ 33, cr.plugins_.Sprite.prototype.acts.SetSize, null, 7093150831780645, false ,[ [ 0, [ 0, 137 ] ] , [ 0, [ 0, 143 ] ] ] ] ] ] ] ] , [ 0, [true, "Pause_Settings"], false, null, 7796646788648008, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7796646788648008, false ,[ [ 1, [ 2, "Pause_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 6981823412300203, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 7873181618474696, false ,[ [ 4, 2 ] ] ] ], [ ] ,[ [ 0, null, false, null, 8196361048415346, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3964390199886524, false ,[ [ 11, "Pause" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 20, cr.plugins_.Sprite.prototype.acts.SetY, null, 9037371984161646, false ,[ [ 0, [ 0, 960 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 6417977548372674, false ,[ [ 11, "Pause" ] , [ 7, [ 0, 1 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 4311940530456985, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 8153047962388884, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 6950994541175299, false ] ], [ [ 20, cr.plugins_.Sprite.prototype.acts.SetY, null, 4939984689069939, false ,[ [ 0, [ 0, 1240 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 9781375971204723, false ,[ [ 11, "Pause" ] , [ 7, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetTimescale, null, 7891159914602918, false ,[ [ 0, [ 1, 1 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 3745592792179146, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 3808389274193498, false ,[ [ 11, "Pause" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 2, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 1559161208747159, false ,[ [ 1, [ 2, "PauseON" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 5109758842214591, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 842046007690282, false ] ], [ [ 2, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 843989809312758, false ,[ [ 1, [ 2, "PauseOFF" ] ] , [ 3, 1 ] ] ] ] ] ] ] , [ 0, [true, "Fullscreen_Settings"], false, null, 8861542286337894, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 8861542286337894, false ,[ [ 1, [ 2, "Fullscreen_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 2268427827982242, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 2484939689815928, false ,[ [ 4, 16 ] ] ] ], [ ] ,[ [ 0, null, false, null, 4929979576771948, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9147835072484543, false ,[ [ 11, "Fullscreen" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9755345674690926, false ,[ [ 11, "Fullscreen" ] , [ 7, [ 0, 1 ] ] ] ] , [ 50, cr.plugins_.Browser.prototype.acts.RequestFullScreen, null, 7491303096670908, false ,[ [ 3, 3 ] ] ] ] ] , [ 0, null, false, null, 6366125769874759, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 6186992337598985, false ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 9916599522641078, false ,[ [ 11, "Fullscreen" ] , [ 7, [ 0, 0 ] ] ] ] , [ 50, cr.plugins_.Browser.prototype.acts.CancelFullScreen, null, 6402150123220357, false ] ] ] ] ] , [ 0, null, false, null, 2971899408969816, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6714367124208785, false ,[ [ 11, "Fullscreen" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 16, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 4639072420782443, false ,[ [ 1, [ 2, "FulLscreenON" ] ] , [ 3, 1 ] ] ] ] ] , [ 0, null, false, null, 7126421656572189, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 7148834216299674, false ] ], [ [ 16, cr.plugins_.Sprite.prototype.acts.SetAnim, null, 8620814805122588, false ,[ [ 1, [ 2, "FulLscreenOFF" ] ] , [ 3, 1 ] ] ] ] ] ] ] , [ 0, [true, "Screenshot_Settings"], false, null, 2574697243277324, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 2574697243277324, false ,[ [ 1, [ 2, "Screenshot_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 4007561428035984, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 4197391968006414, false ,[ [ 4, 20 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SnapshotCanvas, null, 1562709400223885, false ,[ [ 3, 0 ] , [ 0, [ 0, 100 ] ] ] ] , [ -1, cr.system_object.prototype.acts.Wait, null, 1780631888376382, false ,[ [ 0, [ 1, 1 ] ] ] ] , [ 50, cr.plugins_.Browser.prototype.acts.InvokeDownload, null, 2191993338744119, false ,[ [ 1, [ 19, cr.system_object.prototype.exps.canvassnapshot ] ] , [ 1, [ 2, "ZombieShooter.png" ] ] ] ] , [ -1, cr.system_object.prototype.acts.CreateObject, null, 7720630032207981, false ,[ [ 4, 24 ] , [ 5, [ 0, 3 ] ] , [ 0, [ 0, 960 ] ] , [ 0, [ 0, 880 ] ] ] ] ] ] ] ] , [ 0, [true, "Levels_Rotate_Settings"], false, null, 2784064735697912, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 2784064735697912, false ,[ [ 1, [ 2, "Levels_Rotate_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 8020870361949087, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 5971507052191822, false ,[ [ 4, 0 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SubVar, null, 3826394661149904, false ,[ [ 11, "Levels_Rotate" ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, null, false, null, 5103206275958885, [ [ 53, cr.plugins_.Touch.prototype.cnds.OnTouchObject, null, 1, false, false, false, 1221040078899525, false ,[ [ 4, 9 ] ] ] ], [ [ -1, cr.system_object.prototype.acts.AddVar, null, 3009963516336455, false ,[ [ 11, "Levels_Rotate" ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, null, false, null, 8877076645892625, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 1968931146587082, false ,[ [ 11, "Levels_Rotate" ] , [ 8, 2 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 2427493263156858, false ,[ [ 11, "Levels_Rotate" ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, null, false, null, 9915152631731319, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 6974464754547769, false ,[ [ 11, "Levels_Rotate" ] , [ 8, 4 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetVar, null, 6457418957980885, false ,[ [ 11, "Levels_Rotate" ] , [ 7, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 1875260799814345, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 5323117097740947, false ,[ [ 11, "Levels_Rotate" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 9287163867435309, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8526021116152463, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8413428649947914, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 16 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 5649752221436849, false ,[ [ 10, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 2675297189005234, false ,[ [ 10, 0 ] , [ 7, [ 0, 1 ] ] ] ] ] ] , [ 0, null, false, null, 6209383576560973, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1128621318112144, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5006534907806485, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 17 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 8176461161413517, false ,[ [ 10, 0 ] , [ 7, [ 0, 2 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9982213165468374, false ,[ [ 10, 0 ] , [ 7, [ 0, 2 ] ] ] ] ] ] , [ 0, null, false, null, 657020831288436, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 555290901150959, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9202944198285521, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 18 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 6435093222542289, false ,[ [ 10, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 2066383339147029, false ,[ [ 10, 0 ] , [ 7, [ 0, 3 ] ] ] ] ] ] , [ 0, null, false, null, 2410955465928147, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9771192205590404, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6321988424128323, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 19 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 513442003180875, false ,[ [ 10, 0 ] , [ 7, [ 0, 4 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 5011577900320487, false ,[ [ 10, 0 ] , [ 7, [ 0, 4 ] ] ] ] ] ] , [ 0, null, false, null, 8397866233413317, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3087431127153349, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2553860113355049, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 20 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 2859833404023918, false ,[ [ 10, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 955187296281577, false ,[ [ 10, 0 ] , [ 7, [ 0, 5 ] ] ] ] ] ] , [ 0, null, false, null, 8341855224919112, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8344620398969873, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3884238689224768, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 21 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 1217563242535327, false ,[ [ 10, 0 ] , [ 7, [ 0, 6 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 2409145917488277, false ,[ [ 10, 0 ] , [ 7, [ 0, 6 ] ] ] ] ] ] , [ 0, null, false, null, 5052976885385687, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6432334465784344, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9342534249989267, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 22 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 2673346217542003, false ,[ [ 10, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 6589890882091271, false ,[ [ 10, 0 ] , [ 7, [ 0, 7 ] ] ] ] ] ] , [ 0, null, false, null, 7834719611103556, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1461451486210609, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5823155734929324, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 23 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 5457533517568726, false ,[ [ 10, 0 ] , [ 7, [ 0, 8 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 6055401627912262, false ,[ [ 10, 0 ] , [ 7, [ 0, 8 ] ] ] ] ] ] , [ 0, null, false, null, 2668475302319552, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6628685786617289, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1809592595416419, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 24 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 7860183563410651, false ,[ [ 10, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 4408897916182475, false ,[ [ 10, 0 ] , [ 7, [ 0, 9 ] ] ] ] ] ] , [ 0, null, false, null, 316670938339401, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6859209557831601, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9469119954446612, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 25 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4314543407314601, false ,[ [ 10, 0 ] , [ 7, [ 0, 10 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9683942788602496, false ,[ [ 10, 0 ] , [ 7, [ 0, 10 ] ] ] ] ] ] , [ 0, null, false, null, 5253698253283076, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3666862680379273, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2709527477816342, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 26 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 8603858635111005, false ,[ [ 10, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 5478211432368389, false ,[ [ 10, 0 ] , [ 7, [ 0, 11 ] ] ] ] ] ] , [ 0, null, false, null, 8266076412110089, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4502268225488165, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8504049890143724, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 27 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 7727152741066522, false ,[ [ 10, 0 ] , [ 7, [ 0, 12 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 8288922800449369, false ,[ [ 10, 0 ] , [ 7, [ 0, 12 ] ] ] ] ] ] , [ 0, null, false, null, 3188931741648208, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5082019044678003, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8713476915199884, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 28 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4147024492621103, false ,[ [ 10, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 451483999547685, false ,[ [ 10, 0 ] , [ 7, [ 0, 13 ] ] ] ] ] ] , [ 0, null, false, null, 3586383925556961, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6050251148933249, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6898086756292195, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 29 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 5995336946958117, false ,[ [ 10, 0 ] , [ 7, [ 0, 14 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9331220588539321, false ,[ [ 10, 0 ] , [ 7, [ 0, 14 ] ] ] ] ] ] , [ 0, null, false, null, 1029368768051481, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 601837561202785, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5723580970046117, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 30 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 3040470506970187, false ,[ [ 10, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 8499646938428587, false ,[ [ 10, 0 ] , [ 7, [ 0, 15 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 8166309673609315, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 4348457750903015, false ,[ [ 11, "Levels_Rotate" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 3982950132673336, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6357805379537608, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7741324108716564, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 6039250254907864, false ,[ [ 10, 0 ] , [ 7, [ 0, 16 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 2347534420414739, false ,[ [ 10, 0 ] , [ 7, [ 0, 16 ] ] ] ] ] ] , [ 0, null, false, null, 6524037336934148, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3481414409261048, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4433966667897591, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 2 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4040442833617733, false ,[ [ 10, 0 ] , [ 7, [ 0, 17 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 8503517520444942, false ,[ [ 10, 0 ] , [ 7, [ 0, 17 ] ] ] ] ] ] , [ 0, null, false, null, 2641776593872108, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9173213592897215, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2991980383046164, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 3 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 1974202876993726, false ,[ [ 10, 0 ] , [ 7, [ 0, 18 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 6957204113825996, false ,[ [ 10, 0 ] , [ 7, [ 0, 18 ] ] ] ] ] ] , [ 0, null, false, null, 9293219783313991, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 2142659748708961, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8185166663509043, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 4 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 6132739473532812, false ,[ [ 10, 0 ] , [ 7, [ 0, 19 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9686721966965073, false ,[ [ 10, 0 ] , [ 7, [ 0, 19 ] ] ] ] ] ] , [ 0, null, false, null, 4223665618738498, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3067127500338073, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5603635628606961, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 5 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4016063980629932, false ,[ [ 10, 0 ] , [ 7, [ 0, 20 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 6676455910951297, false ,[ [ 10, 0 ] , [ 7, [ 0, 20 ] ] ] ] ] ] , [ 0, null, false, null, 1712727452157739, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9253745042097044, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 487648677478555, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 6 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 7187416534692052, false ,[ [ 10, 0 ] , [ 7, [ 0, 21 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 3483509162881719, false ,[ [ 10, 0 ] , [ 7, [ 0, 21 ] ] ] ] ] ] , [ 0, null, false, null, 8483703287365942, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9619416744780031, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 6312742120727644, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 7 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4739757773494713, false ,[ [ 10, 0 ] , [ 7, [ 0, 22 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9923054885844805, false ,[ [ 10, 0 ] , [ 7, [ 0, 22 ] ] ] ] ] ] , [ 0, null, false, null, 4708685251712749, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4434951040554826, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4035190079537606, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 8 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 6094364413160956, false ,[ [ 10, 0 ] , [ 7, [ 0, 23 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 3251791694950569, false ,[ [ 10, 0 ] , [ 7, [ 0, 23 ] ] ] ] ] ] , [ 0, null, false, null, 8543393466519604, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3519382688524952, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 995851196263836, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 9 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4466693136062536, false ,[ [ 10, 0 ] , [ 7, [ 0, 24 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9671938802740022, false ,[ [ 10, 0 ] , [ 7, [ 0, 24 ] ] ] ] ] ] , [ 0, null, false, null, 3192081638496473, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1081345367435845, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4961272348221949, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 10 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 7816244174577571, false ,[ [ 10, 0 ] , [ 7, [ 0, 25 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 484692124253899, false ,[ [ 10, 0 ] , [ 7, [ 0, 25 ] ] ] ] ] ] , [ 0, null, false, null, 9862682500541176, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9051947262429094, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 1806985022762311, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 11 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 9273426368817071, false ,[ [ 10, 0 ] , [ 7, [ 0, 26 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 5562846464229983, false ,[ [ 10, 0 ] , [ 7, [ 0, 26 ] ] ] ] ] ] , [ 0, null, false, null, 9731458336669888, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 9092181263337776, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 7638561159441156, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 12 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 4391164495017519, false ,[ [ 10, 0 ] , [ 7, [ 0, 27 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 9327807260427271, false ,[ [ 10, 0 ] , [ 7, [ 0, 27 ] ] ] ] ] ] , [ 0, null, false, null, 650837786548925, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8447627375984822, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 8743982915985534, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 13 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 8115219040879525, false ,[ [ 10, 0 ] , [ 7, [ 0, 28 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 8969216872696427, false ,[ [ 10, 0 ] , [ 7, [ 0, 28 ] ] ] ] ] ] , [ 0, null, false, null, 6287571965823897, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 5476581910004168, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 3571201795807885, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 14 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 1452290614519355, false ,[ [ 10, 0 ] , [ 7, [ 0, 29 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 531795251182867, false ,[ [ 10, 0 ] , [ 7, [ 0, 29 ] ] ] ] ] ] , [ 0, null, false, null, 313136725002201, [ [ 28, cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4711217224836299, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar, null, 0, false, false, false, 4563608701509231, false ,[ [ 10, 0 ] , [ 8, 0 ] , [ 7, [ 0, 15 ] ] ] ] ], [ [ 28, cr.plugins_.Sprite.prototype.acts.SetInstanceVar, null, 6416101548465991, false ,[ [ 10, 0 ] , [ 7, [ 0, 30 ] ] ] ] , [ 29, cr.plugins_.Spritefont2.prototype.acts.SetInstanceVar, null, 7312319886670131, false ,[ [ 10, 0 ] , [ 7, [ 0, 30 ] ] ] ] ] ] ] ] ] ] ] ] , [ "IncludeSettings", [ [ 1, "Background", 0, 0, false,false,7862116658014639,false ] , [ 0, null, false, null, 255092508873861, [ [ -1, cr.system_object.prototype.cnds.OnLayoutStart, null, 1, false, false, false, 9009370808984878, false ] ], [ [ -1, cr.system_object.prototype.acts.SetLayerOpacity, null, 7296116504301889, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 0, [ 0, 100 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 6057412444703829, false ,[ [ 1, [ 2, "Shadow_Out_Settings" ] ] , [ 3, 1 ] ] ] , [ -1, cr.system_object.prototype.acts.SetVar, null, 8984256905658524, false ,[ [ 11, "Background" ] , [ 7, [ 19, cr.system_object.prototype.exps.round ,[ [ 19, cr.system_object.prototype.exps.random ,[ [ 0, 0 ] ,[ 0, 1 ] ] ] ] ] ] ] ] ] ] , [ 0, [true, "Shadow_Settings"], false, null, 9088275516335037, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 9088275516335037, false ,[ [ 1, [ 2, "Shadow_Settings" ] ] ] ] ], [ ] ,[ [ 0, [false, "Shadow_In_Settings"], false, null, 841379539008229, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 841379539008229, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5517717850216769, [ [ -1, cr.system_object.prototype.cnds.LayerCmpOpacity, null, 0, false, false, false, 2416516713785767, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 8, 2 ] , [ 0, [ 0, 100 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetLayerOpacity, null, 9385480707374821, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 0, [ 4, [ 19, cr.system_object.prototype.exps.layeropacity ,[ [ 2, "Shadow" ] ] ] ,[ 0, 6 ] ] ] ] ] ] ] , [ 0, null, false, null, 5949333999324918, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 5062456043903732, false ] ], [ [ -1, cr.system_object.prototype.acts.SetLayerOpacity, null, 7315401386436238, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 0, [ 0, 100 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 8064753907783966, false ,[ [ 1, [ 2, "Shadow_In_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.Signal, null, 7954446544518231, false ,[ [ 1, [ 2, "Shadow_In" ] ] ] ] ] ] ] ] , [ 0, [false, "Shadow_Out_Settings"], false, null, 3930326734184822, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 3930326734184822, false ,[ [ 1, [ 2, "Shadow_Out_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 5517717850216769, [ [ -1, cr.system_object.prototype.cnds.LayerCmpOpacity, null, 0, false, false, false, 2416516713785767, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 8, 4 ] , [ 0, [ 0, 0 ] ] ] ] ], [ [ -1, cr.system_object.prototype.acts.SetLayerOpacity, null, 9385480707374821, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 0, [ 5, [ 19, cr.system_object.prototype.exps.layeropacity ,[ [ 2, "Shadow" ] ] ] ,[ 0, 6 ] ] ] ] ] ] ] , [ 0, null, false, null, 5949333999324918, [ [ -1, cr.system_object.prototype.cnds.Else, null, 0, false, false, false, 5062456043903732, false ] ], [ [ -1, cr.system_object.prototype.acts.SetLayerOpacity, null, 7315401386436238, false ,[ [ 5, [ 2, "Shadow" ] ] , [ 0, [ 0, 0 ] ] ] ] , [ -1, cr.system_object.prototype.acts.SetGroupActive, null, 4658098883198379, false ,[ [ 1, [ 2, "Shadow_Out_Settings" ] ] , [ 3, 0 ] ] ] , [ -1, cr.system_object.prototype.acts.Signal, null, 7954446544518231, false ,[ [ 1, [ 2, "Shadow_Out" ] ] ] ] ] ] ] ] ] ] , [ 0, [true, "Background_Settings"], false, null, 7881918290489667, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7881918290489667, false ,[ [ 1, [ 2, "Background_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 1526529034489088, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 8738896450934967, false ,[ [ 11, "Background" ] , [ 8, 0 ] , [ 7, [ 0, 0 ] ] ] ] ], [ [ 42, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 753953747148948, false ,[ [ 0, [ 0, 0 ] ] ] ] , [ 43, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 1756009286103371, false ,[ [ 0, [ 0, 0 ] ] ] ] , [ 47, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 3743200675339429, false ,[ [ 0, [ 0, 0 ] ] ] ] ] ] , [ 0, null, false, null, 5337828331682487, [ [ -1, cr.system_object.prototype.cnds.CompareVar, null, 0, false, false, false, 9223562599097367, false ,[ [ 11, "Background" ] , [ 8, 0 ] , [ 7, [ 0, 1 ] ] ] ] ], [ [ 42, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 6061519420901253, false ,[ [ 0, [ 0, 1 ] ] ] ] , [ 43, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 5201760059268885, false ,[ [ 0, [ 0, 1 ] ] ] ] , [ 47, cr.plugins_.Sprite.prototype.acts.SetAnimFrame, null, 4642968212401505, false ,[ [ 0, [ 0, 1 ] ] ] ] ] ] ] ] , [ 0, [true, "Smoke_Settings"], false, null, 7529061758183231, [ [ -1, cr.system_object.prototype.cnds.IsGroupActive, null, 0, false, false, false, 7529061758183231, false ,[ [ 1, [ 2, "Smoke_Settings" ] ] ] ] ], [ ] ,[ [ 0, null, false, null, 7026750364424495, [ [ 45, cr.plugins_.TiledBg.prototype.cnds.CompareX, null, 0, false, false, false, 3114351709309416, false ,[ [ 8, 3 ] , [ 0, [ 7, [ 3, [ 20, 45, cr.plugins_.TiledBg.prototype.exps.Width, false, null ] ] ,[ 0, 2 ] ] ] ] ] ], [ [ 45, cr.plugins_.TiledBg.prototype.acts.SetX, null, 6557096472751503, false ,[ [ 0, [ 4, [ 20, 45, cr.plugins_.TiledBg.prototype.exps.X, false, null ] ,[ 7, [ 20, 45, cr.plugins_.TiledBg.prototype.exps.Width, false, null ] ,[ 0, 2 ] ] ] ] ] ] ] ] , [ 0, null, false, null, 5269818314610857, [ [ 46, cr.plugins_.TiledBg.prototype.cnds.CompareX, null, 0, false, false, false, 5257253840237967, false ,[ [ 8, 3 ] , [ 0, [ 7, [ 3, [ 20, 46, cr.plugins_.TiledBg.prototype.exps.Width, false, null ] ] ,[ 0, 2 ] ] ] ] ] ], [ [ 46, cr.plugins_.TiledBg.prototype.acts.SetX, null, 2340236437042394, false ,[ [ 0, [ 4, [ 20, 46, cr.plugins_.TiledBg.prototype.exps.X, false, null ] ,[ 7, [ 20, 46, cr.plugins_.TiledBg.prototype.exps.Width, false, null ] ,[ 0, 2 ] ] ] ] ] ] ] ] ] ] ] ] ], [ ["button.m4a", 10037], ["button.ogg", 9275], ["ricochet.ogg", 18057], ["ricochet.m4a", 17872], ["stars.m4a", 17402], ["stars.ogg", 17966], ["levelcomplete.m4a", 47000], ["levelcomplete.ogg", 26048], ["levelrestart.m4a", 68847], ["levelrestart.ogg", 64164], ["shot.ogg", 13365], ["zombiehit.ogg", 14444], ["shot.m4a", 11979], ["metalhit.m4a", 10033], ["metalhit.ogg", 10864], ["nobullet.m4a", 3567], ["nobullet.ogg", 5914], ["woodhit.m4a", 7222], ["woodhit.ogg", 9524], ["zombiehit.m4a", 14109] ], "media/", false, 1920, 1080, 4, true, true, true, "1.0.0", true, true, 3, 0, 4639, false, true, 1, true, [ ] ];}; home/jogoso94/public_html/jogos/pipe_mania/c2runtime.js 0000644 00000776424 15043457154 0017200 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com 'use strict';var aa,ca,da,fa,ga,ha,ia,ja,ka,ma,na,oa,pa,qa,ra,sa,ta,ua,wa,xa,ya,za,Aa,y,Ba,Ca,Da,Ea,Fa,C,Ia,Ja,Ka,La,Na,Oa,Pa,Qa,Ra,Sa,Ta,Ua,Va,Xa,Ya,Za,ab,bb,cb,db,eb,fb,gb,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb,Ib,Jb,Kb,Lb,Mb,Nb,Ob,Pb,Ub,Vb,Wb,Xb,Yb,Zb,$b,ac,bc,cc,dc,ec,fc,gc,hc,ic,jc={};"function"!==typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===typeof"test".__proto__?function(g){return g.__proto__}:function(g){return g.constructor.prototype}); (function(){function g(a,b,f,h){this.set(a,b,f,h)}function k(){this.ob=this.nb=this.qb=this.pb=this.Fb=this.Eb=this.Xa=this.Wa=0}function c(a,b,f,h){a<b?f<h?(t=a<f?a:f,v=b>h?b:h):(t=a<h?a:h,v=b>f?b:f):f<h?(t=b<f?b:f,v=a>h?a:h):(t=b<h?b:h,v=a>f?a:f)}function p(){this.items=this.qc=null;this.vi=0;R&&(this.qc=new Set);this.Eh=[];this.Ze=!0}function q(a){G[J++]=a}function n(){this.R=this.yh=this.y=this.Ph=0}function r(a){this.Db=[];this.Lj=this.Nj=this.Oj=this.Mj=0;this.cj(a)}function b(a,b){this.nm= a;this.mm=b;this.cells={}}function d(a,b){this.nm=a;this.mm=b;this.cells={}}function e(a,b,f){var h;return w.length?(h=w.pop(),h.Tm=a,h.x=b,h.y=f,h):new ca(a,b,f)}function a(a,b,f){this.Tm=a;this.x=b;this.y=f;this.Ib=new da}function h(a,b,f){var h;return A.length?(h=A.pop(),h.Tm=a,h.x=b,h.y=f,h):new fa(a,b,f)}function l(a,b,f){this.Tm=a;this.x=b;this.y=f;this.Ib=[];this.Tg=!0;this.Td=new da;this.Mh=!1}function f(a,b){return a.Dd-b.Dd}ga=function(a){window.console&&window.console.log&&window.console.log(a)}; ha=function(a){window.console&&window.console.error&&window.console.error(a)};aa=function(a){return a};ia=function(a){return"undefined"===typeof a};ja=function(a){return"number"===typeof a};ka=function(a){return"string"===typeof a};ma=function(a){return 0<a&&0===(a-1&a)};na=function(a){--a;for(var b=1;32>b;b<<=1)a=a|a>>b;return a+1};oa=function(a){return 0>a?-a:a};pa=function(a,b){return a>b?a:b};qa=function(a,b){return a<b?a:b};ra=Math.PI;sa=function(a){return 0<=a?a|0:(a|0)-1};ta=function(a){var b= a|0;return b===a?b:b+1};ua=function(a,b,f,h,e,l,m,d){var z,H,t,u;a<f?(H=a,z=f):(H=f,z=a);e<m?(u=e,t=m):(u=m,t=e);if(z<u||H>t)return!1;b<h?(H=b,z=h):(H=h,z=b);l<d?(u=l,t=d):(u=d,t=l);if(z<u||H>t)return!1;z=e-a+m-f;H=l-b+d-h;a=f-a;b=h-b;e=m-e;l=d-l;d=oa(b*e-l*a);return oa(e*H-l*z)>d?!1:oa(a*H-b*z)<=d};g.prototype.set=function(a,b,f,h){this.left=a;this.top=b;this.right=f;this.bottom=h};g.prototype.Eg=function(a){this.left=a.left;this.top=a.top;this.right=a.right;this.bottom=a.bottom};g.prototype.width= function(){return this.right-this.left};g.prototype.height=function(){return this.bottom-this.top};g.prototype.offset=function(a,b){this.left+=a;this.top+=b;this.right+=a;this.bottom+=b;return this};g.prototype.normalize=function(){var a=0;this.left>this.right&&(a=this.left,this.left=this.right,this.right=a);this.top>this.bottom&&(a=this.top,this.top=this.bottom,this.bottom=a)};g.prototype.Kx=function(a){return!(a.right<this.left||a.bottom<this.top||a.left>this.right||a.top>this.bottom)};g.prototype.Lx= function(a,b,f){return!(a.right+b<this.left||a.bottom+f<this.top||a.left+b>this.right||a.top+f>this.bottom)};g.prototype.ac=function(a,b){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom};g.prototype.Vh=function(a){return this.left===a.left&&this.top===a.top&&this.right===a.right&&this.bottom===a.bottom};wa=g;k.prototype.bj=function(a){this.Wa=a.left;this.Xa=a.top;this.Eb=a.right;this.Fb=a.top;this.pb=a.right;this.qb=a.bottom;this.nb=a.left;this.ob=a.bottom};k.prototype.ps=function(a, b){if(0===b)this.bj(a);else{var f=Math.sin(b),h=Math.cos(b),e=a.left*f,l=a.top*f,m=a.right*f,f=a.bottom*f,d=a.left*h,z=a.top*h,t=a.right*h,h=a.bottom*h;this.Wa=d-l;this.Xa=z+e;this.Eb=t-l;this.Fb=z+m;this.pb=t-f;this.qb=h+m;this.nb=d-f;this.ob=h+e}};k.prototype.offset=function(a,b){this.Wa+=a;this.Xa+=b;this.Eb+=a;this.Fb+=b;this.pb+=a;this.qb+=b;this.nb+=a;this.ob+=b;return this};var t=0,v=0;k.prototype.Fp=function(a){c(this.Wa,this.Eb,this.pb,this.nb);a.left=t;a.right=v;c(this.Xa,this.Fb,this.qb, this.ob);a.top=t;a.bottom=v};k.prototype.ac=function(a,b){var f=this.Wa,h=this.Xa,e=this.Eb-f,l=this.Fb-h,m=this.pb-f,d=this.qb-h,z=a-f,t=b-h,u=e*e+l*l,c=e*m+l*d,l=e*z+l*t,v=m*m+d*d,x=m*z+d*t,g=1/(u*v-c*c),e=(v*l-c*x)*g,u=(u*x-c*l)*g;if(0<=e&&0<u&&1>e+u)return!0;e=this.nb-f;l=this.ob-h;u=e*e+l*l;c=e*m+l*d;l=e*z+l*t;g=1/(u*v-c*c);e=(v*l-c*x)*g;u=(u*x-c*l)*g;return 0<=e&&0<u&&1>e+u};k.prototype.Wc=function(a,b){if(b)switch(a){case 0:return this.Wa;case 1:return this.Eb;case 2:return this.pb;case 3:return this.nb; case 4:return this.Wa;default:return this.Wa}else switch(a){case 0:return this.Xa;case 1:return this.Fb;case 2:return this.qb;case 3:return this.ob;case 4:return this.Xa;default:return this.Xa}};k.prototype.rr=function(){return(this.Wa+this.Eb+this.pb+this.nb)/4};k.prototype.sr=function(){return(this.Xa+this.Fb+this.qb+this.ob)/4};k.prototype.Fq=function(a){var b=a.rr(),f=a.sr();if(this.ac(b,f))return!0;b=this.rr();f=this.sr();if(a.ac(b,f))return!0;var h,e,l,m,d,z,t,u;for(t=0;4>t;t++)for(u=0;4>u;u++)if(b= this.Wc(t,!0),f=this.Wc(t,!1),h=this.Wc(t+1,!0),e=this.Wc(t+1,!1),l=a.Wc(u,!0),m=a.Wc(u,!1),d=a.Wc(u+1,!0),z=a.Wc(u+1,!1),ua(b,f,h,e,l,m,d,z))return!0;return!1};xa=k;ya=function(a,b){for(var f in b)b.hasOwnProperty(f)&&(a[f]=b[f]);return a};za=function(a,b){var f,h;b=sa(b);if(!(0>b||b>=a.length)){f=b;for(h=a.length-1;f<h;f++)a[f]=a[f+1];Aa(a,h)}};Aa=function(a,b){a.length=b};y=function(a){Aa(a,0)};Ba=function(a,b){y(a);var f,h;f=0;for(h=b.length;f<h;++f)a[f]=b[f]};Ca=function(a,b){a.push.apply(a, b)};Da=function(a,b){var f,h;f=0;for(h=a.length;f<h;++f)if(a[f]===b)return f;return-1};Ea=function(a,b){var f=Da(a,b);-1!==f&&za(a,f)};Fa=function(a,b,f){return a<b?b:a>f?f:a};C=function(a){return a/(180/ra)};Ia=function(a){return 180/ra*a};Ja=function(a){a%=360;0>a&&(a+=360);return a};Ka=function(a){a%=2*ra;0>a&&(a+=2*ra);return a};La=function(a){return Ja(Ia(a))};Na=function(a){return Ka(C(a))};Oa=function(a,b,f,h){return Math.atan2(h-b,f-a)};Pa=function(a,b){if(a===b)return 0;var f=Math.sin(a), h=Math.cos(a),e=Math.sin(b),l=Math.cos(b),f=f*e+h*l;return 1<=f?0:-1>=f?ra:Math.acos(f)};Qa=function(a,b,f){var h=Math.sin(a),e=Math.cos(a),l=Math.sin(b),m=Math.cos(b);return Math.acos(h*l+e*m)>f?0<e*l-h*m?Ka(a+f):Ka(a-f):Ka(b)};Ra=function(a,b){var f=Math.sin(a),h=Math.cos(a),e=Math.sin(b),l=Math.cos(b);return 0>=h*e-f*l};Sa=function(a,b,f,h,e,l){if(0===f)return l?a:b;var m=Math.sin(f);f=Math.cos(f);a-=h;b-=e;var d=a*m;a=a*f-b*m;b=b*f+d;return l?a+h:b+e};Ta=function(a,b,f,h){a=f-a;b=h-b;return Math.sqrt(a* a+b*b)};Ua=function(a,b){return!a!==!b};Va=function(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1};Xa=function(a){for(var b in a)a.hasOwnProperty(b)&&delete a[b]};var x=+new Date;Ya=function(){if("undefined"!==typeof window.performance){var a=window.performance;if("undefined"!==typeof a.now)return a.now();if("undefined"!==typeof a.webkitNow)return a.webkitNow();if("undefined"!==typeof a.mozNow)return a.mozNow();if("undefined"!==typeof a.msNow)return a.msNow()}return Date.now()-x};var m= !1,u=m=!1,Q=!1;"undefined"!==typeof window&&(m=/chrome/i.test(navigator.userAgent)||/chromium/i.test(navigator.userAgent),m=!m&&/safari/i.test(navigator.userAgent),u=/(iphone|ipod|ipad)/i.test(navigator.userAgent),Q=window.c2ejecta);var R=!m&&!Q&&!u&&"undefined"!==typeof Set&&"undefined"!==typeof Set.prototype.forEach;p.prototype.contains=function(a){return this.te()?!1:R?this.qc.has(a):this.items&&this.items.hasOwnProperty(a)};p.prototype.add=function(a){if(R)this.qc.has(a)||(this.qc.add(a),this.Ze= !1);else{var b=a.toString(),f=this.items;f?f.hasOwnProperty(b)||(f[b]=a,this.vi++,this.Ze=!1):(this.items={},this.items[b]=a,this.vi=1,this.Ze=!1)}};p.prototype.remove=function(a){if(!this.te())if(R)this.qc.has(a)&&(this.qc["delete"](a),this.Ze=!1);else if(this.items){a=a.toString();var b=this.items;b.hasOwnProperty(a)&&(delete b[a],this.vi--,this.Ze=!1)}};p.prototype.clear=function(){this.te()||(R?this.qc.clear():(this.items=null,this.vi=0),y(this.Eh),this.Ze=!0)};p.prototype.te=function(){return 0=== this.count()};p.prototype.count=function(){return R?this.qc.size:this.vi};var G=null,J=0;p.prototype.vz=function(){if(!this.Ze){if(R)y(this.Eh),G=this.Eh,J=0,this.qc.forEach(q),G=null,J=0;else{var a=this.Eh;y(a);var b,f=0,h=this.items;if(h)for(b in h)h.hasOwnProperty(b)&&(a[f++]=h[b])}this.Ze=!0}};p.prototype.Le=function(){this.vz();return this.Eh};da=p;new da;Za=function(a,b){R?ab(a,b.qc):bb(a,b.Le())};ab=function(a,b){var f,h,e,l;h=f=0;for(e=a.length;f<e;++f)l=a[f],b.has(l)||(a[h++]=l);Aa(a,h)}; bb=function(a,b){var f,h,e,l;h=f=0;for(e=a.length;f<e;++f)l=a[f],-1===Da(b,l)&&(a[h++]=l);Aa(a,h)};n.prototype.add=function(a){this.y=a-this.Ph;this.yh=this.R+this.y;this.Ph=this.yh-this.R-this.y;this.R=this.yh};n.prototype.reset=function(){this.R=this.yh=this.y=this.Ph=0};cb=n;db=function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};r.prototype.cj=function(a){this.Yr=a;this.xd=a.length/2;this.Db.length=a.length;this.Qj=this.Rj=-1;this.Ip=0};r.prototype.Qg=function(){return!this.Yr.length}; r.prototype.Fa=function(){for(var a=this.Db,b=a[0],f=b,h=a[1],e=h,l,m,d=1,z=this.xd;d<z;++d)m=2*d,l=a[m],m=a[m+1],l<b&&(b=l),l>f&&(f=l),m<h&&(h=m),m>e&&(e=m);this.Mj=b;this.Nj=f;this.Oj=h;this.Lj=e};r.prototype.bj=function(a,b,f){this.Db.length=8;this.xd=4;var h=this.Db;h[0]=a.left-b;h[1]=a.top-f;h[2]=a.right-b;h[3]=a.top-f;h[4]=a.right-b;h[5]=a.bottom-f;h[6]=a.left-b;h[7]=a.bottom-f;this.Rj=a.right-a.left;this.Qj=a.bottom-a.top;this.Fa()};r.prototype.vh=function(a,b,f,h,e){this.Db.length=8;this.xd= 4;var l=this.Db;l[0]=a.Wa-b;l[1]=a.Xa-f;l[2]=a.Eb-b;l[3]=a.Fb-f;l[4]=a.pb-b;l[5]=a.qb-f;l[6]=a.nb-b;l[7]=a.ob-f;this.Rj=h;this.Qj=e;this.Fa()};r.prototype.os=function(a){this.xd=a.xd;Ba(this.Db,a.Db);this.Mj=a.Mj;this.Oj-a.Oj;this.Nj=a.Nj;this.Lj=a.Lj};r.prototype.Bg=function(a,b,f){if(this.Rj!==a||this.Qj!==b||this.Ip!==f){this.Rj=a;this.Qj=b;this.Ip=f;var h,e,l,m,d,z=0,t=1,u=this.Yr,c=this.Db;0!==f&&(z=Math.sin(f),t=Math.cos(f));f=0;for(l=this.xd;f<l;f++)h=2*f,e=h+1,m=u[h]*a,d=u[e]*b,c[h]=m*t-d* z,c[e]=d*t+m*z;this.Fa()}};r.prototype.ac=function(a,b){var f=this.Db;if(a===f[0]&&b===f[1])return!0;var h,e,l,m=this.xd,d=this.Mj-110,z=this.Oj-101,t=this.Nj+131,u=this.Lj+120,c,v,x=0,g=0;for(h=0;h<m;h++)e=2*h,l=(h+1)%m*2,c=f[e],e=f[e+1],v=f[l],l=f[l+1],ua(d,z,a,b,c,e,v,l)&&x++,ua(t,u,a,b,c,e,v,l)&&g++;return 1===x%2||1===g%2};r.prototype.ki=function(a,b,f){var h=a.Db,e=this.Db;if(this.ac(h[0]+b,h[1]+f)||a.ac(e[0]-b,e[1]-f))return!0;var l,m,d,z,t,u,c,v,x,g,k,p;l=0;for(z=this.xd;l<z;l++)for(m=2*l, d=(l+1)%z*2,v=e[m],m=e[m+1],x=e[d],g=e[d+1],d=0,c=a.xd;d<c;d++)if(t=2*d,u=(d+1)%c*2,k=h[t]+b,t=h[t+1]+f,p=h[u]+b,u=h[u+1]+f,ua(v,m,x,g,k,t,p,u))return!0;return!1};eb=r;b.prototype.jf=function(a,b,f){var h;h=this.cells[a];return h?(h=h[b])?h:f?(h=e(this,a,b),this.cells[a][b]=h):null:f?(h=e(this,a,b),this.cells[a]={},this.cells[a][b]=h):null};b.prototype.jc=function(a){return sa(a/this.nm)};b.prototype.kc=function(a){return sa(a/this.mm)};b.prototype.update=function(a,b,f){var h,e,l,m,d;if(b)for(h= b.left,e=b.right;h<=e;++h)for(l=b.top,m=b.bottom;l<=m;++l)if(!f||!f.ac(h,l))if(d=this.jf(h,l,!1))d.remove(a),d.te()&&(d.Ib.clear(),1E3>w.length&&w.push(d),this.cells[h][l]=null);if(f)for(h=f.left,e=f.right;h<=e;++h)for(l=f.top,m=f.bottom;l<=m;++l)b&&b.ac(h,l)||this.jf(h,l,!0).Zm(a)};b.prototype.ql=function(a,b){var f,h,e,l,m,d;f=this.jc(a.left);e=this.kc(a.top);h=this.jc(a.right);for(m=this.kc(a.bottom);f<=h;++f)for(l=e;l<=m;++l)(d=this.jf(f,l,!1))&&d.dump(b)};fb=b;d.prototype.jf=function(a,b,f){var e; e=this.cells[a];return e?(e=e[b])?e:f?(e=h(this,a,b),this.cells[a][b]=e):null:f?(e=h(this,a,b),this.cells[a]={},this.cells[a][b]=e):null};d.prototype.jc=function(a){return sa(a/this.nm)};d.prototype.kc=function(a){return sa(a/this.mm)};d.prototype.update=function(a,b,f){var h,e,l,m,d;if(b)for(h=b.left,e=b.right;h<=e;++h)for(l=b.top,m=b.bottom;l<=m;++l)if(!f||!f.ac(h,l))if(d=this.jf(h,l,!1))d.remove(a),d.te()&&(d.reset(),1E3>A.length&&A.push(d),this.cells[h][l]=null);if(f)for(h=f.left,e=f.right;h<= e;++h)for(l=f.top,m=f.bottom;l<=m;++l)b&&b.ac(h,l)||this.jf(h,l,!0).Zm(a)};d.prototype.ql=function(a,b,f,h,e){var l,m;a=this.jc(a);b=this.kc(b);f=this.jc(f);for(l=this.kc(h);a<=f;++a)for(h=b;h<=l;++h)(m=this.jf(a,h,!1))&&m.dump(e)};d.prototype.by=function(a){var b,f,h,e,l;b=a.left;h=a.top;f=a.right;for(e=a.bottom;b<=f;++b)for(a=h;a<=e;++a)if(l=this.jf(b,a,!1))l.Tg=!1};gb=d;var w=[];a.prototype.te=function(){return this.Ib.te()};a.prototype.Zm=function(a){this.Ib.add(a)};a.prototype.remove=function(a){this.Ib.remove(a)}; a.prototype.dump=function(a){Ca(a,this.Ib.Le())};ca=a;var A=[];l.prototype.te=function(){if(!this.Ib.length)return!0;if(this.Ib.length>this.Td.count())return!1;this.Hm();return!0};l.prototype.Zm=function(a){this.Td.contains(a)?(this.Td.remove(a),this.Td.te()&&(this.Mh=!1)):this.Ib.length?(this.Ib[this.Ib.length-1].Ld()>a.Ld()&&(this.Tg=!1),this.Ib.push(a)):(this.Ib.push(a),this.Tg=!0)};l.prototype.remove=function(a){this.Td.add(a);this.Mh=!0;30<=this.Td.count()&&this.Hm()};l.prototype.Hm=function(){this.Mh&& (this.Td.count()===this.Ib.length?this.reset():(Za(this.Ib,this.Td),this.Td.clear(),this.Mh=!1))};l.prototype.jw=function(){this.Tg||(this.Ib.sort(f),this.Tg=!0)};l.prototype.reset=function(){y(this.Ib);this.Tg=!0;this.Td.clear();this.Mh=!1};l.prototype.dump=function(a){this.Hm();this.jw();this.Ib.length&&a.push(this.Ib)};fa=l;var I="lighter xor copy destination-over source-in destination-in source-out destination-out source-atop destination-atop".split(" ");jb=function(a){return 0>=a||11<=a?"source-over": I[a-1]};kb=function(a,b,f){if(f)switch(a.Zb=f.ONE,a.Vb=f.ONE_MINUS_SRC_ALPHA,b){case 1:a.Zb=f.ONE;a.Vb=f.ONE;break;case 3:a.Zb=f.ONE;a.Vb=f.ZERO;break;case 4:a.Zb=f.ONE_MINUS_DST_ALPHA;a.Vb=f.ONE;break;case 5:a.Zb=f.DST_ALPHA;a.Vb=f.ZERO;break;case 6:a.Zb=f.ZERO;a.Vb=f.SRC_ALPHA;break;case 7:a.Zb=f.ONE_MINUS_DST_ALPHA;a.Vb=f.ZERO;break;case 8:a.Zb=f.ZERO;a.Vb=f.ONE_MINUS_SRC_ALPHA;break;case 9:a.Zb=f.DST_ALPHA;a.Vb=f.ONE_MINUS_SRC_ALPHA;break;case 10:a.Zb=f.ONE_MINUS_DST_ALPHA,a.Vb=f.SRC_ALPHA}}; lb=function(a){return Math.round(1E6*a)/1E6};mb=function(a,b){return"string"!==typeof a||"string"!==typeof b||a.length!==b.length?!1:a===b?!0:a.toLowerCase()===b.toLowerCase()};nb=function(a){a=a.target;return!a||a===document||a===window||document&&document.body&&a===document.body||mb(a.tagName,"canvas")?!0:!1}})();var kc="undefined"!==typeof Float32Array?Float32Array:Array;function lc(g){var k=new kc(3);g&&(k[0]=g[0],k[1]=g[1],k[2]=g[2]);return k} function mc(g){var k=new kc(16);g&&(k[0]=g[0],k[1]=g[1],k[2]=g[2],k[3]=g[3],k[4]=g[4],k[5]=g[5],k[6]=g[6],k[7]=g[7],k[8]=g[8],k[9]=g[9],k[10]=g[10],k[11]=g[11],k[12]=g[12],k[13]=g[13],k[14]=g[14],k[15]=g[15]);return k}function nc(g,k){k[0]=g[0];k[1]=g[1];k[2]=g[2];k[3]=g[3];k[4]=g[4];k[5]=g[5];k[6]=g[6];k[7]=g[7];k[8]=g[8];k[9]=g[9];k[10]=g[10];k[11]=g[11];k[12]=g[12];k[13]=g[13];k[14]=g[14];k[15]=g[15]} function oc(g,k){var c=k[0],p=k[1];k=k[2];g[0]*=c;g[1]*=c;g[2]*=c;g[3]*=c;g[4]*=p;g[5]*=p;g[6]*=p;g[7]*=p;g[8]*=k;g[9]*=k;g[10]*=k;g[11]*=k} function pc(g,k,c,p){p||(p=mc());var q,n,r,b,d,e,a,h,l=g[0],f=g[1];g=g[2];n=c[0];r=c[1];q=c[2];c=k[1];e=k[2];l===k[0]&&f===c&&g===e?(g=p,g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1):(c=l-k[0],e=f-k[1],a=g-k[2],h=1/Math.sqrt(c*c+e*e+a*a),c*=h,e*=h,a*=h,k=r*a-q*e,q=q*c-n*a,n=n*e-r*c,(h=Math.sqrt(k*k+q*q+n*n))?(h=1/h,k*=h,q*=h,n*=h):n=q=k=0,r=e*n-a*q,b=a*k-c*n,d=c*q-e*k,(h=Math.sqrt(r*r+b*b+d*d))?(h=1/h,r*=h,b*=h,d*=h):d=b=r=0, p[0]=k,p[1]=r,p[2]=c,p[3]=0,p[4]=q,p[5]=b,p[6]=e,p[7]=0,p[8]=n,p[9]=d,p[10]=a,p[11]=0,p[12]=-(k*l+q*f+n*g),p[13]=-(r*l+b*f+d*g),p[14]=-(c*l+e*f+a*g),p[15]=1)} (function(){function g(b,d,e){this.nf=/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent);this.height=this.width=0;this.Ea=!!e;this.Fk=this.li=!1;this.tm=0;this.Xl=1;this.Ho=1E3;this.Cz=(this.Ho-this.Xl)/32768;this.km=lc([0,0,100]);this.Zq=lc([0,0,0]);this.Ls=lc([0,1,0]);this.xj=lc([1,1,1]);this.Xp=!0;this.Vk=mc();this.Oc=mc();this.mn=mc();this.rm=mc();this.F=b;this.version=0===this.F.getParameter(this.F.VERSION).indexOf("WebGL 2")?2:1;this.Bq()}function k(b,d,e){this.F=b;this.dj= d;this.name=e;this.cd=b.getAttribLocation(d,"aPos");this.tf=b.getAttribLocation(d,"aTex");this.Xq=b.getUniformLocation(d,"matP");this.Rk=b.getUniformLocation(d,"matMV");this.bh=b.getUniformLocation(d,"opacity");this.rn=b.getUniformLocation(d,"colorFill");this.Yq=b.getUniformLocation(d,"samplerFront");this.Ei=b.getUniformLocation(d,"samplerBack");this.fg=b.getUniformLocation(d,"destStart");this.eg=b.getUniformLocation(d,"destEnd");this.Gi=b.getUniformLocation(d,"seconds");this.tn=b.getUniformLocation(d, "pixelWidth");this.sn=b.getUniformLocation(d,"pixelHeight");this.Di=b.getUniformLocation(d,"layerScale");this.Ci=b.getUniformLocation(d,"layerAngle");this.Hi=b.getUniformLocation(d,"viewOrigin");this.Fi=b.getUniformLocation(d,"scrollPos");this.Fx=!!(this.tn||this.sn||this.Gi||this.Ei||this.fg||this.eg||this.Di||this.Ci||this.Hi||this.Fi);this.hr=this.ir=-999;this.Uk=1;this.dr=this.cr=0;this.fr=this.br=this.$q=1;this.lr=this.kr=this.jr=this.nr=this.mr=this.er=0;this.ln=[];this.gr=mc();this.bh&&b.uniform1f(this.bh, 1);this.rn&&b.uniform4f(this.rn,1,1,1,1);this.Yq&&b.uniform1i(this.Yq,0);this.Ei&&b.uniform1i(this.Ei,1);this.fg&&b.uniform2f(this.fg,0,0);this.eg&&b.uniform2f(this.eg,1,1);this.Di&&b.uniform1f(this.Di,1);this.Ci&&b.uniform1f(this.Ci,0);this.Hi&&b.uniform2f(this.Hi,0,0);this.Fi&&b.uniform2f(this.Fi,0,0);this.Gi&&b.uniform1f(this.Gi,0);this.Tf=!1}function c(b,d){return b[0]===d[0]&&b[1]===d[1]&&b[2]===d[2]&&b[3]===d[3]&&b[4]===d[4]&&b[5]===d[5]&&b[6]===d[6]&&b[7]===d[7]&&b[8]===d[8]&&b[9]===d[9]&& b[10]===d[10]&&b[11]===d[11]&&b[12]===d[12]&&b[13]===d[13]&&b[14]===d[14]&&b[15]===d[15]}function p(b,d){this.type=b;this.B=d;this.F=d.F;this.Md=this.ic=this.Lr=0;this.da=this.kd=null;this.qs=[]}var q=mc();g.prototype.Bq=function(){var b=this.F,d;this.Rq=1;this.$f=this.Zf=null;this.bk=1;b.clearColor(0,0,0,0);b.clear(b.COLOR_BUFFER_BIT);b.enable(b.BLEND);b.blendFunc(b.ONE,b.ONE_MINUS_SRC_ALPHA);b.disable(b.CULL_FACE);b.disable(b.STENCIL_TEST);b.disable(b.DITHER);this.Ea?(b.enable(b.DEPTH_TEST),b.depthFunc(b.LEQUAL)): b.disable(b.DEPTH_TEST);this.Sq=b.ONE;this.Qq=b.ONE_MINUS_SRC_ALPHA;this.Vl=new Float32Array(8E3*(this.Ea?3:2));this.Il=new Float32Array(16E3);this.Vr=new Float32Array(32E3);this.Ln=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,this.Ln);b.bufferData(b.ARRAY_BUFFER,this.Vr.byteLength,b.DYNAMIC_DRAW);this.vj=Array(4);this.kj=Array(4);for(d=0;4>d;d++)this.vj[d]=b.createBuffer(),b.bindBuffer(b.ARRAY_BUFFER,this.vj[d]),b.bufferData(b.ARRAY_BUFFER,this.Vl.byteLength,b.DYNAMIC_DRAW),this.kj[d]=b.createBuffer(), b.bindBuffer(b.ARRAY_BUFFER,this.kj[d]),b.bufferData(b.ARRAY_BUFFER,this.Il.byteLength,b.DYNAMIC_DRAW);this.ie=0;this.Ix=b.createBuffer();b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,this.Ix);for(var e=new Uint16Array(12E3),a=d=0;12E3>d;)e[d++]=a,e[d++]=a+1,e[d++]=a+2,e[d++]=a,e[d++]=a+2,e[d++]=a+3,a+=4;b.bufferData(b.ELEMENT_ARRAY_BUFFER,e,b.STATIC_DRAW);this.Mn=this.zh=this.Me=0;this.Ua=[];d=this.Ea?"attribute highp vec3 aPos;\nattribute mediump vec2 aTex;\nvarying mediump vec2 vTex;\nuniform highp mat4 matP;\nuniform highp mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, aPos.z, 1.0);\n\tvTex = aTex;\n}": "attribute highp vec2 aPos;\nattribute mediump vec2 aTex;\nvarying mediump vec2 vTex;\nuniform highp mat4 matP;\nuniform highp mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tvTex = aTex;\n}";e=this.Sh({src:"varying mediump vec2 vTex;\nuniform lowp float opacity;\nuniform lowp sampler2D samplerFront;\nvoid main(void) {\n\tgl_FragColor = texture2D(samplerFront, vTex);\n\tgl_FragColor *= opacity;\n}"},d,"<default>");this.Ua.push(e);e=this.Sh({src:"uniform mediump sampler2D samplerFront;\nvarying lowp float opacity;\nvoid main(void) {\n\tgl_FragColor = texture2D(samplerFront, gl_PointCoord);\n\tgl_FragColor *= opacity;\n}"}, "attribute vec4 aPos;\nvarying float opacity;\nuniform mat4 matP;\nuniform mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tgl_PointSize = aPos.z;\n\topacity = aPos.w;\n}","<point>");this.Ua.push(e);e=this.Sh({src:"varying mediump vec2 vTex;\nuniform lowp sampler2D samplerFront;\nvoid main(void) {\n\tif (texture2D(samplerFront, vTex).a < 1.0)\n\t\tdiscard;\n}"},d,"<earlyz>");this.Ua.push(e);e=this.Sh({src:"uniform lowp vec4 colorFill;\nvoid main(void) {\n\tgl_FragColor = colorFill;\n}"}, d,"<fill>");this.Ua.push(e);for(var h in qc)qc.hasOwnProperty(h)&&this.Ua.push(this.Sh(qc[h],d,h));b.activeTexture(b.TEXTURE0);b.bindTexture(b.TEXTURE_2D,null);this.Ye=[];this.ge=0;this.Xb=!1;this.Rp=this.xi=-1;this.Fg=null;this.Fm=b.createFramebuffer();this.fk=this.rl=null;this.Dp=!1;this.Ea&&(this.fk=b.createRenderbuffer());this.yf=lc([0,0,0]);this.or=b.getParameter(b.ALIASED_POINT_SIZE_RANGE)[1];2048<this.or&&(this.or=2048);this.rc(0)};k.prototype.Ao=function(b){c(this.gr,b)||(nc(b,this.gr),this.F.uniformMatrix4fv(this.Rk, !1,b))};g.prototype.Sh=function(b,d,e){var a=this.F,h=a.createShader(a.FRAGMENT_SHADER);a.shaderSource(h,b.src);a.compileShader(h);if(!a.getShaderParameter(h,a.COMPILE_STATUS))throw b=a.getShaderInfoLog(h),a.deleteShader(h),Error("error compiling fragment shader: "+b);var l=a.createShader(a.VERTEX_SHADER);a.shaderSource(l,d);a.compileShader(l);if(!a.getShaderParameter(l,a.COMPILE_STATUS))throw b=a.getShaderInfoLog(l),a.deleteShader(h),a.deleteShader(l),Error("error compiling vertex shader: "+b);d= a.createProgram();a.attachShader(d,h);a.attachShader(d,l);a.linkProgram(d);if(!a.getProgramParameter(d,a.LINK_STATUS))throw b=a.getProgramInfoLog(d),a.deleteShader(h),a.deleteShader(l),a.deleteProgram(d),Error("error linking shader program: "+b);a.useProgram(d);a.deleteShader(h);a.deleteShader(l);h=new k(a,d,e);h.Dm=b.Dm||0;h.Em=b.Em||0;h.Qp=!!b.Qp;h.wd=!!b.wd;h.Bp=!!b.Bp;h.aa=b.aa||[];b=0;for(l=h.aa.length;b<l;b++)h.aa[b][1]=a.getUniformLocation(d,h.aa[b][0]),h.ln.push(0),a.uniform1f(h.aa[b][1], 0);return h};g.prototype.Rm=function(b){var d,e;d=0;for(e=this.Ua.length;d<e;d++)if(this.Ua[d].name===b)return d;return-1};g.prototype.Xr=function(b,d,e){var a=this.Oc,h=this.Vk,l=[0,0,0,0,0,0,0,0];l[0]=a[0]*b+a[4]*d+a[12];l[1]=a[1]*b+a[5]*d+a[13];l[2]=a[2]*b+a[6]*d+a[14];l[3]=a[3]*b+a[7]*d+a[15];l[4]=h[0]*l[0]+h[4]*l[1]+h[8]*l[2]+h[12]*l[3];l[5]=h[1]*l[0]+h[5]*l[1]+h[9]*l[2]+h[13]*l[3];l[6]=h[2]*l[0]+h[6]*l[1]+h[10]*l[2]+h[14]*l[3];l[7]=-l[2];0!==l[7]&&(l[7]=1/l[7],l[4]*=l[7],l[5]*=l[7],l[6]*=l[7], e[0]=(.5*l[4]+.5)*this.width,e[1]=(.5*l[5]+.5)*this.height)};g.prototype.Ee=function(b,d,e){if(this.width!==b||this.height!==d||e){this.Mf();e=this.F;this.width=b;this.height=d;e.viewport(0,0,b,d);pc(this.km,this.Zq,this.Ls,this.Oc);if(this.Ea){var a=-b/2;b=b/2;var h=d/2;d=-d/2;var l=this.Xl,f=this.Ho,t=this.Vk;t||(t=mc());var c=b-a,x=d-h,m=f-l;t[0]=2/c;t[1]=0;t[2]=0;t[3]=0;t[4]=0;t[5]=2/x;t[6]=0;t[7]=0;t[8]=0;t[9]=0;t[10]=-2/m;t[11]=0;t[12]=-(a+b)/c;t[13]=-(d+h)/x;t[14]=-(f+l)/m;t[15]=1;this.xj[0]= 1;this.xj[1]=1}else d=b/d,a=this.Xl,b=this.Ho,t=this.Vk,f=a*Math.tan(45*Math.PI/360),d*=f,h=-d,l=-f,t||(t=mc()),c=d-h,x=f-l,m=b-a,t[0]=2*a/c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*a/x,t[6]=0,t[7]=0,t[8]=(d+h)/c,t[9]=(f+l)/x,t[10]=-(b+a)/m,t[11]=-1,t[12]=0,t[13]=0,t[14]=-(b*a*2)/m,t[15]=0,a=[0,0],b=[0,0],this.Xr(0,0,a),this.Xr(1,1,b),this.xj[0]=1/(b[0]-a[0]),this.xj[1]=-1/(b[1]-a[1]);a=0;for(b=this.Ua.length;a<b;a++)h=this.Ua[a],h.Tf=!1,h.Xq&&(e.useProgram(h.dj),e.uniformMatrix4fv(h.Xq,!1,this.Vk));e.useProgram(this.Ua[this.xi].dj); e.bindTexture(e.TEXTURE_2D,null);e.activeTexture(e.TEXTURE1);e.bindTexture(e.TEXTURE_2D,null);e.activeTexture(e.TEXTURE0);this.$f=this.Zf=null;this.fk&&(e.bindFramebuffer(e.FRAMEBUFFER,this.Fm),e.bindRenderbuffer(e.RENDERBUFFER,this.fk),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,this.width,this.height),this.Dp||(e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,this.fk),this.Dp=!0),e.bindRenderbuffer(e.RENDERBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null), this.rl=null)}};g.prototype.Wd=function(){pc(this.km,this.Zq,this.Ls,this.Oc);oc(this.Oc,this.xj)};g.prototype.translate=function(b,d){if(0!==b||0!==d){this.yf[0]=b;this.yf[1]=d;this.yf[2]=0;var e=this.Oc,a=this.yf,h=a[0],l=a[1],a=a[2];e[12]=e[0]*h+e[4]*l+e[8]*a+e[12];e[13]=e[1]*h+e[5]*l+e[9]*a+e[13];e[14]=e[2]*h+e[6]*l+e[10]*a+e[14];e[15]=e[3]*h+e[7]*l+e[11]*a+e[15]}};g.prototype.scale=function(b,d){if(1!==b||1!==d)this.yf[0]=b,this.yf[1]=d,this.yf[2]=1,oc(this.Oc,this.yf)};g.prototype.Yn=function(b){if(0!== b){var d=this.Oc,e,a=Math.sin(b);b=Math.cos(b);var h=d[0],l=d[1],f=d[2],t=d[3],c=d[4],x=d[5],m=d[6],u=d[7];e?d!==e&&(e[8]=d[8],e[9]=d[9],e[10]=d[10],e[11]=d[11],e[12]=d[12],e[13]=d[13],e[14]=d[14],e[15]=d[15]):e=d;e[0]=h*b+c*a;e[1]=l*b+x*a;e[2]=f*b+m*a;e[3]=t*b+u*a;e[4]=h*-a+c*b;e[5]=l*-a+x*b;e[6]=f*-a+m*b;e[7]=t*-a+u*b}};g.prototype.Cd=function(){if(!c(this.mn,this.Oc)){var b=this.Bc();b.type=5;b.da?nc(this.Oc,b.da):b.da=mc(this.Oc);nc(this.Oc,this.mn);this.Xb=!1}};g.prototype.yl=function(b){this.Ea&& (32760<b&&(b=32760),this.tm=this.km[2]-this.Xl-b*this.Cz)};p.prototype.Tv=function(){var b=this.F,d=this.B;0!==this.ic?(b.depthMask(!0),b.colorMask(!1,!1,!1,!1),b.disable(b.BLEND),b.bindFramebuffer(b.FRAMEBUFFER,d.Fm),b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,null,0),b.clear(b.DEPTH_BUFFER_BIT),b.bindFramebuffer(b.FRAMEBUFFER,null),d.Fk=!0):(b.depthMask(!1),b.colorMask(!0,!0,!0,!0),b.enable(b.BLEND),d.Fk=!1)};p.prototype.Xv=function(){this.F.bindTexture(this.F.TEXTURE_2D, this.kd)};p.prototype.Yv=function(){var b=this.F;b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_2D,this.kd);b.activeTexture(b.TEXTURE0)};p.prototype.Uv=function(){var b=this.Lr,d=this.B;d.bk=b;d=d.Fg;d.bh&&d.Uk!==b&&(d.Uk=b,this.F.uniform1f(d.bh,b))};p.prototype.Nv=function(){this.F.drawElements(this.F.TRIANGLES,this.Md,this.F.UNSIGNED_SHORT,this.ic)};p.prototype.Qv=function(){this.F.blendFunc(this.ic,this.Md)};p.prototype.Zv=function(){var b,d,e,a=this.B.Ua,h=this.B.Rp;b=0;for(d=a.length;b< d;b++)e=a[b],b===h&&e.Rk?(e.Ao(this.da),e.Tf=!0):e.Tf=!1;nc(this.da,this.B.rm)};p.prototype.Ov=function(){var b=this.F,d=this.B;this.kd?(d.$f===this.kd&&(b.activeTexture(b.TEXTURE1),b.bindTexture(b.TEXTURE_2D,null),d.$f=null,b.activeTexture(b.TEXTURE0)),b.bindFramebuffer(b.FRAMEBUFFER,d.Fm),d.Fk||b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,this.kd,0)):(d.Ea||b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,null,0),b.bindFramebuffer(b.FRAMEBUFFER,null))}; p.prototype.Kv=function(){var b=this.F,d=this.ic;0===d?(b.clearColor(this.da[0],this.da[1],this.da[2],this.da[3]),b.clear(b.COLOR_BUFFER_BIT)):1===d?(b.enable(b.SCISSOR_TEST),b.scissor(this.da[0],this.da[1],this.da[2],this.da[3]),b.clearColor(0,0,0,0),b.clear(b.COLOR_BUFFER_BIT),b.disable(b.SCISSOR_TEST)):b.clear(b.DEPTH_BUFFER_BIT)};p.prototype.Sv=function(){var b=this.F;0!==this.ic?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST)};p.prototype.Mv=function(){var b=this.F,d=this.B;d.Ea&&b.disable(b.DEPTH_TEST); var e=d.Ua[1];b.useProgram(e.dj);!e.Tf&&e.Rk&&(e.Ao(d.rm),e.Tf=!0);b.enableVertexAttribArray(e.cd);b.bindBuffer(b.ARRAY_BUFFER,d.Ln);b.vertexAttribPointer(e.cd,4,b.FLOAT,!1,0,0);b.drawArrays(b.POINTS,this.ic/4,this.Md);e=d.Fg;b.useProgram(e.dj);0<=e.cd&&(b.enableVertexAttribArray(e.cd),b.bindBuffer(b.ARRAY_BUFFER,d.vj[d.ie]),b.vertexAttribPointer(e.cd,d.Ea?3:2,b.FLOAT,!1,0,0));0<=e.tf&&(b.enableVertexAttribArray(e.tf),b.bindBuffer(b.ARRAY_BUFFER,d.kj[d.ie]),b.vertexAttribPointer(e.tf,2,b.FLOAT,!1, 0,0));d.Ea&&b.enable(b.DEPTH_TEST)};p.prototype.Vv=function(){var b=this.F,d=this.B,e=d.Ua[this.ic];d.Rp=this.ic;d.Fg=e;b.useProgram(e.dj);!e.Tf&&e.Rk&&(e.Ao(d.rm),e.Tf=!0);e.bh&&e.Uk!==d.bk&&(e.Uk=d.bk,b.uniform1f(e.bh,d.bk));0<=e.cd&&(b.enableVertexAttribArray(e.cd),b.bindBuffer(b.ARRAY_BUFFER,d.vj[d.ie]),b.vertexAttribPointer(e.cd,d.Ea?3:2,b.FLOAT,!1,0,0));0<=e.tf&&(b.enableVertexAttribArray(e.tf),b.bindBuffer(b.ARRAY_BUFFER,d.kj[d.ie]),b.vertexAttribPointer(e.tf,2,b.FLOAT,!1,0,0))};p.prototype.Rv= function(){var b=this.da;this.F.uniform4f(this.B.Fg.rn,b[0],b[1],b[2],b[3])};p.prototype.Wv=function(){var b,d,e=this.B.Fg,a=this.F;b=this.da;e.Ei&&this.B.$f!==this.kd&&(a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.kd),this.B.$f=this.kd,a.activeTexture(a.TEXTURE0));var h=b[0];e.tn&&h!==e.ir&&(e.ir=h,a.uniform1f(e.tn,h));h=b[1];e.sn&&h!==e.hr&&(e.hr=h,a.uniform1f(e.sn,h));h=b[2];d=b[3];!e.fg||h===e.cr&&d===e.dr||(e.cr=h,e.dr=d,a.uniform2f(e.fg,h,d));h=b[4];d=b[5];!e.eg||h===e.$q&&d=== e.br||(e.$q=h,e.br=d,a.uniform2f(e.eg,h,d));h=b[6];e.Di&&h!==e.fr&&(e.fr=h,a.uniform1f(e.Di,h));h=b[7];e.Ci&&h!==e.er&&(e.er=h,a.uniform1f(e.Ci,h));h=b[8];d=b[9];!e.Hi||h===e.mr&&d===e.nr||(e.mr=h,e.nr=d,a.uniform2f(e.Hi,h,d));h=b[10];d=b[11];!e.Fi||h===e.jr&&d===e.kr||(e.jr=h,e.kr=d,a.uniform2f(e.Fi,h,d));h=b[12];e.Gi&&h!==e.lr&&(e.lr=h,a.uniform1f(e.Gi,h));if(e.aa.length)for(b=0,d=e.aa.length;b<d;b++)h=this.qs[b],h!==e.ln[b]&&(e.ln[b]=h,a.uniform1f(e.aa[b][1],h))};g.prototype.Bc=function(){this.ge=== this.Ye.length&&this.Ye.push(new p(0,this));return this.Ye[this.ge++]};g.prototype.Mf=function(){if(0!==this.ge&&!this.F.isContextLost()){var b=this.F;0<this.Mn&&(b.bindBuffer(b.ARRAY_BUFFER,this.Ln),b.bufferSubData(b.ARRAY_BUFFER,0,this.Vr.subarray(0,this.Mn)),d&&0<=d.cd&&"<point>"===d.name&&b.vertexAttribPointer(d.cd,4,b.FLOAT,!1,0,0));if(0<this.Me){var d=this.Fg;b.bindBuffer(b.ARRAY_BUFFER,this.vj[this.ie]);b.bufferSubData(b.ARRAY_BUFFER,0,this.Vl.subarray(0,this.Me));d&&0<=d.cd&&"<point>"!==d.name&& b.vertexAttribPointer(d.cd,this.Ea?3:2,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,this.kj[this.ie]);b.bufferSubData(b.ARRAY_BUFFER,0,this.Il.subarray(0,this.zh));d&&0<=d.tf&&"<point>"!==d.name&&b.vertexAttribPointer(d.tf,2,b.FLOAT,!1,0,0)}for(var e,b=0,d=this.ge;b<d;b++)switch(e=this.Ye[b],e.type){case 1:e.Nv();break;case 2:e.Xv();break;case 3:e.Uv();break;case 4:e.Qv();break;case 5:e.Zv();break;case 6:e.Ov();break;case 7:e.Kv();break;case 8:e.Mv();break;case 9:e.Vv();break;case 10:e.Wv();break; case 11:e.Yv();break;case 12:e.Rv();break;case 13:e.Sv();break;case 14:e.Tv()}this.Mn=this.zh=this.Me=this.ge=0;this.Fk=this.Xb=!1;this.ie++;4<=this.ie&&(this.ie=0)}};g.prototype.mg=function(b){if(b!==this.Rq&&!this.li){var d=this.Bc();d.type=3;this.Rq=d.Lr=b;this.Xb=!1}};g.prototype.Cc=function(b){if(b!==this.Zf){var d=this.Bc();d.type=2;this.Zf=d.kd=b;this.Xb=!1}};g.prototype.wf=function(b,d){if((b!==this.Sq||d!==this.Qq)&&!this.li){var e=this.Bc();e.type=4;e.ic=b;e.Md=d;this.Sq=b;this.Qq=d;this.Xb= !1}};g.prototype.ds=function(){this.wf(this.F.ONE,this.F.ONE_MINUS_SRC_ALPHA)};g.prototype.Vi=function(b,d,e,a,h,l,f,t){15992<=this.Me&&this.Mf();var c=this.Me,x=this.zh,m=this.Vl,u=this.Il,g=this.tm;if(this.Xb)this.Ye[this.ge-1].Md+=6;else{var k=this.Bc();k.type=1;k.ic=this.Ea?c:c/2*3;k.Md=6;this.Xb=!0}this.Ea?(m[c++]=b,m[c++]=d,m[c++]=g,m[c++]=e,m[c++]=a,m[c++]=g,m[c++]=h,m[c++]=l,m[c++]=g,m[c++]=f,m[c++]=t,m[c++]=g):(m[c++]=b,m[c++]=d,m[c++]=e,m[c++]=a,m[c++]=h,m[c++]=l,m[c++]=f,m[c++]=t);u[x++]= 0;u[x++]=0;u[x++]=1;u[x++]=0;u[x++]=1;u[x++]=1;u[x++]=0;u[x++]=1;this.Me=c;this.zh=x};g.prototype.Ud=function(b,d,e,a,h,l,f,t,c){15992<=this.Me&&this.Mf();var x=this.Me,m=this.zh,u=this.Vl,g=this.Il,k=this.tm;if(this.Xb)this.Ye[this.ge-1].Md+=6;else{var p=this.Bc();p.type=1;p.ic=this.Ea?x:x/2*3;p.Md=6;this.Xb=!0}var p=c.left,q=c.top,r=c.right;c=c.bottom;this.Ea?(u[x++]=b,u[x++]=d,u[x++]=k,u[x++]=e,u[x++]=a,u[x++]=k,u[x++]=h,u[x++]=l,u[x++]=k,u[x++]=f,u[x++]=t,u[x++]=k):(u[x++]=b,u[x++]=d,u[x++]=e, u[x++]=a,u[x++]=h,u[x++]=l,u[x++]=f,u[x++]=t);g[m++]=p;g[m++]=q;g[m++]=r;g[m++]=q;g[m++]=r;g[m++]=c;g[m++]=p;g[m++]=c;this.Me=x;this.zh=m};g.prototype.rc=function(b){if(this.xi!==b){if(!this.Ua[b]){if(0===this.xi)return;b=0}var d=this.Bc();d.type=9;this.xi=d.ic=b;this.Xb=!1}};g.prototype.Ti=function(b){b=this.Ua[b];return!(!b.fg&&!b.eg)};g.prototype.Qn=function(b){b=this.Ua[b];return!!(b.fg||b.eg||b.Qp)};g.prototype.Pn=function(b){return this.Ua[b].wd};g.prototype.Gy=function(b){b=this.Ua[b];return 0!== b.Dm||0!==b.Em};g.prototype.ix=function(b){return this.Ua[b].Dm};g.prototype.jx=function(b){return this.Ua[b].Em};g.prototype.kx=function(b,d){return this.Ua[b].aa[d][2]};g.prototype.ol=function(b){return this.Ua[b].Bp};g.prototype.uh=function(b,d,e,a,h,l,f,t,c,x,m,u,g,k,p){var q=this.Ua[this.xi],r,n;if(q.Fx||p.length){r=this.Bc();r.type=10;r.da?nc(this.Oc,r.da):r.da=mc();n=r.da;n[0]=d;n[1]=e;n[2]=a;n[3]=h;n[4]=l;n[5]=f;n[6]=t;n[7]=c;n[8]=x;n[9]=m;n[10]=u;n[11]=g;n[12]=k;q.Ei?r.kd=b:r.kd=null;if(p.length)for(e= r.qs,e.length=p.length,b=0,d=p.length;b<d;b++)e[b]=p[b];this.Xb=!1}};g.prototype.clear=function(b,d,e,a){var h=this.Bc();h.type=7;h.ic=0;h.da||(h.da=mc());h.da[0]=b;h.da[1]=d;h.da[2]=e;h.da[3]=a;this.Xb=!1};g.prototype.clearRect=function(b,d,e,a){if(!(0>e||0>a)){var h=this.Bc();h.type=7;h.ic=1;h.da||(h.da=mc());h.da[0]=b;h.da[1]=d;h.da[2]=e;h.da[3]=a;this.Xb=!1}};g.prototype.js=function(b){if(this.Ea&&(b=!!b,this.li!==b)){var d=this.Bc();d.type=14;d.ic=b?1:0;this.Xb=!1;this.li=b;this.rl=null;this.li? this.rc(2):this.rc(0)}};g.prototype.gs=function(b){if(this.Ea){var d=this.Bc();d.type=13;d.ic=b?1:0;this.Xb=!1}};g.prototype.jq=function(){nc(this.mn,q);this.Wd();this.Cd();var b=this.width/2,d=this.height/2;this.Vi(-b,d,b,d,b,-d,-b,-d);nc(q,this.Oc);this.Cd()};g.prototype.es=function(b,d,e){this.rc(3);var a=this.Bc();a.type=12;a.da||(a.da=mc());a.da[0]=b;a.da[1]=d;a.da[2]=e;a.da[3]=1;this.Xb=!1};g.prototype.gz=function(){this.rc(0)};g.prototype.Ry=function(){this.rc(2)};g.prototype.Fy=function(){this.Mf(); this.F.flush()};var n=[],r={};g.prototype.Cv=function(){y(n);r={}};g.prototype.ah=function(b,d,e,a){d=!!d;e=!!e;var h=b.src+","+d+","+e+(d?",undefined":""),l=null;if("undefined"!==typeof b.src&&r.hasOwnProperty(h))return l=r[h],l.Pj++,l;this.Mf();var f=this.F,t=ma(b.width)&&ma(b.height),l=f.createTexture();f.bindTexture(f.TEXTURE_2D,l);f.pixelStorei(f.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);var c=f.RGBA,x=f.RGBA,m=f.UNSIGNED_BYTE;if(a&&!this.nf)switch(a){case 1:x=c=f.RGB;break;case 2:m=f.UNSIGNED_SHORT_4_4_4_4; break;case 3:m=f.UNSIGNED_SHORT_5_5_5_1;break;case 4:x=c=f.RGB,m=f.UNSIGNED_SHORT_5_6_5}if(1===this.version&&!t&&d){a=document.createElement("canvas");a.width=na(b.width);a.height=na(b.height);var u=a.getContext("2d");"undefined"!==typeof u.imageSmoothingEnabled?u.imageSmoothingEnabled=e:(u.webkitImageSmoothingEnabled=e,u.mozImageSmoothingEnabled=e,u.msImageSmoothingEnabled=e);u.drawImage(b,0,0,b.width,b.height,0,0,a.width,a.height);f.texImage2D(f.TEXTURE_2D,0,c,x,m,a)}else f.texImage2D(f.TEXTURE_2D, 0,c,x,m,b);d?(f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_S,f.REPEAT),f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_T,f.REPEAT)):(f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_S,f.CLAMP_TO_EDGE),f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_T,f.CLAMP_TO_EDGE));e?(f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MAG_FILTER,f.LINEAR),(t||2<=this.version)&&this.Xp?(f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER,f.LINEAR_MIPMAP_LINEAR),f.generateMipmap(f.TEXTURE_2D)):f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER, f.LINEAR)):(f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MAG_FILTER,f.NEAREST),f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER,f.NEAREST));f.bindTexture(f.TEXTURE_2D,null);this.Zf=null;l.Df=b.width;l.Cf=b.height;l.Pj=1;l.Hp=h;n.push(l);return r[h]=l};g.prototype.Yc=function(b,d,e){var a;this.Mf();var h=this.F;this.nf&&(a=!1);var l=h.createTexture();h.bindTexture(h.TEXTURE_2D,l);h.texImage2D(h.TEXTURE_2D,0,h.RGBA,b,d,0,h.RGBA,a?h.UNSIGNED_SHORT_4_4_4_4:h.UNSIGNED_BYTE,null);h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE);h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE);h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,e?h.LINEAR:h.NEAREST);h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,e?h.LINEAR:h.NEAREST);h.bindTexture(h.TEXTURE_2D,null);this.Zf=null;l.Df=b;l.Cf=d;n.push(l);return l};g.prototype.deleteTexture=function(b){b&&("undefined"!==typeof b.Pj&&1<b.Pj?b.Pj--:(this.Mf(),b===this.Zf&&(this.F.bindTexture(this.F.TEXTURE_2D,null),this.Zf=null),b===this.$f&&(this.F.activeTexture(this.F.TEXTURE1), this.F.bindTexture(this.F.TEXTURE_2D,null),this.F.activeTexture(this.F.TEXTURE0),this.$f=null),Ea(n,b),"undefined"!==typeof b.Hp&&delete r[b.Hp],this.F.deleteTexture(b)))};g.prototype.gd=function(b){if(b!==this.rl){var d=this.Bc();d.type=6;this.rl=d.kd=b;this.Xb=!1}};ob=g})(); (function(){function g(a){if(a&&(a.getContext||a.dc)&&!a.c2runtime){a.c2runtime=this;var b=this;this.Lc=(this.Gk=/crosswalk/i.test(navigator.userAgent)||/xwalk/i.test(navigator.userAgent)||!("undefined"===typeof window.c2isCrosswalk||!window.c2isCrosswalk))||"undefined"!==typeof window.device&&("undefined"!==typeof window.device.cordova||"undefined"!==typeof window.device.phonegap)||"undefined"!==typeof window.c2iscordova&&window.c2iscordova;this.Ob=!!a.dc;this.Iq="undefined"!==typeof window.AppMobi|| this.Ob;this.bd=!!window.c2cocoonjs;this.sd=!!window.c2ejecta;this.bd&&(CocoonJS.App.onSuspended.addEventListener(function(){b.setSuspended(!0)}),CocoonJS.App.onActivated.addEventListener(function(){b.setSuspended(!1)}));this.sd&&(document.addEventListener("pagehide",function(){b.setSuspended(!0)}),document.addEventListener("pageshow",function(){b.setSuspended(!1)}),document.addEventListener("resize",function(){b.setSize(window.innerWidth,window.innerHeight)}));this.hb=this.Ob||this.bd||this.sd;this.ni= /edge\//i.test(navigator.userAgent);this.nf=(/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent)||/iemobile/i.test(navigator.userAgent))&&!this.ni;this.Kq=/tizen/i.test(navigator.userAgent);this.Dk=/android/i.test(navigator.userAgent)&&!this.Kq&&!this.nf&&!this.ni;this.Oq=(/iphone/i.test(navigator.userAgent)||/ipod/i.test(navigator.userAgent))&&!this.nf&&!this.ni;this.Vx=/ipad/i.test(navigator.userAgent);this.Vg=this.Oq||this.Vx||this.sd;this.an=(/chrome/i.test(navigator.userAgent)|| /chromium/i.test(navigator.userAgent))&&!this.nf&&!this.ni;this.Hq=/amazonwebappplatform/i.test(navigator.userAgent);this.Ox=/firefox/i.test(navigator.userAgent);this.Rx=/safari/i.test(navigator.userAgent)&&!this.an&&!this.nf&&!this.ni;this.Sx=/windows/i.test(navigator.userAgent);this.oi="undefined"!==typeof window.c2nodewebkit||"undefined"!==typeof window.c2nwjs||/nodewebkit/i.test(navigator.userAgent)||/nwjs/i.test(navigator.userAgent);this.Mq=!("undefined"===typeof window.c2isWindows8||!window.c2isWindows8); this.Ux=!("undefined"===typeof window.c2isWindows8Capable||!window.c2isWindows8Capable);this.pf=!("undefined"===typeof window.c2isWindowsPhone8||!window.c2isWindowsPhone8);this.hn=!("undefined"===typeof window.c2isWindowsPhone81||!window.c2isWindowsPhone81);this.Hk=!!window.cr_windows10;this.Lq=this.Mq||this.Ux||this.hn||this.Hk;this.Mx=!("undefined"===typeof window.c2isBlackberry10||!window.c2isBlackberry10);this.Ek=this.Dk&&!this.an&&!this.Gk&&!this.Ox&&!this.Hq&&!this.hb;this.devicePixelRatio= 1;this.Og=this.Lc||this.Gk||this.Iq||this.bd||this.Dk||this.Vg||this.pf||this.hn||this.Mx||this.Kq||this.sd;this.Og||(this.Og=/(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent));this.ri=!!(this.Vg&&this.Lc&&window.webkit);"undefined"===typeof cr_is_preview||this.oi||"?nw"!==window.location.search&&!/nodewebkit/i.test(navigator.userAgent)&&!/nwjs/i.test(navigator.userAgent)||(this.oi=!0);this.canvas=a;this.Jp=document.getElementById("c2canvasdiv"); this.B=this.F=null;this.Sm="(unavailable)";this.Ea=!1;this.Kf=0;this.Ka=null;this.ok=!1;this.Dr=this.Er=0;this.canvas.oncontextmenu=function(a){a.preventDefault&&a.preventDefault();return!1};this.canvas.onselectstart=function(a){a.preventDefault&&a.preventDefault();return!1};this.canvas.ontouchstart=function(a){a.preventDefault&&a.preventDefault();return!1};this.Ob&&(window.c2runtime=this);this.oi&&(window.ondragover=function(a){a.preventDefault();return!1},window.ondrop=function(a){a.preventDefault(); return!1},window.nwgui&&window.nwgui.App.clearCache&&window.nwgui.App.clearCache());this.Ek&&"undefined"!==typeof jQuery&&jQuery("canvas").parents("*").css("overflow","visible");this.width=a.width;this.height=a.height;this.L=this.width;this.K=this.height;this.$j=this.width;this.Uh=this.height;this.Zg=window.innerWidth;this.Yg=window.innerHeight;this.na=!0;this.qi=!1;Date.now||(Date.now=function(){return+new Date});this.plugins=[];this.types={};this.A=[];this.Pa=[];this.pn={};this.td=[];this.Cm={}; this.ne=[];this.tg=[];this.Pl=[];this.pv=[];this.qv=[];this.xs=null;this.Hf={};this.cn=this.lf=!1;this.Mc=0;this.bn=this.gn=!1;this.qd=[];this.mi=!1;this.Ok=this.bo="";this.Ab=null;this.ue="";this.ij=this.us=!1;this.nk=[];this.Jf=this.gf=0;this.tr=30;this.qm=this.Ii=0;this.sg=1;this.wb=new cb;this.Ne=new cb;this.Yk=this.rk=this.Pf=this.pj=this.bg=this.Im=this.Kk=0;this.Ef=null;this.ym=[];this.Bm=[];this.ik=-1;this.un=[[]];this.wo=this.Sk=0;this.pl(null);this.Ji=[];this.Ki=-1;this.Yh=this.xr=this.Ni= 0;this.jj=[];this.to=this.Sn=-1;this.Wg=!0;this.Bi=0;this.pi=!1;this.jz=0;this.Ag=null;this.Nc=this.vq=!1;this.Cr=new da;this.Bn=new da;this.Cn=new da;this.Un=[];this.zd=new eb([]);this.ro=new eb([]);this.Ue=[];this.gi={};this.cf={};this.Te={};this.Fh={};this.Ep={};this.Wq=this.Nk=this.ib=this.xb=this.Vq=this.Mk=this.za=null;this.Dh=this.jn=!1;this.Jm=[null,null];this.Qf=0;this.Gm="";this.ze={};this.fj=this.rf=null;this.ws="";this.Xk=[];this.Qy()}}function k(a,b){return 128>=b?a[3]:256>=b?a[2]:512>= b?a[1]:a[0]}function c(){try{return!!window.indexedDB}catch(a){return!1}}function p(a){a.target.result.createObjectStore("saves",{keyPath:"slot"})}function q(a,b,f,h){try{var e=indexedDB.open("_C2SaveStates");e.onupgradeneeded=p;e.onerror=h;e.onsuccess=function(e){e=e.target.result;e.onerror=h;e.transaction(["saves"],"readwrite").objectStore("saves").put({slot:a,data:b}).onsuccess=f}}catch(l){h(l)}}function n(a,b,f){try{var h=indexedDB.open("_C2SaveStates");h.onupgradeneeded=p;h.onerror=f;h.onsuccess= function(h){h=h.target.result;h.onerror=f;var e=h.transaction(["saves"]).objectStore("saves").get(a);e.onsuccess=function(){e.result?b(e.result.data):b(null)}}}catch(e){f(e)}}function r(){ga("Reloading for continuous preview");window.c2cocoonjs?CocoonJS.App.reload():-1<window.location.search.indexOf("continuous")?window.location.reload(!0):window.location=window.location+"?continuous"}function b(a){var b,f={};for(b in a)!a.hasOwnProperty(b)||a[b]instanceof da||a[b]&&"undefined"!==typeof a[b].IA|| "spriteCreatedDestroyCallback"!==b&&(f[b]=a[b]);return f}var d=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame;g.prototype.Qy=function(){var a=this;if(this.ri)this.cq("data.js",function(b){a.Ai(JSON.parse(b))},function(){alert("Error fetching data.js")});else{var b;this.pf?b=new ActiveXObject("Microsoft.XMLHTTP"):b=new XMLHttpRequest;var f="data.js";if(this.Mq||this.pf||this.hn||this.Hk)f= "data.json";b.open("GET",f,!0);var h=!1;if(!this.hb&&"response"in b&&"responseType"in b)try{b.responseType="json",h="json"===b.responseType}catch(e){h=!1}if(!h&&"responseType"in b)try{b.responseType="text"}catch(l){}if("overrideMimeType"in b)try{b.overrideMimeType("application/json; charset=utf-8")}catch(m){}this.pf?b.onreadystatechange=function(){4===b.readyState&&a.Ai(JSON.parse(b.responseText))}:(b.onload=function(){if(h)a.Ai(b.response);else if(a.sd){var f=b.responseText,f=f.substr(f.indexOf("{")); a.Ai(JSON.parse(f))}else a.Ai(JSON.parse(b.responseText))},b.onerror=function(a){ha("Error requesting "+f+":");ha(a)});b.send()}};g.prototype.Jx=function(){var a=this,b,f,h,e,l,m,d,t,c;this.Xf=(!this.hb||this.sd||this.Lc)&&this.xz&&!this.Ek;0===this.nc&&this.Vg&&(this.Xf=!1);this.devicePixelRatio=this.Xf?window.devicePixelRatio||window.webkitDevicePixelRatio||window.mozDevicePixelRatio||window.msDevicePixelRatio||1:1;this.Sb();0<this.nc&&this.setSize(window.innerWidth,window.innerHeight,!0);this.canvas.addEventListener("webglcontextlost", function(b){b.preventDefault();a.hy();ga("[Construct 2] WebGL context lost");window.cr_setSuspended(!0)},!1);this.canvas.addEventListener("webglcontextrestored",function(){a.B.Bq();a.B.Ee(a.B.width,a.B.height,!0);a.xb=null;a.ib=null;a.Jm[0]=null;a.Jm[1]=null;a.iy();a.na=!0;ga("[Construct 2] WebGL context restored");window.cr_setSuspended(!1)},!1);try{this.hw&&(this.bd||this.sd||!this.hb)&&(b={alpha:!0,depth:!1,antialias:!1,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!0},this.F= this.canvas.getContext("webgl2",b)||this.canvas.getContext("webgl",b)||this.canvas.getContext("experimental-webgl",b))}catch(u){}if(this.F){if(b=this.F.getExtension("WEBGL_debug_renderer_info"))this.Sm=this.F.getParameter(b.UNMASKED_RENDERER_WEBGL)+" ["+this.F.getParameter(b.UNMASKED_VENDOR_WEBGL)+"]";this.Ea&&(this.Sm+=" [front-to-back enabled]");this.hb||(this.Qb=document.createElement("canvas"),jQuery(this.Qb).appendTo(this.canvas.parentNode),this.Qb.oncontextmenu=function(){return!1},this.Qb.onselectstart= function(){return!1},this.Qb.width=Math.round(this.$j*this.devicePixelRatio),this.Qb.height=Math.round(this.Uh*this.devicePixelRatio),jQuery(this.Qb).css({width:this.$j+"px",height:this.Uh+"px"}),this.Wr(),this.In=this.Qb.getContext("2d"));this.B=new ob(this.F,this.Og,this.Ea);this.B.Ee(this.canvas.width,this.canvas.height);this.B.Xp=0!==this.$v;this.Ka=null;b=0;for(f=this.A.length;b<f;b++)for(l=this.A[b],h=0,e=l.T.length;h<e;h++)d=l.T[h],d.lb=this.B.Rm(d.id),d.wd=this.B.Pn(d.lb),this.Dh=this.Dh|| this.B.Ti(d.lb);b=0;for(f=this.td.length;b<f;b++){t=this.td[b];h=0;for(e=t.T.length;h<e;h++)d=t.T[h],d.lb=this.B.Rm(d.id),d.wd=this.B.Pn(d.lb);t.Bd();h=0;for(e=t.Y.length;h<e;h++){c=t.Y[h];l=0;for(m=c.T.length;l<m;l++)d=c.T[l],d.lb=this.B.Rm(d.id),d.wd=this.B.Pn(d.lb),this.Dh=this.Dh||this.B.Ti(d.lb);c.Bd()}}}else{if(0<this.nc&&this.Ob){this.canvas=null;document.oncontextmenu=function(){return!1};document.onselectstart=function(){return!1};this.Ka=AppMobi.canvas.getContext("2d");try{this.Ka.samplingMode= this.Ga?"smooth":"sharp",this.Ka.globalScale=1,this.Ka.HTML5CompatibilityMode=!0,this.Ka.imageSmoothingEnabled=this.Ga}catch(x){}0!==this.width&&0!==this.height&&(this.Ka.width=this.width,this.Ka.height=this.height)}this.Ka||(this.bd?(b={antialias:!!this.Ga,alpha:!0},this.Ka=this.canvas.getContext("2d",b)):(b={alpha:!0},this.Ka=this.canvas.getContext("2d",b)),this.xl(this.Ka,this.Ga));this.In=this.Qb=null}this.Es=function(b){a.mb(!1,b)};window==window.top||this.hb||this.Lq||this.pf||(document.addEventListener("mousedown", function(){window.focus()},!0),document.addEventListener("touchstart",function(){window.focus()},!0));"undefined"!==typeof cr_is_preview&&(this.bd&&console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"),-1<window.location.search.indexOf("continuous")&&(ga("Reloading for continuous preview"),this.Ok="__c2_continuouspreview",this.ij=!0),this.wy&&!this.Og&&(jQuery(window).focus(function(){a.setSuspended(!1)}),jQuery(window).blur(function(){var b=window.parent;b&&b.document.hasFocus()||a.setSuspended(!0)}))); window.addEventListener("blur",function(){a.kh()});this.hb||(b=function(a){if(nb(a)&&document.activeElement&&document.activeElement!==document.getElementsByTagName("body")[0]&&document.activeElement.blur)try{document.activeElement.blur()}catch(b){}},"undefined"!==typeof PointerEvent?document.addEventListener("pointerdown",b):window.navigator.msPointerEnabled?document.addEventListener("MSPointerDown",b):document.addEventListener("touchstart",b),document.addEventListener("mousedown",b));0===this.nc&& this.Xf&&1<this.devicePixelRatio&&this.setSize(this.Cb,this.Bb,!0);this.Is();this.Cx();this.go();this.U={}};g.prototype.setSize=function(a,b,f){var h=0,e=0,l=0,m=0,m=0;if(this.Zg!==a||this.Yg!==b||f){this.Zg=a;this.Yg=b;var d=this.nc;if((l=(document.mozFullScreen||document.webkitIsFullScreen||!!document.msFullscreenElement||document.fullScreen||this.pi)&&!this.Lc)||0!==this.nc||f)l&&0<this.Qf&&(d=this.Qf),f=this.devicePixelRatio,4<=d?(l=this.Cb/this.Bb,a/b>l?(l*=b,5===d?(m=l*f/this.Cb,1<m?m=Math.floor(m): 1>m&&(m=1/Math.ceil(1/m)),l=this.Cb*m/f,m=this.Bb*m/f,h=(a-l)/2,e=(b-m)/2,a=l,b=m):(h=(a-l)/2,a=l)):(m=a/l,5===d?(m=m*f/this.Bb,1<m?m=Math.floor(m):1>m&&(m=1/Math.ceil(1/m)),l=this.Cb*m/f,m=this.Bb*m/f,h=(a-l)/2,e=(b-m)/2,a=l):e=(b-m)/2,b=m)):this.oi&&this.pi&&0===this.kq&&(h=Math.floor((a-this.Cb)/2),e=Math.floor((b-this.Bb)/2),a=this.Cb,b=this.Bb),2>d&&(this.Oh=f),this.$j=Math.round(a),this.Uh=Math.round(b),this.width=Math.round(a*f),this.height=Math.round(b*f),this.na=!0,this.Vs?(this.L=this.width, this.K=this.height,this.Hc=!0):this.width<this.Cb&&this.height<this.Bb||1===d?(this.L=this.width,this.K=this.height,this.Hc=!0):(this.L=this.Cb,this.K=this.Bb,this.Hc=!1,2===d?(l=this.Cb/this.Bb,d=this.Zg/this.Yg,d<l?this.L=this.K*d:d>l&&(this.K=this.L/d)):3===d&&(l=this.Cb/this.Bb,d=this.Zg/this.Yg,d>l?this.L=this.K*d:d<l&&(this.K=this.L/d))),this.Jp&&!this.hb&&(jQuery(this.Jp).css({width:Math.round(a)+"px",height:Math.round(b)+"px","margin-left":Math.floor(h)+"px","margin-top":Math.floor(e)+"px"}), "undefined"!==typeof cr_is_preview&&jQuery("#borderwrap").css({width:Math.round(a)+"px",height:Math.round(b)+"px"})),this.canvas&&(this.canvas.width=Math.round(a*f),this.canvas.height=Math.round(b*f),this.sd?(this.canvas.style.left=Math.floor(h)+"px",this.canvas.style.top=Math.floor(e)+"px",this.canvas.style.width=Math.round(a)+"px",this.canvas.style.height=Math.round(b)+"px"):this.Xf&&!this.hb&&(this.canvas.style.width=Math.round(a)+"px",this.canvas.style.height=Math.round(b)+"px")),this.Qb&&(this.Qb.width= Math.round(a*f),this.Qb.height=Math.round(b*f),this.Qb.style.width=this.$j+"px",this.Qb.style.height=this.Uh+"px"),this.B&&this.B.Ee(Math.round(a*f),Math.round(b*f)),this.Ob&&this.Ka&&(this.Ka.width=Math.round(a),this.Ka.height=Math.round(b)),this.Ka&&this.xl(this.Ka,this.Ga),this.Is(),this.Oq&&!this.Lc&&window.scrollTo(0,0)}};g.prototype.Is=function(){if(this.tv&&0!==this.Hn){var a="portrait";2===this.Hn&&(a="landscape");try{screen.orientation&&screen.orientation.lock?screen.orientation.lock(a).catch(function(){}): screen.lockOrientation?screen.lockOrientation(a):screen.webkitLockOrientation?screen.webkitLockOrientation(a):screen.mozLockOrientation?screen.mozLockOrientation(a):screen.msLockOrientation&&screen.msLockOrientation(a)}catch(b){console&&console.warn&&console.warn("Failed to lock orientation: ",b)}}};g.prototype.hy=function(){this.B.Cv();this.jn=!0;var a,b,f;a=0;for(b=this.A.length;a<b;a++)f=this.A[a],f.$k&&f.$k()};g.prototype.iy=function(){this.jn=!1;var a,b,f;a=0;for(b=this.A.length;a<b;a++)f=this.A[a], f.bl&&f.bl()};g.prototype.Wr=function(){if(!this.hb){var a=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||document.msFullscreenElement||this.pi)&&!this.Lc?jQuery(this.canvas).offset():jQuery(this.canvas).position();a.position="absolute";jQuery(this.Qb).css(a)}};var e=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||window.oCancelAnimationFrame;g.prototype.setSuspended=function(a){var b;if(a&& !this.qi)for(ga("[Construct 2] Suspending"),this.qi=!0,-1!==this.Sn&&e&&e(this.Sn),-1!==this.to&&clearTimeout(this.to),a=0,b=this.jj.length;a<b;a++)this.jj[a](!0);else if(!a&&this.qi){ga("[Construct 2] Resuming");this.qi=!1;this.Kk=Ya();this.bg=Ya();a=this.Ii=this.rk=0;for(b=this.jj.length;a<b;a++)this.jj[a](!1);this.mb(!1)}};g.prototype.yp=function(a){this.jj.push(a)};g.prototype.Qe=function(a){return this.Xk[a]};g.prototype.Ai=function(a){a&&a.project||ha("Project model unavailable");a=a.project; this.name=a[0];this.fq=a[1];this.nc=a[12];this.kq=a[12];this.Cb=a[10];this.Bb=a[11];this.Sr=this.Cb/2;this.Tr=this.Bb/2;this.hb&&!this.sd&&(4<=a[12]||0===a[12])&&(ga("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"),this.kq=this.nc=3);this.Do=a[18];this.sf=a[19];if(0===this.sf){var b=new Image;b.crossOrigin="anonymous";this.ls(b,"loading-logo.png");this.rf={Tk:b}}else if(4===this.sf){b=new Image;b.src="";var f=new Image;f.src="";var h= new Image;h.src="";var e=new Image;e.src="";var l=new Image;l.src="";var m=new Image;m.src="";var d=new Image;d.src="";var t=new Image;t.src="";var c=new Image;c.src="";var u=new Image;u.src="";var x=new Image;x.src="";var g=new Image;g.src="";this.rf={Tk:[b,f,h,e],Cy:[l,m,d,t],Az:[c,u,x,g]}}this.Ni=a[21];this.Xk=rc();this.Xd=new L(this);b=0;for(f=a[2].length;b<f;b++)d=a[2][b],h=this.Qe(d[0]),pb(d,h.prototype),t=new h(this),t.Cl=d[1],t.qf=d[2],t.OA=d[5],t.ur=d[9],t.J&&t.J(),this.plugins.push(t);this.Xk= rc();b=0;for(f=a[3].length;b<f;b++){d=a[3][b];l=this.Qe(d[1]);t=null;h=0;for(e=this.plugins.length;h<e;h++)if(this.plugins[h]instanceof l){t=this.plugins[h];break}c=new t.ja(t);c.name=d[0];c.I=d[2];c.$m=d[3].slice(0);c.zz=d[3].length;c.uv=d[4];c.Tw=d[5];c.ka=d[11];c.I?(c.fh=[],c.oe=this.Yh++,c.La=null):(c.fh=null,c.oe=-1,c.La=[]);c.lk=null;c.Jg=null;c.Yp=null;c.Gb=!1;c.vc=null;d[6]?(c.Jl=d[6][0],c.so=d[6][1],c.mj=d[6][2]):(c.Jl=null,c.so=0,c.mj=0);d[7]?c.tc=d[7]:c.tc=null;c.index=b;c.d=[];c.dk=[]; c.Ie=[new qb(c)];c.Hd=0;c.Zc=null;c.Gv=0;c.xh=!0;c.Rl=rb;c.Zw=sb;c.gx=tb;c.V=ub;c.Ui=vb;c.vf=wb;c.vd=xb;c.uk=Ab;c.Km=Bb;c.Mm=Cb;c.We=Db;c.Nm=Eb;c.Wj=new fb(this.Cb,this.Bb);c.Jj=!0;c.Kj=!1;c.U={};c.toString=Fb;c.Pa=[];h=0;for(e=d[8].length;h<e;h++){u=d[8][h];x=this.Qe(u[1]);g=null;l=0;for(m=this.Pa.length;l<m;l++)if(this.Pa[l]instanceof x){g=this.Pa[l];break}g||(g=new x(this),g.zn=[],g.Wk=new da,g.J&&g.J(),this.Pa.push(g),jc.iz&&g instanceof jc.iz&&(this.xs=g));-1===g.zn.indexOf(c)&&g.zn.push(c); l=new g.ja(g,c);l.name=u[0];l.ka=u[2];l.J();c.Pa.push(l)}c.global=d[9];c.en=d[10];c.T=[];h=0;for(e=d[12].length;h<e;h++)c.T.push({id:d[12][h][0],name:d[12][h][1],lb:-1,wd:!1,Oa:!0,index:h});c.fB=d[13];this.Do&&!c.I&&!c.en&&t.qf||c.J();c.name&&(this.types[c.name]=c);this.A.push(c);t.Cl&&(h=new t.Z(c),h.uid=this.Ni++,h.Zr=this.xr++,h.Vf=0,h.ei=Gb,h.toString=Hb,h.q=d[14],h.J(),c.d.push(h),this.ze[h.uid.toString()]=h)}b=0;for(f=a[4].length;b<f;b++)for(l=a[4][b],m=this.A[l[0]],h=1,e=l.length;h<e;h++)d= this.A[l[h]],d.La.push(m),m.fh.push(d);b=0;for(f=a[28].length;b<f;b++){l=a[28][b];m=[];h=0;for(e=l.length;h<e;h++)m.push(this.A[l[h]]);h=0;for(e=m.length;h<e;h++)m[h].Gb=!0,m[h].vc=m}if(0<this.Yh)for(b=0,f=this.A.length;b<f;b++)if(d=this.A[b],!d.I&&d.La.length){d.lk=Array(this.Yh);d.Jg=Array(this.Yh);d.Yp=Array(this.Yh);c=[];h=g=x=u=0;for(e=d.La.length;h<e;h++)for(t=d.La[h],d.lk[t.oe]=u,u+=t.zz,d.Jg[t.oe]=x,x+=t.uv,d.Yp[t.oe]=g,g+=t.Tw,l=0,m=t.T.length;l<m;l++)c.push(ya({},t.T[l]));d.T=c.concat(d.T); h=0;for(e=d.T.length;h<e;h++)d.T[h].index=h}b=0;for(f=a[5].length;b<f;b++)d=a[5][b],h=new Ib(this,d),this.pn[h.name]=h,this.td.push(h);b=0;for(f=a[6].length;b<f;b++)d=a[6][b],h=new Jb(this,d),this.Cm[h.name]=h,this.ne.push(h);b=0;for(f=this.ne.length;b<f;b++)this.ne[b].bb();b=0;for(f=this.ne.length;b<f;b++)this.ne[b].zo();b=0;for(f=this.Pl.length;b<f;b++)this.Pl[b].bb();y(this.Pl);this.sv=a[7];this.Gm=a[8];this.ud=a[9];this.Oh=1;this.hw=a[13];this.Ga=a[14];this.Mp=a[15];this.xz=a[17];this.Hn=a[20]; this.tv=0<this.Hn;this.wy=a[22];this.Hc=this.Vs=a[23];this.$v=a[24];this.Dy=a[25];this.Ea=a[27]&&!this.nf;this.Dl=Date.now();y(this.Xk);this.Jx()};var a=!1,h=0,l=[];g.prototype.Ly=function(a,b){function f(){h--;e.pr()}var e=this;a.addEventListener("load",f);a.addEventListener("error",f);l.push([a,b]);this.pr()};g.prototype.pr=function(){for(var a;l.length&&100>h;)h++,a=l.shift(),this.ls(a[0],a[1])};g.prototype.Us=function(b,f){b.cocoonLazyLoad=!0;b.onerror=function(f){a=b.Gp=!0;console&&console.error&& console.error("Error loading image '"+b.src+"': ",f)};this.sd?b.src=f:b.src||("undefined"!==typeof XAPKReader?XAPKReader.get(f,function(a){b.src=a},function(h){a=b.Gp=!0;console&&console.error&&console.error("Error extracting image '"+f+"' from expansion file: ",h)}):(b.crossOrigin="anonymous",this.Ly(b,f)));this.tg.push(b)};g.prototype.Rw=function(a){var b,f;b=0;for(f=this.tg.length;b<f;b++)if(this.tg[b].Dv===a)return this.tg[b];return null};var f=0,t=!1;g.prototype.Cx=function(){this.Ag&&(f=this.Ag.dz(this.sv))}; g.prototype.Cp=function(){var a=f,b=0,h=0,e=!0,l,m,h=0;for(l=this.tg.length;h<l;h++){m=this.tg[h];var d=m.Pp;if(!d||0>=d)d=5E4;a+=d;m.src&&(m.complete||m.loaded)&&!m.Gp?b+=d:e=!1}e&&this.Dy&&this.Ag&&(t||(this.Ag.kz(),t=!0),h=this.Ag.hx(),b+=h,h<f&&(e=!1));this.O=0==a?1:b/a;return e};var v=!1;g.prototype.go=function(){if(this.Ka||this.B){var b=this.Ka||this.In;this.Qb&&this.Wr();var f=window.innerWidth,h=window.innerHeight;this.Zg===f&&this.Yg===h||this.setSize(f,h);this.O=0;this.Uq=-1;var e=this; if(this.Cp()&&(4!==this.sf||v))this.Dx();else{h=Date.now()-this.Dl;if(b){var l=this.width,m=this.height,f=this.devicePixelRatio;if(3>this.sf&&(this.bd||500<=h&&this.Uq!=this.O)){b.clearRect(0,0,l,m);var h=l/2,m=m/2,l=0===this.sf&&this.rf.Tk.complete,c=40*f,t=0,u=80*f,g;if(l){var x=this.rf.Tk,u=x.width*f;g=x.height*f;c=u/2;t=g/2;b.drawImage(x,sa(h-c),sa(m-t),u,g)}1>=this.sf?(h=sa(h-c)+.5,m=sa(m+(t+(l?12*f:0)))+.5,b.fillStyle=a?"red":"DodgerBlue",b.fillRect(h,m,Math.floor(u*this.O),6*f),b.strokeStyle= "black",b.strokeRect(h,m,u,6*f),b.strokeStyle="white",b.strokeRect(h-1*f,m-1*f,u+2*f,8*f)):2===this.sf&&(b.font=this.sd?"12pt ArialMT":"12pt Arial",b.fillStyle=a?"#f00":"#999",b.eB="middle",f=Math.round(100*this.O)+"%",l=b.measureText?b.measureText(f):null,b.fillText(f,h-(l?l.width:0)/2,m));this.Uq=this.O}else if(4===this.sf){this.fw(b);d?d(function(){e.go()}):setTimeout(function(){e.go()},16);return}}setTimeout(function(){e.go()},this.bd?10:100)}}};var x=-1,m="undefined"===typeof cr_is_preview?200: 0,u=!0,Q=!1,R=0,G=0,J="undefined"===typeof cr_is_preview?3E3:0,w=null,A=null,I=0;g.prototype.fw=function(b){if(!v){for(var f=Math.ceil(this.width),h=Math.ceil(this.height),e=this.rf.Tk,l=this.rf.Cy,d=this.rf.Az,c=0;4>c;++c)if(!e[c].complete||!l[c].complete||!d[c].complete)return;0===I&&(x=Date.now());var c=Date.now(),t=!1,g=b,p,q;u||Q?(b.clearRect(0,0,f,h),w&&w.width===f&&w.height===h||(w=document.createElement("canvas"),w.width=f,w.height=h,A=w.getContext("2d")),g=A,t=!0,u&&1===I&&(x=Date.now())): b.globalAlpha=1;g.fillStyle="#333333";g.fillRect(0,0,f,h);256<this.Uh?(p=Fa(.22*h,105,.6*f),q=.25*p,g.drawImage(k(l,p),.5*f-p/2,.2*h-q/2,p,q),q=p=Math.min(.395*h,.95*f),g.drawImage(k(e,p),.5*f-p/2,.485*h-q/2,p,q),p=Fa(.22*h,105,.6*f),q=.25*p,g.drawImage(k(d,p),.5*f-p/2,.868*h-q/2,p,q),g.fillStyle="#3C3C3C",p=f,q=Math.max(.005*h,2),g.fillRect(0,.8*h-q/2,p,q),g.fillStyle=a?"red":"#E0FF65",p=f*this.O,g.fillRect(.5*f-p/2,.8*h-q/2,p,q)):(q=p=.55*h,g.drawImage(k(e,p),.5*f-p/2,.45*h-q/2,p,q),g.fillStyle= "#3C3C3C",p=f,q=Math.max(.005*h,2),g.fillRect(0,.85*h-q/2,p,q),g.fillStyle=a?"red":"#E0FF65",p=f*this.O,g.fillRect(.5*f-p/2,.85*h-q/2,p,q));t&&(u?b.globalAlpha=0===I?0:Math.min((c-x)/300,1):Q&&(b.globalAlpha=Math.max(1-(c-G)/300,0)),b.drawImage(w,0,0,f,h));u&&300<=c-x&&2<=I&&(u=!1,R=c);!u&&c-R>=J&&!Q&&1<=this.O&&(Q=!0,G=c);if(Q&&c-G>=300+m||"undefined"!==typeof cr_is_preview&&1<=this.O&&500>Date.now()-x)v=!0,Q=u=!1,this.rf=A=w=null;++I}};g.prototype.Dx=function(){this.Qb&&(this.canvas.parentNode.removeChild(this.Qb), this.Qb=this.In=null);this.Dl=Date.now();this.bg=Ya();var a,b,f;if(this.Do)for(a=0,b=this.A.length;a<b;a++)f=this.A[a],f.I||f.en||!f.va.qf||f.J();else this.Wg=!1;a=0;for(b=this.td.length;a<b;a++)this.td[a].Ev();2<=this.nc&&(a=this.Cb/this.Bb,b=this.width/this.height,this.Oh=2!==this.nc&&b>a||2===this.nc&&b<a?this.height/this.Bb:this.width/this.Cb);this.fq?this.pn[this.fq].po():this.td[0].po();this.Do||(this.Bi=1,this.trigger(L.prototype.j.Yl,null),window.C2_RegisterSW&&window.C2_RegisterSW());navigator.splashscreen&& navigator.splashscreen.hide&&navigator.splashscreen.hide();a=0;for(b=this.A.length;a<b;a++)f=this.A[a],f.Fr&&f.Fr();document.hidden||document.webkitHidden||document.mozHidden||document.msHidden?window.cr_setSuspended(!0):this.mb(!1);this.Ob&&AppMobi.webview.execute("onGameReady();")};g.prototype.mb=function(a,b,f){if(this.za){var h=Ya();if(f||!this.qi||a){a||(d?this.Sn=d(this.Es):this.to=setTimeout(this.Es,this.Og?1:16));b=b||h;var e=this.nc;((f=(document.mozFullScreen||document.webkitIsFullScreen|| document.fullScreen||!!document.msFullscreenElement)&&!this.Lc)||this.pi)&&0<this.Qf&&(e=this.Qf);if(0<e){var e=window.innerWidth,l=window.innerHeight;this.Zg===e&&this.Yg===l||this.setSize(e,l)}this.hb||(f?this.ok||(this.ok=!0):this.ok?(this.ok=!1,0===this.nc&&this.setSize(Math.round(this.Er/this.devicePixelRatio),Math.round(this.Dr/this.devicePixelRatio),!0)):(this.Er=this.width,this.Dr=this.height));this.Wg&&(f=this.Cp(),this.Bi=this.O,f&&(this.Wg=!1,this.O=1,this.trigger(L.prototype.j.Yl,null), window.C2_RegisterSW&&window.C2_RegisterSW()));this.$x(b);!this.na&&!this.bd||this.jn||this.ij||a||(this.na=!1,this.B?this.wc():this.me(),this.fj&&(this.canvas&&this.canvas.toDataURL&&(this.ws=this.canvas.toDataURL(this.fj[0],this.fj[1]),window.cr_onSnapshot&&window.cr_onSnapshot(this.ws),this.trigger(L.prototype.j.Wt,null)),this.fj=null));this.MA||(this.pj++,this.Pf++,this.rk++);this.Ii+=Ya()-h}}};g.prototype.$x=function(a){var b,f,h,e,l,m,d,c;1E3<=a-this.bg&&(this.bg+=1E3,1E3<=a-this.bg&&(this.bg= a),this.Im=this.rk,this.rk=0,this.qm=this.Ii,this.Ii=0);b=0;0!==this.Kk&&(b=a-this.Kk,0>b&&(b=0),this.Jf=b/=1E3,.5<this.Jf?this.Jf=0:this.Jf>1/this.tr&&(this.Jf=1/this.tr));this.Kk=a;this.gf=this.Jf*this.sg;this.wb.add(this.gf);this.Ne.add(b);a=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||!!document.msFullscreenElement||this.pi)&&!this.Lc;2<=this.nc||a&&0<this.Qf?(b=this.Cb/this.Bb,f=this.width/this.height,h=this.nc,a&&0<this.Qf&&(h=this.Qf),this.Oh=2!==h&&f>b||2===h&& f<b?this.height/this.Bb:this.width/this.Cb,this.za&&(this.za.co(this.za.scrollX),this.za.eo(this.za.scrollY))):this.Oh=this.Xf?this.devicePixelRatio:1;this.Sb();this.Mc++;this.Xd.Vy();this.Mc--;this.Sb();this.Mc++;f=this.Cr.Le();a=0;for(b=f.length;a<b;a++)f[a].YA();a=0;for(b=this.A.length;a<b;a++)if(m=this.A[a],!m.I&&(m.Pa.length||m.La.length))for(f=0,h=m.d.length;f<h;f++)for(d=m.d[f],e=0,l=d.N.length;e<l;e++)d.N[e].mb();a=0;for(b=this.A.length;a<b;a++)if(m=this.A[a],!m.I&&(m.Pa.length||m.La.length))for(f= 0,h=m.d.length;f<h;f++)for(d=m.d[f],e=0,l=d.N.length;e<l;e++)c=d.N[e],c.By&&c.By();f=this.Bn.Le();a=0;for(b=f.length;a<b;a++)f[a].mb();this.Mc--;this.Ex();for(a=0;this.Ef&&10>a++;)this.Wp(this.Ef);a=0;for(b=this.ne.length;a<b;a++)this.ne[a].Vm=!1;this.za.Nf&&this.za.Nf.kb();y(this.Un);this.Mc++;a=0;for(b=this.A.length;a<b;a++)if(m=this.A[a],!m.I&&(m.Pa.length||m.La.length))for(f=0,h=m.d.length;f<h;f++)for(d=m.d[f],e=0,l=d.N.length;e<l;e++)c=d.N[e],c.Ll&&c.Ll();f=this.Cn.Le();a=0;for(b=f.length;a< b;a++)f[a].Ll();this.Mc--};g.prototype.kh=function(){var a,b,f,h,e,l,m,d,c;a=0;for(b=this.A.length;a<b;a++)if(m=this.A[a],!m.I)for(f=0,h=m.d.length;f<h;f++)if(d=m.d[f],d.kh&&d.kh(),d.N)for(e=0,l=d.N.length;e<l;e++)c=d.N[e],c.kh&&c.kh()};g.prototype.Wp=function(a){var b=this.za;this.za.lz();var f,h,e;if(this.B)for(f=0,h=this.A.length;f<h;f++)e=this.A[f],e.I||!e.Ql||e.global&&0!==e.d.length||-1!==a.ji.indexOf(e)||e.Ql();b==a&&y(this.Xd.sc);y(this.Un);this.bs(!0);a.po();this.bs(!1);this.na=!0;this.Sb()}; g.prototype.bs=function(a){var b,f,h,e,l,m,d,c,t;b=0;for(f=this.Pa.length;b<f;b++)h=this.Pa[b],a?h.Oi&&h.Oi():h.Pi&&h.Pi();b=0;for(f=this.A.length;b<f;b++)if(h=this.A[b],h.global||h.va.Cl)for(e=0,l=h.d.length;e<l;e++)if(m=h.d[e],a?m.Oi&&m.Oi():m.Pi&&m.Pi(),m.N)for(d=0,c=m.N.length;d<c;d++)t=m.N[d],a?t.Oi&&t.Oi():t.Pi&&t.Pi()};g.prototype.oj=function(a){this.Bn.add(a)};g.prototype.oz=function(a){this.Cn.add(a)};g.prototype.Rf=function(a){return a&&-1!==a.Mi?this.Jf*a.Mi:this.gf};g.prototype.me=function(){this.za.me(this.Ka); this.Ob&&this.Ka.present()};g.prototype.wc=function(){this.Ea&&(this.Kf=1,this.za.If(this.B));this.za.wc(this.B);this.B.Fy()};g.prototype.nv=function(a){a&&this.ym.push(a)};g.prototype.xk=function(a){a=a.toString();return this.ze.hasOwnProperty(a)?this.ze[a]:null};var M=[];g.prototype.Pe=function(a){var b,f;b=a.type.name;var h=null;if(this.Hf.hasOwnProperty(b)){if(h=this.Hf[b],h.contains(a))return}else h=M.length?M.pop():new da,this.Hf[b]=h;h.add(a);this.lf=!0;if(a.Gb)for(b=0,f=a.siblings.length;b< f;b++)this.Pe(a.siblings[b]);this.cn&&h.Eh.push(a);this.bn||(this.Mc++,this.trigger(Object.getPrototypeOf(a.type.va).j.Xt,a),this.Mc--)};g.prototype.Sb=function(){if(this.lf){var a,b,f,h,e,l;this.cn=!0;f=0;for(e=this.qd.length;f<e;++f)for(a=this.qd[f],b=a.type,b.d.push(a),h=0,l=b.La.length;h<l;++h)b.La[h].d.push(a),b.La[h].xh=!0;y(this.qd);this.Lt();Xa(this.Hf);this.lf=this.cn=!1}};g.prototype.Lt=function(){for(var a in this.Hf)this.Hf.hasOwnProperty(a)&&this.ft(this.Hf[a])};g.prototype.ft=function(a){var b= a.Le(),f=b[0].type,h,e,l,m,d,c;Za(f.d,a);f.xh=!0;0===f.d.length&&(f.Kj=!1);h=0;for(e=f.La.length;h<e;++h)c=f.La[h],Za(c.d,a),c.xh=!0;h=0;for(e=this.Xd.sc.length;h<e;++h)if(d=this.Xd.sc[h],d.hc.hasOwnProperty(f.index)&&Za(d.hc[f.index].re,a),!f.I)for(l=0,m=f.La.length;l<m;++l)c=f.La[l],d.hc.hasOwnProperty(c.index)&&Za(d.hc[c.index].re,a);if(d=b[0].n){if(d.Tc)for(l=d.d,h=0,e=l.length;h<e;++h)m=l[h],a.contains(m)&&(m.Fa(),d.Rb.update(m,m.oc,null),m.oc.set(0,0,-1,-1));Za(d.d,a);d.$i(0)}for(h=0;h<b.length;++h)this.et(b[h], f);a.clear();M.push(a);this.na=!0};g.prototype.et=function(a,b){var f,h,e;f=0;for(h=this.ym.length;f<h;++f)this.ym[f](a);a.df&&b.Wj.update(a,a.df,null);(f=a.n)&&f.ph(a,!0);if(a.N)for(f=0,h=a.N.length;f<h;++f)e=a.N[f],e.kg&&e.kg(),e.behavior.Wk.remove(a);this.Cr.remove(a);this.Bn.remove(a);this.Cn.remove(a);a.kg&&a.kg();this.ze.hasOwnProperty(a.uid.toString())&&delete this.ze[a.uid.toString()];this.Yk--;100>b.dk.length&&b.dk.push(a)};g.prototype.Zj=function(a,b,f,h){if(a.I){var e=sa(Math.random()* a.fh.length);return this.Zj(a.fh[e],b,f,h)}return a.Zc?this.ef(a.Zc,b,!1,f,h,!1):null};var P=[];g.prototype.ef=function(a,b,f,h,e,l){var m,d,c,t;if(!a)return null;var u=this.A[a[1]],g=u.va.qf;if(this.Wg&&g&&!u.en||g&&!this.B&&11===a[0][11])return null;var x=b;g||(b=null);var v;u.dk.length?(v=u.dk.pop(),v.Qc=!0,u.va.Z.call(v,u)):(v=new u.va.Z(u),v.Qc=!1);!f||l||this.ze.hasOwnProperty(a[2].toString())?v.uid=this.Ni++:v.uid=a[2];this.ze[v.uid.toString()]=v;v.Zr=this.xr++;v.Vf=u.d.length;m=0;for(d=this.qd.length;m< d;++m)this.qd[m].type===u&&v.Vf++;v.ei=Gb;v.toString=Hb;c=a[3];if(v.Qc)Xa(v.U);else{v.U={};if("undefined"!==typeof cr_is_preview)for(v.Eq=[],v.Eq.length=c.length,m=0,d=c.length;m<d;m++)v.Eq[m]=c[m][1];v.ub=[];v.ub.length=c.length}m=0;for(d=c.length;m<d;m++)v.ub[m]=c[m][0];if(g){var k=a[0];v.x=ia(h)?k[0]:h;v.y=ia(e)?k[1]:e;v.z=k[2];v.width=k[3];v.height=k[4];v.depth=k[5];v.k=k[6];v.opacity=k[7];v.cc=k[8];v.ec=k[9];v.Tb=k[10];m=k[11];!this.B&&u.T.length&&(v.Tb=m);v.Rh=jb(v.Tb);this.F&&kb(v,v.Tb,this.F); if(v.Qc){m=0;for(d=k[12].length;m<d;m++)for(c=0,t=k[12][m].length;c<t;c++)v.Ra[m][c]=k[12][m][c];v.Ya.set(0,0,0,0);v.df.set(0,0,-1,-1);v.oc.set(0,0,-1,-1);v.uc.bj(v.Ya);y(v.jm)}else{v.Ra=k[12].slice(0);m=0;for(d=v.Ra.length;m<d;m++)v.Ra[m]=k[12][m].slice(0);v.ua=[];v.Se=[];v.Se.length=u.T.length;v.Ya=new wa(0,0,0,0);v.df=new wa(0,0,-1,-1);v.oc=new wa(0,0,-1,-1);v.uc=new xa;v.jm=[];v.ca=Kb;v.FA=Lb;v.ac=Mb;v.Fa=Nb;v.wz=Ob;v.Ps=Pb;v.Ld=Ub}v.Bh=!1;v.rz=0;v.qz=0;v.pz=null;14===k.length&&(v.Bh=!0,v.rz= k[13][0],v.qz=k[13][1],v.pz=k[13][2]);m=0;for(d=u.T.length;m<d;m++)v.Se[m]=!0;v.Ge=!0;v.Bd=Vb;v.Bd();v.Qs=!!v.ua.length;v.im=!0;v.lm=!0;u.Jj=!0;v.visible=!0;v.Mi=-1;v.n=b;v.Dd=b.d.length;v.Kf=0;"undefined"===typeof v.xa&&(v.xa=null);this.na=v.he=!0}var p;y(P);m=0;for(d=u.La.length;m<d;m++)P.push.apply(P,u.La[m].Pa);P.push.apply(P,u.Pa);if(v.Qc)for(m=0,d=P.length;m<d;m++){var q=P[m];p=v.N[m];p.Qc=!0;q.behavior.Z.call(p,q,v);k=a[4][m];c=0;for(t=k.length;c<t;c++)p.q[c]=k[c];p.J();q.behavior.Wk.add(v)}else for(v.N= [],m=0,d=P.length;m<d;m++)q=P[m],p=new q.behavior.Z(q,v),p.Qc=!1,p.q=a[4][m].slice(0),p.J(),v.N.push(p),q.behavior.Wk.add(v);k=a[5];if(v.Qc)for(m=0,d=k.length;m<d;m++)v.q[m]=k[m];else v.q=k.slice(0);this.qd.push(v);this.lf=!0;b&&(b.Nh(v,!0),1!==b.ed||1!==b.fd)&&(u.Kj=!0);this.Yk++;if(u.Gb){if(v.Gb=!0,v.Qc?y(v.siblings):v.siblings=[],!f&&!l){m=0;for(d=u.vc.length;m<d;m++)if(u.vc[m]!==u){if(!u.vc[m].Zc)return null;v.siblings.push(this.ef(u.vc[m].Zc,x,!1,g?v.x:h,g?v.y:e,!0))}m=0;for(d=v.siblings.length;m< d;m++)for(v.siblings[m].siblings.push(v),c=0;c<d;c++)m!==c&&v.siblings[m].siblings.push(v.siblings[c])}}else v.Gb=!1,v.siblings=null;v.J();m=0;for(d=v.N.length;m<d;m++)v.N[m].Ay&&v.N[m].Ay();return v};g.prototype.Om=function(a){var b,f;b=0;for(f=this.za.Y.length;b<f;b++){var h=this.za.Y[b];if(mb(h.name,a))return h}return null};g.prototype.ci=function(a){a=sa(a);0>a&&(a=0);a>=this.za.Y.length&&(a=this.za.Y.length-1);return this.za.Y[a]};g.prototype.om=function(a){var b,f;b=0;for(f=a.length;b<f;b++)a[b].V().ba= !0};g.prototype.Ui=function(a){var b,f;b=0;for(f=a.length;b<f;b++)a[b].Ui()};g.prototype.vf=function(a){var b,f;b=0;for(f=a.length;b<f;b++)a[b].vf()};g.prototype.vd=function(a){var b,f;b=0;for(f=a.length;b<f;b++)a[b].vd()};g.prototype.Ns=function(a){if(a.Jj){var b,f,h=a.d;b=0;for(f=h.length;b<f;++b)h[b].Ps();h=this.qd;b=0;for(f=h.length;b<f;++b)h[b].type===a&&h[b].Ps();a.Jj=!1}};g.prototype.nq=function(a,b,f,h){var e,m,l=a?1!==a.ed||1!==a.fd:!1;if(b.I)for(a=0,e=b.fh.length;a<e;++a)m=b.fh[a],l||m.Kj? Ca(h,m.d):(this.Ns(m),m.Wj.ql(f,h));else l||b.Kj?Ca(h,b.d):(this.Ns(b),b.Wj.ql(f,h))};g.prototype.nx=function(a,b,f,h){var e,m;e=0;for(m=b.length;e<m;++e)this.nq(a,b[e],f,h)};g.prototype.mx=function(a,b,f){var h=this.xs;h&&this.nx(a,h.zn,b,f)};g.prototype.Hl=function(a,b,f){var h=a.V(),e,m,l,d,c=this.Sa().Za.Pc,t,u,v;if(h.ba)for(h.ba=!1,y(h.d),e=0,d=a.d.length;e<d;e++)l=a.d[e],l.Fa(),t=l.n.$b(b,f,!0),u=l.n.$b(b,f,!1),l.ac(t,u)?h.d.push(l):c&&h.ea.push(l);else{m=0;v=c?h.ea:h.d;e=0;for(d=v.length;e< d;e++)l=v[e],l.Fa(),t=l.n.$b(b,f,!0),u=l.n.$b(b,f,!1),l.ac(t,u)&&(c?h.d.push(l):(h.d[m]=h.d[e],m++));v.length=m}a.We();return h.Um()};g.prototype.pg=function(a,b){if(!(a&&b&&a!==b&&a.he&&b.he))return!1;a.Fa();b.Fa();var f=a.n,h=b.n,e,m,l,d,c,t,u,v;if(f===h||f.ed===h.ed&&h.fd===h.fd&&f.scale===h.scale&&f.k===h.k&&f.Ed===h.Ed){if(!a.Ya.Kx(b.Ya)||!a.uc.Fq(b.uc)||a.Bh&&b.Bh)return!1;if(a.Bh)return this.Cs(a,b);if(b.Bh)return this.Cs(b,a);u=a.xa&&!a.xa.Qg();e=b.xa&&!b.xa.Qg();if(!u&&!e)return!0;u?(a.xa.Bg(a.width, a.height,a.k),u=a.xa):(this.zd.vh(a.uc,a.x,a.y,a.width,a.height),u=this.zd);e?(b.xa.Bg(b.width,b.height,b.k),v=b.xa):(this.zd.vh(b.uc,b.x,b.y,b.width,b.height),v=this.zd);return u.ki(v,b.x-a.x,b.y-a.y)}u=a.xa&&!a.xa.Qg();e=b.xa&&!b.xa.Qg();u?(a.xa.Bg(a.width,a.height,a.k),this.zd.os(a.xa)):this.zd.vh(a.uc,a.x,a.y,a.width,a.height);u=this.zd;e?(b.xa.Bg(b.width,b.height,b.k),this.ro.os(b.xa)):this.ro.vh(b.uc,b.x,b.y,b.width,b.height);v=this.ro;e=0;for(m=u.xd;e<m;e++)l=2*e,d=l+1,c=u.Db[l],t=u.Db[d], u.Db[l]=f.fc(c+a.x,t+a.y,!0),u.Db[d]=f.fc(c+a.x,t+a.y,!1);u.Fa();e=0;for(m=v.xd;e<m;e++)l=2*e,d=l+1,c=v.Db[l],t=v.Db[d],v.Db[l]=h.fc(c+b.x,t+b.y,!0),v.Db[d]=h.fc(c+b.x,t+b.y,!1);v.Fa();return u.ki(v,0,0)};var Y=new xa;new wa(0,0,0,0);var F=[];g.prototype.Cs=function(a,b){var f,h,e,m,l=b.Ya,d=a.x,c=a.y;a.KA(l,F);var t=b.xa&&!b.xa.Qg();f=0;for(h=F.length;f<h;++f)if(e=F[f],m=e.aB,l.Lx(m,d,c)&&(Y.bj(m),Y.offset(d,c),Y.Fq(b.uc)))if(t)if(b.xa.Bg(b.width,b.height,b.k),e.Nn){if(e.Nn.ki(b.xa,b.x-(d+m.left), b.y-(c+m.top)))return y(F),!0}else{if(this.zd.vh(Y,0,0,m.right-m.left,m.bottom-m.top),this.zd.ki(b.xa,b.x,b.y))return y(F),!0}else if(e.Nn){if(this.zd.vh(b.uc,0,0,b.width,b.height),e.Nn.ki(this.zd,-(d+m.left),-(c+m.top)))return y(F),!0}else return y(F),!0;y(F);return!1};g.prototype.Js=function(a,b){if(!b)return!1;var f,h,e,m,l;f=0;for(h=a.Pa.length;f<h;f++)if(a.Pa[f].behavior instanceof b)return!0;if(!a.I)for(f=0,h=a.La.length;f<h;f++)for(l=a.La[f],e=0,m=l.Pa.length;e<m;e++)if(l.Pa[e].behavior instanceof b)return!0;return!1};g.prototype.xo=function(a){return this.Js(a,jc.Yz)};g.prototype.yo=function(a){return this.Js(a,jc.$z)};var U=[];g.prototype.qg=function(a){var b,f,h;a.Fa();this.mx(a.n,a.Ya,U);b=0;for(f=U.length;b<f;++b)if(h=U[b],h.U.solidEnabled&&this.pg(a,h))return y(U),h;y(U);return null};g.prototype.Jy=function(a,b,f,h){h=h||50;var e=a.x,m=a.y,l,d=null,c=null;for(l=0;l<h;l++)if(a.x=e+b*l,a.y=m+f*l,a.ca(),!this.pg(a,d)&&((d=this.qg(a))&&(c=d),!d&&!d))return c&&this.Hy(a,b,f,c),!0;a.x=e;a.y= m;a.ca();return!1};g.prototype.Hy=function(a,b,f,h){var e=2,m,l=!1;m=!1;for(var d=a.x,c=a.y;16>=e;)m=1/e,e*=2,a.x+=b*m*(l?1:-1),a.y+=f*m*(l?1:-1),a.ca(),this.pg(a,h)?m=l=!0:(m=l=!1,d=a.x,c=a.y);m&&(a.x=d,a.y=c,a.ca())};g.prototype.Ky=function(a){var b=0,f=a.x,h=a.y,e=0,m=0,l=0,d=this.qg(a);if(d){for(;100>=b;){switch(e){case 0:m=0;l=-1;b++;break;case 1:m=1;l=-1;break;case 2:m=1;l=0;break;case 3:l=m=1;break;case 4:m=0;l=1;break;case 5:m=-1;l=1;break;case 6:m=-1;l=0;break;case 7:l=m=-1}e=(e+1)%8;a.x= sa(f+m*b);a.y=sa(h+l*b);a.ca();if(!this.pg(a,d)&&(d=this.qg(a),!d))return}a.x=f;a.y=h;a.ca()}};g.prototype.Ny=function(a,b){a.he&&b.he&&this.Un.push([a,b])};g.prototype.yv=function(a,b,f){var h=a.x,e=a.y,m=pa(10,Ta(b,f,h,e)),l=Oa(b,f,h,e),d=this.qg(a);if(!d)return Ka(l+ra);var c=d,t,u,v,g,x=C(5);for(t=1;36>t;t++)if(u=l-t*x,a.x=b+Math.cos(u)*m,a.y=f+Math.sin(u)*m,a.ca(),!this.pg(a,c)&&(c=this.qg(a),!c)){v=u;break}36===t&&(v=Ka(l+ra));c=d;for(t=1;36>t;t++)if(u=l+t*x,a.x=b+Math.cos(u)*m,a.y=f+Math.sin(u)* m,a.ca(),!this.pg(a,c)&&(c=this.qg(a),!c)){g=u;break}36===t&&(g=Ka(l+ra));a.x=h;a.y=e;a.ca();if(g===v)return g;a=Pa(g,v)/2;a=Ra(g,v)?Ka(v+a+ra):Ka(g+a);v=Math.cos(l);l=Math.sin(l);g=Math.cos(a);a=Math.sin(a);b=v*g+l*a;return Oa(0,0,v-2*b*g,l-2*b*a)};var E=-1;g.prototype.trigger=function(a,b,f){if(!this.za)return!1;var h=this.za.Nf;if(!h)return!1;var e=!1,m,l,d;E++;var c=h.wm;l=0;for(d=c.length;l<d;++l)m=this.Gs(a,b,c[l],f),e=e||m;m=this.Gs(a,b,h,f);E--;return e||m};g.prototype.Gs=function(a,b,f,h){var e= !1,m,l,d,c;if(b)for(d=this.vo(a,b,b.type.name,f,h),e=e||d,c=b.type.La,m=0,l=c.length;m<l;++m)d=this.vo(a,b,c[m].name,f,h),e=e||d;else d=this.vo(a,b,"system",f,h),e=e||d;return e};g.prototype.vo=function(a,b,f,h,e){var m,l=!1,d=!1,d="undefined"!==typeof e,c=(d?h.$p:h.Hs)[f];if(!c)return l;var t=null;h=0;for(m=c.length;h<m;++h)if(c[h].method==a){t=c[h].Wh;break}if(!t)return l;var u;d?u=t[e]:u=t;if(!u)return null;h=0;for(m=u.length;h<m;h++)a=u[h][0],e=u[h][1],d=this.Pw(b,f,a,e),l=l||d;return l};g.prototype.Pw= function(a,b,f,h){var e,m,l=!1;this.wo++;var d=this.Sa().Za;d&&this.Ui(d.xf);var c=1<this.wo;this.Ui(f.xf);c&&this.Iy();var t=this.pl(f);t.Za=f;a&&(e=this.types[b].V(),e.ba=!1,y(e.d),e.d[0]=a,this.types[b].We());a=!0;if(f.parent){b=t.Bs;for(e=f.parent;e;)b.push(e),e=e.parent;b.reverse();e=0;for(m=b.length;e<m;e++)if(!b[e].Xy()){a=!1;break}}a&&(this.Pf++,f.Pc?f.Wy(h):f.kb(),l=l||t.ag);this.kl();c&&this.zy();this.vd(f.xf);d&&this.vd(d.xf);this.lf&&0===this.Mc&&0===E&&!this.gn&&this.Sb();this.wo--;return l}; g.prototype.vk=function(){var a=this.Sa();return a.Za.rb[a.eb]};g.prototype.Nx=function(){return 0===this.Sa().eb};g.prototype.Yw=function(){var a=this.Sa();return a.Za.Uc[a.lc]};g.prototype.Iy=function(){this.Sk++;this.Sk>=this.un.length&&this.un.push([])};g.prototype.zy=function(){this.Sk--};g.prototype.oq=function(){return this.un[this.Sk]};g.prototype.pl=function(a){this.ik++;this.ik>=this.Bm.length&&this.Bm.push(new Wb);var b=this.Sa();b.reset(a);return b};g.prototype.kl=function(){this.ik--}; g.prototype.Sa=function(){return this.Bm[this.ik]};g.prototype.Rn=function(a){this.Ki++;this.Ki>=this.Ji.length&&this.Ji.push(aa({name:a,index:0,Ha:!1}));var b=this.pq();b.name=a;b.index=0;b.Ha=!1;return b};g.prototype.On=function(){this.Ki--};g.prototype.pq=function(){return this.Ji[this.Ki]};g.prototype.rq=function(a,b){for(var f,h,e,m,l,d;b;){f=0;for(h=b.jd.length;f<h;f++)if(d=b.jd[f],d instanceof Xb&&mb(a,d.name))return d;b=b.parent}f=0;for(h=this.ne.length;f<h;f++)for(l=this.ne[f],e=0,m=l.hf.length;e< m;e++)if(d=l.hf[e],d instanceof Xb&&mb(a,d.name))return d;return null};g.prototype.sq=function(a){var b,f;b=0;for(f=this.td.length;b<f;b++)if(this.td[b].ka===a)return this.td[b];return null};g.prototype.yk=function(a){var b,f;b=0;for(f=this.A.length;b<f;b++)if(this.A[b].ka===a)return this.A[b];return null};g.prototype.$w=function(a){var b,f;b=0;for(f=this.Ue.length;b<f;b++)if(this.Ue[b].ka===a)return this.Ue[b];return null};g.prototype.Jv=function(a,b){this.fj=[a,b];this.na=!0};g.prototype.Ex=function(){var a= this,b=this.bo,f=this.ue,h=this.Ok,e=!1;this.us&&(e=!0,b="__c2_continuouspreview",this.us=!1);if(b.length){this.Sb();f=this.az();if(c()&&!this.bd)q(b,f,function(){ga("Saved state to IndexedDB storage ("+f.length+" bytes)");a.ue=f;a.trigger(L.prototype.j.Zl,null);a.ue="";e&&r()},function(h){try{localStorage.setItem("__c2save_"+b,f),ga("Saved state to WebStorage ("+f.length+" bytes)"),a.ue=f,a.trigger(L.prototype.j.Zl,null),a.ue="",e&&r()}catch(m){ga("Failed to save game state: "+h+"; "+m),a.trigger(L.prototype.j.ep, null)}});else try{localStorage.setItem("__c2save_"+b,f),ga("Saved state to WebStorage ("+f.length+" bytes)"),a.ue=f,this.trigger(L.prototype.j.Zl,null),a.ue="",e&&r()}catch(m){ga("Error saving to WebStorage: "+m),a.trigger(L.prototype.j.ep,null)}this.Ok=this.bo="";this.Ab=null}if(h.length){if(c()&&!this.bd)n(h,function(b){b?(a.Ab=b,ga("Loaded state from IndexedDB storage ("+a.Ab.length+" bytes)")):(a.Ab=localStorage.getItem("__c2save_"+h)||"",ga("Loaded state from WebStorage ("+a.Ab.length+" bytes)")); a.ij=!1;a.Ab||(a.Ab=null,a.trigger(L.prototype.j.Dj,null))},function(){a.Ab=localStorage.getItem("__c2save_"+h)||"";ga("Loaded state from WebStorage ("+a.Ab.length+" bytes)");a.ij=!1;a.Ab||(a.Ab=null,a.trigger(L.prototype.j.Dj,null))});else{try{this.Ab=localStorage.getItem("__c2save_"+h)||"",ga("Loaded state from WebStorage ("+this.Ab.length+" bytes)")}catch(l){this.Ab=null}this.ij=!1;a.Ab||(a.Ab=null,a.trigger(L.prototype.j.Dj,null))}this.bo=this.Ok=""}null!==this.Ab&&(this.Sb(),this.Zx(this.Ab)? (this.ue=this.Ab,this.trigger(L.prototype.j.gu,null),this.ue=""):a.trigger(L.prototype.j.Dj,null),this.Ab=null)};g.prototype.az=function(){var a,f,h,e,m,l,d,c={c2save:!0,version:1,rt:{time:this.wb.R,walltime:this.Ne.R,timescale:this.sg,tickcount:this.pj,execcount:this.Pf,next_uid:this.Ni,running_layout:this.za.ka,start_time_offset:Date.now()-this.Dl},types:{},layouts:{},events:{groups:{},cnds:{},acts:{},vars:{}}};a=0;for(f=this.A.length;a<f;a++)if(m=this.A[a],!m.I&&!this.xo(m)){l={instances:[]};Va(m.U)&& (l.ex=b(m.U));h=0;for(e=m.d.length;h<e;h++)l.instances.push(this.ao(m.d[h]));c.types[m.ka.toString()]=l}a=0;for(f=this.td.length;a<f;a++)h=this.td[a],c.layouts[h.ka.toString()]=h.cb();e=c.events.groups;a=0;for(f=this.Ue.length;a<f;a++)h=this.Ue[a],e[h.ka.toString()]=this.gi[h.fi].Mg;f=c.events.cnds;for(d in this.cf)this.cf.hasOwnProperty(d)&&(a=this.cf[d],Va(a.U)&&(f[d]={ex:b(a.U)}));f=c.events.acts;for(d in this.Te)this.Te.hasOwnProperty(d)&&(a=this.Te[d],Va(a.U)&&(f[d]={ex:b(a.U)}));f=c.events.vars; for(d in this.Fh)this.Fh.hasOwnProperty(d)&&(a=this.Fh[d],a.Ik||a.parent&&!a.ti||(f[d]=a.data));c.system=this.Xd.cb();return JSON.stringify(c)};g.prototype.as=function(){var a,b,f,h,e,m;this.ze={};a=0;for(b=this.A.length;a<b;a++)if(f=this.A[a],!f.I)for(h=0,e=f.d.length;h<e;h++)m=f.d[h],this.ze[m.uid.toString()]=m};g.prototype.Zx=function(a){var b;try{b=JSON.parse(a)}catch(f){return!1}if(!b.c2save||1<b.version)return!1;this.mi=!0;a=b.rt;this.wb.reset();this.wb.R=a.time;this.Ne.reset();this.Ne.R=a.walltime|| 0;this.sg=a.timescale;this.pj=a.tickcount;this.Pf=a.execcount;this.Dl=Date.now()-a.start_time_offset;var h=a.running_layout;if(h!==this.za.ka)if(h=this.sq(h))this.Wp(h);else return;var e,m,l,d,c,t,u;t=b.types;for(m in t)if(t.hasOwnProperty(m)&&(d=this.yk(parseInt(m,10)))&&!d.I&&!this.xo(d)){t[m].ex?d.U=t[m].ex:Xa(d.U);c=d.d;l=t[m].instances;h=0;for(e=qa(c.length,l.length);h<e;h++)this.Pk(c[h],l[h]);h=l.length;for(e=c.length;h<e;h++)this.Pe(c[h]);h=c.length;for(e=l.length;h<e;h++){c=null;if(d.va.qf&& (c=this.za.wk(l[h].w.l),!c))continue;c=this.ef(d.Zc,c,!1,0,0,!0);this.Pk(c,l[h])}d.xh=!0}this.Sb();this.as();e=b.layouts;for(m in e)e.hasOwnProperty(m)&&(h=this.sq(parseInt(m,10)))&&h.zb(e[m]);e=b.events.groups;for(m in e)e.hasOwnProperty(m)&&(h=this.$w(parseInt(m,10)))&&this.gi[h.fi]&&this.gi[h.fi].ks(e[m]);h=b.events.cnds;for(m in this.cf)this.cf.hasOwnProperty(m)&&(h.hasOwnProperty(m)?this.cf[m].U=h[m].ex:this.cf[m].U={});h=b.events.acts;for(m in this.Te)this.Te.hasOwnProperty(m)&&(h.hasOwnProperty(m)? this.Te[m].U=h[m].ex:this.Te[m].U={});h=b.events.vars;for(m in h)h.hasOwnProperty(m)&&this.Fh.hasOwnProperty(m)&&(this.Fh[m].data=h[m]);this.Ni=a.next_uid;this.mi=!1;h=0;for(e=this.nk.length;h<e;++h)c=this.nk[h],this.trigger(Object.getPrototypeOf(c.type.va).j.xg,c);y(this.nk);this.Xd.zb(b.system);h=0;for(e=this.A.length;h<e;h++)if(d=this.A[h],!d.I&&!this.xo(d))for(b=0,m=d.d.length;b<m;b++){c=d.d[b];if(d.Gb)for(t=c.ei(),y(c.siblings),a=0,l=d.vc.length;a<l;a++)u=d.vc[a],d!==u&&c.siblings.push(u.d[t]); c.de&&c.de();if(c.N)for(a=0,l=c.N.length;a<l;a++)t=c.N[a],t.de&&t.de()}return this.na=!0};g.prototype.ao=function(a,f){var h,e,m,l,d;l=a.type;m=l.va;var c={};f?c.c2=!0:c.uid=a.uid;Va(a.U)&&(c.ex=b(a.U));if(a.ub&&a.ub.length)for(c.ivs={},h=0,e=a.ub.length;h<e;h++)c.ivs[a.type.$m[h].toString()]=a.ub[h];if(m.qf){m={x:a.x,y:a.y,w:a.width,h:a.height,l:a.n.ka,zi:a.Ld()};0!==a.k&&(m.a=a.k);1!==a.opacity&&(m.o=a.opacity);.5!==a.cc&&(m.hX=a.cc);.5!==a.ec&&(m.hY=a.ec);0!==a.Tb&&(m.bm=a.Tb);a.visible||(m.v= a.visible);a.he||(m.ce=a.he);-1!==a.Mi&&(m.mts=a.Mi);if(l.T.length)for(m.fx=[],h=0,e=l.T.length;h<e;h++)d=l.T[h],m.fx.push({name:d.name,active:a.Se[d.index],params:a.Ra[d.index]});c.w=m}if(a.N&&a.N.length)for(c.behs={},h=0,e=a.N.length;h<e;h++)l=a.N[h],l.cb&&(c.behs[l.type.ka.toString()]=l.cb());a.cb&&(c.data=a.cb());return c};g.prototype.bx=function(a,b){var f,h;f=0;for(h=a.$m.length;f<h;f++)if(a.$m[f]===b)return f;return-1};g.prototype.Xw=function(a,b){var f,h;f=0;for(h=a.N.length;f<h;f++)if(a.N[f].type.ka=== b)return f;return-1};g.prototype.Pk=function(a,b,f){var h,e,m,l,d;d=a.type;var c=d.va;if(f){if(!b.c2)return}else a.uid=b.uid;b.ex?a.U=b.ex:Xa(a.U);if(e=b.ivs)for(h in e)e.hasOwnProperty(h)&&(m=this.bx(d,parseInt(h,10)),0>m||m>=a.ub.length||(l=e[h],null===l&&(l=NaN),a.ub[m]=l));if(c.qf){m=b.w;a.n.ka!==m.l&&(e=a.n,a.n=this.za.wk(m.l),a.n?(e.ph(a,!0),a.n.Nh(a,!0),a.ca(),a.n.$i(0)):(a.n=e,f||this.Pe(a)));a.x=m.x;a.y=m.y;a.width=m.w;a.height=m.h;a.Dd=m.zi;a.k=m.hasOwnProperty("a")?m.a:0;a.opacity=m.hasOwnProperty("o")? m.o:1;a.cc=m.hasOwnProperty("hX")?m.hX:.5;a.ec=m.hasOwnProperty("hY")?m.hY:.5;a.visible=m.hasOwnProperty("v")?m.v:!0;a.he=m.hasOwnProperty("ce")?m.ce:!0;a.Mi=m.hasOwnProperty("mts")?m.mts:-1;a.Tb=m.hasOwnProperty("bm")?m.bm:0;a.Rh=jb(a.Tb);this.F&&kb(a,a.Tb,this.F);a.ca();if(m.hasOwnProperty("fx"))for(f=0,e=m.fx.length;f<e;f++)l=d.Mm(m.fx[f].name),0>l||(a.Se[l]=m.fx[f].active,a.Ra[l]=m.fx[f].params);a.Bd()}if(d=b.behs)for(h in d)d.hasOwnProperty(h)&&(f=this.Xw(a,parseInt(h,10)),0>f||a.N[f].zb(d[h])); b.data&&a.zb(b.data)};g.prototype.aq=function(a,b,f){window.resolveLocalFileSystemURL(cordova.file.applicationDirectory+"www/"+a,function(a){a.file(b,f)},f)};g.prototype.cq=function(a,b,f){this.aq(a,function(a){var h=new FileReader;h.onload=function(a){b(a.target.result)};h.onerror=f;h.readAsText(a)},f)};var K=[],Z=0;g.prototype.wn=function(){if(K.length&&!(8<=Z)){Z++;var a=K.shift();this.Lv(a.filename,a.nz,a.kw)}};g.prototype.bq=function(a,b,f){var h=this;K.push({filename:a,nz:function(a){Z--;h.wn(); b(a)},kw:function(a){Z--;h.wn();f(a)}});this.wn()};g.prototype.Lv=function(a,b,f){this.aq(a,function(a){var f=new FileReader;f.onload=function(a){b(a.target.result)};f.readAsArrayBuffer(a)},f)};g.prototype.Qw=function(a,b,f){var h="",e=a.toLowerCase(),m=e.substr(e.length-4),e=e.substr(e.length-5);".mp4"===m?h="video/mp4":".webm"===e?h="video/webm":".m4a"===m?h="audio/mp4":".mp3"===m&&(h="audio/mpeg");this.bq(a,function(a){a=URL.createObjectURL(new Blob([a],{type:h}));b(a)},f)};g.prototype.Gq=function(a){return/^(?:[a-z]+:)?\/\//.test(a)|| "data:"===a.substr(0,5)||"blob:"===a.substr(0,5)};g.prototype.ls=function(a,b){this.ri&&!this.Gq(b)?this.Qw(b,function(b){a.src=b},function(a){alert("Failed to load image: "+a)}):a.src=b};g.prototype.xl=function(a,b){"undefined"!==typeof a.imageSmoothingEnabled?a.imageSmoothingEnabled=b:(a.webkitImageSmoothingEnabled=b,a.mozImageSmoothingEnabled=b,a.msImageSmoothingEnabled=b)};Yb=function(a){return new g(document.getElementById(a))};Zb=function(a,b){return new g({dc:!0,width:a,height:b})};window.cr_createRuntime= Yb;window.cr_createDCRuntime=Zb;window.createCocoonJSRuntime=function(){window.c2cocoonjs=!0;var a=document.createElement("screencanvas")||document.createElement("canvas");a.Xe=!0;document.body.appendChild(a);a=new g(a);window.c2runtime=a;window.addEventListener("orientationchange",function(){window.c2runtime.setSize(window.innerWidth,window.innerHeight)});window.c2runtime.setSize(window.innerWidth,window.innerHeight);return a};window.createEjectaRuntime=function(){var a=new g(document.getElementById("canvas")); window.c2runtime=a;window.c2runtime.setSize(window.innerWidth,window.innerHeight);return a}})();window.cr_getC2Runtime=function(){var g=document.getElementById("c2canvas");return g?g.c2runtime:window.c2runtime?window.c2runtime:null};window.cr_getSnapshot=function(g,k){var c=window.cr_getC2Runtime();c&&c.Jv(g,k)};window.cr_sizeCanvas=function(g,k){if(0!==g&&0!==k){var c=window.cr_getC2Runtime();c&&c.setSize(g,k)}};window.cr_setSuspended=function(g){var k=window.cr_getC2Runtime();k&&k.setSuspended(g)}; (function(){function g(a,b){this.b=a;this.Nf=null;this.scrollX=this.b.Cb/2;this.scrollY=this.b.Bb/2;this.scale=1;this.k=0;this.Kg=!0;this.name=b[0];this.vy=b[1];this.uy=b[2];this.width=b[1];this.height=b[2];this.Ks=b[3];this.rs=b[4];this.ka=b[5];var e=b[6],f,d;this.Y=[];this.ji=[];f=0;for(d=e.length;f<d;f++){var c=new $b(this,e[f]);c.Ar=f;this.Y.push(c)}e=b[7];this.mf=[];f=0;for(d=e.length;f<d;f++){var c=e[f],g=this.b.A[c[1]];g.Zc||(g.Zc=c);this.mf.push(c);-1===this.ji.indexOf(g)&&this.ji.push(g)}this.T= [];this.ua=[];this.Ge=!0;this.Ra=[];f=0;for(d=b[8].length;f<d;f++)this.T.push({id:b[8][f][0],name:b[8][f][1],lb:-1,wd:!1,Oa:!0,index:f}),this.Ra.push(b[8][f][2].slice(0));this.Bd();this.Xi=new wa(0,0,1,1);this.Tn=new wa(0,0,1,1);this.uf={}}function k(a,b){return a.Dd-b.Dd}function c(a,b){this.yb=a;this.b=a.b;this.d=[];this.scale=1;this.k=0;this.le=!1;this.Je=new wa(0,0,0,0);this.Fs=new xa;this.Ia=this.Ca=this.Ja=this.Ba=0;this.ug=!1;this.Oe=-1;this.pm=0;this.name=b[0];this.index=b[1];this.ka=b[2]; this.visible=b[3];this.nd=b[4];this.Ad=b[5];this.ed=b[6];this.fd=b[7];this.opacity=b[8];this.qk=b[9];this.Tc=b[10];this.Ed=b[11];this.Tb=b[12];this.gw=b[13];this.Rh="source-over";this.Vb=this.Zb=0;this.Rb=null;this.ve=p();this.yd=!0;this.$g=new wa(0,0,-1,-1);this.Kb=new wa(0,0,-1,-1);this.Tc&&(this.Rb=new gb(this.b.Cb,this.b.Bb));this.Vd=!1;var e=b[14],f,d;this.zs=[];this.Kc=[];this.Th=[];f=0;for(d=e.length;f<d;f++){var c=e[f],g=this.b.A[c[1]];g.Zc||(g.Zc=c,g.Gv=this.index);this.Kc.push(c);-1===this.yb.ji.indexOf(g)&& this.yb.ji.push(g)}Ba(this.zs,this.Kc);this.T=[];this.ua=[];this.Ge=!0;this.Ra=[];f=0;for(d=b[15].length;f<d;f++)this.T.push({id:b[15][f][0],name:b[15][f][1],lb:-1,wd:!1,Oa:!0,index:f}),this.Ra.push(b[15][f][2].slice(0));this.Bd();this.Xi=new wa(0,0,1,1);this.Tn=new wa(0,0,1,1)}function p(){return b.length?b.pop():[]}function q(a){y(a);b.push(a)}g.prototype.$y=function(a){var b=a.type.ka.toString();this.uf.hasOwnProperty(b)||(this.uf[b]=[]);this.uf[b].push(this.b.ao(a))};g.prototype.xq=function(){var a= this.Y[0];return!a.Ad&&1===a.opacity&&!a.qk&&a.visible};g.prototype.Bd=function(){y(this.ua);this.Ge=!0;var a,b,e;a=0;for(b=this.T.length;a<b;a++)e=this.T[a],e.Oa&&(this.ua.push(e),e.wd||(this.Ge=!1))};g.prototype.Lm=function(a){var b,e,f;b=0;for(e=this.T.length;b<e;b++)if(f=this.T[b],f.name===a)return f;return null};var n=[],r=!0;g.prototype.po=function(){this.rs&&(this.Nf=this.b.Cm[this.rs],this.Nf.zo());this.b.za=this;this.width=this.vy;this.height=this.uy;this.scrollX=this.b.Cb/2;this.scrollY= this.b.Bb/2;var a,b,e,f,d,c,g;a=0;for(e=this.b.A.length;a<e;a++)if(b=this.b.A[a],!b.I)for(d=b.d,b=0,f=d.length;b<f;b++)if(c=d[b],c.n){var m=c.n.Ar;m>=this.Y.length&&(m=this.Y.length-1);c.n=this.Y[m];-1===c.n.d.indexOf(c)&&c.n.d.push(c);c.n.ug=!0}if(!r)for(a=0,e=this.Y.length;a<e;++a)this.Y[a].d.sort(k);y(n);this.wv();a=0;for(e=this.Y.length;a<e;a++)c=this.Y[a],c.Fv(),c.Tl();d=!1;if(!this.Kg){for(g in this.uf)if(this.uf.hasOwnProperty(g)&&(b=this.b.yk(parseInt(g,10)))&&!b.I&&this.b.yo(b)){f=this.uf[g]; a=0;for(e=f.length;a<e;a++){c=null;if(b.va.qf&&(c=this.wk(f[a].w.l),!c))continue;c=this.b.ef(b.Zc,c,!1,0,0,!0);this.b.Pk(c,f[a]);d=!0;n.push(c)}y(f)}a=0;for(e=this.Y.length;a<e;a++)this.Y[a].d.sort(k),this.Y[a].ug=!0}d&&(this.b.Sb(),this.b.as());for(a=0;a<n.length;a++)if(c=n[a],c.type.Gb)for(e=c.ei(),b=0,f=c.type.vc.length;b<f;b++)g=c.type.vc[b],c.type!==g&&(g.d.length>e?c.siblings.push(g.d[e]):g.Zc&&(d=this.b.ef(g.Zc,c.n,!0,c.x,c.y,!0),this.b.Sb(),g.Rl(),c.siblings.push(d),n.push(d)));a=0;for(e= this.mf.length;a<e;a++)c=this.mf[a],b=this.b.A[c[1]],b.Gb||this.b.ef(this.mf[a],null,!0);this.b.Ef=null;this.b.Sb();if(this.b.Ka&&!this.b.hb)for(a=0,e=this.b.A.length;a<e;a++)g=this.b.A[a],!g.I&&g.d.length&&g.nl&&g.nl(this.b.Ka);if(this.b.mi)Ba(this.b.nk,n);else for(a=0,e=n.length;a<e;a++)c=n[a],this.b.trigger(Object.getPrototypeOf(c.type.va).j.xg,c);y(n);this.b.mi||this.b.trigger(L.prototype.j.Zo,null);this.Kg=!1};g.prototype.Ev=function(){var a,b,e,f,d;b=a=0;for(e=this.mf.length;a<e;a++)f=this.mf[a], d=this.b.A[f[1]],d.global?d.Gb||this.b.ef(f,null,!0):(this.mf[b]=f,b++);Aa(this.mf,b)};g.prototype.lz=function(){this.b.mi||this.b.trigger(L.prototype.j.fu,null);this.b.bn=!0;y(this.b.Xd.sc);var a,b,e,f,d,c;if(!this.Kg)for(a=0,b=this.Y.length;a<b;a++)for(this.Y[a].Co(),d=this.Y[a].d,e=0,f=d.length;e<f;e++)c=d[e],c.type.global||this.b.yo(c.type)&&this.$y(c);a=0;for(b=this.Y.length;a<b;a++){d=this.Y[a].d;e=0;for(f=d.length;e<f;e++)c=d[e],c.type.global||this.b.Pe(c);this.b.Sb();y(d);this.Y[a].ug=!0}a= 0;for(b=this.b.A.length;a<b;a++)if(d=this.b.A[a],!(d.global||d.va.qf||d.va.Cl||d.I)){e=0;for(f=d.d.length;e<f;e++)this.b.Pe(d.d[e]);this.b.Sb()}r=!1;this.b.bn=!1};new wa(0,0,0,0);g.prototype.me=function(a){var b,e=a,f=!1,d=!this.b.Hc;d&&(this.b.Nk||(this.b.Nk=document.createElement("canvas"),b=this.b.Nk,b.width=this.b.L,b.height=this.b.K,this.b.Wq=b.getContext("2d"),f=!0),b=this.b.Nk,e=this.b.Wq,b.width!==this.b.L&&(b.width=this.b.L,f=!0),b.height!==this.b.K&&(b.height=this.b.K,f=!0),f&&this.b.xl(e, this.b.Ga));e.globalAlpha=1;e.globalCompositeOperation="source-over";this.b.Mp&&!this.xq()&&e.clearRect(0,0,this.b.L,this.b.K);var c,g,f=0;for(c=this.Y.length;f<c;f++)g=this.Y[f],g.visible&&0<g.opacity&&11!==g.Tb&&(g.d.length||!g.Ad)?g.me(e):g.Tl();d&&a.drawImage(b,0,0,this.b.width,this.b.height)};g.prototype.If=function(a){a.js(!0);this.b.ib||(this.b.ib=a.Yc(this.b.L,this.b.K,this.b.Ga));if(this.b.ib.Df!==this.b.L||this.b.ib.Cf!==this.b.K)a.deleteTexture(this.b.ib),this.b.ib=a.Yc(this.b.L,this.b.K, this.b.Ga);a.gd(this.b.ib);this.b.Hc||a.Ee(this.b.L,this.b.K);var b,e;for(b=this.Y.length-1;0<=b;--b)e=this.Y[b],e.visible&&1===e.opacity&&e.Ge&&0===e.Tb&&(e.d.length||!e.Ad)?e.If(a):e.Tl();a.js(!1)};g.prototype.wc=function(a){var b=0<this.ua.length||this.b.Dh||!this.b.Hc||this.b.Ea;if(b){this.b.ib||(this.b.ib=a.Yc(this.b.L,this.b.K,this.b.Ga));if(this.b.ib.Df!==this.b.L||this.b.ib.Cf!==this.b.K)a.deleteTexture(this.b.ib),this.b.ib=a.Yc(this.b.L,this.b.K,this.b.Ga);a.gd(this.b.ib);this.b.Hc||a.Ee(this.b.L, this.b.K)}else this.b.ib&&(a.gd(null),a.deleteTexture(this.b.ib),this.b.ib=null);this.b.Mp&&!this.xq()&&a.clear(0,0,0,0);var e,f,d;e=0;for(f=this.Y.length;e<f;e++)d=this.Y[e],d.visible&&0<d.opacity&&(d.d.length||!d.Ad)?d.wc(a):d.Tl();b&&(0===this.ua.length||1===this.ua.length&&this.b.Hc?(1===this.ua.length?(b=this.ua[0].index,a.rc(this.ua[0].lb),a.uh(null,1/this.b.L,1/this.b.K,0,0,1,1,this.scale,this.k,0,0,this.b.L/2,this.b.K/2,this.b.wb.R,this.Ra[b]),a.ol(this.ua[0].lb)&&(this.b.na=!0)):a.rc(0), this.b.Hc||a.Ee(this.b.width,this.b.height),a.gd(null),a.gs(!1),a.mg(1),a.Cc(this.b.ib),a.ds(),a.Wd(),a.Cd(),b=this.b.width/2,e=this.b.height/2,a.Vi(-b,e,b,e,b,-e,-b,-e),a.Cc(null),a.gs(!0)):this.Vn(a,null,null,null))};g.prototype.di=function(){return 0<this.ua.length||this.b.Dh||!this.b.Hc||this.b.Ea?this.b.ib:null};g.prototype.tq=function(){var a=this.Y[0].ad(),b,e,f;b=1;for(e=this.Y.length;b<e;b++)f=this.Y[b],(0!==f.ed||0!==f.fd)&&f.ad()<a&&(a=f.ad());return a};g.prototype.co=function(a){if(!this.Ks){var b= 1/this.tq()*this.b.L/2;a>this.width-b&&(a=this.width-b);a<b&&(a=b)}this.scrollX!==a&&(this.scrollX=a,this.b.na=!0)};g.prototype.eo=function(a){if(!this.Ks){var b=1/this.tq()*this.b.K/2;a>this.height-b&&(a=this.height-b);a<b&&(a=b)}this.scrollY!==a&&(this.scrollY=a,this.b.na=!0)};g.prototype.wv=function(){this.co(this.scrollX);this.eo(this.scrollY)};g.prototype.Vn=function(a,b,e,f){var d=e?e.ua:b?b.ua:this.ua,c=1,g=0,m=0,u=0,k=this.b.L,p=this.b.K;e?(c=e.n.ad(),g=e.n.Nb(),m=e.n.Ba,u=e.n.Ca,k=e.n.Ja, p=e.n.Ia):b&&(c=b.ad(),g=b.Nb(),m=b.Ba,u=b.Ca,k=b.Ja,p=b.Ia);var q=this.b.Jm,r,n,A,I,M=0,P=1,Y,F,U=this.b.L,E=this.b.K,K=U/2,Z=E/2,z=b?b.Xi:this.Xi,H=b?b.Tn:this.Tn,N=0,B=0,O=0,D=0,V=U,va=U,W=E,la=E,ba=A=0;I=e?e.n.Nb():0;if(e){r=0;for(n=d.length;r<n;r++)A+=a.ix(d[r].lb),ba+=a.jx(d[r].lb);D=e.Ya;N=b.fc(D.left,D.top,!0,!0);O=b.fc(D.left,D.top,!1,!0);V=b.fc(D.right,D.bottom,!0,!0);W=b.fc(D.right,D.bottom,!1,!0);0!==I&&(r=b.fc(D.right,D.top,!0,!0),n=b.fc(D.right,D.top,!1,!0),B=b.fc(D.left,D.bottom,!0, !0),D=b.fc(D.left,D.bottom,!1,!0),I=Math.min(N,V,r,B),V=Math.max(N,V,r,B),N=I,I=Math.min(O,W,n,D),W=Math.max(O,W,n,D),O=I);N-=A;O-=ba;V+=A;W+=ba;H.left=N/U;H.top=1-O/E;H.right=V/U;H.bottom=1-W/E;B=N=sa(N);D=O=sa(O);va=V=ta(V);la=W=ta(W);B-=A;D-=ba;va+=A;la+=ba;0>N&&(N=0);0>O&&(O=0);V>U&&(V=U);W>E&&(W=E);0>B&&(B=0);0>D&&(D=0);va>U&&(va=U);la>E&&(la=E);z.left=N/U;z.top=1-O/E;z.right=V/U;z.bottom=1-W/E}else z.left=H.left=0,z.top=H.top=0,z.right=H.right=1,z.bottom=H.bottom=1;ba=e&&(a.Ti(d[0].lb)||0!== A||0!==ba||1!==e.opacity||e.type.va.ur)||b&&!e&&1!==b.opacity;a.ds();if(ba){q[M]||(q[M]=a.Yc(U,E,this.b.Ga));if(q[M].Df!==U||q[M].Cf!==E)a.deleteTexture(q[M]),q[M]=a.Yc(U,E,this.b.Ga);a.rc(0);a.gd(q[M]);F=la-D;a.clearRect(B,E-D-F,va-B,F);e?e.wc(a):(a.Cc(this.b.xb),a.mg(b.opacity),a.Wd(),a.translate(-K,-Z),a.Cd(),a.Ud(N,W,V,W,V,O,N,O,z));H.left=H.top=0;H.right=H.bottom=1;e&&(I=z.top,z.top=z.bottom,z.bottom=I);M=1;P=0}a.mg(1);A=d.length-1;var Ma=a.Qn(d[A].lb)||!b&&!e&&!this.b.Hc;r=I=0;for(n=d.length;r< n;r++){q[M]||(q[M]=a.Yc(U,E,this.b.Ga));if(q[M].Df!==U||q[M].Cf!==E)a.deleteTexture(q[M]),q[M]=a.Yc(U,E,this.b.Ga);a.rc(d[r].lb);I=d[r].index;a.ol(d[r].lb)&&(this.b.na=!0);0!=r||ba?(a.uh(f,1/U,1/E,H.left,H.top,H.right,H.bottom,c,g,m,u,(m+k)/2,(u+p)/2,this.b.wb.R,e?e.Ra[I]:b?b.Ra[I]:this.Ra[I]),a.Cc(null),r!==A||Ma?(a.gd(q[M]),F=la-D,Y=E-D-F,a.clearRect(B,Y,va-B,F)):(e?a.wf(e.Zb,e.Vb):b&&a.wf(b.Zb,b.Vb),a.gd(f)),a.Cc(q[P]),a.Wd(),a.translate(-K,-Z),a.Cd(),a.Ud(N,W,V,W,V,O,N,O,z),r!==A||Ma||a.Cc(null)): (a.gd(q[M]),F=la-D,Y=E-D-F,a.clearRect(B,Y,va-B,F),e?(e.Qa&&e.Qa.H?(Y=e.Qa.H,P=1/Y.width,Y=1/Y.height):(P=1/e.width,Y=1/e.height),a.uh(f,P,Y,H.left,H.top,H.right,H.bottom,c,g,m,u,(m+k)/2,(u+p)/2,this.b.wb.R,e.Ra[I]),e.wc(a)):(a.uh(f,1/U,1/E,0,0,1,1,c,g,m,u,(m+k)/2,(u+p)/2,this.b.wb.R,b?b.Ra[I]:this.Ra[I]),a.Cc(b?this.b.xb:this.b.ib),a.Wd(),a.translate(-K,-Z),a.Cd(),a.Ud(N,W,V,W,V,O,N,O,z)),H.left=H.top=0,H.right=H.bottom=1,e&&!Ma&&(I=W,W=O,O=I));M=0===M?1:0;P=0===M?1:0}Ma&&(a.rc(0),e?a.wf(e.Zb,e.Vb): b?a.wf(b.Zb,b.Vb):this.b.Hc||(a.Ee(this.b.width,this.b.height),K=this.b.width/2,Z=this.b.height/2,O=N=0,V=this.b.width,W=this.b.height),a.gd(f),a.Cc(q[P]),a.Wd(),a.translate(-K,-Z),a.Cd(),e&&1===d.length&&!ba?a.Ud(N,O,V,O,V,W,N,W,z):a.Ud(N,W,V,W,V,O,N,O,z),a.Cc(null))};g.prototype.wk=function(a){var b,e;b=0;for(e=this.Y.length;b<e;b++)if(this.Y[b].ka===a)return this.Y[b];return null};g.prototype.cb=function(){var a,b,e,f={sx:this.scrollX,sy:this.scrollY,s:this.scale,a:this.k,w:this.width,h:this.height, fv:this.Kg,persist:this.uf,fx:[],layers:{}};a=0;for(b=this.T.length;a<b;a++)e=this.T[a],f.fx.push({name:e.name,active:e.Oa,params:this.Ra[e.index]});a=0;for(b=this.Y.length;a<b;a++)e=this.Y[a],f.layers[e.ka.toString()]=e.cb();return f};g.prototype.zb=function(a){var b,e,f,d;this.scrollX=a.sx;this.scrollY=a.sy;this.scale=a.s;this.k=a.a;this.width=a.w;this.height=a.h;this.uf=a.persist;"undefined"!==typeof a.fv&&(this.Kg=a.fv);var c=a.fx;b=0;for(e=c.length;b<e;b++)if(f=this.Lm(c[b].name))f.Oa=c[b].active, this.Ra[f.index]=c[b].params;this.Bd();b=a.layers;for(d in b)b.hasOwnProperty(d)&&(a=this.wk(parseInt(d,10)))&&a.zb(b[d])};Ib=g;c.prototype.Bd=function(){y(this.ua);this.Ge=!0;var a,b,e;a=0;for(b=this.T.length;a<b;a++)e=this.T[a],e.Oa&&(this.ua.push(e),e.wd||(this.Ge=!1))};c.prototype.Lm=function(a){var b,e,f;b=0;for(e=this.T.length;b<e;b++)if(f=this.T[b],f.name===a)return f;return null};c.prototype.Fv=function(){var a,b,e,f,d,c;b=a=0;for(e=this.Kc.length;a<e;a++){f=this.Kc[a];d=this.b.A[f[1]];c= this.b.yo(d);d=!0;if(!c||this.yb.Kg){f=this.b.ef(f,this,!0);if(!f)continue;n.push(f);f.type.global&&(d=!1,this.Th.push(f.uid))}d&&(this.Kc[b]=this.Kc[a],b++)}this.Kc.length=b;this.b.Sb();!this.b.B&&this.T.length&&(this.Tb=this.gw);this.Rh=jb(this.Tb);this.b.F&&kb(this,this.Tb,this.b.F);this.yd=!0};c.prototype.ph=function(a,b){var e=Da(this.d,a);0>e||(b&&this.Tc&&a.oc&&a.oc.right>=a.oc.left&&(a.Fa(),this.Rb.update(a,a.oc,null),a.oc.set(0,0,-1,-1)),e===this.d.length-1?this.d.pop():(za(this.d,e),this.$i(e)), this.yd=!0)};c.prototype.Nh=function(a,b){a.Dd=this.d.length;this.d.push(a);b&&this.Tc&&a.oc&&a.ca();this.yd=!0};c.prototype.Ey=function(a){this.d.unshift(a);this.$i(0)};c.prototype.fy=function(a,b,e){var f=a.Ld();b=b.Ld();za(this.d,f);f<b&&b--;e&&b++;b===this.d.length?this.d.push(a):this.d.splice(b,0,a);this.$i(f<b?f:b)};c.prototype.$i=function(a){-1===this.Oe?this.Oe=a:a<this.Oe&&(this.Oe=a);this.yd=this.ug=!0};c.prototype.Co=function(){if(this.ug){-1===this.Oe&&(this.Oe=0);var a,b,e;if(this.Tc)for(a= this.Oe,b=this.d.length;a<b;++a)e=this.d[a],e.Dd=a,this.Rb.by(e.oc);else for(a=this.Oe,b=this.d.length;a<b;++a)this.d[a].Dd=a;this.ug=!1;this.Oe=-1}};c.prototype.ad=function(a){return this.cx()*(this.b.Hc||a?this.b.Oh:1)};c.prototype.cx=function(){return(this.scale*this.yb.scale-1)*this.Ed+1};c.prototype.Nb=function(){return this.le?0:Ka(this.yb.k+this.k)};var b=[],d=[],e=[];c.prototype.Qm=function(){this.Co();this.Rb.ql(this.Ba,this.Ca,this.Ja,this.Ia,e);if(!e.length)return p();if(1===e.length){var a= p();Ba(a,e[0]);y(e);return a}for(var b=!0;1<e.length;){for(var a=e,c=void 0,f=void 0,t=void 0,g=void 0,k=void 0,c=0,f=a.length;c<f-1;c+=2){var t=a[c],g=a[c+1],k=p(),m=t,u=g,r=k,n=0,G=0,J=0,w=m.length,A=u.length,I=void 0,M=void 0;for(r.length=w+A;n<w&&G<A;++J)I=m[n],M=u[G],I.Dd<M.Dd?(r[J]=I,++n):(r[J]=M,++G);for(;n<w;++n,++J)r[J]=m[n];for(;G<A;++G,++J)r[J]=u[G];b||(q(t),q(g));d.push(k)}1===f%2&&(b?(t=p(),Ba(t,a[f-1]),d.push(t)):d.push(a[f-1]));Ba(a,d);y(d);b=!1}a=e[0];y(e);return a};c.prototype.me= function(a){this.Vd=this.qk||1!==this.opacity||0!==this.Tb;var b=this.b.canvas,e=a,f=!1;this.Vd&&(this.b.Mk||(this.b.Mk=document.createElement("canvas"),b=this.b.Mk,b.width=this.b.L,b.height=this.b.K,this.b.Vq=b.getContext("2d"),f=!0),b=this.b.Mk,e=this.b.Vq,b.width!==this.b.L&&(b.width=this.b.L,f=!0),b.height!==this.b.K&&(b.height=this.b.K,f=!0),f&&this.b.xl(e,this.b.Ga),this.Ad&&e.clearRect(0,0,this.b.L,this.b.K));e.globalAlpha=1;e.globalCompositeOperation="source-over";this.Ad||(e.fillStyle="rgb("+ this.nd[0]+","+this.nd[1]+","+this.nd[2]+")",e.fillRect(0,0,this.b.L,this.b.K));e.save();this.le=!0;var f=this.$b(0,0,!0,!0),d=this.$b(0,0,!1,!0);this.le=!1;this.b.ud&&(f=Math.round(f),d=Math.round(d));this.sl(f,d,e);var c=this.ad();e.scale(c,c);e.translate(-f,-d);this.Tc?(this.Kb.left=this.Rb.jc(this.Ba),this.Kb.top=this.Rb.kc(this.Ca),this.Kb.right=this.Rb.jc(this.Ja),this.Kb.bottom=this.Rb.kc(this.Ia),this.yd||!this.Kb.Vh(this.$g)?(q(this.ve),f=this.Qm(),this.yd=!1,this.$g.Eg(this.Kb)):f=this.ve): f=this.d;for(var g,m=null,d=0,c=f.length;d<c;++d)g=f[d],g!==m&&(this.aw(g,e),m=g);this.Tc&&(this.ve=f);e.restore();this.Vd&&(a.globalCompositeOperation=this.Rh,a.globalAlpha=this.opacity,a.drawImage(b,0,0))};c.prototype.aw=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.Fa();var e=a.Ya;e.right<this.Ba||e.bottom<this.Ca||e.left>this.Ja||e.top>this.Ia||(b.globalCompositeOperation=a.Rh,a.me(b))}};c.prototype.Tl=function(){this.le=!0;var a=this.$b(0,0,!0,!0),b=this.$b(0,0,!1,!0);this.le=!1;this.b.ud&& (a=Math.round(a),b=Math.round(b));this.sl(a,b,null)};c.prototype.sl=function(a,b,e){var f=this.ad();this.Ba=a;this.Ca=b;this.Ja=a+1/f*this.b.L;this.Ia=b+1/f*this.b.K;this.Ba>this.Ja&&(a=this.Ba,this.Ba=this.Ja,this.Ja=a);this.Ca>this.Ia&&(a=this.Ca,this.Ca=this.Ia,this.Ia=a);a=this.Nb();0!==a&&(e&&(e.translate(this.b.L/2,this.b.K/2),e.rotate(-a),e.translate(this.b.L/-2,this.b.K/-2)),this.Je.set(this.Ba,this.Ca,this.Ja,this.Ia),this.Je.offset((this.Ba+this.Ja)/-2,(this.Ca+this.Ia)/-2),this.Fs.ps(this.Je, a),this.Fs.Fp(this.Je),this.Je.offset((this.Ba+this.Ja)/2,(this.Ca+this.Ia)/2),this.Ba=this.Je.left,this.Ca=this.Je.top,this.Ja=this.Je.right,this.Ia=this.Je.bottom)};c.prototype.If=function(a){if(this.Vd=this.qk){this.b.xb||(this.b.xb=a.Yc(this.b.L,this.b.K,this.b.Ga));if(this.b.xb.Df!==this.b.L||this.b.xb.Cf!==this.b.K)a.deleteTexture(this.b.xb),this.b.xb=a.Yc(this.b.L,this.b.K,this.b.Ga);a.gd(this.b.xb)}this.le=!0;var b=this.$b(0,0,!0,!0),e=this.$b(0,0,!1,!0);this.le=!1;this.b.ud&&(b=Math.round(b), e=Math.round(e));this.sl(b,e,null);b=this.ad();a.Wd();a.scale(b,b);a.Yn(-this.Nb());a.translate((this.Ba+this.Ja)/-2,(this.Ca+this.Ia)/-2);a.Cd();this.Tc?(this.Kb.left=this.Rb.jc(this.Ba),this.Kb.top=this.Rb.kc(this.Ca),this.Kb.right=this.Rb.jc(this.Ja),this.Kb.bottom=this.Rb.kc(this.Ia),this.yd||!this.Kb.Vh(this.$g)?(q(this.ve),b=this.Qm(),this.yd=!1,this.$g.Eg(this.Kb)):b=this.ve):b=this.d;for(var f,d=null,e=b.length-1;0<=e;--e)f=b[e],f!==d&&(this.dw(b[e],a),d=f);this.Tc&&(this.ve=b);this.Ad||(this.pm= this.b.Kf++,a.yl(this.pm),a.es(1,1,1),a.jq(),a.Ry())};c.prototype.wc=function(a){var b=0,e=0;if(this.Vd=this.qk||1!==this.opacity||0<this.ua.length||0!==this.Tb){this.b.xb||(this.b.xb=a.Yc(this.b.L,this.b.K,this.b.Ga));if(this.b.xb.Df!==this.b.L||this.b.xb.Cf!==this.b.K)a.deleteTexture(this.b.xb),this.b.xb=a.Yc(this.b.L,this.b.K,this.b.Ga);a.gd(this.b.xb);this.Ad&&a.clear(0,0,0,0)}this.Ad||(this.b.Ea?(a.yl(this.pm),a.es(this.nd[0]/255,this.nd[1]/255,this.nd[2]/255),a.jq(),a.gz()):a.clear(this.nd[0]/ 255,this.nd[1]/255,this.nd[2]/255,1));this.le=!0;var f=this.$b(0,0,!0,!0),b=this.$b(0,0,!1,!0);this.le=!1;this.b.ud&&(f=Math.round(f),b=Math.round(b));this.sl(f,b,null);f=this.ad();a.Wd();a.scale(f,f);a.Yn(-this.Nb());a.translate((this.Ba+this.Ja)/-2,(this.Ca+this.Ia)/-2);a.Cd();this.Tc?(this.Kb.left=this.Rb.jc(this.Ba),this.Kb.top=this.Rb.kc(this.Ca),this.Kb.right=this.Rb.jc(this.Ja),this.Kb.bottom=this.Rb.kc(this.Ia),this.yd||!this.Kb.Vh(this.$g)?(q(this.ve),b=this.Qm(),this.yd=!1,this.$g.Eg(this.Kb)): b=this.ve):b=this.d;var d,c,g=null,e=0;for(d=b.length;e<d;++e)c=b[e],c!==g&&(this.bw(b[e],a),g=c);this.Tc&&(this.ve=b);this.Vd&&(b=this.ua.length?this.ua[0].lb:0,e=this.ua.length?this.ua[0].index:0,0===this.ua.length||1===this.ua.length&&!a.Qn(b)&&1===this.opacity?(1===this.ua.length?(a.rc(b),a.uh(this.yb.di(),1/this.b.L,1/this.b.K,0,0,1,1,f,this.Nb(),this.Ba,this.Ca,(this.Ba+this.Ja)/2,(this.Ca+this.Ia)/2,this.b.wb.R,this.Ra[e]),a.ol(b)&&(this.b.na=!0)):a.rc(0),a.gd(this.yb.di()),a.mg(this.opacity), a.Cc(this.b.xb),a.wf(this.Zb,this.Vb),a.Wd(),a.Cd(),f=this.b.L/2,b=this.b.K/2,a.Vi(-f,b,f,b,f,-b,-f,-b),a.Cc(null)):this.yb.Vn(a,this,null,this.yb.di()))};c.prototype.bw=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.Fa();var e=a.Ya;e.right<this.Ba||e.bottom<this.Ca||e.left>this.Ja||e.top>this.Ia||(b.yl(a.Kf),a.Qs?this.ew(a,b):(b.rc(0),b.wf(a.Zb,a.Vb),a.wc(b)))}};c.prototype.dw=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.Fa();var e=a.Ya;e.right<this.Ba||e.bottom<this.Ca||e.left> this.Ja||e.top>this.Ia||(a.Kf=this.b.Kf++,0===a.Tb&&1===a.opacity&&a.Ge&&a.If&&(b.yl(a.Kf),a.If(b)))}};c.prototype.ew=function(a,b){var e=a.ua[0].lb,f=a.ua[0].index,d=this.ad();if(1!==a.ua.length||b.Qn(e)||b.Gy(e)||(a.k||a.n.Nb())&&b.Ti(e)||1!==a.opacity||a.type.va.ur)this.yb.Vn(b,this,a,this.Vd?this.b.xb:this.yb.di()),b.Wd(),b.scale(d,d),b.Yn(-this.Nb()),b.translate((this.Ba+this.Ja)/-2,(this.Ca+this.Ia)/-2),b.Cd();else{b.rc(e);b.wf(a.Zb,a.Vb);b.ol(e)&&(this.b.na=!0);var c=0,g=0,m=0,u=0;b.Ti(e)&& (u=a.Ya,c=this.fc(u.left,u.top,!0,!0),g=this.fc(u.left,u.top,!1,!0),m=this.fc(u.right,u.bottom,!0,!0),u=this.fc(u.right,u.bottom,!1,!0),c=c/windowWidth,g=1-g/windowHeight,m=m/windowWidth,u=1-u/windowHeight);var k;a.Qa&&a.Qa.H?(k=a.Qa.H,e=1/k.width,k=1/k.height):(e=1/a.width,k=1/a.height);b.uh(this.Vd?this.b.xb:this.yb.di(),e,k,c,g,m,u,d,this.Nb(),this.Ba,this.Ca,(this.Ba+this.Ja)/2,(this.Ca+this.Ia)/2,this.b.wb.R,a.Ra[f]);a.wc(b)}};c.prototype.$b=function(a,b,e,f){var d=this.b.devicePixelRatio;this.b.Xf&& (a*=d,b*=d);var d=this.b.Sr,c=this.b.Tr,d=(this.yb.scrollX-d)*this.ed+d,c=(this.yb.scrollY-c)*this.fd+c,g=d,m=c,u=1/this.ad(!f);f?(g-=this.b.L*u/2,m-=this.b.K*u/2):(g-=this.b.width*u/2,m-=this.b.height*u/2);g+=a*u;m+=b*u;b=this.Nb();0!==b&&(g-=d,m-=c,a=Math.cos(b),b=Math.sin(b),f=g*a-m*b,m=m*a+g*b,g=f+d,m+=c);return e?g:m};c.prototype.fc=function(a,b,e,f){var d=this.b.Sr,c=this.b.Tr,g=(this.yb.scrollX-d)*this.ed+d,m=(this.yb.scrollY-c)*this.fd+c,c=g,d=m,u=this.Nb();if(0!==u){a-=g;b-=m;var k=Math.cos(-u), u=Math.sin(-u),p=a*k-b*u;b=b*k+a*u;a=p+g;b+=m}g=1/this.ad(!f);f?(c-=this.b.L*g/2,d-=this.b.K*g/2):(c-=this.b.width*g/2,d-=this.b.height*g/2);c=(a-c)/g;d=(b-d)/g;a=this.b.devicePixelRatio;this.b.Xf&&!f&&(c/=a,d/=a);return e?c:d};c.prototype.cb=function(){var a,b,e,f={s:this.scale,a:this.k,vl:this.Ba,vt:this.Ca,vr:this.Ja,vb:this.Ia,v:this.visible,bc:this.nd,t:this.Ad,px:this.ed,py:this.fd,o:this.opacity,zr:this.Ed,fx:[],cg:this.Th,instances:[]};a=0;for(b=this.T.length;a<b;a++)e=this.T[a],f.fx.push({name:e.name, active:e.Oa,params:this.Ra[e.index]});return f};c.prototype.zb=function(a){var b,e,f;this.scale=a.s;this.k=a.a;this.Ba=a.vl;this.Ca=a.vt;this.Ja=a.vr;this.Ia=a.vb;this.visible=a.v;this.nd=a.bc;this.Ad=a.t;this.ed=a.px;this.fd=a.py;this.opacity=a.o;this.Ed=a.zr;this.Th=a.cg||[];Ba(this.Kc,this.zs);var d=new da;b=0;for(f=this.Th.length;b<f;++b)d.add(this.Th[b]);e=b=0;for(f=this.Kc.length;b<f;++b)d.contains(this.Kc[b][2])||(this.Kc[e]=this.Kc[b],++e);Aa(this.Kc,e);e=a.fx;b=0;for(f=e.length;b<f;b++)if(a= this.Lm(e[b].name))a.Oa=e[b].active,this.Ra[a.index]=e[b].params;this.Bd();this.d.sort(k);this.ug=!0};$b=c})(); (function(){function g(a,b){var f,e=a.length;switch(e){case 0:return!0;case 1:return a[0]===b[0];case 2:return a[0]===b[0]&&a[1]===b[1];default:for(f=0;f<e;f++)if(a[f]!==b[f])return!1;return!0}}function k(a,b){return a.index-b.index}function c(a){var b,f,e,d;2===a.length?a[0].index>a[1].index&&(b=a[0],a[0]=a[1],a[1]=b):2<a.length&&a.sort(k);a.length>=t.length&&(t.length=a.length+1);t[a.length]||(t[a.length]=[]);d=t[a.length];b=0;for(f=d.length;b<f;b++)if(e=d[b],g(a,e))return e;d.push(a);return a} function p(a,b){this.b=a;this.Hs={};this.$p={};this.Vm=!1;this.Aq=new da;this.wm=[];this.gm=[];this.name=b[0];var f=b[1];this.hf=[];var e,d;e=0;for(d=f.length;e<d;e++)this.Cq(f[e],null,this.hf)}function q(a){this.type=a;this.d=[];this.ea=[];this.ba=!0}function n(a,b,f){this.sheet=a;this.parent=b;this.b=a.b;this.ha=[];this.xf=[];this.yq=this.Ml=this.uo=this.Bk=this.group=this.oo=!1;this.rb=[];this.Uc=[];this.jd=[];this.fi="";this.Mg=this.Bk=this.group=!1;this.Xj=null;f[1]&&(this.fi=f[1][1].toLowerCase(), this.group=!0,this.Bk=!!f[1][0],this.Xj=[],this.Mg=this.Bk,this.b.Ue.push(this),this.b.gi[this.fi]=this);this.Pc=f[2];this.ka=f[4];this.group||(this.b.Ep[this.ka.toString()]=this);var e=f[5];a=0;for(b=e.length;a<b;a++){var d=new ac(this,e[a]);d.index=a;this.rb.push(d);this.xp(d.type)}e=f[6];a=0;for(b=e.length;a<b;a++)d=new bc(this,e[a]),d.index=a,this.Uc.push(d);if(8===f.length)for(f=f[7],a=0,b=f.length;a<b;a++)this.sheet.Cq(f[a],this,this.jd);this.Jk=!1;this.rb.length&&(this.Jk=null==this.rb[0].type&& this.rb[0].Mb==L.prototype.j.No)}function r(a,b){var f,e,d;if(a&&(-1===b.indexOf(a)&&b.push(a),a.Gb))for(f=0,e=a.vc.length;f<e;f++)d=a.vc[f],a!==d&&-1===b.indexOf(d)&&b.push(d)}function b(a,b){this.Dc=a;this.sheet=a.sheet;this.b=a.b;this.aa=[];this.Ta=[];this.U={};this.index=-1;this.Lh=!1;this.Mb=this.b.Qe(b[1]);this.trigger=0<b[3];this.Zp=2===b[3];this.Qd=b[4];this.Ck=b[5];this.Wx=b[6];this.ka=b[7];this.b.cf[this.ka.toString()]=this;-1===b[0]?(this.type=null,this.kb=this.$n,this.Bf=null,this.od= -1):(this.type=this.b.A[b[0]],this.kb=this.Wx?this.Yy:this.Zn,b[2]?(this.Bf=this.type.uk(b[2]),this.od=this.type.Km(b[2])):(this.Bf=null,this.od=-1),this.Dc.parent&&this.Dc.parent.zl());this.Zp&&(this.kb=this.Zy);if(10===b.length){var f,e,d=b[9];f=0;for(e=d.length;f<e;f++){var h=new cc(this,d[f]);this.aa.push(h)}this.Ta.length=d.length}}function d(a,b){this.Dc=a;this.sheet=a.sheet;this.b=a.b;this.aa=[];this.Ta=[];this.U={};this.index=-1;this.Lh=!1;this.Mb=this.b.Qe(b[1]);-1===b[0]?(this.type=null, this.kb=this.$n,this.Bf=null,this.od=-1):(this.type=this.b.A[b[0]],this.kb=this.Zn,b[2]?(this.Bf=this.type.uk(b[2]),this.od=this.type.Km(b[2])):(this.Bf=null,this.od=-1));this.ka=b[3];this.b.Te[this.ka.toString()]=this;if(6===b.length){var f,e,d=b[5];f=0;for(e=d.length;f<e;f++){var h=new cc(this,d[f]);this.aa.push(h)}this.Ta.length=d.length}}function e(){x++;v.length===x&&v.push(new dc);return v[x]}function a(a,b){this.dd=a;this.Dc=a.Dc;this.sheet=a.sheet;this.b=a.b;this.type=b[0];this.Jd=null;this.He= 0;this.get=null;this.Np=0;this.yb=null;this.key=0;this.object=null;this.index=0;this.sj=this.ng=this.sj=this.ng=this.dq=this.Of=this.tj=null;this.ld=!1;var f,e,d;switch(b[0]){case 0:case 7:this.Jd=new ec(this,b[1]);this.He=0;this.get=this.tx;break;case 1:this.Jd=new ec(this,b[1]);this.He=0;this.get=this.ux;break;case 5:this.Jd=new ec(this,b[1]);this.He=0;this.get=this.yx;break;case 3:case 8:this.Np=b[1];this.get=this.qx;break;case 6:this.yb=this.b.pn[b[1]];this.get=this.zx;break;case 9:this.key=b[1]; this.get=this.xx;break;case 4:this.object=this.b.A[b[1]];this.get=this.Ax;this.Dc.xp(this.object);this.dd instanceof bc?this.Dc.zl():this.Dc.parent&&this.Dc.parent.zl();break;case 10:this.index=b[1];a.type&&a.type.I?(this.get=this.vx,this.ld=!0):this.get=this.wx;break;case 11:this.tj=b[1];this.Of=null;this.get=this.rx;break;case 2:case 12:this.dq=b[1];this.get=this.ox;break;case 13:for(this.get=this.Bx,this.ng=[],this.sj=[],f=1,e=b.length;f<e;f++)d=new cc(this.dd,b[f]),this.ng.push(d),this.sj.push(0)}} function h(a,b,f){this.sheet=a;this.parent=b;this.b=a.b;this.ha=[];this.name=f[1];this.uj=f[2];this.Ym=f[3];this.ti=!!f[4];this.Ik=!!f[5];this.ka=f[6];this.b.Fh[this.ka.toString()]=this;this.data=this.Ym;this.parent?(this.gg=this.ti||this.Ik?-1:this.b.jz++,this.b.qv.push(this)):(this.gg=-1,this.b.pv.push(this))}function l(a,b,f){this.sheet=a;this.parent=b;this.b=a.b;this.ha=[];this.ii=null;this.Hx=f[1];this.Oa=!0}function f(){this.Bs=[];this.reset(null)}var t=[];p.prototype.toString=function(){return this.name}; p.prototype.Cq=function(a,b,f){switch(a[0]){case 0:a=new fc(this,b,a);if(a.Pc)for(f.push(a),f=0,b=a.rb.length;f<b;f++)a.rb[f].trigger&&this.Dq(a,f);else a.Nq()?this.Dq(a,0):f.push(a);break;case 1:a=new Xb(this,b,a);f.push(a);break;case 2:a=new gc(this,b,a),f.push(a)}};p.prototype.bb=function(){var a,b;a=0;for(b=this.hf.length;a<b;a++)this.hf[a].bb(a<b-1&&this.hf[a+1].Jk)};p.prototype.zo=function(){y(this.wm);y(this.gm);this.wp(this);y(this.gm)};p.prototype.wp=function(a){var b,f,e,d,h=a.wm,c=a.gm, l=this.Aq.Le();b=0;for(f=l.length;b<f;++b)e=l[b],d=e.ii,!e.Oa||a===d||-1<c.indexOf(d)||(c.push(d),d.wp(a),h.push(d))};p.prototype.kb=function(a){this.b.bB||(this.Vm=!0,a||(this.b.gn=!0));var b,f;b=0;for(f=this.hf.length;b<f;b++){var e=this.hf[b];e.kb();this.b.om(e.ha);this.b.lf&&this.b.Sb()}a||(this.b.gn=!1)};p.prototype.Dq=function(a,b){a.Pc||this.b.Pl.push(a);var f,e,d=a.rb[b],h;d.type?h=d.type.name:h="system";var c=(f=d.Zp)?this.$p:this.Hs;c[h]||(c[h]=[]);h=c[h];c=d.Mb;if(f){if(d.aa.length&&(d= d.aa[0],1===d.type&&2===d.Jd.type)){d=d.Jd.value.toLowerCase();f=0;for(e=h.length;f<e;f++)if(h[f].method==c){f=h[f].Wh;f[d]?f[d].push([a,b]):f[d]=[[a,b]];return}f={};f[d]=[[a,b]];h.push({method:c,Wh:f})}}else{f=0;for(e=h.length;f<e;f++)if(h[f].method==c){h[f].Wh.push([a,b]);return}S&&c===S.prototype.j.yg?h.unshift({method:c,Wh:[[a,b]]}):h.push({method:c,Wh:[[a,b]]})}};Jb=p;q.prototype.Um=function(){return this.ba?this.type.d.length:this.d.length};q.prototype.Jc=function(){return this.ba?this.type.d: this.d};q.prototype.Si=function(a){a&&(a.b.Sa().Za.Pc?(this.ba&&(y(this.d),Ba(this.ea,a.type.d),this.ba=!1),a=this.ea.indexOf(a),-1!==a&&(this.d.push(this.ea[a]),this.ea.splice(a,1))):(this.ba=!1,y(this.d),this.d[0]=a))};qb=q;window._c2hh_="C7C66685324420F75562C45247324860C5ACD561";n.prototype.bb=function(a){var b,f=this.parent;if(this.group)for(this.Ml=!0;f;){if(!f.group){this.Ml=!1;break}f=f.parent}this.uo=!this.Nq()&&(!this.parent||this.parent.group&&this.parent.Ml);this.yq=!!a;this.xf=this.ha.slice(0); for(f=this.parent;f;){a=0;for(b=f.ha.length;a<b;a++)this.ov(f.ha[a]);f=f.parent}this.ha=c(this.ha);this.xf=c(this.xf);a=0;for(b=this.rb.length;a<b;a++)this.rb[a].bb();a=0;for(b=this.Uc.length;a<b;a++)this.Uc[a].bb();a=0;for(b=this.jd.length;a<b;a++)this.jd[a].bb(a<b-1&&this.jd[a+1].Jk)};n.prototype.ks=function(a){if(this.Mg!==!!a){this.Mg=!!a;var b;a=0;for(b=this.Xj.length;a<b;++a)this.Xj[a].Ms();0<b&&this.b.za.Nf&&this.b.za.Nf.zo()}};n.prototype.xp=function(a){r(a,this.ha)};n.prototype.ov=function(a){r(a, this.xf)};n.prototype.zl=function(){this.oo=!0;this.parent&&this.parent.zl()};n.prototype.Nq=function(){return this.rb.length?this.rb[0].trigger:!1};n.prototype.kb=function(){var a,b,f=!1,e=this.b,d=this.b.Sa();d.Za=this;var h=this.rb;this.Jk||(d.Am=!1);if(this.Pc){0===h.length&&(f=!0);d.eb=0;for(a=h.length;d.eb<a;d.eb++)b=h[d.eb],b.trigger||(b=b.kb())&&(f=!0);(d.ag=f)&&this.tl()}else{d.eb=0;for(a=h.length;d.eb<a;d.eb++)if(b=h[d.eb].kb(),!b){d.ag=!1;this.uo&&e.lf&&e.Sb();return}d.ag=!0;this.tl()}this.iw(d)}; n.prototype.iw=function(a){a.ag&&this.yq&&(a.Am=!0);this.uo&&this.b.lf&&this.b.Sb()};n.prototype.Wy=function(a){this.b.Sa().Za=this;this.rb[a].kb()&&(this.tl(),this.b.Sa().ag=!0)};n.prototype.tl=function(){var a=this.b.Sa(),b;a.lc=0;for(b=this.Uc.length;a.lc<b;a.lc++)if(this.Uc[a.lc].kb())return;this.cs()};n.prototype.Ty=function(){var a=this.b.Sa(),b;for(b=this.Uc.length;a.lc<b;a.lc++)if(this.Uc[a.lc].kb())return;this.cs()};n.prototype.cs=function(){if(this.jd.length){var a,b,f,e,d=this.jd.length- 1;this.b.pl(this);if(this.oo)for(a=0,b=this.jd.length;a<b;a++)f=this.jd[a],(e=!this.Ml||!this.group&&a<d)&&this.b.vf(f.ha),f.kb(),e?this.b.vd(f.ha):this.b.om(f.ha);else for(a=0,b=this.jd.length;a<b;a++)this.jd[a].kb();this.b.kl()}};n.prototype.Xy=function(){var a=this.b.Sa();a.Za=this;var b=!1,f;a.eb=0;for(f=this.rb.length;a.eb<f;a.eb++)if(this.rb[a.eb].kb())b=!0;else if(!this.Pc)return!1;return this.Pc?b:!0};n.prototype.Ce=function(){this.b.Pf++;var a=this.b.Sa().eb,b=this.b.pl(this);if(!this.Pc)for(b.eb= a+1,a=this.rb.length;b.eb<a;b.eb++)if(!this.rb[b.eb].kb()){this.b.kl();return}this.tl();this.b.kl()};n.prototype.Px=function(a){var b=a.index;if(0===b)return!0;for(--b;0<=b;--b)if(this.rb[b].type===a.type)return!1;return!0};fc=n;b.prototype.bb=function(){var a,b,f;a=0;for(b=this.aa.length;a<b;a++)f=this.aa[a],f.bb(),f.ld&&(this.Lh=!0)};b.prototype.Zy=function(){return!0};b.prototype.$n=function(){var a,b;a=0;for(b=this.aa.length;a<b;a++)this.Ta[a]=this.aa[a].get();return Ua(this.Mb.apply(this.b.Xd, this.Ta),this.Ck)};b.prototype.Yy=function(){var a,b;a=0;for(b=this.aa.length;a<b;a++)this.Ta[a]=this.aa[a].get();a=this.Mb.apply(this.Bf?this.Bf:this.type,this.Ta);this.type.We();return a};b.prototype.Zn=function(){var a,b,f,e,d,h,c,l,g=this.type,t=g.V(),k=this.Dc.Pc&&!this.trigger;b=0;var v=g.Gb,p=g.I,x=g.oe,q=this.od,r=-1<q,n=this.Lh,z=this.aa,H=this.Ta,N=this.Ck,B=this.Mb,O;if(n)for(b=0,d=z.length;b<d;++b)h=z[b],h.ld||(H[b]=h.get(0));else for(b=0,d=z.length;b<d;++b)H[b]=z[b].get(0);if(t.ba){y(t.d); y(t.ea);O=g.d;a=0;for(e=O.length;a<e;++a){l=O[a];if(n)for(b=0,d=z.length;b<d;++b)h=z[b],h.ld&&(H[b]=h.get(a));r?(b=0,p&&(b=l.type.Jg[x]),b=B.apply(l.N[q+b],H)):b=B.apply(l,H);(c=Ua(b,N))?t.d.push(l):k&&t.ea.push(l)}g.finish&&g.finish(!0);t.ba=!1;g.We();return t.Um()}f=0;O=(c=k&&!this.Dc.Px(this))?t.ea:t.d;var D=!1;a=0;for(e=O.length;a<e;++a){l=O[a];if(n)for(b=0,d=z.length;b<d;++b)h=z[b],h.ld&&(H[b]=h.get(a));r?(b=0,p&&(b=l.type.Jg[x]),b=B.apply(l.N[q+b],H)):b=B.apply(l,H);if(Ua(b,N))if(D=!0,c){if(t.d.push(l), v)for(b=0,d=l.siblings.length;b<d;b++)h=l.siblings[b],h.type.V().d.push(h)}else{O[f]=l;if(v)for(b=0,d=l.siblings.length;b<d;b++)h=l.siblings[b],h.type.V().d[f]=h;f++}else if(c){O[f]=l;if(v)for(b=0,d=l.siblings.length;b<d;b++)h=l.siblings[b],h.type.V().ea[f]=h;f++}else if(k&&(t.ea.push(l),v))for(b=0,d=l.siblings.length;b<d;b++)h=l.siblings[b],h.type.V().ea.push(h)}Aa(O,f);if(v)for(p=g.vc,a=0,e=p.length;a<e;a++)l=p[a].V(),c?Aa(l.ea,f):Aa(l.d,f);f=D;if(c&&!D)for(a=0,e=t.d.length;a<e;a++){l=t.d[a];if(n)for(b= 0,d=z.length;b<d;b++)h=z[b],h.ld&&(H[b]=h.get(a));b=r?B.apply(l.N[q],H):B.apply(l,H);if(Ua(b,N)){D=!0;break}}g.finish&&g.finish(f||k);return k?D:t.Um()};ac=b;d.prototype.bb=function(){var a,b,f;a=0;for(b=this.aa.length;a<b;a++)f=this.aa[a],f.bb(),f.ld&&(this.Lh=!0)};d.prototype.$n=function(){var a=this.b,b,f,e=this.aa,d=this.Ta;b=0;for(f=e.length;b<f;++b)d[b]=e[b].get();return this.Mb.apply(a.Xd,d)};d.prototype.Zn=function(){var a=this.type,b=this.od,f=a.oe,e=this.Lh,d=this.aa,h=this.Ta,c=this.Mb, l=a.V().Jc(),a=a.I,g=-1<b,t,k,v,p,x,q;if(e)for(k=0,p=d.length;k<p;++k)x=d[k],x.ld||(h[k]=x.get(0));else for(k=0,p=d.length;k<p;++k)h[k]=d[k].get(0);t=0;for(v=l.length;t<v;++t){q=l[t];if(e)for(k=0,p=d.length;k<p;++k)x=d[k],x.ld&&(h[k]=x.get(t));g?(k=0,a&&(k=q.type.Jg[f]),c.apply(q.N[b+k],h)):c.apply(q,h)}return!1};bc=d;var v=[],x=-1;a.prototype.bb=function(){var a,b;if(11===this.type)this.Of=this.b.rq(this.tj,this.Dc.parent);else if(13===this.type)for(a=0,b=this.ng.length;a<b;a++)this.ng[a].bb();this.Jd&& this.Jd.bb()};a.prototype.ey=function(a){this.ld||!a||a.va.Cl||(this.ld=!0)};a.prototype.ns=function(){this.ld=!0};a.prototype.tx=function(a){this.He=a||0;a=e();this.Jd.get(a);x--;return a.data};a.prototype.ux=function(a){this.He=a||0;a=e();this.Jd.get(a);x--;return ka(a.data)?a.data:""};a.prototype.Ax=function(){return this.object};a.prototype.qx=function(){return this.Np};a.prototype.yx=function(a){this.He=a||0;a=e();this.Jd.get(a);x--;return a.Hb()?this.b.ci(a.data):this.b.Om(a.data)};a.prototype.zx= function(){return this.yb};a.prototype.xx=function(){return this.key};a.prototype.wx=function(){return this.index};a.prototype.vx=function(a){a=a||0;var b=this.dd.type,f=null,f=b.V(),e=f.Jc();if(e.length)f=e[a%e.length].type;else if(f.ea.length)f=f.ea[a%f.ea.length].type;else if(b.d.length)f=b.d[a%b.d.length].type;else return 0;return this.index+f.lk[b.oe]};a.prototype.rx=function(){return this.Of};a.prototype.ox=function(){return this.dq};a.prototype.Bx=function(){var a,b;a=0;for(b=this.ng.length;a< b;a++)this.sj[a]=this.ng[a].get();return this.sj};cc=a;h.prototype.bb=function(){this.ha=c(this.ha)};h.prototype.Fe=function(a){var b=this.b.oq();this.parent&&!this.ti&&b?(this.gg>=b.length&&(b.length=this.gg+1),b[this.gg]=a):this.data=a};h.prototype.Sf=function(){var a=this.b.oq();return!this.parent||this.ti||!a||this.Ik?this.data:this.gg>=a.length||"undefined"===typeof a[this.gg]?this.Ym:a[this.gg]};h.prototype.kb=function(){!this.parent||this.ti||this.Ik||this.Fe(this.Ym)};Xb=h;l.prototype.toString= function(){return"include:"+this.ii.toString()};l.prototype.bb=function(){this.ii=this.b.Cm[this.Hx];this.sheet.Aq.add(this);this.ha=c(this.ha);for(var a=this.parent;a;)a.group&&a.Xj.push(this),a=a.parent;this.Ms()};l.prototype.kb=function(){this.parent&&this.b.Ui(this.b.A);this.ii.Vm||this.ii.kb(!0);this.parent&&this.b.vd(this.b.A)};l.prototype.Ms=function(){for(var a=this.parent;a;){if(a.group&&!a.Mg){this.Oa=!1;return}a=a.parent}this.Oa=!0};gc=l;f.prototype.reset=function(a){this.Za=a;this.lc= this.eb=0;y(this.Bs);this.Am=this.ag=!1};f.prototype.dn=function(){return this.Za.oo?!0:this.eb<this.Za.rb.length-1?!!this.Za.ha.length:!1};Wb=f})(); (function(){function g(c,b){this.dd=c;this.b=c.b;this.type=b[0];this.get=[this.Cw,this.yw,this.Lw,this.Ow,this.lw,this.Mw,this.Gw,this.vw,this.Fw,this.Kw,this.mw,this.Jw,this.ww,this.Hw,this.Dw,this.Ew,this.zw,this.Aw,this.uw,this.Nw,this.Iw,this.Bw,this.sw,this.xw][this.type];var d=null;this.ye=this.aa=this.Ta=this.Mb=this.Kl=this.second=this.first=this.value=null;this.od=-1;this.rd=null;this.Ss=-1;this.Of=this.tj=null;this.rh=!1;switch(this.type){case 0:case 1:case 2:this.value=b[1];break;case 3:this.first= new ec(c,b[1]);break;case 18:this.first=new ec(c,b[1]);this.second=new ec(c,b[2]);this.Kl=new ec(c,b[3]);break;case 19:this.Mb=this.b.Qe(b[1]);this.Mb!==L.prototype.M.random&&this.Mb!==L.prototype.M.Lp||this.dd.ns();this.Ta=[];this.aa=[];3===b.length?(d=b[2],this.Ta.length=d.length+1):this.Ta.length=1;break;case 20:this.ye=this.b.A[b[1]];this.od=-1;this.Mb=this.b.Qe(b[2]);this.rh=b[3];sc&&this.Mb===sc.prototype.M.Jo&&this.dd.ns();b[4]?this.rd=new ec(c,b[4]):this.rd=null;this.Ta=[];this.aa=[];6=== b.length?(d=b[5],this.Ta.length=d.length+1):this.Ta.length=1;break;case 21:this.ye=this.b.A[b[1]];this.rh=b[2];b[3]?this.rd=new ec(c,b[3]):this.rd=null;this.Ss=b[4];break;case 22:this.ye=this.b.A[b[1]];this.ye.uk(b[2]);this.od=this.ye.Km(b[2]);this.Mb=this.b.Qe(b[3]);this.rh=b[4];b[5]?this.rd=new ec(c,b[5]):this.rd=null;this.Ta=[];this.aa=[];7===b.length?(d=b[6],this.Ta.length=d.length+1):this.Ta.length=1;break;case 23:this.tj=b[1],this.Of=null}this.dd.ey(this.ye);4<=this.type&&17>=this.type&&(this.first= new ec(c,b[1]),this.second=new ec(c,b[2]));if(d){var e,a;e=0;for(a=d.length;e<a;e++)this.aa.push(new ec(c,d[e]))}}function k(){++n;q.length===n&&q.push(new dc);return q[n]}function c(c,b,d){var e,a;e=0;for(a=c.length;e<a;++e)c[e].get(d),b[e+1]=d.data}function p(c,b){this.type=c||hc.wg;this.data=b||0;this.jg=null;this.type==hc.wg&&(this.data=Math.floor(this.data))}g.prototype.bb=function(){23===this.type&&(this.Of=this.dd.b.rq(this.tj,this.dd.Dc.parent));this.first&&this.first.bb();this.second&&this.second.bb(); this.Kl&&this.Kl.bb();this.rd&&this.rd.bb();if(this.aa){var c,b;c=0;for(b=this.aa.length;c<b;c++)this.aa[c].bb()}};var q=[],n=-1;g.prototype.Nw=function(g){var b=this.aa,d=this.Ta;d[0]=g;g=k();c(b,d,g);--n;this.Mb.apply(this.b.Xd,d)};g.prototype.Iw=function(g){var b=this.ye,d=this.Ta,e=this.aa,a=this.rd,h=this.Mb,l=this.dd.He,f=b.V(),t=f.Jc();if(!t.length)if(f.ea.length)t=f.ea;else{this.rh?g.Yb(""):g.ga(0);return}d[0]=g;g.jg=b;g=k();c(e,d,g);a&&(a.get(g),g.Hb()&&(l=g.data,t=b.d));--n;b=t.length;if(l>= b||l<=-b)l%=b;0>l&&(l+=b);h.apply(t[l],d)};g.prototype.sw=function(g){var b=this.ye,d=this.Ta,e=this.aa,a=this.rd,h=this.od,l=this.Mb,f=this.dd.He,t=b.V(),v=t.Jc();if(!v.length)if(t.ea.length)v=t.ea;else{this.rh?g.Yb(""):g.ga(0);return}d[0]=g;g.jg=b;g=k();c(e,d,g);a&&(a.get(g),g.Hb()&&(f=g.data,v=b.d));--n;e=v.length;if(f>=e||f<=-e)f%=e;0>f&&(f+=e);f=v[f];v=0;b.I&&(v=f.type.Jg[b.oe]);l.apply(f.N[h+v],d)};g.prototype.Bw=function(c){var b=this.rd,d=this.ye,e=this.Ss,a=this.dd.He,h=d.V(),l=h.Jc();if(!l.length)if(h.ea.length)l= h.ea;else{this.rh?c.Yb(""):c.ga(0);return}if(b){h=k();b.get(h);if(h.Hb()){a=h.data;l=d.d;0!==l.length&&(a%=l.length,0>a&&(a+=l.length));a=d.Nm(a);d=a.ub[e];ka(d)?c.Yb(d):c.D(d);--n;return}--n}b=l.length;if(a>=b||a<=-b)a%=b;0>a&&(a+=b);a=l[a];l=0;d.I&&(l=a.type.lk[d.oe]);d=a.ub[e+l];ka(d)?c.Yb(d):c.D(d)};g.prototype.Cw=function(c){c.type=hc.wg;c.data=this.value};g.prototype.yw=function(c){c.type=hc.vg;c.data=this.value};g.prototype.Lw=function(c){c.type=hc.String;c.data=this.value};g.prototype.Ow= function(c){this.first.get(c);c.Hb()&&(c.data=-c.data)};g.prototype.lw=function(c){this.first.get(c);var b=k();this.second.get(b);c.Hb()&&b.Hb()&&(c.data+=b.data,b.Rg()&&c.dh());--n};g.prototype.Mw=function(c){this.first.get(c);var b=k();this.second.get(b);c.Hb()&&b.Hb()&&(c.data-=b.data,b.Rg()&&c.dh());--n};g.prototype.Gw=function(c){this.first.get(c);var b=k();this.second.get(b);c.Hb()&&b.Hb()&&(c.data*=b.data,b.Rg()&&c.dh());--n};g.prototype.vw=function(c){this.first.get(c);var b=k();this.second.get(b); c.Hb()&&b.Hb()&&(c.data/=b.data,c.dh());--n};g.prototype.Fw=function(c){this.first.get(c);var b=k();this.second.get(b);c.Hb()&&b.Hb()&&(c.data%=b.data,b.Rg()&&c.dh());--n};g.prototype.Kw=function(c){this.first.get(c);var b=k();this.second.get(b);c.Hb()&&b.Hb()&&(c.data=Math.pow(c.data,b.data),b.Rg()&&c.dh());--n};g.prototype.mw=function(c){this.first.get(c);var b=k();this.second.get(b);b.Ug()||c.Ug()?this.pw(c,b):this.ow(c,b);--n};g.prototype.pw=function(c,b){c.Ug()&&b.Ug()?this.rw(c,b):this.qw(c, b)};g.prototype.rw=function(c,b){c.data+=b.data};g.prototype.qw=function(c,b){c.Ug()?c.data+=(Math.round(1E10*b.data)/1E10).toString():c.Yb(c.data.toString()+b.data)};g.prototype.ow=function(c,b){c.ga(c.data&&b.data?1:0)};g.prototype.Jw=function(c){this.first.get(c);var b=k();this.second.get(b);c.Hb()&&b.Hb()&&(c.data||b.data?c.ga(1):c.ga(0));--n};g.prototype.uw=function(c){this.first.get(c);c.data?this.second.get(c):this.Kl.get(c)};g.prototype.ww=function(c){this.first.get(c);var b=k();this.second.get(b); c.ga(c.data===b.data?1:0);--n};g.prototype.Hw=function(c){this.first.get(c);var b=k();this.second.get(b);c.ga(c.data!==b.data?1:0);--n};g.prototype.Dw=function(c){this.first.get(c);var b=k();this.second.get(b);c.ga(c.data<b.data?1:0);--n};g.prototype.Ew=function(c){this.first.get(c);var b=k();this.second.get(b);c.ga(c.data<=b.data?1:0);--n};g.prototype.zw=function(c){this.first.get(c);var b=k();this.second.get(b);c.ga(c.data>b.data?1:0);--n};g.prototype.Aw=function(c){this.first.get(c);var b=k(); this.second.get(b);c.ga(c.data>=b.data?1:0);--n};g.prototype.xw=function(c){var b=this.Of.Sf();ja(b)?c.D(b):c.Yb(b)};ec=g;p.prototype.Rg=function(){return this.type===hc.vg};p.prototype.Hb=function(){return this.type===hc.wg||this.type===hc.vg};p.prototype.Ug=function(){return this.type===hc.String};p.prototype.dh=function(){this.Rg()||(this.Ug()&&(this.data=parseFloat(this.data)),this.type=hc.vg)};p.prototype.ga=function(c){this.type=hc.wg;this.data=Math.floor(c)};p.prototype.D=function(c){this.type= hc.vg;this.data=c};p.prototype.Yb=function(c){this.type=hc.String;this.data=c};p.prototype.aj=function(c){ja(c)?(this.type=hc.vg,this.data=c):ka(c)?(this.type=hc.String,this.data=c.toString()):(this.type=hc.wg,this.data=0)};dc=p;hc={wg:0,vg:1,String:2}})();function L(g){this.b=g;this.sc=[]} L.prototype.cb=function(){var g={},k,c,p,q,n,r,b,d;g.waits=[];var e=g.waits,a;k=0;for(c=this.sc.length;k<c;k++){r=this.sc[k];a={t:r.time,st:r.vs,s:r.no,ev:r.Ig.ka,sm:[],sols:{}};r.Ig.Uc[r.lc]&&(a.act=r.Ig.Uc[r.lc].ka);p=0;for(q=r.ha.length;p<q;p++)a.sm.push(r.ha[p].ka);for(n in r.hc)if(r.hc.hasOwnProperty(n)){b=this.b.A[parseInt(n,10)];d={sa:r.hc[n].ul,insts:[]};p=0;for(q=r.hc[n].re.length;p<q;p++)d.insts.push(r.hc[n].re[p].uid);a.sols[b.ka.toString()]=d}e.push(a)}return g}; L.prototype.zb=function(g){g=g.waits;var k,c,p,q,n,r,b,d,e,a,h;y(this.sc);k=0;for(c=g.length;k<c;k++)if(r=g[k],d=this.b.Ep[r.ev.toString()]){e=-1;p=0;for(q=d.Uc.length;p<q;p++)if(d.Uc[p].ka===r.act){e=p;break}if(-1!==e){b={hc:{},ha:[],xm:!1};b.time=r.t;b.vs=r.st||"";b.no=!!r.s;b.Ig=d;b.lc=e;p=0;for(q=r.sm.length;p<q;p++)(d=this.b.yk(r.sm[p]))&&b.ha.push(d);for(n in r.sols)if(r.sols.hasOwnProperty(n)&&(d=this.b.yk(parseInt(n,10)))){e=r.sols[n];a={ul:e.sa,re:[]};p=0;for(q=e.insts.length;p<q;p++)(h= this.b.xk(e.insts[p]))&&a.re.push(h);b.hc[d.index.toString()]=a}this.sc.push(b)}}}; (function(){function g(){}function k(b,a){var d=b.U.c2_feo_val,c=a.U.c2_feo_val;if(ja(d)&&ja(c))return d-c;d=""+d;c=""+c;return d<c?-1:d>c?1:0}function c(){}function p(){}var q=L.prototype;g.prototype.ut=function(){return!0};g.prototype.Zo=function(){return!0};g.prototype.fu=function(){return!0};g.prototype.gt=function(b,a,d){return ic(b,a,d)};g.prototype.xt=function(b,a,d){var c=this.b.Sa(),f=c.Za,c=c.dn();b=this.b.Rn(b);if(d<a)if(c)for(;a>=d&&!b.Ha;--a)this.b.vf(f.ha),b.index=a,f.Ce(),this.b.vd(f.ha); else for(;a>=d&&!b.Ha;--a)b.index=a,f.Ce();else if(c)for(;a<=d&&!b.Ha;++a)this.b.vf(f.ha),b.index=a,f.Ce(),this.b.vd(f.ha);else for(;a<=d&&!b.Ha;++a)b.index=a,f.Ce();this.b.On();return!1};var n=[],r=-1;g.prototype.yt=function(b){var a=b.V();r++;n.length===r&&n.push([]);var d=n[r];Ba(d,a.Jc());var c=this.b.Sa(),f=c.Za,g=c.dn(),c=this.b.Rn(),k,p,m,q,Q,R,G=b.Gb;if(g)for(g=0,k=d.length;g<k&&!c.Ha;g++){this.b.vf(f.ha);q=d[g];a=b.V();a.ba=!1;y(a.d);a.d[0]=q;if(G)for(p=0,m=q.siblings.length;p<m;p++)Q=q.siblings[p], R=Q.type.V(),R.ba=!1,y(R.d),R.d[0]=Q;c.index=g;f.Ce();this.b.vd(f.ha)}else for(a.ba=!1,y(a.d),g=0,k=d.length;g<k&&!c.Ha;g++){q=d[g];a.d[0]=q;if(G)for(p=0,m=q.siblings.length;p<m;p++)Q=q.siblings[p],R=Q.type.V(),R.ba=!1,y(R.d),R.d[0]=Q;c.index=g;f.Ce()}y(d);this.b.On();r--;return!1};g.prototype.zt=function(b,a,d){a=b.V();r++;n.length===r&&n.push([]);var c=n[r];Ba(c,a.Jc());var f=this.b.Sa(),g=f.Za,v=this.b.vk(),p=f.dn(),f=this.b.Rn(),m,q,Q,R,G;m=0;for(q=c.length;m<q;m++)c[m].U.c2_feo_val=v.aa[1].get(m); c.sort(k);1===d&&c.reverse();d=b.Gb;if(p)for(m=0,q=c.length;m<q&&!f.Ha;m++){this.b.vf(g.ha);Q=c[m];a=b.V();a.ba=!1;y(a.d);a.d[0]=Q;if(d)for(v=0,p=Q.siblings.length;v<p;v++)R=Q.siblings[v],G=R.type.V(),G.ba=!1,y(G.d),G.d[0]=R;f.index=m;g.Ce();this.b.vd(g.ha)}else for(a.ba=!1,y(a.d),m=0,q=c.length;m<q&&!f.Ha;m++){Q=c[m];a.d[0]=Q;if(d)for(v=0,p=Q.siblings.length;v<p;v++)R=Q.siblings[v],G=R.type.V(),G.ba=!1,y(G.d),G.d[0]=R;f.index=m;g.Ce()}y(c);this.b.On();r--;return!1};g.prototype.tt=function(b){var a= this.b.vk(),c=a.U.Every_lastTime||0,d=this.b.wb.R;"undefined"===typeof a.U.Every_seconds&&(a.U.Every_seconds=b);var f=a.U.Every_seconds;if(d>=c+f)return a.U.Every_lastTime=c+f,d>=a.U.Every_lastTime+.04&&(a.U.Every_lastTime=d),a.U.Every_seconds=b,!0;d<c-.1&&(a.U.Every_lastTime=d);return!1};g.prototype.lt=function(b,a,c){return ic(b.Sf(),a,c)};g.prototype.Ht=function(b){return(b=this.b.gi[b.toLowerCase()])&&b.Mg};g.prototype.ht=function(b,a,c){return b>=a&&b<=c};g.prototype.No=function(){var b=this.b.Sa(); return b.Am?!1:!b.ag};g.prototype.Yl=function(){return!0};g.prototype.Wt=function(){return!0};g.prototype.Zl=function(){return!0};g.prototype.ep=function(){return!0};g.prototype.gu=function(){return!0};g.prototype.Dj=function(){return!0};g.prototype.Zs=function(b,a,c){return Pa(C(b),C(c))<=C(a)};g.prototype.Gt=function(b,a){return Ra(C(b),C(a))};g.prototype.Po=function(b,a,c){b=Na(b);a=Na(a);c=Na(c);return Ra(c,a)?Ra(b,a)&&!Ra(b,c):!(!Ra(b,a)&&Ra(b,c))};q.j=new g;c.prototype.Bt=function(b){this.b.Wg|| this.b.Ef||(this.b.Ef=b)};c.prototype.pt=function(b,a,c,d){if(a&&b&&(a=this.b.Zj(b,a,c,d))){this.b.Mc++;var f;this.b.trigger(Object.getPrototypeOf(b.va).j.xg,a);if(a.Gb)for(c=0,d=a.siblings.length;c<d;c++)f=a.siblings[c],this.b.trigger(Object.getPrototypeOf(f.type.va).j.xg,f);this.b.Mc--;b=b.V();b.ba=!1;y(b.d);b.d[0]=a;if(a.Gb)for(c=0,d=a.siblings.length;c<d;c++)f=a.siblings[c],b=f.type.V(),b.ba=!1,y(b.d),b.d[0]=f}};c.prototype.Ku=function(b,a){b&&b.visible!==a&&(b.visible=a,this.b.na=!0)};c.prototype.Su= function(b,a){0===b.uj?ja(a)?b.Fe(a):b.Fe(parseFloat(a)):1===b.uj&&b.Fe(a.toString())};c.prototype.Ws=function(b,a){0===b.uj?ja(a)?b.Fe(b.Sf()+a):b.Fe(b.Sf()+parseFloat(a)):1===b.uj&&b.Fe(b.Sf()+a.toString())};c.prototype.Yu=function(b,a){0===b.uj&&(ja(a)?b.Fe(b.Sf()-a):b.Fe(b.Sf()-parseFloat(a)))};var b=[],d=[];c.prototype.bv=function(e){if(!(0>e)){var a,c,l,f=this.b.Sa(),g;b.length?g=b.pop():g={hc:{},ha:[]};g.xm=!1;g.time=this.b.wb.R+e;g.vs="";g.no=!1;g.Ig=f.Za;g.lc=f.lc+1;e=0;for(a=this.b.A.length;e< a;e++)l=this.b.A[e],c=l.V(),c.ba&&-1===f.Za.ha.indexOf(l)||(g.ha.push(l),l=void 0,d.length?l=d.pop():l={re:[]},l.ul=!1,l.ul=c.ba,Ba(l.re,c.d),g.hc[e.toString()]=l);this.sc.push(g);return!0}};c.prototype.yu=function(){if(!this.b.Wg&&!this.b.Ef&&this.b.za){this.b.Ef=this.b.za;var b,a,c;b=0;for(a=this.b.Ue.length;b<a;b++)c=this.b.Ue[b],c.ks(c.Bk)}};q.u=new c;p.prototype["int"]=function(b,a){ka(a)?(b.ga(parseInt(a,10)),isNaN(b.data)&&(b.data=0)):b.ga(a)};p.prototype["float"]=function(b,a){ka(a)?(b.D(parseFloat(a)), isNaN(b.data)&&(b.data=0)):b.D(a)};p.prototype.random=function(b,a,c){void 0===c?b.D(Math.random()*a):b.D(Math.random()*(c-a)+a)};p.prototype.sqrt=function(b,a){b.D(Math.sqrt(a))};p.prototype.abs=function(b,a){b.D(Math.abs(a))};p.prototype.round=function(b,a){b.ga(Math.round(a))};p.prototype.floor=function(b,a){b.ga(Math.floor(a))};p.prototype.ceil=function(b,a){b.ga(Math.ceil(a))};p.prototype.sin=function(b,a){b.D(Math.sin(C(a)))};p.prototype.cos=function(b,a){b.D(Math.cos(C(a)))};p.prototype.tan= function(b,a){b.D(Math.tan(C(a)))};p.prototype.asin=function(b,a){b.D(Ia(Math.asin(a)))};p.prototype.acos=function(b,a){b.D(Ia(Math.acos(a)))};p.prototype.atan=function(b,a){b.D(Ia(Math.atan(a)))};p.prototype.exp=function(b,a){b.D(Math.exp(a))};p.prototype.log10=function(b,a){b.D(Math.log(a)/Math.LN10)};p.prototype.max=function(b){var a=arguments[1];"number"!==typeof a&&(a=0);var c,d,f;c=2;for(d=arguments.length;c<d;c++)f=arguments[c],"number"===typeof f&&a<f&&(a=f);b.D(a)};p.prototype.min=function(b){var a= arguments[1];"number"!==typeof a&&(a=0);var c,d,f;c=2;for(d=arguments.length;c<d;c++)f=arguments[c],"number"===typeof f&&a>f&&(a=f);b.D(a)};p.prototype.gf=function(b){b.D(this.b.gf)};p.prototype.sg=function(b){b.D(this.b.sg)};p.prototype.time=function(b){b.D(this.b.wb.R)};p.prototype.pj=function(b){b.ga(this.b.pj)};p.prototype.Yk=function(b){b.ga(this.b.Yk)};p.prototype.Im=function(b){b.ga(this.b.Im)};p.prototype.ay=function(b,a){var c,d;if(this.b.Ji.length)if(a){for(d=this.b.Ki;0<=d;--d)if(c=this.b.Ji[d], c.name===a){b.ga(c.index);return}b.ga(0)}else c=this.b.pq(),b.ga(c?c.index:-1);else b.ga(0)};p.prototype.k=function(b,a,c,d,f){b.D(Ia(Oa(a,c,d,f)))};p.prototype.Yx=function(b){b.ga(this.b.za.width)};p.prototype.left=function(b,a,c){b.Yb(ka(a)?a.substr(0,c):"")};p.prototype.right=function(b,a,c){b.Yb(ka(a)?a.substr(a.length-c):"")};p.prototype.replace=function(b,a,c,d){ka(a)&&ka(c)&&ka(d)?b.Yb(a.replace(new RegExp(db(c),"gi"),d)):b.Yb(ka(a)?a:"")};p.prototype.trim=function(b,a){b.Yb(ka(a)?a.trim(): "")};p.prototype.Lp=function(b){var a=sa(Math.random()*(arguments.length-1));b.aj(arguments[a+1])};p.prototype.qm=function(b){b.D(this.b.qm/1E3)};p.prototype.Bi=function(b){b.D(this.b.Bi)};q.M=new p;q.Vy=function(){var c,a,h,g,f,t,k=this.b.Sa();c=0;for(h=this.sc.length;c<h;c++){g=this.sc[c];if(-1===g.time){if(!g.no)continue}else if(g.time>this.b.wb.R)continue;k.Za=g.Ig;k.lc=g.lc;k.eb=0;for(a in g.hc)g.hc.hasOwnProperty(a)&&(f=this.b.A[parseInt(a,10)].V(),t=g.hc[a],f.ba=t.ul,Ba(f.d,t.re),f=t,y(f.re), d.push(f));g.Ig.Ty();this.b.om(g.ha);g.xm=!0}a=c=0;for(h=this.sc.length;c<h;c++)g=this.sc[c],this.sc[a]=g,g.xm?(Xa(g.hc),y(g.ha),b.push(g)):a++;Aa(this.sc,a)}})(); (function(){pb=function(g,c){var p=g[1],q=g[3],n=g[4],r=g[5],b=g[6],d=g[7],e=g[8];c.j||(c.j={});c.u||(c.u={});c.M||(c.M={});var a=c.j,h=c.u,l=c.M;q&&(a.Lo=function(a,b){return ic(this.x,a,b)},a.ot=function(a,b){return ic(this.y,a,b)},a.Nz=function(){var a=this.n;this.Fa();var b=this.Ya;return!(b.right<a.Ba||b.bottom<a.Ca||b.left>a.Ja||b.top>a.Ia)},a.Oz=function(){this.Fa();var a=this.Ya,b=this.b.za;return 0>a.right||0>a.bottom||a.left>b.width||a.top>b.height},a.aA=function(a,b,c){var e=this.V(),d= e.Jc();if(!d.length)return!1;var h=d[0],g=h,l=Ta(h.x,h.y,b,c),k,p,q;k=1;for(p=d.length;k<p;k++)if(h=d[k],q=Ta(h.x,h.y,b,c),0===a&&q<l||1===a&&q>l)l=q,g=h;e.Si(g);return!0},h.kp=function(a){this.x!==a&&(this.x=a,this.ca())},h.lp=function(a){this.y!==a&&(this.y=a,this.ca())},h.Nu=function(a,b){if(this.x!==a||this.y!==b)this.x=a,this.y=b,this.ca()},h.Ou=function(a,b){var c=a.gx(this);if(c){var e;c.bi?(e=c.bi(b,!0),c=c.bi(b,!1)):(e=c.x,c=c.y);if(this.x!==e||this.y!==c)this.x=e,this.y=c,this.ca()}},h.Uz= function(a){0!==a&&(this.x+=Math.cos(this.k)*a,this.y+=Math.sin(this.k)*a,this.ca())},h.Tz=function(a,b){0!==b&&(this.x+=Math.cos(C(a))*b,this.y+=Math.sin(C(a))*b,this.ca())},l.op=function(a){a.D(this.x)},l.cm=function(a){a.D(this.y)},l.gf=function(a){a.D(this.b.Rf(this))});n&&(a.mt=function(a,b){return ic(this.width,a,b)},a.Iz=function(a,b){return ic(this.height,a,b)},h.Tu=function(a){this.width!==a&&(this.width=a,this.ca())},h.qA=function(a){this.height!==a&&(this.height=a,this.ca())},h.jp=function(a, b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.ca()},l.np=function(a){a.D(this.width)},l.Ct=function(a){a.D(this.height)},l.Fz=function(a){this.Fa();a.D(this.Ya.left)},l.Hz=function(a){this.Fa();a.D(this.Ya.top)},l.Gz=function(a){this.Fa();a.D(this.Ya.right)},l.Ez=function(a){this.Fa();a.D(this.Ya.bottom)});r&&(a.Zs=function(a,b){return Pa(this.k,C(b))<=C(a)},a.Gt=function(a){return Ra(this.k,C(a))},a.Po=function(a,b){var c=Na(a),e=Na(b),d=Ka(this.k);return Ra(e,c)?Ra(d,c)&& !Ra(d,e):!(!Ra(d,c)&&Ra(d,e))},h.Bu=function(a){a=C(Ja(a));isNaN(a)||this.k===a||(this.k=a,this.ca())},h.gA=function(a){0===a||isNaN(a)||(this.k+=C(a),this.k=Ka(this.k),this.ca())},h.hA=function(a){0===a||isNaN(a)||(this.k-=C(a),this.k=Ka(this.k),this.ca())},h.iA=function(a,b){var c=Qa(this.k,C(b),C(a));isNaN(c)||this.k===c||(this.k=c,this.ca())},h.jA=function(a,b,c){a=Qa(this.k,Math.atan2(c-this.y,b-this.x),C(a));isNaN(a)||this.k===a||(this.k=a,this.ca())},h.tA=function(a,b){var c=Math.atan2(b-this.y, a-this.x);isNaN(c)||this.k===c||(this.k=c,this.ca())},l.Xs=function(a){a.D(La(this.k))});p||(a.Ko=function(a,b,c){return ic(this.ub[a],b,c)},a.Ft=function(a){return this.ub[a]},a.bA=function(a,b){var c=this.V(),e=c.Jc();if(!e.length)return!1;var d=e[0],h=d,g=d.ub[b],l,k,p;l=1;for(k=e.length;l<k;l++)if(d=e[l],p=d.ub[b],0===a&&p<g||1===a&&p>g)g=p,h=d;c.Si(h);return!0},a.vu=function(a){var b,c,e,d,h;if(this.b.vk().Ck){h=this.V();if(h.ba)for(h.ba=!1,y(h.d),y(h.ea),e=this.d,b=0,c=e.length;b<c;b++)d=e[b], d.uid===a?h.ea.push(d):h.d.push(d);else{e=b=0;for(c=h.d.length;b<c;b++)d=h.d[b],h.d[e]=d,d.uid===a?h.ea.push(d):e++;Aa(h.d,e)}this.We();return!!h.d.length}d=this.b.xk(a);if(!d)return!1;h=this.V();if(!h.ba&&-1===h.d.indexOf(d))return!1;if(this.I)for(a=d.type.La,b=0,c=a.length;b<c;b++){if(a[b]===this)return h.Si(d),this.We(),!0}else if(d.type===this)return h.Si(d),this.We(),!0;return!1},a.xg=function(){return!0},a.Xt=function(){return!0},h.Iu=function(a,b){var c=this.ub;ja(c[a])?c[a]=ja(b)?b:parseFloat(b): ka(c[a])&&(c[a]=ka(b)?b:b.toString())},h.Dz=function(a,b){var c=this.ub;ja(c[a])?c[a]=ja(b)?c[a]+b:c[a]+parseFloat(b):ka(c[a])&&(c[a]=ka(b)?c[a]+b:c[a]+b.toString())},h.yA=function(a,b){var c=this.ub;ja(c[a])&&(c[a]=ja(b)?c[a]-b:c[a]-parseFloat(b))},h.Gu=function(a,b){this.ub[a]=b?1:0},h.AA=function(a){this.ub[a]=1-this.ub[a]},h.Mo=function(){this.b.Pe(this)},h.Pt||(h.Pt=function(a){var b,c;try{b=JSON.parse(a)}catch(d){return}this.b.Pk(this,b,!0);this.de&&this.de();if(this.N)for(a=0,b=this.N.length;a< b;++a)c=this.N[a],c.de&&c.de()}),l.Lz=function(a){var b=a.jg.d.length,c,d,e;c=0;for(d=this.b.qd.length;c<d;c++)e=this.b.qd[c],a.jg.I?0<=e.type.La.indexOf(a.jg)&&b++:e.type===a.jg&&b++;a.ga(b)},l.dA=function(a){a.ga(a.jg.V().Jc().length)},l.$u=function(a){a.ga(this.uid)},l.Dt=function(a){a.ga(this.ei())},l.Io||(l.Io=function(a){a.Yb(JSON.stringify(this.b.ao(this,!0)))}));b&&(a.Qz=function(){return this.visible},h.wA=function(a){!a!==!this.visible&&(this.visible=!!a,this.b.na=!0)},a.Jz=function(a,b){return ic(lb(100* this.opacity),a,b)},h.Mu=function(a){a=a/100;0>a?a=0:1<a&&(a=1);a!==this.opacity&&(this.opacity=a,this.b.na=!0)},l.Opacity=function(a){a.D(lb(100*this.opacity))});d&&(a.Mz=function(a){return a?this.n===a:!1},a.cA=function(a){var b=this.V(),c=b.Jc();if(!c.length)return!1;var d=c[0],e=d,h,g;h=1;for(g=c.length;h<g;h++)if(d=c[h],0===a){if(d.n.index>e.n.index||d.n.index===e.n.index&&d.Ld()>e.Ld())e=d}else if(d.n.index<e.n.index||d.n.index===e.n.index&&d.Ld()<e.Ld())e=d;b.Si(e);return!0},h.Xz=function(){var a= this.n,b=a.d;b.length&&b[b.length-1]===this||(a.ph(this,!1),a.Nh(this,!1),this.b.na=!0)},h.Vz=function(){var a=this.n,b=a.d;b.length&&b[0]===this||(a.ph(this,!1),a.Ey(this),this.b.na=!0)},h.Wz=function(a){a&&a!=this.n&&(this.n.ph(this,!0),this.n=a,a.Nh(this,!0),this.b.na=!0)},h.DA=function(a,b){var c=0===a;if(b){var d=b.Zw(this);d&&d.uid!==this.uid&&(this.n.index!==d.n.index&&(this.n.ph(this,!0),this.n=d.n,d.n.Nh(this,!0)),this.n.fy(this,d,c),this.b.na=!0)}},l.Sz=function(a){a.ga(this.n.Ar)},l.Rz= function(a){a.Yb(this.n.name)},l.CA=function(a){a.ga(this.Ld())});e&&(h.nA=function(a,b){if(this.b.B){var c=this.type.Mm(b);if(!(0>c)){var d=1===a;this.Se[c]!==d&&(this.Se[c]=d,this.Bd(),this.b.na=!0)}}},h.oA=function(a,b,c){if(this.b.B){var d=this.type.Mm(a);0>d||(a=this.type.T[d],d=this.Ra[d],b=Math.floor(b),0>b||b>=d.length||(1===this.b.B.kx(a.lb,b)&&(c/=100),d[b]!==c&&(d[b]=c,a.Oa&&(this.b.na=!0))))}})};Kb=function(){this.lm=this.im=!0;this.type.Jj=!0;this.b.na=!0;var g,c,p=this.jm;g=0;for(c= p.length;g<c;++g)p[g](this);this.n.Tc&&this.Fa()};Lb=function(g){g&&this.jm.push(g)};Nb=function(){if(this.im){var g=this.Ya,c=this.uc;g.set(this.x,this.y,this.x+this.width,this.y+this.height);g.offset(-this.cc*this.width,-this.ec*this.height);this.k?(g.offset(-this.x,-this.y),c.ps(g,this.k),c.offset(this.x,this.y),c.Fp(g)):c.bj(g);g.normalize();this.im=!1;this.wz()}};var g=new wa(0,0,0,0);Ob=function(){if(this.n.Tc){var k=this.n.Rb,c=this.Ya;g.set(k.jc(c.left),k.kc(c.top),k.jc(c.right),k.kc(c.bottom)); this.oc.Vh(g)||(this.oc.right<this.oc.left?k.update(this,null,g):k.update(this,this.oc,g),this.oc.Eg(g),this.n.yd=!0)}};Pb=function(){if(this.lm&&this.he){this.Fa();var k=this.type.Wj,c=this.Ya;g.set(k.jc(c.left),k.kc(c.top),k.jc(c.right),k.kc(c.bottom));this.df.Vh(g)||(this.df.right<this.df.left?k.update(this,null,g):k.update(this,this.df,g),this.df.Eg(g),this.lm=!1)}};Mb=function(g,c){return this.Ya.ac(g,c)&&this.uc.ac(g,c)?this.Bh?this.dB(g,c):this.xa&&!this.xa.Qg()?(this.xa.Bg(this.width,this.height, this.k),this.xa.ac(g-this.x,c-this.y)):!0:!1};Gb=function(){this.type.Rl();return this.Vf};Ub=function(){this.n.Co();return this.Dd};Vb=function(){y(this.ua);var g,c,p,q=!0;g=0;for(c=this.Se.length;g<c;g++)this.Se[g]&&(p=this.type.T[g],this.ua.push(p),p.wd||(q=!1));this.Qs=!!this.ua.length;this.Ge=q};Hb=function(){return"Inst"+this.Zr};sb=function(g){if(g&&g.Gb&&g.type!=this){var c,p,q;c=0;for(p=g.siblings.length;c<p;c++)if(q=g.siblings[c],q.type==this)return q}g=this.V().Jc();return g.length?g[0]: null};tb=function(g){var c=this.V().Jc();return c.length?c[g.ei()%c.length]:null};rb=function(){if(this.xh&&!this.I){var g,c;g=0;for(c=this.d.length;g<c;g++)this.d[g].Vf=g;var p=g,q=this.b.qd;g=0;for(c=q.length;g<c;++g)q[g].type===this&&(q[g].Vf=p++);this.xh=!1}};Eb=function(g){if(g<this.d.length)return this.d[g];g-=this.d.length;var c=this.b.qd,p,q;p=0;for(q=c.length;p<q;++p)if(c[p].type===this){if(0===g)return c[p];--g}return null};ub=function(){return this.Ie[this.Hd]};vb=function(){this.Hd++; this.Hd===this.Ie.length?this.Ie.push(new qb(this)):(this.Ie[this.Hd].ba=!0,y(this.Ie[this.Hd].ea))};wb=function(){this.Hd++;this.Hd===this.Ie.length&&this.Ie.push(new qb(this));var g=this.Ie[this.Hd],c=this.Ie[this.Hd-1];c.ba?g.ba=!0:(g.ba=!1,Ba(g.d,c.d));y(g.ea)};xb=function(){this.Hd--};Ab=function(g){var c,p,q,n,r,b=0;if(!this.I)for(c=0,p=this.La.length;c<p;c++)for(r=this.La[c],q=0,n=r.Pa.length;q<n;q++){if(g===r.Pa[q].name)return this.U.lastBehIndex=b,r.Pa[q];b++}c=0;for(p=this.Pa.length;c<p;c++){if(g=== this.Pa[c].name)return this.U.lastBehIndex=b,this.Pa[c];b++}return null};Bb=function(g){return this.uk(g)?this.U.lastBehIndex:-1};Cb=function(g){var c,p;c=0;for(p=this.T.length;c<p;c++)if(this.T[c].name===g)return c;return-1};Db=function(){if(this.Gb&&!this.I){var g,c,p,q,n,r,b;this.Rl();r=this.V();var d=r.ba,e=(g=this.b.Sa())&&g.Za&&g.Za.Pc;g=0;for(c=this.vc.length;g<c;g++)if(n=this.vc[g],n!==this&&(n.Rl(),b=n.V(),b.ba=d,!d)){y(b.d);p=0;for(q=r.d.length;p<q;++p)b.d[p]=n.Nm(r.d[p].Vf);if(e)for(y(b.ea), p=0,q=r.ea.length;p<q;++p)b.ea[p]=n.Nm(r.ea[p].Vf)}}};Fb=function(){return"Type"+this.ka};ic=function(g,c,p){if("undefined"===typeof g||"undefined"===typeof p)return!1;switch(c){case 0:return g===p;case 1:return g!==p;case 2:return g<p;case 3:return g<=p;case 4:return g>p;case 5:return g>=p;default:return!1}}})();var qc={};function tc(g){this.b=g} (function(){function g(){}function k(){}function c(){}var p=!1,q=null,n=null,r="",b=tc.prototype;b.ja=function(a){this.va=a;this.b=a.b};b.ja.prototype.J=function(){};b.Z=function(a){this.type=a;this.b=a.b;this.Ec=this.Pd="";this.O=0;this.timeout=-1;if(p=this.b.oi)q=require("path"),n=require("fs"),r=q.dirname((window.process||nw.process).execPath)+"\\"};var d=b.Z.prototype,e=null;window.C2_AJAX_DCSide=function(a,b,c){e&&("success"===a?(e.Ec=b,e.Pd=c,e.b.trigger(tc.prototype.j.yj,e),e.b.trigger(tc.prototype.j.Ih, e)):"error"===a?(e.Ec=b,e.b.trigger(tc.prototype.j.zj,e),e.b.trigger(tc.prototype.j.$d,e)):"progress"===a&&(e.O=c,e.Ec=b,e.b.trigger(tc.prototype.j.dp,e)))};d.J=function(){e=this};d.cb=function(){return{lastData:this.Pd}};d.zb=function(a){this.Pd=a.lastData;this.Ec="";this.O=0};var a={},h="";d.Pv=function(b,f){if(this.b.Ob)AppMobi.webview.execute('C2_AJAX_WebSide("'+b+'", "'+f+'", "GET", null);');else{var c=this,d=null,e=function(){c.Ec=b;c.b.trigger(tc.prototype.j.zj,c);c.b.trigger(tc.prototype.j.$d, c)},g=function(){if(p){var a=r+f;n.existsSync(a)?n.readFile(a,{encoding:"utf8"},function(a,f){a?e():(c.Ec=b,c.Pd=f.replace(/\r\n/g,"\n"),c.b.trigger(tc.prototype.j.yj,c),c.b.trigger(tc.prototype.j.Ih,c))}):e()}else e()},k=function(a){a.lengthComputable&&(c.O=a.loaded/a.total,c.Ec=b,c.b.trigger(tc.prototype.j.dp,c))};try{this.b.pf?d=new ActiveXObject("Microsoft.XMLHTTP"):d=new XMLHttpRequest;d.onreadystatechange=function(){4===d.readyState&&(c.Ec=b,d.responseText?c.Pd=d.responseText.replace(/\r\n/g, "\n"):c.Pd="",400<=d.status?(c.b.trigger(tc.prototype.j.zj,c),c.b.trigger(tc.prototype.j.$d,c)):p&&!c.Pd.length||!p&&0===d.status&&!c.Pd.length||(c.b.trigger(tc.prototype.j.yj,c),c.b.trigger(tc.prototype.j.Ih,c)))};this.b.pf||(d.onerror=g,d.ontimeout=g,d.onabort=g,d.onprogress=k);d.open("GET",f);!this.b.pf&&0<=this.timeout&&"undefined"!==typeof d.timeout&&(d.timeout=this.timeout);try{d.responseType="text"}catch(q){}if(d.setRequestHeader){for(var R in a)if(a.hasOwnProperty(R))try{d.setRequestHeader(R, a[R])}catch(G){}a={}}if(h&&d.overrideMimeType){try{d.overrideMimeType(h)}catch(J){}h=""}d.send()}catch(w){g()}}};g.prototype.Ih=function(a){return mb(a,this.Ec)};g.prototype.yj=function(){return!0};g.prototype.$d=function(a){return mb(a,this.Ec)};g.prototype.zj=function(){return!0};g.prototype.dp=function(a){return mb(a,this.Ec)};b.j=new g;k.prototype.xu=function(a,b){var c=this;this.b.ri&&!this.b.Gq(b)?this.b.cq(b,function(b){c.Ec=a;c.Pd=b.replace(/\r\n/g,"\n");c.b.trigger(tc.prototype.j.yj,c);c.b.trigger(tc.prototype.j.Ih, c)},function(){c.Ec=a;c.b.trigger(tc.prototype.j.zj,c);c.b.trigger(tc.prototype.j.$d,c)}):this.Pv(a,b)};b.u=new k;c.prototype.Nt=function(a){a.Yb(this.Pd)};c.prototype.wu=function(a){a.D(this.O)};b.M=new c})();function uc(g){this.b=g} (function(){function g(){return b.length?b.pop():[]}function k(c){var e,a;e=0;for(a=c.length;e<a;e++)Array.isArray(c[e])&&k(c[e]);y(c);b.push(c)}function c(){}function p(){}function q(){}var n=uc.prototype;n.ja=function(b){this.va=b;this.b=b.b};n.ja.prototype.J=function(){};n.Z=function(b){this.type=b;this.b=b.b};var r=n.Z.prototype,b=[];Array.isArray||(Array.isArray=function(b){return"[object Array]"===Object.prototype.toString.call(b)});r.J=function(){this.Ub=this.q[0];this.mc=this.q[1];this.Fc= this.q[2];this.Qc||(this.Vc=g());var b=this.Vc;b.length=this.Ub;var c,a,h;for(c=0;c<this.Ub;c++)for(b[c]||(b[c]=g()),b[c].length=this.mc,a=0;a<this.mc;a++)for(b[c][a]||(b[c][a]=g()),b[c][a].length=this.Fc,h=0;h<this.Fc;h++)b[c][a][h]=0;this.gq=[];this.hq=[];this.iq=[];this.pe=-1};r.kg=function(){var b;for(b=0;b<this.Ub;b++)k(this.Vc[b]);y(this.Vc)};r.Wc=function(b,c,a){b=Math.floor(b);c=Math.floor(c);a=Math.floor(a);return isNaN(b)||0>b||b>this.Ub-1||isNaN(c)||0>c||c>this.mc-1||isNaN(a)||0>a||a>this.Fc- 1?0:this.Vc[b][c][a]};r.set=function(b,c,a,h){b=Math.floor(b);c=Math.floor(c);a=Math.floor(a);isNaN(b)||0>b||b>this.Ub-1||isNaN(c)||0>c||c>this.mc-1||isNaN(a)||0>a||a>this.Fc-1||(this.Vc[b][c][a]=h)};r.Ww=function(){return JSON.stringify({c2array:!0,size:[this.Ub,this.mc,this.Fc],data:this.Vc})};r.cb=function(){return{size:[this.Ub,this.mc,this.Fc],data:this.Vc}};r.zb=function(b){var c=b.size;this.Ub=c[0];this.mc=c[1];this.Fc=c[2];this.Vc=b.data};r.Ee=function(b,c,a){0>b&&(b=0);0>c&&(c=0);0>a&&(a= 0);if(this.Ub!==b||this.mc!==c||this.Fc!==a){this.Ub=b;this.mc=c;this.Fc=a;var h,l,f=this.Vc;f.length=b;for(b=0;b<this.Ub;b++)for(ia(f[b])&&(f[b]=g()),f[b].length=c,h=0;h<this.mc;h++)for(ia(f[b][h])&&(f[b][h]=g()),f[b][h].length=a,l=0;l<this.Fc;l++)ia(f[b][h][l])&&(f[b][h][l]=0)}};r.um=function(){return 0<=this.pe&&this.pe<this.gq.length?this.gq[this.pe]:0};r.kn=function(){return 0<=this.pe&&this.pe<this.hq.length?this.hq[this.pe]:0};r.PA=function(){return 0<=this.pe&&this.pe<this.iq.length?this.iq[this.pe]: 0};c.prototype.Lo=function(b,c,a){return ic(this.Wc(b,0,0),c,a)};c.prototype.nt=function(b,c,a,h){return ic(this.Wc(b,c,0),a,h)};r.Xe=function(b){this.b.vf(b.ha);b.Ce();this.b.vd(b.ha)};n.j=new c;p.prototype.dt=function(){var b,c,a;for(b=0;b<this.Ub;b++)for(c=0;c<this.mc;c++)for(a=0;a<this.Fc;a++)this.Vc[b][c][a]=0};p.prototype.jp=function(b,c,a){this.Ee(b,c,a)};p.prototype.kp=function(b,c){this.set(b,0,0,c)};p.prototype.Uu=function(b,c,a){this.set(b,c,0,a)};p.prototype.zu=function(b){var c=0,a=0, h=this.Vc;if(0!==this.Ub&&0!==this.mc&&0!==this.Fc)switch(b){case 0:h.reverse();break;case 1:for(;c<this.Ub;c++)h[c].reverse();break;case 2:for(;c<this.Ub;c++)for(a=0;a<this.mc;a++)h[c][a].reverse()}};p.prototype.Mt=function(b){var c;try{c=JSON.parse(b)}catch(a){return}c.c2array&&(b=c.size,this.Ub=b[0],this.mc=b[1],this.Fc=b[2],this.Vc=c.data)};n.u=new p;q.prototype.bt=function(b,c,a,h){b.aj(this.Wc(c,a||0,h||0))};q.prototype.np=function(b){b.ga(this.Ub)};q.prototype.Ct=function(b){b.ga(this.mc)}; q.prototype.Io=function(b){b.Yb(this.Ww())};n.M=new q})();function vc(g){this.b=g} (function(){function g(a){-1===yb.indexOf(a)&&yb.push(a)}function k(a){var b=a.m,c;try{c=b.play()}catch(f){g(a);return}c?c.catch(function(){g(a)}):Tc&&!K.Nc&&g(a)}function c(){var a,b,c,f;Uc||Qb||!B||(p(),"running"===B.state&&(Uc=!0));var d=yb.slice(0);y(yb);if(!la)for(a=0,b=d.length;a<b;++a)c=d[a],c.Ha||c.xc||(f=c.m.play())&&f.catch(function(){g(c)})}function p(){"suspended"===B.state&&B.resume&&B.resume();if(B.createBuffer){var a=B.createBuffer(1,220,22050),b=B.createBufferSource();b.buffer=a;b.connect(B.destination); d(b)}}function q(a){0>a&&(a=0);1<a&&(a=1);return Math.log(a)/Math.log(10)*20}function n(a){a=a.toLowerCase();return ea.hasOwnProperty(a)&&ea[a].length?ea[a][0].Ic():B.destination}function r(){return B.createGain?B.createGain():B.createGainNode()}function b(a){return B.createDelay?B.createDelay(a):B.createDelayNode(a)}function d(a,b){a.start?a.start(b||0):a.noteOn(b||0)}function e(a,b,c,f){a.start?a.start(f||0,b):a.noteGrainOn(f||0,b,c-b)}function a(a){try{a.stop?a.stop(0):a.noteOff(0)}catch(b){}} function h(a,b,c,f,d,e){this.type="filter";this.ab=[a,b,c,f,d,e];this.ma=r();this.S=r();this.S.gain.value=e;this.P=r();this.P.gain.value=1-e;this.fb=B.createBiquadFilter();this.fb.type="number"===typeof this.fb.type?a:gd[a];this.fb.frequency.value=b;this.fb.detune&&(this.fb.detune.value=c);this.fb.Q.value=f;this.fb.gain.value=d;this.ma.connect(this.fb);this.ma.connect(this.P);this.fb.connect(this.S)}function l(a,c,f){this.type="delay";this.ab=[a,c,f];this.ma=r();this.S=r();this.S.gain.value=f;this.P= r();this.P.gain.value=1-f;this.Li=r();this.$c=b(a);this.$c.delayTime.value=a;this.ek=r();this.ek.gain.value=c;this.ma.connect(this.Li);this.ma.connect(this.P);this.Li.connect(this.S);this.Li.connect(this.$c);this.$c.connect(this.ek);this.ek.connect(this.Li)}function f(a,b,c,f){this.type="convolve";this.ab=[b,c,f];this.ma=r();this.S=r();this.S.gain.value=c;this.P=r();this.P.gain.value=1-c;this.Ff=B.createConvolver();a&&(this.Ff.normalize=b,this.Ff.buffer=a);this.ma.connect(this.Ff);this.ma.connect(this.P); this.Ff.connect(this.S)}function t(a,c,f,e,h){this.type="flanger";this.ab=[a,c,f,e,h];this.ma=r();this.P=r();this.P.gain.value=1-h/2;this.S=r();this.S.gain.value=h/2;this.mk=r();this.mk.gain.value=e;this.$c=b(a+c);this.$c.delayTime.value=a;this.Jb=B.createOscillator();this.Jb.frequency.value=f;this.Ac=r();this.Ac.gain.value=c;this.ma.connect(this.$c);this.ma.connect(this.P);this.$c.connect(this.S);this.$c.connect(this.mk);this.mk.connect(this.$c);this.Jb.connect(this.Ac);this.Ac.connect(this.$c.delayTime); d(this.Jb)}function v(a,b,c,f,e,h){this.type="phaser";this.ab=[a,b,c,f,e,h];this.ma=r();this.P=r();this.P.gain.value=1-h/2;this.S=r();this.S.gain.value=h/2;this.fb=B.createBiquadFilter();this.fb.type="number"===typeof this.fb.type?7:"allpass";this.fb.frequency.value=a;this.fb.detune&&(this.fb.detune.value=b);this.fb.Q.value=c;this.Jb=B.createOscillator();this.Jb.frequency.value=e;this.Ac=r();this.Ac.gain.value=f;this.ma.connect(this.fb);this.ma.connect(this.P);this.fb.connect(this.S);this.Jb.connect(this.Ac); this.Ac.connect(this.fb.frequency);d(this.Jb)}function x(a){this.type="gain";this.ab=[a];this.ta=r();this.ta.gain.value=a}function m(a,b){this.type="tremolo";this.ab=[a,b];this.ta=r();this.ta.gain.value=1-b/2;this.Jb=B.createOscillator();this.Jb.frequency.value=a;this.Ac=r();this.Ac.gain.value=b/2;this.Jb.connect(this.Ac);this.Ac.connect(this.ta.gain);d(this.Jb)}function u(a,b){this.type="ringmod";this.ab=[a,b];this.ma=r();this.S=r();this.S.gain.value=b;this.P=r();this.P.gain.value=1-b;this.Yi=r(); this.Yi.gain.value=0;this.Jb=B.createOscillator();this.Jb.frequency.value=a;this.Jb.connect(this.Yi.gain);d(this.Jb);this.ma.connect(this.Yi);this.ma.connect(this.P);this.Yi.connect(this.S)}function Q(a,b,c,f,d){this.type="distortion";this.ab=[a,b,c,f,d];this.ma=r();this.ml=r();this.ll=r();this.bz(c,Math.pow(10,f/20));this.S=r();this.S.gain.value=d;this.P=r();this.P.gain.value=1-d;this.Wl=B.createWaveShaper();this.ck=new Float32Array(65536);this.Uw(a,b);this.Wl.ck=this.ck;this.ma.connect(this.ml); this.ma.connect(this.P);this.ml.connect(this.Wl);this.Wl.connect(this.ll);this.ll.connect(this.S)}function R(a,b,c,f,d){this.type="compressor";this.ab=[a,b,c,f,d];this.ta=B.createDynamicsCompressor();try{this.ta.threshold.value=a,this.ta.knee.value=b,this.ta.ratio.value=c,this.ta.attack.value=f,this.ta.release.value=d}catch(e){}}function G(a,b){this.type="analyser";this.ab=[a,b];this.ta=B.createAnalyser();this.ta.fftSize=a;this.ta.smoothingTimeConstant=b;this.Sw=new Float32Array(this.ta.frequencyBinCount); this.ts=new Uint8Array(a);this.Ri=0}function J(){this.ya=null;this.Qk=0}function w(a,b){this.src=a;this.fa=N;this.Nd=b;this.Ij=!1;var c=this;this.eh=this.mh=null;this.nh=[];this.wl=0;this.Fo=this.kk=this.As=this.hl=!1;1===N&&b&&!zb&&(this.fa=0,this.mh=r());this.fe=this.qa=null;var f;switch(this.fa){case 0:this.qa=new Audio;this.qa.crossOrigin="anonymous";this.qa.addEventListener("canplaythrough",function(){c.Fo=!0});1===N&&B.createMediaElementSource&&!/wiiu/i.test(navigator.userAgent)&&(this.As=!0, this.qa.addEventListener("canplay",function(){!c.eh&&c.qa&&(c.eh=B.createMediaElementSource(c.qa),c.eh.connect(c.mh))}));this.qa.autoplay=!1;this.qa.XA="auto";this.qa.src=a;break;case 1:K.ri?K.bq(a,function(a){c.fe=a;c.Sp()},function(){c.kk=!0}):(f=new XMLHttpRequest,f.open("GET",a,!0),f.responseType="arraybuffer",f.onload=function(){c.fe=f.response;c.Sp()},f.onerror=function(){c.kk=!0},f.send());break;case 2:this.qa=!0;break;case 3:this.qa=!0}}function A(a,b){var c=this;this.tag=b;this.Ha=this.Kd= !0;this.src=a.src;this.buffer=a;this.fa=N;this.Nd=a.Nd;this.playbackRate=1;this.Ng=!0;this.xc=this.Rc=!1;this.pc=0;this.si=this.Sg=this.Qd=!1;this.volume=1;this.Gn=function(a){if(!c.xc&&!c.Rc){var b=this;b||(b=a.target);b===c.Hj&&(c.Ng=!0,c.Ha=!0,z=c.tag,K.trigger(vc.prototype.j.Bj,Z))}};this.Hj=null;this.Pg=1===W&&!this.Nd||2===W;this.gh=1;this.startTime=this.Pg?K.wb.R:K.Ne.R;this.jb=this.tb=null;this.Rd=!1;this.Pb=null;this.Pr=this.Or=this.Nr=this.Mr=this.Rr=this.Qr=0;this.m=null;var f=!1;1!==this.fa|| 0!==this.buffer.fa||this.buffer.As||(this.fa=0);switch(this.fa){case 0:this.Nd?(this.m=a.qa,f=!a.Ij,a.Ij=!0):(this.m=new Audio,this.m.crossOrigin="anonymous",this.m.autoplay=!1,this.m.src=a.qa.src,f=!0);f&&this.m.addEventListener("ended",function(){z=c.tag;c.Ha=!0;K.trigger(vc.prototype.j.Bj,Z)});break;case 1:this.tb=r();this.tb.connect(n(b));1===this.buffer.fa?a.qa&&(this.m=B.createBufferSource(),this.m.buffer=a.qa,this.m.connect(this.tb)):(this.m=this.buffer.qa,this.buffer.mh.connect(this.tb),this.buffer.Ij|| (this.buffer.Ij=!0,this.buffer.qa.addEventListener("ended",function(){z=c.tag;c.Ha=!0;K.trigger(vc.prototype.j.Bj,Z)})));break;case 2:this.m=new window.Media(H+this.src,null,null,function(a){a===window.Media.MEDIA_STOPPED&&(c.Ng=!0,c.Ha=!0,z=c.tag,K.trigger(vc.prototype.j.Bj,Z))});break;case 3:this.m=!0}}function I(a,b){var c=a.of()?1:0,f=b.of()?1:0;return c===f?0:c<f?1:-1}function M(a,b){y(Ga);if(a.length){var c,f,d;c=0;for(f=D.length;c<f;c++)d=D[c],mb(a,d.tag)&&Ga.push(d);b&&Ga.sort(I)}else V&& !V.Uf()&&(y(Ga),Ga[0]=V)}function P(a,b){ea.hasOwnProperty(a)?ea[a].push(b):ea[a]=[b];var c,f,d,e,h=B.destination;if(ea.hasOwnProperty(a)&&(d=ea[a],d.length))for(h=d[0].Ic(),c=0,f=d.length;c<f;c++)e=d[c],c+1===f?e.Xc(B.destination):e.Xc(d[c+1].Ic());M(a);c=0;for(f=Ga.length;c<f;c++)Ga[c].My(h);Wa&&Tb===a&&(Wa.disconnect(),Wa.connect(h))}function Y(){}function F(){}function U(){}var E=vc.prototype;E.ja=function(a){this.va=a;this.b=a.b};E.ja.prototype.J=function(){};var K=null,Z=null,z="",H="",N=0, B=null,O=[],D=[],V=null,va=!1,W=0,la=!1,ba=1,Ma=0,$a=0,Qb=!1,Rb=1,Sb=1,Sc=10,Vc=1E4,Wc=1,Wa=null,Tb="",Tc=!1,yb=[],zb=!1,Uc=!1;document.addEventListener("pointerup",c,!0);document.addEventListener("touchend",c,!0);document.addEventListener("click",c,!0);document.addEventListener("keydown",c,!0);document.addEventListener("gamepadconnected",c,!0);var ea={},gd="lowpass highpass bandpass lowshelf highshelf peaking notch allpass".split(" ");h.prototype.Xc=function(a){this.S.disconnect();this.S.connect(a); this.P.disconnect();this.P.connect(a)};h.prototype.remove=function(){this.ma.disconnect();this.fb.disconnect();this.S.disconnect();this.P.disconnect()};h.prototype.Ic=function(){return this.ma};l.prototype.Xc=function(a){this.S.disconnect();this.S.connect(a);this.P.disconnect();this.P.connect(a)};l.prototype.remove=function(){this.ma.disconnect();this.Li.disconnect();this.$c.disconnect();this.ek.disconnect();this.S.disconnect();this.P.disconnect()};l.prototype.Ic=function(){return this.ma};f.prototype.Xc= function(a){this.S.disconnect();this.S.connect(a);this.P.disconnect();this.P.connect(a)};f.prototype.remove=function(){this.ma.disconnect();this.Ff.disconnect();this.S.disconnect();this.P.disconnect()};f.prototype.Ic=function(){return this.ma};t.prototype.Xc=function(a){this.P.disconnect();this.P.connect(a);this.S.disconnect();this.S.connect(a)};t.prototype.remove=function(){this.ma.disconnect();this.$c.disconnect();this.Jb.disconnect();this.Ac.disconnect();this.P.disconnect();this.S.disconnect(); this.mk.disconnect()};t.prototype.Ic=function(){return this.ma};v.prototype.Xc=function(a){this.P.disconnect();this.P.connect(a);this.S.disconnect();this.S.connect(a)};v.prototype.remove=function(){this.ma.disconnect();this.fb.disconnect();this.Jb.disconnect();this.Ac.disconnect();this.P.disconnect();this.S.disconnect()};v.prototype.Ic=function(){return this.ma};x.prototype.Xc=function(a){this.ta.disconnect();this.ta.connect(a)};x.prototype.remove=function(){this.ta.disconnect()};x.prototype.Ic=function(){return this.ta}; m.prototype.Xc=function(a){this.ta.disconnect();this.ta.connect(a)};m.prototype.remove=function(){this.Jb.disconnect();this.Ac.disconnect();this.ta.disconnect()};m.prototype.Ic=function(){return this.ta};u.prototype.Xc=function(a){this.S.disconnect();this.S.connect(a);this.P.disconnect();this.P.connect(a)};u.prototype.remove=function(){this.Jb.disconnect();this.Yi.disconnect();this.ma.disconnect();this.S.disconnect();this.P.disconnect()};u.prototype.Ic=function(){return this.ma};Q.prototype.bz=function(a, b){.01>a&&(a=.01);this.ml.gain.value=a;this.ll.gain.value=Math.pow(1/a,.6)*b};Q.prototype.shape=function(a,b,c){var f=1.05*c*b-b;c=0>a?-1:1;a=0>a?-a:a;b=a<b?a:b+f*(1-Math.exp(-(1/f)*(a-b)));return b*c};Q.prototype.Uw=function(a,b){for(var c=Math.pow(10,a/20),f=Math.pow(10,b/20),d=0,e=0;32768>e;++e)d=e/32768,d=this.shape(d,c,f),this.ck[32768+e]=d,this.ck[32768-e-1]=-d};Q.prototype.Xc=function(a){this.S.disconnect();this.S.connect(a);this.P.disconnect();this.P.connect(a)};Q.prototype.remove=function(){this.ma.disconnect(); this.ml.disconnect();this.Wl.disconnect();this.ll.disconnect();this.S.disconnect();this.P.disconnect()};Q.prototype.Ic=function(){return this.ma};R.prototype.Xc=function(a){this.ta.disconnect();this.ta.connect(a)};R.prototype.remove=function(){this.ta.disconnect()};R.prototype.Ic=function(){return this.ta};G.prototype.mb=function(){this.ta.getFloatFrequencyData(this.Sw);this.ta.getByteTimeDomainData(this.ts);for(var a=this.ta.fftSize,b=0,c=this.Ri=0,f=0;b<a;b++)f=(this.ts[b]-128)/128,0>f&&(f=-f), this.Ri<f&&(this.Ri=f),c+=f*f;this.Ri=q(this.Ri);q(Math.sqrt(c/a))};G.prototype.Xc=function(a){this.ta.disconnect();this.ta.connect(a)};G.prototype.remove=function(){this.ta.disconnect()};G.prototype.Ic=function(){return this.ta};J.prototype.Zi=function(a){this.ya=a};J.prototype.zk=function(){return!!this.ya};J.prototype.mb=function(){};w.prototype.Oy=function(){var a,b,c,f;c=a=0;for(b=D.length;a<b;++a)f=D[a],D[c]=f,f.buffer===this?f.stop():++c;D.length=c;this.eh&&(this.eh.disconnect(),this.eh=null); this.mh&&(this.mh.disconnect(),this.mh=null);this.fe=this.qa=null};w.prototype.Sp=function(){if(!this.qa&&this.fe){var a=this;if(B.decodeAudioData)B.decodeAudioData(this.fe,function(b){a.qa=b;a.fe=null;var c,f,d;if(ia(a.il)||la)ia(a.Yj)||(c=a.Yj.Ff,c.normalize=a.yr,c.buffer=b);else if(a.nh.length){c=0;for(f=a.nh.length;c<f;c++){b=a.nh[c];d=new A(a,b.Ds);d.io(!0);if("undefined"!==typeof b.Br&&(b.ya=K.xk(b.Br),!b.ya))continue;if(b.ya){var e=Sa(b.ya.x,b.ya.y,-b.ya.n.Nb(),Ma,$a,!0),h=Sa(b.ya.x,b.ya.y, -b.ya.n.Nb(),Ma,$a,!1);d.ho(e,h,Ia(b.ya.k-b.ya.n.Nb()),b.Wm,b.An,b.Dn);d.Zi(b.ya)}else d.ho(b.x,b.y,b.zg,b.Wm,b.An,b.Dn);d.play(a.vn,a.Eo,a.wl);a.hl&&d.pause();D.push(d)}y(a.nh)}else d=new A(a,a.il||""),d.play(a.vn,a.Eo,a.wl),a.hl&&d.pause(),D.push(d)},function(){a.kk=!0});else if(this.qa=B.createBuffer(this.fe,!1),this.fe=null,ia(this.il)||la)ia(this.Yj)||(b=this.Yj.Ff,b.normalize=this.yr,b.buffer=this.qa);else{var b=new A(this,this.il);b.play(this.vn,this.Eo,this.wl);this.hl&&b.pause();D.push(b)}}}; w.prototype.Jq=function(){switch(this.fa){case 0:var a=4<=this.qa.readyState;a&&(this.Fo=!0);return a||this.Fo;case 1:return!!this.fe||!!this.qa;case 2:return!0;case 3:return!0}return!1};w.prototype.Qx=function(){switch(this.fa){case 0:return this.Jq();case 1:return!!this.qa;case 2:return!0;case 3:return!0}return!1};w.prototype.Gx=function(){switch(this.fa){case 0:return!!this.qa.error;case 1:return this.kk}return!1};A.prototype.Uf=function(){switch(this.fa){case 0:return this.m.ended;case 1:return 1=== this.buffer.fa?!this.Kd&&!this.Ha&&this.m.loop||this.xc?!1:this.Ng:this.m.ended;case 2:return this.Ng;case 3:!0}return!0};A.prototype.Av=function(){return this.Kd||this.Ha?!0:this.Uf()};A.prototype.io=function(a){1===N&&(!this.Rd&&a?this.tb&&(this.jb||(this.jb=B.createPanner(),this.jb.panningModel="number"===typeof this.jb.panningModel?Rb:["equalpower","HRTF","soundfield"][Rb],this.jb.distanceModel="number"===typeof this.jb.distanceModel?Sb:["linear","inverse","exponential"][Sb],this.jb.refDistance= Sc,this.jb.maxDistance=Vc,this.jb.rolloffFactor=Wc),this.tb.disconnect(),this.tb.connect(this.jb),this.jb.connect(n(this.tag)),this.Rd=!0):this.Rd&&!a&&this.tb&&(this.jb.disconnect(),this.tb.disconnect(),this.tb.connect(n(this.tag)),this.Rd=!1))};A.prototype.ho=function(a,b,c,f,d,e){this.Rd&&1===N&&(this.jb.setPosition(a,b,0),this.jb.setOrientation(Math.cos(C(c)),Math.sin(C(c)),0),this.jb.coneInnerAngle=f,this.jb.coneOuterAngle=d,this.jb.coneOuterGain=e,this.Qr=a,this.Rr=b,this.Mr=c,this.Nr=f,this.Or= d,this.Pr=e)};A.prototype.Zi=function(a){this.Rd&&1===N&&(this.Pb||(this.Pb=new J),this.Pb.Zi(a))};A.prototype.mb=function(a){if(this.Rd&&1===N&&this.Pb&&this.Pb.zk()&&this.of()){this.Pb.mb(a);a=this.Pb.ya;var b=Sa(a.x,a.y,-a.n.Nb(),Ma,$a,!0),c=Sa(a.x,a.y,-a.n.Nb(),Ma,$a,!1);this.jb.setPosition(b,c,0);b=0;"undefined"!==typeof this.Pb.ya.k&&(b=a.k-a.n.Nb(),this.jb.setOrientation(Math.cos(b),Math.sin(b),0))}};A.prototype.play=function(a,b,c,f){var h=this.m;this.Qd=a;this.volume=b;c=c||0;f=f||0;switch(this.fa){case 0:1!== h.playbackRate&&(h.playbackRate=1);h.volume!==b*ba&&(h.volume=b*ba);h.loop!==a&&(h.loop=a);h.muted&&(h.muted=!1);if(h.currentTime!==c)try{h.currentTime=c}catch(g){}k(this);break;case 1:this.muted=!1;this.gh=1;if(1===this.buffer.fa)this.tb.gain.value=b*ba,this.Kd||(this.m=B.createBufferSource(),this.m.buffer=this.buffer.qa,this.m.connect(this.tb)),this.m.onended=this.Gn,this.Hj=this.m,this.m.loop=a,this.Ng=!1,0===c?d(this.m,f):e(this.m,c,this.kf(),f);else{1!==h.playbackRate&&(h.playbackRate=1);h.loop!== a&&(h.loop=a);h.volume=b*ba;if(h.currentTime!==c)try{h.currentTime=c}catch(m){}k(this)}break;case 2:(!this.Kd&&this.Ha||0!==c)&&h.seekTo(c);h.play();this.Ng=!1;break;case 3:K.Ob?AppMobi.context.playSound(this.src,a):AppMobi.player.playSound(this.src,a)}this.playbackRate=1;this.startTime=(this.Pg?K.wb.R:K.Ne.R)-c;this.xc=this.Ha=this.Kd=!1};A.prototype.stop=function(){switch(this.fa){case 0:this.m.paused||this.m.pause();break;case 1:1===this.buffer.fa?a(this.m):this.m.paused||this.m.pause();break; case 2:this.m.stop();break;case 3:K.Ob&&AppMobi.context.stopSound(this.src)}this.Ha=!0;this.xc=!1};A.prototype.pause=function(){if(!(this.Kd||this.Ha||this.Uf()||this.xc)){switch(this.fa){case 0:this.m.paused||this.m.pause();break;case 1:1===this.buffer.fa?(this.pc=this.Pm(!0),this.Qd&&(this.pc=this.pc%this.kf()),this.xc=!0,a(this.m)):this.m.paused||this.m.pause();break;case 2:this.m.pause();break;case 3:K.Ob&&AppMobi.context.stopSound(this.src)}this.xc=!0}};A.prototype.Sy=function(){if(!(this.Kd|| this.Ha||this.Uf())&&this.xc){switch(this.fa){case 0:k(this);break;case 1:1===this.buffer.fa?(this.m=B.createBufferSource(),this.m.buffer=this.buffer.qa,this.m.connect(this.tb),this.m.onended=this.Gn,this.Hj=this.m,this.m.loop=this.Qd,this.tb.gain.value=ba*this.volume*this.gh,this.Sl(),this.startTime=(this.Pg?K.wb.R:K.Ne.R)-this.pc/(this.playbackRate||.001),e(this.m,this.pc,this.kf())):k(this);break;case 2:this.m.play();break;case 3:K.Ob&&AppMobi.context.resumeSound(this.src)}this.xc=!1}};A.prototype.seek= function(a){if(!(this.Kd||this.Ha||this.Uf()))switch(this.fa){case 0:try{this.m.currentTime=a}catch(b){}break;case 1:if(1===this.buffer.fa)this.xc?this.pc=a:(this.pause(),this.pc=a,this.Sy());else try{this.m.currentTime=a}catch(c){}break;case 3:K.Ob&&AppMobi.context.seekSound(this.src,a)}};A.prototype.My=function(a){1===this.fa&&(this.Rd?(this.jb.disconnect(),this.jb.connect(a)):(this.tb.disconnect(),this.tb.connect(a)))};A.prototype.kf=function(){var a=0;switch(this.fa){case 0:"undefined"!==typeof this.m.duration&& (a=this.m.duration);break;case 1:a=this.buffer.qa.duration;break;case 2:a=this.m.getDuration();break;case 3:K.Ob&&(a=AppMobi.context.getDurationSound(this.src))}return a};A.prototype.Pm=function(a){var b=this.kf(),c=0;switch(this.fa){case 0:"undefined"!==typeof this.m.currentTime&&(c=this.m.currentTime);break;case 1:if(1===this.buffer.fa){if(this.xc)return this.pc;c=(this.Pg?K.wb.R:K.Ne.R)-this.startTime}else"undefined"!==typeof this.m.currentTime&&(c=this.m.currentTime);break;case 3:K.Ob&&(c=AppMobi.context.getPlaybackTimeSound(this.src))}a&& (c*=this.playbackRate);!this.Qd&&c>b&&(c=b);return c};A.prototype.of=function(){return!this.xc&&!this.Kd&&!this.Ha&&!this.Uf()};A.prototype.hz=function(){return!this.Kd&&!this.Ha&&!this.Uf()};A.prototype.uz=function(){var a=this.volume*ba;isFinite(a)||(a=0);switch(this.fa){case 0:"undefined"!==typeof this.m.volume&&this.m.volume!==a&&(this.m.volume=a);break;case 1:1===this.buffer.fa?this.tb.gain.value=a*this.gh:"undefined"!==typeof this.m.volume&&this.m.volume!==a&&(this.m.volume=a)}};A.prototype.hk= function(a){switch(this.fa){case 0:this.m.muted!==!!a&&(this.m.muted=!!a);break;case 1:1===this.buffer.fa?(this.gh=a?0:1,this.tb.gain.value=ba*this.volume*this.gh):this.m.muted!==!!a&&(this.m.muted=!!a)}};A.prototype.cz=function(){this.Sg=!0;this.hk(this.Sg||this.si)};A.prototype.ms=function(a){this.si=!!a;this.hk(this.Sg||this.si)};A.prototype.Sl=function(){var a=this.playbackRate;this.Pg&&(a*=K.sg);switch(this.fa){case 0:this.m.playbackRate!==a&&(this.m.playbackRate=a);break;case 1:1===this.buffer.fa? this.m.playbackRate.value!==a&&(this.m.playbackRate.value=a):this.m.playbackRate!==a&&(this.m.playbackRate=a)}};A.prototype.fz=function(b){switch(this.fa){case 0:b?this.of()?(this.Rc=!0,this.m.pause()):this.Rc=!1:this.Rc&&(this.m.play(),this.Rc=!1);break;case 1:b?this.of()?(this.Rc=!0,1===this.buffer.fa?(this.pc=this.Pm(!0),this.Qd&&(this.pc=this.pc%this.kf()),a(this.m)):this.m.pause()):this.Rc=!1:this.Rc&&(1===this.buffer.fa?(this.m=B.createBufferSource(),this.m.buffer=this.buffer.qa,this.m.connect(this.tb), this.m.onended=this.Gn,this.Hj=this.m,this.m.loop=this.Qd,this.tb.gain.value=ba*this.volume*this.gh,this.Sl(),this.startTime=(this.Pg?K.wb.R:K.Ne.R)-this.pc/(this.playbackRate||.001),e(this.m,this.pc,this.kf())):this.m.play(),this.Rc=!1);break;case 2:b?this.of()?(this.m.pause(),this.Rc=!0):this.Rc=!1:this.Rc&&(this.Rc=!1,this.m.play())}};E.Z=function(a){this.type=a;K=this.b=a.b;Z=this;this.yc=null;this.yi=-600;this.b.ri&&(zb=!0);!(this.b.Vg||this.b.Dk&&(this.b.an||this.b.Ek))||this.b.Gk||this.b.hb|| this.b.Hq||zb||(Tc=!0);B=null;"undefined"!==typeof AudioContext?(N=1,B=new AudioContext):"undefined"!==typeof webkitAudioContext&&(N=1,B=new webkitAudioContext);this.b.Vg&&B&&(B.close&&B.close(),"undefined"!==typeof AudioContext?B=new AudioContext:"undefined"!==typeof webkitAudioContext&&(B=new webkitAudioContext));1!==N&&(this.b.Lc&&"undefined"!==typeof window.Media?N=2:this.b.Iq&&(N=3));2===N&&(H=location.href,a=H.lastIndexOf("/"),-1<a&&(H=H.substr(0,a+1)),H=H.replace("file://",""));if(this.b.Rx&& this.b.Sx&&"undefined"===typeof Audio)alert("It looks like you're using Safari for Windows without Quicktime. Audio cannot be played until Quicktime is installed."),this.b.Pe(this);else{if(this.b.Ob)va=this.b.Dk;else try{va=!!(new Audio).canPlayType('audio/ogg; codecs="vorbis"')&&!this.b.Hk}catch(b){va=!1}this.b.oj(this)}};var Ha=E.Z.prototype;Ha.J=function(){this.b.Ag=this;W=this.q[0];this.De=this.q[1];this.xy=0!==this.q[2];this.wr=0;Rb=this.q[3];Sb=this.q[4];this.yi=-this.q[5];Sc=this.q[6];Vc= this.q[7];Wc=this.q[8];this.yc=new J;var a=this.b.L||this.b.width,b=this.b.K||this.b.height;1===N&&(B.listener.setPosition(a/2,b/2,this.yi),B.listener.setOrientation(0,0,1,0,-1,0),window.c2OnAudioMicStream=function(a,b){Wa&&Wa.disconnect();Tb=b.toLowerCase();Wa=B.createMediaStreamSource(a);Wa.connect(n(Tb))});this.b.yp(function(a){Z.ty(a)});var c=this;this.b.nv(function(a){c.jy(a)})};Ha.jy=function(a){var b,c,f;b=0;for(c=D.length;b<c;b++)f=D[b],f.Pb&&f.Pb.ya===a&&(f.Pb.ya=null,f.Rd&&f.of()&&f.Qd&& f.stop());this.yc.ya===a&&(this.yc.ya=null)};Ha.cb=function(){var a={silent:la,masterVolume:ba,listenerZ:this.yi,listenerUid:this.yc.zk()?this.yc.ya.uid:-1,playing:[],effects:{}},b=a.playing,c,f,d,e,h,g;c=0;for(f=D.length;c<f;c++)d=D[c],!d.hz()||3===this.De||d.Nd&&1===this.De||!d.Nd&&2===this.De||(e=d.Pm(),d.Qd&&(e=e%d.kf()),e={tag:d.tag,buffersrc:d.buffer.src,is_music:d.Nd,playbackTime:e,volume:d.volume,looping:d.Qd,muted:d.Sg,playbackRate:d.playbackRate,paused:d.xc,resume_position:d.pc},d.Rd&&(e.pan= {},g=e.pan,d.Pb&&d.Pb.zk()?g.objUid=d.Pb.ya.uid:(g.x=d.Qr,g.y=d.Rr,g.a=d.Mr),g.ia=d.Nr,g.oa=d.Or,g.og=d.Pr),b.push(e));b=a.effects;for(h in ea)if(ea.hasOwnProperty(h)){d=[];c=0;for(f=ea[h].length;c<f;c++)d.push({type:ea[h][c].type,params:ea[h][c].ab});b[h]=d}return a};var hb=[];Ha.zb=function(a){var b=a.silent;ba=a.masterVolume;this.yi=a.listenerZ;this.yc.Zi(null);var c=a.listenerUid;-1!==c&&(this.yc.Qk=c,hb.push(this.yc));var c=a.playing,d,e,g,p,k,q,n,r,F,w,z;if(3!==this.De)for(d=0,e=D.length;d< e;d++)F=D[d],F.Nd&&1===this.De||(F.Nd||2!==this.De)&&F.stop();for(k in ea)if(ea.hasOwnProperty(k))for(d=0,e=ea[k].length;d<e;d++)ea[k][d].remove();Xa(ea);for(k in a.effects)if(a.effects.hasOwnProperty(k))for(q=a.effects[k],d=0,e=q.length;d<e;d++)switch(g=q[d].type,w=q[d].params,g){case "filter":P(k,new h(w[0],w[1],w[2],w[3],w[4],w[5]));break;case "delay":P(k,new l(w[0],w[1],w[2]));break;case "convolve":g=w[2];F=this.tk(g,!1);F.qa?g=new f(F.qa,w[0],w[1],g):(g=new f(null,w[0],w[1],g),F.yr=w[0],F.Yj= g);P(k,g);break;case "flanger":P(k,new t(w[0],w[1],w[2],w[3],w[4]));break;case "phaser":P(k,new v(w[0],w[1],w[2],w[3],w[4],w[5]));break;case "gain":P(k,new x(w[0]));break;case "tremolo":P(k,new m(w[0],w[1]));break;case "ringmod":P(k,new u(w[0],w[1]));break;case "distortion":P(k,new Q(w[0],w[1],w[2],w[3],w[4]));break;case "compressor":P(k,new R(w[0],w[1],w[2],w[3],w[4]));break;case "analyser":P(k,new G(w[0],w[1]))}d=0;for(e=c.length;d<e;d++)3===this.De||(a=c[d],g=a.buffersrc,p=a.is_music,k=a.tag,q= a.playbackTime,n=a.looping,r=a.volume,z=(w=a.pan)&&w.hasOwnProperty("objUid")?w.objUid:-1,p&&1===this.De)||!p&&2===this.De||((F=this.mq(g,k,p,n,r))?(F.pc=a.resume_position,F.io(!!w),F.play(n,r,q),F.Sl(),F.uz(),F.hk(F.Sg||F.si),a.paused&&F.pause(),a.muted&&F.cz(),F.hk(F.Sg||F.si),w&&(-1!==z?(F.Pb=F.Pb||new J,F.Pb.Qk=z,hb.push(F.Pb)):F.ho(w.x,w.y,w.a,w.ia,w.oa,w.og))):(F=this.tk(g,p),F.wl=q,F.hl=a.paused,w&&(-1!==z?F.nh.push({Br:z,Wm:w.ia,An:w.oa,Dn:w.og,Ds:k}):F.nh.push({x:w.x,y:w.y,zg:w.a,Wm:w.ia, An:w.oa,Dn:w.og,Ds:k}))));if(b&&!la){d=0;for(e=D.length;d<e;d++)D[d].ms(!0);la=!0}else if(!b&&la){d=0;for(e=D.length;d<e;d++)D[d].ms(!1);la=!1}};Ha.de=function(){var a,b,c,f;a=0;for(b=hb.length;a<b;a++)c=hb[a],f=this.b.xk(c.Qk),c.Zi(f),c.Qk=-1,f&&(Ma=f.x,$a=f.y);y(hb)};Ha.ty=function(a){if(!this.xy){!a&&B&&B.resume&&(B.resume(),Qb=!1);var b,c;b=0;for(c=D.length;b<c;b++)D[b].fz(a);a&&B&&B.suspend&&(B.suspend(),Qb=!0)}};Ha.mb=function(){var a=this.b.gf,b,c,f;b=0;for(c=D.length;b<c;b++)f=D[b],f.mb(a), 0!==W&&f.Sl();var d,e;for(d in ea)if(ea.hasOwnProperty(d))for(f=ea[d],b=0,c=f.length;b<c;b++)e=f[b],e.mb&&e.mb();1===N&&this.yc.zk()&&(this.yc.mb(a),Ma=this.yc.ya.x,$a=this.yc.ya.y,B.listener.setPosition(this.yc.ya.x,this.yc.ya.y,this.yi))};var ib=[];Ha.dz=function(a){var b,c,f,d,e,h=0;b=0;for(c=a.length;b<c;++b)if(f=a[b],d=f[0],f=2*f[1],(e=4<d.length&&".ogg"===d.substr(d.length-4))&&va||!e&&!va)ib.push({filename:d,size:f,ya:null}),h+=f;return h};Ha.kz=function(){var a,b,c,f;a=0;for(b=ib.length;a< b;++a)c=ib[a],f=this.b.Gm+c.filename,c.ya=this.tk(f,!1)};Ha.hx=function(){var a=0,b,c,f;b=0;for(c=ib.length;b<c;++b)f=ib[b],f.ya.Qx()||f.ya.Gx()||this.b.hb||this.b.Ek?a+=f.size:f.ya.Jq()&&(a+=Math.floor(f.size/2));return a};Ha.Py=function(){var a,b,c,f;c=a=0;for(b=O.length;a<b;++a)f=O[a],O[c]=f,f.Nd?f.Oy():++c;O.length=c};Ha.tk=function(a,b){var c,f,d,e=null;c=0;for(f=O.length;c<f;c++)if(d=O[c],d.src===a){e=d;break}e||(zb&&b&&this.Py(),e=new w(a,b),O.push(e));return e};Ha.mq=function(a,b,c,f,d){var e, h,g;e=0;for(h=D.length;e<h;e++)if(g=D[e],g.src===a&&(g.Av()||c))return g.tag=b,g;a=this.tk(a,c);if(!a.qa)return"<preload>"!==b&&(a.il=b,a.vn=f,a.Eo=d),null;g=new A(a,b);D.push(g);return g};var Ga=[];Y.prototype.Bj=function(a){return mb(z,a)};Y.prototype.Jt=function(a){M(a);var b;a=0;for(b=Ga.length;a<b;a++)if(Ga[a].of())return!0;return!1};E.j=new Y;F.prototype.Play=function(a,b,c,f){!la&&(c=Math.pow(10,c/20),isFinite(c)||(c=0),0>c&&(c=0),1<c&&(c=1),V=this.mq(this.b.Gm+a[0]+(va?".ogg":".m4a"),f,a[1], 0!==b,c))&&(V.io(!1),V.play(0!==b,c,0,this.wr),this.wr=0)};F.prototype.mp=function(a){M(a);var b;a=0;for(b=Ga.length;a<b;a++)Ga[a].stop()};E.u=new F;U.prototype.qt=function(a,b){M(b,!0);Ga.length?a.D(Ga[0].kf()):a.D(0)};E.M=new U})();function wc(g){this.b=g} (function(){function g(){q&&n&&window.OfflineClientInfo&&window.OfflineClientInfo.SetMessageCallback(function(b){r.ry(b)})}function k(){}var c=wc.prototype;c.ja=function(b){this.va=b;this.b=b.b};var p=c.ja.prototype;p.J=function(){};var q=!1,n=!1;document.addEventListener("DOMContentLoaded",function(){if(window.C2_RegisterSW&&navigator.serviceWorker){var b=document.createElement("script");b.onload=function(){q=!0;g()};b.src="offlineClient.js";document.head.appendChild(b)}});var r=null;p.Fr=function(){n= !0;g()};c.Z=function(b){this.type=b;this.b=b.b};p=c.Z.prototype;p.J=function(){var b=this;window.addEventListener("resize",function(){b.b.trigger(wc.prototype.j.mu,b)});r=this;"undefined"!==typeof navigator.onLine&&(window.addEventListener("online",function(){b.b.trigger(wc.prototype.j.ju,b)}),window.addEventListener("offline",function(){b.b.trigger(wc.prototype.j.hu,b)}));this.b.Ob||(document.addEventListener("appMobi.device.update.available",function(){b.b.trigger(wc.prototype.j.am,b)}),document.addEventListener("backbutton", function(){b.b.trigger(wc.prototype.j.Aj,b)}),document.addEventListener("menubutton",function(){b.b.trigger(wc.prototype.j.$o,b)}),document.addEventListener("searchbutton",function(){b.b.trigger(wc.prototype.j.pu,b)}),document.addEventListener("tizenhwkey",function(c){var e;switch(c.keyName){case "back":e=b.b.trigger(wc.prototype.j.Aj,b);!e&&window.tizen&&window.tizen.application.getCurrentApplication().exit();break;case "menu":(e=b.b.trigger(wc.prototype.j.$o,b))||c.preventDefault()}}));this.b.Hk&& "undefined"!==typeof Windows?Windows.UI.Core.SystemNavigationManager.getForCurrentView().addEventListener("backrequested",function(c){b.b.trigger(wc.prototype.j.Aj,b)&&(c.handled=!0)}):this.b.Lq&&WinJS.Application&&(WinJS.Application.onbackclick=function(){return!!b.b.trigger(wc.prototype.j.Aj,b)});this.b.yp(function(c){c?b.b.trigger(wc.prototype.j.ku,b):b.b.trigger(wc.prototype.j.lu,b)})};p.ry=function(b){b=b.data.type;"downloading-update"===b?this.b.trigger(wc.prototype.j.su,this):"update-ready"=== b||"update-pending"===b?this.b.trigger(wc.prototype.j.am,this):"offline-ready"===b&&this.b.trigger(wc.prototype.j.iu,this)};k.prototype.ju=function(){return!0};k.prototype.hu=function(){return!0};k.prototype.am=function(){return!0};k.prototype.lu=function(){return!0};k.prototype.ku=function(){return!0};k.prototype.mu=function(){return!0};k.prototype.Aj=function(){return!0};k.prototype.$o=function(){return!0};k.prototype.pu=function(){return!0};k.prototype.su=function(){return!0};k.prototype.am=function(){return!0}; k.prototype.iu=function(){return!0};c.j=new k;c.u=new function(){};c.M=new function(){}})();function sc(g){this.b=g} (function(){function g(){this.name="";this.qh=0;this.ab=[]}function k(){d++;d===b.length&&b.push(new g);return b[d]}function c(){return 0>d?null:b[d]}function p(){}function q(){}function n(){}var r=sc.prototype;r.ja=function(b){this.va=b;this.b=b.b};r.ja.prototype.J=function(){};r.Z=function(b){this.type=b;this.b=b.b};var b=[],d=-1;r.Z.prototype.J=function(){var b=this;window.c2_callFunction=function(a,c){var g,f,p,q=k();q.name=a.toLowerCase();q.qh=0;if(c)for(q.ab.length=c.length,g=0,f=c.length;g< f;++g)p=c[g],q.ab[g]="number"===typeof p||"string"===typeof p?p:"boolean"===typeof p?p?1:0:0;else y(q.ab);b.b.trigger(sc.prototype.j.Cj,b,q.name);d--;return q.qh}};p.prototype.Cj=function(b){var a=c();return a?mb(b,a.name):!1};p.prototype.jt=function(b,a,d){var g=c();if(!g)return!1;b=sa(b);return 0>b||b>=g.ab.length?!1:ic(g.ab[b],a,d)};r.j=new p;q.prototype.CallFunction=function(b,a){var c=k();c.name=b.toLowerCase();c.qh=0;Ba(c.ab,a);this.b.trigger(sc.prototype.j.Cj,this,c.name);d--};q.prototype.Pu= function(b){var a=c();a&&(a.qh=b)};r.u=new q;n.prototype.uu=function(b,a){a=sa(a);var d=c();d?0<=a&&a<d.ab.length?b.aj(d.ab[a]):b.ga(0):b.ga(0)};n.prototype.Jo=function(b,a){var c=k();c.name=a.toLowerCase();c.qh=0;y(c.ab);var g,f;g=2;for(f=arguments.length;g<f;g++)c.ab.push(arguments[g]);this.b.trigger(sc.prototype.j.Cj,this,c.name);d--;b.aj(c.qh)};r.M=new n})();function xc(g){this.b=g} (function(){function g(){}var k=xc.prototype;k.ja=function(c){this.va=c;this.b=c.b};k.ja.prototype.J=function(){};k.Z=function(c){this.type=c;this.b=c.b;this.wi=Array(256);this.rj=Array(256);this.Ke=0};var c=k.Z.prototype;c.J=function(){var c=this;this.b.hb||(jQuery(document).keydown(function(g){c.ky(g)}),jQuery(document).keyup(function(g){c.my(g)}))};var p=[32,33,34,35,36,37,38,39,40,44];c.ky=function(c){var g=!1;window!=window.top&&-1<p.indexOf(c.which)&&(c.preventDefault(),g=!0,c.stopPropagation()); if(this.wi[c.which])this.rj[c.which]&&!g&&c.preventDefault();else{this.wi[c.which]=!0;this.Ke=c.which;this.b.Nc=!0;this.b.trigger(xc.prototype.j.Vt,this);var k=this.b.trigger(xc.prototype.j.Wo,this),b=this.b.trigger(xc.prototype.j.eu,this);this.b.Nc=!1;if(k||b)this.rj[c.which]=!0,g||c.preventDefault()}};c.my=function(c){this.wi[c.which]=!1;this.Ke=c.which;this.b.Nc=!0;this.b.trigger(xc.prototype.j.Ro,this);var g=this.b.trigger(xc.prototype.j.Yo,this),k=this.b.trigger(xc.prototype.j.Xo,this);this.b.Nc= !1;if(g||k||this.rj[c.which])this.rj[c.which]=!0,c.preventDefault()};c.kh=function(){var c;for(c=0;256>c;++c)if(this.wi[c]){this.wi[c]=!1;this.Ke=c;this.b.trigger(xc.prototype.j.Ro,this);var g=this.b.trigger(xc.prototype.j.Yo,this),k=this.b.trigger(xc.prototype.j.Xo,this);if(g||k)this.rj[c]=!0}};c.cb=function(){return{triggerKey:this.Ke}};c.zb=function(c){this.Ke=c.triggerKey};g.prototype.Wo=function(c){return c===this.Ke};g.prototype.Vt=function(){return!0};g.prototype.Ro=function(){return!0};g.prototype.Yo= function(c){return c===this.Ke};g.prototype.eu=function(c){return c===this.Ke};g.prototype.Xo=function(c){return c===this.Ke};k.j=new g;k.u=new function(){};k.M=new function(){}})();var yc=!1; try{!function(){var g,k,c;!function(){var p={},q={};g=function(c,g,b){p[c]={Hv:g,zv:b}};c=k=function(g){function r(a){if("."!==a.charAt(0))return a;a=a.split("/");for(var b=g.split("/").slice(0,-1),c=0,d=a.length;d>c;c++){var e=a[c];".."===e?b.pop():"."!==e&&b.push(e)}return b.join("/")}if(c.EA=p,q[g])return q[g];if(q[g]={},!p[g])throw Error("Could not find module "+g);for(var b,d=p[g],e=d.Hv,d=d.zv,a=[],h=0,l=e.length;l>h;h++)"exports"===e[h]?a.push(b={}):a.push(k(r(e[h])));e=d.apply(this,a);return q[g]= b||e}}();g("promise/all",["./utils","exports"],function(c,g){var k=c.isArray,r=c.isFunction;g.all=function(b){if(!k(b))throw new TypeError("You must pass an array to all.");return new this(function(c,e){function a(a){return function(b){g[a]=b;0===--f&&c(g)}}var h,g=[],f=b.length;0===f&&c([]);for(var k=0;k<b.length;k++)(h=b[k])&&r(h.then)?h.then(a(k),e):(g[k]=h,0===--f&&c(g))})}});g("promise/asap",["exports"],function(c){function g(){return function(){process.WA(b)}}function k(){var c=0,d=new a(b), e=document.createTextNode("");return d.observe(e,{characterData:!0}),function(){e.data=c=++c%2}}function r(){return function(){h.setTimeout(b,1)}}function b(){for(var a=0;a<l.length;a++){var b=l[a];(0,b[0])(b[1])}l=[]}var d,e="undefined"!=typeof window?window:{},a=e.MutationObserver||e.WebKitMutationObserver,h="undefined"!=typeof global?global:void 0===this?window:this,l=[];d="undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?g():a?k():r();c.rv=function(a,b){1===l.push([a, b])&&d()}});g("promise/config",["exports"],function(c){var g={NA:!1};c.Op=g;c.Bv=function(c,k){return 2!==arguments.length?g[c]:void(g[c]=k)}});g("promise/polyfill",["./promise","./utils","exports"],function(c,g,k){var r=c.Promise,b=g.isFunction;k.yy=function(){var c;c="undefined"!=typeof global?global:"undefined"!=typeof window&&window.document?window:self;"Promise"in c&&"resolve"in c.Promise&&"reject"in c.Promise&&"all"in c.Promise&&"race"in c.Promise&&function(){var e;return new c.Promise(function(a){e= a}),b(e)}()||(c.Promise=r)}});g("promise/promise","./config ./utils ./all ./race ./resolve ./reject ./asap exports".split(" "),function(c,g,k,r,b,d,e,a){function h(a){if(!A(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof h))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this.Gj=[];l(a,this)}function l(a,b){function c(a){m(b, a)}function f(a){Q(b,a)}try{a(c,f)}catch(d){f(d)}}function f(a,b,c,f){var d,e,h,g,l=A(c);if(l)try{d=c(f),h=!0}catch(k){g=!0,e=k}else d=f,h=!0;x(b,d)||(l&&h?m(b,d):g?Q(b,e):a===P?m(b,d):a===Y&&Q(b,d))}function t(a,b,c,f){a=a.Gj;var d=a.length;a[d]=b;a[d+P]=c;a[d+Y]=f}function v(a,b){for(var c,d,e=a.Gj,h=a.Fj,g=0;g<e.length;g+=3)c=e[g],d=e[g+b],f(b,c,d,h);a.Gj=null}function x(a,b){var c,f=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(w(b)&&(f=b.then, A(f)))return f.call(b,function(f){return c?!0:(c=!0,void(b!==f?m(a,f):u(a,f)))},function(b){return c?!0:(c=!0,void Q(a,b))}),!0}catch(d){return c?!0:(Q(a,d),!0)}return!1}function m(a,b){a===b?u(a,b):x(a,b)||u(a,b)}function u(a,b){a.ae===I&&(a.ae=M,a.Fj=b,J.async(R,a))}function Q(a,b){a.ae===I&&(a.ae=M,a.Fj=b,J.async(G,a))}function R(a){v(a,a.ae=P)}function G(a){v(a,a.ae=Y)}var J=c.Op,w=(c.Bv,g.gy),A=g.isFunction;c=(g.now,k.all);r=r.race;b=b.resolve;d=d.reject;J.async=e.rv;var I=void 0,M=0,P=1,Y=2; h.prototype={constructor:h,ae:void 0,Fj:void 0,Gj:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this.ae){var e=arguments;J.async(function(){f(c.ae,d,e[c.ae-1],c.Fj)})}else t(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}};h.all=c;h.race=r;h.resolve=b;h.reject=d;a.Promise=h});g("promise/race",["./utils","exports"],function(c,g){var k=c.isArray;g.race=function(c){if(!k(c))throw new TypeError("You must pass an array to race.");return new this(function(b, d){for(var e,a=0;a<c.length;a++)(e=c[a])&&"function"==typeof e.then?e.then(b,d):b(e)})}});g("promise/reject",["exports"],function(c){c.reject=function(c){return new this(function(g,k){k(c)})}});g("promise/resolve",["exports"],function(c){c.resolve=function(c){return c&&"object"==typeof c&&c.constructor===this?c:new this(function(g){g(c)})}});g("promise/utils",["exports"],function(c){function g(c){return"function"==typeof c}var k=Date.now||function(){return(new Date).getTime()};c.gy=function(c){return g(c)|| "object"==typeof c&&null!==c};c.isFunction=g;c.isArray=function(c){return"[object Array]"===Object.prototype.toString.call(c)};c.now=k});k("promise/polyfill").yy()}();var zc=function(){return function(g){function k(p){if(c[p])return c[p].Id;var q=c[p]={Id:{},id:p,loaded:!1};return g[p].call(q.Id,q,q.Id,k),q.loaded=!0,q.Id}var c={};return k.Xe=g,k.Ph=c,k.Qi="",k(0)}([function(g,k,c){k.Ej=!0;var p=function(g){function k(a,b){a[b]=function(){var c=arguments;return a.ready().then(function(){return a[b].apply(a, c)})}}function p(){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var c in b)b.hasOwnProperty(c)&&(f(b[c])?arguments[0][c]=b[c].slice():arguments[0][c]=b[c])}return arguments[0]}function b(a){for(var b in e)if(e.hasOwnProperty(b)&&e[b]===a)return!0;return!1}var d={},e={Gh:"asyncStorage",Hh:"localStorageWrapper",Jh:"webSQLStorage"},a="clear getItem iterate key keys length removeItem setItem".split(" "),h={description:"",Hg:[e.Gh,e.Jh,e.Hh].slice(),name:"localforage",size:4980736,Aa:"keyvaluepairs", version:1},l=function(a){var b={},c;try{var f=f||a.indexedDB||a.webkitIndexedDB||a.mozIndexedDB||a.kn||a.msIndexedDB;c="undefined"!=typeof a.openDatabase&&a.navigator&&a.navigator.userAgent&&/Safari/.test(a.navigator.userAgent)&&!/Chrome/.test(a.navigator.userAgent)?!1:f&&"function"==typeof f.open&&"undefined"!=typeof a.IDBKeyRange}catch(d){c=!1}b[e.Gh]=!!c;var h;try{h=a.openDatabase}catch(g){h=!1}b[e.Jh]=!!h;var l;try{l=a.localStorage&&"setItem"in a.localStorage&&a.localStorage.setItem}catch(k){l= !1}return b[e.Hh]=!!l,b}(g),f=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)};return new (function(){function g(a){if(!(this instanceof g))throw new TypeError("Cannot call a class as a function");this.Gh=e.Gh;this.Hh=e.Hh;this.Jh=e.Jh;this.dm=p({},h);this.zf=p({},this.dm,a);this.qp=this.Fd=null;this.Re=!1;this.wa=null;this.rp();this.hs(this.zf.Hg)}return g.prototype.Op=function(a){if("object"==typeof a){if(this.Re)return Error("Can't call config() after localforage has been used."); for(var b in a)"storeName"===b&&(a[b]=a[b].replace(/\W/g,"_")),this.zf[b]=a[b];return"driver"in a&&a.Hg&&this.hs(this.zf.Hg),!0}return"string"==typeof a?this.zf[a]:this.zf},g.prototype.Hg=function(){return this.Kh||null},g.prototype.qq=function(a,f,e){var h=this,g=function(){if(b(a))switch(a){case h.Gh:return new Promise(function(a){a(c(1))});case h.Hh:return new Promise(function(a){a(c(2))});case h.Jh:return new Promise(function(a){a(c(4))})}else if(d[a])return Promise.resolve(d[a]);return Promise.reject(Error("Driver not found."))}(); return g.then(f,e),g},g.prototype.ready=function(a){var b=this,c=b.Fd.then(function(){return null===b.Re&&(b.Re=b.qp()),b.Re});return c.then(a,a),c},g.prototype.hs=function(a,b,c){function d(){h.zf.Hg=h.Hg()}function e(a){return function(){function b(){for(;c<a.length;){var f=a[c];return c++,h.wa=null,h.Re=null,h.qq(f).then(function(a){return h.gv(a),d(),h.Re=h.fm(h.zf),h.Re})["catch"](b)}d();return h.Fd=Promise.reject(Error("No available storage method found.")),h.Fd}var c=0;return b()}}var h=this; f(a)||(a=[a]);var g=this.hv(a);return this.Fd=(null!==this.Fd?this.Fd["catch"](function(){return Promise.resolve()}):Promise.resolve()).then(function(){var a=g[0];return h.wa=null,h.Re=null,h.qq(a).then(function(a){h.Kh=a.Kh;d();h.rp();h.qp=e(g)})})["catch"](function(){d();return h.Fd=Promise.reject(Error("No available storage method found.")),h.Fd}),this.Fd.then(b,c),this.Fd},g.prototype.supports=function(a){return!!l[a]},g.prototype.gv=function(a){p(this,a)},g.prototype.hv=function(a){for(var b= [],c=0,f=a.length;f>c;c++){var d=a[c];this.supports(d)&&b.push(d)}return b},g.prototype.rp=function(){for(var b=0;b<a.length;b++)k(this,a[b])},g.prototype.Zj=function(a){return new g(a)},g}())}("undefined"!=typeof window?window:self);k["default"]=p;g.Id=k["default"]},function(g,k){k.Ej=!0;k["default"]=function(c){function g(a,b){a=a||[];b=b||{};try{return new Blob(a,b)}catch(f){if("TypeError"!==f.name)throw f;for(var d=new (c.BlobBuilder||c.Xe||c.um||c.WebKitBlobBuilder),e=0;e<a.length;e+=1)d.append(a[e]); return d.getBlob(b.type)}}function k(a){return new Promise(function(b,c){var f=new XMLHttpRequest;f.open("GET",a);f.withCredentials=!0;f.responseType="arraybuffer";f.onreadystatechange=function(){return 4===f.readyState?200===f.status?b({response:f.response,type:f.getResponseHeader("Content-Type")}):void c({status:f.status,response:f.response}):void 0};f.send()})}function n(a){return(new Promise(function(b,c){var f=g([""],{type:"image/png"}),d=a.transaction([I],"readwrite");d.objectStore(I).put(f, "key");d.oncomplete=function(){var f=a.transaction([I],"readwrite").objectStore(I).get("key");f.onerror=c;f.onsuccess=function(a){var c=URL.createObjectURL(a.target.result);k(c).then(function(a){b(!(!a||"image/png"!==a.type))},function(){b(!1)}).then(function(){URL.revokeObjectURL(c)})}};d.onerror=d.onabort=c}))["catch"](function(){return!1})}function r(a){return"boolean"==typeof w?Promise.resolve(w):n(a).then(function(a){return w=a})}function b(a){return new Promise(function(b,c){var f=new FileReader; f.onerror=c;f.onloadend=function(c){b({pp:!0,data:btoa(c.target.result||""),type:a.type})};f.readAsBinaryString(a)})}function d(a){for(var b=atob(a.data),c=b.length,f=new ArrayBuffer(c),d=new Uint8Array(f),e=0;c>e;e++)d[e]=b.charCodeAt(e);return g([f],{type:a.type})}function e(a){var b=this,c=b.em().then(function(){var a=A[b.wa.name];return a&&a.Gg?a.Gg:void 0});return c.then(a,a),c}function a(a){a=A[a.name];var b={};b.promise=new Promise(function(a){b.resolve=a});a.Tp.push(b);a.Gg?a.Gg=a.Gg.then(function(){return b.promise}): a.Gg=b.promise}function h(a){function b(){return Promise.resolve()}var f=this,d={db:null};if(a)for(var h in a)d[h]=a[h];A||(A={});var g=A[d.name];g||(g={pk:[],db:null,Gg:null,Tp:[]},A[d.name]=g);g.pk.push(f);f.em||(f.em=f.ready,f.ready=e);a=[];for(h=0;h<g.pk.length;h++){var m=g.pk[h];m!==f&&a.push(m.em()["catch"](b))}var k=g.pk.slice(0);return Promise.all(a).then(function(){return d.db=g.db,l(d,!1)}).then(function(a){d.db=a;var b;b=f.dm.version;if(d.db){var e=!d.db.objectStoreNames.contains(d.Aa), h=d.version>d.db.version;(d.version<d.db.version&&(d.version!==b&&c.console.warn('The database "'+d.name+"\" can't be downgraded from version "+d.db.version+" to version "+d.version+"."),d.version=d.db.version),h||e)?(e&&(b=d.db.version+1,b>d.version&&(d.version=b)),b=!0):b=!1}else b=!0;return b?l(d,!0):a}).then(function(a){d.db=g.db=a;f.wa=d;for(a=0;a<k.length;a++){var b=k[a];b!==f&&(b.wa.db=d.db,b.wa.version=d.version)}})}function l(b,f){return new Promise(function(d,e){if(b.db){if(!f)return d(b.db); a(b);b.db.close()}var h=[b.name];f&&h.push(b.version);var g=J.open.apply(J,h);f&&(g.onupgradeneeded=function(a){var f=g.result;try{f.createObjectStore(b.Aa),1>=a.oldVersion&&f.createObjectStore(I)}catch(d){if("ConstraintError"!==d.name)throw d;c.console.warn('The database "'+b.name+'" has been upgraded from version '+a.oldVersion+" to version "+a.newVersion+', but the storage "'+b.Aa+'" already exists.')}});g.onerror=function(){e(g.error)};g.onsuccess=function(){d(g.result);var a=A[b.name].Tp.pop(); a&&a.resolve()}})}function f(a,b){var f=this;"string"!=typeof a&&(c.console.warn(a+" used as a key, but it is not a string."),a=String(a));var e=new Promise(function(b,c){f.ready().then(function(){var e=f.wa,h=e.db.transaction(e.Aa,"readonly").objectStore(e.Aa).get(a);h.onsuccess=function(){var a=h.result;void 0===a&&(a=null);a&&a.pp&&(a=d(a));b(a)};h.onerror=function(){c(h.error)}})["catch"](c)});return G(e,b),e}function t(a,b){var c=this,f=new Promise(function(b,f){c.ready().then(function(){var e= c.wa,h=e.db.transaction(e.Aa,"readonly").objectStore(e.Aa).openCursor(),g=1;h.onsuccess=function(){var c=h.result;if(c){var f=c.value;f&&f.pp&&(f=d(f));f=a(f,c.key,g++);void 0!==f?b(f):c["continue"]()}else b()};h.onerror=function(){f(h.error)}})["catch"](f)});return G(f,b),f}function v(a,f,d){var e=this;"string"!=typeof a&&(c.console.warn(a+" used as a key, but it is not a string."),a=String(a));var h=new Promise(function(c,d){var h;e.ready().then(function(){return h=e.wa,f instanceof Blob?r(h.db).then(function(a){return a? f:b(f)}):f}).then(function(b){var f=h.db.transaction(h.Aa,"readwrite"),e=f.objectStore(h.Aa);null===b&&(b=void 0);f.oncomplete=function(){void 0===b&&(b=null);c(b)};f.onabort=f.onerror=function(){d(g.error?g.error:g.transaction.error)};var g=e.put(b,a)})["catch"](d)});return G(h,d),h}function x(a,b){var f=this;"string"!=typeof a&&(c.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=new Promise(function(b,c){f.ready().then(function(){var d=f.wa,e=d.db.transaction(d.Aa,"readwrite"), h=e.objectStore(d.Aa)["delete"](a);e.oncomplete=function(){b()};e.onerror=function(){c(h.error)};e.onabort=function(){c(h.error?h.error:h.transaction.error)}})["catch"](c)});return G(d,b),d}function m(a){var b=this,c=new Promise(function(a,c){b.ready().then(function(){var f=b.wa,d=f.db.transaction(f.Aa,"readwrite"),e=d.objectStore(f.Aa).clear();d.oncomplete=function(){a()};d.onabort=d.onerror=function(){c(e.error?e.error:e.transaction.error)}})["catch"](c)});return G(c,a),c}function u(a){var b=this, c=new Promise(function(a,c){b.ready().then(function(){var f=b.wa,d=f.db.transaction(f.Aa,"readonly").objectStore(f.Aa).count();d.onsuccess=function(){a(d.result)};d.onerror=function(){c(d.error)}})["catch"](c)});return G(c,a),c}function Q(a,b){var c=this,f=new Promise(function(b,f){return 0>a?void b(null):void c.ready().then(function(){var d=c.wa,e=!1,h=d.db.transaction(d.Aa,"readonly").objectStore(d.Aa).openCursor();h.onsuccess=function(){var c=h.result;return c?void(0===a?b(c.key):e?b(c.key):(e= !0,c.advance(a))):void b(null)};h.onerror=function(){f(h.error)}})["catch"](f)});return G(f,b),f}function R(a){var b=this,c=new Promise(function(a,c){b.ready().then(function(){var f=b.wa,d=f.db.transaction(f.Aa,"readonly").objectStore(f.Aa).openCursor(),e=[];d.onsuccess=function(){var b=d.result;return b?(e.push(b.key),void b["continue"]()):void a(e)};d.onerror=function(){c(d.error)}})["catch"](c)});return G(c,a),c}function G(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}var J=J||c.indexedDB|| c.webkitIndexedDB||c.mozIndexedDB||c.kn||c.msIndexedDB;if(J){var w,A,I="local-forage-detect-blob-support";return{Kh:"asyncStorage",fm:h,Pq:t,getItem:f,setItem:v,removeItem:x,clear:m,length:u,key:Q,keys:R}}}("undefined"!=typeof window?window:self);g.Id=k["default"]},function(g,k,c){k.Ej=!0;k["default"]=function(g){function k(b,c){c&&b.then(function(b){c(null,b)},function(b){c(b)})}var n=null;try{if(!(g.localStorage&&"setItem"in g.localStorage))return;n=g.localStorage}catch(r){return}return{Kh:"localStorageWrapper", fm:function(b){var d={};if(b)for(var e in b)d[e]=b[e];return d.Od=d.name+"/",d.Aa!==this.dm.Aa&&(d.Od+=d.Aa+"/"),this.wa=d,(new Promise(function(a){a(c(3))})).then(function(a){return d.lg=a,Promise.resolve()})},Pq:function(b,c){var e=this,a=e.ready().then(function(){for(var a=e.wa,c=a.Od,f=c.length,d=n.length,g=1,k=0;d>k;k++){var m=n.key(k);if(0===m.indexOf(c)){var p=n.getItem(m);if(p&&(p=a.lg.gk(p)),p=b(p,m.substring(f),g++),void 0!==p)return p}}});return k(a,c),a},getItem:function(b,c){var e=this; "string"!=typeof b&&(g.console.warn(b+" used as a key, but it is not a string."),b=String(b));var a=e.ready().then(function(){var a=e.wa,c=n.getItem(a.Od+b);return c&&(c=a.lg.gk(c)),c});return k(a,c),a},setItem:function(b,c,e){var a=this;"string"!=typeof b&&(g.console.warn(b+" used as a key, but it is not a string."),b=String(b));var h=a.ready().then(function(){void 0===c&&(c=null);var e=c;return new Promise(function(f,h){var g=a.wa;g.lg.serialize(c,function(a,c){if(c)h(c);else try{n.setItem(g.Od+ b,a),f(e)}catch(d){"QuotaExceededError"!==d.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==d.name||h(d),h(d)}})})});return k(h,e),h},removeItem:function(b,c){var e=this;"string"!=typeof b&&(g.console.warn(b+" used as a key, but it is not a string."),b=String(b));var a=e.ready().then(function(){n.removeItem(e.wa.Od+b)});return k(a,c),a},clear:function(b){var c=this,e=c.ready().then(function(){for(var a=c.wa.Od,b=n.length-1;0<=b;b--){var e=n.key(b);0===e.indexOf(a)&&n.removeItem(e)}});return k(e,b),e},length:function(b){var c= this.keys().then(function(b){return b.length});return k(c,b),c},key:function(b,c){var e=this,a=e.ready().then(function(){var a,c=e.wa;try{a=n.key(b)}catch(f){a=null}return a&&(a=a.substring(c.Od.length)),a});return k(a,c),a},keys:function(b){var c=this,e=c.ready().then(function(){for(var a=c.wa,b=n.length,e=[],f=0;b>f;f++)0===n.key(f).indexOf(a.Od)&&e.push(n.key(f).substring(a.Od.length));return e});return k(e,b),e}}}("undefined"!=typeof window?window:self);g.Id=k["default"]},function(g,k){k.Ej=!0; k["default"]=function(c){function g(b){var c,e,a,h,l;c=.75*b.length;var f=b.length,k=0;"="===b[b.length-1]&&(c--,"="===b[b.length-2]&&c--);var p=new ArrayBuffer(c),q=new Uint8Array(p);for(c=0;f>c;c+=4)e=n.indexOf(b[c]),a=n.indexOf(b[c+1]),h=n.indexOf(b[c+2]),l=n.indexOf(b[c+3]),q[k++]=e<<2|a>>4,q[k++]=(15&a)<<4|h>>2,q[k++]=(3&h)<<6|63&l;return p}function k(b){var c=new Uint8Array(b),e="";for(b=0;b<c.length;b+=3)e+=n[c[b]>>2],e+=n[(3&c[b])<<4|c[b+1]>>4],e+=n[(15&c[b+1])<<2|c[b+2]>>6],e+=n[63&c[b+2]]; return 2===c.length%3?e=e.substring(0,e.length-1)+"=":1===c.length%3&&(e=e.substring(0,e.length-2)+"=="),e}var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=/^~~local_forage_type~([^~]+)~/;return{serialize:function(b,c){var e="";if(b&&(e=b.toString()),b&&("[object ArrayBuffer]"===b.toString()||b.buffer&&"[object ArrayBuffer]"===b.buffer.toString())){var a,h="__lfsc__:";b instanceof ArrayBuffer?(a=b,h+="arbf"):(a=b.buffer,"[object Int8Array]"===e?h+="si08":"[object Uint8Array]"=== e?h+="ui08":"[object Uint8ClampedArray]"===e?h+="uic8":"[object Int16Array]"===e?h+="si16":"[object Uint16Array]"===e?h+="ur16":"[object Int32Array]"===e?h+="si32":"[object Uint32Array]"===e?h+="ui32":"[object Float32Array]"===e?h+="fl32":"[object Float64Array]"===e?h+="fl64":c(Error("Failed to get type for BinaryArray")));c(h+k(a))}else if("[object Blob]"===e)e=new FileReader,e.onload=function(){var a="~~local_forage_type~"+b.type+"~"+k(this.result);c("__lfsc__:blob"+a)},e.readAsArrayBuffer(b);else try{c(JSON.stringify(b))}catch(g){console.error("Couldn't convert value into a JSON string: ", b),c(null,g)}},gk:function(b){if("__lfsc__:"!==b.substring(0,9))return JSON.parse(b);var d,e=b.substring(13);b=b.substring(9,13);if("blob"===b&&r.test(e)){var a=e.match(r);d=a[1];e=e.substring(a[0].length)}e=g(e);switch(b){case "arbf":return e;case "blob":var h;e=[e];d={type:d};e=e||[];d=d||{};try{h=new Blob(e,d)}catch(l){if("TypeError"!==l.name)throw l;h=new (c.BlobBuilder||c.Xe||c.um||c.WebKitBlobBuilder);for(b=0;b<e.length;b+=1)h.append(e[b]);h=h.getBlob(d.type)}return h;case "si08":return new Int8Array(e); case "ui08":return new Uint8Array(e);case "uic8":return new Uint8ClampedArray(e);case "si16":return new Int16Array(e);case "ur16":return new Uint16Array(e);case "si32":return new Int32Array(e);case "ui32":return new Uint32Array(e);case "fl32":return new Float32Array(e);case "fl64":return new Float64Array(e);default:throw Error("Unkown type: "+b);}},cB:g,HA:k}}("undefined"!=typeof window?window:self);g.Id=k["default"]},function(g,k,c){k.Ej=!0;k["default"]=function(g){function k(a){var b=this,f={db:null}; if(a)for(var d in a)f[d]="string"!=typeof a[d]?a[d].toString():a[d];var e=new Promise(function(a,c){try{f.db=t(f.name,String(f.version),f.description,f.size)}catch(d){return c(d)}f.db.transaction(function(d){d.executeSql("CREATE TABLE IF NOT EXISTS "+f.Aa+" (id INTEGER PRIMARY KEY, key unique, value)",[],function(){b.wa=f;a()},function(a,b){c(b)})})});return(new Promise(function(a){a(c(3))})).then(function(a){return f.lg=a,e})}function n(a,b){var c=this;"string"!=typeof a&&(g.console.warn(a+" used as a key, but it is not a string."), a=String(a));var d=new Promise(function(b,f){c.ready().then(function(){var d=c.wa;d.db.transaction(function(c){c.executeSql("SELECT * FROM "+d.Aa+" WHERE key = ? LIMIT 1",[a],function(a,c){var f=c.rows.length?c.rows.item(0).value:null;f&&(f=d.lg.gk(f));b(f)},function(a,b){f(b)})})})["catch"](f)});return f(d,b),d}function r(a,b){var c=this,d=new Promise(function(b,f){c.ready().then(function(){var d=c.wa;d.db.transaction(function(c){c.executeSql("SELECT * FROM "+d.Aa,[],function(c,f){for(var e=f.rows, h=e.length,g=0;h>g;g++){var m=e.item(g),l=m.value;if(l&&(l=d.lg.gk(l)),l=a(l,m.key,g+1),void 0!==l)return void b(l)}b()},function(a,b){f(b)})})})["catch"](f)});return f(d,b),d}function b(a,b,c){var d=this;"string"!=typeof a&&(g.console.warn(a+" used as a key, but it is not a string."),a=String(a));var e=new Promise(function(c,f){d.ready().then(function(){void 0===b&&(b=null);var e=b,h=d.wa;h.lg.serialize(b,function(b,d){d?f(d):h.db.transaction(function(d){d.executeSql("INSERT OR REPLACE INTO "+h.Aa+ " (key, value) VALUES (?, ?)",[a,b],function(){c(e)},function(a,b){f(b)})},function(a){a.code===a.QUOTA_ERR&&f(a)})})})["catch"](f)});return f(e,c),e}function d(a,b){var c=this;"string"!=typeof a&&(g.console.warn(a+" used as a key, but it is not a string."),a=String(a));var d=new Promise(function(b,f){c.ready().then(function(){var d=c.wa;d.db.transaction(function(c){c.executeSql("DELETE FROM "+d.Aa+" WHERE key = ?",[a],function(){b()},function(a,b){f(b)})})})["catch"](f)});return f(d,b),d}function e(a){var b= this,c=new Promise(function(a,c){b.ready().then(function(){var f=b.wa;f.db.transaction(function(b){b.executeSql("DELETE FROM "+f.Aa,[],function(){a()},function(a,b){c(b)})})})["catch"](c)});return f(c,a),c}function a(a){var b=this,c=new Promise(function(a,c){b.ready().then(function(){var f=b.wa;f.db.transaction(function(b){b.executeSql("SELECT COUNT(key) as c FROM "+f.Aa,[],function(b,c){var f=c.rows.item(0).Ph;a(f)},function(a,b){c(b)})})})["catch"](c)});return f(c,a),c}function h(a,b){var c=this, d=new Promise(function(b,f){c.ready().then(function(){var d=c.wa;d.db.transaction(function(c){c.executeSql("SELECT key FROM "+d.Aa+" WHERE id = ? LIMIT 1",[a+1],function(a,c){var f=c.rows.length?c.rows.item(0).key:null;b(f)},function(a,b){f(b)})})})["catch"](f)});return f(d,b),d}function l(a){var b=this,c=new Promise(function(a,c){b.ready().then(function(){var f=b.wa;f.db.transaction(function(b){b.executeSql("SELECT key FROM "+f.Aa,[],function(b,c){for(var f=[],d=0;d<c.rows.length;d++)f.push(c.rows.item(d).key); a(f)},function(a,b){c(b)})})})["catch"](c)});return f(c,a),c}function f(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}var t=g.openDatabase;if(t)return{Kh:"webSQLStorage",fm:k,Pq:r,getItem:n,setItem:b,removeItem:d,clear:e,length:a,key:h,keys:l}}("undefined"!=typeof window?window:self);g.Id=k["default"]}])};"object"==typeof exports&&"object"==typeof module?module.Id=zc():"function"==typeof define&&define.GA?define([],zc):"object"==typeof exports?exports.localforage=zc():this.localforage= zc()}catch(Ac){yc=!0}function Bc(g){this.b=g} (function(){function g(b){b.b.trigger(Bc.prototype.j.$d,b)}function k(){}function c(){}function p(){}var q="",n="",r="";"undefined"!==typeof window.is_scirra_arcade&&(r="sa"+window.scirra_arcade_id+"_");var b=Bc.prototype;b.ja=function(b){this.va=b;this.b=b.b};b.ja.prototype.J=function(){};b.Z=function(b){this.type=b;this.b=b.b};var d=b.Z.prototype;d.J=function(){this.Jn=this.Kn=0};d.kg=function(){};d.cb=function(){return{}};d.zb=function(){};k.prototype.du=function(b){return q===b};k.prototype.Ut= function(){return!0};k.prototype.Uo=function(b){return q===b};k.prototype.Tt=function(){return!0};k.prototype.$d=function(){return!0};k.prototype.To=function(b){return q===b};k.prototype.Vo=function(b){return q===b};k.prototype.Rt=function(){return!0};k.prototype.Qt=function(){return!0};b.j=new k;c.prototype.Ju=function(b,a){if(yc)g(this);else{var c=r+b;this.Kn++;var d=this;localforage.setItem(c,a,function(a,c){d.Kn--;a?d.b.trigger(Bc.prototype.j.$d,d):(q=b,n=c,d.b.trigger(Bc.prototype.j.Ut,d),d.b.trigger(Bc.prototype.j.du, d),n=q="");0===d.Kn&&d.b.trigger(Bc.prototype.j.Rt,d)})}};c.prototype.At=function(b){if(yc)g(this);else{var a=r+b;this.Jn++;var c=this;localforage.getItem(a,function(a,f){c.Jn--;if(a)c.b.trigger(Bc.prototype.j.$d,c);else{q=b;n=f;if("undefined"===typeof n||null===n)n="";c.b.trigger(Bc.prototype.j.Tt,c);c.b.trigger(Bc.prototype.j.Uo,c);n=q=""}0===c.Jn&&c.b.trigger(Bc.prototype.j.Qt,c)})}};c.prototype.ct=function(b){if(yc)g(this);else{var a=this;localforage.getItem(r+b,function(c,d){c?a.b.trigger(Bc.prototype.j.$d, a):(q=b,null===d?(n="",a.b.trigger(Bc.prototype.j.Vo,a)):(n=d,a.b.trigger(Bc.prototype.j.To,a)),n=q="")})}};b.u=new c;p.prototype.Kt=function(b){b.aj(n)};b.M=new p})();function S(g){this.b=g} (function(){function g(){if(0===this.vm.length){var a=document.createElement("canvas");a.width=this.width;a.height=this.height;var b=a.getContext("2d");this.wh?b.drawImage(this.H,this.hh,this.ih,this.width,this.height,0,0,this.width,this.height):b.drawImage(this.H,0,0,this.width,this.height);this.vm=a.toDataURL("image/png")}return this.vm}function k(){}function c(){}function p(){}var q=S.prototype;q.ja=function(a){this.va=a;this.b=a.b};var n=q.ja.prototype;n.J=function(){if(!this.I){var a,b,c,d,e, h,l,k,p;this.md=[];this.hi=!1;a=0;for(b=this.tc.length;a<b;a++){e=this.tc[a];l={};l.name=e[0];l.speed=e[1];l.loop=e[2];l.Wn=e[3];l.Xn=e[4];l.Be=e[5];l.ka=e[6];l.frames=[];c=0;for(d=e[7].length;c<d;c++)h=e[7][c],k={},k.Jl=h[0],k.so=h[1],k.hh=h[2],k.ih=h[3],k.width=h[4],k.height=h[5],k.duration=h[6],k.cc=h[7],k.ec=h[8],k.Xm=h[9],k.jl=h[10],k.Ur=h[11],k.wh=0!==k.width,k.vm="",k.LA=g,p={left:0,top:0,right:1,bottom:1},k.lo=p,k.W=null,(p=this.b.Rw(h[0]))?k.H=p:(k.H=new Image,k.H.Dv=h[0],k.H.Pp=h[1],k.H.xv= null,this.b.Us(k.H,h[0])),l.frames.push(k),this.md.push(k);this.tc[a]=l}}};n.Os=function(){var a,b,c;a=0;for(b=this.d.length;a<b;a++)c=this.d[a],c.ak=c.Qa.W};n.$k=function(){if(!this.I){var a,b,c;a=0;for(b=this.md.length;a<b;++a)c=this.md[a],c.H.xv=null,c.W=null;this.hi=!1;this.Os()}};n.bl=function(){if(!this.I&&this.d.length){var a,b,c;a=0;for(b=this.md.length;a<b;++a)c=this.md[a],c.W=this.b.B.ah(c.H,!1,this.b.Ga,c.Ur);this.Os()}};n.qn=function(){if(!this.I&&!this.hi&&this.b.B){var a,b,c;a=0;for(b= this.md.length;a<b;++a)c=this.md[a],c.W=this.b.B.ah(c.H,!1,this.b.Ga,c.Ur);this.hi=!0}};n.Ql=function(){if(!this.I&&!this.d.length&&this.hi){var a,b,c;a=0;for(b=this.md.length;a<b;++a)c=this.md[a],this.b.B.deleteTexture(c.W),c.W=null;this.hi=!1}};var r=[];n.nl=function(a){var b,c,d;y(r);b=0;for(c=this.md.length;b<c;++b)d=this.md[b].H,-1===r.indexOf(d)&&(a.drawImage(d,0,0),r.push(d))};q.Z=function(a){this.type=a;this.b=a.b;a=this.type.tc[0].frames[0].jl;this.Qc?this.xa.cj(a):this.xa=new eb(a)};var b= q.Z.prototype;b.J=function(){this.visible=0===this.q[0];this.Ak=this.Yf=!1;this.he=0!==this.q[3];this.Da=this.lq(this.q[1])||this.type.tc[0];this.G=this.q[2];0>this.G&&(this.G=0);this.G>=this.Da.frames.length&&(this.G=this.Da.frames.length-1);var a=this.Da.frames[this.G];this.xa.cj(a.jl);this.cc=a.cc;this.ec=a.ec;this.Gf=this.Da.speed;this.ff=this.Da.Xn;1===this.type.tc.length&&1===this.type.tc[0].frames.length||0===this.Gf||(this.b.oj(this),this.Yf=!0);this.Qc?this.Gd.reset():this.Gd=new cb;this.qe= this.Gd.R;this.Af=!0;this.ee=0;this.Ve=!0;this.Cg=this.Ap="";this.Kp=0;this.Sj=-1;this.type.qn();var b,c,d,e,h,g,l,a=0;for(b=this.type.tc.length;a<b;a++)for(e=this.type.tc[a],c=0,d=e.frames.length;c<d;c++)h=e.frames[c],0===h.width&&(h.width=h.H.width,h.height=h.H.height),h.wh&&(l=h.H,g=h.lo,g.left=h.hh/l.width,g.top=h.ih/l.height,g.right=(h.hh+h.width)/l.width,g.bottom=(h.ih+h.height)/l.height,0===h.hh&&0===h.ih&&h.width===l.width&&h.height===l.height&&(h.wh=!1));this.Qa=this.Da.frames[this.G];this.ak= this.Qa.W};b.cb=function(){var a={a:this.Da.ka,f:this.G,cas:this.Gf,fs:this.qe,ar:this.ee,at:this.Gd.R,rt:this.ff};this.Af||(a.ap=this.Af);this.Ve||(a.af=this.Ve);return a};b.zb=function(a){var b=this.Vw(a.a);b&&(this.Da=b);this.G=a.f;0>this.G&&(this.G=0);this.G>=this.Da.frames.length&&(this.G=this.Da.frames.length-1);this.Gf=a.cas;this.qe=a.fs;this.ee=a.ar;this.Gd.reset();this.Gd.R=a.at;this.Af=a.hasOwnProperty("ap")?a.ap:!0;this.Ve=a.hasOwnProperty("af")?a.af:!0;a.hasOwnProperty("rt")?this.ff=a.rt: this.ff=this.Da.Xn;this.Qa=this.Da.frames[this.G];this.ak=this.Qa.W;this.xa.cj(this.Qa.jl);this.cc=this.Qa.cc;this.ec=this.Qa.ec};b.hm=function(a){this.G=a?0:this.Da.frames.length-1;this.Af=!1;this.Ap=this.Da.name;this.Ak=!0;this.b.trigger(S.prototype.j.Qo,this);this.b.trigger(S.prototype.j.St,this);this.Ak=!1;this.ee=0};b.Xe=function(){return this.Gd.R};b.mb=function(){this.Gd.add(this.b.Rf(this));this.Cg.length&&this.Up();0<=this.Sj&&this.Vp();var a=this.Gd.R,b=this.Da,c=b.frames[this.G],d=c.duration/ this.Gf;this.Af&&a>=this.qe+d&&(this.Ve?this.G++:this.G--,this.qe+=d,this.G>=b.frames.length&&(b.Be?(this.Ve=!1,this.G=b.frames.length-2):b.loop?this.G=this.ff:(this.ee++,this.ee>=b.Wn?this.hm(!1):this.G=this.ff)),0>this.G&&(b.Be?(this.G=1,this.Ve=!0,b.loop||(this.ee++,this.ee>=b.Wn&&this.hm(!0))):b.loop?this.G=this.ff:(this.ee++,this.ee>=b.Wn?this.hm(!0):this.G=this.ff)),0>this.G?this.G=0:this.G>=b.frames.length&&(this.G=b.frames.length-1),a>this.qe+b.frames[this.G].duration/this.Gf&&(this.qe=a), a=b.frames[this.G],this.yg(c,a),this.b.na=!0)};b.lq=function(a){var b,c,d;b=0;for(c=this.type.tc.length;b<c;b++)if(d=this.type.tc[b],mb(d.name,a))return d;return null};b.Vw=function(a){var b,c,d;b=0;for(c=this.type.tc.length;b<c;b++)if(d=this.type.tc[b],d.ka===a)return d;return null};b.Up=function(){var a=this.Da.frames[this.G],b=this.lq(this.Cg);this.Cg="";!b||mb(b.name,this.Da.name)&&this.Af||(this.Da=b,this.Gf=b.speed,this.ff=b.Xn,0>this.G&&(this.G=0),this.G>=this.Da.frames.length&&(this.G=this.Da.frames.length- 1),1===this.Kp&&(this.G=0),this.Af=!0,this.qe=this.Gd.R,this.Ve=!0,this.yg(a,this.Da.frames[this.G]),this.b.na=!0)};b.Vp=function(){var a=this.Da.frames[this.G],b=this.G;this.G=sa(this.Sj);0>this.G&&(this.G=0);this.G>=this.Da.frames.length&&(this.G=this.Da.frames.length-1);b!==this.G&&(this.yg(a,this.Da.frames[this.G]),this.qe=this.Gd.R,this.b.na=!0);this.Sj=-1};b.yg=function(a,b){var c=a.width,d=a.height,e=b.width,h=b.height;c!=e&&(this.width*=e/c);d!=h&&(this.height*=h/d);this.cc=b.cc;this.ec=b.ec; this.xa.cj(b.jl);this.ca();this.Qa=b;this.ak=b.W;c=0;for(d=this.N.length;c<d;c++)e=this.N[c],e.Ir&&e.Ir(a,b);this.b.trigger(S.prototype.j.yg,this)};b.me=function(a){a.globalAlpha=this.opacity;var b=this.Qa,c=b.wh,d=b.H,e=this.x,h=this.y,g=this.width,l=this.height;if(0===this.k&&0<=g&&0<=l)e-=this.cc*g,h-=this.ec*l,this.b.ud&&(e=Math.round(e),h=Math.round(h)),c?a.drawImage(d,b.hh,b.ih,b.width,b.height,e,h,g,l):a.drawImage(d,e,h,g,l);else{this.b.ud&&(e=Math.round(e),h=Math.round(h));a.save();var k= 0<g?1:-1,p=0<l?1:-1;a.translate(e,h);1===k&&1===p||a.scale(k,p);a.rotate(this.k*k*p);e=0-this.cc*oa(g);h=0-this.ec*oa(l);c?a.drawImage(d,b.hh,b.ih,b.width,b.height,e,h,oa(g),oa(l)):a.drawImage(d,e,h,oa(g),oa(l));a.restore()}};b.If=function(a){this.wc(a)};b.wc=function(a){a.Cc(this.ak);a.mg(this.opacity);var b=this.Qa,c=this.uc;if(this.b.ud){var d=Math.round(this.x)-this.x,e=Math.round(this.y)-this.y;b.wh?a.Ud(c.Wa+d,c.Xa+e,c.Eb+d,c.Fb+e,c.pb+d,c.qb+e,c.nb+d,c.ob+e,b.lo):a.Vi(c.Wa+d,c.Xa+e,c.Eb+d, c.Fb+e,c.pb+d,c.qb+e,c.nb+d,c.ob+e)}else b.wh?a.Ud(c.Wa,c.Xa,c.Eb,c.Fb,c.pb,c.qb,c.nb,c.ob,b.lo):a.Vi(c.Wa,c.Xa,c.Eb,c.Fb,c.pb,c.qb,c.nb,c.ob)};b.ax=function(a){var b=this.Qa,c,d;c=0;for(d=b.Xm.length;c<d;c++)if(mb(a,b.Xm[c][0]))return c;return-1};b.bi=function(a,b){var c=this.Qa,d=c.Xm,e;ka(a)?e=this.ax(a):e=a-1;e=sa(e);if(0>e||e>=d.length)return b?this.x:this.y;var h=(d[e][1]-c.cc)*this.width,d=d[e][2],d=(d-c.ec)*this.height,c=Math.cos(this.k);e=Math.sin(this.k);var g=h*c-d*e,d=d*c+h*e,h=g+this.x, d=d+this.y;return b?h:d};var d=null,e=new da,a=!1,h=[],l=new wa(0,0,0,0);n.finish=function(b){if(a){if(b){var c=this.b.Sa().Za.Pc;b=d.V();var h=e.Le(),g,l;if(b.ba){b.ba=!1;y(b.d);g=0;for(l=h.length;g<l;++g)b.d[g]=h[g];if(c)for(y(b.ea),g=0,l=d.d.length;g<l;++g)h=d.d[g],e.contains(h)||b.ea.push(h)}else if(c)for(c=b.d.length,g=0,l=h.length;g<l;++g)b.d[c+g]=h[g],Ea(b.ea,h[g]);else Ba(b.d,h);d.We()}e.clear();a=!1}};k.prototype.It=function(b){if(b){var c=!1,g,k,m,p=this.b.vk(),q=p.type,p=p.Ck;g=b.V();k= this.b.Sa().Za.Pc;var n;g.ba?(this.Fa(),l.Eg(this.Ya),l.offset(0,0),this.b.nq(this.n,b,l,h),n=h):n=k?this.b.Nx()&&!g.ea.length&&g.d.length?g.d:g.ea:g.d;d=b;a=q!==b&&!p;g=0;for(k=n.length;g<k;g++)if(m=n[g],this.b.pg(this,m)){c=!0;if(p)break;q!==b&&e.add(m)}y(h);b=c}else b=!1;return b};k.prototype.Et=function(a){return this.Cg.length?mb(this.Cg,a):mb(this.Da.name,a)};k.prototype.it=function(a,b){return ic(this.G,a,b)};k.prototype.St=function(a){return mb(this.Ap,a)};k.prototype.Qo=function(){return!0}; k.prototype.yg=function(){return!0};q.j=new k;c.prototype.Vu=function(a,b,c){if(a&&b&&(b=this.b.Zj(a,b,this.bi(c,!0),this.bi(c,!1)))){"undefined"!==typeof b.k&&(b.k=this.k,b.ca());this.b.Mc++;var d,e,h;this.b.trigger(Object.getPrototypeOf(a.va).j.xg,b);if(b.Gb)for(d=0,e=b.siblings.length;d<e;d++)h=b.siblings[d],this.b.trigger(Object.getPrototypeOf(h.type.va).j.xg,h);this.b.Mc--;d=this.b.Yw();c=!1;if(ia(d.U.Spawn_LastExec)||d.U.Spawn_LastExec<this.b.Pf)c=!0,d.U.Spawn_LastExec=this.b.Pf;if(a!=this.type&& (a=a.V(),a.ba=!1,c?(y(a.d),a.d[0]=b):a.d.push(b),b.Gb))for(d=0,e=b.siblings.length;d<e;d++)h=b.siblings[d],a=h.type.V(),a.ba=!1,c?(y(a.d),a.d[0]=h):a.d.push(h)}};c.prototype.Du=function(a,b){this.Cg=a;this.Kp=b;this.Yf||(this.b.oj(this),this.Yf=!0);this.Ak||this.Up()};c.prototype.Eu=function(a){this.Sj=a;this.Yf||(this.b.oj(this),this.Yf=!0);this.Ak||this.Vp()};c.prototype.Fu=function(a){this.Gf=oa(a);this.Ve=0<=a;this.Yf||(this.b.oj(this),this.Yf=!0)};c.prototype.Lu=function(a){a=oa(this.width)* (0===a?-1:1);this.width!==a&&(this.width=a,this.ca())};c.prototype.Hu=function(a){a=oa(this.height)*(0===a?-1:1);this.height!==a&&(this.height=a,this.ca())};q.u=new c;p.prototype.$s=function(a){a.ga(this.G)};q.M=new p})();function Cc(g){this.b=g} (function(){function g(a,b){return a.length?a.pop():new b}function k(a,b,c){if(c){var d;c=0;for(d=b.length;c<d;c++)a.length<r&&a.push(b[c]);b.length=0}else for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(a.length<r&&a.push(b[d]),delete b[d])}function c(a,c,d){var e=a.dg;d=d.replace(/\s\s*$/,"");c>=e.length&&e.push(g(b,Object));c=e[c];c.text=d;c.width=a.xn(d);a.Ah=pa(a.Ah,c.width)}function p(){}var q=Cc.prototype;q.J=function(){};q.ja=function(a){this.va=a;this.b=a.b};var n=q.ja.prototype;n.J= function(){this.I||(this.H=new Image,this.H.idtkLoadDisposed=!0,this.H.src=this.Jl,this.b.tg.push(this.H),this.W=null)};n.$k=function(){this.I||(this.W=null)};n.bl=function(){if(!this.I&&this.d.length){this.W||(this.W=this.b.B.ah(this.H,!1,this.b.Ga,this.mj));var a,b;a=0;for(b=this.d.length;a<b;a++)this.d[a].W=this.W}};n.Ql=function(){this.I||this.d.length||!this.W||(this.b.B.deleteTexture(this.W),this.W=null)};n.nl=function(a){a.drawImage(this.H,0,0)};q.Z=function(a){this.type=a;this.b=a.b};n=q.Z.prototype; n.kg=function(){k(b,this.dg,!0);k(d,this.Uj,!1);k(e,this.Vj,!1);Xa(this.pd)};n.J=function(){this.H=this.type.H;this.Tj=this.q[0];this.$e=this.q[1];this.characterSet=this.q[2];this.text=this.q[3];this.bf=this.q[4];this.visible=0===this.q[5];this.wq=this.q[6]/2;this.Rs=this.q[7]/2;this.Bz=0===this.q[9];this.Dg=this.q[10];this.lineHeight=this.q[11];this.rg=this.Ah=0;this.Qh=this.q[12];this.ys=this.q[13];console.log(this.Qh);this.Qc?(this.dg.length=0,Xa(this.Uj),Xa(this.Vj),Xa(this.pd)):(this.dg=[],this.Uj= {},this.Vj={},this.pd={});try{if(this.Qh)if(-1!==this.Qh.indexOf('""c2array""'))for(var a=jQuery.parseJSON(this.Qh.replace(/""/g,'"')),b=a.size[1],c=0;c<b;c++)for(var d=a.data[1][c][0],e=a.data[0][c][0],h=0;h<d.length;h++)this.pd[d.charAt(h)]=e;else for(a=jQuery.parseJSON(this.Qh),b=a.length,c=0;c<b;c++)for(d=a[c][1],e=a[c][0],h=0;h<d.length;h++)this.pd[d.charAt(h)]=e;-1!==this.ys&&(this.pd[" "]=this.ys)}catch(g){window.console&&window.console.log&&window.console.log("SpriteFont+ Failure: "+g)}this.lj= !0;this.nn=this.width;this.b.B&&(this.type.W||(this.type.W=this.b.B.ah(this.type.H,!1,this.b.Ga,this.type.mj)),this.W=this.type.W);this.Wu()};n.cb=function(){var a={t:this.text,csc:this.bf,csp:this.Dg,lh:this.lineHeight,tw:this.Ah,th:this.rg,lrt:this.Xx,cw:{}},b;for(b in this.pd)a.cw[b]=this.pd[b];return a};n.zb=function(a){this.text=a.t;this.bf=a.csc;this.Dg=a.csp;this.lineHeight=a.lh;this.Ah=a.tw;this.rg=a.th;this.Xx=a.lrt;for(var b in a.cw)this.pd[b]=a.cw[b];this.lj=!0;this.nn=this.width};var r= 1E3,b=[],d=[],e=[];n.Wu=function(){for(var a=this.H,b=a.width,c=a.height,a=this.Tj,h=this.$e,k=a/b,m=h/c,p=this.characterSet,b=Math.floor(b/a),c=Math.floor(c/h),q=0;q<p.length&&!(q>=b*c);q++){var n=q%b,r=Math.floor(q/b),J=p.charAt(q);if(this.b.B){var w=this.Vj,A=n*k,I=r*m,n=(n+1)*k,r=(r+1)*m;void 0===w[J]&&(w[J]=g(e,wa));w[J].left=A;w[J].top=I;w[J].right=n;w[J].bottom=r}else w=this.Uj,n=n*a,r=r*h,A=a,I=h,void 0===w[J]&&(w[J]=g(d,Object)),w[J].x=n,w[J].y=r,w[J].Ts=A,w[J].uq=I}};var a=[];q.Zu=function(b){a.length= 0;for(var c="",d,e=0;e<b.length;)if(d=b.charAt(e),"\n"===d)c.length&&(a.push(c),c=""),a.push("\n"),++e;else if(" "===d||"\t"===d||"-"===d){do c+=b.charAt(e),e++;while(e<b.length&&(" "===b.charAt(e)||"\t"===b.charAt(e)));a.push(c);c=""}else e<b.length&&(c+=d,e++);c.length&&a.push(c)};q.cv=function(a){var c=a.text,d=a.dg;if(c&&c.length){var e=a.width;if(2>=e)k(b,d,!0);else{var h=a.bf,m=a.Dg;if(c.length*(a.Tj*h+m)-m<=e&&-1===c.indexOf("\n")&&(m=a.xn(c),m<=e)){k(b,d,!0);d.push(g(b,Object));d[0].text= c;d[0].width=m;a.Ah=m;a.rg=a.$e*h+a.lineHeight;return}this.dv(a);a.rg=d.length*(a.$e*h+a.lineHeight)}}else k(b,d,!0)};q.dv=function(d){var f=d.Bz,e=d.text,h=d.dg,g=d.width;f&&(this.Zu(e),e=a);var k="",p,q,n,G=0,J=!1;for(n=0;n<e.length;n++)"\n"===e[n]?(!0===J?J=!1:(c(d,G,k),G++),k=""):(J=!1,p=k,k+=e[n],q=d.xn(k.replace(/\s\s*$/,"")),q>g&&(""===p?(c(d,G,k),k="",J=!0):(c(d,G,p),k=e[n]),G++,f||" "!==k||(k="")));k.replace(/\s\s*$/,"").length&&(c(d,G,k),G++);for(n=G;n<h.length;n++)b.length<r&&b.push(h[n]); h.length=G};n.xn=function(a){for(var b=this.Dg,c=a.length,d=0,e=0;e<c;e++)d+=this.ai(a.charAt(e))*this.bf+b;return d-(0<d?b:0)};n.ai=function(a){var b=this.pd;return void 0!==b[a]?b[a]:this.Tj};n.$r=function(){if(this.lj||this.width!==this.nn)this.rg=this.Ah=0,this.type.va.cv(this),this.lj=!1,this.nn=this.width};n.me=function(a){var b=this.H;if(""!==this.text&&null!=b&&(this.$r(),!(this.height<this.$e*this.bf+this.lineHeight))){a.globalAlpha=this.opacity;var b=this.x,c=this.y;this.b.ud&&(b=b+.5|0, c=c+.5|0);a.save();a.translate(b,c);a.rotate(this.k);for(var b=this.wq,c=this.bf,d=this.$e*c,e=this.lineHeight,h=this.Dg,g=this.dg,k,p=-(this.cc*this.width),q=-(this.ec*this.height),q=q+this.Rs*pa(0,this.height-this.rg),n=0;n<g.length;n++){var r=g[n].text;k=b*pa(0,this.width-g[n].width);k=p+k;for(var q=q+e,A=0;A<r.length;A++){var I=r.charAt(A),M=this.Uj[I];if(k+this.ai(I)*c>this.width+1E-5)break;void 0!==M&&a.drawImage(this.H,M.x,M.y,M.Ts,M.uq,Math.round(k),Math.round(q),M.Ts*c,M.uq*c);k+=this.ai(I)* c+h}q+=d;if(q+d+e>this.height)break}a.restore()}};var h=new xa;n.wc=function(a){a.Cc(this.W);a.mg(this.opacity);if(""!==this.text&&(this.$r(),!(this.height<this.$e*this.bf+this.lineHeight))){this.Fa();var b=this.uc,c=0,d=0;this.b.ud&&(c=(this.x+.5|0)-this.x,d=(this.y+.5|0)-this.y);var e=this.k,g=this.wq,k=this.Rs,p=this.bf,q=this.$e*p,n=this.lineHeight,r=this.Dg,w=this.dg,A=this.rg,I,M;0!==e&&(I=Math.cos(e),M=Math.sin(e));for(var P,c=b.Wa+c,b=b.Xa+d,k=k*pa(0,this.height-A),A=0;A<w.length;A++){d=w[A].text; P=g*pa(0,this.width-w[A].width);for(var k=k+n,Y=0;Y<d.length;Y++){var F=d.charAt(Y),U=this.Vj[F];if(P+this.ai(F)*p>this.width+1E-5)break;if(void 0!==U){var E=this.Tj*p,K=this.$e*p;h.Wa=P;h.Xa=k;h.Eb=P+E;h.Fb=k;h.nb=P;h.ob=k+K;h.pb=P+E;h.qb=k+K;if(0!==e){var E=h,K=I,Z=M,z=void 0,z=E.Wa*K-E.Xa*Z;E.Xa=E.Xa*K+E.Wa*Z;E.Wa=z;z=E.Eb*K-E.Fb*Z;E.Fb=E.Fb*K+E.Eb*Z;E.Eb=z;z=E.nb*K-E.ob*Z;E.ob=E.ob*K+E.nb*Z;E.nb=z;z=E.pb*K-E.qb*Z;E.qb=E.qb*K+E.pb*Z;E.pb=z}h.offset(c,b);a.Ud(h.Wa,h.Xa,h.Eb,h.Fb,h.pb,h.qb,h.nb, h.ob,U)}P+=this.ai(F)*p+r}k+=q;if(k+q+n>this.height)break}}};q.j=new function(){};p.prototype.Ru=function(a){ja(a)&&1E9>a&&(a=Math.round(1E10*a)/1E10);a=a.toString();this.text!==a&&(this.text=a,this.lj=!0,this.b.na=!0)};n.Xe=function(a,b){var c=parseInt(b,10);this.pd[a]!==c&&(this.pd[a]=c,this.lj=!0,this.b.na=!0)};q.u=new p;q.M=new function(){}})();function Dc(g){this.b=g} (function(){var g=Dc.prototype;g.ja=function(c){this.va=c;this.b=c.b};var k=g.ja.prototype;k.J=function(){this.I||(this.H=new Image,this.H.Pp=this.so,this.b.Us(this.H,this.Jl),this.W=this.pattern=null)};k.$k=function(){this.I||(this.W=null)};k.bl=function(){if(!this.I&&this.d.length){this.W||(this.W=this.b.B.ah(this.H,!0,this.b.Ga,this.mj));var c,g;c=0;for(g=this.d.length;c<g;c++)this.d[c].W=this.W}};k.qn=function(){this.I||this.W||!this.b.B||(this.W=this.b.B.ah(this.H,!0,this.b.Ga,this.mj))};k.Ql= function(){this.I||this.d.length||!this.W||(this.b.B.deleteTexture(this.W),this.W=null)};k.nl=function(c){c.drawImage(this.H,0,0)};g.Z=function(c){this.type=c;this.b=c.b};k=g.Z.prototype;k.J=function(){this.visible=0===this.q[0];this.Xi=new wa(0,0,0,0);this.zq=!1;this.H=this.type.H;this.b.B?(this.type.qn(),this.W=this.type.W):(this.type.pattern||(this.type.pattern=this.b.Ka.createPattern(this.type.H,"repeat")),this.pattern=this.type.pattern)};k.de=function(){this.zq=!1;this.H=this.type.H};k.kg=function(){this.b.B&& this.zq&&this.W&&(this.b.B.deleteTexture(this.W),this.W=null)};k.me=function(c){c.globalAlpha=this.opacity;c.save();c.fillStyle=this.pattern;var g=this.x,k=this.y;this.b.ud&&(g=Math.round(g),k=Math.round(k));var n=-(this.cc*this.width),r=-(this.ec*this.height),b=n%this.H.width,d=r%this.H.height;0>b&&(b+=this.H.width);0>d&&(d+=this.H.height);c.translate(g,k);c.rotate(this.k);c.translate(b,d);c.fillRect(n-b,r-d,this.width,this.height);c.restore()};k.If=function(c){this.wc(c)};k.wc=function(c){c.Cc(this.W); c.mg(this.opacity);var g=this.Xi;g.right=this.width/this.H.width;g.bottom=this.height/this.H.height;var k=this.uc;if(this.b.ud){var n=Math.round(this.x)-this.x,r=Math.round(this.y)-this.y;c.Ud(k.Wa+n,k.Xa+r,k.Eb+n,k.Fb+r,k.pb+n,k.qb+r,k.nb+n,k.ob+r,g)}else c.Ud(k.Wa,k.Xa,k.Eb,k.Fb,k.pb,k.qb,k.nb,k.ob,g)};g.j=new function(){};g.u=new function(){};g.M=new function(){}})();function Ec(g){this.b=g} (function(){function g(b){e=b.x;a=b.y;h=b.z}function k(a,b,d,e){var f;f=l.length?l.pop():new c;f.init(a,b,d,e);return f}function c(){this.hj=this.id=this.xe=this.we=this.y=this.x=this.Fl=this.El=this.Lk=this.time=this.qo=0;this.qj=this.Ol=!1}function p(a){return a.sourceCapabilities&&a.sourceCapabilities.firesTouchEvents||a.originalEvent&&a.originalEvent.sourceCapabilities&&a.originalEvent.sourceCapabilities.firesTouchEvents}function q(){}function n(){}var r=Ec.prototype;r.ja=function(a){this.va= a;this.b=a.b};r.ja.prototype.J=function(){};r.Z=function(a){this.type=a;this.b=a.b;this.touches=[];this.yn=!1};var b=r.Z.prototype,d={left:0,top:0};b.Zh=function(a){var b,c;b=0;for(c=this.touches.length;b<c;b++)if(this.touches[b].id===a)return b;return-1};var e=0,a=0,h=0,l=[];c.prototype.init=function(a,b,c,d){var e=Ya();this.qo=this.Lk=this.time=e;this.El=a;this.Fl=b;this.x=a;this.y=b;this.we=a;this.xe=b;this.pressure=this.height=this.width=0;this.id=c;this.hj=d;this.qj=this.Ol=!1};c.prototype.update= function(a,b,c,d,e,f){this.Lk=this.time;this.time=a;this.we=this.x;this.xe=this.y;this.x=b;this.y=c;this.width=d;this.height=e;this.pressure=f;!this.qj&&15<=Ta(this.El,this.Fl,this.x,this.y)&&(this.qj=!0)};c.prototype.cy=function(a,b){!this.Ol&&500<=Ya()-this.qo&&!this.qj&&15>Ta(this.El,this.Fl,this.x,this.y)&&(this.Ol=!0,a.Yd=this.hj,a.Ch=this.id,a.Lg=b,a.b.trigger(Ec.prototype.j.bu,a),a.je=this.x,a.ke=this.y,a.b.trigger(Ec.prototype.j.cu,a),a.Lg=0)};var f=-1E3,t=-1E3,v=-1E4;c.prototype.qr=function(a, b){if(!this.Ol){var c=Ya();333>=c-this.qo&&!this.qj&&15>Ta(this.El,this.Fl,this.x,this.y)&&(a.Yd=this.hj,a.Ch=this.id,a.Lg=b,666>=c-v&&25>Ta(f,t,this.x,this.y)?(a.b.trigger(Ec.prototype.j.Yt,a),a.je=this.x,a.ke=this.y,a.b.trigger(Ec.prototype.j.Zt,a),t=f=-1E3,v=-1E4):(a.b.trigger(Ec.prototype.j.ru,a),a.je=this.x,a.ke=this.y,a.b.trigger(Ec.prototype.j.fp,a),f=this.x,t=this.y,v=c),a.Lg=0)}};b.J=function(){this.Tx=!("undefined"===typeof window.c2isWindows8||!window.c2isWindows8);this.Lg=this.Ch=this.Yd= this.ke=this.je=this.up=this.tp=this.sp=this.lv=this.kv=this.jv=this.gl=this.fl=this.el=0;this.yz=0!==this.q[0];var a=0<this.b.nc?document:this.b.canvas,b=document;this.b.Ob?b=a=window.Canvas:this.b.bd&&(b=a=window);var c=this;"undefined"!==typeof PointerEvent?(a.addEventListener("pointerdown",function(a){c.Hr(a)},!1),a.addEventListener("pointermove",function(a){c.Gr(a)},!1),b.addEventListener("pointerup",function(a){c.al(a,!1)},!1),b.addEventListener("pointercancel",function(a){c.al(a,!0)},!1),this.b.canvas&& (this.b.canvas.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),document.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),this.b.canvas.addEventListener("gesturehold",function(a){a.preventDefault()},!1),document.addEventListener("gesturehold",function(a){a.preventDefault()},!1))):window.navigator.msPointerEnabled?(a.addEventListener("MSPointerDown",function(a){c.Hr(a)},!1),a.addEventListener("MSPointerMove",function(a){c.Gr(a)},!1),b.addEventListener("MSPointerUp", function(a){c.al(a,!1)},!1),b.addEventListener("MSPointerCancel",function(a){c.al(a,!0)},!1),this.b.canvas&&(this.b.canvas.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),document.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1))):(a.addEventListener("touchstart",function(a){c.Kr(a)},!1),a.addEventListener("touchmove",function(a){c.Jr(a)},!1),b.addEventListener("touchend",function(a){c.Fn(a,!1)},!1),b.addEventListener("touchcancel",function(a){c.Fn(a,!0)}, !1));if(this.Tx){var d=function(a){a=a.reading;c.sp=a.accelerationX;c.tp=a.accelerationY;c.up=a.accelerationZ},e=function(a){a=a.reading;c.el=a.yawDegrees;c.fl=a.pitchDegrees;c.gl=a.rollDegrees},f=Windows.Devices.Sensors.Accelerometer.getDefault();f&&(f.reportInterval=Math.max(f.minimumReportInterval,16),f.addEventListener("readingchanged",d));var h=Windows.Devices.Sensors.Inclinometer.getDefault();h&&(h.reportInterval=Math.max(h.minimumReportInterval,16),h.addEventListener("readingchanged",e));document.addEventListener("visibilitychange", function(){document.hidden||document.msHidden?(f&&f.removeEventListener("readingchanged",d),h&&h.removeEventListener("readingchanged",e)):(f&&f.addEventListener("readingchanged",d),h&&h.addEventListener("readingchanged",e))},!1)}else window.addEventListener("deviceorientation",function(a){c.el=a.alpha||0;c.fl=a.beta||0;c.gl=a.gamma||0},!1),window.addEventListener("devicemotion",function(a){a.accelerationIncludingGravity&&(c.jv=a.accelerationIncludingGravity.x||0,c.kv=a.accelerationIncludingGravity.y|| 0,c.lv=a.accelerationIncludingGravity.z||0);a.acceleration&&(c.sp=a.acceleration.x||0,c.tp=a.acceleration.y||0,c.up=a.acceleration.z||0)},!1);this.yz&&!this.b.hb&&(jQuery(document).mousemove(function(a){c.oy(a)}),jQuery(document).mousedown(function(a){c.ny(a)}),jQuery(document).mouseup(function(a){c.qy(a)}));!this.b.Vg&&this.b.Lc&&navigator.accelerometer&&navigator.accelerometer.watchAcceleration&&navigator.accelerometer.watchAcceleration(g,null,{frequency:40});this.b.oz(this)};b.Gr=function(a){if(a.pointerType!== a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&a.preventDefault();var b=this.Zh(a.pointerId),c=Ya();if(0<=b){var f=this.b.hb?d:jQuery(this.b.canvas).offset(),b=this.touches[b];2>c-b.time||b.update(c,a.pageX-f.left,a.pageY-f.top,a.width||0,a.height||0,a.pressure||0)}}};b.Hr=function(a){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&nb(a)&&a.preventDefault();var b=this.b.hb?d:jQuery(this.b.canvas).offset(),c=a.pageX-b.left,b=a.pageY-b.top;Ya(); this.Yd=this.touches.length;this.Ch=a.pointerId;this.touches.push(k(c,b,a.pointerId,this.Yd));this.b.Nc=!0;this.b.trigger(Ec.prototype.j.cp,this);this.b.trigger(Ec.prototype.j.ip,this);this.je=c;this.ke=b;this.b.trigger(Ec.prototype.j.hp,this);this.b.Nc=!1}};b.al=function(a,b){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&nb(a)&&a.preventDefault();var c=this.Zh(a.pointerId);this.Yd=0<=c?this.touches[c].hj:-1;this.Ch=0<=c?this.touches[c].id:-1;this.b.Nc=!0;this.b.trigger(Ec.prototype.j.bp, this);this.b.trigger(Ec.prototype.j.gp,this);0<=c&&(b||this.touches[c].qr(this,c),100>l.length&&l.push(this.touches[c]),this.touches.splice(c,1));this.b.Nc=!1}};b.Jr=function(a){a.preventDefault&&a.preventDefault();var b=Ya(),c,f,e,h;c=0;for(f=a.changedTouches.length;c<f;c++)if(e=a.changedTouches[c],h=this.Zh(e.identifier),0<=h){var g=this.b.hb?d:jQuery(this.b.canvas).offset();h=this.touches[h];2>b-h.time||h.update(b,e.pageX-g.left,e.pageY-g.top,2*(e.ZA||e.hB||e.RA||e.UA||0),2*(e.$A||e.iB||e.SA|| e.VA||0),e.JA||e.gB||e.QA||e.TA||0)}};b.Kr=function(a){a.preventDefault&&nb(a)&&a.preventDefault();var b=this.b.hb?d:jQuery(this.b.canvas).offset();Ya();this.b.Nc=!0;var c,e,f,h;c=0;for(e=a.changedTouches.length;c<e;c++)if(f=a.changedTouches[c],h=this.Zh(f.identifier),-1===h){h=f.pageX-b.left;var g=f.pageY-b.top;this.Yd=this.touches.length;this.Ch=f.identifier;this.touches.push(k(h,g,f.identifier,this.Yd));this.b.trigger(Ec.prototype.j.cp,this);this.b.trigger(Ec.prototype.j.ip,this);this.je=h;this.ke= g;this.b.trigger(Ec.prototype.j.hp,this)}this.b.Nc=!1};b.Fn=function(a,b){a.preventDefault&&nb(a)&&a.preventDefault();this.b.Nc=!0;var c,d,e;c=0;for(d=a.changedTouches.length;c<d;c++)e=a.changedTouches[c],e=this.Zh(e.identifier),0<=e&&(this.Yd=this.touches[e].hj,this.Ch=this.touches[e].id,this.b.trigger(Ec.prototype.j.bp,this),this.b.trigger(Ec.prototype.j.gp,this),b||this.touches[e].qr(this,e),100>l.length&&l.push(this.touches[e]),this.touches.splice(e,1));this.b.Nc=!1};b.Xe=function(){return this.b.Lc&& 0===this.el&&0!==h?90*h:this.el};b.um=function(){return this.b.Lc&&0===this.fl&&0!==a?90*a:this.fl};b.kn=function(){return this.b.Lc&&0===this.gl&&0!==e?90*e:this.gl};b.ny=function(a){p(a)||(this.Kr({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]}),this.yn=!0)};b.oy=function(a){this.yn&&!p(a)&&this.Jr({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]})};b.qy=function(a){a.preventDefault&&this.b.vq&&!this.b.Og&&a.preventDefault();this.b.vq=!0;p(a)||(this.Fn({changedTouches:[{pageX:a.pageX, pageY:a.pageY,identifier:0}]}),this.yn=!1)};b.Ll=function(){var a,b,c,d=Ya();a=0;for(b=this.touches.length;a<b;++a)c=this.touches[a],c.time<=d-50&&(c.Lk=d),c.cy(this,a)};q.prototype.ip=function(){return!0};q.prototype.gp=function(){return!0};q.prototype.hp=function(a){return a?this.b.Hl(a,this.je,this.ke):!1};q.prototype.kt=function(a,b,c){a=Math.floor(a);if(0>a||a>=this.touches.length)return!1;var d=this.touches[a];a=Ta(d.x,d.y,d.we,d.xe);var d=(d.time-d.Lk)/1E3,e=0;0<d&&(e=a/d);return ic(e,b,c)}; q.prototype.cp=function(a){a=Math.floor(a);return a===this.Yd};q.prototype.bp=function(a){a=Math.floor(a);return a===this.Yd};q.prototype.bu=function(){return!0};q.prototype.ru=function(){return!0};q.prototype.Yt=function(){return!0};q.prototype.cu=function(a){return a?this.b.Hl(a,this.je,this.ke):!1};q.prototype.fp=function(a){return a?this.b.Hl(a,this.je,this.ke):!1};q.prototype.Zt=function(a){return a?this.b.Hl(a,this.je,this.ke):!1};r.j=new q;n.prototype.op=function(a,b){var c=this.Lg;if(0>c|| c>=this.touches.length)a.D(0);else{var d,e,f,h,g;ia(b)?(d=this.b.ci(0),e=d.scale,f=d.Ed,h=d.ed,g=d.k,d.scale=1,d.Ed=1,d.ed=1,d.k=0,a.D(d.$b(this.touches[c].x,this.touches[c].y,!0)),d.scale=e,d.Ed=f,d.ed=h,d.k=g):(d=ja(b)?this.b.ci(b):this.b.Om(b))?a.D(d.$b(this.touches[c].x,this.touches[c].y,!0)):a.D(0)}};n.prototype.cm=function(a,b){var c=this.Lg;if(0>c||c>=this.touches.length)a.D(0);else{var d,e,f,h,g;ia(b)?(d=this.b.ci(0),e=d.scale,f=d.Ed,h=d.fd,g=d.k,d.scale=1,d.Ed=1,d.fd=1,d.k=0,a.D(d.$b(this.touches[c].x, this.touches[c].y,!1)),d.scale=e,d.Ed=f,d.fd=h,d.k=g):(d=ja(b)?this.b.ci(b):this.b.Om(b))?a.D(d.$b(this.touches[c].x,this.touches[c].y,!1)):a.D(0)}};n.prototype.Ys=function(a,b){b=Math.floor(b);if(0>b||b>=this.touches.length)a.D(0);else{var c=this.touches[b];a.D(Ia(Oa(c.we,c.xe,c.x,c.y)))}};r.M=new n})();function Fc(g){this.b=g} (function(){function g(){}var k=Fc.prototype;k.ja=function(c){this.behavior=c;this.b=c.b};k.ja.prototype.J=function(){};k.Z=function(c,g){this.type=c;this.behavior=c.behavior;this.c=g;this.b=c.b};var c=k.Z.prototype;c.J=function(){var c=this.q[0];this.be=this.q[1];this.sk=this.q[2];this.vv=0!==this.q[3];this.fo=0!==this.q[4];this.Lb=Math.cos(this.c.k)*c;this.sb=Math.sin(this.c.k)*c;this.we=this.c.x;this.xe=this.c.y;this.Xg=this.c.k;this.Nl=0;this.enabled=0!==this.q[5]};c.cb=function(){return{acc:this.be, g:this.sk,dx:this.Lb,dy:this.sb,lx:this.we,ly:this.xe,lka:this.Xg,t:this.Nl,e:this.enabled}};c.zb=function(c){this.be=c.acc;this.sk=c.g;this.Lb=c.dx;this.sb=c.dy;this.we=c.lx;this.xe=c.ly;this.Xg=c.lka;this.Nl=c.t;this.enabled=c.e};c.mb=function(){if(this.enabled){var c=this.b.Rf(this.c),g,k;this.c.k!==this.Xg&&(this.fo&&(g=Ta(0,0,this.Lb,this.sb),this.Lb=Math.cos(this.c.k)*g,this.sb=Math.sin(this.c.k)*g),this.Xg=this.c.k);0!==this.be&&(g=Ta(0,0,this.Lb,this.sb),k=0===this.Lb&&0===this.sb?this.c.k: Oa(0,0,this.Lb,this.sb),g+=this.be*c,0>g&&(g=0),this.Lb=Math.cos(k)*g,this.sb=Math.sin(k)*g);0!==this.sk&&(this.sb+=this.sk*c);this.we=this.c.x;this.xe=this.c.y;if(0!==this.Lb||0!==this.sb)if(this.c.x+=this.Lb*c,this.c.y+=this.sb*c,this.Nl+=Ta(0,0,this.Lb*c,this.sb*c),this.fo&&(this.c.k=Oa(0,0,this.Lb,this.sb),this.c.ca(),this.Xg=this.c.k),this.c.ca(),this.vv&&(g=this.b.qg(this.c)))this.b.Ny(this.c,g),g=Ta(0,0,this.Lb,this.sb),k=this.b.yv(this.c,this.we,this.xe),this.Lb=Math.cos(k)*g,this.sb=Math.sin(k)* g,this.c.x+=this.Lb*c,this.c.y+=this.sb*c,this.c.ca(),this.fo&&(this.Xg=this.c.k=k,this.c.ca()),this.b.Jy(this.c,this.Lb/g,this.sb/g,Math.max(2.5*g*c,30))||this.b.Ky(this.c)}};k.j=new function(){};g.prototype.Cu=function(c){c=C(c);var g=Ta(0,0,this.Lb,this.sb);this.Lb=Math.cos(c)*g;this.sb=Math.sin(c)*g};k.u=new g;k.M=new function(){}})();function Gc(g){this.b=g} (function(){function g(){}var k=Gc.prototype;k.ja=function(c){this.behavior=c;this.b=c.b};k.ja.prototype.J=function(){};k.Z=function(c,g){this.type=c;this.behavior=c.behavior;this.c=g;this.b=c.b};var c=k.Z.prototype;c.J=function(){this.vp=1===this.q[0];this.Xh=this.q[1];this.wj=this.q[2];this.jk=this.q[3];this.Iv=this.q[4];this.Sc=this.vp?0:3;this.Qc?this.hd.reset():this.hd=new cb;this.hg=this.c.opacity?this.c.opacity:1;this.vp&&(0===this.Xh?(this.Sc=1,0===this.wj&&(this.Sc=2)):(this.c.opacity=0, this.b.na=!0))};c.cb=function(){return{fit:this.Xh,wt:this.wj,fot:this.jk,s:this.Sc,st:this.hd.R,mo:this.hg}};c.zb=function(c){this.Xh=c.fit;this.wj=c.wt;this.jk=c.fot;this.Sc=c.s;this.hd.reset();this.hd.R=c.st;this.hg=c.mo};c.mb=function(){this.hd.add(this.b.Rf(this.c));0===this.Sc&&(this.c.opacity=this.hd.R/this.Xh*this.hg,this.b.na=!0,this.c.opacity>=this.hg&&(this.c.opacity=this.hg,this.Sc=1,this.hd.reset(),this.b.trigger(Gc.prototype.j.$t,this.c)));1===this.Sc&&this.hd.R>=this.wj&&(this.Sc=2, this.hd.reset(),this.b.trigger(Gc.prototype.j.tu,this.c));2===this.Sc&&0!==this.jk&&(this.c.opacity=this.hg-this.hd.R/this.jk*this.hg,this.b.na=!0,0>this.c.opacity&&(this.c.opacity=0,this.Sc=3,this.hd.reset(),this.b.trigger(Gc.prototype.j.au,this.c),1===this.Iv&&this.b.Pe(this.c)))};c.Xe=function(){this.Sc=0;this.hd.reset();0===this.Xh?(this.Sc=1,0===this.wj&&(this.Sc=2)):(this.c.opacity=0,this.b.na=!0)};g.prototype.au=function(){return!0};g.prototype.$t=function(){return!0};g.prototype.tu=function(){return!0}; k.j=new g;k.u=new function(){};k.M=new function(){}})();function Hc(g){this.b=g} (function(){var g=Hc.prototype;g.ja=function(c){this.behavior=c;this.b=c.b};g.ja.prototype.J=function(){};g.Z=function(c,g){this.type=c;this.behavior=c.behavior;this.c=g;this.b=c.b};var k=g.Z.prototype;k.J=function(){this.speed=C(this.q[0]);this.be=C(this.q[1])};k.cb=function(){return{speed:this.speed,acc:this.be}};k.zb=function(c){this.speed=c.speed;this.be=c.acc};k.mb=function(){var c=this.b.Rf(this.c);0!==c&&(0!==this.be&&(this.speed+=this.be*c),0!==this.speed&&(this.c.k=Ka(this.c.k+this.speed* c),this.c.ca()))};g.j=new function(){};g.u=new function(){};g.M=new function(){}})();function Ic(g){this.b=g} (function(){function g(){}function k(){}function c(){}var p=Ic.prototype;p.ja=function(b){this.behavior=b;this.b=b.b};p.ja.prototype.J=function(){};p.Z=function(b,c){this.type=b;this.behavior=b.behavior;this.c=c;this.b=b.b;this.$a=0};var q=p.Z.prototype,n=2*Math.PI,r=Math.PI/2,b=3*Math.PI/2;q.J=function(){this.Oa=1===this.q[0];this.ig=this.q[1];this.Go=this.q[2];this.Ae=this.q[3];this.Ae+=Math.random()*this.q[4];0===this.Ae?this.$a=0:(this.$a=this.q[5]/this.Ae*n,this.$a+=Math.random()*this.q[6]/this.Ae* n);this.gc=this.q[7];this.gc+=Math.random()*this.q[8];this.Wi=this.Wf=this.la=0;5===this.ig&&(this.gc=C(this.gc));this.init()};q.cb=function(){return{i:this.$a,a:this.Oa,mv:this.ig,w:this.Go,p:this.Ae,mag:this.gc,iv:this.la,iv2:this.Wf,r:this.Wi,lkv:this.X,lkv2:this.Ma}};q.zb=function(b){this.$a=b.i;this.Oa=b.a;this.ig=b.mv;this.Go=b.w;this.Ae=b.p;this.gc=b.mag;this.la=b.iv;this.Wf=b.iv2||0;this.Wi=b.r;this.X=b.lkv;this.Ma=b.lkv2||0};q.init=function(){switch(this.ig){case 0:this.la=this.c.x;break; case 1:this.la=this.c.y;break;case 2:this.la=this.c.width;this.Wi=this.c.height/this.c.width;break;case 3:this.la=this.c.width;break;case 4:this.la=this.c.height;break;case 5:this.la=this.c.k;break;case 6:this.la=this.c.opacity;break;case 7:this.la=0;break;case 8:this.la=this.c.x,this.Wf=this.c.y}this.X=this.la;this.Ma=this.Wf};q.Zd=function(c){c=c%n;switch(this.Go){case 0:return Math.sin(c);case 1:return c<=r?c/r:c<=b?1-2*(c-r)/Math.PI:(c-b)/r-1;case 2:return 2*c/n-1;case 3:return-2*c/n+1;case 4:return c< Math.PI?-1:1}return 0};q.mb=function(){var b=this.b.Rf(this.c);this.Oa&&0!==b&&(0===this.Ae?this.$a=0:(this.$a+=b/this.Ae*n,this.$a=this.$a%n),this.sz())};q.sz=function(){switch(this.ig){case 0:this.c.x!==this.X&&(this.la+=this.c.x-this.X);this.c.x=this.la+this.Zd(this.$a)*this.gc;this.X=this.c.x;break;case 1:this.c.y!==this.X&&(this.la+=this.c.y-this.X);this.c.y=this.la+this.Zd(this.$a)*this.gc;this.X=this.c.y;break;case 2:this.c.width=this.la+this.Zd(this.$a)*this.gc;this.c.height=this.c.width* this.Wi;break;case 3:this.c.width=this.la+this.Zd(this.$a)*this.gc;break;case 4:this.c.height=this.la+this.Zd(this.$a)*this.gc;break;case 5:this.c.k!==this.X&&(this.la=Ka(this.la+(this.c.k-this.X)));this.c.k=Ka(this.la+this.Zd(this.$a)*this.gc);this.X=this.c.k;break;case 6:this.c.opacity=this.la+this.Zd(this.$a)*this.gc/100;0>this.c.opacity?this.c.opacity=0:1<this.c.opacity&&(this.c.opacity=1);break;case 8:this.c.x!==this.X&&(this.la+=this.c.x-this.X),this.c.y!==this.Ma&&(this.Wf+=this.c.y-this.Ma), this.c.x=this.la+Math.cos(this.c.k)*this.Zd(this.$a)*this.gc,this.c.y=this.Wf+Math.sin(this.c.k)*this.Zd(this.$a)*this.gc,this.X=this.c.x,this.Ma=this.c.y}this.c.ca()};q.Ir=function(b,c){switch(this.ig){case 2:this.la*=c.width/b.width;this.Wi=c.height/c.width;break;case 3:this.la*=c.width/b.width;break;case 4:this.la*=c.height/b.height}};g.prototype.Oo=function(){return this.Oa};p.j=new g;k.prototype.Au=function(b){this.Oa=1===b};p.u=new k;c.prototype.av=function(b){b.D(this.Zd(this.$a)*this.gc)}; p.M=new c})();var Jc=[],Kc=[],Lc=[],Mc=[],Nc=[],Oc=[],Pc=[],Qc=[],Rc=[],Xc=[];function Yc(g){return result=(g/=1)<1/2.75?7.5625*g*g+0:g<2/2.75?1*(7.5625*(g-=1.5/2.75)*g+.75)+0:g<2.5/2.75?1*(7.5625*(g-=2.25/2.75)*g+.9375)+0:1*(7.5625*(g-=2.625/2.75)*g+.984375)+0}function Zc(g,k){return Math.round(g/k*1E4)} function $c(g,k,c,p,q){var n=0;switch(g){case 0:n=1*k/c+0;break;case 1:n=1*(k/=c)*k+0;break;case 2:n=-1*(k/=c)*(k-2)+0;break;case 3:n=1>(k/=c/2)?.5*k*k+0:-.5*(--k*(k-2)-1)+0;break;case 4:n=1*(k/=c)*k*k+0;break;case 5:n=1*((k=k/c-1)*k*k+1)+0;break;case 6:n=1>(k/=c/2)?.5*k*k*k+0:.5*((k-=2)*k*k+2)+0;break;case 7:n=1*(k/=c)*k*k*k+0;break;case 8:n=-1*((k=k/c-1)*k*k*k-1)+0;break;case 9:n=1>(k/=c/2)?.5*k*k*k*k+0:-.5*((k-=2)*k*k*k-2)+0;break;case 10:n=1*(k/=c)*k*k*k*k+0;break;case 11:n=1*((k=k/c-1)*k*k*k* k+1)+0;break;case 12:n=1>(k/=c/2)?.5*k*k*k*k*k+0:.5*((k-=2)*k*k*k*k+2)+0;break;case 13:q.zc?n=Nc[Zc(k,c)]:n=-(Math.sqrt(1-k*k)-1);break;case 14:q.zc?n=Oc[Zc(k,c)]:n=Math.sqrt(1-(k-1)*(k-1));break;case 15:n=q.zc?Pc[Zc(k,c)]:1>(k/=c/2)?-.5*(Math.sqrt(1-k*k)-1)+0:.5*(Math.sqrt(1-(k-=2)*k)+1)+0;break;case 16:q.zc?n=Qc[Zc(k,c)]:(q=q.qc,n=1*(k/=c)*k*((q+1)*k-q)+0);break;case 17:q.zc?n=Rc[Zc(k,c)]:(q=q.qc,n=1*((k=k/c-1)*k*((q+1)*k+q)+1)+0);break;case 18:q.zc?n=Xc[Zc(k,c)]:(q=q.qc,n=1>(k/=c/2)?.5*k*k*(((q*= 1.525)+1)*k-q)+0:.5*((k-=2)*k*(((q*=1.525)+1)*k+q)+2)+0);break;case 19:q.zc?n=Kc[Zc(k,c)]:(n=q.zg,g=q.Qi,k/=c,0==g&&(g=.3*c),0==n||n<Math.abs(1)?(n=1,q=g/4):q=g/(2*Math.PI)*Math.asin(1/n),n=-(n*Math.pow(2,10*--k)*Math.sin(2*(k*c-q)*Math.PI/g))+0);break;case 20:q.zc?n=Lc[Zc(k,c)]:(n=q.zg,g=q.Qi,k/=c,0==g&&(g=.3*c),0==n||n<Math.abs(1)?(n=1,q=g/4):q=g/(2*Math.PI)*Math.asin(1/n),n=n*Math.pow(2,-10*k)*Math.sin(2*(k*c-q)*Math.PI/g)+1);break;case 21:q.zc?n=Mc[Zc(k,c)]:(n=q.zg,g=q.Qi,k/=c/2,0==g&&(g=.3*c* 1.5),0==n||n<Math.abs(1)?(n=1,q=g/4):q=g/(2*Math.PI)*Math.asin(1/n),n=1>k?-.5*n*Math.pow(2,10*--k)*Math.sin(2*(k*c-q)*Math.PI/g)+0:n*Math.pow(2,-10*--k)*Math.sin(2*(k*c-q)*Math.PI/g)*.5+1);break;case 22:n=q.zc?1-Jc[Zc(c-k,c)]+0:1-Yc(c-k/c)+0;break;case 23:n=q.zc?Jc[Zc(k,c)]:Yc(k/c);break;case 24:n=q.zc?k<c/2?.5*(1-Jc[Zc(c-2*k,c)]+0)+0:.5*Jc[Zc(2*k-c,c)]+.5:k<c/2?.5*(1-Yc(c-2*k)+0)+0:.5*Yc((2*k-c)/c)+.5;break;case 25:k=k/c/2;n=2*k*k*(3-2*k);break;case 26:k=(k/c+1)/2;n=2*k*k*(3-2*k)-1;break;case 27:k= k/c,n=k*k*(3-2*k)}return p?1-n:n} for(var ad=0,bd=0,cd=0,T=0,X=0,dd=0;1E4>=dd;dd++)T=dd/1E4,ad=(T/=1)<1/2.75?7.5625*T*T+0:T<2/2.75?1*(7.5625*(T-=1.5/2.75)*T+.75)+0:T<2.5/2.75?1*(7.5625*(T-=2.25/2.75)*T+.9375)+0:1*(7.5625*(T-=2.625/2.75)*T+.984375)+0,Jc[dd]=ad,T=dd/1E4,cd=bd=0,T/=1,0==cd&&(cd=.3),0==bd||bd<Math.abs(1)?(bd=1,X=cd/4):X=cd/(2*Math.PI)*Math.asin(1/bd),ad=-(bd*Math.pow(2,10*--T)*Math.sin(2*(1*T-X)*Math.PI/cd))+0,Kc[dd]=ad,T=dd/1E4,cd=bd=0,T/=1,0==cd&&(cd=.3),0==bd||bd<Math.abs(1)?(bd=1,X=cd/4):X=cd/(2*Math.PI)*Math.asin(1/ bd),ad=bd*Math.pow(2,-10*T)*Math.sin(2*(1*T-X)*Math.PI/cd)+1,Lc[dd]=ad,T=dd/1E4,cd=bd=0,T/=.5,0==cd&&(cd=.3*1.5),0==bd||bd<Math.abs(1)?(bd=1,X=cd/4):X=cd/(2*Math.PI)*Math.asin(1/bd),ad=1>T?-.5*bd*Math.pow(2,10*--T)*Math.sin(2*(1*T-X)*Math.PI/cd)+0:bd*Math.pow(2,-10*--T)*Math.sin(2*(1*T-X)*Math.PI/cd)*.5+1,Mc[dd]=ad,T=dd/1E4,Nc[dd]=-(Math.sqrt(1-T*T)-1),T=dd/1E4,Oc[dd]=Math.sqrt(1-(T-1)*(T-1)),T=dd/1E4,ad=1>(T/=.5)?-.5*(Math.sqrt(1-T*T)-1)+0:.5*(Math.sqrt(1-(T-=2)*T)+1)+0,Pc[dd]=ad,T=dd/1E4,X=0,0== X&&(X=1.70158),ad=1*(T/=1)*T*((X+1)*T-X)+0,Qc[dd]=ad,T=dd/1E4,X=0,0==X&&(X=1.70158),ad=1*((T=T/1-1)*T*((X+1)*T+X)+1)+0,Rc[dd]=ad,T=dd/1E4,X=0,0==X&&(X=1.70158),ad=1>(T/=.5)?.5*T*T*(((X*=1.525)+1)*T-X)+0:.5*((T-=2)*T*(((X*=1.525)+1)*T+X)+2)+0,Xc[dd]=ad; function ed(g,k,c,p,q,n,r){this.name=g;this.value=0;this.sh(p);this.Al(q);this.Lf=c;this.Na=k;this.duration=n;this.state=this.O=0;this.cl=this.dl=this.Zk=this.jh=!1;this.Ma=this.X=0;this.Wb=r;this.Be=1;this.$h=!1;this.Gc=[];this.Tq=1;for(g=0;28>g;g++)this.Gc[g]={},this.Gc[g].zg=0,this.Gc[g].Qi=0,this.Gc[g].yh=0,this.Gc[g].qc=0,this.Gc[g].zc=!0}ed.prototype={};ed.prototype.sh=function(g){this.ra=parseFloat(g.split(",")[0]);this.gb=parseFloat(g.split(",")[1]);this.Ma=this.X=0}; ed.prototype.Al=function(g){this.pa=parseFloat(g.split(",")[0]);this.Va=parseFloat(g.split(",")[1]);isNaN(this.Va)&&(this.Va=this.pa)}; ed.prototype.$l=function(g){if(0===this.state)return-1;1===this.state&&(this.O+=g);2===this.state&&(this.O-=g);3===this.state&&(this.state=0);if(4===this.state||6===this.state)this.O+=g*this.Be;5===this.state&&(this.O+=g*this.Be);return 0>this.O?(this.O=0,4===this.state?this.Be=1:6===this.state?(this.Be=1,this.$h=!1):this.state=0,this.cl=!0,0):this.O>this.duration?(this.O=this.duration,4===this.state?this.Be=-1:6===this.state?(this.Be=-1,this.$h=!0):5===this.state?this.O=0:this.state=0,this.Zk=!0, 1):this.$h?$c(this.Lf,this.duration-this.O,this.duration,this.$h,this.Gc[this.Lf]):$c(this.Lf,this.O,this.duration,this.$h,this.Gc[this.Lf])};function fd(g){this.b=g} (function(){var g=fd.prototype;g.ja=function(c){this.behavior=c;this.b=c.b};g.ja.prototype.J=function(){};g.Z=function(c,g){this.type=c;this.behavior=c.behavior;this.c=g;this.b=c.b;this.$a=0};var k=g.Z.prototype;k.J=function(){this.oh=this.q[0];this.Oa=1==this.oh||2==this.oh||3==this.oh||4==this.oh;this.Na=this.q[1];this.zm=this.q[2];this.target=this.q[3];this.Gl=this.q[4];this.Ul=!1;1===this.Gl&&(this.target="relative("+this.target+")");this.duration=this.q[5];this.Wb=1===this.q[6];this.value=0; this.C={};this.zp(this.Na,this.zm,"current",this.target,this.duration,this.Wb);1===this.q[0]&&this.gj(0);2===this.q[0]&&this.gj(2);3===this.q[0]&&this.gj(3);4===this.q[0]&&this.gj(4)};k.Sd=function(c,g){void 0===g&&(g="current");var k=g.replace(/^\s\s*/,"").replace(/\s\s*$/,"");g=g.replace(/^\s\s*/,"").replace(/\s\s*$/,"");var n=this.value;if("current"===g)switch(c){case 0:k=this.c.x+","+this.c.y;break;case 1:k=this.c.width+","+this.c.height;break;case 2:k=this.c.width+","+this.c.height;break;case 3:k= this.c.width+","+this.c.height;break;case 4:k=Ia(this.c.k)+","+Ia(this.c.k);break;case 5:k=100*this.c.opacity+","+100*this.c.opacity;break;case 6:k=n+","+n;break;case 7:k=this.c.x+","+this.c.y;break;case 8:k=this.c.x+","+this.c.y;break;case 9:k=void 0!==this.c.Qa?this.c.width/this.c.Qa.width+","+this.c.height/this.c.Qa.height:"1,1"}if("relative"===g.substring(0,8)){var r=g.match(/\((.*?)\)/);if(r)var b=parseFloat(r[1].split(",")[0]),d=parseFloat(r[1].split(",")[1]);isNaN(b)&&(b=0);isNaN(d)&&(d=0); switch(c){case 0:k=this.c.x+b+","+(this.c.y+d);break;case 1:k=this.c.width+b+","+(this.c.height+d);break;case 2:k=this.c.width+b+","+(this.c.height+d);break;case 3:k=this.c.width+b+","+(this.c.height+d);break;case 4:k=Ia(this.c.k)+b+","+(Ia(this.c.k)+d);break;case 5:k=100*this.c.opacity+b+","+(100*this.c.opacity+d);break;case 6:k=n+b+","+n+b;break;case 7:k=this.c.x+b+","+this.c.y;break;case 8:k=this.c.x+","+(this.c.y+b);break;case 9:k=b+","+d}}return k};k.zp=function(c,g,k,n,r,b){k=this.Sd(c,k);n= this.Sd(c,n);void 0!==this.C["default"]&&delete this.C["default"];this.C["default"]=new ed("default",c,g,k,n,r,b);this.C["default"].gf=0};k.cb=function(){JSON.stringify(this.C["default"]);return{playmode:this.oh,active:this.Oa,tweened:this.Na,easing:this.zm,target:this.target,targetmode:this.Gl,useCurrent:this.Ul,duration:this.duration,enforce:this.Wb,value:this.value,tweenlist:JSON.stringify(this.C["default"])}};ed.Ot=function(c,g,k,n,r,b,d,e){g=new ed(g,k,n,r,b,d,e);for(var a in c)g[a]=c[a];return g}; k.zb=function(c){var g=JSON.parse(c.tweenlist),g=ed.Ot(g,g.name,g.Na,g.Lf,g.ra+","+g.gb,g.pa+","+g.Va,g.duration,g.Wb);this.C["default"]=g;this.oh=c.playmode;this.Oa=c.active;this.ig=c.tweened;this.zm=c.easing;this.target=c.target;this.Gl=c.targetmode;this.Ul=c.useCurrent;this.duration=c.duration;this.Wb=c.enforce;this.value=c.value};k.ez=function(c){1<c&&(c=1);0>c&&(c=0);for(var g in this.C){var k=this.C[g];k.X=0;k.Ma=0;k.state=3;k.O=c*k.duration;var n=k.$l(0);this.Bo(k,n)}};k.gj=function(c){for(var g in this.C){var k= this.C[g];if(this.Ul){var n=this.Sd(k.Na,"current"),r=this.Sd(k.Na,this.target);k.sh(n);k.Al(r)}0===c&&(k.O=1E-6,k.X=0,k.Ma=0,k.jh=!0,k.state=1);1===c&&(k.state=k.Tq);if(2===c||4===c)k.O=1E-6,k.X=0,k.Ma=0,k.jh=!0,2==c&&(k.state=4),4==c&&(k.state=6);3===c&&(k.O=1E-6,k.X=0,k.Ma=0,k.jh=!0,k.state=5)}};k.mz=function(c){for(var g in this.C){var k=this.C[g];3!=k.state&&0!=k.state&&(k.Tq=k.state);1===c&&(k.O=0);2===c&&(k.O=k.duration);k.state=3;var n=k.$l(0);this.Bo(k,n)}};k.Uy=function(c){for(var g in this.C){var k= this.C[g];1===c&&(k.O=k.duration,k.X=0,k.Ma=0,k.dl=!0);k.state=2}};k.Bo=function(c,g){if(0===c.Na)c.Wb?(this.c.x=c.ra+(c.pa-c.ra)*g,this.c.y=c.gb+(c.Va-c.gb)*g):(this.c.x+=(c.pa-c.ra)*g-c.X,this.c.y+=(c.Va-c.gb)*g-c.Ma,c.X=(c.pa-c.ra)*g,c.Ma=(c.Va-c.gb)*g);else if(1===c.Na)c.Wb?(this.c.width=c.ra+(c.pa-c.ra)*g,this.c.height=c.gb+(c.Va-c.gb)*g):(this.c.width+=(c.pa-c.ra)*g-c.X,this.c.height+=(c.Va-c.gb)*g-c.Ma,c.X=(c.pa-c.ra)*g,c.Ma=(c.Va-c.gb)*g);else if(2===c.Na)c.Wb?this.c.width=c.ra+(c.pa-c.ra)* g:(this.c.width+=(c.pa-c.ra)*g-c.X,c.X=(c.pa-c.ra)*g);else if(3===c.Na)c.Wb?this.c.height=c.gb+(c.Va-c.gb)*g:(this.c.height+=(c.Va-c.gb)*g-c.Ma,c.Ma=(c.Va-c.gb)*g);else if(4===c.Na)if(c.Wb){var k=c.ra+(c.pa-c.ra)*g;this.c.k=Ka(C(k))}else k=(c.pa-c.ra)*g-c.X,this.c.k=Ka(this.c.k+C(k)),c.X=(c.pa-c.ra)*g;else if(5===c.Na)c.Wb?this.c.opacity=(c.ra+(c.pa-c.ra)*g)/100:(this.c.opacity+=((c.pa-c.ra)*g-c.X)/100,c.X=(c.pa-c.ra)*g);else if(6===c.Na)c.Wb?this.value=c.ra+(c.pa-c.ra)*g:(this.value+=(c.pa-c.ra)* g-c.X,c.X=(c.pa-c.ra)*g);else if(7===c.Na)c.Wb?this.c.x=c.ra+(c.pa-c.ra)*g:(this.c.x+=(c.pa-c.ra)*g-c.X,c.X=(c.pa-c.ra)*g);else if(8===c.Na)c.Wb?this.c.y=c.gb+(c.Va-c.gb)*g:(this.c.y+=(c.Va-c.gb)*g-c.Ma,c.Ma=(c.Va-c.gb)*g);else if(9===c.Na){var k=c.ra+(c.pa-c.ra)*g,n=c.gb+(c.Va-c.gb)*g;0>this.c.width&&(k=c.ra+(c.pa+c.ra)*-g);0>this.c.height&&(n=c.gb+(c.Va+c.gb)*-g);c.Wb?(this.c.width=this.c.Qa.width*k,this.c.height=this.c.Qa.height*n):(0>this.c.width?(this.c.width=this.c.width/(-1+c.X)*k,c.X=k+1): (this.c.width=this.c.width/(1+c.X)*k,c.X=k-1),0>this.c.height?(this.c.height=this.c.height/(-1+c.Ma)*n,c.Ma=n+1):(this.c.height=this.c.height/(1+c.Ma)*n,c.Ma=n-1))}this.c.ca()};k.mb=function(){var c=this.b.Rf(this.c),g=this.C["default"];0!==g.state&&(g.jh&&(this.b.trigger(fd.prototype.j.qu,this.c),g.jh=!1),g.dl&&(this.b.trigger(fd.prototype.j.ou,this.c),g.dl=!1),this.Oa=1==g.state||2==g.state||4==g.state||5==g.state||6==g.state,c=g.$l(c),this.Bo(g,c),g.Zk&&(this.b.trigger(fd.prototype.j.So,this.c), g.Zk=!1),g.cl&&(this.b.trigger(fd.prototype.j.nu,this.c),g.cl=!1))};g.j={};k=g.j;k.Oo=function(){return 0!==this.C["default"].state};k.Pz=function(){return 2==this.C["default"].state};k.Kz=function(c,g){var k=this.C["default"];return ic(k.O/k.duration,c,g)};k.Zz=function(c,g){var k=this.C["default"];this.nj=ic(k.O/k.duration,c,g);if(k=this.En!=this.nj&&this.nj)this.En=this.nj;return k};k.qu=function(){return void 0===this.C["default"]?!1:this.C["default"].jh};k.ou=function(){return void 0===this.C["default"]? !1:this.C["default"].dl};k.So=function(){return void 0===this.C["default"]?!1:this.C["default"].Zk};k.nu=function(){return void 0===this.C["default"]?!1:this.C["default"].cl};g.u={};k=g.u;k.Xu=function(c,g){this.En=this.nj=!1;this.Ul=1==g;this.gj(c)};k.mp=function(c){this.mz(c)};k.zu=function(c){this.En=this.nj=!1;this.Uy(c)};k.eA=function(c){this.ez(c)};k.kA=function(c){isNaN(c)||0>c||void 0===this.C["default"]||(this.C["default"].duration=c)};k.pA=function(c){void 0!==this.C["default"]&&(this.C["default"].Wb= 1===c)};k.rA=function(c){void 0!==this.C["default"]&&(c=this.Sd(this.C["default"].Na,c),this.C["default"].sh(c))};k.Qu=function(c,g,k){if(void 0!==this.C["default"]&&!isNaN(k)){var n=this.C["default"],r=k+"";this.Gl=g;var b="",d="";if(1===g){this.target="relative("+r+")";switch(c){case 0:b=this.c.x+k;d=n.Va;break;case 1:b=n.pa;d=this.c.y+k;break;case 2:d=b=""+Ia(this.c.k+C(k));break;case 3:d=b=""+100*this.c.opacity+k;break;case 4:b=this.c.width+k;d=n.Va;break;case 5:b=n.pa;d=this.c.height+k;break; case 6:d=b=k}r=b+","+d}else{switch(c){case 0:b=k;d=n.Va;break;case 1:b=n.pa;d=k;break;case 2:d=b=k;break;case 3:d=b=k;break;case 4:b=k;d=n.Va;break;case 5:b=n.pa;d=k;break;case 6:d=b=k}this.target=r=b+","+d}c=this.Sd(this.C["default"].Na,"current");r=this.Sd(this.C["default"].Na,r);n.sh(c);n.Al(r)}};k.uA=function(c){void 0!==this.C["default"]&&(this.C["default"].Na=c)};k.lA=function(c){void 0!==this.C["default"]&&(this.C["default"].Lf=c)};k.mA=function(c,g,k,n,r){void 0!==this.C["default"]&&(this.C["default"].Gc[c].zc= !1,this.C["default"].Gc[c].zg=g,this.C["default"].Gc[c].Qi=k,this.C["default"].Gc[c].yh=n,this.C["default"].Gc[c].qc=r)};k.fA=function(){void 0!==this.C["default"]&&(this.C["default"].zc=!0)};k.vA=function(c){var g=this.C["default"];this.value=c;6===g.Na&&g.sh(this.Sd(g.Na,"current"))};k.sA=function(c,g,k,n,r){if(void 0===this.C["default"])this.zp(c,g,initial,k,n,r);else{var b=this.C["default"];b.Na=c;b.Lf=g;b.sh(this.Sd(c,"current"));b.Al(this.Sd(c,k));b.duration=n;b.Wb=1===r}};g.M={};g=g.M;g.xA= function(c){var g="N/A";switch(this.C["default"].state){case 0:g="paused";break;case 1:g="playing";break;case 2:g="reversing";break;case 3:g="seeking"}c.Yb(g)};g.wu=function(c){c.D(this.C["default"].O/this.C["default"].duration)};g.qt=function(c){c.D(this.C["default"].duration)};g.zA=function(c){var g=this.C["default"],k="N/A";switch(g.Na){case 0:k=g.pa;break;case 1:k=g.Va;break;case 2:k=g.pa;break;case 3:k=g.pa;break;case 4:k=g.pa;break;case 5:k=g.Va;break;case 6:k=g.pa}c.D(k)};g.av=function(c){c.D(this.value)}; g.BA=function(c,g,k,n,r){n=1<n?1:n;r=$c(r,0>n?0:n,1,!1,!1);c.D(g+r*(k-g))}})();function hd(g){this.b=g;this.ko=this.Bl=this.ej=this.jo=0} (function(){var g=hd.prototype;g.ja=function(c){this.behavior=c;this.b=c.b};g.ja.prototype.J=function(){};g.Z=function(c,g){this.type=c;this.behavior=c.behavior;this.c=g;this.b=c.b};var k=g.Z.prototype;k.J=function(){this.enabled=0!==this.q[0]};k.cb=function(){return{smg:this.behavior.jo,ss:this.behavior.ej,se:this.behavior.Bl,smd:this.behavior.ko}};k.zb=function(c){this.behavior.jo=c.smg;this.behavior.ej=c.ss;this.behavior.Bl=c.se;this.behavior.ko=c.smd};k.mb=function(){};k.Ll=function(){if(this.enabled){var c= this.behavior.Wk.Le(),g=0,k=0,n,r,b,d=0;n=0;for(r=c.length;n<r;n++){a:{b=c[n];for(var e=void 0,a=void 0,h=void 0,e=0,a=b.N.length;e<a;++e)if(h=b.N[e],h.behavior instanceof hd){b=h;break a}b=null}b&&b.enabled&&(g+=c[n].x,k+=c[n].y,++d)}c=this.c.n.yb;r=this.b.wb.R;b=n=0;r>=this.behavior.ej&&r<this.behavior.Bl&&(n=this.behavior.jo*Math.min(this.b.sg,1),0===this.behavior.ko&&(n*=1-(r-this.behavior.ej)/(this.behavior.Bl-this.behavior.ej)),r=Math.random()*Math.PI*2,b=Math.random()*n,n=Math.cos(r)*b,b*= Math.sin(r));c.co(g/d+n);c.eo(k/d+b)}};g.u=new function(){}})(); function rc(){return[tc,vc,uc,wc,sc,xc,Bc,S,Cc,Dc,Ec,Ic,fd,hd,Gc,Fc,Hc,L.prototype.j.Zo,uc.prototype.u.dt,S.prototype.u.Mo,S.prototype.u.Nu,L.prototype.u.Su,sc.prototype.M.Jo,L.prototype.u.Ku,tc.prototype.u.xu,Cc.prototype.j.Ko,Cc.prototype.u.Ru,tc.prototype.j.Ih,uc.prototype.u.Mt,tc.prototype.M.Nt,uc.prototype.M.bt,L.prototype.j.zt,S.prototype.M.Dt,uc.prototype.j.nt,L.prototype.M.ay,L.prototype.u.Ws,S.prototype.u.Vu,S.prototype.u.Gu,S.prototype.u.Iu,L.prototype.M.round,S.prototype.u.Eu,S.prototype.u.jp, S.prototype.u.Bu,L.prototype.M.Lp,L.prototype.u.bv,sc.prototype.u.CallFunction,S.prototype.j.Qo,S.prototype.j.Et,S.prototype.M.$u,L.prototype.j.No,sc.prototype.j.Cj,S.prototype.j.vu,sc.prototype.M.uu,sc.prototype.j.jt,S.prototype.j.Ft,S.prototype.j.it,S.prototype.j.Lo,S.prototype.M.op,S.prototype.j.ot,S.prototype.M.cm,S.prototype.M.Xs,S.prototype.M.$s,S.prototype.u.Lu,S.prototype.u.Du,S.prototype.j.Po,S.prototype.u.Hu,L.prototype.j.lt,S.prototype.u.Fu,S.prototype.j.Ko,Ec.prototype.j.fp,fd.prototype.j.Oo, fd.prototype.u.Qu,fd.prototype.u.Xu,fd.prototype.j.So,L.prototype.j.gt,L.prototype.j.tt,L.prototype.u.Yu,L.prototype.j.yt,S.prototype.j.It,Ic.prototype.u.Au,S.prototype.u.kp,S.prototype.u.lp,Fc.prototype.u.Cu,Bc.prototype.u.Ju,Cc.prototype.u.Mo,S.prototype.u.Ou,Dc.prototype.u.Tu,Dc.prototype.M.np,Dc.prototype.j.mt,sc.prototype.u.Pu,L.prototype.u.yu,L.prototype.u.Bt,L.prototype.j.xt,uc.prototype.u.Uu,vc.prototype.j.Jt,S.prototype.u.Mu,vc.prototype.u.mp,L.prototype.u.pt,Cc.prototype.u.lp,Cc.prototype.M.cm, L.prototype.M.Yx,L.prototype.j.Ht,Ec.prototype.j.kt,L.prototype.j.ht,Ec.prototype.M.Ys,xc.prototype.j.Wo,L.prototype.M["int"],vc.prototype.u.Play,L.prototype.j.ut,L.prototype.M.Bi,L.prototype.j.Yl,Bc.prototype.u.ct,Bc.prototype.j.To,Bc.prototype.u.At,Bc.prototype.j.Uo,Bc.prototype.M.Kt,Bc.prototype.j.Vo]}; home/jogoso94/public_html/jogos/woblox/c2runtime.js 0000644 00000526737 15043461424 0016403 0 ustar 00 // Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com 'use strict';var ba,ca,fa,ga,B,ia,ja,M,O,ka,la,ma,oa,ta,ua,P,va,wa,Q,za,Aa,Ba,R,Ca,Da,Ea,S,Fa,Ga,Ha,Ia,Ja,Ka,La,Ma,Na,Oa,Pa,Qa,Ra,Sa,T,Ta,Ua,Va,Wa,Xa,Ya,Za,$a,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb,Ib,Jb,Kb,Lb,Mb,Nb,Ob,Pb,U,Qb,Rb,V,Sb,Tb={},Ub={};"function"!==typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===typeof"test".__proto__?function(g){return g.__proto__}:function(g){return g.constructor.prototype}); (function(){function g(d,l,a,f){this.set(d,l,a,f)}function q(){this.Ca=this.Ba=this.Ea=this.Da=this.Qa=this.Pa=this.fa=this.ea=0}function p(d,l,a,f){d<l?a<f?(s=d<a?d:a,x=l>f?l:f):(s=d<f?d:f,x=l>a?l:a):a<f?(s=l<a?l:a,x=d>f?d:f):(s=l<f?l:f,x=d>a?d:a)}function r(){this.items=this.sc=null;this.Ye=0;v&&(this.sc=new Set);this.yf=[];this.wd=!0}function u(d){w[aa++]=d}function c(){this.la=this.wi=this.y=this.Ui=0}function b(d){this.Na=[];this.Zg=this.ah=this.bh=this.$g=0;this.Fg(d)}function h(d,l){this.Xi= d;this.Wi=l;this.cells={}}function e(d,l){this.Xi=d;this.Wi=l;this.cells={}}function m(d,l,a){var f;return pa.length?(f=pa.pop(),f.wj=d,f.x=l,f.y=a,f):new ca(d,l,a)}function a(d,l,a){this.wj=d;this.x=l;this.y=a;this.Ta=new fa}function k(d,l,a){var f;return qa.length?(f=qa.pop(),f.wj=d,f.x=l,f.y=a,f):new ga(d,l,a)}function n(d,l,a){this.wj=d;this.x=l;this.y=a;this.Ta=[];this.Xe=!0;this.Ec=new fa;this.Cf=!1}function f(d,l){return d.xc-l.xc}B=function(d){window.console&&window.console.log&&window.console.log(d)}; ia=function(d){window.console&&window.console.error&&window.console.error(d)};ba=function(d){return d};ja=function(d){return"undefined"===typeof d};M=function(d){return"number"===typeof d};O=function(d){return"string"===typeof d};ka=function(d){return 0<d&&0===(d-1&d)};la=function(d){--d;for(var l=1;32>l;l<<=1)d|=d>>l;return d+1};ma=function(d){return 0>d?-d:d};oa=function(d,l){return d>l?d:l};ta=function(d,l){return d<l?d:l};ua=Math.PI;P=function(d){return 0<=d?d|0:(d|0)-1};va=function(d){var l= d|0;return l===d?l:l+1};wa=function(d,l,a,f,b,v,w,k){var e,n,s,t;d<a?(n=d,e=a):(n=a,e=d);b<w?(t=b,s=w):(t=w,s=b);if(e<t||n>s)return!1;l<f?(n=l,e=f):(n=f,e=l);v<k?(t=v,s=k):(t=k,s=v);if(e<t||n>s)return!1;e=b-d+w-a;n=v-l+k-f;d=a-d;l=f-l;b=w-b;v=k-v;k=ma(l*b-v*d);return ma(b*n-v*e)>k?!1:ma(d*n-l*e)<=k};g.prototype.set=function(d,l,a,f){this.left=d;this.top=l;this.right=a;this.bottom=f};g.prototype.Jf=function(d){this.left=d.left;this.top=d.top;this.right=d.right;this.bottom=d.bottom};g.prototype.width= function(){return this.right-this.left};g.prototype.height=function(){return this.bottom-this.top};g.prototype.offset=function(d,l){this.left+=d;this.top+=l;this.right+=d;this.bottom+=l;return this};g.prototype.normalize=function(){var d=0;this.left>this.right&&(d=this.left,this.left=this.right,this.right=d);this.top>this.bottom&&(d=this.top,this.top=this.bottom,this.bottom=d)};g.prototype.Er=function(d){return!(d.right<this.left||d.bottom<this.top||d.left>this.right||d.top>this.bottom)};g.prototype.Fr= function(d,l,a){return!(d.right+l<this.left||d.bottom+a<this.top||d.left+l>this.right||d.top+a>this.bottom)};g.prototype.ab=function(d,l){return d>=this.left&&d<=this.right&&l>=this.top&&l<=this.bottom};g.prototype.uh=function(d){return this.left===d.left&&this.top===d.top&&this.right===d.right&&this.bottom===d.bottom};Q=g;q.prototype.Eg=function(d){this.ea=d.left;this.fa=d.top;this.Pa=d.right;this.Qa=d.top;this.Da=d.right;this.Ea=d.bottom;this.Ba=d.left;this.Ca=d.bottom};q.prototype.En=function(d, l){if(0===l)this.Eg(d);else{var a=Math.sin(l),f=Math.cos(l),b=d.left*a,v=d.top*a,k=d.right*a,a=d.bottom*a,w=d.left*f,e=d.top*f,n=d.right*f,f=d.bottom*f;this.ea=w-v;this.fa=e+b;this.Pa=n-v;this.Qa=e+k;this.Da=n-a;this.Ea=f+k;this.Ba=w-a;this.Ca=f+b}};q.prototype.offset=function(d,l){this.ea+=d;this.fa+=l;this.Pa+=d;this.Qa+=l;this.Da+=d;this.Ea+=l;this.Ba+=d;this.Ca+=l;return this};var s=0,x=0;q.prototype.ol=function(d){p(this.ea,this.Pa,this.Da,this.Ba);d.left=s;d.right=x;p(this.fa,this.Qa,this.Ea, this.Ca);d.top=s;d.bottom=x};q.prototype.ab=function(d,l){var a=this.Pa-this.ea,f=this.Qa-this.fa,b=this.Da-this.ea,v=this.Ea-this.fa,k=d-this.ea,w=l-this.fa,e=a*a+f*f,n=a*b+f*v,f=a*k+f*w,s=b*b+v*v,t=b*k+v*w,c=1/(e*s-n*n),a=(s*f-n*t)*c,e=(e*t-n*f)*c;if(0<=a&&0<e&&1>a+e)return!0;a=this.Ba-this.ea;f=this.Ca-this.fa;e=a*a+f*f;n=a*b+f*v;f=a*k+f*w;c=1/(e*s-n*n);a=(s*f-n*t)*c;e=(e*t-n*f)*c;return 0<=a&&0<e&&1>a+e};q.prototype.hc=function(d,l){if(l)switch(d){case 0:return this.ea;case 1:return this.Pa;case 2:return this.Da; case 3:return this.Ba;case 4:return this.ea;default:return this.ea}else switch(d){case 0:return this.fa;case 1:return this.Qa;case 2:return this.Ea;case 3:return this.Ca;case 4:return this.fa;default:return this.fa}};q.prototype.Um=function(){return(this.ea+this.Pa+this.Da+this.Ba)/4};q.prototype.Vm=function(){return(this.fa+this.Qa+this.Ea+this.Ca)/4};q.prototype.km=function(d){var l=d.Um(),a=d.Vm();if(this.ab(l,a))return!0;l=this.Um();a=this.Vm();if(d.ab(l,a))return!0;var f,b,v,k,w,e,n,s;for(n= 0;4>n;n++)for(s=0;4>s;s++)if(l=this.hc(n,!0),a=this.hc(n,!1),f=this.hc(n+1,!0),b=this.hc(n+1,!1),v=d.hc(s,!0),k=d.hc(s,!1),w=d.hc(s+1,!0),e=d.hc(s+1,!1),wa(l,a,f,b,v,k,w,e))return!0;return!1};za=q;Aa=function(d,l){for(var a in l)l.hasOwnProperty(a)&&(d[a]=l[a]);return d};Ba=function(d,l){var a,f;l=P(l);if(!(0>l||l>=d.length)){a=l;for(f=d.length-1;a<f;a++)d[a]=d[a+1];d.length=f}};R=function(d,l){d.length=l.length;var a,f;a=0;for(f=l.length;a<f;a++)d[a]=l[a]};Ca=function(d,l){d.push.apply(d,l)};Da= function(d,l){var a,f;a=0;for(f=d.length;a<f;++a)if(d[a]===l)return a;return-1};Ea=function(d,l){var a=Da(d,l);-1!==a&&Ba(d,a)};S=function(d){return d/(180/ua)};Fa=function(d){return 180/ua*d};Ga=function(d){d%=360;0>d&&(d+=360);return d};Ha=function(d){d%=2*ua;0>d&&(d+=2*ua);return d};Ia=function(d){return Ga(Fa(d))};Ja=function(d){return Ha(S(d))};Ka=function(d,l,a,f){return Math.atan2(f-l,a-d)};La=function(d,l){if(d===l)return 0;var a=Math.sin(d),f=Math.cos(d),b=Math.sin(l),v=Math.cos(l),a=a*b+ f*v;return 1<=a?0:-1>=a?ua:Math.acos(a)};Ma=function(d,l,a){var f=Math.sin(d),b=Math.cos(d),v=Math.sin(l),k=Math.cos(l);return Math.acos(f*v+b*k)>a?0<b*v-f*k?Ha(d+a):Ha(d-a):Ha(l)};Na=function(d,l){var a=Math.sin(d),f=Math.cos(d),b=Math.sin(l),v=Math.cos(l);return 0>=f*b-a*v};Oa=function(d,l,a,f){d=a-d;l=f-l;return Math.sqrt(d*d+l*l)};Pa=function(d,l){return!d!==!l};Qa=function(d,l,a){return d+(l-d)*a};Ra=function(d){for(var l in d)if(d.hasOwnProperty(l))return!0;return!1};Sa=function(d){for(var l in d)d.hasOwnProperty(l)&& delete d[l]};var F=+new Date;T=function(){if("undefined"!==typeof window.performance){var d=window.performance;if("undefined"!==typeof d.now)return d.now();if("undefined"!==typeof d.webkitNow)return d.webkitNow();if("undefined"!==typeof d.mozNow)return d.mozNow();if("undefined"!==typeof d.msNow)return d.msNow()}return Date.now()-F};var t=!1,d=t=!1,l=!1;"undefined"!==typeof window&&(t=/chrome/i.test(navigator.userAgent)||/chromium/i.test(navigator.userAgent),t=!t&&/safari/i.test(navigator.userAgent), d=/(iphone|ipod|ipad)/i.test(navigator.userAgent),l=window.c2ejecta);var v=!t&&!l&&!d&&"undefined"!==typeof Set&&"undefined"!==typeof Set.prototype.forEach;r.prototype.contains=function(d){return this.bd()?!1:v?this.sc.has(d):this.items&&this.items.hasOwnProperty(d)};r.prototype.add=function(d){if(v)this.sc.has(d)||(this.sc.add(d),this.wd=!1);else{var l=d.toString(),a=this.items;a?a.hasOwnProperty(l)||(a[l]=d,this.Ye++,this.wd=!1):(this.items={},this.items[l]=d,this.Ye=1,this.wd=!1)}};r.prototype.remove= function(d){if(!this.bd())if(v)this.sc.has(d)&&(this.sc["delete"](d),this.wd=!1);else if(this.items){d=d.toString();var l=this.items;l.hasOwnProperty(d)&&(delete l[d],this.Ye--,this.wd=!1)}};r.prototype.clear=function(){this.bd()||(v?this.sc.clear():(this.items=null,this.Ye=0),this.yf.length=0,this.wd=!0)};r.prototype.bd=function(){return 0===this.count()};r.prototype.count=function(){return v?this.sc.size:this.Ye};var w=null,aa=0;r.prototype.Fs=function(){if(!this.wd){if(v)this.yf.length=this.sc.size, w=this.yf,aa=0,this.sc.forEach(u),w=null,aa=0;else{var d=this.yf;d.length=this.Ye;var l,a=0,f=this.items;if(f)for(l in f)f.hasOwnProperty(l)&&(d[a++]=f[l])}this.wd=!0}};r.prototype.wc=function(){this.Fs();return this.yf};fa=r;new fa;Ta=function(d,l){v?Ua(d,l.sc):Va(d,l.wc())};Ua=function(d,l){var a,f,b,v;f=a=0;for(b=d.length;a<b;++a)v=d[a],l.has(v)||(d[f++]=v);d.length=f};Va=function(d,l){var a,f,b,v;f=a=0;for(b=d.length;a<b;++a)v=d[a],-1===Da(l,v)&&(d[f++]=v);d.length=f};c.prototype.add=function(d){this.y= d-this.Ui;this.wi=this.la+this.y;this.Ui=this.wi-this.la-this.y;this.la=this.wi};c.prototype.reset=function(){this.la=this.wi=this.y=this.Ui=0};Wa=c;Xa=function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};b.prototype.Fg=function(d){this.pn=d;this.qc=d.length/2;this.Na.length=d.length;this.eh=this.fh=-1;this.rl=0};b.prototype.Ve=function(){return!this.pn.length};b.prototype.ga=function(){for(var d=this.Na,l=d[0],a=l,f=d[1],b=f,v,k,w=1,e=this.qc;w<e;++w)k=2*w,v=d[k],k=d[k+1],v<l&&(l=v), v>a&&(a=v),k<f&&(f=k),k>b&&(b=k);this.$g=l;this.ah=a;this.bh=f;this.Zg=b};b.prototype.Eg=function(d,l,a){this.Na.length=8;this.qc=4;var f=this.Na;f[0]=d.left-l;f[1]=d.top-a;f[2]=d.right-l;f[3]=d.top-a;f[4]=d.right-l;f[5]=d.bottom-a;f[6]=d.left-l;f[7]=d.bottom-a;this.fh=d.right-d.left;this.eh=d.bottom-d.top;this.ga()};b.prototype.rf=function(d,l,a,f,b){this.Na.length=8;this.qc=4;var v=this.Na;v[0]=d.ea-l;v[1]=d.fa-a;v[2]=d.Pa-l;v[3]=d.Qa-a;v[4]=d.Da-l;v[5]=d.Ea-a;v[6]=d.Ba-l;v[7]=d.Ca-a;this.fh=f; this.eh=b;this.ga()};b.prototype.Dn=function(d){this.qc=d.qc;R(this.Na,d.Na);this.$g=d.$g;this.bh-d.bh;this.ah=d.ah;this.Zg=d.Zg};b.prototype.Ne=function(d,l,a){if(this.fh!==d||this.eh!==l||this.rl!==a){this.fh=d;this.eh=l;this.rl=a;var f,b,v,k,w,e=0,n=1,s=this.pn,t=this.Na;0!==a&&(e=Math.sin(a),n=Math.cos(a));a=0;for(v=this.qc;a<v;a++)f=2*a,b=f+1,k=s[f]*d,w=s[b]*l,t[f]=k*n-w*e,t[b]=w*n+k*e;this.ga()}};b.prototype.ab=function(d,l){var a=this.Na;if(d===a[0]&&l===a[1])return!0;var f,b,v,k=this.qc,w= this.$g-110,e=this.bh-101,n=this.ah+131,s=this.Zg+120,t,c,m=0,h=0;for(f=0;f<k;f++)b=2*f,v=(f+1)%k*2,t=a[b],b=a[b+1],c=a[v],v=a[v+1],wa(w,e,d,l,t,b,c,v)&&m++,wa(n,s,d,l,t,b,c,v)&&h++;return 1===m%2||1===h%2};b.prototype.$f=function(d,l,a){var f=d.Na,b=this.Na;if(this.ab(f[0]+l,f[1]+a)||d.ab(b[0]-l,b[1]-a))return!0;var v,k,w,e,n,s,t,c,m,h,aa,x;v=0;for(e=this.qc;v<e;v++)for(k=2*v,w=(v+1)%e*2,c=b[k],k=b[k+1],m=b[w],h=b[w+1],w=0,t=d.qc;w<t;w++)if(n=2*w,s=(w+1)%t*2,aa=f[n]+l,n=f[n+1]+a,x=f[s]+l,s=f[s+1]+ a,wa(c,k,m,h,aa,n,x,s))return!0;return!1};Ya=b;h.prototype.Fd=function(d,l,a){var f;f=this.cells[d];return f?(f=f[l])?f:a?(f=m(this,d,l),this.cells[d][l]=f):null:a?(f=m(this,d,l),this.cells[d]={},this.cells[d][l]=f):null};h.prototype.Ab=function(d){return P(d/this.Xi)};h.prototype.Bb=function(d){return P(d/this.Wi)};h.prototype.update=function(d,l,a){var f,b,v,k,w;if(l)for(f=l.left,b=l.right;f<=b;++f)for(v=l.top,k=l.bottom;v<=k;++v)if(!a||!a.ab(f,v))if(w=this.Fd(f,v,!1))w.remove(d),w.bd()&&(w.Ta.clear(), 1E3>pa.length&&pa.push(w),this.cells[f][v]=null);if(a)for(f=a.left,b=a.right;f<=b;++f)for(v=a.top,k=a.bottom;v<=k;++v)l&&l.ab(f,v)||this.Fd(f,v,!0).Cj(d)};h.prototype.li=function(d,l){var a,f,b,v,k,w;a=this.Ab(d.left);b=this.Bb(d.top);f=this.Ab(d.right);for(k=this.Bb(d.bottom);a<=f;++a)for(v=b;v<=k;++v)(w=this.Fd(a,v,!1))&&w.dump(l)};Za=h;e.prototype.Fd=function(d,l,a){var f;f=this.cells[d];return f?(f=f[l])?f:a?(f=k(this,d,l),this.cells[d][l]=f):null:a?(f=k(this,d,l),this.cells[d]={},this.cells[d][l]= f):null};e.prototype.Ab=function(d){return P(d/this.Xi)};e.prototype.Bb=function(d){return P(d/this.Wi)};e.prototype.update=function(d,l,a){var f,b,v,k,w;if(l)for(f=l.left,b=l.right;f<=b;++f)for(v=l.top,k=l.bottom;v<=k;++v)if(!a||!a.ab(f,v))if(w=this.Fd(f,v,!1))w.remove(d),w.bd()&&(w.reset(),1E3>qa.length&&qa.push(w),this.cells[f][v]=null);if(a)for(f=a.left,b=a.right;f<=b;++f)for(v=a.top,k=a.bottom;v<=k;++v)l&&l.ab(f,v)||this.Fd(f,v,!0).Cj(d)};e.prototype.li=function(d,l,a,f,b){var v,k;d=this.Ab(d); l=this.Bb(l);a=this.Ab(a);for(v=this.Bb(f);d<=a;++d)for(f=l;f<=v;++f)(k=this.Fd(d,f,!1))&&k.dump(b)};e.prototype.Ur=function(d){var l,a,f,b,v;l=d.left;f=d.top;a=d.right;for(b=d.bottom;l<=a;++l)for(d=f;d<=b;++d)if(v=this.Fd(l,d,!1))v.Xe=!1};$a=e;var pa=[];a.prototype.bd=function(){return this.Ta.bd()};a.prototype.Cj=function(d){this.Ta.add(d)};a.prototype.remove=function(d){this.Ta.remove(d)};a.prototype.dump=function(d){Ca(d,this.Ta.wc())};ca=a;var qa=[];n.prototype.bd=function(){if(!this.Ta.length)return!0; if(this.Ta.length>this.Ec.count())return!1;this.kj();return!0};n.prototype.Cj=function(d){this.Ec.contains(d)?(this.Ec.remove(d),this.Ec.bd()&&(this.Cf=!1)):this.Ta.length?(this.Ta[this.Ta.length-1].Qb()>d.Qb()&&(this.Xe=!1),this.Ta.push(d)):(this.Ta.push(d),this.Xe=!0)};n.prototype.remove=function(d){this.Ec.add(d);this.Cf=!0;30<=this.Ec.count()&&this.kj()};n.prototype.kj=function(){this.Cf&&(this.Ec.count()===this.Ta.length?this.reset():(Ta(this.Ta,this.Ec),this.Ec.clear(),this.Cf=!1))};n.prototype.sq= function(){this.Xe||(this.Ta.sort(f),this.Xe=!0)};n.prototype.reset=function(){this.Ta.length=0;this.Xe=!0;this.Ec.clear();this.Cf=!1};n.prototype.dump=function(d){this.kj();this.sq();this.Ta.length&&d.push(this.Ta)};ga=n;var C="lighter xor copy destination-over source-in destination-in source-out destination-out source-atop destination-atop".split(" ");ab=function(d){return 0>=d||11<=d?"source-over":C[d-1]};bb=function(d,l,a){if(a)switch(d.cb=a.ONE,d.bb=a.ONE_MINUS_SRC_ALPHA,l){case 1:d.cb=a.ONE; d.bb=a.ONE;break;case 3:d.cb=a.ONE;d.bb=a.ZERO;break;case 4:d.cb=a.ONE_MINUS_DST_ALPHA;d.bb=a.ONE;break;case 5:d.cb=a.DST_ALPHA;d.bb=a.ZERO;break;case 6:d.cb=a.ZERO;d.bb=a.SRC_ALPHA;break;case 7:d.cb=a.ONE_MINUS_DST_ALPHA;d.bb=a.ZERO;break;case 8:d.cb=a.ZERO;d.bb=a.ONE_MINUS_SRC_ALPHA;break;case 9:d.cb=a.DST_ALPHA;d.bb=a.ONE_MINUS_SRC_ALPHA;break;case 10:d.cb=a.ONE_MINUS_DST_ALPHA,d.bb=a.SRC_ALPHA}};cb=function(d){return Math.round(1E6*d)/1E6};db=function(d,l){return"string"!==typeof d||"string"!== typeof l||d.length!==l.length?!1:d===l?!0:d.toLowerCase()===l.toLowerCase()};eb=function(d){d=d.target;return!d||d===document||d===window||document&&document.body&&d===document.body||db(d.tagName,"canvas")?!0:!1}})();var Vb="undefined"!==typeof Float32Array?Float32Array:Array;function Wb(g){var q=new Vb(3);g&&(q[0]=g[0],q[1]=g[1],q[2]=g[2]);return q} function Xb(g){var q=new Vb(16);g&&(q[0]=g[0],q[1]=g[1],q[2]=g[2],q[3]=g[3],q[4]=g[4],q[5]=g[5],q[6]=g[6],q[7]=g[7],q[8]=g[8],q[9]=g[9],q[10]=g[10],q[11]=g[11],q[12]=g[12],q[13]=g[13],q[14]=g[14],q[15]=g[15]);return q}function Yb(g,q){q[0]=g[0];q[1]=g[1];q[2]=g[2];q[3]=g[3];q[4]=g[4];q[5]=g[5];q[6]=g[6];q[7]=g[7];q[8]=g[8];q[9]=g[9];q[10]=g[10];q[11]=g[11];q[12]=g[12];q[13]=g[13];q[14]=g[14];q[15]=g[15]} function Zb(g,q){var p=q[0],r=q[1];q=q[2];g[0]*=p;g[1]*=p;g[2]*=p;g[3]*=p;g[4]*=r;g[5]*=r;g[6]*=r;g[7]*=r;g[8]*=q;g[9]*=q;g[10]*=q;g[11]*=q} function $b(g,q,p,r){r||(r=Xb());var u,c,b,h,e,m,a,k,n=g[0],f=g[1];g=g[2];c=p[0];b=p[1];u=p[2];p=q[1];m=q[2];n===q[0]&&f===p&&g===m?(g=r,g[0]=1,g[1]=0,g[2]=0,g[3]=0,g[4]=0,g[5]=1,g[6]=0,g[7]=0,g[8]=0,g[9]=0,g[10]=1,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1):(p=n-q[0],m=f-q[1],a=g-q[2],k=1/Math.sqrt(p*p+m*m+a*a),p*=k,m*=k,a*=k,q=b*a-u*m,u=u*p-c*a,c=c*m-b*p,(k=Math.sqrt(q*q+u*u+c*c))?(k=1/k,q*=k,u*=k,c*=k):c=u=q=0,b=m*c-a*u,h=a*q-p*c,e=p*u-m*q,(k=Math.sqrt(b*b+h*h+e*e))?(k=1/k,b*=k,h*=k,e*=k):e=h=b=0, r[0]=q,r[1]=b,r[2]=p,r[3]=0,r[4]=u,r[5]=h,r[6]=m,r[7]=0,r[8]=c,r[9]=e,r[10]=a,r[11]=0,r[12]=-(q*n+u*f+c*g),r[13]=-(b*n+h*f+e*g),r[14]=-(p*n+m*f+a*g),r[15]=1)} (function(){function g(c){this.ne=/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent);this.height=this.width=0;this.sl=Wb([0,0,100]);this.Em=Wb([0,0,0]);this.Un=Wb([0,1,0]);this.Ok=Wb([1,1,1]);this.Hl=!0;this.Tj=Xb();this.Vb=Xb();this.wm=Xb();this.aj=Xb();this.k=c;this.gm()}function q(c,b,h){this.k=c;this.Gg=b;this.name=h;this.Ub=c.getAttribLocation(b,"aPos");this.Ld=c.getAttribLocation(b,"aTex");this.Cm=c.getUniformLocation(b,"matP");this.Wh=c.getUniformLocation(b,"matMV");this.ef= c.getUniformLocation(b,"opacity");this.Dm=c.getUniformLocation(b,"samplerFront");this.ng=c.getUniformLocation(b,"samplerBack");this.xe=c.getUniformLocation(b,"destStart");this.we=c.getUniformLocation(b,"destEnd");this.Rj=c.getUniformLocation(b,"seconds");this.Qj=c.getUniformLocation(b,"pixelWidth");this.Pj=c.getUniformLocation(b,"pixelHeight");this.mg=c.getUniformLocation(b,"layerScale");this.lg=c.getUniformLocation(b,"layerAngle");this.pg=c.getUniformLocation(b,"viewOrigin");this.og=c.getUniformLocation(b, "scrollPos");this.Ar=!!(this.Qj||this.Pj||this.Rj||this.ng||this.xe||this.we||this.mg||this.lg||this.pg||this.og);this.Mm=this.Nm=-999;this.Zh=1;this.Im=this.Hm=0;this.Km=this.Gm=this.Fm=1;this.Pm=this.Om=this.Rm=this.Qm=this.Jm=0;this.Kj=[];this.Lm=Xb();this.ef&&c.uniform1f(this.ef,1);this.Dm&&c.uniform1i(this.Dm,0);this.ng&&c.uniform1i(this.ng,1);this.xe&&c.uniform2f(this.xe,0,0);this.we&&c.uniform2f(this.we,1,1);this.mg&&c.uniform1f(this.mg,1);this.lg&&c.uniform1f(this.lg,0);this.pg&&c.uniform2f(this.pg, 0,0);this.og&&c.uniform2f(this.og,0,0);this.je=!1}function p(c,b){this.type=c;this.n=b;this.k=b.k;this.Dc=this.ac=this.en=0;this.Z=this.uc=null;this.Fn=[]}g.prototype.gm=function(){var c=this.k,b;this.xm=1;this.se=this.re=null;this.rh=1;c.clearColor(0,0,0,0);c.clear(c.COLOR_BUFFER_BIT);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.disable(c.CULL_FACE);c.disable(c.DEPTH_TEST);this.ym=c.ONE;this.vm=c.ONE_MINUS_SRC_ALPHA;this.gk=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,this.gk);this.Tg= Array(4);this.Kg=Array(4);for(b=0;4>b;b++)this.Tg[b]=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,this.Tg[b]),this.Kg[b]=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,this.Kg[b]);this.Sc=0;this.Cr=c.createBuffer();c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,this.Cr);this.Mk=new Float32Array(16E3);this.zk=new Float32Array(16E3);this.ds=new Float32Array(32E3);for(var h=new Uint16Array(12E3),e=b=0;12E3>b;)h[b++]=e,h[b++]=e+1,h[b++]=e+2,h[b++]=e,h[b++]=e+2,h[b++]=e+3,e+=4;c.bufferData(c.ELEMENT_ARRAY_BUFFER,h, c.STATIC_DRAW);this.hk=this.Oc=0;this.Oa=[];b=this.$i({src:"varying mediump vec2 vTex;\nuniform lowp float opacity;\nuniform lowp sampler2D samplerFront;\nvoid main(void) {\n\tgl_FragColor = texture2D(samplerFront, vTex);\n\tgl_FragColor *= opacity;\n}"},"attribute highp vec2 aPos;\nattribute mediump vec2 aTex;\nvarying mediump vec2 vTex;\nuniform highp mat4 matP;\nuniform highp mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tvTex = aTex;\n}","<default>"); this.Oa.push(b);b=this.$i({src:"uniform mediump sampler2D samplerFront;\nvarying lowp float opacity;\nvoid main(void) {\n\tgl_FragColor = texture2D(samplerFront, gl_PointCoord);\n\tgl_FragColor *= opacity;\n}"},"attribute vec4 aPos;\nvarying float opacity;\nuniform mat4 matP;\nuniform mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tgl_PointSize = aPos.z;\n\topacity = aPos.w;\n}","<point>");this.Oa.push(b);for(var m in ac)ac.hasOwnProperty(m)&&this.Oa.push(this.$i(ac[m], "attribute highp vec2 aPos;\nattribute mediump vec2 aTex;\nvarying mediump vec2 vTex;\nuniform highp mat4 matP;\nuniform highp mat4 matMV;\nvoid main(void) {\n\tgl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);\n\tvTex = aTex;\n}",m));c.activeTexture(c.TEXTURE0);c.bindTexture(c.TEXTURE_2D,null);this.vd=[];this.Qc=0;this.sb=!1;this.Al=this.hg=-1;this.Mf=null;this.Sq=c.createFramebuffer();this.un=null;this.Ud=Wb([0,0,0]);this.Sm=c.getParameter(c.ALIASED_POINT_SIZE_RANGE)[1];2048<this.Sm&& (this.Sm=2048);this.Kc(0)};q.prototype.Ik=function(c){var b=this.Lm;if(b[0]!==c[0]||b[1]!==c[1]||b[2]!==c[2]||b[3]!==c[3]||b[4]!==c[4]||b[5]!==c[5]||b[6]!==c[6]||b[7]!==c[7]||b[8]!==c[8]||b[9]!==c[9]||b[10]!==c[10]||b[11]!==c[11]||b[12]!==c[12]||b[13]!==c[13]||b[14]!==c[14]||b[15]!==c[15])Yb(c,this.Lm),this.k.uniformMatrix4fv(this.Wh,!1,c)};g.prototype.$i=function(c,b,h){var e=this.k,m=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(m,c.src);e.compileShader(m);if(!e.getShaderParameter(m,e.COMPILE_STATUS))return e.deleteShader(m), null;var a=e.createShader(e.VERTEX_SHADER);e.shaderSource(a,b);e.compileShader(a);if(!e.getShaderParameter(a,e.COMPILE_STATUS))return e.deleteShader(m),e.deleteShader(a),null;b=e.createProgram();e.attachShader(b,m);e.attachShader(b,a);e.linkProgram(b);if(!e.getProgramParameter(b,e.LINK_STATUS))return e.deleteShader(m),e.deleteShader(a),e.deleteProgram(b),null;e.useProgram(b);e.deleteShader(m);e.deleteShader(a);h=new q(e,b,h);h.ij=c.ij||0;h.jj=c.jj||0;h.zl=!!c.zl;h.ll=!!c.ll;h.J=c.J||[];c=0;for(m= h.J.length;c<m;c++)h.J[c][1]=e.getUniformLocation(b,h.J[c][0]),h.Kj.push(0),e.uniform1f(h.J[c][1],0);return h};g.prototype.vj=function(c){var b,h;b=0;for(h=this.Oa.length;b<h;b++)if(this.Oa[b].name===c)return b;return-1};g.prototype.nn=function(c,b,h){var e=this.Vb,m=this.Tj,a=[0,0,0,0,0,0,0,0];a[0]=e[0]*c+e[4]*b+e[12];a[1]=e[1]*c+e[5]*b+e[13];a[2]=e[2]*c+e[6]*b+e[14];a[3]=e[3]*c+e[7]*b+e[15];a[4]=m[0]*a[0]+m[4]*a[1]+m[8]*a[2]+m[12]*a[3];a[5]=m[1]*a[0]+m[5]*a[1]+m[9]*a[2]+m[13]*a[3];a[6]=m[2]*a[0]+ m[6]*a[1]+m[10]*a[2]+m[14]*a[3];a[7]=-a[2];0!==a[7]&&(a[7]=1/a[7],a[4]*=a[7],a[5]*=a[7],a[6]*=a[7],h[0]=(.5*a[4]+.5)*this.width,h[1]=(.5*a[5]+.5)*this.height)};g.prototype.Rd=function(c,b,h){if(this.width!==c||this.height!==b||h){this.ee();this.width=c;this.height=b;this.k.viewport(0,0,c,b);b=c/b;var e=this.Tj,m;m=1*Math.tan(45*Math.PI/360);b*=m;c=-b;h=-m;e||(e=Xb());var a=b-c,k=m-h;e[0]=2/a;e[1]=0;e[2]=0;e[3]=0;e[4]=0;e[5]=2/k;e[6]=0;e[7]=0;e[8]=(b+c)/a;e[9]=(m+h)/k;e[10]=-1001/999;e[11]=-1;e[12]= 0;e[13]=0;e[14]=-2E3/999;e[15]=0;$b(this.sl,this.Em,this.Un,this.Vb);c=[0,0];b=[0,0];this.nn(0,0,c);this.nn(1,1,b);this.Ok[0]=1/(b[0]-c[0]);this.Ok[1]=-1/(b[1]-c[1]);c=0;for(b=this.Oa.length;c<b;c++)h=this.Oa[c],h.je=!1,h.Cm&&(this.k.useProgram(h.Gg),this.k.uniformMatrix4fv(h.Cm,!1,this.Tj));this.k.useProgram(this.Oa[this.hg].Gg);this.k.bindTexture(this.k.TEXTURE_2D,null);this.k.activeTexture(this.k.TEXTURE1);this.k.bindTexture(this.k.TEXTURE_2D,null);this.k.activeTexture(this.k.TEXTURE0);this.se= this.re=null}};g.prototype.Pd=function(){$b(this.sl,this.Em,this.Un,this.Vb);Zb(this.Vb,this.Ok)};g.prototype.translate=function(c,b){if(0!==c||0!==b){this.Ud[0]=c;this.Ud[1]=b;this.Ud[2]=0;var h=this.Vb,e=this.Ud,m=e[0],a=e[1],e=e[2];h[12]=h[0]*m+h[4]*a+h[8]*e+h[12];h[13]=h[1]*m+h[5]*a+h[9]*e+h[13];h[14]=h[2]*m+h[6]*a+h[10]*e+h[14];h[15]=h[3]*m+h[7]*a+h[11]*e+h[15]}};g.prototype.scale=function(c,b){if(1!==c||1!==b)this.Ud[0]=c,this.Ud[1]=b,this.Ud[2]=1,Zb(this.Vb,this.Ud)};g.prototype.vn=function(c){if(0!== c){var b=this.Vb,h,e=Math.sin(c);c=Math.cos(c);var m=b[0],a=b[1],k=b[2],n=b[3],f=b[4],s=b[5],x=b[6],p=b[7];h?b!==h&&(h[8]=b[8],h[9]=b[9],h[10]=b[10],h[11]=b[11],h[12]=b[12],h[13]=b[13],h[14]=b[14],h[15]=b[15]):h=b;h[0]=m*c+f*e;h[1]=a*c+s*e;h[2]=k*c+x*e;h[3]=n*c+p*e;h[4]=m*-e+f*c;h[5]=a*-e+s*c;h[6]=k*-e+x*c;h[7]=n*-e+p*c}};g.prototype.Vd=function(){for(var c=!1,b=0;16>b;b++)if(this.wm[b]!==this.Vb[b]){c=!0;break}c&&(c=this.rc(),c.type=5,c.Z?Yb(this.Vb,c.Z):c.Z=Xb(this.Vb),Yb(this.Vb,this.wm),this.sb= !1)};p.prototype.iq=function(){this.k.bindTexture(this.k.TEXTURE_2D,this.uc)};p.prototype.jq=function(){var c=this.k;c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_2D,this.uc);c.activeTexture(c.TEXTURE0)};p.prototype.fq=function(){var c=this.en,b=this.n;b.rh=c;b=b.Mf;b.ef&&b.Zh!==c&&(b.Zh=c,this.k.uniform1f(b.ef,c))};p.prototype.bq=function(){this.k.drawElements(this.k.TRIANGLES,this.Dc,this.k.UNSIGNED_SHORT,2*this.ac)};p.prototype.dq=function(){this.k.blendFunc(this.ac,this.Dc)};p.prototype.kq= function(){var c,b,h,e=this.n.Oa,m=this.n.Al;c=0;for(b=e.length;c<b;c++)h=e[c],c===m&&h.Wh?(h.Ik(this.Z),h.je=!0):h.je=!1;Yb(this.Z,this.n.aj)};p.prototype.cq=function(){var c=this.k,b=this.n;this.uc?(b.se===this.uc&&(c.activeTexture(c.TEXTURE1),c.bindTexture(c.TEXTURE_2D,null),b.se=null,c.activeTexture(c.TEXTURE0)),c.bindFramebuffer(c.FRAMEBUFFER,b.Sq),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,this.uc,0)):(c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D, null,0),c.bindFramebuffer(c.FRAMEBUFFER,null))};p.prototype.$p=function(){var c=this.k;0===this.ac?(c.clearColor(this.Z[0],this.Z[1],this.Z[2],this.Z[3]),c.clear(c.COLOR_BUFFER_BIT)):(c.enable(c.SCISSOR_TEST),c.scissor(this.Z[0],this.Z[1],this.Z[2],this.Z[3]),c.clearColor(0,0,0,0),c.clear(this.k.COLOR_BUFFER_BIT),c.disable(c.SCISSOR_TEST))};p.prototype.aq=function(){var c=this.k,b=this.n,h=b.Oa[1];c.useProgram(h.Gg);!h.je&&h.Wh&&(h.Ik(b.aj),h.je=!0);c.enableVertexAttribArray(h.Ub);c.bindBuffer(c.ARRAY_BUFFER, b.gk);c.vertexAttribPointer(h.Ub,4,c.FLOAT,!1,0,0);c.drawArrays(c.POINTS,this.ac/4,this.Dc);h=b.Mf;c.useProgram(h.Gg);0<=h.Ub&&(c.enableVertexAttribArray(h.Ub),c.bindBuffer(c.ARRAY_BUFFER,b.Tg[b.Sc]),c.vertexAttribPointer(h.Ub,2,c.FLOAT,!1,0,0));0<=h.Ld&&(c.enableVertexAttribArray(h.Ld),c.bindBuffer(c.ARRAY_BUFFER,b.Kg[b.Sc]),c.vertexAttribPointer(h.Ld,2,c.FLOAT,!1,0,0))};p.prototype.gq=function(){var c=this.k,b=this.n,h=b.Oa[this.ac];b.Al=this.ac;b.Mf=h;c.useProgram(h.Gg);!h.je&&h.Wh&&(h.Ik(b.aj), h.je=!0);h.ef&&h.Zh!==b.rh&&(h.Zh=b.rh,c.uniform1f(h.ef,b.rh));0<=h.Ub&&(c.enableVertexAttribArray(h.Ub),c.bindBuffer(c.ARRAY_BUFFER,b.Tg[b.Sc]),c.vertexAttribPointer(h.Ub,2,c.FLOAT,!1,0,0));0<=h.Ld&&(c.enableVertexAttribArray(h.Ld),c.bindBuffer(c.ARRAY_BUFFER,b.Kg[b.Sc]),c.vertexAttribPointer(h.Ld,2,c.FLOAT,!1,0,0))};p.prototype.hq=function(){var c,b,h=this.n.Mf,e=this.k;c=this.Z;h.ng&&this.n.se!==this.uc&&(e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,this.uc),this.n.se=this.uc,e.activeTexture(e.TEXTURE0)); var m=c[0];h.Qj&&m!==h.Nm&&(h.Nm=m,e.uniform1f(h.Qj,m));m=c[1];h.Pj&&m!==h.Mm&&(h.Mm=m,e.uniform1f(h.Pj,m));m=c[2];b=c[3];!h.xe||m===h.Hm&&b===h.Im||(h.Hm=m,h.Im=b,e.uniform2f(h.xe,m,b));m=c[4];b=c[5];!h.we||m===h.Fm&&b===h.Gm||(h.Fm=m,h.Gm=m,e.uniform2f(h.we,m,b));m=c[6];h.mg&&m!==h.Km&&(h.Km=m,e.uniform1f(h.mg,m));m=c[7];h.lg&&m!==h.Jm&&(h.Jm=m,e.uniform1f(h.lg,m));m=c[8];b=c[9];!h.pg||m===h.Qm&&b===h.Rm||(h.Qm=m,h.Rm=b,e.uniform2f(h.pg,m,b));m=c[10];b=c[11];!h.og||m===h.Om&&b===h.Pm||(h.Om=m,h.Pm= b,e.uniform2f(h.og,m,b));h.Rj&&e.uniform1f(h.Rj,T()/1E3);if(h.J.length)for(c=0,b=h.J.length;c<b;c++)m=this.Fn[c],m!==h.Kj[c]&&(h.Kj[c]=m,e.uniform1f(h.J[c][1],m))};g.prototype.rc=function(){this.Qc===this.vd.length&&this.vd.push(new p(0,this));return this.vd[this.Qc++]};g.prototype.ee=function(){if(0!==this.Qc&&!this.k.isContextLost()){var c=this.k;0<this.hk&&(c.bindBuffer(c.ARRAY_BUFFER,this.gk),c.bufferData(c.ARRAY_BUFFER,this.ds.subarray(0,this.hk),c.STREAM_DRAW),b&&0<=b.Ub&&"<point>"===b.name&& c.vertexAttribPointer(b.Ub,4,c.FLOAT,!1,0,0));if(0<this.Oc){var b=this.Mf;c.bindBuffer(c.ARRAY_BUFFER,this.Tg[this.Sc]);c.bufferData(c.ARRAY_BUFFER,this.Mk.subarray(0,this.Oc),c.STREAM_DRAW);b&&0<=b.Ub&&"<point>"!==b.name&&c.vertexAttribPointer(b.Ub,2,c.FLOAT,!1,0,0);c.bindBuffer(c.ARRAY_BUFFER,this.Kg[this.Sc]);c.bufferData(c.ARRAY_BUFFER,this.zk.subarray(0,this.Oc),c.STREAM_DRAW);b&&0<=b.Ld&&"<point>"!==b.name&&c.vertexAttribPointer(b.Ld,2,c.FLOAT,!1,0,0)}for(var h,c=0,b=this.Qc;c<b;c++)switch(h= this.vd[c],h.type){case 1:h.bq();break;case 2:h.iq();break;case 3:h.fq();break;case 4:h.dq();break;case 5:h.kq();break;case 6:h.cq();break;case 7:h.$p();break;case 8:h.aq();break;case 9:h.gq();break;case 10:h.hq();break;case 11:h.jq()}this.hk=this.Oc=this.Qc=0;this.sb=!1;this.Sc++;4<=this.Sc&&(this.Sc=0)}};g.prototype.Ee=function(c){if(c!==this.xm){var b=this.rc();b.type=3;this.xm=b.en=c;this.sb=!1}};g.prototype.zb=function(c){if(c!==this.re){var b=this.rc();b.type=2;this.re=b.uc=c;this.sb=!1}};g.prototype.Qd= function(c,b){if(c!==this.ym||b!==this.vm){var h=this.rc();h.type=4;h.ac=c;h.Dc=b;this.ym=c;this.vm=b;this.sb=!1}};g.prototype.zn=function(){this.Qd(this.k.ONE,this.k.ONE_MINUS_SRC_ALPHA)};g.prototype.ki=function(c,b,h,e,m,a,k,n){15992<=this.Oc&&this.ee();var f=this.Oc,s=this.Mk,x=this.zk;if(this.sb)this.vd[this.Qc-1].Dc+=6;else{var p=this.rc();p.type=1;p.ac=f/4*3;p.Dc=6;this.sb=!0}s[f]=c;x[f++]=0;s[f]=b;x[f++]=0;s[f]=h;x[f++]=1;s[f]=e;x[f++]=0;s[f]=m;x[f++]=1;s[f]=a;x[f++]=1;s[f]=k;x[f++]=0;s[f]= n;x[f++]=1;this.Oc=f};g.prototype.Ic=function(c,b,h,e,m,a,k,n,f){15992<=this.Oc&&this.ee();var s=this.Oc,x=this.Mk,p=this.zk;if(this.sb)this.vd[this.Qc-1].Dc+=6;else{var t=this.rc();t.type=1;t.ac=s/4*3;t.Dc=6;this.sb=!0}var t=f.left,d=f.top,l=f.right;f=f.bottom;x[s]=c;p[s++]=t;x[s]=b;p[s++]=d;x[s]=h;p[s++]=l;x[s]=e;p[s++]=d;x[s]=m;p[s++]=l;x[s]=a;p[s++]=f;x[s]=k;p[s++]=t;x[s]=n;p[s++]=f;this.Oc=s};g.prototype.Kc=function(c){if(this.hg!==c){if(!this.Oa[c]){if(0===this.hg)return;c=0}var b=this.rc(); b.type=9;this.hg=b.ac=c;this.sb=!1}};g.prototype.zg=function(c){c=this.Oa[c];return!(!c.xe&&!c.we)};g.prototype.jk=function(c){c=this.Oa[c];return!!(c.xe||c.we||c.zl)};g.prototype.ms=function(c){c=this.Oa[c];return 0!==c.ij||0!==c.jj};g.prototype.gr=function(c){return this.Oa[c].ij};g.prototype.hr=function(c){return this.Oa[c].jj};g.prototype.ir=function(c,b){return this.Oa[c].J[b][2]};g.prototype.ii=function(c){return this.Oa[c].ll};g.prototype.qf=function(c,b,h,e,m,a,k,n,f,s,x,p,t,d){var l=this.Oa[this.hg], v,w;if(l.Ar||d.length){v=this.rc();v.type=10;v.Z?Yb(this.Vb,v.Z):v.Z=Xb();w=v.Z;w[0]=b;w[1]=h;w[2]=e;w[3]=m;w[4]=a;w[5]=k;w[6]=n;w[7]=f;w[8]=s;w[9]=x;w[10]=p;w[11]=t;v.uc=l.ng?c:null;if(d.length)for(h=v.Fn,h.length=d.length,c=0,b=d.length;c<b;c++)h[c]=d[c];this.sb=!1}};g.prototype.clear=function(c,b,h,e){var m=this.rc();m.type=7;m.ac=0;m.Z||(m.Z=Xb());m.Z[0]=c;m.Z[1]=b;m.Z[2]=h;m.Z[3]=e;this.sb=!1};g.prototype.clearRect=function(c,b,h,e){if(!(0>h||0>e)){var m=this.rc();m.type=7;m.ac=1;m.Z||(m.Z=Xb()); m.Z[0]=c;m.Z[1]=b;m.Z[2]=h;m.Z[3]=e;this.sb=!1}};g.prototype.ls=function(){this.ee();this.k.flush()};var r=[],u={};g.prototype.Up=function(){r.length=0;u={}};g.prototype.bf=function(c,b,h,e){b=!!b;h=!!h;var m=c.src+","+b+","+h+(b?",undefined":""),a=null;if("undefined"!==typeof c.src&&u.hasOwnProperty(m))return a=u[m],a.dh++,a;this.ee();var k=this.k,n=ka(c.width)&&ka(c.height),a=k.createTexture();k.bindTexture(k.TEXTURE_2D,a);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);var f=k.RGBA,s=k.RGBA, x=k.UNSIGNED_BYTE;if(e&&!this.ne)switch(e){case 1:s=f=k.RGB;break;case 2:x=k.UNSIGNED_SHORT_4_4_4_4;break;case 3:x=k.UNSIGNED_SHORT_5_5_5_1;break;case 4:s=f=k.RGB,x=k.UNSIGNED_SHORT_5_6_5}if(!n&&b){e=document.createElement("canvas");e.width=la(c.width);e.height=la(c.height);var p=e.getContext("2d");p.webkitImageSmoothingEnabled=h;p.mozImageSmoothingEnabled=h;p.msImageSmoothingEnabled=h;p.imageSmoothingEnabled=h;p.drawImage(c,0,0,c.width,c.height,0,0,e.width,e.height);k.texImage2D(k.TEXTURE_2D,0,f, s,x,e)}else k.texImage2D(k.TEXTURE_2D,0,f,s,x,c);b?(k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,k.REPEAT),k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,k.REPEAT)):(k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE),k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE));h?(k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,k.LINEAR),n&&this.Hl?(k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,k.LINEAR_MIPMAP_LINEAR),k.generateMipmap(k.TEXTURE_2D)):k.texParameteri(k.TEXTURE_2D, k.TEXTURE_MIN_FILTER,k.LINEAR)):(k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,k.NEAREST),k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,k.NEAREST));k.bindTexture(k.TEXTURE_2D,null);this.re=null;a.Hf=c.width;a.Gf=c.height;a.dh=1;a.ql=m;r.push(a);return u[m]=a};g.prototype.Bd=function(c,b,h){var e;this.ee();var m=this.k;this.ne&&(e=!1);var a=m.createTexture();m.bindTexture(m.TEXTURE_2D,a);m.texImage2D(m.TEXTURE_2D,0,m.RGBA,c,b,0,m.RGBA,e?m.UNSIGNED_SHORT_4_4_4_4:m.UNSIGNED_BYTE,null);m.texParameteri(m.TEXTURE_2D, m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,h?m.LINEAR:m.NEAREST);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,h?m.LINEAR:m.NEAREST);m.bindTexture(m.TEXTURE_2D,null);this.re=null;a.Hf=c;a.Gf=b;r.push(a);return a};g.prototype.deleteTexture=function(c){c&&("undefined"!==typeof c.dh&&1<c.dh?c.dh--:(this.ee(),c===this.re&&(this.k.bindTexture(this.k.TEXTURE_2D,null),this.re=null),c===this.se&&(this.k.activeTexture(this.k.TEXTURE1), this.k.bindTexture(this.k.TEXTURE_2D,null),this.k.activeTexture(this.k.TEXTURE0),this.se=null),Ea(r,c),"undefined"!==typeof c.ql&&delete u[c.ql],this.k.deleteTexture(c)))};g.prototype.Jc=function(c){if(c!==this.un){var b=this.rc();b.type=6;this.un=b.uc=c;this.sb=!1}};fb=g})(); (function(){function g(){return"undefined"!==typeof jQuery?jQuery(window).width():window.innerWidth}function q(){return"undefined"!==typeof jQuery?jQuery(window).height():window.innerHeight}function p(d){if(d&&(d.getContext||d.dc)&&!d.c2runtime){d.c2runtime=this;var l=this;this.Rb=(this.Kh=/crosswalk/i.test(navigator.userAgent)||/xwalk/i.test(navigator.userAgent)||!("undefined"===typeof window.c2isCrosswalk||!window.c2isCrosswalk))||"undefined"!==typeof window.device&&("undefined"!==typeof window.device.cordova|| "undefined"!==typeof window.device.phonegap)||"undefined"!==typeof window.c2iscordova&&window.c2iscordova;this.nc=!!d.dc;this.ag="undefined"!==typeof window.AppMobi||this.nc;this.tb=!!window.c2cocoonjs;this.Sb=!!window.c2ejecta;this.tb&&(CocoonJS.App.onSuspended.addEventListener(function(){l.setSuspended(!0)}),CocoonJS.App.onActivated.addEventListener(function(){l.setSuspended(!1)}));this.Sb&&(document.addEventListener("pagehide",function(){l.setSuspended(!0)}),document.addEventListener("pageshow", function(){l.setSuspended(!1)}),document.addEventListener("resize",function(){l.setSize(window.innerWidth,window.innerHeight)}));this.ha=this.nc||this.tb||this.Sb;this.ne=/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent)||/iemobile/i.test(navigator.userAgent)||/edge\//i.test(navigator.userAgent);this.pm=/tizen/i.test(navigator.userAgent);this.mm=/android/i.test(navigator.userAgent)&&!this.pm&&!this.ne;this.Jj=(/iphone/i.test(navigator.userAgent)||/ipod/i.test(navigator.userAgent))&& !this.ne;this.um=/ipad/i.test(navigator.userAgent);this.tm=this.Jj||this.um||this.Sb;this.Nr=this.Jj&&/os\s6/i.test(navigator.userAgent);this.Jh=(/chrome/i.test(navigator.userAgent)||/chromium/i.test(navigator.userAgent))&&!this.ne;this.lm=/amazonwebappplatform/i.test(navigator.userAgent);this.Hr=/firefox/i.test(navigator.userAgent);this.Jr=/safari/i.test(navigator.userAgent)&&!this.Jh&&!this.ne;this.Id="undefined"!==typeof window.c2nodewebkit||"undefined"!==typeof window.c2nwjs||/nodewebkit/i.test(navigator.userAgent)|| /nwjs/i.test(navigator.userAgent);this.qm=!("undefined"===typeof window.c2isWindows8||!window.c2isWindows8);this.Lr=!("undefined"===typeof window.c2isWindows8Capable||!window.c2isWindows8Capable);this.Ue=!("undefined"===typeof window.c2isWindowsPhone8||!window.c2isWindowsPhone8);this.Lh=!("undefined"===typeof window.c2isWindowsPhone81||!window.c2isWindowsPhone81);this.Hj=this.qm||this.Lr||this.Lh;this.Gr=!("undefined"===typeof window.c2isBlackberry10||!window.c2isBlackberry10);this.nm=this.mm&&!this.Jh&& !this.Kh&&!this.Hr&&!this.lm&&!this.ha;this.devicePixelRatio=1;this.oe=this.Rb||this.Kh||this.ag||this.tb||this.mm||this.tm||this.Ue||this.Lh||this.Gr||this.pm||this.Sb;this.oe||(this.oe=/(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet|kindle|silk)/i.test(navigator.userAgent));"undefined"===typeof cr_is_preview||this.Id||"?nw"!==window.location.search&&!/nodewebkit/i.test(navigator.userAgent)&&!/nwjs/i.test(navigator.userAgent)||(this.Id=!0);this.canvas=d;this.tl=document.getElementById("c2canvasdiv"); this.aa=this.n=this.k=null;this.nj="";this.yh=!1;this.an=this.bn=0;this.canvas.oncontextmenu=function(d){d.preventDefault&&d.preventDefault();return!1};this.canvas.onselectstart=function(d){d.preventDefault&&d.preventDefault();return!1};this.nc&&(window.c2runtime=this);this.Id&&(window.ondragover=function(d){d.preventDefault();return!1},window.ondrop=function(d){d.preventDefault();return!1},require("nw.gui").App.clearCache());this.nm&&"undefined"!==typeof jQuery&&jQuery("canvas").parents("*").css("overflow", "visible");this.width=d.width;this.height=d.height;this.L=this.width;this.K=this.height;this.ph=this.width;this.oh=this.height;this.jg=window.innerWidth;this.ig=window.innerHeight;this.Uq=!1;this.W=!0;this.dg=!1;Date.now||(Date.now=function(){return+new Date});this.plugins=[];this.types={};this.m=[];this.va=[];this.$e={};this.pc=[];this.hj={};this.Xc=[];this.Af=[];this.Ei=[];this.Mp=[];this.Np=[];this.ae={};this.Ej=this.Gd=!1;this.oc=0;this.Gj=!1;this.jc=[];this.cd=this.hb=this.Th=this.sk="";this.Ig= this.Hn=!1;this.Zi=this.qg=this.Dd=this.de=0;this.Og=1;this.Kd=new Wa;this.Hi=new Wa;this.ai=this.zh=this.Of=this.vf=this.ue=this.mj=this.Qh=0;this.Rc=null;this.Bl=[];this.gj=[];this.vh=-1;this.Sj=[[]];this.Fk=this.Xh=0;this.ji(null);this.ff=[];this.Yh=-1;this.Ym=this.sg=0;this.Nj=!0;this.Qf=0;this.Jg=[];this.Ck=this.kk=-1;this.qe=!0;this.df=0;this.bg=!1;this.ys=0;this.Ff=null;this.Tb=this.xj=!1;this.$m=new fa;this.Wj=new fa;this.Xj=new fa;this.os=[];this.tc=new Ya([]);this.yk=new Ya([]);this.sd= [];this.Fh={};this.Pe={};this.Me={};this.zf={};this.nl={};this.Bm=this.Sh=this.xb=this.Fb=this.Am=this.Rh=this.ba=null;this.xf=this.Ij=!1;this.oj=[null,null];this.he=0;this.ed={};this.ri=this.cf=null;this.$h=[];this.ps()}}function r(d){d.target.result.createObjectStore("saves",{keyPath:"slot"})}function u(d,l,a,f){var b=indexedDB.open("_C2SaveStates");b.onupgradeneeded=r;b.onerror=f;b.onsuccess=function(b){b=b.target.result;b.onerror=f;b.transaction(["saves"],"readwrite").objectStore("saves").put({slot:d, data:l}).onsuccess=a}}function c(d,l,a){var f=indexedDB.open("_C2SaveStates");f.onupgradeneeded=r;f.onerror=a;f.onsuccess=function(f){f=f.target.result;f.onerror=a;var b=f.transaction(["saves"]).objectStore("saves").get(d);b.onsuccess=function(){b.result?l(b.result.data):l(null)}}}function b(){B("Reloading for continuous preview");window.c2cocoonjs?CocoonJS.App.reload():-1<window.location.search.indexOf("continuous")?window.location.reload(!0):window.location+="?continuous"}function h(d){var l,a= {};for(l in d)!d.hasOwnProperty(l)||d[l]instanceof fa||d[l]&&"undefined"!==typeof d[l].Kt||(a[l]=d[l]);return a}p.prototype.ps=function(){var d=this,l;l=this.Ue?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest;var a="data.js";if(this.qm||this.Ue||this.Lh)a="data.json";l.open("GET",a,!0);var f=!1;if(!this.ha&&"response"in l&&"responseType"in l)try{l.responseType="json",f="json"===l.responseType}catch(b){f=!1}if(!f&&"responseType"in l)try{l.responseType="text"}catch(k){}if("overrideMimeType"in l)try{l.overrideMimeType("application/json; charset=utf-8")}catch(e){}this.Ue?l.onreadystatechange=function(){4===l.readyState&&d.Vh(JSON.parse(l.responseText))}:(l.onload=function(){if(f)d.Vh(l.response);else if(d.Sb){var a=l.responseText,a=a.substr(a.indexOf("{"));d.Vh(JSON.parse(a))}else d.Vh(JSON.parse(l.responseText))},l.onerror=function(d){ia("Error requesting "+a+":");ia(d)});l.send()};p.prototype.Dr=function(){var d=this,l,a,f,b,k,e,n,s,t;this.devicePixelRatio=(this.pe=(!this.ha||this.Sb)&& this.Hs&&!this.nm)?window.devicePixelRatio||window.webkitDevicePixelRatio||window.mozDevicePixelRatio||window.msDevicePixelRatio||1:1;this.$a();a=!(!this.Uq&&(!this.Oi||this.Id||this.Hj||this.Ue||this.Kh||this.Rb||this.lm));0<this.kb&&this.setSize(g(),q(),!0);try{this.qq&&(this.tb||this.Sb||!this.ha)&&(l={alpha:a,depth:!1,antialias:!1,failIfMajorPerformanceCaveat:!0},this.k=this.canvas.getContext("webgl",l)||this.canvas.getContext("experimental-webgl",l))}catch(c){}if(this.k){this.ha||(this.Ya=document.createElement("canvas"), jQuery(this.Ya).appendTo(this.canvas.parentNode),this.Ya.oncontextmenu=function(){return!1},this.Ya.onselectstart=function(){return!1},this.Ya.width=this.ph,this.Ya.height=this.oh,jQuery(this.Ya).css({width:this.ph+"px",height:this.oh+"px"}),this.mn(),this.fk=this.Ya.getContext("2d"));this.n=new fb(this.k,this.oe);this.n.Rd(this.canvas.width,this.canvas.height);this.n.Hl=0!==this.lq;this.aa=null;this.canvas.addEventListener("webglcontextlost",function(l){l.preventDefault();d.Zr();B("[Construct 2] WebGL context lost"); window.cr_setSuspended(!0)},!1);this.canvas.addEventListener("webglcontextrestored",function(){d.n.gm();d.n.Rd(d.n.width,d.n.height,!0);d.Fb=null;d.xb=null;d.oj[0]=null;d.oj[1]=null;d.$r();d.W=!0;B("[Construct 2] WebGL context restored");window.cr_setSuspended(!1)},!1);l=0;for(a=this.m.length;l<a;l++)for(k=this.m[l],f=0,b=k.G.length;f<b;f++)n=k.G[f],n.Za=this.n.vj(n.id),this.xf=this.xf||this.n.zg(n.Za);l=0;for(a=this.pc.length;l<a;l++){s=this.pc[l];f=0;for(b=s.G.length;f<b;f++)n=s.G[f],n.Za=this.n.vj(n.id); f=0;for(b=s.I.length;f<b;f++)for(t=s.I[f],k=0,e=t.G.length;k<e;k++)n=t.G[k],n.Za=this.n.vj(n.id),this.xf=this.xf||this.n.zg(n.Za)}}else{if(0<this.kb&&this.nc){this.canvas=null;document.oncontextmenu=function(){return!1};document.onselectstart=function(){return!1};this.aa=AppMobi.canvas.getContext("2d");try{this.aa.samplingMode=this.S?"smooth":"sharp",this.aa.globalScale=1,this.aa.HTML5CompatibilityMode=!0,this.aa.imageSmoothingEnabled=this.S}catch(m){}0!==this.width&&0!==this.height&&(this.aa.width= this.width,this.aa.height=this.height)}this.aa||(l=this.tb?{antialias:!!this.S,alpha:a}:{alpha:a},this.aa=this.canvas.getContext("2d",l),this.aa.webkitImageSmoothingEnabled=this.S,this.aa.mozImageSmoothingEnabled=this.S,this.aa.msImageSmoothingEnabled=this.S,this.aa.imageSmoothingEnabled=this.S);this.fk=this.Ya=null}this.Mn=function(l){d.Mc(!1,l)};window==window.top||this.ha||this.Hj||this.Ue||(document.addEventListener("mousedown",function(){window.focus()},!0),document.addEventListener("touchstart", function(){window.focus()},!0));"undefined"!==typeof cr_is_preview&&(this.tb&&console.log("[Construct 2] In preview-over-wifi via CocoonJS mode"),-1<window.location.search.indexOf("continuous")&&(B("Reloading for continuous preview"),this.Th="__c2_continuouspreview",this.Ig=!0),this.cs&&!this.oe&&(jQuery(window).focus(function(){d.setSuspended(!1)}),jQuery(window).blur(function(){d.setSuspended(!0)})));this.ha||(l=function(d){if(eb(d)&&document.activeElement&&document.activeElement!==document.getElementsByTagName("body")[0]&& document.activeElement.blur)try{document.activeElement.blur()}catch(l){}},window.navigator.pointerEnabled?document.addEventListener("pointerdown",l):window.navigator.msPointerEnabled?document.addEventListener("MSPointerDown",l):document.addEventListener("touchstart",l),document.addEventListener("mousedown",l));0===this.kb&&this.pe&&1<this.devicePixelRatio&&this.setSize(this.Ma,this.La,!0);this.Qn();this.wr();this.go();this.V={}};p.prototype.setSize=function(d,l,a){var f=0,b=0,k=0,e=0,e=0,n=this.Nr&& this.Jr&&!navigator.standalone&&!this.ha&&!this.Rb;n&&(l+=60);if(this.jg!==d||this.ig!==l||a){this.jg=d;this.ig=l;var s=this.kb,t=(document.mozFullScreen||document.webkitIsFullScreen||!!document.msFullscreenElement||document.fullScreen||this.bg)&&!this.Rb;if(t||0!==this.kb||a)t&&0<this.he&&(s=this.he),a=this.devicePixelRatio,4<=s?(k=this.Ma/this.La,d/l>k?(k*=l,5===s?(e=k*a/this.Ma,1<e?e=Math.floor(e):1>e&&(e=1/Math.ceil(1/e)),k=this.Ma*e/a,e=this.La*e/a,f=(d-k)/2,b=(l-e)/2,d=k,l=e):(f=(d-k)/2,d=k)): (e=d/k,5===s?(e=e*a/this.La,1<e?e=Math.floor(e):1>e&&(e=1/Math.ceil(1/e)),k=this.Ma*e/a,e=this.La*e/a,f=(d-k)/2,b=(l-e)/2,d=k):b=(l-e)/2,l=e),t&&!this.Id&&(b=f=0)):this.Id&&this.bg&&0===this.Ql&&(f=Math.floor((d-this.Ma)/2),b=Math.floor((l-this.La)/2),d=this.Ma,l=this.La),2>s&&(this.Ef=a),this.pe&&this.um&&1<a&&(1024<=d&&(d=1023),1024<=l&&(l=1023)),this.ph=Math.round(d),this.oh=Math.round(l),this.width=Math.round(d*a),this.height=Math.round(l*a),this.W=!0,this.co?(this.L=this.width,this.K=this.height, this.Ob=!0):this.width<this.Ma&&this.height<this.La||1===s?(this.L=this.width,this.K=this.height,this.Ob=!0):(this.L=this.Ma,this.K=this.La,this.Ob=!1,2===s?(k=this.Ma/this.La,s=this.jg/this.ig,s<k?this.L=this.K*s:s>k&&(this.K=this.L/s)):3===s&&(k=this.Ma/this.La,s=this.jg/this.ig,s>k?this.L=this.K*s:s<k&&(this.K=this.L/s))),this.tl&&!this.ha&&(jQuery(this.tl).css({width:Math.round(d)+"px",height:Math.round(l)+"px","margin-left":Math.floor(f)+"px","margin-top":Math.floor(b)+"px"}),"undefined"!==typeof cr_is_preview&& jQuery("#borderwrap").css({width:Math.round(d)+"px",height:Math.round(l)+"px"})),this.canvas&&(this.canvas.width=Math.round(d*a),this.canvas.height=Math.round(l*a),this.Sb?(this.canvas.style.left=Math.floor(f)+"px",this.canvas.style.top=Math.floor(b)+"px",this.canvas.style.width=Math.round(d)+"px",this.canvas.style.height=Math.round(l)+"px"):this.pe&&!this.ha&&jQuery(this.canvas).css({width:Math.round(d)+"px",height:Math.round(l)+"px"})),this.Ya&&(this.Ya.width=Math.round(d),this.Ya.height=Math.round(l), jQuery(this.Ya).css({width:Math.round(d)+"px",height:Math.round(l)+"px"})),this.n&&this.n.Rd(Math.round(d*a),Math.round(l*a)),this.nc&&this.aa&&(this.aa.width=Math.round(d),this.aa.height=Math.round(l)),this.aa&&(this.aa.webkitImageSmoothingEnabled=this.S,this.aa.mozImageSmoothingEnabled=this.S,this.aa.msImageSmoothingEnabled=this.S,this.aa.imageSmoothingEnabled=this.S),this.Qn(),this.ha||!n&&!this.Jj||window.setTimeout(function(){window.scrollTo(0,1)},100)}};p.prototype.Qn=function(){if(this.Pp&& 0!==this.ek){var d="portrait";2===this.ek&&(d="landscape");screen.orientation&&screen.orientation.lock?screen.orientation.lock(d):screen.lockOrientation?screen.lockOrientation(d):screen.webkitLockOrientation?screen.webkitLockOrientation(d):screen.mozLockOrientation?screen.mozLockOrientation(d):screen.msLockOrientation&&screen.msLockOrientation(d)}};p.prototype.Zr=function(){this.n.Up();this.Ij=!0;var d,l,a;d=0;for(l=this.m.length;d<l;d++)a=this.m[d],a.bi&&a.bi()};p.prototype.$r=function(){this.Ij= !1;var d,l,a;d=0;for(l=this.m.length;d<l;d++)a=this.m[d],a.ci&&a.ci()};p.prototype.mn=function(){if(!this.ha){var d=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||document.msFullscreenElement||this.bg)&&!this.Rb?jQuery(this.canvas).offset():jQuery(this.canvas).position();d.position="absolute";jQuery(this.Ya).css(d)}};var e=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||window.oCancelAnimationFrame; p.prototype.setSuspended=function(d){var l;if(d&&!this.dg)for(B("[Construct 2] Suspending"),this.dg=!0,-1!==this.kk&&e&&e(this.kk),-1!==this.Ck&&clearTimeout(this.Ck),d=0,l=this.Jg.length;d<l;d++)this.Jg[d](!0);else if(!d&&this.dg){B("[Construct 2] Resuming");this.dg=!1;this.Qh=T();this.ue=T();d=this.qg=this.zh=0;for(l=this.Jg.length;d<l;d++)this.Jg[d](!1);this.Mc(!1)}};p.prototype.Lp=function(d){this.Jg.push(d)};p.prototype.pd=function(d){return this.$h[d]};p.prototype.Vh=function(d){d&&d.project|| ia("Project model unavailable");d=d.project;this.name=d[0];this.Ml=d[1];this.kb=d[12];this.Ql=d[12];this.Ma=d[10];this.La=d[11];this.gn=this.Ma/2;this.hn=this.La/2;this.ha&&!this.Sb&&(4<=d[12]||0===d[12])&&(B("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'"),this.Ql=this.kb=3);this.Lk=d[18];this.kg=d[19];0===this.kg&&(this.cf=new Image,this.cf.src="loading-logo.png");this.sg=d[21];this.$h=bc();this.Lc=new W(this);var l,a,f,b,k,e,n, s,t;l=0;for(a=d[2].length;l<a;l++)n=d[2][l],f=this.pd(n[0]),gb(n,f.prototype),t=new f(this),t.qi=n[1],t.Jd=n[2],t.Wm=n[9],t.T&&t.T(),this.plugins.push(t);this.$h=bc();l=0;for(a=d[3].length;l<a;l++){n=d[3][l];k=this.pd(n[1]);t=null;f=0;for(b=this.plugins.length;f<b;f++)if(this.plugins[f]instanceof k){t=this.plugins[f];break}var c=new t.ma(t);c.name=n[0];c.A=n[2];c.Dj=n[3].slice(0);c.Js=n[3].length;c.Qp=n[4];c.Vq=n[5];c.N=n[11];c.A?(c.hf=[],c.Yc=this.Qf++,c.ja=null):(c.hf=null,c.Yc=-1,c.ja=[]);c.xh= null;c.Re=null;c.Il=null;c.ub=!1;c.rb=null;n[6]?(c.yi=n[6][0],c.Ak=n[6][1],c.Mg=n[6][2]):(c.yi=null,c.Ak=0,c.Mg=0);c.pb=n[7]?n[7]:null;c.index=l;c.c=[];c.sh=[];c.Td=[new hb(c)];c.Vc=0;c.Mb=null;c.Yp=0;c.tf=!0;c.Gi=ib;c.$q=jb;c.fr=kb;c.P=lb;c.Ag=mb;c.Ce=nb;c.Hc=ob;c.Ah=pb;c.pj=qb;c.sj=rb;c.td=sb;c.Vl=tb;c.mh=new Za(this.Ma,this.La);c.Xg=!0;c.Yg=!1;c.V={};c.toString=ub;c.va=[];f=0;for(b=n[8].length;f<b;f++){s=n[8][f];var m=this.pd(s[1]),h=null;k=0;for(e=this.va.length;k<e;k++)if(this.va[k]instanceof m){h=this.va[k];break}h||(h=new m(this),h.Xm=[],h.jf=new fa,h.T&&h.T(),this.va.push(h));-1===h.Xm.indexOf(c)&&h.Xm.push(c);k=new h.ma(h,c);k.name=s[0];k.N=s[2];k.T();c.va.push(k)}c.global=n[9];c.Fj=n[10];c.G=[];f=0;for(b=n[12].length;f<b;f++)c.G.push({id:n[12][f][0],name:n[12][f][1],Za:-1,Va:!0,index:f});c.eu=n[13];this.Lk&&!c.A&&!c.Fj&&t.Jd||c.T();c.name&&(this.types[c.name]=c);this.m.push(c);t.qi&&(f=new t.da(c),f.uid=this.sg++,f.qn=this.Ym++,f.ke=0,f.Uf=vb,f.toString=wb,f.D=n[14],f.T(),c.c.push(f), this.ed[f.uid.toString()]=f)}l=0;for(a=d[4].length;l<a;l++)for(k=d[4][l],e=this.m[k[0]],f=1,b=k.length;f<b;f++)n=this.m[k[f]],n.ja.push(e),e.hf.push(n);l=0;for(a=d[27].length;l<a;l++){k=d[27][l];e=[];f=0;for(b=k.length;f<b;f++)e.push(this.m[k[f]]);f=0;for(b=e.length;f<b;f++)e[f].ub=!0,e[f].rb=e}if(0<this.Qf)for(l=0,a=this.m.length;l<a;l++)if(n=this.m[l],!n.A&&n.ja.length){n.xh=Array(this.Qf);n.Re=Array(this.Qf);n.Il=Array(this.Qf);c=[];f=h=m=s=0;for(b=n.ja.length;f<b;f++)for(t=n.ja[f],n.xh[t.Yc]= s,s+=t.Js,n.Re[t.Yc]=m,m+=t.Qp,n.Il[t.Yc]=h,h+=t.Vq,k=0,e=t.G.length;k<e;k++)c.push(Aa({},t.G[k]));n.G=c.concat(n.G);f=0;for(b=n.G.length;f<b;f++)n.G[f].index=f}l=0;for(a=d[5].length;l<a;l++)n=d[5][l],f=new xb(this,n),this.$e[f.name]=f,this.pc.push(f);l=0;for(a=d[6].length;l<a;l++)n=d[6][l],f=new yb(this,n),this.hj[f.name]=f,this.Xc.push(f);l=0;for(a=this.Xc.length;l<a;l++)this.Xc[l].ta();l=0;for(a=this.Xc.length;l<a;l++)this.Xc[l].Hk();l=0;for(a=this.Ei.length;l<a;l++)this.Ei[l].ta();this.Ei.length= 0;this.Op=d[7];this.Gc=d[9];this.Ef=1;this.qq=d[13];this.S=d[14];this.Oi=d[15];this.Hs=d[17];this.ek=d[20];this.Pp=0<this.ek;this.cs=d[22];this.Ob=this.co=d[23];this.lq=d[24];this.js=d[25];this.si=Date.now();this.$h.length=0;this.Dr()};var m=!1;p.prototype.Nk=function(d,l){d.cocoonLazyLoad=!0;d.onerror=function(l){m=d.pl=!0;console&&console.error&&console.error("Error loading image '"+d.src+"': ",l)};this.Sb?d.src=l:d.src||("undefined"!==typeof XAPKReader?XAPKReader.get(l,function(l){d.src=l},function(a){m= d.pl=!0;console&&console.error&&console.error("Error extracting image '"+l+"' from expansion file: ",a)}):d.src=l);this.Af.push(d)};p.prototype.Tq=function(d){var l,a;l=0;for(a=this.Af.length;l<a;l++)if(this.Af[l].Vp===d)return this.Af[l];return null};var a=0,k=!1;p.prototype.wr=function(){this.Ff&&(a=this.Ff.bu(this.Op))};p.prototype.ml=function(){var d=a,l=0,f=0,b=!0,n,e,f=0;for(n=this.Af.length;f<n;f++){e=this.Af[f];var c=e.xl;if(!c||0>=c)c=5E4;d+=c;e.src&&(e.complete||e.loaded)&&!e.pl?l+=c:b= !1}b&&this.js&&this.Ff&&(k||(this.Ff.cu(),k=!0),f=this.Ff.Wt(),l+=f,f<a&&(b=!1));this.Be=0==d?0:l/d;return b};p.prototype.go=function(){if(this.aa||this.n){var d=this.aa||this.fk;this.Ya&&this.mn();this.Be=0;this.zm=-1;if(this.ml())this.xr();else{var l=Date.now()-this.si;if(d){var a=this.width,f=this.height,b=this.devicePixelRatio;this.Ya&&(a=this.ph,f=this.oh,b=1);if(3!==this.kg&&(this.tb||500<=l&&this.zm!=this.Be)){d.clearRect(0,0,a,f);var l=a/2,f=f/2,a=0===this.kg&&this.cf.complete,k=40*b,n=0, e=80*b,c;a&&(e=this.cf.width*b,c=this.cf.height*b,k=e/2,n=c/2,d.drawImage(this.cf,P(l-k),P(f-n),e,c));1>=this.kg?(l=P(l-k)+.5,f=P(f+(n+(a?12*b:0)))+.5,d.fillStyle=m?"red":"DodgerBlue",d.fillRect(l,f,Math.floor(e*this.Be),6*b),d.strokeStyle="black",d.strokeRect(l,f,e,6*b),d.strokeStyle="white",d.strokeRect(l-1*b,f-1*b,e+2*b,8*b)):2===this.kg&&(d.font=this.Sb?"12pt ArialMT":"12pt Arial",d.fillStyle=m?"#f00":"#999",d.du="middle",b=Math.round(100*this.Be)+"%",a=d.measureText?d.measureText(b):null,d.fillText(b, l-(a?a.width:0)/2,f))}this.zm=this.Be}setTimeout(function(d){return function(){d.go()}}(this),this.tb?10:100)}}};p.prototype.xr=function(){this.Ya&&(this.canvas.parentNode.removeChild(this.Ya),this.Ya=this.fk=null);this.si=Date.now();this.ue=T();var d,l,a;if(this.Lk)for(d=0,l=this.m.length;d<l;d++)a=this.m[d],a.A||a.Fj||!a.ia.Jd||a.T();else this.qe=!1;d=0;for(l=this.pc.length;d<l;d++)this.pc[d].Wp();2<=this.kb&&(d=this.Ma/this.La,l=this.width/this.height,this.Ef=2!==this.kb&&l>d||2===this.kb&&l<d? this.height/this.La:this.width/this.Ma);this.Ml?this.$e[this.Ml].wk():this.pc[0].wk();this.Lk||(this.df=1,this.trigger(W.prototype.e.Vk,null));navigator.splashscreen&&navigator.splashscreen.hide&&navigator.splashscreen.hide();d=0;for(l=this.m.length;d<l;d++)a=this.m[d],a.Yr&&a.Yr();document.hidden||document.webkitHidden||document.mozHidden||document.msHidden?window.cr_setSuspended(!0):this.Mc(!1);this.nc&&AppMobi.webview.execute("onGameReady();")};var n=window.requestAnimationFrame||window.mozRequestAnimationFrame|| window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame;p.prototype.Mc=function(d,l,a){if(this.ba){var f=T();if(a||!this.dg||d){d||(n?this.kk=n(this.Mn):this.Ck=setTimeout(this.Mn,this.oe?1:16));l=l||f;var b=this.kb;((a=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||!!document.msFullscreenElement)&&!this.Rb)||this.bg)&&0<this.he&&(b=this.he);0<b&&(!this.tm||window.self!==window.top)&&(b=window.innerHeight,this.jg===window.innerWidth&& this.ig===b||this.setSize(g(),q()));this.ha||(a?(this.yh||(this.nj=jQuery(this.canvas).css("margin")||"0",this.yh=!0),this.Jh||this.Id||jQuery(this.canvas).css({"margin-left":""+Math.floor((screen.width-this.width/this.devicePixelRatio)/2)+"px","margin-top":""+Math.floor((screen.height-this.height/this.devicePixelRatio)/2)+"px"})):this.yh?(this.Jh||this.Id||jQuery(this.canvas).css("margin",this.nj),this.nj="",this.yh=!1,0===this.kb&&this.setSize(Math.round(this.bn/this.devicePixelRatio),Math.round(this.an/ this.devicePixelRatio),!0)):(this.bn=this.width,this.an=this.height));this.qe&&(a=this.ml(),this.df=this.Be,a&&(this.qe=!1,this.Be=1,this.trigger(W.prototype.e.Vk,null)));this.Sr(l);!this.W&&!this.tb||this.Ij||this.Ig||d||(this.W=!1,this.n?this.Nb():this.Wc(),this.ri&&(this.canvas&&this.canvas.toDataURL&&(this.canvas.toDataURL(this.ri[0],this.ri[1]),this.trigger(W.prototype.e.No,null)),this.ri=null));this.Xt||(this.vf++,this.Of++,this.zh++);this.qg+=T()-f}}};p.prototype.Sr=function(d){var l,a,f,b, k,n,e,c;1E3<=d-this.ue&&(this.ue+=1E3,1E3<=d-this.ue&&(this.ue=d),this.mj=this.zh,this.zh=0,this.Zi=this.qg,this.qg=0);0!==this.Qh&&(l=d-this.Qh,0>l&&(l=0),this.Dd=l/1E3,.5<this.Dd?this.Dd=0:.1<this.Dd&&(this.Dd=.1));this.Qh=d;this.de=this.Dd*this.Og;this.Kd.add(this.de);this.Hi.add(this.Dd);d=(document.mozFullScreen||document.webkitIsFullScreen||document.fullScreen||!!document.msFullscreenElement||this.bg)&&!this.Rb;2<=this.kb||d&&0<this.he?(l=this.Ma/this.La,a=this.width/this.height,f=this.kb,d&& 0<this.he&&(f=this.he),this.Ef=2!==f&&a>l||2===f&&a<l?this.height/this.La:this.width/this.Ma,this.ba&&(this.ba.xn(this.ba.scrollX),this.ba.yn(this.ba.scrollY))):this.Ef=this.pe?this.devicePixelRatio:1;this.$a();this.oc++;this.Lc.rs();this.oc--;this.$a();this.oc++;a=this.$m.wc();d=0;for(l=a.length;d<l;d++)a[d].Yt();d=0;for(l=this.m.length;d<l;d++)if(n=this.m[d],!n.A&&(n.va.length||n.ja.length))for(a=0,f=n.c.length;a<f;a++)for(e=n.c[a],b=0,k=e.F.length;b<k;b++)e.F[b].Mc();d=0;for(l=this.m.length;d< l;d++)if(n=this.m[d],!n.A&&(n.va.length||n.ja.length))for(a=0,f=n.c.length;a<f;a++)for(e=n.c[a],b=0,k=e.F.length;b<k;b++)c=e.F[b],c.hs&&c.hs();a=this.Wj.wc();d=0;for(l=a.length;d<l;d++)a[d].Mc();this.oc--;this.yr();for(d=0;this.Rc&&10>d++;)this.El(this.Rc);d=0;for(l=this.Xc.length;d<l;d++)this.Xc[d].zj=!1;this.ba.fe&&this.ba.fe.xa();this.os.length=0;this.Nj=!1;this.oc++;d=0;for(l=this.m.length;d<l;d++)if(n=this.m[d],!n.A&&(n.va.length||n.ja.length))for(a=0,f=n.c.length;a<f;a++)for(e=n.c[a],b=0,k= e.F.length;b<k;b++)c=e.F[b],c.Bi&&c.Bi();a=this.Xj.wc();d=0;for(l=a.length;d<l;d++)a[d].Bi();this.oc--};p.prototype.El=function(d){var l=this.ba;this.ba.zs();var a,f,b,k,n,e,c;if(this.n)for(a=0,f=this.m.length;a<f;a++)n=this.m[a],n.A||!n.Fi||n.global&&0!==n.c.length||-1!==d.Zf.indexOf(n)||n.Fi();l==d&&(this.Lc.nb.length=0);d.wk();a=0;for(f=this.m.length;a<f;a++)if(n=this.m[a],n.global||n.ia.qi)for(d=0,l=n.c.length;d<l;d++)if(e=n.c[d],e.ak&&e.ak(),e.F)for(b=0,k=e.F.length;b<k;b++)c=e.F[b],c.ak&&c.ak(); this.Nj=this.W=!0;this.$a()};p.prototype.Bk=function(d){this.Wj.add(d)};p.prototype.Bs=function(d){this.Xj.add(d)};p.prototype.Ch=function(d){return d&&-1!==d.rg?this.Dd*d.rg:this.de};p.prototype.Wc=function(){this.ba.Wc(this.aa);this.nc&&this.aa.present()};p.prototype.Nb=function(){this.ba.Nb(this.n);this.n.ls()};p.prototype.Yl=function(d){d=d.toString();return this.ed.hasOwnProperty(d)?this.ed[d]:null};var f=[];p.prototype.Wd=function(d){var a,b;a=d.type.name;var k=null;if(this.ae.hasOwnProperty(a)){if(k= this.ae[a],k.contains(d))return}else k=f.length?f.pop():new fa,this.ae[a]=k;k.add(d);this.Gd=!0;if(d.ub)for(a=0,b=d.siblings.length;a<b;a++)this.Wd(d.siblings[a]);this.Ej&&k.yf.push(d);this.oc++;this.trigger(Object.getPrototypeOf(d.type.ia).e.Oo,d);this.oc--};p.prototype.$a=function(){if(this.Gd){var d,a,f,b,k,n;this.Ej=!0;f=0;for(k=this.jc.length;f<k;++f)for(d=this.jc[f],a=d.type,a.c.push(d),b=0,n=a.ja.length;b<n;++b)a.ja[b].c.push(d),a.ja[b].tf=!0;this.jc.length=0;this.Go();Sa(this.ae);this.Gd= this.Ej=!1}};p.prototype.Go=function(){for(var d in this.ae)this.ae.hasOwnProperty(d)&&this.jo(this.ae[d])};p.prototype.jo=function(d){var a=d.wc(),b=a[0].type,k,n,e,c,s,t;Ta(b.c,d);b.tf=!0;0===b.c.length&&(b.Yg=!1);k=0;for(n=b.ja.length;k<n;++k)t=b.ja[k],Ta(t.c,d),t.tf=!0;k=0;for(n=this.Lc.nb.length;k<n;++k)if(s=this.Lc.nb[k],s.ib.hasOwnProperty(b.index)&&Ta(s.ib[b.index].ad,d),!b.A)for(e=0,c=b.ja.length;e<c;++e)t=b.ja[e],s.ib.hasOwnProperty(t.index)&&Ta(s.ib[t.index].ad,d);if(s=a[0].g){if(s.vc)for(e= s.c,k=0,n=e.length;k<n;++k)c=e[k],d.contains(c)&&(c.ga(),s.yb.update(c,c.lb,null),c.lb.set(0,0,-1,-1));Ta(s.c,d);s.Dg(0)}for(k=0;k<a.length;++k)this.io(a[k],b);d.clear();f.push(d);this.W=!0};p.prototype.io=function(d,a){var f,b,k;f=0;for(b=this.Bl.length;f<b;++f)this.Bl[f](d);d.Ad&&a.mh.update(d,d.Ad,null);(f=d.g)&&f.of(d,!0);if(d.F)for(f=0,b=d.F.length;f<b;++f)k=d.F[f],k.mf&&k.mf(),k.behavior.jf.remove(d);this.$m.remove(d);this.Wj.remove(d);this.Xj.remove(d);d.mf&&d.mf();this.ed.hasOwnProperty(d.uid.toString())&& delete this.ed[d.uid.toString()];this.ai--;100>a.sh.length&&a.sh.push(d)};p.prototype.yl=function(d,a,f,b){if(d.A){var k=P(Math.random()*d.hf.length);return this.yl(d.hf[k],a,f,b)}return d.Mb?this.Cd(d.Mb,a,!1,f,b,!1):null};var s=[];p.prototype.Cd=function(d,a,f,b,k,n){var e,c,t,h;if(!d)return null;var m=this.m[d[1]],p=m.ia.Jd;if(this.qe&&p&&!m.Fj||p&&!this.n&&11===d[0][11])return null;var x=a;p||(a=null);var g;m.sh.length?(g=m.sh.pop(),g.Hb=!0,m.ia.da.call(g,m)):(g=new m.ia.da(m),g.Hb=!1);g.uid= !f||n||this.ed.hasOwnProperty(d[2].toString())?this.sg++:d[2];this.ed[g.uid.toString()]=g;g.qn=this.Ym++;g.ke=m.c.length;e=0;for(c=this.jc.length;e<c;++e)this.jc[e].type===m&&g.ke++;g.Uf=vb;g.toString=wb;t=d[3];if(g.Hb)Sa(g.V);else{g.V={};if("undefined"!==typeof cr_is_preview)for(g.jm=[],g.jm.length=t.length,e=0,c=t.length;e<c;e++)g.jm[e]=t[e][1];g.Ha=[];g.Ha.length=t.length}e=0;for(c=t.length;e<c;e++)g.Ha[e]=t[e][0];if(p){var q=d[0];g.x=ja(b)?q[0]:b;g.y=ja(k)?q[1]:k;g.z=q[2];g.width=q[3];g.height= q[4];g.depth=q[5];g.j=q[6];g.opacity=q[7];g.eb=q[8];g.fb=q[9];g.jb=q[10];e=q[11];!this.n&&m.G.length&&(g.jb=e);g.If=ab(g.jb);this.k&&bb(g,g.jb,this.k);if(g.Hb){e=0;for(c=q[12].length;e<c;e++)for(t=0,h=q[12][e].length;t<h;t++)g.oa[e][t]=q[12][e][t];g.ua.set(0,0,0,0);g.Ad.set(0,0,-1,-1);g.lb.set(0,0,-1,-1);g.qb.Eg(g.ua);g.Ti.length=0}else{g.oa=q[12].slice(0);e=0;for(c=g.oa.length;e<c;e++)g.oa[e]=q[12][e].slice(0);g.U=[];g.qd=[];g.qd.length=m.G.length;g.ua=new Q(0,0,0,0);g.Ad=new Q(0,0,-1,-1);g.lb=new Q(0, 0,-1,-1);g.qb=new za;g.Ti=[];g.ka=zb;g.Jt=Ab;g.ab=Bb;g.ga=Cb;g.Gs=Db;g.Yn=Eb;g.Qb=Fb}g.Ng=!1;g.Es=0;g.Ds=0;g.Cs=null;14===q.length&&(g.Ng=!0,g.Es=q[13][0],g.Ds=q[13][1],g.Cs=q[13][2]);e=0;for(c=m.G.length;e<c;e++)g.qd[e]=!0;g.md=Gb;g.md();g.Zn=!!g.U.length;g.Si=!0;g.Vi=!0;m.Xg=!0;g.visible=!0;g.rg=-1;g.g=a;g.xc=a.c.length;"undefined"===typeof g.Y&&(g.Y=null);this.W=g.$d=!0}var F;e=s.length=0;for(c=m.ja.length;e<c;e++)s.push.apply(s,m.ja[e].va);s.push.apply(s,m.va);if(g.Hb)for(e=0,c=s.length;e<c;e++){var r= s[e];F=g.F[e];F.Hb=!0;r.behavior.da.call(F,r,g);q=d[4][e];t=0;for(h=q.length;t<h;t++)F.D[t]=q[t];F.T();r.behavior.jf.add(g)}else for(g.F=[],e=0,c=s.length;e<c;e++)r=s[e],F=new r.behavior.da(r,g),F.Hb=!1,F.D=d[4][e].slice(0),F.T(),g.F.push(F),r.behavior.jf.add(g);q=d[5];if(g.Hb)for(e=0,c=q.length;e<c;e++)g.D[e]=q[e];else g.D=q.slice(0);this.jc.push(g);this.Gd=!0;a&&(a.Df(g,!0),1!==a.Yb||1!==a.Zb)&&(m.Yg=!0);this.ai++;if(m.ub){if(g.ub=!0,g.Hb?g.siblings.length=0:g.siblings=[],!f&&!n){e=0;for(c=m.rb.length;e< c;e++)if(m.rb[e]!==m){if(!m.rb[e].Mb)return null;g.siblings.push(this.Cd(m.rb[e].Mb,x,!1,p?g.x:b,p?g.y:k,!0))}e=0;for(c=g.siblings.length;e<c;e++)for(g.siblings[e].siblings.push(g),t=0;t<c;t++)e!==t&&g.siblings[e].siblings.push(g.siblings[t])}}else g.ub=!1,g.siblings=null;g.T();e=0;for(c=g.F.length;e<c;e++)g.F[e].gs&&g.F[e].gs();return g};p.prototype.uj=function(d){var a,f;a=0;for(f=this.ba.I.length;a<f;a++){var b=this.ba.I[a];if(db(b.name,d))return b}return null};p.prototype.Sf=function(d){d=P(d); 0>d&&(d=0);d>=this.ba.I.length&&(d=this.ba.I.length-1);return this.ba.I[d]};p.prototype.Yi=function(d){var a,f;a=0;for(f=d.length;a<f;a++)d[a].P().X=!0};p.prototype.Ag=function(d){var a,f;a=0;for(f=d.length;a<f;a++)d[a].Ag()};p.prototype.Ce=function(d){var a,f;a=0;for(f=d.length;a<f;a++)d[a].Ce()};p.prototype.Hc=function(d){var a,f;a=0;for(f=d.length;a<f;a++)d[a].Hc()};p.prototype.Wn=function(d){if(d.Xg){var a,f,b=d.c;a=0;for(f=b.length;a<f;++a)b[a].Yn();b=this.jc;a=0;for(f=b.length;a<f;++a)b[a].type=== d&&b[a].Yn();d.Xg=!1}};p.prototype.Zq=function(d,a,f,b){var e,k,n=d?1!==d.Yb||1!==d.Zb:!1;if(a.A)for(d=0,e=a.hf.length;d<e;++d)k=a.hf[d],n||k.Yg?Ca(b,k.c):(this.Wn(k),k.mh.li(f,b));else n||a.Yg?Ca(b,a.c):(this.Wn(a),a.mh.li(f,b))};p.prototype.xi=function(d,a,f){var b=d.P(),e,k,n,c,t,s;if(b.X)for(b.X=!1,e=b.c.length=0,c=d.c.length;e<c;e++)n=d.c[e],n.ga(),t=n.g.Wa(a,f,!0),s=n.g.Wa(a,f,!1),n.ab(t,s)&&b.c.push(n);else{e=k=0;for(c=b.c.length;e<c;e++)n=b.c[e],n.ga(),t=n.g.Wa(a,f,!0),s=n.g.Wa(a,f,!1),n.ab(t, s)&&(b.c[k]=b.c[e],k++);b.c.length=k}d.td();return b.yj()};p.prototype.As=function(d,a){if(!(d&&a&&d!==a&&d.$d&&a.$d))return!1;d.ga();a.ga();var f=d.g,b=a.g,e,k,n,c,t,s,m,h;if(f===b||f.Yb===b.Yb&&b.Zb===b.Zb&&f.scale===b.scale&&f.j===b.j&&f.yc===b.yc){if(!d.ua.Er(a.ua)||!d.qb.km(a.qb)||d.Ng&&a.Ng)return!1;if(d.Ng)return this.Ln(d,a);if(a.Ng)return this.Ln(a,d);m=d.Y&&!d.Y.Ve();e=a.Y&&!a.Y.Ve();if(!m&&!e)return!0;m?(d.Y.Ne(d.width,d.height,d.j),m=d.Y):(this.tc.rf(d.qb,d.x,d.y,d.width,d.height),m=this.tc); e?(a.Y.Ne(a.width,a.height,a.j),h=a.Y):(this.tc.rf(a.qb,a.x,a.y,a.width,a.height),h=this.tc);return m.$f(h,a.x-d.x,a.y-d.y)}m=d.Y&&!d.Y.Ve();e=a.Y&&!a.Y.Ve();m?(d.Y.Ne(d.width,d.height,d.j),this.tc.Dn(d.Y)):this.tc.rf(d.qb,d.x,d.y,d.width,d.height);m=this.tc;e?(a.Y.Ne(a.width,a.height,a.j),this.yk.Dn(a.Y)):this.yk.rf(a.qb,a.x,a.y,a.width,a.height);h=this.yk;e=0;for(k=m.qc;e<k;e++)n=2*e,c=n+1,t=m.Na[n],s=m.Na[c],m.Na[n]=f.gb(t+d.x,s+d.y,!0),m.Na[c]=f.gb(t+d.x,s+d.y,!1);m.ga();e=0;for(k=h.qc;e<k;e++)n= 2*e,c=n+1,t=h.Na[n],s=h.Na[c],h.Na[n]=b.gb(t+a.x,s+a.y,!0),h.Na[c]=b.gb(t+a.x,s+a.y,!1);h.ga();return m.$f(h,0,0)};var x=new za;new Q(0,0,0,0);var F=[];p.prototype.Ln=function(d,a){var f,b,e,k,n=a.ua,c=d.x,t=d.y;d.Pt(n,F);var s=a.Y&&!a.Y.Ve();f=0;for(b=F.length;f<b;++f)if(e=F[f],k=e.Zt,n.Fr(k,c,t)&&(x.Eg(k),x.offset(c,t),x.km(a.qb)))if(s)if(a.Y.Ne(a.width,a.height,a.j),e.ik){if(e.ik.$f(a.Y,a.x-(c+k.left),a.y-(t+k.top)))return F.length=0,!0}else{if(this.tc.rf(x,0,0,k.right-k.left,k.bottom-k.top),this.tc.$f(a.Y, a.x,a.y))return F.length=0,!0}else if(e.ik){if(this.tc.rf(a.qb,0,0,a.width,a.height),e.ik.$f(this.tc,-(c+k.left),-(t+k.top)))return F.length=0,!0}else return F.length=0,!0;F.length=0;return!1};p.prototype.Rn=function(d,a){if(!a)return!1;var f,b,e,k,n;f=0;for(b=d.va.length;f<b;f++)if(d.va[f].behavior instanceof a)return!0;if(!d.A)for(f=0,b=d.ja.length;f<b;f++)for(n=d.ja[f],e=0,k=n.va.length;e<k;e++)if(n.va[e].behavior instanceof a)return!0;return!1};p.prototype.Sn=function(d){return this.Rn(d,Ub.gt)}; p.prototype.Gk=function(d){return this.Rn(d,Ub.ht)};var t=-1;p.prototype.trigger=function(d,a,f){if(!this.ba)return!1;var b=this.ba.fe;if(!b)return!1;var e=!1,k,n,c;t++;var s=b.cj;n=0;for(c=s.length;n<c;++n)k=this.On(d,a,s[n],f),e=e||k;k=this.On(d,a,b,f);t--;return e||k};p.prototype.On=function(d,a,f,b){var e=!1,k,n,c,t;if(a)for(c=this.Ek(d,a,a.type.name,f,b),e=e||c,t=a.type.ja,k=0,n=t.length;k<n;++k)c=this.Ek(d,a,t[k].name,f,b),e=e||c;else c=this.Ek(d,a,"system",f,b),e=e||c;return e};p.prototype.Ek= function(d,a,f,b,e){var k,n=!1,c=!1,c="undefined"!==typeof e,t=(c?b.Kl:b.Pn)[f];if(!t)return n;var s=null;b=0;for(k=t.length;b<k;++b)if(t[b].method==d){s=t[b].Nf;break}if(!s)return n;d=c?s[e]:s;if(!d)return null;b=0;for(k=d.length;b<k;b++)e=d[b][0],c=d[b][1],c=this.Rq(a,f,e,c),n=n||c;return n};p.prototype.Rq=function(d,a,f,b){var e,k,n=!1;this.Fk++;var c=this.Sa().Ra;c&&this.Ag(c.Sd);var s=1<this.Fk;this.Ag(f.Sd);s&&this.ns();var m=this.ji(f);m.Ra=f;d&&(e=this.types[a].P(),e.X=!1,e.c.length=1,e.c[0]= d,this.types[a].td());d=!0;if(f.parent){a=m.Kn;for(e=f.parent;e;)a.push(e),e=e.parent;a.reverse();e=0;for(k=a.length;e<k;e++)if(!a[e].ts()){d=!1;break}}d&&(this.Of++,f.Wb?f.ss(b):f.xa(),n=n||m.te);this.gi();s&&this.es();this.Hc(f.Sd);c&&this.Hc(c.Sd);this.Gd&&0===this.oc&&0===t&&!this.Gj&&this.$a();this.Fk--;return n};p.prototype.Bh=function(){var d=this.Sa();return d.Ra.Fa[d.wa]};p.prototype.ns=function(){this.Xh++;this.Xh>=this.Sj.length&&this.Sj.push([])};p.prototype.es=function(){this.Xh--};p.prototype.Sl= function(){return this.Sj[this.Xh]};p.prototype.ji=function(d){this.vh++;this.vh>=this.gj.length&&this.gj.push(new Hb);var a=this.Sa();a.reset(d);return a};p.prototype.gi=function(){this.vh--};p.prototype.Sa=function(){return this.gj[this.vh]};p.prototype.rn=function(d){this.Yh++;this.Yh>=this.ff.length&&this.ff.push(ba({name:d,index:0,Fe:!1}));var a=this.Tl();a.name=d;a.index=0;a.Fe=!1;return a};p.prototype.ln=function(){this.Yh--};p.prototype.Tl=function(){return this.ff[this.Yh]};p.prototype.Ul= function(d,a){for(var f,b,e,k,n,c;a;){f=0;for(b=a.cc.length;f<b;f++)if(c=a.cc[f],c instanceof Ib&&db(d,c.name))return c;a=a.parent}f=0;for(b=this.Xc.length;f<b;f++)for(n=this.Xc[f],e=0,k=n.Ed.length;e<k;e++)if(c=n.Ed[e],c instanceof Ib&&db(d,c.name))return c;return null};p.prototype.Wl=function(d){var a,f;a=0;for(f=this.pc.length;a<f;a++)if(this.pc[a].N===d)return this.pc[a];return null};p.prototype.Eh=function(d){var a,f;a=0;for(f=this.m.length;a<f;a++)if(this.m[a].N===d)return this.m[a];return null}; p.prototype.br=function(d){var a,f;a=0;for(f=this.sd.length;a<f;a++)if(this.sd[a].N===d)return this.sd[a];return null};p.prototype.yr=function(){var d=this,a=this.sk,f=this.cd,e=this.Th,k=!1;this.Hn&&(k=!0,a="__c2_continuouspreview",this.Hn=!1);if(a.length){this.$a();f=this.xs();if(window.indexedDB&&!this.tb)u(a,f,function(){B("Saved state to IndexedDB storage ("+f.length+" bytes)");d.cd=f;d.trigger(W.prototype.e.Li,null);d.cd="";k&&b()},function(e){try{localStorage.setItem("__c2save_"+a,f),B("Saved state to WebStorage ("+ f.length+" bytes)"),d.cd=f,d.trigger(W.prototype.e.Li,null),d.cd="",k&&b()}catch(n){B("Failed to save game state: "+e+"; "+n)}});else try{localStorage.setItem("__c2save_"+a,f),B("Saved state to WebStorage ("+f.length+" bytes)"),d.cd=f,this.trigger(W.prototype.e.Li,null),d.cd="",k&&b()}catch(n){B("Error saving to WebStorage: "+n)}this.hb=this.Th=this.sk=""}e.length&&(window.indexedDB&&!this.tb?c(e,function(a){a?(d.hb=a,B("Loaded state from IndexedDB storage ("+d.hb.length+" bytes)")):(d.hb=localStorage.getItem("__c2save_"+ e)||"",B("Loaded state from WebStorage ("+d.hb.length+" bytes)"));d.Ig=!1;d.hb.length||d.trigger(W.prototype.e.Ki,null)},function(){d.hb=localStorage.getItem("__c2save_"+e)||"";B("Loaded state from WebStorage ("+d.hb.length+" bytes)");d.Ig=!1;d.hb.length||d.trigger(W.prototype.e.Ki,null)}):(this.hb=localStorage.getItem("__c2save_"+e)||"",B("Loaded state from WebStorage ("+this.hb.length+" bytes)"),this.Ig=!1,d.hb.length||d.trigger(W.prototype.e.Ki,null)),this.sk=this.Th="");this.hb.length&&(this.$a(), this.Rr(this.hb),this.cd=this.hb,this.trigger(W.prototype.e.Xo,null),this.hb=this.cd="")};p.prototype.xs=function(){var d,a,f,b,e,k,n,c={c2save:!0,version:1,rt:{time:this.Kd.la,walltime:this.Hi.la,timescale:this.Og,tickcount:this.vf,execcount:this.Of,next_uid:this.sg,running_layout:this.ba.N,start_time_offset:Date.now()-this.si},types:{},layouts:{},events:{groups:{},cnds:{},acts:{},vars:{}}};d=0;for(a=this.m.length;d<a;d++)if(e=this.m[d],!e.A&&!this.Sn(e)){k={instances:[]};Ra(e.V)&&(k.ex=h(e.V)); f=0;for(b=e.c.length;f<b;f++)k.instances.push(this.rk(e.c[f]));c.types[e.N.toString()]=k}d=0;for(a=this.pc.length;d<a;d++)f=this.pc[d],c.layouts[f.N.toString()]=f.mb();b=c.events.groups;d=0;for(a=this.sd.length;d<a;d++)f=this.sd[d],b[f.N.toString()]=this.Fh[f.Wf].Vf;a=c.events.cnds;for(n in this.Pe)this.Pe.hasOwnProperty(n)&&(d=this.Pe[n],Ra(d.V)&&(a[n]={ex:h(d.V)}));a=c.events.acts;for(n in this.Me)this.Me.hasOwnProperty(n)&&(d=this.Me[n],Ra(d.V)&&(a[n]={ex:d.V}));a=c.events.vars;for(n in this.zf)this.zf.hasOwnProperty(n)&& (d=this.zf[n],d.Mh||d.parent&&!d.fg||(a[n]=d.data));c.system=this.Lc.mb();return JSON.stringify(c)};p.prototype.tn=function(){var d,a,f,b,e,k;this.ed={};d=0;for(a=this.m.length;d<a;d++)if(f=this.m[d],!f.A)for(b=0,e=f.c.length;b<e;b++)k=f.c[b],this.ed[k.uid.toString()]=k};p.prototype.Rr=function(d){d=JSON.parse(d);if(d.c2save&&!(1<d.version)){var a=d.rt;this.Kd.reset();this.Kd.la=a.time;this.Hi.reset();this.Hi.la=a.walltime||0;this.Og=a.timescale;this.vf=a.tickcount;this.Of=a.execcount;this.si=Date.now()- a.start_time_offset;var f=a.running_layout;if(f!==this.ba.N)if(f=this.Wl(f))this.El(f);else return;var b,e,k,n,c,t,s;t=d.types;for(e in t)if(t.hasOwnProperty(e)&&(n=this.Eh(parseInt(e,10)))&&!n.A&&!this.Sn(n)){t[e].ex?n.V=t[e].ex:Sa(n.V);c=n.c;k=t[e].instances;f=0;for(b=ta(c.length,k.length);f<b;f++)this.Uh(c[f],k[f]);f=k.length;for(b=c.length;f<b;f++)this.Wd(c[f]);f=c.length;for(b=k.length;f<b;f++){c=null;if(n.ia.Jd&&(c=this.ba.Dh(k[f].w.l),!c))continue;c=this.Cd(n.Mb,c,!1,0,0,!0);this.Uh(c,k[f])}n.tf= !0}this.$a();this.tn();b=d.layouts;for(e in b)b.hasOwnProperty(e)&&(f=this.Wl(parseInt(e,10)))&&f.Gb(b[e]);b=d.events.groups;for(e in b)b.hasOwnProperty(e)&&(f=this.br(parseInt(e,10)))&&this.Fh[f.Wf]&&this.Fh[f.Wf].An(b[e]);f=d.events.cnds;for(e in f)f.hasOwnProperty(e)&&this.Pe.hasOwnProperty(e)&&(this.Pe[e].V=f[e].ex);f=d.events.acts;for(e in f)f.hasOwnProperty(e)&&this.Me.hasOwnProperty(e)&&(this.Me[e].V=f[e].ex);f=d.events.vars;for(e in f)f.hasOwnProperty(e)&&this.zf.hasOwnProperty(e)&&(this.zf[e].data= f[e]);this.sg=a.next_uid;this.Lc.Gb(d.system);f=0;for(b=this.m.length;f<b;f++)if(n=this.m[f],!n.A)for(e=0,d=n.c.length;e<d;e++){c=n.c[e];if(n.ub)for(t=c.Uf(),a=c.siblings.length=0,k=n.rb.length;a<k;a++)s=n.rb[a],n!==s&&c.siblings.push(s.c[t]);c.rd&&c.rd();if(c.F)for(a=0,k=c.F.length;a<k;a++)t=c.F[a],t.rd&&t.rd()}this.W=!0}};p.prototype.rk=function(d,a){var f,b,e,k,n;k=d.type;e=k.ia;var c={};a?c.c2=!0:c.uid=d.uid;Ra(d.V)&&(c.ex=h(d.V));if(d.Ha&&d.Ha.length)for(c.ivs={},f=0,b=d.Ha.length;f<b;f++)c.ivs[d.type.Dj[f].toString()]= d.Ha[f];if(e.Jd){e={x:d.x,y:d.y,w:d.width,h:d.height,l:d.g.N,zi:d.Qb()};0!==d.j&&(e.a=d.j);1!==d.opacity&&(e.o=d.opacity);.5!==d.eb&&(e.hX=d.eb);.5!==d.fb&&(e.hY=d.fb);0!==d.jb&&(e.bm=d.jb);d.visible||(e.v=d.visible);d.$d||(e.ce=d.$d);-1!==d.rg&&(e.mts=d.rg);if(k.G.length)for(e.fx=[],f=0,b=k.G.length;f<b;f++)n=k.G[f],e.fx.push({name:n.name,active:d.qd[n.index],params:d.oa[n.index]});c.w=e}if(d.F&&d.F.length)for(c.behs={},f=0,b=d.F.length;f<b;f++)k=d.F[f],k.mb&&(c.behs[k.type.N.toString()]=k.mb()); d.mb&&(c.data=d.mb());return c};p.prototype.dr=function(d,a){var f,b;f=0;for(b=d.Dj.length;f<b;f++)if(d.Dj[f]===a)return f;return-1};p.prototype.Yq=function(d,a){var f,b;f=0;for(b=d.F.length;f<b;f++)if(d.F[f].type.N===a)return f;return-1};p.prototype.Uh=function(d,a,f){var b,e,k,n,c;c=d.type;k=c.ia;if(f){if(!a.c2)return}else d.uid=a.uid;a.ex?d.V=a.ex:Sa(d.V);if(e=a.ivs)for(b in e)e.hasOwnProperty(b)&&(f=this.dr(c,parseInt(b,10)),0>f||f>=d.Ha.length||(d.Ha[f]=e[b]));if(k.Jd){k=a.w;d.g.N!==k.l&&(f= d.g,d.g=this.ba.Dh(k.l),d.g?(f.of(d,!0),d.g.Df(d,!0),d.ka(),d.g.Dg(0)):(d.g=f,this.Wd(d)));d.x=k.x;d.y=k.y;d.width=k.w;d.height=k.h;d.xc=k.zi;d.j=k.hasOwnProperty("a")?k.a:0;d.opacity=k.hasOwnProperty("o")?k.o:1;d.eb=k.hasOwnProperty("hX")?k.hX:.5;d.fb=k.hasOwnProperty("hY")?k.hY:.5;d.visible=k.hasOwnProperty("v")?k.v:!0;d.$d=k.hasOwnProperty("ce")?k.ce:!0;d.rg=k.hasOwnProperty("mts")?k.mts:-1;d.jb=k.hasOwnProperty("bm")?k.bm:0;d.If=ab(d.jb);this.k&&bb(d,d.jb,this.k);d.ka();if(k.hasOwnProperty("fx"))for(f= 0,e=k.fx.length;f<e;f++)n=c.sj(k.fx[f].name),0>n||(d.qd[n]=k.fx[f].active,d.oa[n]=k.fx[f].params);d.md()}if(c=a.behs)for(b in c)c.hasOwnProperty(b)&&(k=this.Yq(d,parseInt(b,10)),0>k||d.F[k].Gb(c[b]));a.data&&d.Gb(a.data)};Jb=function(d){return new p(document.getElementById(d))};Kb=function(d,a){return new p({dc:!0,width:d,height:a})};window.cr_createRuntime=Jb;window.cr_createDCRuntime=Kb;window.createCocoonJSRuntime=function(){window.c2cocoonjs=!0;var d=document.createElement("screencanvas")||document.createElement("canvas"); d.au=!0;document.body.appendChild(d);d=new p(d);window.c2runtime=d;window.addEventListener("orientationchange",function(){window.c2runtime.setSize(window.innerWidth,window.innerHeight)});window.c2runtime.setSize(window.innerWidth,window.innerHeight);return d};window.createEjectaRuntime=function(){var d=new p(document.getElementById("canvas"));window.c2runtime=d;window.c2runtime.setSize(window.innerWidth,window.innerHeight);return d}})(); window.cr_getC2Runtime=function(){var g=document.getElementById("c2canvas");return g?g.c2runtime:window.c2runtime?window.c2runtime:null};window.cr_sizeCanvas=function(g,q){if(0!==g&&0!==q){var p=window.cr_getC2Runtime();p&&p.setSize(g,q)}};window.cr_setSuspended=function(g){var q=window.cr_getC2Runtime();q&&q.setSuspended(g)}; (function(){function g(a,b){this.b=a;this.fe=null;this.scrollX=this.b.Ma/2;this.scrollY=this.b.La/2;this.scale=1;this.j=0;this.Se=!0;this.name=b[0];this.width=b[1];this.height=b[2];this.Tn=b[3];this.Gn=b[4];this.N=b[5];var e=b[6],f,c;this.I=[];this.Zf=[];f=0;for(c=e.length;f<c;f++){var m=new Lb(this,e[f]);m.Zm=f;this.I.push(m)}e=b[7];this.me=[];f=0;for(c=e.length;f<c;f++){var m=e[f],h=this.b.m[m[1]];h.Mb||(h.Mb=m);this.me.push(m);-1===this.Zf.indexOf(h)&&this.Zf.push(h)}this.G=[];this.U=[];this.oa= [];f=0;for(c=b[8].length;f<c;f++)this.G.push({id:b[8][f][0],name:b[8][f][1],Za:-1,Va:!0,index:f}),this.oa.push(b[8][f][2].slice(0));this.md();this.Cg=new Q(0,0,1,1);this.lk=new Q(0,0,1,1);this.Nd={}}function q(a,b){return a.xc-b.xc}function p(a,b){this.Ja=a;this.b=a.b;this.c=[];this.scale=1;this.j=0;this.be=!1;this.kd=new Q(0,0,0,0);this.Nn=new za;this.za=this.ra=this.Aa=this.qa=0;this.Ie=!1;this.od=-1;this.name=b[0];this.index=b[1];this.N=b[2];this.visible=b[3];this.ud=b[4];this.ld=b[5];this.Yb= b[6];this.Zb=b[7];this.opacity=b[8];this.lj=b[9];this.vc=b[10];this.yc=b[11];this.jb=b[12];this.pq=b[13];this.If="source-over";this.bb=this.cb=0;this.yb=null;this.Ze=r();this.gd=!0;this.Ph=new Q(0,0,-1,-1);this.Kb=new Q(0,0,-1,-1);this.vc&&(this.yb=new $a(this.b.Ma,this.b.La));this.Od=!1;var e=b[14],f,c;this.Jn=[];this.Eb=[];this.Kf=[];f=0;for(c=e.length;f<c;f++){var m=e[f],h=this.b.m[m[1]];h.Mb||(h.Mb=m,h.Yp=this.index);this.Eb.push(m);-1===this.Ja.Zf.indexOf(h)&&this.Ja.Zf.push(h)}R(this.Jn,this.Eb); this.G=[];this.U=[];this.oa=[];f=0;for(c=b[15].length;f<c;f++)this.G.push({id:b[15][f][0],name:b[15][f][1],Za:-1,Va:!0,index:f}),this.oa.push(b[15][f][2].slice(0));this.md();this.Cg=new Q(0,0,1,1);this.lk=new Q(0,0,1,1)}function r(){return h.length?h.pop():[]}function u(a){a.length=0;h.push(a)}g.prototype.ws=function(a){var b=a.type.N.toString();this.Nd.hasOwnProperty(b)||(this.Nd[b]=[]);this.Nd[b].push(this.b.rk(a))};g.prototype.cm=function(){var a=this.I[0];return!a.ld&&1===a.opacity&&!a.lj&&a.visible}; g.prototype.md=function(){this.U.length=0;var a,b,e;a=0;for(b=this.G.length;a<b;a++)e=this.G[a],e.Va&&this.U.push(e)};g.prototype.rj=function(a){var b,e,f;b=0;for(e=this.G.length;b<e;b++)if(f=this.G[b],f.name===a)return f;return null};var c=[],b=!0;g.prototype.wk=function(){this.Gn&&(this.fe=this.b.hj[this.Gn],this.fe.Hk());this.b.ba=this;this.scrollX=this.b.Ma/2;this.scrollY=this.b.La/2;var a,e,n,f,s,m,h;a=0;for(n=this.b.m.length;a<n;a++)if(e=this.b.m[a],!e.A)for(s=e.c,e=0,f=s.length;e<f;e++)if(m= s[e],m.g){var t=m.g.Zm;t>=this.I.length&&(t=this.I.length-1);m.g=this.I[t];-1===m.g.c.indexOf(m)&&m.g.c.push(m);m.g.Ie=!0}if(!b)for(a=0,n=this.I.length;a<n;++a)this.I[a].c.sort(q);c.length=0;this.Rp();a=0;for(n=this.I.length;a<n;a++)m=this.I[a],m.Xp(),m.Jk();s=!1;if(!this.Se){for(h in this.Nd)if(this.Nd.hasOwnProperty(h)&&(e=this.b.Eh(parseInt(h,10)))&&!e.A&&this.b.Gk(e)){f=this.Nd[h];a=0;for(n=f.length;a<n;a++){m=null;if(e.ia.Jd&&(m=this.Dh(f[a].w.l),!m))continue;m=this.b.Cd(e.Mb,m,!1,0,0,!0);this.b.Uh(m, f[a]);s=!0;c.push(m)}f.length=0}a=0;for(n=this.I.length;a<n;a++)this.I[a].c.sort(q),this.I[a].Ie=!0}s&&(this.b.$a(),this.b.tn());for(a=0;a<c.length;a++)if(m=c[a],m.type.ub)for(n=m.Uf(),e=0,f=m.type.rb.length;e<f;e++)h=m.type.rb[e],m.type!==h&&(h.c.length>n?m.siblings.push(h.c[n]):h.Mb&&(s=this.b.Cd(h.Mb,m.g,!0,m.x,m.y,!0),this.b.$a(),h.Gi(),m.siblings.push(s),c.push(s)));a=0;for(n=this.me.length;a<n;a++)this.b.Cd(this.me[a],null,!0);this.b.Rc=null;this.b.$a();if(this.b.aa&&!this.b.ha)for(a=0,n=this.b.m.length;a< n;a++)h=this.b.m[a],!h.A&&h.c.length&&h.hi&&h.hi(this.b.aa);a=0;for(n=c.length;a<n;a++)m=c[a],this.b.trigger(Object.getPrototypeOf(m.type.ia).e.Wg,m);c.length=0;this.b.trigger(W.prototype.e.Uk,null);this.Se=!1};g.prototype.Wp=function(){var a,b,e,f,c;b=a=0;for(e=this.me.length;a<e;a++)f=this.me[a],c=this.b.m[f[1]],c.global?this.b.Cd(f,null,!0):(this.me[b]=f,b++);this.me.length=b};g.prototype.zs=function(){this.b.trigger(W.prototype.e.Tk,null);this.b.Lc.nb.length=0;var a,e,c,f,s,m;if(!this.Se)for(a= 0,e=this.I.length;a<e;a++)for(this.I[a].Kk(),s=this.I[a].c,c=0,f=s.length;c<f;c++)m=s[c],m.type.global||this.b.Gk(m.type)&&this.ws(m);a=0;for(e=this.I.length;a<e;a++){s=this.I[a].c;c=0;for(f=s.length;c<f;c++)m=s[c],m.type.global||this.b.Wd(m);this.b.$a();s.length=0;this.I[a].Ie=!0}a=0;for(e=this.b.m.length;a<e;a++)if(s=this.b.m[a],!(s.global||s.ia.Jd||s.ia.qi||s.A)){c=0;for(f=s.c.length;c<f;c++)this.b.Wd(s.c[c]);this.b.$a()}b=!1};new Q(0,0,0,0);g.prototype.Wc=function(a){var b,e=a,f=!1,c=!this.b.Ob; c&&(this.b.Sh||(this.b.Sh=document.createElement("canvas"),b=this.b.Sh,b.width=this.b.L,b.height=this.b.K,this.b.Bm=b.getContext("2d"),f=!0),b=this.b.Sh,e=this.b.Bm,b.width!==this.b.L&&(b.width=this.b.L,f=!0),b.height!==this.b.K&&(b.height=this.b.K,f=!0),f&&(e.webkitImageSmoothingEnabled=this.b.S,e.mozImageSmoothingEnabled=this.b.S,e.msImageSmoothingEnabled=this.b.S,e.imageSmoothingEnabled=this.b.S));e.globalAlpha=1;e.globalCompositeOperation="source-over";this.b.Oi&&!this.cm()&&e.clearRect(0,0,this.b.L, this.b.K);var m,h,f=0;for(m=this.I.length;f<m;f++)h=this.I[f],h.visible&&0<h.opacity&&11!==h.jb&&(h.c.length||!h.ld)?h.Wc(e):h.Jk();c&&a.drawImage(b,0,0,this.b.width,this.b.height)};g.prototype.Nb=function(a){var b=0<this.U.length||this.b.xf||!this.b.Ob;if(b){this.b.xb||(this.b.xb=a.Bd(this.b.L,this.b.K,this.b.S));if(this.b.xb.Hf!==this.b.L||this.b.xb.Gf!==this.b.K)a.deleteTexture(this.b.xb),this.b.xb=a.Bd(this.b.L,this.b.K,this.b.S);a.Jc(this.b.xb);this.b.Ob||a.Rd(this.b.L,this.b.K)}else this.b.xb&& (a.Jc(null),a.deleteTexture(this.b.xb),this.b.xb=null);this.b.Oi&&!this.cm()&&a.clear(0,0,0,0);var e,f,c;e=0;for(f=this.I.length;e<f;e++)c=this.I[e],c.visible&&0<c.opacity&&(c.c.length||!c.ld)?c.Nb(a):c.Jk();b&&(0===this.U.length||1===this.U.length&&this.b.Ob?(1===this.U.length?(b=this.U[0].index,a.Kc(this.U[0].Za),a.qf(null,1/this.b.L,1/this.b.K,0,0,1,1,this.scale,this.j,0,0,this.b.L/2,this.b.K/2,this.oa[b]),a.ii(this.U[0].Za)&&(this.b.W=!0)):a.Kc(0),this.b.Ob||a.Rd(this.b.width,this.b.height),a.Jc(null), a.Ee(1),a.zb(this.b.xb),a.zn(),a.Pd(),a.Vd(),b=this.b.width/2,e=this.b.height/2,a.ki(-b,e,b,e,b,-e,-b,-e),a.zb(null)):this.mk(a,null,null,null))};g.prototype.Tf=function(){return 0<this.U.length||this.b.xf||!this.b.Ob?this.b.xb:null};g.prototype.Xl=function(){var a=this.I[0].mc(),b,e,f;b=1;for(e=this.I.length;b<e;b++)f=this.I[b],(0!==f.Yb||0!==f.Zb)&&f.mc()<a&&(a=f.mc());return a};g.prototype.xn=function(a){if(!this.Tn){var b=1/this.Xl()*this.b.L/2;a>this.width-b&&(a=this.width-b);a<b&&(a=b)}this.scrollX!== a&&(this.scrollX=a,this.b.W=!0)};g.prototype.yn=function(a){if(!this.Tn){var b=1/this.Xl()*this.b.K/2;a>this.height-b&&(a=this.height-b);a<b&&(a=b)}this.scrollY!==a&&(this.scrollY=a,this.b.W=!0)};g.prototype.Rp=function(){this.xn(this.scrollX);this.yn(this.scrollY)};g.prototype.mk=function(a,b,e,f){var c=e?e.U:b?b.U:this.U,m=1,h=0,t=0,d=0,l=this.b.L,g=this.b.K;e?(m=e.g.mc(),h=e.g.lc(),t=e.g.qa,d=e.g.ra,l=e.g.Aa,g=e.g.za):b&&(m=b.mc(),h=b.lc(),t=b.qa,d=b.ra,l=b.Aa,g=b.za);var p=this.b.oj,q,r,u,C,I= 0,na=1,K,G=this.b.L,E=this.b.K,da=G/2,ea=E/2,J=b?b.Cg:this.Cg,y=b?b.lk:this.lk,z=0,N=0,D=0,H=0,A=G,ra=G,L=E,sa=E,ha=u=0,xa=e?e.g.lc():0;if(e){q=0;for(r=c.length;q<r;q++)u+=a.gr(c[q].Za),ha+=a.hr(c[q].Za);C=e.ua;z=b.gb(C.left,C.top,!0,!0);D=b.gb(C.left,C.top,!1,!0);A=b.gb(C.right,C.bottom,!0,!0);L=b.gb(C.right,C.bottom,!1,!0);0!==xa&&(q=b.gb(C.right,C.top,!0,!0),r=b.gb(C.right,C.top,!1,!0),N=b.gb(C.left,C.bottom,!0,!0),H=b.gb(C.left,C.bottom,!1,!0),C=Math.min(z,A,q,N),A=Math.max(z,A,q,N),z=C,C=Math.min(D, L,r,H),L=Math.max(D,L,r,H),D=C);z-=u;D-=ha;A+=u;L+=ha;y.left=z/G;y.top=1-D/E;y.right=A/G;y.bottom=1-L/E;N=z=P(z);H=D=P(D);ra=A=va(A);sa=L=va(L);N-=u;H-=ha;ra+=u;sa+=ha;0>z&&(z=0);0>D&&(D=0);A>G&&(A=G);L>E&&(L=E);0>N&&(N=0);0>H&&(H=0);ra>G&&(ra=G);sa>E&&(sa=E);J.left=z/G;J.top=1-D/E;J.right=A/G;J.bottom=1-L/E}else J.left=y.left=0,J.top=y.top=0,J.right=y.right=1,J.bottom=y.bottom=1;ha=e&&((e.j||xa)&&a.zg(c[0].Za)||0!==u||0!==ha||1!==e.opacity||e.type.ia.Wm)||b&&!e&&1!==b.opacity;a.zn();if(ha){p[I]|| (p[I]=a.Bd(G,E,this.b.S));if(p[I].Hf!==G||p[I].Gf!==E)a.deleteTexture(p[I]),p[I]=a.Bd(G,E,this.b.S);a.Kc(0);a.Jc(p[I]);K=sa-H;a.clearRect(N,E-H-K,ra-N,K);e?e.Nb(a):(a.zb(this.b.Fb),a.Ee(b.opacity),a.Pd(),a.translate(-da,-ea),a.Vd(),a.Ic(z,L,A,L,A,D,z,D,J));y.left=y.top=0;y.right=y.bottom=1;e&&(C=J.top,J.top=J.bottom,J.bottom=C);I=1;na=0}a.Ee(1);u=c.length-1;var xa=a.jk(c[u].Za)||!b&&!e&&!this.b.Ob,ya=0;q=0;for(r=c.length;q<r;q++){p[I]||(p[I]=a.Bd(G,E,this.b.S));if(p[I].Hf!==G||p[I].Gf!==E)a.deleteTexture(p[I]), p[I]=a.Bd(G,E,this.b.S);a.Kc(c[q].Za);ya=c[q].index;a.ii(c[q].Za)&&(this.b.W=!0);0!=q||ha?(a.qf(f,1/G,1/E,y.left,y.top,y.right,y.bottom,m,h,t,d,(t+l)/2,(d+g)/2,e?e.oa[ya]:b?b.oa[ya]:this.oa[ya]),a.zb(null),q!==u||xa?(a.Jc(p[I]),K=sa-H,C=E-H-K,a.clearRect(N,C,ra-N,K)):(e?a.Qd(e.cb,e.bb):b&&a.Qd(b.cb,b.bb),a.Jc(f)),a.zb(p[na]),a.Pd(),a.translate(-da,-ea),a.Vd(),a.Ic(z,L,A,L,A,D,z,D,J),q!==u||xa||a.zb(null)):(a.Jc(p[I]),K=sa-H,C=E-H-K,a.clearRect(N,C,ra-N,K),e?(a.qf(f,1/e.width,1/e.height,y.left,y.top, y.right,y.bottom,m,h,t,d,(t+l)/2,(d+g)/2,e.oa[ya]),e.Nb(a)):(a.qf(f,1/G,1/E,0,0,1,1,m,h,t,d,(t+l)/2,(d+g)/2,b?b.oa[ya]:this.oa[ya]),a.zb(b?this.b.Fb:this.b.xb),a.Pd(),a.translate(-da,-ea),a.Vd(),a.Ic(z,L,A,L,A,D,z,D,J)),y.left=y.top=0,y.right=y.bottom=1,e&&!xa&&(C=L,L=D,D=C));I=0===I?1:0;na=0===I?1:0}xa&&(a.Kc(0),e?a.Qd(e.cb,e.bb):b?a.Qd(b.cb,b.bb):this.b.Ob||(a.Rd(this.b.width,this.b.height),da=this.b.width/2,ea=this.b.height/2,D=z=0,A=this.b.width,L=this.b.height),a.Jc(f),a.zb(p[na]),a.Pd(),a.translate(-da, -ea),a.Vd(),e&&1===c.length&&!ha?a.Ic(z,D,A,D,A,L,z,L,J):a.Ic(z,L,A,L,A,D,z,D,J),a.zb(null))};g.prototype.Dh=function(a){var b,e;b=0;for(e=this.I.length;b<e;b++)if(this.I[b].N===a)return this.I[b];return null};g.prototype.mb=function(){var a,b,e,f={sx:this.scrollX,sy:this.scrollY,s:this.scale,a:this.j,w:this.width,h:this.height,fv:this.Se,persist:this.Nd,fx:[],layers:{}};a=0;for(b=this.G.length;a<b;a++)e=this.G[a],f.fx.push({name:e.name,active:e.Va,params:this.oa[e.index]});a=0;for(b=this.I.length;a< b;a++)e=this.I[a],f.layers[e.N.toString()]=e.mb();return f};g.prototype.Gb=function(a){var b,e,f,c;this.scrollX=a.sx;this.scrollY=a.sy;this.scale=a.s;this.j=a.a;this.width=a.w;this.height=a.h;this.Nd=a.persist;"undefined"!==typeof a.fv&&(this.Se=a.fv);var m=a.fx;b=0;for(e=m.length;b<e;b++)if(f=this.rj(m[b].name))f.Va=m[b].active,this.oa[f.index]=m[b].params;this.md();b=a.layers;for(c in b)b.hasOwnProperty(c)&&(a=this.Dh(parseInt(c,10)))&&a.Gb(b[c])};xb=g;p.prototype.md=function(){this.U.length=0; var a,b,e;a=0;for(b=this.G.length;a<b;a++)e=this.G[a],e.Va&&this.U.push(e)};p.prototype.rj=function(a){var b,e,f;b=0;for(e=this.G.length;b<e;b++)if(f=this.G[b],f.name===a)return f;return null};p.prototype.Xp=function(){var a,b,e,f,m,h;b=a=0;for(e=this.Eb.length;a<e;a++){f=this.Eb[a];m=this.b.m[f[1]];h=this.b.Gk(m);m=!0;if(!h||this.Ja.Se)f=this.b.Cd(f,this,!0),c.push(f),f.type.global&&(m=!1,this.Kf.push(f.uid));m&&(this.Eb[b]=this.Eb[a],b++)}this.Eb.length=b;this.b.$a();!this.b.n&&this.G.length&&(this.jb= this.pq);this.If=ab(this.jb);this.b.k&&bb(this,this.jb,this.b.k);this.gd=!0};p.prototype.of=function(a,b){var e=Da(this.c,a);0>e||(b&&this.vc&&a.lb&&a.lb.right>=a.lb.left&&(a.ga(),this.yb.update(a,a.lb,null),a.lb.set(0,0,-1,-1)),e===this.c.length-1?this.c.pop():(Ba(this.c,e),this.Dg(e)),this.gd=!0)};p.prototype.Df=function(a,b){a.xc=this.c.length;this.c.push(a);b&&this.vc&&a.lb&&a.ka();this.gd=!0};p.prototype.ks=function(a){this.c.unshift(a);this.Dg(0)};p.prototype.Xr=function(a,b,e){var f=a.Qb(); b=b.Qb();Ba(this.c,f);f<b&&b--;e&&b++;b===this.c.length?this.c.push(a):this.c.splice(b,0,a);this.Dg(f<b?f:b)};p.prototype.Dg=function(a){-1===this.od?this.od=a:a<this.od&&(this.od=a);this.gd=this.Ie=!0};p.prototype.Kk=function(){if(this.Ie){-1===this.od&&(this.od=0);var a,b,e;if(this.vc)for(a=this.od,b=this.c.length;a<b;++a)e=this.c[a],e.xc=a,this.yb.Ur(e.lb);else for(a=this.od,b=this.c.length;a<b;++a)this.c[a].xc=a;this.Ie=!1;this.od=-1}};p.prototype.mc=function(a){return this.er()*(this.b.Ob||a? this.b.Ef:1)};p.prototype.er=function(){return(this.scale*this.Ja.scale-1)*this.yc+1};p.prototype.lc=function(){return this.be?0:Ha(this.Ja.j+this.j)};var h=[],e=[],m=[];p.prototype.Zl=function(){this.Kk();this.yb.li(this.qa,this.ra,this.Aa,this.za,m);if(!m.length)return r();if(1===m.length){var a=r();R(a,m[0]);m.length=0;return a}for(var b=!0;1<m.length;){for(var a=m,c=void 0,f=void 0,h=void 0,g=void 0,p=void 0,c=0,f=a.length;c<f-1;c+=2){var h=a[c],g=a[c+1],p=r(),t=h,d=g,l=p,q=0,w=0,aa=0,pa=t.length, qa=d.length,C=void 0,I=void 0;for(l.length=pa+qa;q<pa&&w<qa;++aa)C=t[q],I=d[w],C.xc<I.xc?(l[aa]=C,++q):(l[aa]=I,++w);for(;q<pa;++q,++aa)l[aa]=t[q];for(;w<qa;++w,++aa)l[aa]=d[w];b||(u(h),u(g));e.push(p)}1===f%2&&(b?(h=r(),R(h,a[f-1]),e.push(h)):e.push(a[f-1]));R(a,e);e.length=0;b=!1}a=m[0];m.length=0;return a};p.prototype.Wc=function(a){this.Od=this.lj||1!==this.opacity||0!==this.jb;var b=this.b.canvas,e=a,f=!1;this.Od&&(this.b.Rh||(this.b.Rh=document.createElement("canvas"),b=this.b.Rh,b.width=this.b.L, b.height=this.b.K,this.b.Am=b.getContext("2d"),f=!0),b=this.b.Rh,e=this.b.Am,b.width!==this.b.L&&(b.width=this.b.L,f=!0),b.height!==this.b.K&&(b.height=this.b.K,f=!0),f&&(e.webkitImageSmoothingEnabled=this.b.S,e.mozImageSmoothingEnabled=this.b.S,e.msImageSmoothingEnabled=this.b.S,e.imageSmoothingEnabled=this.b.S),this.ld&&e.clearRect(0,0,this.b.L,this.b.K));e.globalAlpha=1;e.globalCompositeOperation="source-over";this.ld||(e.fillStyle="rgb("+this.ud[0]+","+this.ud[1]+","+this.ud[2]+")",e.fillRect(0, 0,this.b.L,this.b.K));e.save();this.be=!0;var f=this.Wa(0,0,!0,!0),c=this.Wa(0,0,!1,!0);this.be=!1;this.b.Gc&&(f=Math.round(f),c=Math.round(c));this.ok(f,c,e);var m=this.mc();e.scale(m,m);e.translate(-f,-c);this.vc?(this.Kb.left=this.yb.Ab(this.qa),this.Kb.top=this.yb.Bb(this.ra),this.Kb.right=this.yb.Ab(this.Aa),this.Kb.bottom=this.yb.Bb(this.za),this.gd||!this.Kb.uh(this.Ph)?(u(this.Ze),f=this.Zl(),this.gd=!1,this.Ph.Jf(this.Kb)):f=this.Ze):f=this.c;for(var h,t=null,c=0,m=f.length;c<m;++c)h=f[c], h!==t&&(this.mq(h,e),t=h);this.vc&&(this.Ze=f);e.restore();this.Od&&(a.globalCompositeOperation=this.If,a.globalAlpha=this.opacity,a.drawImage(b,0,0))};p.prototype.mq=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.ga();var e=a.ua;e.right<this.qa||e.bottom<this.ra||e.left>this.Aa||e.top>this.za||(b.globalCompositeOperation=a.If,a.Wc(b))}};p.prototype.Jk=function(){this.be=!0;var a=this.Wa(0,0,!0,!0),b=this.Wa(0,0,!1,!0);this.be=!1;this.b.Gc&&(a=Math.round(a),b=Math.round(b));this.ok(a,b, null)};p.prototype.ok=function(a,b,e){var f=this.mc();this.qa=a;this.ra=b;this.Aa=a+1/f*this.b.L;this.za=b+1/f*this.b.K;a=this.lc();0!==a&&(e&&(e.translate(this.b.L/2,this.b.K/2),e.rotate(-a),e.translate(this.b.L/-2,this.b.K/-2)),this.kd.set(this.qa,this.ra,this.Aa,this.za),this.kd.offset((this.qa+this.Aa)/-2,(this.ra+this.za)/-2),this.Nn.En(this.kd,a),this.Nn.ol(this.kd),this.kd.offset((this.qa+this.Aa)/2,(this.ra+this.za)/2),this.qa=this.kd.left,this.ra=this.kd.top,this.Aa=this.kd.right,this.za= this.kd.bottom)};p.prototype.Nb=function(a){var b=0,e=0;if(this.Od=this.lj||1!==this.opacity||0<this.U.length||0!==this.jb){this.b.Fb||(this.b.Fb=a.Bd(this.b.L,this.b.K,this.b.S));if(this.b.Fb.Hf!==this.b.L||this.b.Fb.Gf!==this.b.K)a.deleteTexture(this.b.Fb),this.b.Fb=a.Bd(this.b.L,this.b.K,this.b.S);a.Jc(this.b.Fb);this.ld&&a.clear(0,0,0,0)}this.ld||a.clear(this.ud[0]/255,this.ud[1]/255,this.ud[2]/255,1);this.be=!0;var f=this.Wa(0,0,!0,!0),b=this.Wa(0,0,!1,!0);this.be=!1;this.b.Gc&&(f=Math.round(f), b=Math.round(b));this.ok(f,b,null);f=this.mc();a.Pd();a.scale(f,f);a.vn(-this.lc());a.translate((this.qa+this.Aa)/-2,(this.ra+this.za)/-2);a.Vd();this.vc?(this.Kb.left=this.yb.Ab(this.qa),this.Kb.top=this.yb.Bb(this.ra),this.Kb.right=this.yb.Ab(this.Aa),this.Kb.bottom=this.yb.Bb(this.za),this.gd||!this.Kb.uh(this.Ph)?(u(this.Ze),b=this.Zl(),this.gd=!1,this.Ph.Jf(this.Kb)):b=this.Ze):b=this.c;var c,m,h=null,e=0;for(c=b.length;e<c;++e)m=b[e],m!==h&&(this.nq(b[e],a),h=m);this.vc&&(this.Ze=b);this.Od&& (b=this.U.length?this.U[0].Za:0,e=this.U.length?this.U[0].index:0,0===this.U.length||1===this.U.length&&!a.jk(b)&&1===this.opacity?(1===this.U.length?(a.Kc(b),a.qf(this.Ja.Tf(),1/this.b.L,1/this.b.K,0,0,1,1,f,this.lc(),this.qa,this.ra,(this.qa+this.Aa)/2,(this.ra+this.za)/2,this.oa[e]),a.ii(b)&&(this.b.W=!0)):a.Kc(0),a.Jc(this.Ja.Tf()),a.Ee(this.opacity),a.zb(this.b.Fb),a.Qd(this.cb,this.bb),a.Pd(),a.Vd(),f=this.b.L/2,b=this.b.K/2,a.ki(-f,b,f,b,f,-b,-f,-b),a.zb(null)):this.Ja.mk(a,this,null,this.Ja.Tf()))}; p.prototype.nq=function(a,b){if(a.visible&&0!==a.width&&0!==a.height){a.ga();var e=a.ua;e.right<this.qa||e.bottom<this.ra||e.left>this.Aa||e.top>this.za||(a.Zn?this.oq(a,b):(b.Kc(0),b.Qd(a.cb,a.bb),a.Nb(b)))}};p.prototype.oq=function(a,b){var e=a.U[0].Za,f=a.U[0].index,c=this.mc();if(1!==a.U.length||b.jk(e)||b.ms(e)||(a.j||a.g.lc())&&b.zg(e)||1!==a.opacity||a.type.ia.Wm)this.Ja.mk(b,this,a,this.Od?this.b.Fb:this.Ja.Tf()),b.Pd(),b.scale(c,c),b.vn(-this.lc()),b.translate((this.qa+this.Aa)/-2,(this.ra+ this.za)/-2),b.Vd();else{b.Kc(e);b.Qd(a.cb,a.bb);b.ii(e)&&(this.b.W=!0);var m=0,h=0,t=0,d=0;b.zg(e)&&(e=a.ua,m=this.gb(e.left,e.top,!0,!0),h=this.gb(e.left,e.top,!1,!0),t=this.gb(e.right,e.bottom,!0,!0),e=this.gb(e.right,e.bottom,!1,!0),m/=windowWidth,h=1-h/windowHeight,t/=windowWidth,d=1-e/windowHeight);b.qf(this.Od?this.b.Fb:this.Ja.Tf(),1/a.width,1/a.height,m,h,t,d,c,this.lc(),this.qa,this.ra,(this.qa+this.Aa)/2,(this.ra+this.za)/2,a.oa[f]);a.Nb(b)}};p.prototype.Wa=function(a,b,e,f){var c=this.b.devicePixelRatio; this.b.pe&&(a*=c,b*=c);var c=this.b.gn,m=this.b.hn,c=(this.Ja.scrollX-c)*this.Yb+c,m=(this.Ja.scrollY-m)*this.Zb+m,h=c,t=m,d=1/this.mc(!f);f?(h-=this.b.L*d/2,t-=this.b.K*d/2):(h-=this.b.width*d/2,t-=this.b.height*d/2);h+=a*d;t+=b*d;b=this.lc();0!==b&&(h-=c,t-=m,a=Math.cos(b),b=Math.sin(b),f=h*a-t*b,t=t*a+h*b,h=f+c,t+=m);return e?h:t};p.prototype.gb=function(a,b,e,f){var c=this.b.gn,m=this.b.hn,h=(this.Ja.scrollX-c)*this.Yb+c,t=(this.Ja.scrollY-m)*this.Zb+m,m=h,c=t,d=this.lc();if(0!==d){a-=h;b-=t; var l=Math.cos(-d),d=Math.sin(-d),g=a*l-b*d;b=b*l+a*d;a=g+h;b+=t}h=1/this.mc(!f);f?(m-=this.b.L*h/2,c-=this.b.K*h/2):(m-=this.b.width*h/2,c-=this.b.height*h/2);m=(a-m)/h;c=(b-c)/h;a=this.b.devicePixelRatio;this.b.pe&&!f&&(m/=a,c/=a);return e?m:c};p.prototype.mb=function(){var a,b,e,f={s:this.scale,a:this.j,vl:this.qa,vt:this.ra,vr:this.Aa,vb:this.za,v:this.visible,bc:this.ud,t:this.ld,px:this.Yb,py:this.Zb,o:this.opacity,zr:this.yc,fx:[],cg:this.Kf,instances:[]};a=0;for(b=this.G.length;a<b;a++)e= this.G[a],f.fx.push({name:e.name,active:e.Va,params:this.oa[e.index]});return f};p.prototype.Gb=function(a){var b,e,f;this.scale=a.s;this.j=a.a;this.qa=a.vl;this.ra=a.vt;this.Aa=a.vr;this.za=a.vb;this.visible=a.v;this.ud=a.bc;this.ld=a.t;this.Yb=a.px;this.Zb=a.py;this.opacity=a.o;this.yc=a.zr;this.Kf=a.cg||[];R(this.Eb,this.Jn);var c=new fa;b=0;for(f=this.Kf.length;b<f;++b)c.add(this.Kf[b]);e=b=0;for(f=this.Eb.length;b<f;++b)c.contains(this.Eb[b][2])||(this.Eb[e]=this.Eb[b],++e);this.Eb.length=e; e=a.fx;b=0;for(f=e.length;b<f;b++)if(a=this.rj(e[b].name))a.Va=e[b].active,this.oa[a.index]=e[b].params;this.md();this.c.sort(q);this.Ie=!0};Lb=p})(); (function(){function g(a,d){var b,f=a.length;switch(f){case 0:return!0;case 1:return a[0]===d[0];case 2:return a[0]===d[0]&&a[1]===d[1];default:for(b=0;b<f;b++)if(a[b]!==d[b])return!1;return!0}}function q(a,d){return a.index-d.index}function p(a){var d,b,f,e;2===a.length?a[0].index>a[1].index&&(d=a[0],a[0]=a[1],a[1]=d):2<a.length&&a.sort(q);a.length>=s.length&&(s.length=a.length+1);s[a.length]||(s[a.length]=[]);e=s[a.length];d=0;for(b=e.length;d<b;d++)if(f=e[d],g(a,f))return f;e.push(a);return a} function r(a,d){this.b=a;this.Pn={};this.Kl={};this.zj=!1;this.fm=new fa;this.cj=[];this.Pi=[];this.name=d[0];var b=d[1];this.Ed=[];var f,e;f=0;for(e=b.length;f<e;f++)this.hm(b[f],null,this.Ed)}function u(a){this.type=a;this.c=[];this.O=[];this.X=!0}function c(a,d,b){this.sheet=a;this.parent=d;this.b=a.b;this.R=[];this.Sd=[];this.dm=this.Ci=this.Dk=this.Hh=this.group=this.vk=!1;this.Fa=[];this.fc=[];this.cc=[];this.Wf="";this.Vf=this.Hh=this.group=!1;this.nh=null;b[1]&&(this.Wf=b[1][1].toLowerCase(), this.group=!0,this.Hh=!!b[1][0],this.nh=[],this.Vf=this.Hh,this.b.sd.push(this),this.b.Fh[this.Wf]=this);this.Wb=b[2];this.N=b[4];this.group||(this.b.nl[this.N.toString()]=this);var f=b[5];a=0;for(d=f.length;a<d;a++){var e=new Mb(this,f[a]);e.index=a;this.Fa.push(e);this.jl(e.type)}f=b[6];a=0;for(d=f.length;a<d;a++)e=new Nb(this,f[a]),e.index=a,this.fc.push(e);if(8===b.length)for(b=b[7],a=0,d=b.length;a<d;a++)this.sheet.hm(b[a],this,this.cc);this.Nh=!1;this.Fa.length&&(this.Nh=null==this.Fa[0].type&& this.Fa[0].Xa==W.prototype.e.so)}function b(a,d){var b,f,e;if(a&&(-1===d.indexOf(a)&&d.push(a),a.ub))for(b=0,f=a.rb.length;b<f;b++)e=a.rb[b],a!==e&&-1===d.indexOf(e)&&d.push(e)}function h(a,d){this.Cb=a;this.sheet=a.sheet;this.b=a.b;this.J=[];this.pa=[];this.V={};this.index=-1;this.Bf=!1;this.Xa=this.b.pd(d[1]);this.trigger=0<d[3];this.Jl=2===d[3];this.Ih=d[5];this.Or=d[6];this.N=d[7];this.b.Pe[this.N.toString()]=this;-1===d[0]?(this.type=null,this.xa=this.qk,this.Zd=null,this.ic=-1):(this.type=this.b.m[d[0]], this.xa=this.Or?this.us:this.pk,d[2]?(this.Zd=this.type.Ah(d[2]),this.ic=this.type.pj(d[2])):(this.Zd=null,this.ic=-1),this.Cb.parent&&this.Cb.parent.pi());this.Jl&&(this.xa=this.vs);if(10===d.length){var b,f,e=d[9];b=0;for(f=e.length;b<f;b++){var c=new Ob(this,e[b]);this.J.push(c)}this.pa.length=e.length}}function e(a,d){this.Cb=a;this.sheet=a.sheet;this.b=a.b;this.J=[];this.pa=[];this.V={};this.index=-1;this.Bf=!1;this.Xa=this.b.pd(d[1]);-1===d[0]?(this.type=null,this.xa=this.qk,this.Zd=null,this.ic= -1):(this.type=this.b.m[d[0]],this.xa=this.pk,d[2]?(this.Zd=this.type.Ah(d[2]),this.ic=this.type.pj(d[2])):(this.Zd=null,this.ic=-1));this.N=d[3];this.b.Me[this.N.toString()]=this;if(6===d.length){var b,f,e=d[5];b=0;for(f=e.length;b<f;b++){var c=new Ob(this,e[b]);this.J.push(c)}this.pa.length=e.length}}function m(){F++;x.length===F&&x.push(new Pb);return x[F]}function a(a,d){this.Xb=a;this.Cb=a.Cb;this.sheet=a.sheet;this.b=a.b;this.type=d[0];this.Cc=null;this.jd=0;this.get=null;this.wl=0;this.Ja= null;this.key=0;this.object=null;this.index=0;this.Qg=this.Ge=this.Qg=this.Ge=this.Ll=this.ge=this.Rg=null;this.ec=!1;var b,f,e;switch(d[0]){case 0:case 7:this.Cc=new U(this,d[1]);this.jd=0;this.get=this.mr;break;case 1:this.Cc=new U(this,d[1]);this.jd=0;this.get=this.nr;break;case 5:this.Cc=new U(this,d[1]);this.jd=0;this.get=this.rr;break;case 3:case 8:this.wl=d[1];this.get=this.kr;break;case 6:this.Ja=this.b.$e[d[1]];this.get=this.sr;break;case 9:this.key=d[1];this.get=this.qr;break;case 4:this.object= this.b.m[d[1]];this.get=this.tr;this.Cb.jl(this.object);this.Xb instanceof Nb?this.Cb.pi():this.Cb.parent&&this.Cb.parent.pi();break;case 10:this.index=d[1];a.type.A?(this.get=this.or,this.ec=!0):this.get=this.pr;break;case 11:this.Rg=d[1];this.ge=null;this.get=this.lr;break;case 2:case 12:this.Ll=d[1];this.get=this.jr;break;case 13:for(this.get=this.ur,this.Ge=[],this.Qg=[],b=1,f=d.length;b<f;b++)e=new Ob(this.Xb,d[b]),this.Ge.push(e),this.Qg.push(0)}}function k(a,d,b){this.sheet=a;this.parent=d; this.b=a.b;this.R=[];this.name=b[1];this.Sg=b[2];this.Bj=b[3];this.fg=!!b[4];this.Mh=!!b[5];this.N=b[6];this.b.zf[this.N.toString()]=this;this.data=this.Bj;this.parent?(this.ye=this.fg||this.Mh?-1:this.b.ys++,this.b.Np.push(this)):(this.ye=-1,this.b.Mp.push(this))}function n(a,d,b){this.sheet=a;this.parent=d;this.b=a.b;this.R=[];this.Yf=null;this.Br=b[1];this.Va=!0}function f(){this.Kn=[];this.reset(null)}var s=[];r.prototype.toString=function(){return this.name};r.prototype.hm=function(a,d,b){switch(a[0]){case 0:a= new Qb(this,d,a);if(a.Wb)for(b.push(a),b=0,d=a.Fa.length;b<d;b++)a.Fa[b].trigger&&this.im(a,b);else a.rm()?this.im(a,0):b.push(a);break;case 1:a=new Ib(this,d,a);b.push(a);break;case 2:a=new Rb(this,d,a),b.push(a)}};r.prototype.ta=function(){var a,d;a=0;for(d=this.Ed.length;a<d;a++)this.Ed[a].ta(a<d-1&&this.Ed[a+1].Nh)};r.prototype.Hk=function(){this.cj.length=0;this.Pi.length=0;this.il(this);this.Pi.length=0};r.prototype.il=function(a){var d,b,f,e,c=a.cj,m=a.Pi,h=this.fm.wc();d=0;for(b=h.length;d< b;++d)f=h[d],e=f.Yf,!f.Va||a===e||-1<m.indexOf(e)||(m.push(e),e.il(a),c.push(e))};r.prototype.xa=function(a){this.b.$t||(this.zj=!0,a||(this.b.Gj=!0));var d,b;d=0;for(b=this.Ed.length;d<b;d++){var f=this.Ed[d];f.xa();this.b.Yi(f.R);this.b.Gd&&this.b.$a()}a||(this.b.Gj=!1)};r.prototype.im=function(a,d){a.Wb||this.b.Ei.push(a);var b,f,e=a.Fa[d],c;c=e.type?e.type.name:"system";var m=(b=e.Jl)?this.Kl:this.Pn;m[c]||(m[c]=[]);c=m[c];m=e.Xa;if(b){if(e.J.length&&(e=e.J[0],1===e.type&&2===e.Cc.type)){e=e.Cc.value.toLowerCase(); b=0;for(f=c.length;b<f;b++)if(c[b].method==m){b=c[b].Nf;b[e]?b[e].push([a,d]):b[e]=[[a,d]];return}b={};b[e]=[[a,d]];c.push({method:m,Nf:b})}}else{b=0;for(f=c.length;b<f;b++)if(c[b].method==m){c[b].Nf.push([a,d]);return}X&&m===X.prototype.e.Le?c.unshift({method:m,Nf:[[a,d]]}):c.push({method:m,Nf:[[a,d]]})}};yb=r;u.prototype.yj=function(){return this.X?this.type.c.length:this.c.length};u.prototype.Pb=function(){return this.X?this.type.c:this.c};u.prototype.yg=function(a){a&&(a.b.Sa().Ra.Wb?(this.X&& (this.c.length=0,R(this.O,a.type.c),this.X=!1),a=this.O.indexOf(a),-1!==a&&(this.c.push(this.O[a]),this.O.splice(a,1))):(this.X=!1,this.c.length=1,this.c[0]=a))};hb=u;window._c2hh_="CFF39BA4132C0EA6E8A7303A5381A8E04976E3E3";c.prototype.ta=function(a){var d,b=this.parent;if(this.group)for(this.Ci=!0;b;){if(!b.group){this.Ci=!1;break}b=b.parent}this.Dk=!this.rm()&&(!this.parent||this.parent.group&&this.parent.Ci);this.dm=!!a;this.Sd=this.R.slice(0);for(b=this.parent;b;){a=0;for(d=b.R.length;a<d;a++)this.Kp(b.R[a]); b=b.parent}this.R=p(this.R);this.Sd=p(this.Sd);a=0;for(d=this.Fa.length;a<d;a++)this.Fa[a].ta();a=0;for(d=this.fc.length;a<d;a++)this.fc[a].ta();a=0;for(d=this.cc.length;a<d;a++)this.cc[a].ta(a<d-1&&this.cc[a+1].Nh)};c.prototype.An=function(a){if(this.Vf!==!!a){this.Vf=!!a;var d;a=0;for(d=this.nh.length;a<d;++a)this.nh[a].Vn();0<d&&this.b.ba.fe&&this.b.ba.fe.Hk()}};c.prototype.jl=function(a){b(a,this.R)};c.prototype.Kp=function(a){b(a,this.Sd)};c.prototype.pi=function(){this.vk=!0;this.parent&&this.parent.pi()}; c.prototype.rm=function(){return this.Fa.length?this.Fa[0].trigger:!1};c.prototype.xa=function(){var a,d=!1,b,f=this.b,e=this.b.Sa();e.Ra=this;var c=this.Fa;this.Nh||(e.fj=!1);if(this.Wb){0===c.length&&(d=!0);e.wa=0;for(a=c.length;e.wa<a;e.wa++)c[e.wa].trigger||(b=c[e.wa].xa())&&(d=!0);(e.te=d)&&this.ni()}else{e.wa=0;for(a=c.length;e.wa<a;e.wa++)if(b=c[e.wa].xa(),!b){e.te=!1;this.Dk&&f.Gd&&f.$a();return}e.te=!0;this.ni()}this.rq(e)};c.prototype.rq=function(a){a.te&&this.dm&&(a.fj=!0);this.Dk&&this.b.Gd&& this.b.$a()};c.prototype.ss=function(a){this.b.Sa().Ra=this;this.Fa[a].xa()&&(this.ni(),this.b.Sa().te=!0)};c.prototype.ni=function(){var a=this.b.Sa(),d;a.ob=0;for(d=this.fc.length;a.ob<d;a.ob++)if(this.fc[a.ob].xa())return;this.wn()};c.prototype.qs=function(){var a=this.b.Sa(),d;for(d=this.fc.length;a.ob<d;a.ob++)if(this.fc[a.ob].xa())return;this.wn()};c.prototype.wn=function(){if(this.cc.length){var a,d,b,f,e=this.cc.length-1;this.b.ji(this);if(this.vk)for(a=0,d=this.cc.length;a<d;a++)b=this.cc[a], (f=!this.Ci||!this.group&&a<e)&&this.b.Ce(b.R),b.xa(),f?this.b.Hc(b.R):this.b.Yi(b.R);else for(a=0,d=this.cc.length;a<d;a++)this.cc[a].xa();this.b.gi()}};c.prototype.ts=function(){var a=this.b.Sa();a.Ra=this;var d=!1,b;a.wa=0;for(b=this.Fa.length;a.wa<b;a.wa++)if(this.Fa[a.wa].xa())d=!0;else if(!this.Wb)return!1;return this.Wb?d:!0};c.prototype.De=function(){this.b.Of++;var a=this.b.Sa().wa,d=this.b.ji(this);if(!this.Wb)for(d.wa=a+1,a=this.Fa.length;d.wa<a;d.wa++)if(!this.Fa[d.wa].xa()){this.b.gi(); return}this.ni();this.b.gi()};c.prototype.Ir=function(a){var d=a.index;if(0===d)return!0;for(--d;0<=d;--d)if(this.Fa[d].type===a.type)return!1;return!0};Qb=c;h.prototype.ta=function(){var a,d,b;a=0;for(d=this.J.length;a<d;a++)b=this.J[a],b.ta(),b.ec&&(this.Bf=!0)};h.prototype.vs=function(){return!0};h.prototype.qk=function(){var a,d;a=0;for(d=this.J.length;a<d;a++)this.pa[a]=this.J[a].get();return Pa(this.Xa.apply(this.b.Lc,this.pa),this.Ih)};h.prototype.us=function(){var a,d;a=0;for(d=this.J.length;a< d;a++)this.pa[a]=this.J[a].get();a=this.Xa.apply(this.Zd?this.Zd:this.type,this.pa);this.type.td();return a};h.prototype.pk=function(){var a,d,b,f,e,c,m,h,n=this.type,k=n.P(),s=this.Cb.Wb&&!this.trigger;d=0;var g=n.ub,p=n.A,q=n.Yc,x=this.ic,r=-1<x,F=this.Bf,u=this.J,z=this.pa,N=this.Ih,D=this.Xa,H;if(F)for(d=0,e=u.length;d<e;++d)c=u[d],c.ec||(z[d]=c.get(0));else for(d=0,e=u.length;d<e;++d)z[d]=u[d].get(0);if(k.X){k.c.length=0;k.O.length=0;H=n.c;a=0;for(f=H.length;a<f;++a){h=H[a];if(F)for(d=0,e=u.length;d< e;++d)c=u[d],c.ec&&(z[d]=c.get(a));r?(d=0,p&&(d=h.type.Re[q]),d=D.apply(h.F[x+d],z)):d=D.apply(h,z);(m=Pa(d,N))?k.c.push(h):s&&k.O.push(h)}n.finish&&n.finish(!0);k.X=!1;n.td();return k.yj()}b=0;H=(m=s&&!this.Cb.Ir(this))?k.O:k.c;var A=!1;a=0;for(f=H.length;a<f;++a){h=H[a];if(F)for(d=0,e=u.length;d<e;++d)c=u[d],c.ec&&(z[d]=c.get(a));r?(d=0,p&&(d=h.type.Re[q]),d=D.apply(h.F[x+d],z)):d=D.apply(h,z);if(Pa(d,N))if(A=!0,m){if(k.c.push(h),g)for(d=0,e=h.siblings.length;d<e;d++)c=h.siblings[d],c.type.P().c.push(c)}else{H[b]= h;if(g)for(d=0,e=h.siblings.length;d<e;d++)c=h.siblings[d],c.type.P().c[b]=c;b++}else if(m){H[b]=h;if(g)for(d=0,e=h.siblings.length;d<e;d++)c=h.siblings[d],c.type.P().O[b]=c;b++}else if(s&&(k.O.push(h),g))for(d=0,e=h.siblings.length;d<e;d++)c=h.siblings[d],c.type.P().O.push(c)}H.length=b;if(g)for(p=n.rb,a=0,f=p.length;a<f;a++)h=p[a].P(),m?h.O.length=b:h.c.length=b;b=A;if(m&&!A)for(a=0,f=k.c.length;a<f;a++){h=k.c[a];if(F)for(d=0,e=u.length;d<e;d++)c=u[d],c.ec&&(z[d]=c.get(a));d=r?D.apply(h.F[x],z): D.apply(h,z);if(Pa(d,N)){A=!0;break}}n.finish&&n.finish(b||s);return s?A:k.yj()};Mb=h;e.prototype.ta=function(){var a,d,b;a=0;for(d=this.J.length;a<d;a++)b=this.J[a],b.ta(),b.ec&&(this.Bf=!0)};e.prototype.qk=function(){var a=this.b,d,b,f=this.J,e=this.pa;d=0;for(b=f.length;d<b;++d)e[d]=f[d].get();return this.Xa.apply(a.Lc,e)};e.prototype.pk=function(){var a=this.type,d=this.ic,b=a.Yc,f=this.Bf,e=this.J,c=this.pa,m=this.Xa,h=a.P().Pb(),a=a.A,n=-1<d,k,s,g,p,q,x;if(f)for(s=0,p=e.length;s<p;++s)q=e[s], q.ec||(c[s]=q.get(0));else for(s=0,p=e.length;s<p;++s)c[s]=e[s].get(0);k=0;for(g=h.length;k<g;++k){x=h[k];if(f)for(s=0,p=e.length;s<p;++s)q=e[s],q.ec&&(c[s]=q.get(k));n?(s=0,a&&(s=x.type.Re[b]),m.apply(x.F[d+s],c)):m.apply(x,c)}return!1};Nb=e;var x=[],F=-1;a.prototype.ta=function(){var a,d;if(11===this.type)this.ge=this.b.Ul(this.Rg,this.Cb.parent);else if(13===this.type)for(a=0,d=this.Ge.length;a<d;a++)this.Ge[a].ta();this.Cc&&this.Cc.ta()};a.prototype.Wr=function(a){this.ec||!a||a.ia.qi||(this.ec= !0)};a.prototype.Bn=function(){this.ec=!0};a.prototype.mr=function(a){this.jd=a||0;a=m();this.Cc.get(a);F--;return a.data};a.prototype.nr=function(a){this.jd=a||0;a=m();this.Cc.get(a);F--;return O(a.data)?a.data:""};a.prototype.tr=function(){return this.object};a.prototype.kr=function(){return this.wl};a.prototype.rr=function(a){this.jd=a||0;a=m();this.Cc.get(a);F--;return a.Ia()?this.b.Sf(a.data):this.b.uj(a.data)};a.prototype.sr=function(){return this.Ja};a.prototype.qr=function(){return this.key}; a.prototype.pr=function(){return this.index};a.prototype.or=function(a){a=a||0;var d=this.Xb.type,b=null,b=d.P(),f=b.Pb();if(f.length)b=f[a%f.length].type;else if(b.O.length)b=b.O[a%b.O.length].type;else if(d.c.length)b=d.c[a%d.c.length].type;else return 0;return this.index+b.xh[d.Yc]};a.prototype.lr=function(){return this.ge};a.prototype.jr=function(){return this.Ll};a.prototype.ur=function(){var a,d;a=0;for(d=this.Ge.length;a<d;a++)this.Qg[a]=this.Ge[a].get();return this.Qg};Ob=a;k.prototype.ta= function(){this.R=p(this.R)};k.prototype.hd=function(a){var d=this.b.Sl();this.parent&&!this.fg&&d?(this.ye>=d.length&&(d.length=this.ye+1),d[this.ye]=a):this.data=a};k.prototype.ie=function(){var a=this.b.Sl();return!this.parent||this.fg||!a||this.Mh?this.data:this.ye>=a.length||"undefined"===typeof a[this.ye]?this.Bj:a[this.ye]};k.prototype.xa=function(){!this.parent||this.fg||this.Mh||this.hd(this.Bj)};Ib=k;n.prototype.toString=function(){return"include:"+this.Yf.toString()};n.prototype.ta=function(){this.Yf= this.b.hj[this.Br];this.sheet.fm.add(this);this.R=p(this.R);for(var a=this.parent;a;)a.group&&a.nh.push(this),a=a.parent;this.Vn()};n.prototype.xa=function(){this.parent&&this.b.Ag(this.b.m);this.Yf.zj||this.Yf.xa(!0);this.parent&&this.b.Hc(this.b.m)};n.prototype.Vn=function(){for(var a=this.parent;a;){if(a.group&&!a.Vf){this.Va=!1;return}a=a.parent}this.Va=!0};Rb=n;f.prototype.reset=function(a){this.Ra=a;this.ob=this.wa=0;this.Kn.length=0;this.fj=this.te=!1};f.prototype.om=function(){return this.Ra.vk? !0:this.wa<this.Ra.Fa.length-1?!!this.Ra.R.length:!1};Hb=f})(); (function(){function g(b,c){this.Xb=b;this.b=b.b;this.type=c[0];this.get=[this.Eq,this.Aq,this.Nq,this.Qq,this.tq,this.Oq,this.Iq,this.xq,this.Hq,this.Mq,this.uq,this.Lq,this.yq,this.Jq,this.Fq,this.Gq,this.Bq,this.Cq,this.wq,this.Pq,this.Kq,this.Dq,this.vq,this.zq][this.type];var e=null;this.dd=this.J=this.pa=this.Xa=this.Ai=this.Ua=this.first=this.value=null;this.ic=-1;this.Hd=null;this.ao=-1;this.ge=this.Rg=null;this.pf=!1;switch(this.type){case 0:case 1:case 2:this.value=c[1];break;case 3:this.first= new U(b,c[1]);break;case 18:this.first=new U(b,c[1]);this.Ua=new U(b,c[2]);this.Ai=new U(b,c[3]);break;case 19:this.Xa=this.b.pd(c[1]);this.Xa!==W.prototype.ca.random&&this.Xa!==W.prototype.ca.Tp||this.Xb.Bn();this.pa=[];this.J=[];3===c.length?(e=c[2],this.pa.length=e.length+1):this.pa.length=1;break;case 20:this.dd=this.b.m[c[1]];this.ic=-1;this.Xa=this.b.pd(c[2]);this.pf=c[3];Tb.Function&&this.Xa===Tb.Function.prototype.ca.Rs&&this.Xb.Bn();this.Hd=c[4]?new U(b,c[4]):null;this.pa=[];this.J=[];6=== c.length?(e=c[5],this.pa.length=e.length+1):this.pa.length=1;break;case 21:this.dd=this.b.m[c[1]];this.pf=c[2];this.Hd=c[3]?new U(b,c[3]):null;this.ao=c[4];break;case 22:this.dd=this.b.m[c[1]];this.dd.Ah(c[2]);this.ic=this.dd.pj(c[2]);this.Xa=this.b.pd(c[3]);this.pf=c[4];this.Hd=c[5]?new U(b,c[5]):null;this.pa=[];this.J=[];7===c.length?(e=c[6],this.pa.length=e.length+1):this.pa.length=1;break;case 23:this.Rg=c[1],this.ge=null}this.Xb.Wr(this.dd);4<=this.type&&17>=this.type&&(this.first=new U(b,c[1]), this.Ua=new U(b,c[2]));if(e){var m,a;m=0;for(a=e.length;m<a;m++)this.J.push(new U(b,e[m]))}}function q(){++c;u.length===c&&u.push(new Pb);return u[c]}function p(b,c,e){var m,a;m=0;for(a=b.length;m<a;++m)b[m].get(e),c[m+1]=e.data}function r(b,c){this.type=b||V.Ke;this.data=c||0;this.Ae=null;this.type==V.Ke&&(this.data=Math.floor(this.data))}g.prototype.ta=function(){23===this.type&&(this.ge=this.Xb.b.Ul(this.Rg,this.Xb.Cb.parent));this.first&&this.first.ta();this.Ua&&this.Ua.ta();this.Ai&&this.Ai.ta(); this.Hd&&this.Hd.ta();if(this.J){var b,c;b=0;for(c=this.J.length;b<c;b++)this.J[b].ta()}};var u=[],c=-1;g.prototype.Pq=function(b){var h=this.J,e=this.pa;e[0]=b;b=q();p(h,e,b);--c;this.Xa.apply(this.b.Lc,e)};g.prototype.Kq=function(b){var h=this.dd,e=this.pa,m=this.J,a=this.Hd,k=this.Xa,n=this.Xb.jd,f=h.P(),s=f.Pb();if(!s.length)if(f.O.length)s=f.O;else{this.pf?b.ya(""):b.M(0);return}e[0]=b;b.Ae=h;b=q();p(m,e,b);a&&(a.get(b),b.Ia()&&(n=b.data,s=h.c));--c;h=s.length;if(n>=h||n<=-h)n%=h;0>n&&(n+=h); k.apply(s[n],e)};g.prototype.vq=function(b){var h=this.dd,e=this.pa,m=this.J,a=this.Hd,k=this.ic,n=this.Xa,f=this.Xb.jd,s=h.P(),g=s.Pb();if(!g.length)if(s.O.length)g=s.O;else{this.pf?b.ya(""):b.M(0);return}e[0]=b;b.Ae=h;b=q();p(m,e,b);a&&(a.get(b),b.Ia()&&(f=b.data,g=h.c));--c;m=g.length;if(f>=m||f<=-m)f%=m;0>f&&(f+=m);f=g[f];g=0;h.A&&(g=f.type.Re[h.Yc]);n.apply(f.F[k+g],e)};g.prototype.Dq=function(b){var h=this.Hd,e=this.dd,m=this.ao,a=this.Xb.jd,k=e.P(),n=k.Pb();if(!n.length)if(k.O.length)n=k.O; else{this.pf?b.ya(""):b.M(0);return}if(h){k=q();h.get(k);if(k.Ia()){a=k.data;e=e.c;a%=e.length;0>a&&(a+=e.length);m=e[a].Ha[m];O(m)?b.ya(m):b.u(m);--c;return}--c}h=n.length;if(a>=h||a<=-h)a%=h;0>a&&(a+=h);a=n[a];n=0;e.A&&(n=a.type.xh[e.Yc]);m=a.Ha[m+n];O(m)?b.ya(m):b.u(m)};g.prototype.Eq=function(b){b.type=V.Ke;b.data=this.value};g.prototype.Aq=function(b){b.type=V.Je;b.data=this.value};g.prototype.Nq=function(b){b.type=V.String;b.data=this.value};g.prototype.Qq=function(b){this.first.get(b);b.Ia()&& (b.data=-b.data)};g.prototype.tq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data+=h.data,h.We()&&b.gf());--c};g.prototype.Oq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data-=h.data,h.We()&&b.gf());--c};g.prototype.Iq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data*=h.data,h.We()&&b.gf());--c};g.prototype.xq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data/=h.data,b.gf());--c}; g.prototype.Hq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data%=h.data,h.We()&&b.gf());--c};g.prototype.Mq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data=Math.pow(b.data,h.data),h.We()&&b.gf());--c};g.prototype.uq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()?h.Oh()?b.ya(b.data.toString()+h.data):b.data&&h.data?b.M(1):b.M(0):b.Oh()&&(b.data=h.Oh()?b.data+h.data:b.data+(Math.round(1E10*h.data)/1E10).toString());--c};g.prototype.Lq= function(b){this.first.get(b);var h=q();this.Ua.get(h);b.Ia()&&h.Ia()&&(b.data||h.data?b.M(1):b.M(0));--c};g.prototype.wq=function(b){this.first.get(b);b.data?this.Ua.get(b):this.Ai.get(b)};g.prototype.yq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.M(b.data===h.data?1:0);--c};g.prototype.Jq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.M(b.data!==h.data?1:0);--c};g.prototype.Fq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.M(b.data<h.data?1:0);--c};g.prototype.Gq= function(b){this.first.get(b);var h=q();this.Ua.get(h);b.M(b.data<=h.data?1:0);--c};g.prototype.Bq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.M(b.data>h.data?1:0);--c};g.prototype.Cq=function(b){this.first.get(b);var h=q();this.Ua.get(h);b.M(b.data>=h.data?1:0);--c};g.prototype.zq=function(b){var c=this.ge.ie();M(c)?b.u(c):b.ya(c)};U=g;r.prototype.We=function(){return this.type===V.Je};r.prototype.Ia=function(){return this.type===V.Ke||this.type===V.Je};r.prototype.Oh=function(){return this.type=== V.String};r.prototype.gf=function(){this.We()||(this.Oh()&&(this.data=parseFloat(this.data)),this.type=V.Je)};r.prototype.M=function(b){this.type=V.Ke;this.data=Math.floor(b)};r.prototype.u=function(b){this.type=V.Je;this.data=b};r.prototype.ya=function(b){this.type=V.String;this.data=b};r.prototype.Cn=function(b){M(b)?(this.type=V.Je,this.data=b):O(b)?(this.type=V.String,this.data=b.toString()):(this.type=V.Ke,this.data=0)};Pb=r;V={Ke:0,Je:1,String:2}})();function W(g){this.b=g;this.nb=[]} W.prototype.mb=function(){var g={},q,p,r,u,c,b,h,e;g.waits=[];var m=g.waits,a;q=0;for(p=this.nb.length;q<p;q++){b=this.nb[q];a={t:b.time,st:b.In,s:b.uk,ev:b.Qe.N,sm:[],sols:{}};b.Qe.fc[b.ob]&&(a.act=b.Qe.fc[b.ob].N);r=0;for(u=b.R.length;r<u;r++)a.sm.push(b.R[r].N);for(c in b.ib)if(b.ib.hasOwnProperty(c)){h=this.b.m[parseInt(c,10)];e={sa:b.ib[c].oi,insts:[]};r=0;for(u=b.ib[c].ad.length;r<u;r++)e.insts.push(b.ib[c].ad[r].uid);a.sols[h.N.toString()]=e}m.push(a)}return g}; W.prototype.Gb=function(g){g=g.waits;var q,p,r,u,c,b,h,e,m,a,k;q=this.nb.length=0;for(p=g.length;q<p;q++)if(b=g[q],e=this.b.nl[b.ev.toString()]){m=-1;r=0;for(u=e.fc.length;r<u;r++)if(e.fc[r].N===b.act){m=r;break}if(-1!==m){h={ib:{},R:[],dj:!1};h.time=b.t;h.In=b.st||"";h.uk=!!b.s;h.Qe=e;h.ob=m;r=0;for(u=b.sm.length;r<u;r++)(e=this.b.Eh(b.sm[r]))&&h.R.push(e);for(c in b.sols)if(b.sols.hasOwnProperty(c)&&(e=this.b.Eh(parseInt(c,10)))){m=b.sols[c];a={oi:m.sa,ad:[]};r=0;for(u=m.insts.length;r<u;r++)(k= this.b.Yl(m.insts[r]))&&a.ad.push(k);h.ib[e.index.toString()]=a}this.nb.push(h)}}}; (function(){function g(){}function q(){}function p(){}var r=W.prototype;g.prototype.uo=function(){return!0};g.prototype.Uk=function(){return!0};g.prototype.Tk=function(){return!0};g.prototype.vo=function(b,c,a){var h=this.b.Sa(),n=h.Ra,h=h.om();b=this.b.rn(b);if(a<c)if(h)for(;c>=a&&!b.Fe;--c)this.b.Ce(n.R),b.index=c,n.De(),this.b.Hc(n.R);else for(;c>=a&&!b.Fe;--c)b.index=c,n.De();else if(h)for(;c<=a&&!b.Fe;++c)this.b.Ce(n.R),b.index=c,n.De(),this.b.Hc(n.R);else for(;c<=a&&!b.Fe;++c)b.index=c,n.De(); this.b.ln();return!1};var u=[],c=-1;g.prototype.wo=function(b){var m=b.P();c++;u.length===c&&u.push([]);var a=u[c];R(a,m.Pb());var h=this.b.Sa(),n=h.Ra,f=h.om(),h=this.b.rn(),s,g,p,q,d,l,r=b.ub;if(f)for(f=0,s=a.length;f<s&&!h.Fe;f++){this.b.Ce(n.R);q=a[f];m=b.P();m.X=!1;m.c.length=1;m.c[0]=q;if(r)for(g=0,p=q.siblings.length;g<p;g++)d=q.siblings[g],l=d.type.P(),l.X=!1,l.c.length=1,l.c[0]=d;h.index=f;n.De();this.b.Hc(n.R)}else for(m.X=!1,m.c.length=1,f=0,s=a.length;f<s&&!h.Fe;f++){q=a[f];m.c[0]=q;if(r)for(g= 0,p=q.siblings.length;g<p;g++)d=q.siblings[g],l=d.type.P(),l.X=!1,l.c.length=1,l.c[0]=d;h.index=f;n.De()}a.length=0;this.b.ln();c--;return!1};g.prototype.Dp=function(){var b=this.b.Bh().V;"undefined"===typeof b.TriggerOnce_lastTick&&(b.TriggerOnce_lastTick=-1);var c=b.TriggerOnce_lastTick,a=this.b.vf;b.TriggerOnce_lastTick=a;return this.b.Nj||c!==a-1};g.prototype.to=function(b){var c=this.b.Bh(),a=c.V.Every_lastTime||0,h=this.b.Kd.la;"undefined"===typeof c.V.Every_seconds&&(c.V.Every_seconds=b);var n= c.V.Every_seconds;if(h>=a+n)return c.V.Every_lastTime=a+n,h>=c.V.Every_lastTime+.04&&(c.V.Every_lastTime=h),c.V.Every_seconds=b,!0;h<a-.1&&(c.V.Every_lastTime=h);return!1};g.prototype.oo=function(b,c,a){return Sb(b.ie(),c,a)};g.prototype.ko=function(b,c,a){return b>=c&&b<=a};g.prototype.so=function(){var b=this.b.Sa();return b.fj?!1:!b.te};g.prototype.Vk=function(){return!0};g.prototype.No=function(){return!0};g.prototype.Li=function(){return!0};g.prototype.Xo=function(){return!0};g.prototype.Ki= function(){return!0};g.prototype.fo=function(b,c,a){return La(S(b),S(a))<=S(c)};g.prototype.Co=function(b,c){return Na(S(b),S(c))};g.prototype.Ao=function(b,c,a){b=Ja(b);c=Ja(c);a=Ja(a);return Na(a,c)?Na(b,c)&&!Na(b,a):!(!Na(b,c)&&Na(b,a))};r.e=new g;q.prototype.xo=function(b){this.b.qe||this.b.Rc||(this.b.Rc=b)};q.prototype.po=function(b,c,a,h){if(c&&b&&(c=this.b.yl(b,c,a,h))){this.b.oc++;var n;this.b.trigger(Object.getPrototypeOf(b.ia).e.Wg,c);if(c.ub)for(a=0,h=c.siblings.length;a<h;a++)n=c.siblings[a], this.b.trigger(Object.getPrototypeOf(n.type.ia).e.Wg,n);this.b.oc--;b=b.P();b.X=!1;b.c.length=1;b.c[0]=c;if(c.ub)for(a=0,h=c.siblings.length;a<h;a++)n=c.siblings[a],b=n.type.P(),b.X=!1,b.c.length=1,b.c[0]=n}};q.prototype.wp=function(b,c){0===b.Sg?M(c)?b.hd(c):b.hd(parseFloat(c)):1===b.Sg&&b.hd(c.toString())};q.prototype.eo=function(b,c){0===b.Sg?M(c)?b.hd(b.ie()+c):b.hd(b.ie()+parseFloat(c)):1===b.Sg&&b.hd(b.ie()+c.toString())};q.prototype.Bp=function(b,c){0===b.Sg&&(M(c)?b.hd(b.ie()-c):b.hd(b.ie()- parseFloat(c)))};var b=[],h=[];q.prototype.Ep=function(e){if(!(0>e)){var c,a,k,n=this.b.Sa(),f;f=b.length?b.pop():{ib:{},R:[]};f.dj=!1;f.time=this.b.Kd.la+e;f.In="";f.uk=!1;f.Qe=n.Ra;f.ob=n.ob+1;e=0;for(c=this.b.m.length;e<c;e++)k=this.b.m[e],a=k.P(),a.X&&-1===n.Ra.R.indexOf(k)||(f.R.push(k),k=void 0,k=h.length?h.pop():{ad:[]},k.oi=!1,k.oi=a.X,R(k.ad,a.c),f.ib[e.toString()]=k);this.nb.push(f);return!0}};q.prototype.yo=function(b){if(!this.b.qe&&!this.b.Rc)for(var c in this.b.$e)if(this.b.$e.hasOwnProperty(c)&& db(c,b)){this.b.Rc=this.b.$e[c];break}};q.prototype.hp=function(){if(!this.b.qe&&!this.b.Rc&&this.b.ba){this.b.Rc=this.b.ba;var b,c,a;b=0;for(c=this.b.sd.length;b<c;b++)a=this.b.sd[b],a.An(a.Hh)}};r.C=new q;p.prototype["int"]=function(b,c){O(c)?(b.M(parseInt(c,10)),isNaN(b.data)&&(b.data=0)):b.M(c)};p.prototype["float"]=function(b,c){O(c)?(b.u(parseFloat(c)),isNaN(b.data)&&(b.data=0)):b.u(c)};p.prototype.random=function(b,c,a){void 0===a?b.u(Math.random()*c):b.u(Math.random()*(a-c)+c)};p.prototype.sqrt= function(b,c){b.u(Math.sqrt(c))};p.prototype.abs=function(b,c){b.u(Math.abs(c))};p.prototype.round=function(b,c){b.M(Math.round(c))};p.prototype.floor=function(b,c){b.M(Math.floor(c))};p.prototype.ceil=function(b,c){b.M(Math.ceil(c))};p.prototype.sin=function(b,c){b.u(Math.sin(S(c)))};p.prototype.cos=function(b,c){b.u(Math.cos(S(c)))};p.prototype.tan=function(b,c){b.u(Math.tan(S(c)))};p.prototype.asin=function(b,c){b.u(Fa(Math.asin(c)))};p.prototype.acos=function(b,c){b.u(Fa(Math.acos(c)))};p.prototype.atan= function(b,c){b.u(Fa(Math.atan(c)))};p.prototype.exp=function(b,c){b.u(Math.exp(c))};p.prototype.log10=function(b,c){b.u(Math.log(c)/Math.LN10)};p.prototype.max=function(b){var c=arguments[1];"number"!==typeof c&&(c=0);var a,h,n;a=2;for(h=arguments.length;a<h;a++)n=arguments[a],"number"===typeof n&&c<n&&(c=n);b.u(c)};p.prototype.min=function(b){var c=arguments[1];"number"!==typeof c&&(c=0);var a,h,n;a=2;for(h=arguments.length;a<h;a++)n=arguments[a],"number"===typeof n&&c>n&&(c=n);b.u(c)};p.prototype.de= function(b){b.u(this.b.de)};p.prototype.Og=function(b){b.u(this.b.Og)};p.prototype.time=function(b){b.u(this.b.Kd.la)};p.prototype.vf=function(b){b.M(this.b.vf)};p.prototype.ai=function(b){b.M(this.b.ai)};p.prototype.mj=function(b){b.M(this.b.mj)};p.prototype.Tr=function(b,c){var a,h,n;if(this.b.ff.length)if(c){h=0;for(n=this.b.ff.length;h<n;h++)if(a=this.b.ff[h],a.name===c){b.M(a.index);return}b.M(0)}else a=this.b.Tl(),b.M(a?a.index:-1);else b.M(0)};p.prototype.j=function(b,c,a,h,n){b.u(Fa(Ka(c, a,h,n)))};p.prototype.Qr=function(b,c,a,h){b.u(Qa(c,a,h))};p.prototype.find=function(b,c,a){O(c)&&O(a)?b.M(c.search(new RegExp(Xa(a),"i"))):b.M(-1)};p.prototype.left=function(b,c,a){b.ya(O(c)?c.substr(0,a):"")};p.prototype.right=function(b,c,a){b.ya(O(c)?c.substr(c.length-a):"")};p.prototype.replace=function(b,c,a,h){O(c)&&O(a)&&O(h)?b.ya(c.replace(new RegExp(Xa(a),"gi"),h)):b.ya(O(c)?c:"")};p.prototype.trim=function(b,c){b.ya(O(c)?c.trim():"")};p.prototype.Tp=function(b){var c=P(Math.random()*(arguments.length- 1));b.Cn(arguments[c+1])};p.prototype.Zi=function(b){b.u(this.b.Zi/1E3)};p.prototype.df=function(b){b.u(this.b.df)};r.ca=new p;r.rs=function(){var c,m,a,k,n,f,s=this.b.Sa();c=0;for(a=this.nb.length;c<a;c++){k=this.nb[c];if(-1===k.time){if(!k.uk)continue}else if(k.time>this.b.Kd.la)continue;s.Ra=k.Qe;s.ob=k.ob;s.wa=0;for(m in k.ib)k.ib.hasOwnProperty(m)&&(n=this.b.m[parseInt(m,10)].P(),f=k.ib[m],n.X=f.oi,R(n.c,f.ad),n=f,n.ad.length=0,h.push(n));k.Qe.qs();this.b.Yi(k.R);k.dj=!0}m=c=0;for(a=this.nb.length;c< a;c++)k=this.nb[c],this.nb[m]=k,k.dj?(Sa(k.ib),k.R.length=0,b.push(k)):m++;this.nb.length=m}})(); (function(){gb=function(g,p){var r=g[1],u=g[3],c=g[4],b=g[5],h=g[6],e=g[7],m=g[8];p.e||(p.e={});p.C||(p.C={});p.ca||(p.ca={});var a=p.e,k=p.C,n=p.ca;u&&(a.Qk=function(a,b){return Sb(this.x,a,b)},a.Us=function(a,b){return Sb(this.y,a,b)},a.Ys=function(){var a=this.g;this.ga();var b=this.ua;return!(b.right<a.qa||b.bottom<a.ra||b.left>a.Aa||b.top>a.za)},a.Eo=function(){this.ga();var a=this.ua,b=this.b.ba;return 0>a.right||0>a.bottom||a.left>b.width||a.top>b.height},a.jt=function(a,b,c){var e=this.P(), h=e.Pb();if(!h.length)return!1;var d=h[0],l=d,n=Oa(d.x,d.y,b,c),m,k,g;m=1;for(k=h.length;m<k;m++)if(d=h[m],g=Oa(d.x,d.y,b,c),0===a&&g<n||1===a&&g>n)n=g,l=d;e.yg(l);return!0},k.bl=function(a){this.x!==a&&(this.x=a,this.ka())},k.Dt=function(a){this.y!==a&&(this.y=a,this.ka())},k.tp=function(a,b){if(this.x!==a||this.y!==b)this.x=a,this.y=b,this.ka()},k.At=function(a,b){var c=a.fr(this);if(c){var e;c.tj?(e=c.tj(b,!0),c=c.tj(b,!1)):(e=c.x,c=c.y);if(this.x!==e||this.y!==c)this.x=e,this.y=c,this.ka()}}, k.dt=function(a){0!==a&&(this.x+=Math.cos(this.j)*a,this.y+=Math.sin(this.j)*a,this.ka())},k.ct=function(a,b){0!==b&&(this.x+=Math.cos(S(a))*b,this.y+=Math.sin(S(a))*b,this.ka())},n.dl=function(a){a.u(this.x)},n.el=function(a){a.u(this.y)},n.de=function(a){a.u(this.b.Ch(this))});c&&(a.Ts=function(a,b){return Sb(this.width,a,b)},a.Ss=function(a,b){return Sb(this.height,a,b)},k.yp=function(a){this.width!==a&&(this.width=a,this.ka())},k.zt=function(a){this.height!==a&&(this.height=a,this.ka())},k.up= function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.ka()},n.cl=function(a){a.u(this.width)},n.Rk=function(a){a.u(this.height)},n.Os=function(a){this.ga();a.u(this.ua.left)},n.Qs=function(a){this.ga();a.u(this.ua.top)},n.Ps=function(a){this.ga();a.u(this.ua.right)},n.Ns=function(a){this.ga();a.u(this.ua.bottom)});b&&(a.fo=function(a,b){return La(this.j,S(b))<=S(a)},a.Co=function(a){return Na(this.j,S(a))},a.Ao=function(a,b){var c=Ja(a),e=Ja(b),h=Ha(this.j);return Na(e, c)?Na(h,c)&&!Na(h,e):!(!Na(h,c)&&Na(h,e))},k.tt=function(a){a=S(Ga(a));isNaN(a)||this.j===a||(this.j=a,this.ka())},k.nt=function(a){0===a||isNaN(a)||(this.j+=S(a),this.j=Ha(this.j),this.ka())},k.ot=function(a){0===a||isNaN(a)||(this.j-=S(a),this.j=Ha(this.j),this.ka())},k.pt=function(a,b){var c=Ma(this.j,S(b),S(a));isNaN(c)||this.j===c||(this.j=c,this.ka())},k.qt=function(a,b,c){a=Ma(this.j,Math.atan2(c-this.y,b-this.x),S(a));isNaN(a)||this.j===a||(this.j=a,this.ka())},k.Bt=function(a,b){var c=Math.atan2(b- this.y,a-this.x);isNaN(c)||this.j===c||(this.j=c,this.ka())},n.Ms=function(a){a.u(Ia(this.j))});r||(a.Pk=function(a,b,c){return Sb(this.Ha[a],b,c)},a.Bo=function(a){return this.Ha[a]},a.kt=function(a,b){var c=this.P(),e=c.Pb();if(!e.length)return!1;var h=e[0],d=h,l=h.Ha[b],n,m,k;n=1;for(m=e.length;n<m;n++)if(h=e[n],k=h.Ha[b],0===a&&k<l||1===a&&k>l)l=k,d=h;c.yg(d);return!0},a.it=function(a){var b,c,e,h,d;if(this.b.Bh().Ih){d=this.P();if(d.X)for(d.X=!1,d.c.length=0,d.O.length=0,e=this.c,b=0,c=e.length;b< c;b++)h=e[b],h.uid===a?d.O.push(h):d.c.push(h);else{e=b=0;for(c=d.c.length;b<c;b++)h=d.c[b],d.c[e]=h,h.uid===a?d.O.push(h):e++;d.c.length=e}this.td();return!!d.c.length}h=this.b.Yl(a);if(!h)return!1;d=this.P();if(!d.X&&-1===d.c.indexOf(h))return!1;if(this.A)for(a=h.type.ja,b=0,c=a.length;b<c;b++){if(a[b]===this)return d.yg(h),this.td(),!0}else if(h.type===this)return d.yg(h),this.td(),!0;return!1},a.Wg=function(){return!0},a.Oo=function(){return!0},k.op=function(a,b){var c=this.Ha;M(c[a])?c[a]=M(b)? b:parseFloat(b):O(c[a])&&(c[a]=O(b)?b:b.toString())},k.Ls=function(a,b){var c=this.Ha;M(c[a])?c[a]=M(b)?c[a]+b:c[a]+parseFloat(b):O(c[a])&&(c[a]=O(b)?c[a]+b:c[a]+b.toString())},k.Et=function(a,b){var c=this.Ha;M(c[a])&&(c[a]=M(b)?c[a]-b:c[a]-parseFloat(b))},k.ut=function(a,b){this.Ha[a]=b?1:0},k.Ft=function(a){this.Ha[a]=1-this.Ha[a]},k.qo=function(){this.b.Wd(this)},k.Ho||(k.Ho=function(a){var b,c;try{b=JSON.parse(a)}catch(e){return}this.b.Uh(this,b,!0);this.rd&&this.rd();if(this.F)for(a=0,b=this.F.length;a< b;++a)c=this.F[a],c.rd&&c.rd()}),n.Vs=function(a){var b=a.Ae.c.length,c,e,h;c=0;for(e=this.b.jc.length;c<e;c++)h=this.b.jc[c],a.Ae.A?0<=h.type.ja.indexOf(a.Ae)&&b++:h.type===a.Ae&&b++;a.M(b)},n.mt=function(a){a.M(a.Ae.P().Pb().length)},n.Gt=function(a){a.M(this.uid)},n.Ws=function(a){a.M(this.Uf())},n.Vg||(n.Vg=function(a){a.ya(JSON.stringify(this.b.rk(this,!0)))}));h&&(a.Zs=function(){return this.visible},k.Ct=function(a){!a!==!this.visible&&(this.visible=a,this.b.W=!0)},a.no=function(a,b){return Sb(cb(100* this.opacity),a,b)},k.rp=function(a){a/=100;0>a?a=0:1<a&&(a=1);a!==this.opacity&&(this.opacity=a,this.b.W=!0)},n.Opacity=function(a){a.u(cb(100*this.opacity))});e&&(a.Xs=function(a){return a?this.g===a:!1},a.lt=function(a){var b=this.P(),c=b.Pb();if(!c.length)return!1;var e=c[0],h=e,d,l;d=1;for(l=c.length;d<l;d++)if(e=c[d],0===a){if(e.g.index>h.g.index||e.g.index===h.g.index&&e.Qb()>h.Qb())h=e}else if(e.g.index<h.g.index||e.g.index===h.g.index&&e.Qb()<h.Qb())h=e;b.yg(h);return!0},k.Ko=function(){var a= this.g,b=a.c;b.length&&b[b.length-1]===this||(a.of(this,!1),a.Df(this,!1),this.b.W=!0)},k.et=function(){var a=this.g,b=a.c;b.length&&b[0]===this||(a.of(this,!1),a.ks(this),this.b.W=!0)},k.ft=function(a){a&&a!=this.g&&(this.g.of(this,!0),this.g=a,a.Df(this,!0),this.b.W=!0)},k.It=function(a,b){var c=0===a;if(b){var e=b.$q(this);e&&e.uid!==this.uid&&(this.g.index!==e.g.index&&(this.g.of(this,!0),this.g=e.g,e.g.Df(this,!0)),this.g.Xr(this,e,c),this.b.W=!0)}},n.bt=function(a){a.M(this.g.Zm)},n.$s=function(a){a.ya(this.g.name)}, n.Ht=function(a){a.M(this.Qb())});m&&(k.xt=function(a,b){if(this.b.n){var c=this.type.sj(b);if(!(0>c)){var e=1===a;this.qd[c]!==e&&(this.qd[c]=e,this.md(),this.b.W=!0)}}},k.yt=function(a,b,c){if(this.b.n){var e=this.type.sj(a);0>e||(a=this.type.G[e],e=this.oa[e],b=Math.floor(b),0>b||b>=e.length||(1===this.b.n.ir(a.Za,b)&&(c/=100),e[b]!==c&&(e[b]=c,a.Va&&(this.b.W=!0))))}})};zb=function(){this.Vi=this.Si=!0;this.type.Xg=!0;this.b.W=!0;var g,p,r=this.Ti;g=0;for(p=r.length;g<p;++g)r[g](this);this.g.vc&& this.ga()};Ab=function(g){g&&this.Ti.push(g)};Cb=function(){if(this.Si){var g=this.ua,p=this.qb;g.set(this.x,this.y,this.x+this.width,this.y+this.height);g.offset(-this.eb*this.width,-this.fb*this.height);this.j?(g.offset(-this.x,-this.y),p.En(g,this.j),p.offset(this.x,this.y),p.ol(g)):p.Eg(g);g.normalize();this.Si=!1;this.Gs()}};var g=new Q(0,0,0,0);Db=function(){if(this.g.vc){var q=this.g.yb,p=this.ua;g.set(q.Ab(p.left),q.Bb(p.top),q.Ab(p.right),q.Bb(p.bottom));this.lb.uh(g)||(this.lb.right<this.lb.left? q.update(this,null,g):q.update(this,this.lb,g),this.lb.Jf(g),this.g.gd=!0)}};Eb=function(){if(this.Vi&&this.$d){this.ga();var q=this.type.mh,p=this.ua;g.set(q.Ab(p.left),q.Bb(p.top),q.Ab(p.right),q.Bb(p.bottom));this.Ad.uh(g)||(this.Ad.right<this.Ad.left?q.update(this,null,g):q.update(this,this.Ad,g),this.Ad.Jf(g),this.Vi=!1)}};Bb=function(g,p){return this.ua.ab(g,p)&&this.qb.ab(g,p)?this.Y&&!this.Y.Ve()?(this.Y.Ne(this.width,this.height,this.j),this.Y.ab(g-this.x,p-this.y)):!0:!1};vb=function(){this.type.Gi(); return this.ke};Fb=function(){this.g.Kk();return this.xc};Gb=function(){this.U.length=0;var g,p;g=0;for(p=this.qd.length;g<p;g++)this.qd[g]&&this.U.push(this.type.G[g]);this.Zn=!!this.U.length};wb=function(){return"Inst"+this.qn};jb=function(g){if(g&&g.ub&&g.type!=this){var p,r,u;p=0;for(r=g.siblings.length;p<r;p++)if(u=g.siblings[p],u.type==this)return u}g=this.P().Pb();return g.length?g[0]:null};kb=function(g){var p=this.P().Pb();return p.length?p[g.Uf()%p.length]:null};ib=function(){if(this.tf&& !this.A){var g,p;g=0;for(p=this.c.length;g<p;g++)this.c[g].ke=g;var r=g,u=this.b.jc;g=0;for(p=u.length;g<p;++g)u[g].type===this&&(u[g].ke=r++);this.tf=!1}};tb=function(g){if(g<this.c.length)return this.c[g];g-=this.c.length;var p=this.b.jc,r,u;r=0;for(u=p.length;r<u;++r)if(p[r].type===this){if(0===g)return p[r];--g}return null};lb=function(){return this.Td[this.Vc]};mb=function(){this.Vc++;this.Vc===this.Td.length?this.Td.push(new hb(this)):this.Td[this.Vc].X=!0};nb=function(){this.Vc++;this.Vc=== this.Td.length&&this.Td.push(new hb(this));var g=this.Td[this.Vc],p=this.Td[this.Vc-1];p.X?g.X=!0:(g.X=!1,R(g.c,p.c),R(g.O,p.O))};ob=function(){this.Vc--};pb=function(g){var p,r,u,c,b,h=0;if(!this.A)for(p=0,r=this.ja.length;p<r;p++)for(b=this.ja[p],u=0,c=b.va.length;u<c;u++){if(g===b.va[u].name)return this.V.lastBehIndex=h,b.va[u];h++}p=0;for(r=this.va.length;p<r;p++){if(g===this.va[p].name)return this.V.lastBehIndex=h,this.va[p];h++}return null};qb=function(g){return this.Ah(g)?this.V.lastBehIndex: -1};rb=function(g){var p,r;p=0;for(r=this.G.length;p<r;p++)if(this.G[p].name===g)return p;return-1};sb=function(){if(this.ub&&!this.A){var g,p,r,u,c,b,h;this.Gi();b=this.P();var e=b.X,m=(g=this.b.Sa())&&g.Ra&&g.Ra.Wb;g=0;for(p=this.rb.length;g<p;g++)if(c=this.rb[g],c!==this&&(c.Gi(),h=c.P(),h.X=e,!e)){h.c.length=b.c.length;r=0;for(u=b.c.length;r<u;r++)h.c[r]=c.Vl(b.c[r].ke);if(m)for(h.O.length=b.O.length,r=0,u=b.O.length;r<u;r++)h.O[r]=c.Vl(b.O[r].ke)}}};ub=function(){return"Type"+this.N};Sb=function(g, p,r){if("undefined"===typeof g||"undefined"===typeof r)return!1;switch(p){case 0:return g===r;case 1:return g!==r;case 2:return g<r;case 3:return g<=r;case 4:return g>r;case 5:return g>=r;default:return!1}}})();var ac={};function cc(g){this.b=g} (function(){function g(){return h.length?h.pop():[]}function q(b){var c,a;c=0;for(a=b.length;c<a;c++)Array.isArray(b[c])&&q(b[c]);b.length=0;h.push(b)}function p(){}function r(){}function u(){}var c=cc.prototype;c.ma=function(b){this.ia=b;this.b=b.b};c.ma.prototype.T=function(){};c.da=function(b){this.type=b;this.b=b.b};var b=c.da.prototype,h=[];Array.isArray||(Array.isArray=function(b){return"[object Array]"===Object.prototype.toString.call(b)});b.T=function(){this.Db=this.D[0];this.Lb=this.D[1]; this.kc=this.D[2];this.Hb||(this.Ac=g());var b=this.Ac;b.length=this.Db;var c,a,h;for(c=0;c<this.Db;c++)for(b[c]||(b[c]=g()),b[c].length=this.Lb,a=0;a<this.Lb;a++)for(b[c][a]||(b[c][a]=g()),b[c][a].length=this.kc,h=0;h<this.kc;h++)b[c][a][h]=0;this.Nl=[];this.Ol=[];this.Pl=[];this.Zc=-1};b.mf=function(){var b;for(b=0;b<this.Db;b++)q(this.Ac[b]);this.Ac.length=0};b.hc=function(b,c,a){b=Math.floor(b);c=Math.floor(c);a=Math.floor(a);return isNaN(b)||0>b||b>this.Db-1||isNaN(c)||0>c||c>this.Lb-1||isNaN(a)|| 0>a||a>this.kc-1?0:this.Ac[b][c][a]};b.set=function(b,c,a,h){b=Math.floor(b);c=Math.floor(c);a=Math.floor(a);isNaN(b)||0>b||b>this.Db-1||isNaN(c)||0>c||c>this.Lb-1||isNaN(a)||0>a||a>this.kc-1||(this.Ac[b][c][a]=h)};b.Xq=function(){return JSON.stringify({c2array:!0,size:[this.Db,this.Lb,this.kc],data:this.Ac})};b.mb=function(){return{size:[this.Db,this.Lb,this.kc],data:this.Ac}};b.Gb=function(b){var c=b.size;this.Db=c[0];this.Lb=c[1];this.kc=c[2];this.Ac=b.data};b.Rd=function(b,c,a){0>b&&(b=0);0>c&& (c=0);0>a&&(a=0);if(this.Db!==b||this.Lb!==c||this.kc!==a){this.Db=b;this.Lb=c;this.kc=a;var h,n,f=this.Ac;f.length=b;for(b=0;b<this.Db;b++)for(ja(f[b])&&(f[b]=g()),f[b].length=c,h=0;h<this.Lb;h++)for(ja(f[b][h])&&(f[b][h]=g()),f[b][h].length=a,n=0;n<this.kc;n++)ja(f[b][h][n])&&(f[b][h][n]=0)}};b.Rt=function(){return 0<=this.Zc&&this.Zc<this.Nl.length?this.Nl[this.Zc]:0};b.St=function(){return 0<=this.Zc&&this.Zc<this.Ol.length?this.Ol[this.Zc]:0};b.Tt=function(){return 0<=this.Zc&&this.Zc<this.Pl.length? this.Pl[this.Zc]:0};p.prototype.Qk=function(b,c,a){return Sb(this.hc(b,0,0),c,a)};b.Lt=function(b){this.b.Ce(b.R);b.De();this.b.Hc(b.R)};c.e=new p;r.prototype.up=function(b,c,a){this.Rd(b,c,a)};r.prototype.bl=function(b,c){this.set(b,0,0,c)};r.prototype.Sk=function(b){var c;try{c=JSON.parse(b)}catch(a){return}c.c2array&&(b=c.size,this.Db=b[0],this.Lb=b[1],this.kc=b[2],this.Ac=c.data)};c.C=new r;u.prototype.ho=function(b,c,a,h){b.Cn(this.hc(c,a||0,h||0))};u.prototype.cl=function(b){b.M(this.Db)};u.prototype.Rk= function(b){b.M(this.Lb)};u.prototype.Vg=function(b){b.ya(this.Xq())};c.ca=new u})();function Y(g){this.b=g} (function(){function g(){}function q(){}function p(){}var r=Y.prototype;r.ma=function(g){this.ia=g;this.b=g.b};r.ma.prototype.T=function(){};r.da=function(g){this.type=g;this.b=g.b};r.da.prototype.T=function(){var g=this;window.addEventListener("resize",function(){g.b.trigger(Y.prototype.e.cp,g)});"undefined"!==typeof navigator.onLine&&(window.addEventListener("online",function(){g.b.trigger(Y.prototype.e.Zo,g)}),window.addEventListener("offline",function(){g.b.trigger(Y.prototype.e.Yo,g)}));"undefined"!== typeof window.applicationCache&&(window.applicationCache.addEventListener("updateready",function(){g.b.df=1;g.b.trigger(Y.prototype.e.al,g)}),window.applicationCache.addEventListener("progress",function(c){g.b.df=c.loaded/c.total}));this.b.nc||(document.addEventListener("appMobi.device.update.available",function(){g.b.trigger(Y.prototype.e.al,g)}),document.addEventListener("backbutton",function(){g.b.trigger(Y.prototype.e.Ji,g)}),document.addEventListener("menubutton",function(){g.b.trigger(Y.prototype.e.Wk, g)}),document.addEventListener("searchbutton",function(){g.b.trigger(Y.prototype.e.dp,g)}),document.addEventListener("tizenhwkey",function(c){var b;switch(c.keyName){case "back":b=g.b.trigger(Y.prototype.e.Ji,g);!b&&window.tizen&&window.tizen.application.getCurrentApplication().exit();break;case "menu":(b=g.b.trigger(Y.prototype.e.Wk,g))||c.preventDefault()}}));this.b.Lh&&(WinJS.Application.onbackclick=function(){return!!g.b.trigger(Y.prototype.e.Ji,g)});this.b.Lp(function(c){c?g.b.trigger(Y.prototype.e.$o, g):g.b.trigger(Y.prototype.e.bp,g)});this.Mr="undefined"!==typeof window.is_scirra_arcade};g.prototype.Zo=function(){return!0};g.prototype.Yo=function(){return!0};g.prototype.al=function(){return!0};g.prototype.bp=function(){return!0};g.prototype.$o=function(){return!0};g.prototype.cp=function(){return!0};g.prototype.Ji=function(){return!0};g.prototype.Wk=function(){return!0};g.prototype.dp=function(){return!0};r.e=new g;q.prototype.zo=function(g,c){this.b.tb?CocoonJS.App.openURL(g):this.b.Sb?ejecta.openURL(g): this.b.Hj?Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(g)):navigator.app&&navigator.app.loadUrl?navigator.app.loadUrl(g,{openExternal:!0}):this.b.Rb?window.open(g,"_system"):this.Mr||this.b.ha||window.open(g,c)};r.C=new q;p.prototype.URL=function(g){g.ya(this.b.ha?"":window.location.toString())};r.ca=new p})();function X(g){this.b=g} (function(){function g(){if(0===this.bj.length){var a=document.createElement("canvas");a.width=this.width;a.height=this.height;var b=a.getContext("2d");this.sf?b.drawImage(this.B,this.kf,this.lf,this.width,this.height,0,0,this.width,this.height):b.drawImage(this.B,0,0,this.width,this.height);this.bj=a.toDataURL("image/png")}return this.bj}function q(){}function p(){}var r=X.prototype;r.ma=function(a){this.ia=a;this.b=a.b};var u=r.ma.prototype;u.T=function(){if(!this.A){var a,b,c,e,h,k,d,l,m;this.gc= [];this.Xf=!1;a=0;for(b=this.pb.length;a<b;a++){h=this.pb[a];d={};d.name=h[0];d.speed=h[1];d.loop=h[2];d.nk=h[3];d.mi=h[4];d.jn=h[5];d.N=h[6];d.frames=[];c=0;for(e=h[7].length;c<e;c++)k=h[7][c],l={},l.yi=k[0],l.Ak=k[1],l.kf=k[2],l.lf=k[3],l.width=k[4],l.height=k[5],l.duration=k[6],l.eb=k[7],l.fb=k[8],l.Aj=k[9],l.fi=k[10],l.kn=k[11],l.sf=0!==l.width,l.bj="",l.Qt=g,m={left:0,top:0,right:1,bottom:1},l.tk=m,l.H=null,(m=this.b.Tq(k[0]))?l.B=m:(l.B=new Image,l.B.Vp=k[0],l.B.xl=k[1],l.B.Sp=null,this.b.Nk(l.B, k[0])),d.frames.push(l),this.gc.push(l);this.pb[a]=d}}};u.Xn=function(){var a,b,c;a=0;for(b=this.c.length;a<b;a++)c=this.c[a],c.qh=c.Jb.H};u.bi=function(){if(!this.A){var a,b,c;a=0;for(b=this.gc.length;a<b;++a)c=this.gc[a],c.B.Sp=null,c.H=null;this.Xf=!1;this.Xn()}};u.ci=function(){if(!this.A&&this.c.length){var a,b,c;a=0;for(b=this.gc.length;a<b;++a)c=this.gc[a],c.H=this.b.n.bf(c.B,!1,this.b.S,c.kn);this.Xn()}};u.Oj=function(){if(!this.A&&!this.Xf&&this.b.n){var a,b,c;a=0;for(b=this.gc.length;a< b;++a)c=this.gc[a],c.H=this.b.n.bf(c.B,!1,this.b.S,c.kn);this.Xf=!0}};u.Fi=function(){if(!this.A&&!this.c.length&&this.Xf){var a,b,c;a=0;for(b=this.gc.length;a<b;++a)c=this.gc[a],this.b.n.deleteTexture(c.H),c.H=null;this.Xf=!1}};var c=[];u.hi=function(a){var b,e,h;b=c.length=0;for(e=this.gc.length;b<e;++b)h=this.gc[b].B,-1===c.indexOf(h)&&(a.drawImage(h,0,0),c.push(h))};r.da=function(a){this.type=a;this.b=a.b;a=this.type.pb[0].frames[0].fi;this.Hb?this.Y.Fg(a):this.Y=new Ya(a)};var b=r.da.prototype; b.T=function(){this.visible=0===this.D[0];this.Gh=this.eg=!1;this.$d=0!==this.D[3];1===this.type.pb.length&&1===this.type.pb[0].frames.length||0===this.type.pb[0].speed||(this.b.Bk(this),this.eg=!0);this.na=this.Rl(this.D[1])||this.type.pb[0];this.q=this.D[2];0>this.q&&(this.q=0);this.q>=this.na.frames.length&&(this.q=this.na.frames.length-1);var a=this.na.frames[this.q];this.Y.Fg(a.fi);this.eb=a.eb;this.fb=a.fb;this.Lf=this.na.speed;this.Hb?this.zc.reset():this.zc=new Wa;this.$c=this.zc.la;this.Yd= !0;this.Pc=0;this.Xd=!0;this.hh=this.kl="";this.ul=0;this.gh=-1;this.type.Oj();var b,c,e,h,g,d,l,a=0;for(b=this.type.pb.length;a<b;a++)for(h=this.type.pb[a],c=0,e=h.frames.length;c<e;c++)g=h.frames[c],0===g.width&&(g.width=g.B.width,g.height=g.B.height),g.sf&&(l=g.B,d=g.tk,d.left=g.kf/l.width,d.top=g.lf/l.height,d.right=(g.kf+g.width)/l.width,d.bottom=(g.lf+g.height)/l.height,0===g.kf&&0===g.lf&&g.width===l.width&&g.height===l.height&&(g.sf=!1));this.Jb=this.na.frames[this.q];this.qh=this.Jb.H};b.mb= function(){var a={a:this.na.N,f:this.q,cas:this.Lf,fs:this.$c,ar:this.Pc,at:this.zc.la};this.Yd||(a.ap=this.Yd);this.Xd||(a.af=this.Xd);return a};b.Gb=function(a){var b=this.Wq(a.a);b&&(this.na=b);this.q=a.f;0>this.q&&(this.q=0);this.q>=this.na.frames.length&&(this.q=this.na.frames.length-1);this.Lf=a.cas;this.$c=a.fs;this.Pc=a.ar;this.zc.reset();this.zc.la=a.at;this.Yd=a.hasOwnProperty("ap")?a.ap:!0;this.Xd=a.hasOwnProperty("af")?a.af:!0;this.Jb=this.na.frames[this.q];this.qh=this.Jb.H;this.Y.Fg(this.Jb.fi); this.eb=this.Jb.eb;this.fb=this.Jb.fb};b.Qi=function(a){this.q=a?0:this.na.frames.length-1;this.Yd=!1;this.kl=this.na.name;this.Gh=!0;this.b.trigger(X.prototype.e.Mo,this);this.b.trigger(X.prototype.e.Lo,this);this.Gh=!1;this.Pc=0};b.Vt=function(){return this.zc.la};b.Mc=function(){this.zc.add(this.b.Ch(this));this.hh.length&&this.Cl();0<=this.gh&&this.Dl();var a=this.zc.la,b=this.na,c=b.frames[this.q],e=c.duration/this.Lf;this.Yd&&a>=this.$c+e&&(this.Xd?this.q++:this.q--,this.$c+=e,this.q>=b.frames.length&& (b.jn?(this.Xd=!1,this.q=b.frames.length-2):b.loop?this.q=b.mi:(this.Pc++,this.Pc>=b.nk?this.Qi(!1):this.q=b.mi)),0>this.q&&(b.jn?(this.q=1,this.Xd=!0,b.loop||(this.Pc++,this.Pc>=b.nk&&this.Qi(!0))):b.loop?this.q=b.mi:(this.Pc++,this.Pc>=b.nk?this.Qi(!0):this.q=b.mi)),0>this.q?this.q=0:this.q>=b.frames.length&&(this.q=b.frames.length-1),a>this.$c+b.frames[this.q].duration/this.Lf&&(this.$c=a),a=b.frames[this.q],this.Le(c,a),this.b.W=!0)};b.Rl=function(a){var b,c,e;b=0;for(c=this.type.pb.length;b< c;b++)if(e=this.type.pb[b],db(e.name,a))return e;return null};b.Wq=function(a){var b,c,e;b=0;for(c=this.type.pb.length;b<c;b++)if(e=this.type.pb[b],e.N===a)return e;return null};b.Cl=function(){var a=this.na.frames[this.q],b=this.Rl(this.hh);this.hh="";!b||db(b.name,this.na.name)&&this.Yd||(this.na=b,this.Lf=b.speed,0>this.q&&(this.q=0),this.q>=this.na.frames.length&&(this.q=this.na.frames.length-1),1===this.ul&&(this.q=0),this.Yd=!0,this.$c=this.zc.la,this.Xd=!0,this.Le(a,this.na.frames[this.q]), this.b.W=!0)};b.Dl=function(){var a=this.na.frames[this.q],b=this.q;this.q=P(this.gh);0>this.q&&(this.q=0);this.q>=this.na.frames.length&&(this.q=this.na.frames.length-1);b!==this.q&&(this.Le(a,this.na.frames[this.q]),this.$c=this.zc.la,this.b.W=!0);this.gh=-1};b.Le=function(a,b){var c=a.width,e=a.height,h=b.width,g=b.height;c!=h&&(this.width*=h/c);e!=g&&(this.height*=g/e);this.eb=b.eb;this.fb=b.fb;this.Y.Fg(b.fi);this.ka();this.Jb=b;this.qh=b.H;c=0;for(e=this.F.length;c<e;c++)h=this.F[c],h.cn&&h.cn(a, b);this.b.trigger(X.prototype.e.Le,this)};b.Wc=function(a){a.globalAlpha=this.opacity;var b=this.Jb,c=b.sf,e=b.B,h=this.x,g=this.y,d=this.width,l=this.height;if(0===this.j&&0<=d&&0<=l)h-=this.eb*d,g-=this.fb*l,this.b.Gc&&(h=Math.round(h),g=Math.round(g)),c?a.drawImage(e,b.kf,b.lf,b.width,b.height,h,g,d,l):a.drawImage(e,h,g,d,l);else{this.b.Gc&&(h=Math.round(h),g=Math.round(g));a.save();var k=0<d?1:-1,m=0<l?1:-1;a.translate(h,g);1===k&&1===m||a.scale(k,m);a.rotate(this.j*k*m);h=0-this.eb*ma(d);g=0- this.fb*ma(l);c?a.drawImage(e,b.kf,b.lf,b.width,b.height,h,g,ma(d),ma(l)):a.drawImage(e,h,g,ma(d),ma(l));a.restore()}};b.Nb=function(a){a.zb(this.qh);a.Ee(this.opacity);var b=this.Jb,c=this.qb;if(this.b.Gc){var e=Math.round(this.x)-this.x,h=Math.round(this.y)-this.y;b.sf?a.Ic(c.ea+e,c.fa+h,c.Pa+e,c.Qa+h,c.Da+e,c.Ea+h,c.Ba+e,c.Ca+h,b.tk):a.ki(c.ea+e,c.fa+h,c.Pa+e,c.Qa+h,c.Da+e,c.Ea+h,c.Ba+e,c.Ca+h)}else b.sf?a.Ic(c.ea,c.fa,c.Pa,c.Qa,c.Da,c.Ea,c.Ba,c.Ca,b.tk):a.ki(c.ea,c.fa,c.Pa,c.Qa,c.Da,c.Ea,c.Ba, c.Ca)};b.cr=function(a){var b=this.Jb,c,e;c=0;for(e=b.Aj.length;c<e;c++)if(db(a,b.Aj[c][0]))return c;return-1};b.tj=function(a,b){var c=this.Jb,e=c.Aj,h;h=O(a)?this.cr(a):a-1;h=P(h);if(0>h||h>=e.length)return b?this.x:this.y;var g=(e[h][1]-c.eb)*this.width,e=e[h][2],e=(e-c.fb)*this.height,c=Math.cos(this.j);h=Math.sin(this.j);var d=g*c-e*h,e=e*c+g*h,g=d+this.x,e=e+this.y;return b?g:e};var h=null,e=new fa,m=!1,a=[],k=new Q(0,0,0,0);u.finish=function(a){if(m){if(a){var b=this.b.Sa().Ra.Wb;a=h.P();var c= e.wc(),g,k;if(a.X){a.X=!1;a.c.length=c.length;g=0;for(k=c.length;g<k;g++)a.c[g]=c[g];if(b)for(g=a.O.length=0,k=h.c.length;g<k;g++)c=h.c[g],e.contains(c)||a.O.push(c)}else if(b)for(b=a.c.length,a.c.length=b+c.length,g=0,k=c.length;g<k;g++)a.c[b+g]=c[g],Ea(a.O,c[g]);else R(a.c,c);h.td()}e.clear();m=!1}};q.prototype.Fo=function(b){if(b){var c=!1,g,p,q,r=this.b.Bh(),d=r.type,r=r.Ih;g=b.P();p=this.b.Sa().Ra.Wb;var l;g.X?(this.ga(),k.Jf(this.ua),k.offset(0,0),this.b.Zq(this.g,b,k,a),l=a):l=p?g.O:g.c;h= b;m=d!==b&&!r;g=0;for(p=l.length;g<p;g++)if(q=l[g],this.b.As(this,q)){c=!0;if(r)break;d!==b&&e.add(q)}a.length=0;b=c}else b=!1;return b};q.prototype.lo=function(a,b){return Sb(this.q,a,b)};q.prototype.Lo=function(a){return db(this.kl,a)};q.prototype.Mo=function(){return!0};q.prototype.Le=function(){return!0};r.e=new q;p.prototype.jp=function(a,b){this.hh=a;this.ul=b;this.eg||(this.b.Bk(this),this.eg=!0);this.Gh||this.Cl()};p.prototype.kp=function(a){this.gh=a;this.eg||(this.b.Bk(this),this.eg=!0); this.Gh||this.Dl()};r.C=new p;r.ca=new function(){}})();function dc(g){this.b=g} (function(){function g(a,b){return a.length?a.pop():new b}function q(a,b,c){if(c){var e;c=0;for(e=b.length;c<e;c++)a.length<h&&a.push(b[c]);b.length=0}else for(e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a.length<h&&a.push(b[e]),delete b[e])}function p(a,b,c){var h=a.ve;c=c.replace(/\s\s*$/,"");b>=h.length&&h.push(g(e,Object));b=h[b];b.text=c;b.width=a.Uj(c);a.uf=oa(a.uf,b.width)}function r(){}function u(){}var c=dc.prototype;c.T=function(){};c.ma=function(a){this.ia=a;this.b=a.b};var b=c.ma.prototype; b.T=function(){this.A||(this.B=new Image,this.b.Nk(this.B,this.yi),this.H=null)};b.bi=function(){this.A||(this.H=null)};b.ci=function(){if(!this.A&&this.c.length){this.H||(this.H=this.b.n.bf(this.B,!1,this.b.S,this.Mg));var a,b;a=0;for(b=this.c.length;a<b;a++)this.c[a].H=this.H}};b.Fi=function(){this.A||this.c.length||!this.H||(this.b.n.deleteTexture(this.H),this.H=null)};b.hi=function(a){a.drawImage(this.B,0,0)};c.da=function(a){this.type=a;this.b=a.b};b=c.da.prototype;b.mf=function(){q(e,this.ve, !0);q(m,this.jh,!1);q(a,this.kh,!1);Sa(this.zd)};b.T=function(){this.B=this.type.B;this.ih=this.D[0];this.xd=this.D[1];this.characterSet=this.D[2];this.text=this.D[3];this.yd=this.D[4];this.visible=0===this.D[5];this.am=this.D[6]/2;this.$n=this.D[7]/2;this.Ks=0===this.D[9];this.Oe=this.D[10];this.lineHeight=this.D[11];this.He=this.uf=0;this.Hb?(this.ve.length=0,Sa(this.jh),Sa(this.kh),Sa(this.zd)):(this.ve=[],this.jh={},this.kh={},this.zd={});this.Lg=!0;this.Mj=this.width;this.b.n&&(this.type.H|| (this.type.H=this.b.n.bf(this.type.B,!1,this.b.S,this.type.Mg)),this.H=this.type.H);this.zp()};b.mb=function(){var a={t:this.text,csc:this.yd,csp:this.Oe,lh:this.lineHeight,tw:this.uf,th:this.He,lrt:this.Pr,cw:{}},b;for(b in this.zd)a.cw[b]=this.zd[b];return a};b.Gb=function(a){this.text=a.t;this.yd=a.csc;this.Oe=a.csp;this.lineHeight=a.lh;this.uf=a.tw;this.He=a.th;this.Pr=a.lrt;for(var b in a.cw)this.zd[b]=a.cw[b];this.Lg=!0;this.Mj=this.width};var h=1E3,e=[],m=[],a=[];b.zp=function(){for(var b= this.B,c=b.width,e=b.height,b=this.ih,h=this.xd,k=b/c,d=h/e,l=this.characterSet,c=Math.floor(c/b),e=Math.floor(e/h),n=0;n<l.length&&!(n>=c*e);n++){var p=n%c,q=Math.floor(n/c),r=l.charAt(n);if(this.b.n){var u=this.kh,C=p*k,I=q*d,p=(p+1)*k,q=(q+1)*d;void 0===u[r]&&(u[r]=g(a,Q));u[r].left=C;u[r].top=I;u[r].right=p;u[r].bottom=q}else u=this.jh,p*=b,q*=h,C=b,I=h,void 0===u[r]&&(u[r]=g(m,Object)),u[r].x=p,u[r].y=q,u[r].bo=C,u[r].$l=I}};var k=[];c.Cp=function(a){k.length=0;for(var b="",c,e=0;e<a.length;)if(c= a.charAt(e),"\n"===c)b.length&&(k.push(b),b=""),k.push("\n"),++e;else if(" "===c||"\t"===c||"-"===c){do b+=a.charAt(e),e++;while(e<a.length&&(" "===a.charAt(e)||"\t"===a.charAt(e)));k.push(b);b=""}else e<a.length&&(b+=c,e++);b.length&&k.push(b)};c.Fp=function(a){var b=a.text,c=a.ve;if(b&&b.length){var h=a.width;if(2>=h)q(e,c,!0);else{var k=a.yd,d=a.Oe;if(b.length*(a.ih*k+d)-d<=h&&-1===b.indexOf("\n")&&(d=a.Uj(b),d<=h)){q(e,c,!0);c.push(g(e,Object));c[0].text=b;c[0].width=d;a.uf=d;a.He=a.xd*k+a.lineHeight; return}this.Gp(a);a.He=c.length*(a.xd*k+a.lineHeight)}}else q(e,c,!0)};c.Gp=function(a){var b=a.Ks,c=a.text,g=a.ve,m=a.width;b&&(this.Cp(c),c=k);var d="",l,n,q,r=0,u=!1;for(q=0;q<c.length;q++)"\n"===c[q]?(!0===u?u=!1:(p(a,r,d),r++),d=""):(u=!1,l=d,d+=c[q],n=a.Uj(d.replace(/\s\s*$/,"")),n>m&&(""===l?(p(a,r,d),d="",u=!0):(p(a,r,l),d=c[q]),r++,b||" "!==d||(d="")));d.replace(/\s\s*$/,"").length&&(p(a,r,d),r++);for(q=r;q<g.length;q++)e.length<h&&e.push(g[q]);g.length=r};b.Uj=function(a){for(var b=this.Oe, c=a.length,e=0,h=0;h<c;h++)e+=this.qj(a.charAt(h))*this.yd+b;return e-(0<e?b:0)};b.qj=function(a){var b=this.zd;return void 0!==b[a]?b[a]:this.ih};b.sn=function(){if(this.Lg||this.width!==this.Mj)this.He=this.uf=0,this.type.ia.Fp(this),this.Lg=!1,this.Mj=this.width};b.Wc=function(a){var b=this.B;if(""!==this.text&&null!=b&&(this.sn(),!(this.height<this.xd*this.yd+this.lineHeight))){a.globalAlpha=this.opacity;var b=this.x,c=this.y;this.b.Gc&&(b=Math.round(b),c=Math.round(c));var e=this.g.qa,h=this.g.ra, d=this.g.Aa,g=this.g.za;a.save();a.translate(b,c);a.rotate(this.j);for(var k=this.am,m=this.yd,n=this.xd*m,p=this.lineHeight,q=this.Oe,r=this.ve,u,na=-(this.eb*this.width),K=-(this.fb*this.height),K=K+this.$n*oa(0,this.height-this.He),G,E,da,ea=0;ea<r.length;ea++){var J=r[ea].text;u=k*oa(0,this.width-r[ea].width);G=na+u;K+=p;if(c+K+n<h)K+=n;else{for(var y=0;y<J.length;y++){E=J.charAt(y);u=this.qj(E);var z=this.jh[E];if(b+G+u*m+q<e)G+=u*m+q;else{if(G+u*m>this.width+1E-5)break;void 0!==z&&(E=G,da=K, 0===this.j&&(E=Math.round(E),da=Math.round(da)),a.drawImage(this.B,z.x,z.y,z.bo,z.$l,E,da,z.bo*m,z.$l*m));G+=u*m+q;if(b+G>d)break}}K+=n;if(K+n+p>this.height||c+K>g)break}}a.restore()}};var n=new za;b.Nb=function(a){a.zb(this.H);a.Ee(this.opacity);if(this.text&&(this.sn(),!(this.height<this.xd*this.yd+this.lineHeight))){this.ga();var b=this.qb,c=0,e=0;this.b.Gc&&(c=Math.round(this.x)-this.x,e=Math.round(this.y)-this.y);var h=this.g.qa,d=this.g.ra,g=this.g.Aa,k=this.g.za,m=this.j,p=this.am,q=this.$n, r=this.yd,u=this.xd*r,I=this.lineHeight,na=this.Oe,K=this.ve,G=this.He,E,da,ea;0!==m&&(da=Math.cos(m),ea=Math.sin(m));for(var c=b.ea+c,b=b.fa+e,J,q=q*oa(0,this.height-G),y,z,G=0;G<K.length;G++)if(e=K[G].text,J=E=p*oa(0,this.width-K[G].width),q+=I,0===m&&b+q+u<d)q+=u;else{for(var N=0;N<e.length;N++){var D=e.charAt(N);E=this.qj(D);D=this.kh[D];if(c+J+E*r+na<h)J+=E*r+na;else{if(J+E*r>this.width+1E-5)break;if(void 0!==D){var H=this.ih*r,A=this.xd*r;y=J;z=q;0===m&&(y=Math.round(y),z=Math.round(z));n.ea= y;n.fa=z;n.Pa=y+H;n.Qa=z;n.Ba=y;n.Ca=z+A;n.Da=y+H;n.Ea=z+A;0!==m&&(y=n,z=da,H=ea,A=void 0,A=y.ea*z-y.fa*H,y.fa=y.fa*z+y.ea*H,y.ea=A,A=y.Pa*z-y.Qa*H,y.Qa=y.Qa*z+y.Pa*H,y.Pa=A,A=y.Ba*z-y.Ca*H,y.Ca=y.Ca*z+y.Ba*H,y.Ba=A,A=y.Da*z-y.Ea*H,y.Ea=y.Ea*z+y.Da*H,y.Da=A);n.offset(c,b);a.Ic(n.ea,n.fa,n.Pa,n.Qa,n.Da,n.Ea,n.Ba,n.Ca,D)}J+=E*r+na;if(0===m&&c+J>g)break}}q+=u;if(q+u+I>this.height||b+q>k)break}}};c.e=new function(){};r.prototype.vp=function(a){M(a)&&1E9>a&&(a=Math.round(1E10*a)/1E10);a=a.toString();this.text!== a&&(this.text=a,this.Lg=!0,this.b.W=!0)};b.lp=function(a,b){var c=parseInt(b,10);this.zd[a]!==c&&(this.zd[a]=c,this.Lg=!0,this.b.W=!0)};r.prototype.mp=function(a,b){if(""!==a)for(var c=0;c<a.length;c++)this.lp(a.charAt(c),b)};c.C=new r;u.prototype.Text=function(a){a.ya(this.text)};c.ca=new u})();function ec(g){this.b=g} (function(){var g=ec.prototype;g.ma=function(g){this.ia=g;this.b=g.b};var q=g.ma.prototype;q.T=function(){this.A||(this.B=new Image,this.B.xl=this.Ak,this.b.Nk(this.B,this.yi),this.H=this.pattern=null)};q.bi=function(){this.A||(this.H=null)};q.ci=function(){if(!this.A&&this.c.length){this.H||(this.H=this.b.n.bf(this.B,!0,this.b.S,this.Mg));var g,q;g=0;for(q=this.c.length;g<q;g++)this.c[g].H=this.H}};q.Oj=function(){this.A||this.H||!this.b.n||(this.H=this.b.n.bf(this.B,!0,this.b.S,this.Mg))};q.Fi= function(){this.A||this.c.length||!this.H||(this.b.n.deleteTexture(this.H),this.H=null)};q.hi=function(g){g.drawImage(this.B,0,0)};g.da=function(g){this.type=g;this.b=g.b};q=g.da.prototype;q.T=function(){this.visible=0===this.D[0];this.Cg=new Q(0,0,0,0);this.em=!1;this.B=this.type.B;this.b.n?(this.type.Oj(),this.H=this.type.H):(this.type.pattern||(this.type.pattern=this.b.aa.createPattern(this.type.B,"repeat")),this.pattern=this.type.pattern)};q.rd=function(){this.em=!1;this.B=this.type.B};q.mf=function(){this.b.n&& this.em&&this.H&&(this.b.n.deleteTexture(this.H),this.H=null)};q.Wc=function(g){g.globalAlpha=this.opacity;g.save();g.fillStyle=this.pattern;var q=this.x,u=this.y;this.b.Gc&&(q=Math.round(q),u=Math.round(u));var c=-(this.eb*this.width),b=-(this.fb*this.height),h=c%this.B.width,e=b%this.B.height;0>h&&(h+=this.B.width);0>e&&(e+=this.B.height);g.translate(q,u);g.rotate(this.j);g.translate(h,e);g.fillRect(c-h,b-e,this.width,this.height);g.restore()};q.Nb=function(g){g.zb(this.H);g.Ee(this.opacity);var q= this.Cg;q.right=this.width/this.B.width;q.bottom=this.height/this.B.height;var u=this.qb;if(this.b.Gc){var c=Math.round(this.x)-this.x,b=Math.round(this.y)-this.y;g.Ic(u.ea+c,u.fa+b,u.Pa+c,u.Qa+b,u.Da+c,u.Ea+b,u.Ba+c,u.Ca+b,q)}else g.Ic(u.ea,u.fa,u.Pa,u.Qa,u.Da,u.Ea,u.Ba,u.Ca,q)};g.e=new function(){};g.C=new function(){};g.ca=new function(){}})();function Z(g){this.b=g} (function(){function g(b){m=b.x;a=b.y;k=b.z}function q(a){n=a.x;f=a.y;s=a.z}function p(a,b,c,d){var e;e=x.length?x.pop():new r;e.init(a,b,c,d);return e}function r(){this.Hg=this.id=this.y=this.x=this.vi=this.ti=this.Lj=this.time=this.xk=0;this.Pg=this.Di=!1}function u(){}function c(){}var b=Z.prototype;b.ma=function(a){this.ia=a;this.b=a.b};b.ma.prototype.T=function(){};b.da=function(a){this.type=a;this.b=a.b;this.touches=[];this.Vj=!1};var h=b.da.prototype,e={left:0,top:0};h.Rf=function(a){var b, c;b=0;for(c=this.touches.length;b<c;b++)if(this.touches[b].id===a)return b;return-1};var m=0,a=0,k=0,n=0,f=0,s=0,x=[];r.prototype.init=function(a,b,c,d){var e=T();this.xk=this.Lj=this.time=e;this.ti=a;this.vi=b;this.x=a;this.y=b;this.id=c;this.Hg=d;this.Pg=this.Di=!1};r.prototype.update=function(a,b,c){this.Lj=this.time;this.time=a;this.x=b;this.y=c;!this.Pg&&15<=Oa(this.ti,this.vi,this.x,this.y)&&(this.Pg=!0)};r.prototype.Vr=function(a,b){!this.Di&&500<=T()-this.xk&&!this.Pg&&15>Oa(this.ti,this.vi, this.x,this.y)&&(this.Di=!0,a.Nc=this.Hg,a.wf=this.id,a.Te=b,a.b.trigger(Z.prototype.e.Vo,a),a.Tc=this.x,a.Uc=this.y,a.b.trigger(Z.prototype.e.Wo,a),a.Te=0)};var F=-1E3,t=-1E3,d=-1E4;r.prototype.Tm=function(a,b){if(!this.Di){var c=T();333>=c-this.xk&&!this.Pg&&15>Oa(this.ti,this.vi,this.x,this.y)&&(a.Nc=this.Hg,a.wf=this.id,a.Te=b,666>=c-d&&25>Oa(F,t,this.x,this.y)?(a.b.trigger(Z.prototype.e.Po,a),a.Tc=this.x,a.Uc=this.y,a.b.trigger(Z.prototype.e.Qo,a),t=F=-1E3,d=-1E4):(a.b.trigger(Z.prototype.e.ep, a),a.Tc=this.x,a.Uc=this.y,a.b.trigger(Z.prototype.e.fp,a),F=this.x,t=this.y,d=c),a.Te=0)}};h.T=function(){this.Kr=!("undefined"===typeof window.c2isWindows8||!window.c2isWindows8);this.Te=this.wf=this.Nc=this.Uc=this.Tc=this.hl=this.gl=this.fl=this.Jp=this.Ip=this.Hp=this.xg=this.wg=this.vg=0;this.Is=0!==this.D[0];var a=0<this.b.kb?document:this.b.canvas,b=document;this.b.nc?b=a=window.Canvas:this.b.tb&&(b=a=window);var c=this;window.navigator.pointerEnabled?(a.addEventListener("pointerdown",function(a){c.ug(a)}, !1),a.addEventListener("pointermove",function(a){c.tg(a)},!1),b.addEventListener("pointerup",function(a){c.fd(a,!1)},!1),b.addEventListener("pointercancel",function(a){c.fd(a,!0)},!1),this.b.canvas&&(this.b.canvas.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),document.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),this.b.canvas.addEventListener("gesturehold",function(a){a.preventDefault()},!1),document.addEventListener("gesturehold",function(a){a.preventDefault()}, !1))):window.navigator.msPointerEnabled?(a.addEventListener("MSPointerDown",function(a){c.ug(a)},!1),a.addEventListener("MSPointerMove",function(a){c.tg(a)},!1),b.addEventListener("MSPointerUp",function(a){c.fd(a,!1)},!1),b.addEventListener("MSPointerCancel",function(a){c.fd(a,!0)},!1),this.b.canvas&&(this.b.canvas.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1),document.addEventListener("MSGestureHold",function(a){a.preventDefault()},!1))):(a.addEventListener("touchstart",function(a){c.ei(a)}, !1),a.addEventListener("touchmove",function(a){c.di(a)},!1),b.addEventListener("touchend",function(a){c.nf(a,!1)},!1),b.addEventListener("touchcancel",function(a){c.nf(a,!0)},!1));if(this.Kr){var d=function(a){a=a.reading;c.fl=a.accelerationX;c.gl=a.accelerationY;c.hl=a.accelerationZ},e=function(a){a=a.reading;c.vg=a.yawDegrees;c.wg=a.pitchDegrees;c.xg=a.rollDegrees},f=Windows.Devices.Sensors.Accelerometer.getDefault();f&&(f.reportInterval=Math.max(f.minimumReportInterval,16),f.addEventListener("readingchanged", d));var h=Windows.Devices.Sensors.Inclinometer.getDefault();h&&(h.reportInterval=Math.max(h.minimumReportInterval,16),h.addEventListener("readingchanged",e));document.addEventListener("visibilitychange",function(){document.hidden||document.msHidden?(f&&f.removeEventListener("readingchanged",d),h&&h.removeEventListener("readingchanged",e)):(f&&f.addEventListener("readingchanged",d),h&&h.addEventListener("readingchanged",e))},!1)}else window.addEventListener("deviceorientation",function(a){c.vg=a.alpha|| 0;c.wg=a.beta||0;c.xg=a.gamma||0},!1),window.addEventListener("devicemotion",function(a){a.accelerationIncludingGravity&&(c.Hp=a.accelerationIncludingGravity.x||0,c.Ip=a.accelerationIncludingGravity.y||0,c.Jp=a.accelerationIncludingGravity.z||0);a.acceleration&&(c.fl=a.acceleration.x||0,c.gl=a.acceleration.y||0,c.hl=a.acceleration.z||0)},!1);this.Is&&!this.b.ha&&(jQuery(document).mousemove(function(a){c.ck(a)}),jQuery(document).mousedown(function(a){c.bk(a)}),jQuery(document).mouseup(function(a){c.dk(a)})); this.b.ag&&!this.b.nc&&AppMobi.accelerometer.watchAcceleration(g,{frequency:40,adjustForRotation:!0});this.b.Rb&&navigator.accelerometer&&navigator.accelerometer.watchAcceleration&&navigator.accelerometer.watchAcceleration(q,null,{frequency:40});this.b.Bs(this)};h.tg=function(a){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&a.preventDefault();var b=this.Rf(a.pointerId),c=T();if(0<=b){var d=this.b.ha?e:jQuery(this.b.canvas).offset(),b=this.touches[b];2>c-b.time|| b.update(c,a.pageX-d.left,a.pageY-d.top)}}};h.ug=function(a){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&eb(a)&&a.preventDefault();var b=this.b.ha?e:jQuery(this.b.canvas).offset(),c=a.pageX-b.left,b=a.pageY-b.top;T();this.Nc=this.touches.length;this.wf=a.pointerId;this.touches.push(p(c,b,a.pointerId,this.Nc));this.b.Tb=!0;this.b.trigger(Z.prototype.e.Yk,this);this.b.trigger(Z.prototype.e.Ni,this);this.Tc=c;this.Uc=b;this.b.trigger(Z.prototype.e.Mi,this);this.b.Tb= !1}};h.fd=function(a,b){if(a.pointerType!==a.MSPOINTER_TYPE_MOUSE&&"mouse"!==a.pointerType){a.preventDefault&&eb(a)&&a.preventDefault();var c=this.Rf(a.pointerId);this.Nc=0<=c?this.touches[c].Hg:-1;this.wf=0<=c?this.touches[c].id:-1;this.b.Tb=!0;this.b.trigger(Z.prototype.e.Xk,this);this.b.trigger(Z.prototype.e.$k,this);0<=c&&(b||this.touches[c].Tm(this,c),100>x.length&&x.push(this.touches[c]),this.touches.splice(c,1));this.b.Tb=!1}};h.di=function(a){a.preventDefault&&a.preventDefault();var b=T(), c,d,f,h;c=0;for(d=a.changedTouches.length;c<d;c++)if(f=a.changedTouches[c],h=this.Rf(f.identifier),0<=h){var g=this.b.ha?e:jQuery(this.b.canvas).offset();h=this.touches[h];2>b-h.time||h.update(b,f.pageX-g.left,f.pageY-g.top)}};h.ei=function(a){a.preventDefault&&eb(a)&&a.preventDefault();var b=this.b.ha?e:jQuery(this.b.canvas).offset();T();this.b.Tb=!0;var c,d,f,h;c=0;for(d=a.changedTouches.length;c<d;c++)if(f=a.changedTouches[c],h=this.Rf(f.identifier),-1===h){h=f.pageX-b.left;var g=f.pageY-b.top; this.Nc=this.touches.length;this.wf=f.identifier;this.touches.push(p(h,g,f.identifier,this.Nc));this.b.trigger(Z.prototype.e.Yk,this);this.b.trigger(Z.prototype.e.Ni,this);this.Tc=h;this.Uc=g;this.b.trigger(Z.prototype.e.Mi,this)}this.b.Tb=!1};h.nf=function(a,b){a.preventDefault&&eb(a)&&a.preventDefault();this.b.Tb=!0;var c,d,e;c=0;for(d=a.changedTouches.length;c<d;c++)e=a.changedTouches[c],e=this.Rf(e.identifier),0<=e&&(this.Nc=this.touches[e].Hg,this.wf=this.touches[e].id,this.b.trigger(Z.prototype.e.Xk, this),this.b.trigger(Z.prototype.e.$k,this),b||this.touches[e].Tm(this,e),100>x.length&&x.push(this.touches[e]),this.touches.splice(e,1));this.b.Tb=!1};h.Nt=function(){return this.b.ag&&0===this.vg&&0!==k?90*k:this.b.Rb&&0===this.vg&&0!==s?90*s:this.vg};h.Ot=function(){return this.b.ag&&0===this.wg&&0!==a?-90*a:this.b.Rb&&0===this.wg&&0!==f?90*f:this.wg};h.Ut=function(){return this.b.ag&&0===this.xg&&0!==m?90*m:this.b.Rb&&0===this.xg&&0!==n?90*n:this.xg};h.bk=function(a){a.preventDefault&&this.b.xj&& !this.b.oe&&a.preventDefault();this.ei({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]});this.Vj=!0};h.ck=function(a){this.Vj&&this.di({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]})};h.dk=function(a){a.preventDefault&&this.b.xj&&!this.b.oe&&a.preventDefault();this.b.xj=!0;this.nf({changedTouches:[{pageX:a.pageX,pageY:a.pageY,identifier:0}]});this.Vj=!1};h.Bi=function(){var a,b,c,d=T();a=0;for(b=this.touches.length;a<b;++a)c=this.touches[a],c.time<=d-50&&(c.Lj=d),c.Vr(this, a)};u.prototype.Ni=function(){return!0};u.prototype.$k=function(){return!0};u.prototype.Mi=function(a){return a?this.b.xi(a,this.Tc,this.Uc):!1};u.prototype.Yk=function(a){a=Math.floor(a);return a===this.Nc};u.prototype.Xk=function(a){a=Math.floor(a);return a===this.Nc};u.prototype.Vo=function(){return!0};u.prototype.ep=function(){return!0};u.prototype.Po=function(){return!0};u.prototype.Wo=function(a){return a?this.b.xi(a,this.Tc,this.Uc):!1};u.prototype.fp=function(a){return a?this.b.xi(a,this.Tc, this.Uc):!1};u.prototype.Qo=function(a){return a?this.b.xi(a,this.Tc,this.Uc):!1};b.e=new u;c.prototype.dl=function(a,b){var c=this.Te;if(0>c||c>=this.touches.length)a.u(0);else{var d,e,f,h,g;ja(b)?(d=this.b.Sf(0),e=d.scale,f=d.yc,h=d.Yb,g=d.j,d.scale=1,d.yc=1,d.Yb=1,d.j=0,a.u(d.Wa(this.touches[c].x,this.touches[c].y,!0)),d.scale=e,d.yc=f,d.Yb=h,d.j=g):(d=M(b)?this.b.Sf(b):this.b.uj(b))?a.u(d.Wa(this.touches[c].x,this.touches[c].y,!0)):a.u(0)}};c.prototype.el=function(a,b){var c=this.Te;if(0>c||c>= this.touches.length)a.u(0);else{var d,e,f,h,g;ja(b)?(d=this.b.Sf(0),e=d.scale,f=d.yc,h=d.Zb,g=d.j,d.scale=1,d.yc=1,d.Zb=1,d.j=0,a.u(d.Wa(this.touches[c].x,this.touches[c].y,!1)),d.scale=e,d.yc=f,d.Zb=h,d.j=g):(d=M(b)?this.b.Sf(b):this.b.uj(b))?a.u(d.Wa(this.touches[c].x,this.touches[c].y,!1)):a.u(0)}};b.ca=new c})();function fc(g){this.b=g} (function(){function g(){}function q(){}function p(){}var r=fc.prototype;r.ma=function(b){this.ia=b;this.b=b.b};r.ma.prototype.T=function(){};r.da=function(b){this.type=b;this.b=b.b};var u=r.da.prototype,c="",b="undefined"!==typeof window.is_scirra_arcade;b&&(c="arcade"+window.scirra_arcade_id);u.T=function(){"undefined"===typeof localStorage&&B("[Construct 2] Webstorage plugin: local storage is not supported on this platform.");"undefined"===typeof sessionStorage&&B("[Construct 2] Webstorage plugin: session storage is not supported on this platform.")}; g.prototype.Io=function(b){return"undefined"===typeof localStorage?!1:null!=localStorage.getItem(c+b)};g.prototype.Zk=function(){return!0};r.e=new g;q.prototype.Ap=function(b,e){if("undefined"!==typeof localStorage)try{localStorage.setItem(c+b,e)}catch(g){this.b.trigger(fc.prototype.e.Zk,this)}};q.prototype.Sk=function(h,e){if("undefined"!==typeof localStorage){var g;try{g=JSON.parse(h)}catch(a){return}if(g.c2dictionary){g=g.data;0!==e||b||localStorage.clear();for(var k in g)if(g.hasOwnProperty(k))try{localStorage.setItem(c+ k,g[k])}catch(n){this.b.trigger(fc.prototype.e.Zk,this);break}}}};r.C=new q;p.prototype.Jo=function(b,e){"undefined"===typeof localStorage?b.ya(""):b.ya(localStorage.getItem(c+e)||"")};p.prototype.Vg=function(h){if("undefined"===typeof localStorage)h.ya("");else{var e={},g,a,k;g=0;for(a=localStorage.length;g<a;g++)k=localStorage.key(g),b?k.substr(0,c.length)===c&&(e[k.substr(c.length)]=localStorage.getItem(k)):e[k]=localStorage.getItem(k);h.ya(JSON.stringify({c2dictionary:!0,data:e}))}};r.ca=new p})(); function gc(g){this.b=g;var q=this;this.b.ha||(jQuery(document).mousemove(function(g){q.ck(g)}),jQuery(document).mousedown(function(g){q.bk(g)}),jQuery(document).mouseup(function(g){q.dk(g)}));g=0<this.b.kb?document:this.b.canvas;this.b.nc?g=window.Canvas:this.b.tb&&(g=window);window.navigator.pointerEnabled?(g.addEventListener("pointerdown",function(g){q.ug(g)},!1),g.addEventListener("pointermove",function(g){q.tg(g)},!1),g.addEventListener("pointerup",function(g){q.fd(g)},!1),g.addEventListener("pointercancel", function(g){q.fd(g)},!1)):window.navigator.msPointerEnabled?(g.addEventListener("MSPointerDown",function(g){q.ug(g)},!1),g.addEventListener("MSPointerMove",function(g){q.tg(g)},!1),g.addEventListener("MSPointerUp",function(g){q.fd(g)},!1),g.addEventListener("MSPointerCancel",function(g){q.fd(g)},!1)):(g.addEventListener("touchstart",function(g){q.ei(g)},!1),g.addEventListener("touchmove",function(g){q.di(g)},!1),g.addEventListener("touchend",function(g){q.nf(g)},!1),g.addEventListener("touchcancel", function(g){q.nf(g)},!1))} (function(){function g(b){var c,e;c=0;for(e=b.F.length;c<e;c++)if(b.F[c]instanceof r.da)return b.F[c];return null}function q(){}function p(){}var r=gc.prototype,u={left:0,top:0};r.bk=function(b){1===b.which&&this.Yj("leftmouse",b.pageX,b.pageY)};r.ck=function(b){1===b.which&&this.Zj("leftmouse",b.pageX,b.pageY)};r.dk=function(b){1===b.which&&this.$j("leftmouse")};r.ei=function(b){b.preventDefault&&eb(b)&&b.preventDefault();var c,e,g,a;c=0;for(e=b.changedTouches.length;c<e;c++)g=b.changedTouches[c], a=g.identifier,this.Yj(a?a.toString():"<none>",g.pageX,g.pageY)};r.di=function(b){b.preventDefault&&b.preventDefault();var c,e,g,a;c=0;for(e=b.changedTouches.length;c<e;c++)g=b.changedTouches[c],a=g.identifier,this.Zj(a?a.toString():"<none>",g.pageX,g.pageY)};r.nf=function(b){b.preventDefault&&eb(b)&&b.preventDefault();var c,e,g;c=0;for(e=b.changedTouches.length;c<e;c++)g=b.changedTouches[c],g=g.identifier,this.$j(g?g.toString():"<none>")};r.ug=function(b){b.pointerType!==b.MSPOINTER_TYPE_MOUSE&& "mouse"!==b.pointerType&&(b.preventDefault&&eb(b)&&b.preventDefault(),this.Yj(b.pointerId.toString(),b.pageX,b.pageY))};r.tg=function(b){b.pointerType!==b.MSPOINTER_TYPE_MOUSE&&"mouse"!==b.pointerType&&(b.preventDefault&&b.preventDefault(),this.Zj(b.pointerId.toString(),b.pageX,b.pageY))};r.fd=function(b){b.pointerType!==b.MSPOINTER_TYPE_MOUSE&&"mouse"!==b.pointerType&&(b.preventDefault&&eb(b)&&b.preventDefault(),this.$j(b.pointerId.toString()))};r.Yj=function(b,c,e){var m=this.b.ha?u:jQuery(this.b.canvas).offset(); c-=m.left;e-=m.top;var a,k,n,f,m=this.jf.wc(),p,q,r,t=null;p=0;for(q=m.length;p<q;p++)if(r=m[p],a=g(r),a.enabled&&!a.Bc&&(a=r.g.Wa(c,e,!0),k=r.g.Wa(c,e,!1),r.ga(),r.ab(a,k)))t?r.g.index>t.g.index?(t=r,n=a,f=k):r.g.index===t.g.index&&r.Qb()>t.Qb()&&(t=r,n=a,f=k):(t=r,n=a,f=k);t&&g(t).as(b,n,f)};r.Zj=function(b,c,e){var m=this.b.ha?u:jQuery(this.b.canvas).offset();c-=m.left;e-=m.top;var a,k=this.jf.wc(),n,f,p;n=0;for(f=k.length;n<f;n++)a=k[n],p=g(a),!p.enabled||!p.Bc||p.Bc&&p.ej!==b||(m=a.g.Wa(c,e, !0),a=a.g.Wa(c,e,!1),p.bs(m,a))};r.$j=function(b){var c=this.jf.wc(),e,m,a;e=0;for(m=c.length;e<m;e++)a=c[e],a=g(a),a.Bc&&a.ej===b&&a.dn()};r.ma=function(b){this.behavior=b;this.b=b.b};r.ma.prototype.T=function(){};r.da=function(b,c){this.type=b;this.behavior=b.behavior;this.d=c;this.b=b.b};var c=r.da.prototype;c.T=function(){this.Bc=!1;this.Gl=this.Fl=0;this.ej="<none>";this.Ri=this.D[0];this.enabled=0!==this.D[1]};c.mb=function(){return{enabled:this.enabled}};c.Gb=function(b){this.enabled=b.enabled; this.Bc=!1};c.as=function(b,c,e){this.Fl=c-this.d.x;this.Gl=e-this.d.y;this.Bc=!0;this.ej=b;this.b.Tb=!0;this.b.trigger(gc.prototype.e.Ro,this.d);this.b.Tb=!1};c.bs=function(b,c){var e=b-this.Fl,g=c-this.Gl;if(0===this.Ri){if(this.d.x!==e||this.d.y!==g)this.d.x=e,this.d.y=g,this.d.ka()}else 1===this.Ri?this.d.x!==e&&(this.d.x=e,this.d.ka()):2===this.Ri&&this.d.y!==g&&(this.d.y=g,this.d.ka())};c.dn=function(){this.Bc=!1;this.b.Tb=!0;this.b.trigger(gc.prototype.e.So,this.d);this.b.Tb=!1};c.Mc=function(){}; q.prototype.Do=function(){return this.Bc};q.prototype.Ro=function(){return!0};q.prototype.So=function(){return!0};r.e=new q;p.prototype.np=function(b){this.enabled=0!==b;this.enabled||(this.Bc=!1)};p.prototype.ro=function(){this.Bc&&this.dn()};r.C=new p;r.ca=new function(){}})();function hc(g){this.b=g} (function(){function g(){}var q=hc.prototype;q.ma=function(g){this.behavior=g;this.b=g.b};q.ma.prototype.T=function(){};q.da=function(g,p){this.type=g;this.behavior=g.behavior;this.d=p;this.b=g.b};var p=q.da.prototype;p.T=function(){var g=1===this.D[0];this.Pf=this.D[1];this.Ug=this.D[2];this.wh=this.D[3];this.Zp=this.D[4];this.Ib=g?0:3;this.Hb?this.$b.reset():this.$b=new Wa;this.ze=this.d.opacity?this.d.opacity:1;g&&(0===this.Pf?(this.Ib=1,0===this.Ug&&(this.Ib=2)):(this.d.opacity=0,this.b.W=!0))}; p.mb=function(){return{fit:this.Pf,wt:this.Ug,fot:this.wh,s:this.Ib,st:this.$b.la,mo:this.ze}};p.Gb=function(g){this.Pf=g.fit;this.Ug=g.wt;this.wh=g.fot;this.Ib=g.s;this.$b.reset();this.$b.la=g.st;this.ze=g.mo};p.Mc=function(){this.$b.add(this.b.Ch(this.d));0===this.Ib&&(this.d.opacity=this.$b.la/this.Pf*this.ze,this.b.W=!0,this.d.opacity>=this.ze&&(this.d.opacity=this.ze,this.Ib=1,this.$b.reset(),this.b.trigger(hc.prototype.e.To,this.d)));1===this.Ib&&this.$b.la>=this.Ug&&(this.Ib=2,this.$b.reset(), this.b.trigger(hc.prototype.e.gp,this.d));2===this.Ib&&0!==this.wh&&(this.d.opacity=this.ze-this.$b.la/this.wh*this.ze,this.b.W=!0,0>this.d.opacity&&(this.d.opacity=0,this.Ib=3,this.$b.reset(),this.b.trigger(hc.prototype.e.Uo,this.d),1===this.Zp&&this.b.Wd(this.d)))};p.Mt=function(){this.Ib=0;this.$b.reset();0===this.Pf?(this.Ib=1,0===this.Ug&&(this.Ib=2)):(this.d.opacity=0,this.b.W=!0)};g.prototype.Uo=function(){return!0};g.prototype.To=function(){return!0};g.prototype.gp=function(){return!0};q.e= new g;q.C=new function(){};q.ca=new function(){}})();function ic(g){this.b=g} (function(){function g(){}var q=ic.prototype;q.ma=function(b){this.behavior=b;this.b=b.b};q.ma.prototype.T=function(){};q.da=function(b,c){this.type=b;this.behavior=b.behavior;this.d=c;this.b=b.b;this.Ga=0};var p=q.da.prototype,r=2*Math.PI,u=Math.PI/2,c=3*Math.PI/2;p.T=function(){this.Va=1===this.D[0];this.Md=this.D[1];this.Ii=this.D[2];this.Fc=this.D[3];this.Fc+=Math.random()*this.D[4];0===this.Fc?this.Ga=0:(this.Ga=this.D[5]/this.Fc*r,this.Ga+=Math.random()*this.D[6]/this.Fc*r);this.Ka=this.D[7]; this.Ka+=Math.random()*this.D[8];this.Bg=this.le=this.Q=0;this.init()};p.mb=function(){return{i:this.Ga,a:this.Va,mv:this.Md,w:this.Ii,p:this.Fc,mag:this.Ka,iv:this.Q,iv2:this.le,r:this.Bg,lkv:this.wb,lkv2:this.gg}};p.Gb=function(b){this.Ga=b.i;this.Va=b.a;this.Md=b.mv;this.Ii=b.w;this.Fc=b.p;this.Ka=b.mag;this.Q=b.iv;this.le=b.iv2||0;this.Bg=b.r;this.wb=b.lkv;this.gg=b.lkv2||0};p.init=function(){switch(this.Md){case 0:this.Q=this.d.x;break;case 1:this.Q=this.d.y;break;case 2:this.Q=this.d.width; this.Bg=this.d.height/this.d.width;break;case 3:this.Q=this.d.width;break;case 4:this.Q=this.d.height;break;case 5:this.Q=this.d.j;this.Ka=S(this.Ka);break;case 6:this.Q=this.d.opacity;break;case 7:this.Q=0;break;case 8:this.Q=this.d.x,this.le=this.d.y}this.wb=this.Q;this.gg=this.le};p.nd=function(b){b%=r;switch(this.Ii){case 0:return Math.sin(b);case 1:return b<=u?b/u:b<=c?1-2*(b-u)/Math.PI:(b-c)/u-1;case 2:return 2*b/r-1;case 3:return-2*b/r+1;case 4:return b<Math.PI?-1:1}return 0};p.Mc=function(){var b= this.b.Ch(this.d);if(this.Va&&0!==b){0===this.Fc?this.Ga=0:(this.Ga+=b/this.Fc*r,this.Ga%=r);switch(this.Md){case 0:this.d.x!==this.wb&&(this.Q+=this.d.x-this.wb);this.d.x=this.Q+this.nd(this.Ga)*this.Ka;this.wb=this.d.x;break;case 1:this.d.y!==this.wb&&(this.Q+=this.d.y-this.wb);this.d.y=this.Q+this.nd(this.Ga)*this.Ka;this.wb=this.d.y;break;case 2:this.d.width=this.Q+this.nd(this.Ga)*this.Ka;this.d.height=this.d.width*this.Bg;break;case 3:this.d.width=this.Q+this.nd(this.Ga)*this.Ka;break;case 4:this.d.height= this.Q+this.nd(this.Ga)*this.Ka;break;case 5:this.d.j!==this.wb&&(this.Q=Ha(this.Q+(this.d.j-this.wb)));this.d.j=Ha(this.Q+this.nd(this.Ga)*this.Ka);this.wb=this.d.j;break;case 6:this.d.opacity=this.Q+this.nd(this.Ga)*this.Ka/100;0>this.d.opacity?this.d.opacity=0:1<this.d.opacity&&(this.d.opacity=1);break;case 8:this.d.x!==this.wb&&(this.Q+=this.d.x-this.wb),this.d.y!==this.gg&&(this.le+=this.d.y-this.gg),this.d.x=this.Q+Math.cos(this.d.j)*this.nd(this.Ga)*this.Ka,this.d.y=this.le+Math.sin(this.d.j)* this.nd(this.Ga)*this.Ka,this.wb=this.d.x,this.gg=this.d.y}this.d.ka()}};p.cn=function(b,c){switch(this.Md){case 2:this.Q*=c.width/b.width;this.Bg=c.height/c.width;break;case 3:this.Q*=c.width/b.width;break;case 4:this.Q*=c.height/b.height}};q.e=new function(){};g.prototype.ip=function(b){this.Va=1===b};g.prototype.sp=function(b){this.Fc=b};g.prototype.pp=function(b){this.Ka=b;5===this.Md&&(this.Ka=S(this.Ka))};g.prototype.qp=function(b){5===this.Md&&(this.Ka=Fa(this.Ka));this.Md=b;this.init()};g.prototype.xp= function(b){this.Ii=b};q.C=new g;q.ca=new function(){}})();function jc(g){this.b=g} (function(){var g=jc.prototype;g.ma=function(g){this.behavior=g;this.b=g.b};g.ma.prototype.T=function(){};g.da=function(g,p){this.type=g;this.behavior=g.behavior;this.d=p;this.b=g.b;this.mode=0};g=g.da.prototype;g.T=function(){this.mode=this.D[0]};g.Mc=function(){};g.Bi=function(){this.d.ga();var g=this.d.ua,p=this.d.g.Ja,r=!1;0===this.mode?(0>this.d.x&&(this.d.x=0,r=!0),0>this.d.y&&(this.d.y=0,r=!0),this.d.x>p.width&&(this.d.x=p.width,r=!0),this.d.y>p.height&&(this.d.y=p.height,r=!0)):(0>g.left&& (this.d.x-=g.left,r=!0),0>g.top&&(this.d.y-=g.top,r=!0),g.right>p.width&&(this.d.x-=g.right-p.width,r=!0),g.bottom>p.height&&(this.d.y-=g.bottom-p.height,r=!0));r&&this.d.ka()}})(); function bc(){return[cc,Y,Z,dc,X,ec,fc,gc,jc,ic,hc,W.prototype.e.uo,gc.prototype.e.Do,X.prototype.C.tp,W.prototype.ca.Qr,X.prototype.ca.dl,W.prototype.ca.round,X.prototype.ca.el,X.prototype.e.Fo,gc.prototype.C.ro,X.prototype.e.Eo,X.prototype.C.op,X.prototype.e.Bo,gc.prototype.C.np,X.prototype.e.Pk,X.prototype.C.rp,W.prototype.e.Dp,cc.prototype.C.bl,W.prototype.ca.max,cc.prototype.ca.ho,X.prototype.C.kp,W.prototype.C.eo,dc.prototype.e.Wg,cc.prototype.C.Sk,W.prototype.e.vo,cc.prototype.ca.Rk,dc.prototype.C.mp, W.prototype.ca.Tr,W.prototype.e.Uk,dc.prototype.e.Pk,W.prototype.e.oo,dc.prototype.C.vp,W.prototype.C.wp,Z.prototype.e.Mi,W.prototype.C.yo,X.prototype.e.no,Y.prototype.C.zo,ic.prototype.C.ip,W.prototype.C.po,ic.prototype.C.qp,ic.prototype.C.pp,ic.prototype.C.sp,ic.prototype.C.xp,W.prototype.e.to,W.prototype.e.ko,W.prototype.C.hp,dc.prototype.C.qo,X.prototype.C.Ko,W.prototype.e.Tk,fc.prototype.C.Ap,cc.prototype.ca.Vg,W.prototype.C.xo,fc.prototype.e.Io,fc.prototype.ca.Jo,W.prototype.C.Bp,X.prototype.e.lo, cc.prototype.e.Qk,W.prototype.e.wo,X.prototype.C.jp,W.prototype.C.Ep,Z.prototype.e.Ni,ec.prototype.C.yp,ec.prototype.ca.cl,W.prototype.ca.de]};
| ver. 1.4 |
Github
|
.
| PHP 8.2.29 | Генераци� �траницы: 0.72 |
proxy
|
phpinfo
|
�а�тройка