{"ScriptPreparationCode":"debugger;\r\nvar position_count = 15000;\r\nvar joint_count = 30;\r\nvar max_number_of_consecutive_joints = 15;\r\nvar vertex_dim = 3;\r\n\r\nvar MEM_SIZE = 100*1024*1024;\r\nvar MEM_STRIDE = 2*1024*1024;\r\n\r\nvar MEM = new ArrayBuffer(MEM_SIZE);\r\nvar HEAP32 = new Int32Array(MEM);\r\nvar HEAPU32 = new Uint32Array(MEM);\r\nvar HEAPF32 = new Float32Array(MEM);\r\nvar HEAPF64 = new Float64Array(MEM);\r\nvar MEM_HEAD = 0;\r\n\r\nfunction MEM_ALLOC(len) {\r\n let cur = MEM_HEAD;\r\n len \u002B= MEM_STRIDE;\r\n MEM_HEAD \u002B= len \u002B (16 - (len % 16));\r\n return cur;\r\n}\r\n\r\nfunction splitmix32(a) {\r\n return function() {\r\n a |= 0; a = a \u002B 0x9e3779b9 | 0;\r\n var t = a ^ a \u003E\u003E\u003E 16; t = Math.imul(t, 0x21f0aaad);\r\n t = t ^ t \u003E\u003E\u003E 15; t = Math.imul(t, 0x735a2d97);\r\n return ((t = t ^ t \u003E\u003E\u003E 15) \u003E\u003E\u003E 0) / 4294967296;\r\n }\r\n}\r\n\r\nMath_random = splitmix32(0);\r\nMath_imul = Math.imul;\r\nMath_fround = Math.fround;\r\n\r\nif (typeof window !== \u0027undefined\u0027 \u0026\u0026 window.navigator \u0026\u0026 window.navigator.wakeLock)\r\n window.navigator.wakeLock.request(\u0027screen\u0027);\r\n\r\nvar positions = MEM_ALLOC(position_count * 3 * 4);\r\n\r\nfor (let i = 0; i \u003C position_count; \u002B\u002Bi) {\r\n const p = (positions \u003E\u003E 2) \u002B i * 3;\r\n HEAPF32[p] = Math_random() * 100;\r\n HEAPF32[p \u002B 1] = Math_random() * 100;\r\n HEAPF32[p \u002B 2] = Math_random() * 100;\r\n}\r\n\r\nvar repeat_last_joint = -1;\r\nvar last_joint;\r\nfunction get_joint() {\r\n if (repeat_last_joint \u003C 0) {\r\n repeat_last_joint = (Math_random() * max_number_of_consecutive_joints) |0;\r\n last_joint = Math_random() * (joint_count - 1) | 0;\r\n }\r\n repeat_last_joint -= 1;\r\n return last_joint;\r\n}\r\n\r\nvar joints = MEM_ALLOC(position_count * 4);\r\n\r\nfor (let i = 0; i \u003C position_count; \u002B\u002Bi) {\r\n const p = (joints \u003E\u003E 2) \u002B i;\r\n HEAPU32[p] = get_joint();\r\n}\r\n\r\nvar transformations = MEM_ALLOC(joint_count * 16 * 4);\r\n\r\nfor (let i = 0; i \u003C joint_count; \u002B\u002Bi) {\r\n const p = (transformations \u003E\u003E 2) \u002B i * 16;\r\n for (let j = 0; j \u003C 16; \u002B\u002Bj)\r\n HEAPF32[p \u002B j] = Math_random() * 100;\r\n}\r\n\r\nvar res = MEM_ALLOC(position_count * 3 * 4);\r\n\r\nvar positions_and_joints = MEM_ALLOC(position_count * 4 * 4);\r\n\r\nfor (let i = 0; i \u003C position_count; \u002B\u002Bi) {\r\n const p = (positions_and_joints \u003E\u003E 2) \u002B i * 4;\r\n HEAPU32[p] = get_joint();\r\n HEAPF32[p \u002B 1] = Math_random() * 100;\r\n HEAPF32[p \u002B 2] = Math_random() * 100;\r\n HEAPF32[p \u002B 3] = Math_random() * 100;\r\n}\r\n\r\nvar small_transformations = MEM_ALLOC(joint_count * 12 * 4);\r\n\r\nfor (let i = 0; i \u003C joint_count; \u002B\u002Bi) {\r\n const p = (small_transformations \u003E\u003E 2) \u002B i * 12;\r\n for (let j = 0; j \u003C 12; \u002B\u002Bj)\r\n HEAPF32[p \u002B j] = Math_random() * 100;\r\n}\r\n\r\nvar positions_f64 = MEM_ALLOC(position_count * 3 * 8);\r\n\r\nfor (let i = 0; i \u003C position_count; \u002B\u002Bi) {\r\n const p = (positions_f64 \u003E\u003E 3) \u002B i * 3;\r\n HEAPF64[p] = Math_random() * 100;\r\n HEAPF64[p \u002B 1] = Math_random() * 100;\r\n HEAPF64[p \u002B 2] = Math_random() * 100;\r\n}\r\n\r\nvar transformations_f64 = MEM_ALLOC(joint_count * 16 * 8);\r\n\r\nfor (let i = 0; i \u003C joint_count; \u002B\u002Bi) {\r\n const p = (transformations_f64 \u003E\u003E 3) \u002B i * 16;\r\n for (let j = 0; j \u003C 16; \u002B\u002Bj)\r\n HEAPF64[p \u002B j] = Math_random() * 100;\r\n}\r\n\r\nvar res_f64 = MEM_ALLOC(position_count * 3 * 8);\r\n\r\nvar vertexCount = position_count;\r\n\r\nvar positions_view = HEAPF32.subarray(positions \u003E\u003E 2, (positions \u003E\u003E 2) \u002B position_count * 3);\r\nvar joints_view = HEAPU32.subarray(joints \u003E\u003E 2, (joints \u003E\u003E 2) \u002B position_count);\r\nvar transformations_view = HEAPF32.subarray(transformations \u003E\u003E 2, (transformations \u003E\u003E 2) \u002B joint_count * 16);\r\nvar res_view = HEAPF32.subarray(res \u003E\u003E 2, (res \u003E\u003E 2) \u002B position_count * 3);\r\nvar positions_and_joints_uview = HEAPU32.subarray(positions_and_joints \u003E\u003E 2, (positions_and_joints \u003E\u003E 2) \u002B position_count * 4);\r\nvar positions_and_joints_fview = HEAPF32.subarray(positions_and_joints \u003E\u003E 2, (positions_and_joints \u003E\u003E 2) \u002B position_count * 4);\r\nvar small_transformations_view = HEAPF32.subarray(small_transformations \u003E\u003E 2, (small_transformations \u003E\u003E 2) \u002B joint_count * 12);\r\nvar positions_f64_view = HEAPF64.subarray(positions_f64 \u003E\u003E 3, (positions_f64 \u003E\u003E 3) \u002B position_count * 3);\r\nvar transformations_f64_view = HEAPF64.subarray(transformations_f64 \u003E\u003E 3, (transformations_f64 \u003E\u003E 3) \u002B joint_count * 16);\r\ndebugger;\r\n\r\nfunction Warmup() {\r\n let a = 0;\r\n for (let i = 0; i \u003C 8000000; i\u002B\u002B) {\r\n a \u002B= Math.exp(Math_random()) * Math.exp(Math_random()) * Math.exp(Math_random()) * Math.exp(Math_random());\r\n }\r\n}\r\n\r\nfunction void_20mat_mult_4_2c_204_2c_204_2c_204_2c_20float__28int_2c_20float_20_28__29_20_5b4_5d_2c_20float_20const_20_28__29_20_5b4_5d_2c_20float_20const_20_28__29_20_5b4_5d_5b4_5d_29($0, $1, $2, $3) {\r\n var $4 = 0, $5 = 0, $6 = 0;\r\n if (($0 | 0) \u003E= 1) {\r\n while (1) {\r\n $4 = $6 \u003C\u003C 4;\r\n $5 = $4 \u002B $1 | 0;\r\n $4 = $2 \u002B $4 | 0;\r\n HEAPF32[$5 \u003E\u003E 2] = Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$4 \u003E\u003E 2] * HEAPF32[$3 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$4 \u002B 4 \u003E\u003E 2] * HEAPF32[$3 \u002B 16 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 8 \u003E\u003E 2] * HEAPF32[$3 \u002B 32 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 12 \u003E\u003E 2] * HEAPF32[$3 \u002B 48 \u003E\u003E 2]);\r\n HEAPF32[$5 \u002B 4 \u003E\u003E 2] = Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$4 \u003E\u003E 2] * HEAPF32[$3 \u002B 4 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$4 \u002B 4 \u003E\u003E 2] * HEAPF32[$3 \u002B 20 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 8 \u003E\u003E 2] * HEAPF32[$3 \u002B 36 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 12 \u003E\u003E 2] * HEAPF32[$3 \u002B 52 \u003E\u003E 2]);\r\n HEAPF32[$5 \u002B 8 \u003E\u003E 2] = Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$4 \u003E\u003E 2] * HEAPF32[$3 \u002B 8 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$4 \u002B 4 \u003E\u003E 2] * HEAPF32[$3 \u002B 24 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 8 \u003E\u003E 2] * HEAPF32[$3 \u002B 40 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 12 \u003E\u003E 2] * HEAPF32[$3 \u002B 56 \u003E\u003E 2]);\r\n HEAPF32[$5 \u002B 12 \u003E\u003E 2] = Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$4 \u003E\u003E 2] * HEAPF32[$3 \u002B 12 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$4 \u002B 4 \u003E\u003E 2] * HEAPF32[$3 \u002B 28 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 8 \u003E\u003E 2] * HEAPF32[$3 \u002B 44 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$4 \u002B 12 \u003E\u003E 2] * HEAPF32[$3 \u002B 60 \u003E\u003E 2]);\r\n $6 = $6 \u002B 1 | 0;\r\n if (($6 | 0) != ($0 | 0)) {\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n \r\nfunction do_affine_28float__2c_20unsigned_20long_2c_20int_2c_20float__2c_20unsigned_20int__2c_20float_20_28__29_20_5b4_5d_5b4_5d_29($0, $1, $2, $3, $4, $5) {\r\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0;\r\n if (($1 | 0) \u003E 0) {\r\n $9 = $2 \u002B -2 | 0;\r\n while (1) {\r\n label$3 : {\r\n if ($9 \u003E\u003E\u003E 0 \u003E 2) {\r\n break label$3;\r\n }\r\n $2 = HEAP32[($7 \u003C\u003C 2) \u002B $4 \u003E\u003E 2];\r\n label$4 : {\r\n switch ($9 - 1 | 0) {\r\n default:\r\n $6 = $7 \u003C\u003C 3;\r\n $8 = $6 \u002B $0 | 0;\r\n $2 = ($2 \u003C\u003C 6) \u002B $5 | 0;\r\n $6 = $3 \u002B $6 | 0;\r\n HEAPF32[$8 \u003E\u003E 2] = HEAPF32[$2 \u002B 48 \u003E\u003E 2] \u002B Math_fround(HEAPF32[$2 \u002B 32 \u003E\u003E 2] \u002B Math_fround(Math_fround(Math_fround(HEAPF32[$6 \u003E\u003E 2] * HEAPF32[$2 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$6 \u002B 4 \u003E\u003E 2] * HEAPF32[$2 \u002B 16 \u003E\u003E 2])));\r\n HEAPF32[$8 \u002B 4 \u003E\u003E 2] = HEAPF32[$2 \u002B 52 \u003E\u003E 2] \u002B Math_fround(HEAPF32[$2 \u002B 36 \u003E\u003E 2] \u002B Math_fround(Math_fround(Math_fround(HEAPF32[$6 \u003E\u003E 2] * HEAPF32[$2 \u002B 4 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$6 \u002B 4 \u003E\u003E 2] * HEAPF32[$2 \u002B 20 \u003E\u003E 2])));\r\n break label$3;\r\n case 0:\r\n $6 = Math_imul($7, 12);\r\n $8 = $6 \u002B $0 | 0;\r\n $2 = ($2 \u003C\u003C 6) \u002B $5 | 0;\r\n $6 = $3 \u002B $6 | 0;\r\n HEAPF32[$8 \u003E\u003E 2] = HEAPF32[$2 \u002B 48 \u003E\u003E 2] \u002B Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$6 \u003E\u003E 2] * HEAPF32[$2 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$6 \u002B 4 \u003E\u003E 2] * HEAPF32[$2 \u002B 16 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$6 \u002B 8 \u003E\u003E 2] * HEAPF32[$2 \u002B 32 \u003E\u003E 2]));\r\n HEAPF32[$8 \u002B 4 \u003E\u003E 2] = HEAPF32[$2 \u002B 52 \u003E\u003E 2] \u002B Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$6 \u003E\u003E 2] * HEAPF32[$2 \u002B 4 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$6 \u002B 4 \u003E\u003E 2] * HEAPF32[$2 \u002B 20 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$6 \u002B 8 \u003E\u003E 2] * HEAPF32[$2 \u002B 36 \u003E\u003E 2]));\r\n HEAPF32[$8 \u002B 8 \u003E\u003E 2] = HEAPF32[$2 \u002B 56 \u003E\u003E 2] \u002B Math_fround(Math_fround(Math_fround(Math_fround(HEAPF32[$6 \u003E\u003E 2] * HEAPF32[$2 \u002B 8 \u003E\u003E 2]) \u002B Math_fround(0)) \u002B Math_fround(HEAPF32[$6 \u002B 4 \u003E\u003E 2] * HEAPF32[$2 \u002B 24 \u003E\u003E 2])) \u002B Math_fround(HEAPF32[$6 \u002B 8 \u003E\u003E 2] * HEAPF32[$2 \u002B 40 \u003E\u003E 2]));\r\n break label$3;\r\n case 1:\r\n break label$4;\r\n }\r\n }\r\n $6 = $7 \u003C\u003C 4;\r\n void_20mat_mult_4_2c_204_2c_204_2c_204_2c_20float__28int_2c_20float_20_28__29_20_5b4_5d_2c_20float_20const_20_28__29_20_5b4_5d_2c_20float_20const_20_28__29_20_5b4_5d_5b4_5d_29(1, $6 \u002B $0 | 0, $3 \u002B $6 | 0, ($2 \u003C\u003C 6) \u002B $5 | 0);\r\n }\r\n $7 = $7 \u002B 1 | 0;\r\n if (($7 | 0) != ($1 | 0)) {\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n\r\nfunction Original() {\r\n do_affine_28float__2c_20unsigned_20long_2c_20int_2c_20float__2c_20unsigned_20int__2c_20float_20_28__29_20_5b4_5d_5b4_5d_29(res, vertexCount, vertex_dim, positions, joints, transformations);\r\n}\r\n\r\nfunction UpdatedEmscripten() {\r\n var $3 = 0, $9 = Math_fround(0), $10 = 0, $11 = 0, $14 = 0, $15 = 0, $17 = 0, $24 = 0, $25 = 0, $27 = 0, $28 = 0;\r\n var $5 = position_count, $7 = transformations, $4 = res, $2 = vertex_dim, $12 = positions, $16 = joints, $8 = 0;\r\n if (($5 | 0) \u003E 0) {\r\n $17 = $2 - 2 | 0;\r\n while (1) {\r\n $14 = HEAP32[$16 \u002B ($8 \u003C\u003C 2) \u003E\u003E 2];\r\n label$594: {\r\n label$595: {\r\n switch ($17 | 0) {\r\n case 0:\r\n $2 = $8 \u003C\u003C 3;\r\n $24 = $2 \u002B $12 | 0;\r\n $25 = $2 \u002B $4 | 0;\r\n $11 = 0;\r\n $2 = 1;\r\n while (1) {\r\n $9 = Math_fround(0);\r\n $10 = 1;\r\n $3 = 0;\r\n while (1) {\r\n $15 = $11 \u003C\u003C 2;\r\n $27 = $7 \u002B ($14 \u003C\u003C 6) | 0;\r\n $9 = Math_fround(Math_fround(HEAPF32[$24 \u002B ($3 \u003C\u003C 2) \u003E\u003E 2] * HEAPF32[$15 \u002B ($27 \u002B ($3 \u003C\u003C 4) | 0) \u003E\u003E 2]) \u002B $9);\r\n $3 = 1;\r\n $28 = $10 \u0026 1;\r\n $10 = 0;\r\n if ($28) {\r\n continue;\r\n }\r\n break;\r\n }\r\n $3 = $15 \u002B $27 | 0;\r\n HEAPF32[$15 \u002B $25 \u003E\u003E 2] = Math_fround($9 \u002B HEAPF32[$3 \u002B 32 \u003E\u003E 2]) \u002B HEAPF32[$3 \u002B 48 \u003E\u003E 2];\r\n $11 = 1;\r\n $3 = $2;\r\n $2 = 0;\r\n if ($3) {\r\n continue;\r\n }\r\n break;\r\n }\r\n ;\r\n break label$594;\r\n case 1:\r\n $2 = Math_imul($8, 12);\r\n $11 = $2 \u002B $12 | 0;\r\n $15 = $2 \u002B $4 | 0;\r\n $10 = 0;\r\n while (1) {\r\n $9 = Math_fround(0);\r\n $3 = 0;\r\n while (1) {\r\n $2 = $10 \u003C\u003C 2;\r\n $24 = $7 \u002B ($14 \u003C\u003C 6) | 0;\r\n $9 = Math_fround(Math_fround(HEAPF32[$11 \u002B ($3 \u003C\u003C 2) \u003E\u003E 2] * HEAPF32[$2 \u002B ($24 \u002B ($3 \u003C\u003C 4) | 0) \u003E\u003E 2]) \u002B $9);\r\n $3 = $3 \u002B 1 | 0;\r\n if (($3 | 0) != 3) {\r\n continue;\r\n }\r\n break;\r\n }\r\n HEAPF32[$2 \u002B $15 \u003E\u003E 2] = $9 \u002B HEAPF32[($2 \u002B $24 | 0) \u002B 48 \u003E\u003E 2];\r\n $10 = $10 \u002B 1 | 0;\r\n if (($10 | 0) != 3) {\r\n continue;\r\n }\r\n break;\r\n }\r\n ;\r\n break label$594;\r\n case 2:\r\n break label$595;\r\n default:\r\n break label$594;\r\n }\r\n }\r\n $2 = $8 \u003C\u003C 4;\r\n $11 = $2 \u002B $12 | 0;\r\n $2 = $2 \u002B $4 | 0;\r\n $10 = 0;\r\n while (1) {\r\n $9 = Math_fround(0);\r\n $3 = 0;\r\n while (1) {\r\n $15 = $10 \u003C\u003C 2;\r\n $9 = Math_fround(Math_fround(HEAPF32[$11 \u002B ($3 \u003C\u003C 2) \u003E\u003E 2] * HEAPF32[$15 \u002B (($7 \u002B ($14 \u003C\u003C 6) | 0) \u002B ($3 \u003C\u003C 4) | 0) \u003E\u003E 2]) \u002B $9);\r\n $3 = $3 \u002B 1 | 0;\r\n if (($3 | 0) != 4) {\r\n continue;\r\n }\r\n break;\r\n }\r\n HEAPF32[$2 \u002B $15 \u003E\u003E 2] = $9;\r\n $10 = $10 \u002B 1 | 0;\r\n if (($10 | 0) != 4) {\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n $8 = $8 \u002B 1 | 0;\r\n if (($5 | 0) != ($8 | 0)) {\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n $10 = 15;\r\n}\r\n\r\nfunction LoicRewrite() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BHEAPF32[M ] \u002B P2 * \u002BHEAPF32[M \u002B 4 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BHEAPF32[M \u002B 1 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 5 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BHEAPF32[M \u002B 2 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 6 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnTrans() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const MAT = HEAPF32.subarray(M, M \u002B 16 | 0);\r\n \r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BMAT[0] \u002B P2 * \u002BMAT[4] \u002B P3 * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BMAT[1] \u002B P2 * \u002BMAT[5] \u002B P3 * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BMAT[2] \u002B P2 * \u002BMAT[6] \u002B P3 * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnPos() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const POS = HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BHEAPF32[M ] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 4 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BHEAPF32[M \u002B 1 | 0] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 5 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BHEAPF32[M \u002B 2 | 0] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 6 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnTransAndPos() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const MAT = HEAPF32.subarray(M, M \u002B 16 | 0);\r\n const POS = HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BMAT[0] \u002B \u002BPOS[1] * \u002BMAT[4] \u002B \u002BPOS[2] * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BMAT[1] \u002B \u002BPOS[1] * \u002BMAT[5] \u002B \u002BPOS[2] * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BMAT[2] \u002B \u002BPOS[1] * \u002BMAT[6] \u002B \u002BPOS[2] * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnTransAndPosWithFRound() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const MAT = HEAPF32.subarray(M, M \u002B 16 | 0);\r\n const POS = HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = Math.fround(Math.fround(Math.fround(Math.fround(Math.fround(POS[0]) * Math.fround(MAT[0])) \u002B Math.fround(Math.fround(POS[1]) * Math.fround(MAT[4]))) \u002B Math.fround(Math.fround(POS[2]) * Math.fround(MAT[ 8]))) \u002B Math.fround(MAT[12]));\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = Math.fround(Math.fround(Math.fround(Math.fround(Math.fround(POS[0]) * Math.fround(MAT[1])) \u002B Math.fround(Math.fround(POS[1]) * Math.fround(MAT[5]))) \u002B Math.fround(Math.fround(POS[2]) * Math.fround(MAT[ 9]))) \u002B Math.fround(MAT[13]));\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = Math.fround(Math.fround(Math.fround(Math.fround(Math.fround(POS[0]) * Math.fround(MAT[2])) \u002B Math.fround(Math.fround(POS[1]) * Math.fround(MAT[6]))) \u002B Math.fround(Math.fround(POS[2]) * Math.fround(MAT[10]))) \u002B Math.fround(MAT[14]));\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnTransAndPosWithoutPlus() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const MAT = HEAPF32.subarray(M, M \u002B 16 | 0);\r\n const POS = HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = POS[0] * MAT[0] \u002B POS[1] * MAT[4] \u002B POS[2] * MAT[ 8] \u002B MAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = POS[0] * MAT[1] \u002B POS[1] * MAT[5] \u002B POS[2] * MAT[ 9] \u002B MAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = POS[0] * MAT[2] \u002B POS[1] * MAT[6] \u002B POS[2] * MAT[10] \u002B MAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction PosInOutOfTheLoopF32Array() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let POS = new Float32Array(3);\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n\r\n POS[0] = \u002BHEAPF32[position_F32];\r\n POS[1] = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n POS[2] = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n\r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BHEAPF32[M ] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 4 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BHEAPF32[M \u002B 1 | 0] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 5 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BHEAPF32[M \u002B 2 | 0] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 6 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction PosInOutOfTheLoopF32ArrayFromSubarray() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let POS = new Float32Array(3);\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n POS.set(HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0));\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BHEAPF32[M ] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 4 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BHEAPF32[M \u002B 1 | 0] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 5 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BHEAPF32[M \u002B 2 | 0] \u002B \u002BPOS[1] * \u002BHEAPF32[M \u002B 6 | 0] \u002B \u002BPOS[2] * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction PosInOutOfTheLoopVars() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let P1, P2, P3;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n P1 = \u002BHEAPF32[position_F32];\r\n P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BHEAPF32[M ] \u002B P2 * \u002BHEAPF32[M \u002B 4 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BHEAPF32[M \u002B 1 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 5 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BHEAPF32[M \u002B 2 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 6 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction CacheTransWithSubarray() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n MAT = HEAPF32.subarray(M, M \u002B 16 | 0); \r\n }\r\n \r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BMAT[0] \u002B P2 * \u002BMAT[4] \u002B P3 * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BMAT[1] \u002B P2 * \u002BMAT[5] \u002B P3 * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BMAT[2] \u002B P2 * \u002BMAT[6] \u002B P3 * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction CacheTransWithSlice() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n MAT = HEAPF32.slice(M, M \u002B 16 | 0); \r\n }\r\n \r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BMAT[0] \u002B P2 * \u002BMAT[4] \u002B P3 * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BMAT[1] \u002B P2 * \u002BMAT[5] \u002B P3 * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BMAT[2] \u002B P2 * \u002BMAT[6] \u002B P3 * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction CacheTransWithF32ArraySetFromSubarray() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT = new Float32Array(16);\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n MAT.set(HEAPF32.subarray(M, M \u002B 16 | 0)); \r\n }\r\n \r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BMAT[0] \u002B P2 * \u002BMAT[4] \u002B P3 * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BMAT[1] \u002B P2 * \u002BMAT[5] \u002B P3 * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BMAT[2] \u002B P2 * \u002BMAT[6] \u002B P3 * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction CacheTransWithVarsFromSubarray() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0;\r\n // let M0 = Math.fround(0), M1 = Math.fround(0), M2 = Math.fround(0), M4 = Math.fround(0), M5 = Math.fround(0), M6 = Math.fround(0), M8 = Math.fround(0), M9 = Math.fround(0), M10 = Math.fround(0), M12 = Math.fround(0), M13 = Math.fround(0), M14 = Math.fround(0);\r\n let M0 , M1 , M2 , M4 , M5 , M6 , M8 , M9 , M10 , M12 , M13 , M14 ;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const MAT = HEAPF32.subarray(M, M \u002B 16 | 0);\r\n M0 = MAT[0];\r\n M1 = MAT[1];\r\n M2 = MAT[2];\r\n M4 = MAT[4];\r\n M5 = MAT[5];\r\n M6= MAT[6];\r\n M8 = MAT[8];\r\n M9 = MAT[9];\r\n M10 = MAT[10];\r\n M12 = MAT[12];\r\n M13 = MAT[13];\r\n M14 = MAT[14];\r\n }\r\n\r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n\r\n HEAPF32[resPosition_F32 ] = P1 * M0 \u002B P2 * M4 \u002B P3 * M8 \u002B M12;\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * M1 \u002B P2 * M5 \u002B P3 * M9 \u002B M13;\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * M2 \u002B P2 * M6 \u002B P3 * M10 \u002B M14;\r\n\r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction CacheTransWithArrayFromSubarray() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0;\r\n // let M = [Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0), Math.fround(0)];\r\n let M = [];\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n const MAT = HEAPF32.subarray(M, M \u002B 16 | 0);\r\n M[0] = MAT[0];\r\n M[1] = MAT[1];\r\n M[2] = MAT[2];\r\n M[3] = MAT[4];\r\n M[4] = MAT[5];\r\n M[5] = MAT[6];\r\n M[6] = MAT[8];\r\n M[7] = MAT[9];\r\n M[8] = MAT[10];\r\n M[9] = MAT[12];\r\n M[10] = MAT[13];\r\n M[11] = MAT[14];\r\n }\r\n \r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BM[0] \u002B P2 * \u002BM[3] \u002B P3 * \u002BM[6] \u002B \u002BM[9];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BM[1] \u002B P2 * \u002BM[4] \u002B P3 * \u002BM[7] \u002B \u002BM[10];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BM[2] \u002B P2 * \u002BM[5] \u002B P3 * \u002BM[8] \u002B \u002BM[11];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnPosAndCacheTransWithSubarray() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n MAT = HEAPF32.subarray(M, M \u002B 16 | 0); \r\n }\r\n \r\n const POS = HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BMAT[0] \u002B \u002BPOS[1] * \u002BMAT[4] \u002B \u002BPOS[2] * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BMAT[1] \u002B \u002BPOS[1] * \u002BMAT[5] \u002B \u002BPOS[2] * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BMAT[2] \u002B \u002BPOS[1] * \u002BMAT[6] \u002B \u002BPOS[2] * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnPosAndCacheTransWithSubarrayAndInterleavingData() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let positions_and_joints_32 = positions_and_joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[positions_and_joints_32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n MAT = HEAPF32.subarray(M, M \u002B 16 | 0); \r\n }\r\n \r\n const POS = HEAPF32.subarray(positions_and_joints_32 \u002B 1 | 0, positions_and_joints_32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BMAT[0] \u002B \u002BPOS[1] * \u002BMAT[4] \u002B \u002BPOS[2] * \u002BMAT[ 8] \u002B \u002BMAT[12];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BMAT[1] \u002B \u002BPOS[1] * \u002BMAT[5] \u002B \u002BPOS[2] * \u002BMAT[ 9] \u002B \u002BMAT[13];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BMAT[2] \u002B \u002BPOS[1] * \u002BMAT[6] \u002B \u002BPOS[2] * \u002BMAT[10] \u002B \u002BMAT[14];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n positions_and_joints_32 = positions_and_joints_32 \u002B 4 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnPosAndCacheTransWithSubarrayAndSmallTrans() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F32 = small_transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[joint_U32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B Math_imul(J, 12) | 0;\r\n MAT = HEAPF32.subarray(M, M \u002B 12 | 0);\r\n }\r\n \r\n const POS = HEAPF32.subarray(position_F32, position_F32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BMAT[0] \u002B \u002BPOS[1] * \u002BMAT[3] \u002B \u002BPOS[2] * \u002BMAT[6] \u002B \u002BMAT[ 9];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BMAT[1] \u002B \u002BPOS[1] * \u002BMAT[4] \u002B \u002BPOS[2] * \u002BMAT[7] \u002B \u002BMAT[10];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BMAT[2] \u002B \u002BPOS[1] * \u002BMAT[5] \u002B \u002BPOS[2] * \u002BMAT[8] \u002B \u002BMAT[11];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction SubarrayOnPosAndCacheTransWithSubarrayAndInterleavingDataAndSmallTrans() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let positions_and_joints_32 = positions_and_joints \u003E\u003E 2;\r\n const transformations_F32 = small_transformations \u003E\u003E 2;\r\n\r\n let J = -1|0, MAT;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const NJ = HEAPU32[positions_and_joints_32];\r\n if (NJ != J) {\r\n J = NJ;\r\n const M = transformations_F32 \u002B Math_imul(J, 12) | 0;\r\n MAT = HEAPF32.subarray(M, M \u002B 12 | 0);\r\n }\r\n \r\n const POS = HEAPF32.subarray(positions_and_joints_32 \u002B 1 | 0, positions_and_joints_32 \u002B 3 | 0);\r\n \r\n HEAPF32[resPosition_F32 ] = \u002BPOS[0] * \u002BMAT[0] \u002B \u002BPOS[1] * \u002BMAT[3] \u002B \u002BPOS[2] * \u002BMAT[6] \u002B \u002BMAT[ 9];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = \u002BPOS[0] * \u002BMAT[1] \u002B \u002BPOS[1] * \u002BMAT[4] \u002B \u002BPOS[2] * \u002BMAT[7] \u002B \u002BMAT[10];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = \u002BPOS[0] * \u002BMAT[2] \u002B \u002BPOS[1] * \u002BMAT[5] \u002B \u002BPOS[2] * \u002BMAT[8] \u002B \u002BMAT[11];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n positions_and_joints_32 = positions_and_joints_32 \u002B 4 | 0;\r\n }\r\n}\r\n\r\nfunction F64PosAndF64Trans() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F64 = positions_f64 \u003E\u003E 3;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F64 = transformations_f64 \u003E\u003E 3;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F64 \u002B (J \u003C\u003C 4) | 0;\r\n const P1 = \u002BHEAPF64[position_F64];\r\n const P2 = \u002BHEAPF64[position_F64 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF64[position_F64 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BHEAPF64[M ] \u002B P2 * \u002BHEAPF64[M \u002B 4 | 0] \u002B P3 * \u002BHEAPF64[M \u002B 8 | 0] \u002B \u002BHEAPF64[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BHEAPF64[M \u002B 1 | 0] \u002B P2 * \u002BHEAPF64[M \u002B 5 | 0] \u002B P3 * \u002BHEAPF64[M \u002B 9 | 0] \u002B \u002BHEAPF64[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BHEAPF64[M \u002B 2 | 0] \u002B P2 * \u002BHEAPF64[M \u002B 6 | 0] \u002B P3 * \u002BHEAPF64[M \u002B 10 | 0] \u002B \u002BHEAPF64[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F64 = position_F64 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction F64PosAndF64TransAndF64Res() {\r\n let resPosition_F64 = res_f64 \u003E\u003E 3;\r\n const endResPosition_F64 = (res_f64 \u003E\u003E 3) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F64 = positions_f64 \u003E\u003E 3;\r\n let joint_U32 = joints \u003E\u003E 2;\r\n const transformations_F64 = transformations_f64 \u003E\u003E 3;\r\n\r\n while (resPosition_F64 \u003E\u003E\u003E 0 \u003C endResPosition_F64 \u003E\u003E\u003E 0) {\r\n const J = HEAPU32[joint_U32];\r\n const M = transformations_F64 \u002B (J \u003C\u003C 4) | 0;\r\n const P1 = \u002BHEAPF64[position_F64];\r\n const P2 = \u002BHEAPF64[position_F64 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF64[position_F64 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F64 ] = P1 * \u002BHEAPF64[M ] \u002B P2 * \u002BHEAPF64[M \u002B 4 | 0] \u002B P3 * \u002BHEAPF64[M \u002B 8 | 0] \u002B \u002BHEAPF64[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F64 \u002B 1 | 0] = P1 * \u002BHEAPF64[M \u002B 1 | 0] \u002B P2 * \u002BHEAPF64[M \u002B 5 | 0] \u002B P3 * \u002BHEAPF64[M \u002B 9 | 0] \u002B \u002BHEAPF64[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F64 \u002B 2 | 0] = P1 * \u002BHEAPF64[M \u002B 2 | 0] \u002B P2 * \u002BHEAPF64[M \u002B 6 | 0] \u002B P3 * \u002BHEAPF64[M \u002B 10 | 0] \u002B \u002BHEAPF64[M \u002B 14 | 0];\r\n \r\n resPosition_F64 = resPosition_F64 \u002B 3 | 0;\r\n position_F64 = position_F64 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction I32Joint() {\r\n let resPosition_F32 = res \u003E\u003E 2;\r\n const endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n let position_F32 = positions \u003E\u003E 2;\r\n let joint_I32 = joints \u003E\u003E 2;\r\n const transformations_F32 = transformations \u003E\u003E 2;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n const J = HEAP32[joint_I32];\r\n const M = transformations_F32 \u002B Math_imul(J, 16) | 0;\r\n const P1 = \u002BHEAPF32[position_F32];\r\n const P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n const P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BHEAPF32[M ] \u002B P2 * \u002BHEAPF32[M \u002B 4 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BHEAPF32[M \u002B 1 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 5 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BHEAPF32[M \u002B 2 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 6 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_I32 = joint_I32 \u002B 1 | 0;\r\n }\r\n}\r\n\r\nfunction VarInsteadOfLetAndConst() {\r\n var resPosition_F32 = res \u003E\u003E 2;\r\n var endResPosition_F32 = (res \u003E\u003E 2) \u002B Math_imul(vertexCount, 3) | 0;\r\n var position_F32 = positions \u003E\u003E 2;\r\n var joint_U32 = joints \u003E\u003E 2;\r\n var transformations_F32 = transformations \u003E\u003E 2;\r\n var J, M, P1, P2, P3;\r\n\r\n while (resPosition_F32 \u003E\u003E\u003E 0 \u003C endResPosition_F32 \u003E\u003E\u003E 0) {\r\n J = HEAPU32[joint_U32];\r\n M = transformations_F32 \u002B (J \u003C\u003C 4) | 0;\r\n P1 = \u002BHEAPF32[position_F32];\r\n P2 = \u002BHEAPF32[position_F32 \u002B 1 | 0];\r\n P3 = \u002BHEAPF32[position_F32 \u002B 2 | 0];\r\n \r\n HEAPF32[resPosition_F32 ] = P1 * \u002BHEAPF32[M ] \u002B P2 * \u002BHEAPF32[M \u002B 4 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 8 | 0] \u002B \u002BHEAPF32[M \u002B 12 | 0];\r\n HEAPF32[resPosition_F32 \u002B 1 | 0] = P1 * \u002BHEAPF32[M \u002B 1 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 5 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 9 | 0] \u002B \u002BHEAPF32[M \u002B 13 | 0];\r\n HEAPF32[resPosition_F32 \u002B 2 | 0] = P1 * \u002BHEAPF32[M \u002B 2 | 0] \u002B P2 * \u002BHEAPF32[M \u002B 6 | 0] \u002B P3 * \u002BHEAPF32[M \u002B 10 | 0] \u002B \u002BHEAPF32[M \u002B 14 | 0];\r\n \r\n resPosition_F32 = resPosition_F32 \u002B 3 | 0;\r\n position_F32 = position_F32 \u002B 3 | 0;\r\n joint_U32 = joint_U32 \u002B 1 | 0;\r\n }\r\n}\r\n","TestCases":[{"Name":"Warmup","Code":"Warmup()","IsDeferred":false},{"Name":"Original","Code":"Original()","IsDeferred":false},{"Name":"UpdatedEmscripten","Code":"UpdatedEmscripten()","IsDeferred":false},{"Name":"LoicRewrite","Code":"LoicRewrite()","IsDeferred":false},{"Name":"SubarrayOnTrans","Code":"SubarrayOnTrans()","IsDeferred":false},{"Name":"SubarrayOnPos","Code":"SubarrayOnPos()","IsDeferred":false},{"Name":"SubarrayOnTransAndPos","Code":"SubarrayOnTransAndPos()","IsDeferred":false},{"Name":"SubarrayOnTransAndPosWithFRound","Code":"SubarrayOnTransAndPosWithFRound()","IsDeferred":false},{"Name":"SubarrayOnTransAndPosWithoutPlus","Code":"SubarrayOnTransAndPosWithoutPlus()","IsDeferred":false},{"Name":"PosInOutOfTheLoopF32Array","Code":"PosInOutOfTheLoopF32Array()","IsDeferred":false},{"Name":"PosInOutOfTheLoopF32ArrayFromSubarray","Code":"PosInOutOfTheLoopF32ArrayFromSubarray()","IsDeferred":false},{"Name":"PosInOutOfTheLoopVars","Code":"PosInOutOfTheLoopVars()","IsDeferred":false},{"Name":"CacheTransWithSubarray","Code":"CacheTransWithSubarray()","IsDeferred":false},{"Name":"CacheTransWithSlice","Code":"CacheTransWithSlice()","IsDeferred":false},{"Name":"CacheTransWithF32ArraySetFromSubarray","Code":"CacheTransWithF32ArraySetFromSubarray()","IsDeferred":false},{"Name":"CacheTransWithVarsFromSubarray","Code":"CacheTransWithVarsFromSubarray()","IsDeferred":false},{"Name":"CacheTransWithArrayFromSubarray","Code":"CacheTransWithArrayFromSubarray()","IsDeferred":false},{"Name":"SubarrayOnPosAndCacheTransWithSubarray","Code":"SubarrayOnPosAndCacheTransWithSubarray()","IsDeferred":false},{"Name":"SubarrayOnPosAndCacheTransWithSubarrayAndInterleavingData","Code":"SubarrayOnPosAndCacheTransWithSubarrayAndInterleavingData()","IsDeferred":false},{"Name":"SubarrayOnPosAndCacheTransWithSubarrayAndSmallTrans","Code":"SubarrayOnPosAndCacheTransWithSubarrayAndSmallTrans()","IsDeferred":false},{"Name":"SubarrayOnPosAndCacheTransWithSubarrayAndInterleavingDataAndSmallTrans","Code":"SubarrayOnPosAndCacheTransWithSubarrayAndInterleavingDataAndSmallTrans()","IsDeferred":false},{"Name":"F64PosAndF64Trans","Code":"F64PosAndF64Trans()","IsDeferred":false},{"Name":"F64PosAndF64TransAndF64Res","Code":"F64PosAndF64TransAndF64Res()","IsDeferred":false},{"Name":"I32Joint","Code":"I32Joint()","IsDeferred":false},{"Name":"VarInsteadOfLetAndConst","Code":"VarInsteadOfLetAndConst()","IsDeferred":false}]}