diff --git a/Telegram-iOS.xcworkspace/contents.xcworkspacedata b/Telegram-iOS.xcworkspace/contents.xcworkspacedata index 72d25624a6..aa7553d192 100644 --- a/Telegram-iOS.xcworkspace/contents.xcworkspacedata +++ b/Telegram-iOS.xcworkspace/contents.xcworkspacedata @@ -28,6 +28,9 @@ + + 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm left","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":67.738,"s":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[13.921,-11.416],[14.478,-13.108],[12.786,-13.665],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}],"e":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[12.733,-14.666],[13.29,-16.358],[11.599,-16.915],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":84.673,"s":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[12.733,-14.666],[13.29,-16.358],[11.599,-16.915],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}],"e":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[13.921,-11.416],[14.478,-13.108],[12.786,-13.665],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}]},{"t":101.607009887695}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[2,-6.969],"ix":2},"a":{"a":0,"k":[2,-9.969],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":67.738,"s":[90],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84.673,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":88.059,"s":[0],"e":[90]},{"t":101.607009887695}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm right","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":81.286,"s":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.234,8.474],[-12.881,15.048],[-12.586,16.888],[-12.411,16.996],[-10.746,16.594],[-5.964,9.747],[-0.006,4.393]],"c":true}],"e":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.297,6.224],[-12.443,12.673],[-12.148,14.513],[-11.974,14.621],[-10.309,14.219],[-6.026,7.497],[-0.006,4.393]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":88.059,"s":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.297,6.224],[-12.443,12.673],[-12.148,14.513],[-11.974,14.621],[-10.309,14.219],[-6.026,7.497],[-0.006,4.393]],"c":true}],"e":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.234,8.474],[-12.881,15.048],[-12.586,16.888],[-12.411,16.996],[-10.746,16.594],[-5.964,9.747],[-0.006,4.393]],"c":true}]},{"t":101.607009887695}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":67.738,"s":[-30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84.673,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":88.059,"s":[0],"e":[-30]},{"t":101.607009887695}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg left","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":81.286,"s":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[5.97,9.514],[10.735,16.594],[12.399,16.996],[12.574,16.888],[12.869,15.048],[9.04,8.191],[3.587,0.078]],"c":true}],"e":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[6.345,7.764],[10.36,14.219],[12.024,14.621],[12.199,14.513],[12.494,12.673],[9.415,6.441],[3.587,0.078]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":88.059,"s":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[6.345,7.764],[10.36,14.219],[12.024,14.621],[12.199,14.513],[12.494,12.673],[9.415,6.441],[3.587,0.078]],"c":true}],"e":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[5.97,9.514],[10.735,16.594],[12.399,16.996],[12.574,16.888],[12.869,15.048],[9.04,8.191],[3.587,0.078]],"c":true}]},{"t":101.607009887695}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":67.738,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84.673,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":88.059,"s":[0],"e":[30]},{"t":101.607009887695}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 2,\n 3,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg right","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.551,0.153],[0,0],[0,0],[-3.568,0.081],[0,0],[0,0]],"o":[[-0.548,0.165],[0,0],[0,0],[0,0],[3.568,-0.081],[0,0],[0.001,-0.048]],"v":[[1.526,-11.742],[-1.779,-11.724],[-3.864,-8.282],[-3.606,0.078],[-0.006,4.393],[3.587,0.078],[4.117,-8.282]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body","np":3,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":67.7380065917969,"op":101.607009887695,"st":67.7380065917969,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[400,400,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.083,-0.067],[-0.067,2.085],[2.085,0.067],[0.068,-2.084]],"o":[[2.084,0.068],[0.067,-2.084],[-2.083,-0.068],[-0.067,2.085]],"v":[[-0.123,3.772],[3.774,0.12],[0.122,-3.773],[-3.774,-0.124]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-14.438],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"head","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":33.869,"s":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-13.286,-13.415],[-14.978,-12.858],[-14.421,-11.166],[-8.351,-10.775],[-3.864,-8.282]],"c":true}],"e":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-11.599,-16.915],[-13.29,-16.358],[-12.733,-14.666],[-8.351,-10.775],[-3.864,-8.282]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50.804,"s":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-11.599,-16.915],[-13.29,-16.358],[-12.733,-14.666],[-8.351,-10.775],[-3.864,-8.282]],"c":true}],"e":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-13.286,-13.415],[-14.978,-12.858],[-14.421,-11.166],[-8.351,-10.775],[-3.864,-8.282]],"c":true}]},{"t":67.7380065917969}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-2.188,-6.875],"ix":2},"a":{"a":0,"k":[-2.188,-9.875],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33.869,"s":[-90],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":50.804,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54.19,"s":[0],"e":[-90]},{"t":67.7380065917969}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm left","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":33.869,"s":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[13.921,-11.416],[14.478,-13.108],[12.786,-13.665],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}],"e":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[12.733,-14.666],[13.29,-16.358],[11.599,-16.915],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":50.804,"s":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[12.733,-14.666],[13.29,-16.358],[11.599,-16.915],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}],"e":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[13.921,-11.416],[14.478,-13.108],[12.786,-13.665],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}]},{"t":67.7380065917969}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[2,-6.969],"ix":2},"a":{"a":0,"k":[2,-9.969],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33.869,"s":[90],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":50.804,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54.19,"s":[0],"e":[90]},{"t":67.7380065917969}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm right","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":47.417,"s":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.234,8.474],[-12.881,15.048],[-12.586,16.888],[-12.411,16.996],[-10.746,16.594],[-5.964,9.747],[-0.006,4.393]],"c":true}],"e":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.297,6.224],[-12.443,12.673],[-12.148,14.513],[-11.974,14.621],[-10.309,14.219],[-6.026,7.497],[-0.006,4.393]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":54.19,"s":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.297,6.224],[-12.443,12.673],[-12.148,14.513],[-11.974,14.621],[-10.309,14.219],[-6.026,7.497],[-0.006,4.393]],"c":true}],"e":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.234,8.474],[-12.881,15.048],[-12.586,16.888],[-12.411,16.996],[-10.746,16.594],[-5.964,9.747],[-0.006,4.393]],"c":true}]},{"t":67.7380065917969}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33.869,"s":[-30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":50.804,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54.19,"s":[0],"e":[-30]},{"t":67.7380065917969}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg left","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":47.417,"s":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[5.97,9.514],[10.735,16.594],[12.399,16.996],[12.574,16.888],[12.869,15.048],[9.04,8.191],[3.587,0.078]],"c":true}],"e":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[6.345,7.764],[10.36,14.219],[12.024,14.621],[12.199,14.513],[12.494,12.673],[9.415,6.441],[3.587,0.078]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":54.19,"s":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[6.345,7.764],[10.36,14.219],[12.024,14.621],[12.199,14.513],[12.494,12.673],[9.415,6.441],[3.587,0.078]],"c":true}],"e":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[5.97,9.514],[10.735,16.594],[12.399,16.996],[12.574,16.888],[12.869,15.048],[9.04,8.191],[3.587,0.078]],"c":true}]},{"t":67.7380065917969}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":33.869,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":50.804,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54.19,"s":[0],"e":[30]},{"t":67.7380065917969}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 2,\n 3,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg right","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.551,0.153],[0,0],[0,0],[-3.568,0.081],[0,0],[0,0]],"o":[[-0.548,0.165],[0,0],[0,0],[0,0],[3.568,-0.081],[0,0],[0.001,-0.048]],"v":[[1.526,-11.742],[-1.779,-11.724],[-3.864,-8.282],[-3.606,0.078],[-0.006,4.393],[3.587,0.078],[4.117,-8.282]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body","np":3,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":33.8690032958984,"op":67.7380065917969,"st":33.8690032958984,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[400,400,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.083,-0.067],[-0.067,2.085],[2.085,0.067],[0.068,-2.084]],"o":[[2.084,0.068],[0.067,-2.084],[-2.083,-0.068],[-0.067,2.085]],"v":[[-0.123,3.772],[3.774,0.12],[0.122,-3.773],[-3.774,-0.124]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-14.438],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"head","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-13.286,-13.415],[-14.978,-12.858],[-14.421,-11.166],[-8.351,-10.775],[-3.864,-8.282]],"c":true}],"e":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-11.599,-16.915],[-13.29,-16.358],[-12.733,-14.666],[-8.351,-10.775],[-3.864,-8.282]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16.935,"s":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-11.599,-16.915],[-13.29,-16.358],[-12.733,-14.666],[-8.351,-10.775],[-3.864,-8.282]],"c":true}],"e":[{"i":[[0.717,2.38],[0,0],[0,0],[0.313,-0.621],[-0.53,-0.458],[0,0],[-0.011,0.063]],"o":[[0,0],[0,0],[-0.545,-0.365],[-0.314,0.621],[0,0],[0,0],[2.396,0.532]],"v":[[-0.717,-11.599],[-7.06,-13.364],[-13.286,-13.415],[-14.978,-12.858],[-14.421,-11.166],[-8.351,-10.775],[-3.864,-8.282]],"c":true}]},{"t":33.8690032958984}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-2.188,-6.875],"ix":2},"a":{"a":0,"k":[-2.188,-9.875],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-90],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16.935,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20.321,"s":[0],"e":[-90]},{"t":33.8690032958984}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm left","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[13.921,-11.416],[14.478,-13.108],[12.786,-13.665],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}],"e":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[12.733,-14.666],[13.29,-16.358],[11.599,-16.915],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16.935,"s":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[12.733,-14.666],[13.29,-16.358],[11.599,-16.915],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}],"e":[{"i":[[0,0],[0,0],[0.314,0.621],[0.573,-0.371],[0,0],[-0.026,0.054],[-2.461,0.5]],"o":[[0,0],[0.607,-0.463],[-0.313,-0.621],[0,0],[0,0],[-1.183,2.773],[0.008,0]],"v":[[8.035,-10.775],[13.921,-11.416],[14.478,-13.108],[12.786,-13.665],[6.745,-13.364],[0.964,-11.617],[4.117,-8.282]],"c":true}]},{"t":33.8690032958984}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[2,-6.969],"ix":2},"a":{"a":0,"k":[2,-9.969],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[90],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16.935,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20.321,"s":[0],"e":[90]},{"t":33.8690032958984}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm right","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":13.548,"s":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.234,8.474],[-12.881,15.048],[-12.586,16.888],[-12.411,16.996],[-10.746,16.594],[-5.964,9.747],[-0.006,4.393]],"c":true}],"e":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.297,6.224],[-12.443,12.673],[-12.148,14.513],[-11.974,14.621],[-10.309,14.219],[-6.026,7.497],[-0.006,4.393]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":20.321,"s":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.297,6.224],[-12.443,12.673],[-12.148,14.513],[-11.974,14.621],[-10.309,14.219],[-6.026,7.497],[-0.006,4.393]],"c":true}],"e":[{"i":[[3.419,-0.047],[0,0],[0,0],[-0.589,-0.426],[-0.061,-0.031],[-0.387,0.532],[0,0],[0.006,-0.049]],"o":[[0.013,-0.047],[0,0],[-0.427,0.589],[0.056,0.041],[0.568,0.29],[0,0],[0,0],[0.975,-3.393]],"v":[[-3.606,0.078],[-9.234,8.474],[-12.881,15.048],[-12.586,16.888],[-12.411,16.996],[-10.746,16.594],[-5.964,9.747],[-0.006,4.393]],"c":true}]},{"t":33.8690032958984}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16.935,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20.321,"s":[0],"e":[-30]},{"t":33.8690032958984}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg left","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":13.548,"s":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[5.97,9.514],[10.735,16.594],[12.399,16.996],[12.574,16.888],[12.869,15.048],[9.04,8.191],[3.587,0.078]],"c":true}],"e":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[6.345,7.764],[10.36,14.219],[12.024,14.621],[12.199,14.513],[12.494,12.673],[9.415,6.441],[3.587,0.078]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":20.321,"s":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[6.345,7.764],[10.36,14.219],[12.024,14.621],[12.199,14.513],[12.494,12.673],[9.415,6.441],[3.587,0.078]],"c":true}],"e":[{"i":[[-1.494,-2.799],[0,0],[0,0],[-0.568,0.29],[-0.056,0.041],[0.427,0.589],[0,0],[0.007,0.016]],"o":[[-0.025,-0.018],[0,0],[0.385,0.532],[0.061,-0.031],[0.589,-0.426],[0,0],[0,0],[-3.118,-0.234]],"v":[[-0.006,4.393],[5.97,9.514],[10.735,16.594],[12.399,16.996],[12.574,16.888],[12.869,15.048],[9.04,8.191],[3.587,0.078]],"c":true}]},{"t":33.8690032958984}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16.935,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20.321,"s":[0],"e":[30]},{"t":33.8690032958984}],"ix":6,"x":"var $bm_rt;\nvar easingPreset = [\n [\n 3,\n 4,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 1,\n 2,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ],\n [\n 2,\n 3,\n [\n 'make_bezier_easing',\n [\n 0.25,\n 0.46,\n 0.45,\n 1\n ],\n 'Glide.Out',\n false\n ]\n ]\n ];\nfunction easingMaker() {\n var t, d, newProgress, sX, eX, sY, eY, sZ, eZ, val1, val2, val2, val3;\n var n = 0;\n if (numKeys > 0) {\n n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n try {\n var key1 = key(n);\n var key2 = key(sum(n, 1));\n } catch (e) {\n return null;\n }\n var dim = 1;\n try {\n key(1)[1];\n dim = 2;\n key(1)[2];\n dim = 3;\n } catch (e) {\n }\n var expression = null;\n for (var i = 0; i < easingPreset.length; ++i) {\n if (easingPreset[i][0] <= n && easingPreset[i][1] >= n + 1) {\n var expression = eval([easingPreset[i][2][0]][0]);\n try {\n expression = expression.apply({}, easingPreset[i][2][1].concat(easingPreset[i][2][3]));\n } catch (e) {\n expression = expression.apply({}, easingPreset[i][2][1]);\n }\n break;\n }\n }\n if (!expression)\n return null;\n t = sub(time, key1.time);\n d = sub(key2.time, key1.time);\n if (expression.hasOwnProperty('curviosity') && expression.curviosity) {\n newProgress = expression.executeProgress(div(t, d));\n return thisProperty.valueAtTime(sum(key1.time, mul(d, newProgress)));\n }\n sX = key1[0];\n eX = sub(key2[0], key1[0]);\n if (dim >= 2) {\n sY = key1[1];\n eY = sub(key2[1], key1[1]);\n if (dim >= 3) {\n sZ = key1[2];\n eZ = sub(key2[2], key1[2]);\n }\n }\n if (time < key1.time || time > key2.time) {\n return value;\n } else {\n val1 = expression.execute(t, sX, eX, d);\n switch (dim) {\n case 1:\n return val1;\n case 2:\n val2 = expression.execute(t, sY, eY, d);\n return [\n val1,\n val2\n ];\n case 3:\n val2 = expression.execute(t, sY, eY, d);\n val3 = expression.execute(t, sZ, eZ, d);\n return [\n val1,\n val2,\n val3\n ];\n default:\n return null;\n }\n }\n}\n$bm_rt = easingMaker() || value;\nfunction sampleCurveY(t) {\n return mul(sum(mul(sum(mul(this.ay, t), this.by), t), this.cy), t);\n}\nfunction sampleCurveX(t) {\n return mul(sum(mul(sum(mul(this.ax, t), this.bx), t), this.cx), t);\n}\nfunction sampleCurveDerivativeX(t) {\n return sum(mul(sum(mul(mul(3, this.ax), t), mul(2, this.bx)), t), this.cx);\n}\nfunction solveCurveX(x, epsilon) {\n var t2, i, x2, d2, t0, t1;\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sub(sampleCurveX.call(this, t2), x);\n if (Math.abs(x2) < epsilon)\n return t2;\n d2 = sampleCurveDerivativeX.call(this, t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = sub(t2, div(x2, d2));\n }\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = sampleCurveX.call(this, t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2)\n t0 = t2;\n else\n t1 = t2;\n t2 = sum(mul(sub(t1, t0), 0.5), t0);\n }\n return t2;\n}\nfunction executeBezier(t, b, e, d) {\n return sum(b, mul(e, sampleCurveY.call(this, solveCurveX.call(this, div(t, d), div(1, mul(200, d))))));\n}\nfunction executeBezierProgress(oldProgress) {\n return sampleCurveY.call(this, solveCurveX.call(this, oldProgress, 1 / 200));\n}\nfunction make_bezier_easing(p1x, p1y, p2x, p2y, curviosity) {\n this.cx = mul(3, p1x);\n this.bx = sub(mul(3, sub(p2x, p1x)), this.cx);\n this.ax = sub(sub(1, this.cx), this.bx);\n this.cy = mul(3, p1y);\n this.by = sub(mul(3, sub(p2y, p1y)), this.cy);\n this.ay = sub(sub(1, this.cy), this.by);\n this.curviosity = curviosity;\n this.execute = executeBezier;\n this.executeProgress = executeBezierProgress;\n return this;\n}\nfunction executeElasticIn(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum($bm_neg(mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n}\nfunction executeElasticOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d) === 1)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n return sum(sum(mul(mul(a, Math.pow(2, mul(-10, t))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), c), b);\n}\nfunction executeElasticInOut(t, b, c, d) {\n var s = 1.70158;\n var p = 0;\n var a = c;\n if (t === 0)\n return b;\n if ((t /= d / 2) === 2)\n return sum(b, c);\n if (!p)\n p = mul(d, 0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = div(p, 4);\n } else\n s = mul(div(p, mul(2, Math.PI)), Math.asin(1));\n if (t < 1)\n return sum(mul(-0.5, mul(mul(a, Math.pow(2, mul(10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p)))), b);\n return sum(sum(mul(mul(mul(a, Math.pow(2, mul(-10, t -= 1))), Math.sin(div(mul(sub(mul(t, d), s), mul(2, Math.PI)), p))), 0.5), c), b);\n}\nfunction executeElasticInProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : -Math.pow(2, 10 * Progress - 10) * Math.sin((Progress * 10 - 10.75) * (2 * Math.PI / 3));\n}\nfunction executeElasticOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Math.pow(2, -10 * Progress) * Math.sin((Progress * 10 - 0.75) * (2 * Math.PI / 3)) + 1;\n}\nfunction executeElasticInOutProgress(Progress) {\n return Progress === 0 ? 0 : Progress === 1 ? 1 : Progress < 0.5 ? -(Math.pow(2, 20 * Progress - 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5))) / 2 : Math.pow(2, -20 * Progress + 10) * Math.sin((20 * Progress - 11.125) * (2 * Math.PI / 4.5)) / 2 + 1;\n}\nfunction make_elastic_easing_in(curviosity) {\n this.execute = executeElasticIn;\n this.executeProgress = executeElasticInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_out(curviosity) {\n this.execute = executeElasticOut;\n this.executeProgress = executeElasticOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_elastic_easing_in_out(curviosity) {\n this.execute = executeElasticInOut;\n this.executeProgress = executeElasticInOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction executeBounceIn(t, b, c, d) {\n return sum(sub(c, executeBounceOut(sub(d, t), 0, c, d)), b);\n}\nfunction executeBounceOut(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return sum(mul(c, mul(mul(7.5625, t), t)), b);\n } else if (t < 2 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 1.5 / 2.75), t), 0.75)), b);\n } else if (t < 2.5 / 2.75) {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.25 / 2.75), t), 0.9375)), b);\n } else {\n return sum(mul(c, sum(mul(mul(7.5625, t -= 2.625 / 2.75), t), 0.984375)), b);\n }\n}\nfunction executeBounceInOut(t, b, c, d) {\n if (t < d / 2)\n return sum(mul(executeBounceIn(mul(t, 2), 0, c, d), 0.5), b);\n return sum(sum(mul(executeBounceOut(sub(mul(t, 2), d), 0, c, d), 0.5), mul(c, 0.5)), b);\n}\nfunction executeBounceInProgress(oldProgress) {\n return sub(1, executeBounceOut(sub(1, oldProgress)));\n}\nfunction executeBounceOutProgress(oldProgress) {\n if (oldProgress < 1 / 2.75) {\n return mul(mul(7.5625, oldProgress), oldProgress);\n } else if (oldProgress < 2 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 1.5 / 2.75), oldProgress), 0.75);\n } else if (oldProgress < 2.5 / 2.75) {\n return sum(mul(mul(7.5625, oldProgress -= 2.25 / 2.75), oldProgress), 0.9375);\n } else {\n return sum(mul(mul(7.5625, oldProgress -= 2.625 / 2.75), oldProgress), 0.984375);\n }\n}\nfunction executeBounceInOutProgress(oldProgress) {\n if (oldProgress < 1 / 2)\n return mul(executeBounceIn(mul(oldProgress, 2)), 0.5);\n return sum(mul(executeBounceOut(sub(mul(oldProgress, 2), 1)), 0.5), 0.5);\n}\nfunction make_bounce_easing_in(curviosity) {\n this.execute = executeBounceIn;\n this.executeProgress = executeBounceInProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_out(curviosity) {\n this.execute = executeBounceOut;\n this.executeProgress = executeBounceOutProgress;\n this.curviosity = curviosity;\n return this;\n}\nfunction make_bounce_easing_in_out(curviosity) {\n this.execute = executeBounceInOut;\n this.executeProgress = executeBounceInOutProgress;\n this.curviosity = curviosity;\n return this;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg right","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.551,0.153],[0,0],[0,0],[-3.568,0.081],[0,0],[0,0]],"o":[[-0.548,0.165],[0,0],[0,0],[0,0],[3.568,-0.081],[0,0],[0.001,-0.048]],"v":[[1.526,-11.742],[-1.779,-11.724],[-3.864,-8.282],[-3.606,0.078],[-0.006,4.393],[3.587,0.078],[4.117,-8.282]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body","np":3,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":33.8690032958984,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[101.25,104.125,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[400,400,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.74,0.359],[0.357,1.738],[1.738,-0.356],[-0.354,-1.737]],"o":[[1.733,-0.354],[-0.355,-1.737],[-1.738,0.354],[0.357,1.737]],"v":[[0.647,3.143],[3.144,-0.646],[-0.645,-3.146],[-3.147,0.646]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-11.25,4.844],"ix":2},"a":{"a":0,"k":[6.5,17.969],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16.935,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":42.336,"s":[0],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":59.271,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84.673,"s":[0],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":96.527,"s":[30],"e":[0]},{"t":111.767710876465}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"head","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.145,-0.018],[0.306,-0.102],[-0.519,-1.549],[-0.175,-1.679],[-3.71,1.418],[0,0],[-0.004,0.004],[0,0],[0.369,1.397]],"o":[[-0.14,-0.014],[-0.313,0],[-1.549,0.52],[0.694,2.07],[0.146,0.847],[0,0],[0.003,-0.002],[0,0],[-0.506,-1.975],[0,0]],"v":[[-14.642,-8.556],[-15.072,-8.547],[-16.006,-8.398],[-17.872,-4.654],[-15.683,2.599],[-11.015,5.502],[-11.014,5.502],[-11.004,5.496],[-10.372,0.328],[-11.79,-5.252]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-11.266,4.844],"ix":2},"a":{"a":0,"k":[-11.266,4.844],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16.935,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":42.336,"s":[0],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":59.271,"s":[30],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":84.673,"s":[0],"e":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":96.527,"s":[30],"e":[0]},{"t":111.767710876465}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[2.615,0.41],[0.044,0.006],[0,0],[0.419,0.042],[0,0],[0.369,1.397],[0,0],[-0.201,0.143],[0,0]],"o":[[-0.03,-0.013],[0,0],[-0.132,-0.38],[0,0],[-0.14,-0.014],[0,0],[0.266,0.026],[0,0],[-1.733,0.917]],"v":[[14.448,-2.291],[14.337,-2.32],[-3.302,-6.104],[-4.195,-6.817],[-14.642,-8.556],[-11.79,-5.252],[-4.408,-4.707],[-3.691,-4.9],[11.048,-1.729]],"c":true}],"e":[{"i":[[2.142,0.411],[0.036,0.006],[0,0],[0.343,0.042],[0,0],[0.303,1.398],[0,0],[-0.165,0.143],[0,0]],"o":[[-0.025,-0.013],[0,0],[-0.108,-0.38],[0,0],[-0.114,-0.014],[0,0],[0.218,0.026],[0,0],[-1.419,0.916]],"v":[[14.921,-2.292],[14.831,-2.321],[0.384,-6.112],[-0.347,-6.825],[-8.903,-8.567],[-6.565,-5.262],[-0.52,-4.715],[0.067,-4.908],[12.138,-1.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":16.935,"s":[{"i":[[2.142,0.411],[0.036,0.006],[0,0],[0.343,0.042],[0,0],[0.303,1.398],[0,0],[-0.165,0.143],[0,0]],"o":[[-0.025,-0.013],[0,0],[-0.108,-0.38],[0,0],[-0.114,-0.014],[0,0],[0.218,0.026],[0,0],[-1.419,0.916]],"v":[[14.921,-2.292],[14.831,-2.321],[0.384,-6.112],[-0.347,-6.825],[-8.903,-8.567],[-6.565,-5.262],[-0.52,-4.715],[0.067,-4.908],[12.138,-1.732]],"c":true}],"e":[{"i":[[2.615,0.41],[0.044,0.006],[0,0],[0.419,0.042],[0,0],[0.369,1.397],[0,0],[-0.201,0.143],[0,0]],"o":[[-0.03,-0.013],[0,0],[-0.132,-0.38],[0,0],[-0.14,-0.014],[0,0],[0.266,0.026],[0,0],[-1.733,0.917]],"v":[[14.448,-2.291],[14.337,-2.32],[-3.302,-6.104],[-4.195,-6.817],[-14.642,-8.556],[-11.79,-5.252],[-4.408,-4.707],[-3.691,-4.9],[11.048,-1.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":42.336,"s":[{"i":[[2.615,0.41],[0.044,0.006],[0,0],[0.419,0.042],[0,0],[0.369,1.397],[0,0],[-0.201,0.143],[0,0]],"o":[[-0.03,-0.013],[0,0],[-0.132,-0.38],[0,0],[-0.14,-0.014],[0,0],[0.266,0.026],[0,0],[-1.733,0.917]],"v":[[14.448,-2.291],[14.337,-2.32],[-3.302,-6.104],[-4.195,-6.817],[-14.642,-8.556],[-11.79,-5.252],[-4.408,-4.707],[-3.691,-4.9],[11.048,-1.729]],"c":true}],"e":[{"i":[[2.142,0.411],[0.036,0.006],[0,0],[0.343,0.042],[0,0],[0.303,1.398],[0,0],[-0.165,0.143],[0,0]],"o":[[-0.025,-0.013],[0,0],[-0.108,-0.38],[0,0],[-0.114,-0.014],[0,0],[0.218,0.026],[0,0],[-1.419,0.916]],"v":[[14.921,-2.292],[14.831,-2.321],[0.384,-6.112],[-0.347,-6.825],[-8.903,-8.567],[-6.565,-5.262],[-0.52,-4.715],[0.067,-4.908],[12.138,-1.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":59.271,"s":[{"i":[[2.142,0.411],[0.036,0.006],[0,0],[0.343,0.042],[0,0],[0.303,1.398],[0,0],[-0.165,0.143],[0,0]],"o":[[-0.025,-0.013],[0,0],[-0.108,-0.38],[0,0],[-0.114,-0.014],[0,0],[0.218,0.026],[0,0],[-1.419,0.916]],"v":[[14.921,-2.292],[14.831,-2.321],[0.384,-6.112],[-0.347,-6.825],[-8.903,-8.567],[-6.565,-5.262],[-0.52,-4.715],[0.067,-4.908],[12.138,-1.732]],"c":true}],"e":[{"i":[[2.615,0.41],[0.044,0.006],[0,0],[0.419,0.042],[0,0],[0.369,1.397],[0,0],[-0.201,0.143],[0,0]],"o":[[-0.03,-0.013],[0,0],[-0.132,-0.38],[0,0],[-0.14,-0.014],[0,0],[0.266,0.026],[0,0],[-1.733,0.917]],"v":[[14.448,-2.291],[14.337,-2.32],[-3.302,-6.104],[-4.195,-6.817],[-14.642,-8.556],[-11.79,-5.252],[-4.408,-4.707],[-3.691,-4.9],[11.048,-1.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":84.673,"s":[{"i":[[2.615,0.41],[0.044,0.006],[0,0],[0.419,0.042],[0,0],[0.369,1.397],[0,0],[-0.201,0.143],[0,0]],"o":[[-0.03,-0.013],[0,0],[-0.132,-0.38],[0,0],[-0.14,-0.014],[0,0],[0.266,0.026],[0,0],[-1.733,0.917]],"v":[[14.448,-2.291],[14.337,-2.32],[-3.302,-6.104],[-4.195,-6.817],[-14.642,-8.556],[-11.79,-5.252],[-4.408,-4.707],[-3.691,-4.9],[11.048,-1.729]],"c":true}],"e":[{"i":[[2.142,0.411],[0.036,0.006],[0,0],[0.343,0.042],[0,0],[0.303,1.398],[0,0],[-0.165,0.143],[0,0]],"o":[[-0.025,-0.013],[0,0],[-0.108,-0.38],[0,0],[-0.114,-0.014],[0,0],[0.218,0.026],[0,0],[-1.419,0.916]],"v":[[14.921,-2.292],[14.831,-2.321],[0.384,-6.112],[-0.347,-6.825],[-8.903,-8.567],[-6.565,-5.262],[-0.52,-4.715],[0.067,-4.908],[12.138,-1.732]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":96.527,"s":[{"i":[[2.142,0.411],[0.036,0.006],[0,0],[0.343,0.042],[0,0],[0.303,1.398],[0,0],[-0.165,0.143],[0,0]],"o":[[-0.025,-0.013],[0,0],[-0.108,-0.38],[0,0],[-0.114,-0.014],[0,0],[0.218,0.026],[0,0],[-1.419,0.916]],"v":[[14.921,-2.292],[14.831,-2.321],[0.384,-6.112],[-0.347,-6.825],[-8.903,-8.567],[-6.565,-5.262],[-0.52,-4.715],[0.067,-4.908],[12.138,-1.732]],"c":true}],"e":[{"i":[[2.615,0.41],[0.044,0.006],[0,0],[0.419,0.042],[0,0],[0.369,1.397],[0,0],[-0.201,0.143],[0,0]],"o":[[-0.03,-0.013],[0,0],[-0.132,-0.38],[0,0],[-0.14,-0.014],[0,0],[0.266,0.026],[0,0],[-1.733,0.917]],"v":[[14.448,-2.291],[14.337,-2.32],[-3.302,-6.104],[-4.195,-6.817],[-14.642,-8.556],[-11.79,-5.252],[-4.408,-4.707],[-3.691,-4.9],[11.048,-1.729]],"c":true}]},{"t":111.767710876465}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0.113,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"arm","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.71,1.418],[0,0],[-0.004,0.004],[0,0],[0,0],[-0.291,0.617],[0.617,0.289],[0,0],[0.512,-0.252],[0,0]],"o":[[0,0],[0.003,-0.002],[0,0],[0,0],[0.616,0.29],[0.29,-0.617],[0,0],[-0.515,-0.242],[0,0],[-0.506,-1.975]],"v":[[-11.015,5.502],[-11.014,5.502],[-11.004,5.496],[-3.568,1.344],[3.58,4.77],[5.222,4.178],[4.63,2.535],[-2.965,-2.291],[-4.588,-2.274],[-10.372,0.328]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"leg","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,2.914],[2.615,0.41],[0.044,0.006],[0,0],[0,-2.097],[-0.673,-0.908],[0,0],[0,-0.611],[-0.612,0],[0,0],[-0.006,0],[-0.006,0],[0,0],[-0.015,0.009]],"o":[[0,-2.729],[-0.03,-0.013],[0,0],[-1.733,0.917],[0,1.218],[0,0],[-0.612,0],[0,0.613],[0,0],[0,0],[0,0],[0,0],[0.059,0],[2.874,-0.162]],"v":[[19.065,3.104],[14.448,-2.291],[14.337,-2.32],[11.048,-1.729],[8.133,3.104],[9.208,6.351],[-17.956,6.351],[-19.065,7.459],[-17.956,8.568],[13.58,8.568],[13.599,8.569],[13.618,8.568],[13.808,8.568],[13.91,8.554]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.034,0],[0,2.034],[-2.034,0],[0,-2.034]],"o":[[-2.034,0],[0,-2.034],[2.034,0],[0,2.034]],"v":[[13.599,6.787],[9.916,3.104],[13.599,-0.58],[17.282,3.104]],"c":true},"ix":2},"nm":"circle","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"macine","np":3,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":338.690032958984,"st":0,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100.539,100.996,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[400,400,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.473,-1.118],[-1.989,-1.65],[-1.284,0.567],[0.251,1.628]],"o":[[-1.342,-1.164],[-1.927,1.461],[1.08,0.896],[1.73,-0.764],[0,0]],"v":[[-11.176,-7.404],[-16.007,-7.559],[-16.101,-1.52],[-12.186,-0.974],[-9.898,-5.095]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.438,6.953],"ix":2},"a":{"a":0,"k":[3.438,6.953],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":11.854,"s":[25],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":27.095,"s":[0],"e":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38.949,"s":[25],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54.19,"s":[0],"e":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":66.045,"s":[25],"e":[0]},{"t":81.2856079101562}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"head","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0.409,0.451],[0.604,-0.063],[0,0],[0.251,1.628],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.215,-1.029],[-3.595,0],[0,0],[-1.66,1.26]],"o":[[0,0],[0,0],[0,0],[0.121,-0.596],[-0.409,-0.449],[0,0],[-1.342,-1.164],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.983,1.252],[2.743,2.324],[0,0],[2.084,0],[0,0]],"v":[[1.707,2.891],[-2.509,2.815],[-5.914,0.3],[-3.283,-6.308],[-3.714,-8.037],[-5.326,-8.653],[-11.176,-7.404],[-9.898,-5.095],[-6.652,-5.636],[-6.762,-5.477],[-6.747,-5.513],[-9.383,-1.929],[-11.629,1.03],[-11.216,5.116],[-1.402,8.716],[-1.002,8.716],[4.769,6.774]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.453,6.953],"ix":2},"a":{"a":0,"k":[3.453,6.953],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":11.854,"s":[25],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":27.095,"s":[0],"e":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38.949,"s":[25],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54.19,"s":[0],"e":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":66.045,"s":[25],"e":[0]},{"t":81.2856079101562}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body top","np":2,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.73,0.716],[0,0],[1.121,-0.761],[0,0],[0,0],[0,0],[-1.66,1.26],[0,0],[0,0],[-0.883,0.883]],"o":[[0,0],[-0.961,-0.956],[0,0],[0,0],[0,0],[2.084,0],[0,0],[0,0],[0.341,0.247],[0.679,-0.678]],"v":[[17.34,5.004],[11.346,-1.059],[7.762,-1.394],[1.707,2.891],[-2.509,2.815],[0.06,6.434],[4.769,6.774],[9.442,2.983],[14.991,7.558],[17.412,7.557]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body bottom","np":3,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":338.690032958984,"st":0,"bm":0}]},{"id":"comp_5","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[400,400,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.027,-1.297],[-1.295,2.036],[2.03,1.294],[1.295,-2.031]],"o":[[2.029,1.293],[1.292,-2.024],[-2.029,-1.297],[-1.298,2.028]],"v":[[-2.531,15.115],[3.49,13.779],[2.159,7.764],[-3.859,9.094]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[0,-3.063],"e":[0,-5.063],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":25.402,"s":[0,-5.063],"e":[0,-3.063],"to":[0,0],"ti":[0,0]},{"t":67.7380065917969}],"ix":2},"a":{"a":0,"k":[-0.188,20.375],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":67.738,"s":[0],"e":[35]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":101.607,"s":[35],"e":[-35]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":169.345,"s":[-35],"e":[0]},{"t":203.214019775391}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"head","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[1.024,0.29],[0,0],[-0.277,0.418],[0.714,0.476],[0,0],[0,0],[0.127,0.188],[2.398,0.001],[0,0],[0.529,-1.678],[0.058,-0.178],[0,0],[0,0],[-0.511,-0.763],[-0.319,-0.117],[0,0],[-0.182,-1.05],[-1.004,0],[-0.048,0.003],[0,0],[-0.039,0.005],[-3.297,-0.177],[0,0],[0,0],[-0.047,0],[-0.174,1.002]],"o":[[0,0],[0.465,-0.031],[0.478,-0.714],[0,0],[0,0],[-0.074,-0.227],[-0.58,-1.622],[0,0],[-2.451,0],[-0.091,0.155],[0,0],[0,0],[-0.764,0.509],[0.201,0.305],[0,0],[-1.026,0.29],[0.174,1.003],[0.047,0],[0,0],[0.041,-0.002],[0.33,-0.03],[0.006,0],[0,0],[0.048,0.003],[1.004,0],[0.183,-1.05]],"v":[[15.109,7.459],[13.649,7.047],[14.839,6.361],[14.409,4.207],[8.091,-0.689],[5.568,-8.097],[5.265,-8.719],[0.277,-11.541],[0.275,-11.541],[-4.753,-8.612],[-4.978,-8.113],[-7.582,-0.54],[-13.894,4.078],[-14.353,6.38],[-13.545,7.017],[-15.108,7.459],[-16.593,9.816],[-14.545,11.541],[-14.403,11.536],[-2.768,10.742],[-2.647,10.728],[2.75,10.741],[2.761,10.742],[14.401,11.536],[14.544,11.541],[16.592,9.816]],"c":true}],"e":[{"i":[[1.024,0.29],[0,0],[-0.277,0.418],[0.714,0.476],[0,0],[0,0],[0.127,0.188],[2.398,0.001],[0,0],[0.529,-1.678],[0.058,-0.178],[0,0],[0,0],[-0.511,-0.763],[-0.319,-0.117],[0,0],[-0.182,-1.05],[-1.004,0],[-0.048,0.003],[0,0],[-0.039,0.005],[-3.297,-0.177],[0,0],[0,0],[-0.047,0],[-0.174,1.002]],"o":[[0,0],[0.465,-0.031],[0.478,-0.714],[0,0],[0,0],[-0.074,-0.227],[-0.58,-1.622],[0,0],[-2.451,0],[-0.091,0.155],[0,0],[0,0],[-0.764,0.509],[0.201,0.305],[0,0],[-1.026,0.29],[0.174,1.003],[0.047,0],[0,0],[0.041,-0.002],[0.33,-0.03],[0.006,0],[0,0],[0.048,0.003],[1.004,0],[0.183,-1.05]],"v":[[15.109,7.459],[13.649,7.047],[14.839,6.361],[14.409,4.207],[9.091,-0.876],[7.725,-9.097],[7.421,-9.719],[0.09,-13.604],[0.088,-13.604],[-7.472,-9.706],[-7.696,-9.207],[-8.988,-0.759],[-13.894,4.078],[-14.353,6.38],[-13.545,7.017],[-15.108,7.459],[-16.593,9.816],[-14.545,11.541],[-14.403,11.536],[-2.768,10.742],[-2.647,10.728],[2.75,10.741],[2.761,10.742],[14.401,11.536],[14.544,11.541],[16.592,9.816]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":25.402,"s":[{"i":[[1.024,0.29],[0,0],[-0.277,0.418],[0.714,0.476],[0,0],[0,0],[0.127,0.188],[2.398,0.001],[0,0],[0.529,-1.678],[0.058,-0.178],[0,0],[0,0],[-0.511,-0.763],[-0.319,-0.117],[0,0],[-0.182,-1.05],[-1.004,0],[-0.048,0.003],[0,0],[-0.039,0.005],[-3.297,-0.177],[0,0],[0,0],[-0.047,0],[-0.174,1.002]],"o":[[0,0],[0.465,-0.031],[0.478,-0.714],[0,0],[0,0],[-0.074,-0.227],[-0.58,-1.622],[0,0],[-2.451,0],[-0.091,0.155],[0,0],[0,0],[-0.764,0.509],[0.201,0.305],[0,0],[-1.026,0.29],[0.174,1.003],[0.047,0],[0,0],[0.041,-0.002],[0.33,-0.03],[0.006,0],[0,0],[0.048,0.003],[1.004,0],[0.183,-1.05]],"v":[[15.109,7.459],[13.649,7.047],[14.839,6.361],[14.409,4.207],[9.091,-0.876],[7.725,-9.097],[7.421,-9.719],[0.09,-13.604],[0.088,-13.604],[-7.472,-9.706],[-7.696,-9.207],[-8.988,-0.759],[-13.894,4.078],[-14.353,6.38],[-13.545,7.017],[-15.108,7.459],[-16.593,9.816],[-14.545,11.541],[-14.403,11.536],[-2.768,10.742],[-2.647,10.728],[2.75,10.741],[2.761,10.742],[14.401,11.536],[14.544,11.541],[16.592,9.816]],"c":true}],"e":[{"i":[[1.024,0.29],[0,0],[-0.277,0.418],[0.714,0.476],[0,0],[0,0],[0.127,0.188],[2.398,0.001],[0,0],[0.529,-1.678],[0.058,-0.178],[0,0],[0,0],[-0.511,-0.763],[-0.319,-0.117],[0,0],[-0.182,-1.05],[-1.004,0],[-0.048,0.003],[0,0],[-0.039,0.005],[-3.297,-0.177],[0,0],[0,0],[-0.047,0],[-0.174,1.002]],"o":[[0,0],[0.465,-0.031],[0.478,-0.714],[0,0],[0,0],[-0.074,-0.227],[-0.58,-1.622],[0,0],[-2.451,0],[-0.091,0.155],[0,0],[0,0],[-0.764,0.509],[0.201,0.305],[0,0],[-1.026,0.29],[0.174,1.003],[0.047,0],[0,0],[0.041,-0.002],[0.33,-0.03],[0.006,0],[0,0],[0.048,0.003],[1.004,0],[0.183,-1.05]],"v":[[15.109,7.459],[13.649,7.047],[14.839,6.361],[14.409,4.207],[8.091,-0.689],[5.568,-8.097],[5.265,-8.719],[0.277,-11.541],[0.275,-11.541],[-4.753,-8.612],[-4.978,-8.113],[-7.582,-0.54],[-13.894,4.078],[-14.353,6.38],[-13.545,7.017],[-15.108,7.459],[-16.593,9.816],[-14.545,11.541],[-14.403,11.536],[-2.768,10.742],[-2.647,10.728],[2.75,10.741],[2.761,10.742],[14.401,11.536],[14.544,11.541],[16.592,9.816]],"c":true}]},{"t":67.7380065917969}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"body","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":338.690032958984,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"walking","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[80,113,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":200,"h":200,"ip":0,"op":338.690032958984,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"running","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[182.5,115,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":200,"h":200,"ip":0,"op":338.690032958984,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"star jumps","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[84.5,213,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":200,"h":200,"ip":0,"op":338.690032958984,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"rawing machine","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[191.5,222.5,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":200,"h":200,"ip":0,"op":338.690032958984,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"crunches","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[193,313.5,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":200,"h":200,"ip":0,"op":338.690032958984,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"yoga","refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[81.5,314.5,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":200,"h":200,"ip":0,"op":338.690032958984,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/submodules/RLottie/Sources/rlottie/example/vectortest.cpp b/submodules/RLottie/Sources/rlottie/example/vectortest.cpp deleted file mode 100644 index 8038b585a3..0000000000 --- a/submodules/RLottie/Sources/rlottie/example/vectortest.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - -#include "vinterpolator.h" - -int main() -{ - VInterpolator ip({0.667, 1}, {0.333 , 0}); - for (float i = 0.0 ; i < 1.0 ; i+=0.05) { - std::cout< -#include -#include -using namespace std; - -#ifdef LOTTIE_CACHE_SUPPORT - -class LottieFileCache { -public: - static LottieFileCache &instance() - { - static LottieFileCache CACHE; - return CACHE; - } - std::shared_ptr find(const std::string &key) - { - auto search = mHash.find(key); - if (search != mHash.end()) { - return search->second; - } else { - return nullptr; - } - } - void add(const std::string &key, std::shared_ptr value) - { - mHash[key] = std::move(value); - } - -private: - LottieFileCache() = default; - - std::unordered_map> mHash; -}; - -#else - -class LottieFileCache { -public: - static LottieFileCache &instance() - { - static LottieFileCache CACHE; - return CACHE; - } - std::shared_ptr find(const std::string &) { return nullptr; } - void add(const std::string &, std::shared_ptr) {} -}; - -#endif - -static std::string dirname(const std::string &path) -{ - const char *ptr = strrchr(path.c_str(), '/'); - int len = int(ptr + 1 - path.c_str()); // +1 to include '/' - return std::string(path, 0, len); -} - -bool LottieLoader::load(const std::string &path) -{ - mModel = LottieFileCache::instance().find(path); - if (mModel) return true; - - std::ifstream f; - f.open(path); - - if (!f.is_open()) { - vCritical << "failed to open file = " << path.c_str(); - return false; - } else { - std::stringstream buf; - buf << f.rdbuf(); - - LottieParser parser(const_cast(buf.str().data()), - dirname(path).c_str()); - mModel = parser.model(); - - if (!mModel) return false; - - LottieFileCache::instance().add(path, mModel); - - f.close(); - } - - return true; -} - -bool LottieLoader::loadFromData(std::string &&jsonData, const std::string &key, - const std::string &resourcePath) -{ - mModel = LottieFileCache::instance().find(key); - if (mModel) return true; - - LottieParser parser(const_cast(jsonData.c_str()), - resourcePath.c_str()); - mModel = parser.model(); - - if (!mModel) return false; - - LottieFileCache::instance().add(key, mModel); - - return true; -} - -std::shared_ptr LottieLoader::model() -{ - return mModel; -} diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/meson.build b/submodules/RLottie/Sources/rlottie/src/lottie/meson.build deleted file mode 100644 index a6d1856ba7..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/lottie/meson.build +++ /dev/null @@ -1,14 +0,0 @@ - -source_file = files('lottieparser.cpp') -source_file += files('lottieloader.cpp') -source_file += files('lottiemodel.cpp') -source_file += files('lottieproxymodel.cpp') -source_file += files('lottieanimation.cpp') -source_file += files('lottieitem.cpp') -source_file += files('lottiekeypath.cpp') - - -lottie_dep = declare_dependency( - include_directories : include_directories('.'), - sources : source_file - ) diff --git a/submodules/RLottie/Sources/rlottie/src/meson.build b/submodules/RLottie/Sources/rlottie/src/meson.build deleted file mode 100644 index 148edd82d4..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/meson.build +++ /dev/null @@ -1,14 +0,0 @@ -subdir('vector') -subdir('lottie') -subdir('binding') - -library_deps = vector_dep -library_deps += lottie_dep -library_deps += binding_dep - -rlottie_lib = shared_library('rlottie', - include_directories : inc, - version : rlottie_lib_version, - dependencies : library_deps, - install : true - ) diff --git a/submodules/RLottie/Sources/rlottie/src/vector/meson.build b/submodules/RLottie/Sources/rlottie/src/vector/meson.build deleted file mode 100644 index 543f730566..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/meson.build +++ /dev/null @@ -1,39 +0,0 @@ - -subdir('freetype') -subdir('pixman') -subdir('stb') - -vector_dep = [freetype_dep] -vector_dep += pixman_dep - -source_file = files('vdasher.cpp') -source_file += files('vbrush.cpp') -source_file += files('vbitmap.cpp') -source_file += files('vpainter.cpp') -source_file += files('vcompositionfunctions.cpp') -source_file += files('vdrawhelper.cpp') -source_file += files('vdrawhelper_sse2.cpp') -source_file += files('vdrawhelper_neon.cpp') -source_file += files('vdrawable.cpp') - -source_file += files('vrect.cpp') -source_file += files('vrle.cpp') -source_file += files('vpath.cpp') -source_file += files('vpathmesure.cpp') -source_file += files('vmatrix.cpp') -source_file += files('velapsedtimer.cpp') -source_file += files('vdebug.cpp') -source_file += files('vinterpolator.cpp') -source_file += files('vbezier.cpp') -source_file += files('vraster.cpp') -source_file += files('vimageloader.cpp') - -# dl dependancy for dlopen, dlsym, dlclose symbol -cc = meson.get_compiler('cpp') -vector_dep += cc.find_library('dl', required : true) - -vector_dep += declare_dependency( include_directories : include_directories('.'), - sources : source_file - ) - - diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/1 b/submodules/RLottie/Sources/rlottie/src/vector/pixman/1 deleted file mode 100644 index 0928fb84b9..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/pixman/1 +++ /dev/null @@ -1,2 +0,0 @@ -clang: error: clang: error: no such file or directory: '2' -no such file or directory: '2' diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/2 b/submodules/RLottie/Sources/rlottie/src/vector/pixman/2 deleted file mode 100644 index 1f834998ef..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/pixman/2 +++ /dev/null @@ -1,2794 +0,0 @@ -clang: warning: 1: 'linker' input unused [-Wunused-command-line-argument] -:6:5: error: unknown directive - .fpu neon - ^ -:8:5: error: unknown directive - .object_arch armv4 - ^ -:9:5: error: unknown directive - .eabi_attribute 10, 0 - ^ -:10:5: error: unknown directive - .eabi_attribute 12, 0 - ^ -:11:5: error: unknown directive - .arm - ^ -:121:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_asm_functionpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_asm_functionpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_asm_neonpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:123:126: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpushpixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head-pixman_composite_over_8888_8888_process_pixblock_tail_headr12pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headlrpixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:130:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_DEFAULTpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:131:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:132:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_NONEpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:133:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head (pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_8888_8888_process_pixblock_tail_head > pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_SIMPLEpixman_composite_over_8888_8888_process_pixblock_tail_head) && ((pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head == ) || ( == ) || (pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head == )) -^ -:135:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_SIMPLEpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:136:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:142:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:143:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:144:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:145:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, | - ^ -:146:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_tailpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:147:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:148:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:149:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:151:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headmacropixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headxpixman_composite_over_8888_8888_process_pixblock_tail_head:pixman_composite_over_8888_8888_process_pixblock_tail_headvarargpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:152:9: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headxpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:153:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendmpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:154:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headmacropixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:155:9: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:157:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendmpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:161:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr0pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:162:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headHpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:163:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:164:253: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr3pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:165:246: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:166:253: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr5pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:167:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr6pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:169:247: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr7pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:170:254: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr8pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:172:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr9pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:174:247: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPF_Xpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr10pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:176:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPF_SRCpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr11pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:178:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPF_DSTpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr12pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:180:250: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPF_MASKpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr14pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:182:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head (pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_8888_8888_process_pixblock_tail_head < pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_ADVANCEDpixman_composite_over_8888_8888_process_pixblock_tail_head) -^ -:183:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr10pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:184:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDUMMYpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr12pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:185:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:186:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:187:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr7pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:188:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDUMMYpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr8pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:189:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:190:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:191:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:192:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDUMMYpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr5pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:193:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:194:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:195:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:196:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDUMMYpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:197:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:198:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:200:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, -pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:201:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:202:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:203:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:204:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:205:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head16pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:206:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:207:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:208:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:209:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:210:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, -pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:211:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:212:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headerrorpixman_composite_over_8888_8888_process_pixblock_tail_head "pixman_composite_over_8888_8888_process_pixblock_tail_headrequestedpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrcpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headbpppixman_composite_over_8888_8888_process_pixblock_tail_head (pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head) pixman_composite_over_8888_8888_process_pixblock_tail_headispixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headnotpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsupportedpixman_composite_over_8888_8888_process_pixblock_tail_head" - ^ -:213:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:214:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:215:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:216:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:217:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:218:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:219:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:220:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:221:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, -pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:222:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:223:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headerrorpixman_composite_over_8888_8888_process_pixblock_tail_head "pixman_composite_over_8888_8888_process_pixblock_tail_headrequestedpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmaskpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headbpppixman_composite_over_8888_8888_process_pixblock_tail_head (pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head) pixman_composite_over_8888_8888_process_pixblock_tail_headispixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headnotpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsupportedpixman_composite_over_8888_8888_process_pixblock_tail_head" - ^ -:224:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:225:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:226:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:227:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:228:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:229:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head16pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:230:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:231:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelseifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:232:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:233:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:234:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headerrorpixman_composite_over_8888_8888_process_pixblock_tail_head "pixman_composite_over_8888_8888_process_pixblock_tail_headrequestedpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdstpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headbpppixman_composite_over_8888_8888_process_pixblock_tail_head (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head) pixman_composite_over_8888_8888_process_pixblock_tail_headispixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headnotpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsupportedpixman_composite_over_8888_8888_process_pixblock_tail_head" - ^ -:235:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:237:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head (((pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_8888_8888_process_pixblock_tail_head) & pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_8888_8888_process_pixblock_tail_head) != ) -^ -:238:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:239:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:240:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:241:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:242:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head (((pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_8888_8888_process_pixblock_tail_head) & pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head) != ) -^ -:243:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDEINTERLEAVE_32BPP_ENABLEDpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:244:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:245:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDEINTERLEAVE_32BPP_ENABLEDpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:246:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:248:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head < || pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head > pixman_composite_over_8888_8888_process_pixblock_tail_head15pixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:249:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headerrorpixman_composite_over_8888_8888_process_pixblock_tail_head "pixman_composite_over_8888_8888_process_pixblock_tail_headinvalidpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headprefetchpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdistancepixman_composite_over_8888_8888_process_pixblock_tail_head (pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head)" - ^ -:250:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:252:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head > -^ -:253:246: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_head40pixman_composite_over_8888_8888_process_pixblock_tail_head] - ^ -:254:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:255:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head > -^ -:256:247: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_head48pixman_composite_over_8888_8888_process_pixblock_tail_head] - ^ -:257:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:258:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_Xpixman_composite_over_8888_8888_process_pixblock_tail_head, # - ^ -:259:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head > -^ -:260:253: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_head44pixman_composite_over_8888_8888_process_pixblock_tail_head] - ^ -:261:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:262:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head > -^ -:263:254: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_head52pixman_composite_over_8888_8888_process_pixblock_tail_head] - ^ -:264:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:265:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:267:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:268:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:269:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headlslpixman_composite_over_8888_8888_process_pixblock_tail_head #pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:270:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:271:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:272:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:273:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headlslpixman_composite_over_8888_8888_process_pixblock_tail_head #pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:274:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:275:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head == -^ -:276:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:277:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headsubpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headlslpixman_composite_over_8888_8888_process_pixblock_tail_head #pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:278:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:283:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_SRCpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:284:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_DSTpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:285:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_MASKpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:287:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headHpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headlslpixman_composite_over_8888_8888_process_pixblock_tail_head # - ^ -:288:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headaddpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_8888_8888_process_pixblock_tail_head, #(pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_head0x10pixman_composite_over_8888_8888_process_pixblock_tail_head) - ^ -:290:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:291:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:292:126: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpushpixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr0pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:293:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:294:364: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headsubspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headHpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headHpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:295:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:296:244: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headstrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headHpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #] - ^ -:297:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:298:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:299:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:300:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head9fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:301:244: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headcmppixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #(pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_head2pixman_composite_over_8888_8888_process_pixblock_tail_head) - ^ -:302:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head8fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:307:1: error: unexpected token at start of statement -: -^ -:308:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headensure_destination_ptr_alignmentpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headensure_destination_ptr_alignmentpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:313:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_apixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_apixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:315:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:316:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:318:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headPFpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headaddpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_Xpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headPF_Xpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:319:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:320:135: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headcache_preloadpixman_composite_over_8888_8888_process_pixblock_tail_head , pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:321:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:322:364: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headsubspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #(pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_head2pixman_composite_over_8888_8888_process_pixblock_tail_head) - ^ -:323:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head2fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:325:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:326:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:327:364: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headsubspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:328:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbgepixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbgepixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head1bpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:330:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:331:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixst_apixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixst_apixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:335:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:339:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head0bpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:341:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:342:125: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpoppixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr0pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:343:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:344:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_head5pixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_head5pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:345:125: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpoppixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head-pixman_composite_over_8888_8888_process_pixblock_tail_headr12pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpcpixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:353:244: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headtstpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:354:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbeqpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbeqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head1fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:355:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:357:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:358:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:360:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:361:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:362:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixstpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixstpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:364:1: error: invalid symbol redefinition -pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head: -^ -:366:145: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_8888_8888_process_pixblock_tail_head , , pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:370:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head8bpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:372:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:373:125: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpoppixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr0pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:374:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:375:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_head5pixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_head5pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:376:125: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpoppixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head-pixman_composite_over_8888_8888_process_pixblock_tail_headr12pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpcpixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:379:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:380:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:381:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:382:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:383:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:384:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:385:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headHpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:386:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:387:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:388:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:389:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:390:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_Xpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:391:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_SRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:392:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_DSTpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:393:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPF_MASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:394:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDUMMYpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:395:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendfuncpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:398:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_asm_functionpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_asm_functionpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_scanline_over_asm_neonpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:400:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headPREFETCH_TYPE_NONEpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:405:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:406:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:407:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head32pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:408:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, | - ^ -:409:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_tailpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:410:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:411:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:412:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:414:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head != -^ -:418:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr0pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:419:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:420:246: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:421:245: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headVXpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr3pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:422:249: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headUNIT_Xpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headippixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:423:247: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headlrpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:424:247: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headTMP1pixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:425:247: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headTMP2pixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr5pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:426:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr6pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:427:258: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_WIDTH_FIXEDpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr7pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:429:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headmacropixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headxpixman_composite_over_8888_8888_process_pixblock_tail_head:pixman_composite_over_8888_8888_process_pixblock_tail_headvarargpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:430:9: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_spixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_spixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headxpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:431:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendmpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:433:249: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headUNIT_Xpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head] - ^ -:434:126: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpushpixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head-pixman_composite_over_8888_8888_process_pixblock_tail_headr8pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headlrpixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:435:258: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_WIDTH_FIXEDpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #( + )] - ^ -:436:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head != - ^ -:437:247: error: brackets expression not supported on this target - pixman_composite_over_8888_8888_process_pixblock_tail_headldrpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head, [pixman_composite_over_8888_8888_process_pixblock_tail_headsppixman_composite_over_8888_8888_process_pixblock_tail_head, #( + pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head)] - ^ -:438:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:439:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:443:244: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr0pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:444:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:445:246: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:446:248: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headippixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:447:247: error: unexpected token in argument list - pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head .pixman_composite_over_8888_8888_process_pixblock_tail_headreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headr3pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:449:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headmacropixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headxpixman_composite_over_8888_8888_process_pixblock_tail_head:pixman_composite_over_8888_8888_process_pixblock_tail_headvarargpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:450:9: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headxpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:451:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendmpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:452:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:454:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head (((pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_8888_8888_process_pixblock_tail_head) & pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_8888_8888_process_pixblock_tail_head) != ) -^ -:455:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:456:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:457:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:458:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:459:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head (((pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_8888_8888_process_pixblock_tail_head) & pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head) != ) -^ -:460:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDEINTERLEAVE_32BPP_ENABLEDpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:461:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:462:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headsetpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDEINTERLEAVE_32BPP_ENABLEDpixman_composite_over_8888_8888_process_pixblock_tail_head, - ^ -:463:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:465:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headmacropixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:466:9: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:468:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendmpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:470:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headflag_deinterleave_32bpppixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:471:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headmovpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:473:244: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headcmppixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:474:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head8fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:476:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headensure_destination_ptr_alignmentpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headensure_destination_ptr_alignmentpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:480:364: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headsubspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:481:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head7fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:484:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_apixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixld_apixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:486:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:487:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixldpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headmask_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:489:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:490:364: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headsubspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:491:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbltpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head2fpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:492:1: error: invalid symbol redefinition -pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head: -^ -:493:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:494:364: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headsubspixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head, #pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:495:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbgepixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbgepixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_head1bpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:496:1: error: invalid symbol redefinition -pixman_composite_over_8888_8888_process_pixblock_tail_head2pixman_composite_over_8888_8888_process_pixblock_tail_head: -^ -:497:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:498:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headpixst_apixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headpixst_apixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head, (pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_8888_8888_process_pixblock_tail_head - pixman_composite_over_8888_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_8888_8888_process_pixblock_tail_head * pixman_composite_over_8888_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_8888_8888_process_pixblock_tail_head / pixman_composite_over_8888_8888_process_pixblock_tail_head64pixman_composite_over_8888_8888_process_pixblock_tail_head), pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:502:145: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_8888_8888_process_pixblock_tail_head , pixman_composite_over_8888_8888_process_pixblock_tail_head1pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:507:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:508:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head != -^ -:509:125: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpoppixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head-pixman_composite_over_8888_8888_process_pixblock_tail_headr8pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpcpixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:510:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:511:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbxpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbxpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headlrpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:512:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:513:1: error: invalid symbol redefinition -pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head: -^ -:515:145: error: unknown token in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_8888_8888_process_pixblock_tail_head , , pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_initpixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:520:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_head8pixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:522:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headifpixman_composite_over_8888_8888_process_pixblock_tail_head != -^ -:523:125: error: Unexpected '{' in expression - pixman_composite_over_8888_8888_process_pixblock_tail_headpoppixman_composite_over_8888_8888_process_pixblock_tail_head {pixman_composite_over_8888_8888_process_pixblock_tail_headr4pixman_composite_over_8888_8888_process_pixblock_tail_head-pixman_composite_over_8888_8888_process_pixblock_tail_headr8pixman_composite_over_8888_8888_process_pixblock_tail_head, pixman_composite_over_8888_8888_process_pixblock_tail_headpcpixman_composite_over_8888_8888_process_pixblock_tail_head} - ^ -:525:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:526:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:527:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:528:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headVXpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:529:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headUNIT_Xpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:530:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headTMP1pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:531:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headTMP2pixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:532:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:533:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:534:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRC_WIDTH_FIXEDpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:536:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headelsepixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:537:5: error: invalid instruction mnemonic 'pixman_composite_over_8888_8888_process_pixblock_tail_headbxpixman_composite_over_8888_8888_process_pixblock_tail_head' - pixman_composite_over_8888_8888_process_pixblock_tail_headbxpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headlrpixman_composite_over_8888_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:539:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headSRCpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:540:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headMASKpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:541:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Rpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:542:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headDST_Wpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:543:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headunreqpixman_composite_over_8888_8888_process_pixblock_tail_head pixman_composite_over_8888_8888_process_pixblock_tail_headWpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:544:1: error: unknown directive -.pixman_composite_over_8888_8888_process_pixblock_tail_headendifpixman_composite_over_8888_8888_process_pixblock_tail_head -^ -:547:5: error: unknown directive - .pixman_composite_over_8888_8888_process_pixblock_tail_headendfuncpixman_composite_over_8888_8888_process_pixblock_tail_head - ^ -:554:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixman_asm_functionpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixman_asm_functionpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_asm_neonpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:556:120: error: Unexpected '{' in expression - pixman_composite_over_n_8888_process_pixblock_tail_headpushpixman_composite_over_n_8888_process_pixblock_tail_head {pixman_composite_over_n_8888_process_pixblock_tail_headr4pixman_composite_over_n_8888_process_pixblock_tail_head-pixman_composite_over_n_8888_process_pixblock_tail_headr12pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headlrpixman_composite_over_n_8888_process_pixblock_tail_head} - ^ -:563:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_DEFAULTpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:564:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:565:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_NONEpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:566:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head (pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_n_8888_process_pixblock_tail_head > pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_SIMPLEpixman_composite_over_n_8888_process_pixblock_tail_head) && (( == ) || ( == ) || (pixman_composite_over_n_8888_process_pixblock_tail_head32pixman_composite_over_n_8888_process_pixblock_tail_head == )) -^ -:568:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_SIMPLEpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:569:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:575:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:576:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:577:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head32pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:578:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, | - ^ -:579:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_tailpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:580:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:581:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_baseregpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:582:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:584:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headmacropixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headxpixman_composite_over_n_8888_process_pixblock_tail_head:pixman_composite_over_n_8888_process_pixblock_tail_headvarargpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:585:9: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headxpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:586:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headendmpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:587:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headmacropixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:588:9: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixld_srcpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headsrc_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headSRCpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:590:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headendmpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:594:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr0pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:595:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headHpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:596:236: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDST_Wpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr2pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:597:241: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr3pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:598:234: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headSRCpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr4pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:599:241: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr5pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:600:236: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDST_Rpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr6pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:602:235: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headMASKpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr7pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:603:242: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr8pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:605:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr9pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:607:235: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPF_Xpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr10pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:609:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPF_SRCpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr11pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:611:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPF_DSTpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr12pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:613:238: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPF_MASKpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr14pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:615:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head (pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_CURRENTpixman_composite_over_n_8888_process_pixblock_tail_head < pixman_composite_over_n_8888_process_pixblock_tail_headPREFETCH_TYPE_ADVANCEDpixman_composite_over_n_8888_process_pixblock_tail_head) -^ -:616:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr10pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:617:236: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDUMMYpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr12pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:618:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:619:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:620:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr7pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:621:236: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDUMMYpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr8pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:622:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:623:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:624:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr4pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:625:236: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDUMMYpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr5pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:626:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:627:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:628:237: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:629:236: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headDUMMYpixman_composite_over_n_8888_process_pixblock_tail_head .pixman_composite_over_n_8888_process_pixblock_tail_headreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headr1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:630:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:631:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:633:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, -pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:634:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head32pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:635:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head2pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:636:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:637:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:638:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head16pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:639:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:640:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head8pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:641:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:642:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:643:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, -pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:644:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:645:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headerrorpixman_composite_over_n_8888_process_pixblock_tail_head "pixman_composite_over_n_8888_process_pixblock_tail_headrequestedpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrcpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headbpppixman_composite_over_n_8888_process_pixblock_tail_head (pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head) pixman_composite_over_n_8888_process_pixblock_tail_headispixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headnotpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsupportedpixman_composite_over_n_8888_process_pixblock_tail_head" - ^ -:646:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:647:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head32pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:648:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head2pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:649:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:650:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:651:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head8pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:652:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:653:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:654:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, -pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:655:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:656:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headerrorpixman_composite_over_n_8888_process_pixblock_tail_head "pixman_composite_over_n_8888_process_pixblock_tail_headrequestedpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmaskpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headbpppixman_composite_over_n_8888_process_pixblock_tail_head (pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head) pixman_composite_over_n_8888_process_pixblock_tail_headispixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headnotpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsupportedpixman_composite_over_n_8888_process_pixblock_tail_head" - ^ -:657:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:658:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head32pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:659:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head2pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:660:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:661:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:662:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head16pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:663:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:664:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelseifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head == pixman_composite_over_n_8888_process_pixblock_tail_head8pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:665:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_bpp_shiftpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:666:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:667:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headerrorpixman_composite_over_n_8888_process_pixblock_tail_head "pixman_composite_over_n_8888_process_pixblock_tail_headrequestedpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdstpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headbpppixman_composite_over_n_8888_process_pixblock_tail_head (pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head) pixman_composite_over_n_8888_process_pixblock_tail_headispixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headnotpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsupportedpixman_composite_over_n_8888_process_pixblock_tail_head" - ^ -:668:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:670:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head (((pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_n_8888_process_pixblock_tail_head) & pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_n_8888_process_pixblock_tail_head) != ) -^ -:671:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:672:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:673:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:674:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:675:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head (((pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DST_READWRITEpixman_composite_over_n_8888_process_pixblock_tail_head) & pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_n_8888_process_pixblock_tail_head) != ) -^ -:676:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDEINTERLEAVE_32BPP_ENABLEDpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:677:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:678:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headsetpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDEINTERLEAVE_32BPP_ENABLEDpixman_composite_over_n_8888_process_pixblock_tail_head, - ^ -:679:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:681:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_n_8888_process_pixblock_tail_head < || pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_n_8888_process_pixblock_tail_head > pixman_composite_over_n_8888_process_pixblock_tail_head15pixman_composite_over_n_8888_process_pixblock_tail_head -^ -:682:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headerrorpixman_composite_over_n_8888_process_pixblock_tail_head "pixman_composite_over_n_8888_process_pixblock_tail_headinvalidpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headprefetchpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdistancepixman_composite_over_n_8888_process_pixblock_tail_head (pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_n_8888_process_pixblock_tail_head)" - ^ -:683:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:685:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head > -^ -:686:234: error: brackets expression not supported on this target - pixman_composite_over_n_8888_process_pixblock_tail_headldrpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headSRCpixman_composite_over_n_8888_process_pixblock_tail_head, [pixman_composite_over_n_8888_process_pixblock_tail_headsppixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_head40pixman_composite_over_n_8888_process_pixblock_tail_head] - ^ -:687:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:688:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head > -^ -:689:235: error: brackets expression not supported on this target - pixman_composite_over_n_8888_process_pixblock_tail_headldrpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headMASKpixman_composite_over_n_8888_process_pixblock_tail_head, [pixman_composite_over_n_8888_process_pixblock_tail_headsppixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_head48pixman_composite_over_n_8888_process_pixblock_tail_head] - ^ -:690:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:691:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_Xpixman_composite_over_n_8888_process_pixblock_tail_head, # - ^ -:692:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head > -^ -:693:241: error: brackets expression not supported on this target - pixman_composite_over_n_8888_process_pixblock_tail_headldrpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, [pixman_composite_over_n_8888_process_pixblock_tail_headsppixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_head44pixman_composite_over_n_8888_process_pixblock_tail_head] - ^ -:694:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:695:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head > -^ -:696:242: error: brackets expression not supported on this target - pixman_composite_over_n_8888_process_pixblock_tail_headldrpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, [pixman_composite_over_n_8888_process_pixblock_tail_headsppixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_head52pixman_composite_over_n_8888_process_pixblock_tail_head] - ^ -:697:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:698:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDST_Rpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headDST_Wpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:700:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headsrc_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:701:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:702:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headlslpixman_composite_over_n_8888_process_pixblock_tail_head #pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:703:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:704:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:705:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:706:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headlslpixman_composite_over_n_8888_process_pixblock_tail_head #pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:707:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:708:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head == -^ -:709:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:710:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headsubpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headlslpixman_composite_over_n_8888_process_pixblock_tail_head #pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:711:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:716:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_SRCpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headSRCpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:717:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_DSTpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headDST_Rpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:718:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_MASKpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headMASKpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:720:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headHpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headlslpixman_composite_over_n_8888_process_pixblock_tail_head # - ^ -:721:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headaddpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_n_8888_process_pixblock_tail_head, #(pixman_composite_over_n_8888_process_pixblock_tail_headFLAG_DEINTERLEAVE_32BPPpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_head0x10pixman_composite_over_n_8888_process_pixblock_tail_head) - ^ -:723:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_head8pixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_head8pixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:724:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:725:120: error: Unexpected '{' in expression - pixman_composite_over_n_8888_process_pixblock_tail_headpushpixman_composite_over_n_8888_process_pixblock_tail_head {pixman_composite_over_n_8888_process_pixblock_tail_headr0pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headr1pixman_composite_over_n_8888_process_pixblock_tail_head} - ^ -:726:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:727:346: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headsubspixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headHpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headHpixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:728:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:729:232: error: brackets expression not supported on this target - pixman_composite_over_n_8888_process_pixblock_tail_headstrpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headHpixman_composite_over_n_8888_process_pixblock_tail_head, [pixman_composite_over_n_8888_process_pixblock_tail_headsppixman_composite_over_n_8888_process_pixblock_tail_head, #] - ^ -:730:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headelsepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:731:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headmovpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:732:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:733:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headbltpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headbltpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head9fpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:734:232: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headcmppixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, #(pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_head2pixman_composite_over_n_8888_process_pixblock_tail_head) - ^ -:735:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headbltpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headbltpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head8fpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:740:1: error: unexpected token at start of statement -: -^ -:741:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headensure_destination_ptr_alignmentpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headensure_destination_ptr_alignmentpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:746:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixld_apixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixld_apixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headDST_Rpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:748:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:749:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headMASKpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:751:232: error: unexpected token in argument list - pixman_composite_over_n_8888_process_pixblock_tail_headPFpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headaddpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_Xpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headPF_Xpixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:752:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:753:129: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headcache_preloadpixman_composite_over_n_8888_process_pixblock_tail_head , pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:754:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:755:346: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headsubspixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, #(pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_head2pixman_composite_over_n_8888_process_pixblock_tail_head) - ^ -:756:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headbltpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headbltpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head2fpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:758:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:759:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headcache_preload_simplepixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:760:346: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headsubspixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:761:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headbgepixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headbgepixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head1bpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:763:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:764:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixst_apixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixst_apixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headDST_Wpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:768:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:772:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head0bpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:774:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:775:119: error: Unexpected '{' in expression - pixman_composite_over_n_8888_process_pixblock_tail_headpoppixman_composite_over_n_8888_process_pixblock_tail_head {pixman_composite_over_n_8888_process_pixblock_tail_headr0pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headr1pixman_composite_over_n_8888_process_pixblock_tail_head} - ^ -:776:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:777:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_head5pixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_head5pixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:778:119: error: Unexpected '{' in expression - pixman_composite_over_n_8888_process_pixblock_tail_headpoppixman_composite_over_n_8888_process_pixblock_tail_head {pixman_composite_over_n_8888_process_pixblock_tail_headr4pixman_composite_over_n_8888_process_pixblock_tail_head-pixman_composite_over_n_8888_process_pixblock_tail_headr12pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpcpixman_composite_over_n_8888_process_pixblock_tail_head} - ^ -:786:232: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headtstpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head, #pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:787:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headbeqpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headbeqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head1fpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:788:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headdst_r_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headDST_Rpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:790:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headfetch_src_pixblockpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:791:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixldpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headmask_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headmask_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headMASKpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:793:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:794:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:795:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headpixstpixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headpixstpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head, (pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_baseregpixman_composite_over_n_8888_process_pixblock_tail_head - pixman_composite_over_n_8888_process_pixblock_tail_headpixblock_sizepixman_composite_over_n_8888_process_pixblock_tail_head * pixman_composite_over_n_8888_process_pixblock_tail_headdst_w_bpppixman_composite_over_n_8888_process_pixblock_tail_head / pixman_composite_over_n_8888_process_pixblock_tail_head64pixman_composite_over_n_8888_process_pixblock_tail_head), pixman_composite_over_n_8888_process_pixblock_tail_headDST_Wpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:797:1: error: invalid symbol redefinition -pixman_composite_over_n_8888_process_pixblock_tail_head1pixman_composite_over_n_8888_process_pixblock_tail_head: -^ -:799:139: error: unknown token in expression - pixman_composite_over_n_8888_process_pixblock_tail_headprocess_trailing_pixelspixman_composite_over_n_8888_process_pixblock_tail_head , , pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_n_8888_initpixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headdefault_cleanuppixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpixman_composite_over_8888_8888_process_pixblock_headpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:803:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_headadvance_to_next_scanlinepixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_head8bpixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:805:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headifpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headregs_shortagepixman_composite_over_n_8888_process_pixblock_tail_head -^ -:806:119: error: Unexpected '{' in expression - pixman_composite_over_n_8888_process_pixblock_tail_headpoppixman_composite_over_n_8888_process_pixblock_tail_head {pixman_composite_over_n_8888_process_pixblock_tail_headr0pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headr1pixman_composite_over_n_8888_process_pixblock_tail_head} - ^ -:807:1: error: unknown directive -.pixman_composite_over_n_8888_process_pixblock_tail_headendifpixman_composite_over_n_8888_process_pixblock_tail_head -^ -:808:5: error: invalid instruction mnemonic 'pixman_composite_over_n_8888_process_pixblock_tail_head5pixman_composite_over_n_8888_process_pixblock_tail_head' - pixman_composite_over_n_8888_process_pixblock_tail_head5pixman_composite_over_n_8888_process_pixblock_tail_head - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:809:119: error: Unexpected '{' in expression - pixman_composite_over_n_8888_process_pixblock_tail_headpoppixman_composite_over_n_8888_process_pixblock_tail_head {pixman_composite_over_n_8888_process_pixblock_tail_headr4pixman_composite_over_n_8888_process_pixblock_tail_head-pixman_composite_over_n_8888_process_pixblock_tail_headr12pixman_composite_over_n_8888_process_pixblock_tail_head, pixman_composite_over_n_8888_process_pixblock_tail_headpcpixman_composite_over_n_8888_process_pixblock_tail_head} - ^ -:812:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headSRCpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:813:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headMASKpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:814:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDST_Rpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:815:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDST_Wpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:816:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headORIG_Wpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:817:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headWpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:818:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headHpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:819:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headSRC_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:820:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDST_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:821:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headMASK_STRIDEpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:822:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_CTLpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:823:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_Xpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:824:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_SRCpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:825:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_DSTpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:826:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headPF_MASKpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:827:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headunreqpixman_composite_over_n_8888_process_pixblock_tail_head pixman_composite_over_n_8888_process_pixblock_tail_headDUMMYpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:828:5: error: unknown directive - .pixman_composite_over_n_8888_process_pixblock_tail_headendfuncpixman_composite_over_n_8888_process_pixblock_tail_head - ^ -:836:5: error: unexpected token at start of statement - 0pixman_asm_function0 0pixman_composite_src_n_8888_asm_neon0 - ^ -:838:5: error: unexpected token at start of statement - 0push0 {0r40-0r120, 0lr0} - ^ -:845:5: error: unknown directive - .0set0 0PREFETCH_TYPE_CURRENT0, 0PREFETCH_TYPE_DEFAULT0 - ^ -:846:1: error: unknown directive -.0if0 == -^ -:847:5: error: unknown directive - .0set0 0PREFETCH_TYPE_CURRENT0, 0PREFETCH_TYPE_NONE0 - ^ -:848:1: error: unexpected token at start of statement -.0elseif0 (0PREFETCH_TYPE_CURRENT0 > 0PREFETCH_TYPE_SIMPLE0) && (( == ) || ( == ) || (0320 == )) -^ -:850:5: error: unknown directive - .0set0 0PREFETCH_TYPE_CURRENT0, 0PREFETCH_TYPE_SIMPLE0 - ^ -:851:1: error: unexpected token at start of statement -.0endif0 -^ -:857:5: error: unknown directive - .0set0 0src_bpp0, - ^ -:858:5: error: unknown directive - .0set0 0mask_bpp0, - ^ -:859:5: error: unknown directive - .0set0 0dst_w_bpp0, 0320 - ^ -:860:5: error: unknown directive - .0set0 0pixblock_size0, 080 - ^ -:861:5: error: unknown directive - .0set0 0dst_w_basereg0, - ^ -:862:5: error: unknown directive - .0set0 0dst_r_basereg0, - ^ -:863:5: error: unknown directive - .0set0 0src_basereg0, - ^ -:864:5: error: unknown directive - .0set0 0mask_basereg0, - ^ -:866:5: error: unknown directive - .0macro0 0pixld_src0 0x0:0vararg0 - ^ -:867:9: error: unexpected token at start of statement - 0pixld0 0x0 - ^ -:868:5: error: unexpected token at start of statement - .0endm0 - ^ -:869:5: error: unknown directive - .0macro0 0fetch_src_pixblock0 - ^ -:870:9: error: unexpected token at start of statement - 0pixld_src0 0pixblock_size0, 0src_bpp0, (0src_basereg0 - 0pixblock_size0 * 0src_bpp0 / 0640), 0SRC0 - ^ -:872:5: error: unexpected token at start of statement - .0endm0 - ^ -:876:5: error: unexpected token at start of statement - 0W0 .0req0 0r00 - ^ -:877:5: error: unexpected token at start of statement - 0H0 .0req0 0r10 - ^ -:878:5: error: unexpected token at start of statement - 0DST_W0 .0req0 0r20 - ^ -:879:5: error: unexpected token at start of statement - 0DST_STRIDE0 .0req0 0r30 - ^ -:880:5: error: unexpected token at start of statement - 0SRC0 .0req0 0r40 - ^ -:881:5: error: unexpected token at start of statement - 0SRC_STRIDE0 .0req0 0r50 - ^ -:882:5: error: unexpected token at start of statement - 0DST_R0 .0req0 0r60 - ^ -:884:5: error: unexpected token at start of statement - 0MASK0 .0req0 0r70 - ^ -:885:5: error: unexpected token at start of statement - 0MASK_STRIDE0 .0req0 0r80 - ^ -:887:5: error: unexpected token at start of statement - 0PF_CTL0 .0req0 0r90 - ^ -:889:5: error: unexpected token at start of statement - 0PF_X0 .0req0 0r100 - ^ -:891:5: error: unexpected token at start of statement - 0PF_SRC0 .0req0 0r110 - ^ -:893:5: error: unexpected token at start of statement - 0PF_DST0 .0req0 0r120 - ^ -:895:5: error: unexpected token at start of statement - 0PF_MASK0 .0req0 0r140 - ^ -:897:1: error: unknown directive -.0if0 (0PREFETCH_TYPE_CURRENT0 < 0PREFETCH_TYPE_ADVANCED0) -^ -:898:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r100 - ^ -:899:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r120 - ^ -:900:5: error: unknown directive - .0set0 0regs_shortage0, - ^ -:901:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == -^ -:902:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r70 - ^ -:903:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r80 - ^ -:904:5: error: unknown directive - .0set0 0regs_shortage0, - ^ -:905:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == -^ -:906:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r40 - ^ -:907:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r50 - ^ -:908:5: error: unknown directive - .0set0 0regs_shortage0, - ^ -:909:1: error: unexpected token at start of statement -.0else0 -^ -:910:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r10 - ^ -:911:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r10 - ^ -:912:5: error: unknown directive - .0set0 0regs_shortage0, 010 - ^ -:913:1: error: unexpected token at start of statement -.0endif0 -^ -:915:5: error: unknown directive - .0set0 0mask_bpp_shift0, -010 - ^ -:916:1: error: unknown directive -.0if0 0src_bpp0 == 0320 -^ -:917:5: error: unknown directive - .0set0 0src_bpp_shift0, 020 - ^ -:918:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == -^ -:919:5: error: unknown directive - .0set0 0src_bpp_shift0, - ^ -:920:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == 0160 -^ -:921:5: error: unknown directive - .0set0 0src_bpp_shift0, 010 - ^ -:922:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == 080 -^ -:923:5: error: unknown directive - .0set0 0src_bpp_shift0, - ^ -:924:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == -^ -:925:5: error: unknown directive - .0set0 0src_bpp_shift0, -010 - ^ -:926:1: error: unexpected token at start of statement -.0else0 -^ -:927:5: error: unexpected token at start of statement - .0error0 "0requested0 0src0 0bpp0 (0src_bpp0) 0is0 0not0 0supported0" - ^ -:928:1: error: unexpected token at start of statement -.0endif0 -^ -:929:1: error: unknown directive -.0if0 0mask_bpp0 == 0320 -^ -:930:5: error: unknown directive - .0set0 0mask_bpp_shift0, 020 - ^ -:931:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == -^ -:932:5: error: unknown directive - .0set0 0mask_bpp_shift0, - ^ -:933:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == 080 -^ -:934:5: error: unknown directive - .0set0 0mask_bpp_shift0, - ^ -:935:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == -^ -:936:5: error: unknown directive - .0set0 0mask_bpp_shift0, -010 - ^ -:937:1: error: unexpected token at start of statement -.0else0 -^ -:938:5: error: unexpected token at start of statement - .0error0 "0requested0 0mask0 0bpp0 (0mask_bpp0) 0is0 0not0 0supported0" - ^ -:939:1: error: unexpected token at start of statement -.0endif0 -^ -:940:1: error: unknown directive -.0if0 0dst_w_bpp0 == 0320 -^ -:941:5: error: unknown directive - .0set0 0dst_bpp_shift0, 020 - ^ -:942:1: error: unexpected token at start of statement -.0elseif0 0dst_w_bpp0 == -^ -:943:5: error: unknown directive - .0set0 0dst_bpp_shift0, - ^ -:944:1: error: unexpected token at start of statement -.0elseif0 0dst_w_bpp0 == 0160 -^ -:945:5: error: unknown directive - .0set0 0dst_bpp_shift0, 010 - ^ -:946:1: error: unexpected token at start of statement -.0elseif0 0dst_w_bpp0 == 080 -^ -:947:5: error: unknown directive - .0set0 0dst_bpp_shift0, - ^ -:948:1: error: unexpected token at start of statement -.0else0 -^ -:949:5: error: unexpected token at start of statement - .0error0 "0requested0 0dst0 0bpp0 (0dst_w_bpp0) 0is0 0not0 0supported0" - ^ -:950:1: error: unexpected token at start of statement -.0endif0 -^ -:952:1: error: unknown directive -.0if0 (((0FLAG_DST_WRITEONLY0) & 0FLAG_DST_READWRITE0) != ) -^ -:953:5: error: unknown directive - .0set0 0dst_r_bpp0, 0dst_w_bpp0 - ^ -:954:1: error: unexpected token at start of statement -.0else0 -^ -:955:5: error: unknown directive - .0set0 0dst_r_bpp0, - ^ -:956:1: error: unexpected token at start of statement -.0endif0 -^ -:957:1: error: unknown directive -.0if0 (((0FLAG_DST_WRITEONLY0) & 0FLAG_DEINTERLEAVE_32BPP0) != ) -^ -:958:5: error: unknown directive - .0set0 0DEINTERLEAVE_32BPP_ENABLED0, 010 - ^ -:959:1: error: unexpected token at start of statement -.0else0 -^ -:960:5: error: unknown directive - .0set0 0DEINTERLEAVE_32BPP_ENABLED0, - ^ -:961:1: error: unexpected token at start of statement -.0endif0 -^ -:963:1: error: unknown directive -.0if0 < || > 0150 -^ -:964:5: error: unexpected token at start of statement - .0error0 "0invalid0 0prefetch0 0distance0 ()" - ^ -:965:1: error: unexpected token at start of statement -.0endif0 -^ -:967:1: error: unknown directive -.0if0 0src_bpp0 > -^ -:968:5: error: unexpected token at start of statement - 0ldr0 0SRC0, [0sp0, #0400] - ^ -:969:1: error: unexpected token at start of statement -.0endif0 -^ -:970:1: error: unknown directive -.0if0 0mask_bpp0 > -^ -:971:5: error: unexpected token at start of statement - 0ldr0 0MASK0, [0sp0, #0480] - ^ -:972:1: error: unexpected token at start of statement -.0endif0 -^ -:973:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_X0, # - ^ -:974:1: error: unknown directive -.0if0 0src_bpp0 > -^ -:975:5: error: unexpected token at start of statement - 0ldr0 0SRC_STRIDE0, [0sp0, #0440] - ^ -:976:1: error: unexpected token at start of statement -.0endif0 -^ -:977:1: error: unknown directive -.0if0 0mask_bpp0 > -^ -:978:5: error: unexpected token at start of statement - 0ldr0 0MASK_STRIDE0, [0sp0, #0520] - ^ -:979:1: error: unexpected token at start of statement -.0endif0 -^ -:980:5: error: unexpected token at start of statement - 0mov0 0DST_R0, 0DST_W0 - ^ -:982:1: error: unknown directive -.0if0 0src_bpp0 == -^ -:983:5: error: unexpected token at start of statement - 0sub0 0SRC_STRIDE0, 0SRC_STRIDE0, 0W0 - ^ -:984:5: error: unexpected token at start of statement - 0sub0 0SRC_STRIDE0, 0SRC_STRIDE0, 0W0, 0lsl0 #010 - ^ -:985:1: error: unexpected token at start of statement -.0endif0 -^ -:986:1: error: unknown directive -.0if0 0mask_bpp0 == -^ -:987:5: error: unexpected token at start of statement - 0sub0 0MASK_STRIDE0, 0MASK_STRIDE0, 0W0 - ^ -:988:5: error: unexpected token at start of statement - 0sub0 0MASK_STRIDE0, 0MASK_STRIDE0, 0W0, 0lsl0 #010 - ^ -:989:1: error: unexpected token at start of statement -.0endif0 -^ -:990:1: error: unknown directive -.0if0 0dst_w_bpp0 == -^ -:991:5: error: unexpected token at start of statement - 0sub0 0DST_STRIDE0, 0DST_STRIDE0, 0W0 - ^ -:992:5: error: unexpected token at start of statement - 0sub0 0DST_STRIDE0, 0DST_STRIDE0, 0W0, 0lsl0 #010 - ^ -:993:1: error: unexpected token at start of statement -.0endif0 -^ -:998:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_SRC0, 0SRC0 - ^ -:999:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_DST0, 0DST_R0 - ^ -:1000:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_MASK0, 0MASK0 - ^ -:1002:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_CTL0, 0H0, 0lsl0 # - ^ -:1003:5: error: unexpected token at start of statement - 0PF0 0add0 0PF_CTL0, #( - 00x100) - ^ -:1005:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_init0 - ^ -:1006:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1007:5: error: unexpected token at start of statement - 0push0 {0r00, 0r10} - ^ -:1008:1: error: unexpected token at start of statement -.0endif0 -^ -:1009:5: error: unexpected token at start of statement - 0subs0 0H0, 0H0, #010 - ^ -:1010:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1011:5: error: unexpected token at start of statement - 0str0 0H0, [0sp0, #] - ^ -:1012:1: error: unexpected token at start of statement -.0else0 -^ -:1013:5: error: unexpected token at start of statement - 0mov0 0ORIG_W0, 0W0 - ^ -:1014:1: error: unexpected token at start of statement -.0endif0 -^ -:1015:5: error: unexpected token at start of statement - 0blt0 09f0 - ^ -:1016:5: error: unexpected token at start of statement - 0cmp0 0W0, #(0pixblock_size0 * 020) - ^ -:1017:5: error: unexpected token at start of statement - 0blt0 08f0 - ^ -:1022:1: error: unexpected token at start of statement -: -^ -:1023:5: error: unexpected token at start of statement - 0ensure_destination_ptr_alignment0 0pixman_composite_src_n_8888_process_pixblock_head0, 0pixman_composite_src_n_8888_process_pixblock_tail0, 0pixman_composite_src_n_8888_process_pixblock_tail_head0 - ^ -:1028:5: error: unexpected token at start of statement - 0pixld_a0 0pixblock_size0, 0dst_r_bpp0, (0dst_r_basereg0 - 0pixblock_size0 * 0dst_r_bpp0 / 0640), 0DST_R0 - ^ -:1030:5: error: unexpected token at start of statement - 0fetch_src_pixblock0 - ^ -:1031:5: error: unexpected token at start of statement - 0pixld0 0pixblock_size0, 0mask_bpp0, (0mask_basereg0 - 0pixblock_size0 * 0mask_bpp0 / 0640), 0MASK0 - ^ -:1033:5: error: unexpected token at start of statement - 0PF0 0add0 0PF_X0, 0PF_X0, #0pixblock_size0 - ^ -:1034:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_process_pixblock_head0 - ^ -:1035:5: error: unexpected token at start of statement - 0cache_preload0 , 0pixblock_size0 - ^ -:1036:5: error: unexpected token at start of statement - 0cache_preload_simple0 - ^ -:1037:5: error: unexpected token at start of statement - 0subs0 0W0, 0W0, #(0pixblock_size0 * 020) - ^ -:1038:5: error: unexpected token at start of statement - 0blt0 02f0 - ^ -:1040:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_process_pixblock_tail_head0 - ^ -:1041:5: error: unexpected token at start of statement - 0cache_preload_simple0 - ^ -:1042:5: error: unexpected token at start of statement - 0subs0 0W0, 0W0, #0pixblock_size0 - ^ -:1043:5: error: unexpected token at start of statement - 0bge0 01b0 - ^ -:1045:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_process_pixblock_tail0 - ^ -:1046:5: error: unexpected token at start of statement - 0pixst_a0 0pixblock_size0, 0dst_w_bpp0, (0dst_w_basereg0 - 0pixblock_size0 * 0dst_w_bpp0 / 0640), 0DST_W0 - ^ -:1050:5: error: unexpected token at start of statement - 0process_trailing_pixels0 010, 010, 0pixman_composite_src_n_8888_process_pixblock_head0, 0pixman_composite_src_n_8888_process_pixblock_tail0, 0pixman_composite_src_n_8888_process_pixblock_tail_head0 - ^ -:1054:5: error: unexpected token at start of statement - 0advance_to_next_scanline0 00b0 - ^ -:1056:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1057:5: error: unexpected token at start of statement - 0pop0 {0r00, 0r10} - ^ -:1058:1: error: unexpected token at start of statement -.0endif0 -^ -:1059:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_cleanup0 - ^ -:1060:5: error: unexpected token at start of statement - 0pop0 {0r40-0r120, 0pc0} - ^ -:1066:1: error: invalid octal number -080: -^ -:1066:1: error: unexpected token at start of statement -080: -^ -:1068:5: error: unexpected token at start of statement - 0tst0 0W0, #0pixblock_size0 - ^ -:1069:5: error: unexpected token at start of statement - 0beq0 01f0 - ^ -:1070:5: error: unexpected token at start of statement - 0pixld0 0pixblock_size0, 0dst_r_bpp0, (0dst_r_basereg0 - 0pixblock_size0 * 0dst_r_bpp0 / 0640), 0DST_R0 - ^ -:1072:5: error: unexpected token at start of statement - 0fetch_src_pixblock0 - ^ -:1073:5: error: unexpected token at start of statement - 0pixld0 0pixblock_size0, 0mask_bpp0, (0mask_basereg0 - 0pixblock_size0 * 0mask_bpp0 / 0640), 0MASK0 - ^ -:1075:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_process_pixblock_head0 - ^ -:1076:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_process_pixblock_tail0 - ^ -:1077:5: error: unexpected token at start of statement - 0pixst0 0pixblock_size0, 0dst_w_bpp0, (0dst_w_basereg0 - 0pixblock_size0 * 0dst_w_bpp0 / 0640), 0DST_W0 - ^ -:1081:5: error: unexpected token at start of statement - 0process_trailing_pixels0 , , 0pixman_composite_src_n_8888_process_pixblock_head0, 0pixman_composite_src_n_8888_process_pixblock_tail0, 0pixman_composite_src_n_8888_process_pixblock_tail_head0 - ^ -:1085:5: error: unexpected token at start of statement - 0advance_to_next_scanline0 08b0 - ^ -:1086:1: error: invalid octal number -090: -^ -:1086:1: error: unexpected token at start of statement -090: -^ -:1087:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1088:5: error: unexpected token at start of statement - 0pop0 {0r00, 0r10} - ^ -:1089:1: error: unexpected token at start of statement -.0endif0 -^ -:1090:5: error: unexpected token at start of statement - 0pixman_composite_src_n_8888_cleanup0 - ^ -:1091:5: error: unexpected token at start of statement - 0pop0 {0r40-0r120, 0pc0} - ^ -:1094:5: error: unknown directive - .0unreq0 0SRC0 - ^ -:1095:5: error: unknown directive - .0unreq0 0MASK0 - ^ -:1096:5: error: unknown directive - .0unreq0 0DST_R0 - ^ -:1097:5: error: unknown directive - .0unreq0 0DST_W0 - ^ -:1098:5: error: unknown directive - .0unreq0 0ORIG_W0 - ^ -:1099:5: error: unknown directive - .0unreq0 0W0 - ^ -:1100:5: error: unknown directive - .0unreq0 0H0 - ^ -:1101:5: error: unknown directive - .0unreq0 0SRC_STRIDE0 - ^ -:1102:5: error: unknown directive - .0unreq0 0DST_STRIDE0 - ^ -:1103:5: error: unknown directive - .0unreq0 0MASK_STRIDE0 - ^ -:1104:5: error: unknown directive - .0unreq0 0PF_CTL0 - ^ -:1105:5: error: unknown directive - .0unreq0 0PF_X0 - ^ -:1106:5: error: unknown directive - .0unreq0 0PF_SRC0 - ^ -:1107:5: error: unknown directive - .0unreq0 0PF_DST0 - ^ -:1108:5: error: unknown directive - .0unreq0 0PF_MASK0 - ^ -:1109:5: error: unknown directive - .0unreq0 0DUMMY0 - ^ -:1110:5: error: unexpected token at start of statement - .0endfunc0 - ^ -:1116:5: error: unexpected token at start of statement - 0pixman_asm_function0 0pixman_composite_src_8888_8888_asm_neon0 - ^ -:1118:5: error: unexpected token at start of statement - 0push0 {0r40-0r120, 0lr0} - ^ -:1125:5: error: unknown directive - .0set0 0PREFETCH_TYPE_CURRENT0, 0PREFETCH_TYPE_DEFAULT0 - ^ -:1126:1: error: unknown directive -.0if0 0100 == -^ -:1127:5: error: unknown directive - .0set0 0PREFETCH_TYPE_CURRENT0, 0PREFETCH_TYPE_NONE0 - ^ -:1128:1: error: unexpected token at start of statement -.0elseif0 (0PREFETCH_TYPE_CURRENT0 > 0PREFETCH_TYPE_SIMPLE0) && ((0320 == ) || ( == ) || (0320 == )) -^ -:1130:5: error: unknown directive - .0set0 0PREFETCH_TYPE_CURRENT0, 0PREFETCH_TYPE_SIMPLE0 - ^ -:1131:1: error: unexpected token at start of statement -.0endif0 -^ -:1137:5: error: unknown directive - .0set0 0src_bpp0, 0320 - ^ -:1138:5: error: unknown directive - .0set0 0mask_bpp0, - ^ -:1139:5: error: unknown directive - .0set0 0dst_w_bpp0, 0320 - ^ -:1140:5: error: unknown directive - .0set0 0pixblock_size0, 080 - ^ -:1141:5: error: unknown directive - .0set0 0dst_w_basereg0, - ^ -:1142:5: error: unknown directive - .0set0 0dst_r_basereg0, - ^ -:1143:5: error: unknown directive - .0set0 0src_basereg0, - ^ -:1144:5: error: unknown directive - .0set0 0mask_basereg0, - ^ -:1146:5: error: unknown directive - .0macro0 0pixld_src0 0x0:0vararg0 - ^ -:1147:9: error: unexpected token at start of statement - 0pixld0 0x0 - ^ -:1148:5: error: unexpected token at start of statement - .0endm0 - ^ -:1149:5: error: unknown directive - .0macro0 0fetch_src_pixblock0 - ^ -:1150:9: error: unexpected token at start of statement - 0pixld_src0 0pixblock_size0, 0src_bpp0, (0src_basereg0 - 0pixblock_size0 * 0src_bpp0 / 0640), 0SRC0 - ^ -:1152:5: error: unexpected token at start of statement - .0endm0 - ^ -:1156:5: error: unexpected token at start of statement - 0W0 .0req0 0r00 - ^ -:1157:5: error: unexpected token at start of statement - 0H0 .0req0 0r10 - ^ -:1158:5: error: unexpected token at start of statement - 0DST_W0 .0req0 0r20 - ^ -:1159:5: error: unexpected token at start of statement - 0DST_STRIDE0 .0req0 0r30 - ^ -:1160:5: error: unexpected token at start of statement - 0SRC0 .0req0 0r40 - ^ -:1161:5: error: unexpected token at start of statement - 0SRC_STRIDE0 .0req0 0r50 - ^ -:1162:5: error: unexpected token at start of statement - 0DST_R0 .0req0 0r60 - ^ -:1164:5: error: unexpected token at start of statement - 0MASK0 .0req0 0r70 - ^ -:1165:5: error: unexpected token at start of statement - 0MASK_STRIDE0 .0req0 0r80 - ^ -:1167:5: error: unexpected token at start of statement - 0PF_CTL0 .0req0 0r90 - ^ -:1169:5: error: unexpected token at start of statement - 0PF_X0 .0req0 0r100 - ^ -:1171:5: error: unexpected token at start of statement - 0PF_SRC0 .0req0 0r110 - ^ -:1173:5: error: unexpected token at start of statement - 0PF_DST0 .0req0 0r120 - ^ -:1175:5: error: unexpected token at start of statement - 0PF_MASK0 .0req0 0r140 - ^ -:1177:1: error: unknown directive -.0if0 (0PREFETCH_TYPE_CURRENT0 < 0PREFETCH_TYPE_ADVANCED0) -^ -:1178:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r100 - ^ -:1179:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r120 - ^ -:1180:5: error: unknown directive - .0set0 0regs_shortage0, - ^ -:1181:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == -^ -:1182:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r70 - ^ -:1183:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r80 - ^ -:1184:5: error: unknown directive - .0set0 0regs_shortage0, - ^ -:1185:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == -^ -:1186:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r40 - ^ -:1187:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r50 - ^ -:1188:5: error: unknown directive - .0set0 0regs_shortage0, - ^ -:1189:1: error: unexpected token at start of statement -.0else0 -^ -:1190:5: error: unexpected token at start of statement - 0ORIG_W0 .0req0 0r10 - ^ -:1191:5: error: unexpected token at start of statement - 0DUMMY0 .0req0 0r10 - ^ -:1192:5: error: unknown directive - .0set0 0regs_shortage0, 010 - ^ -:1193:1: error: unexpected token at start of statement -.0endif0 -^ -:1195:5: error: unknown directive - .0set0 0mask_bpp_shift0, -010 - ^ -:1196:1: error: unknown directive -.0if0 0src_bpp0 == 0320 -^ -:1197:5: error: unknown directive - .0set0 0src_bpp_shift0, 020 - ^ -:1198:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == -^ -:1199:5: error: unknown directive - .0set0 0src_bpp_shift0, - ^ -:1200:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == 0160 -^ -:1201:5: error: unknown directive - .0set0 0src_bpp_shift0, 010 - ^ -:1202:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == 080 -^ -:1203:5: error: unknown directive - .0set0 0src_bpp_shift0, - ^ -:1204:1: error: unexpected token at start of statement -.0elseif0 0src_bpp0 == -^ -:1205:5: error: unknown directive - .0set0 0src_bpp_shift0, -010 - ^ -:1206:1: error: unexpected token at start of statement -.0else0 -^ -:1207:5: error: unexpected token at start of statement - .0error0 "0requested0 0src0 0bpp0 (0src_bpp0) 0is0 0not0 0supported0" - ^ -:1208:1: error: unexpected token at start of statement -.0endif0 -^ -:1209:1: error: unknown directive -.0if0 0mask_bpp0 == 0320 -^ -:1210:5: error: unknown directive - .0set0 0mask_bpp_shift0, 020 - ^ -:1211:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == -^ -:1212:5: error: unknown directive - .0set0 0mask_bpp_shift0, - ^ -:1213:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == 080 -^ -:1214:5: error: unknown directive - .0set0 0mask_bpp_shift0, - ^ -:1215:1: error: unexpected token at start of statement -.0elseif0 0mask_bpp0 == -^ -:1216:5: error: unknown directive - .0set0 0mask_bpp_shift0, -010 - ^ -:1217:1: error: unexpected token at start of statement -.0else0 -^ -:1218:5: error: unexpected token at start of statement - .0error0 "0requested0 0mask0 0bpp0 (0mask_bpp0) 0is0 0not0 0supported0" - ^ -:1219:1: error: unexpected token at start of statement -.0endif0 -^ -:1220:1: error: unknown directive -.0if0 0dst_w_bpp0 == 0320 -^ -:1221:5: error: unknown directive - .0set0 0dst_bpp_shift0, 020 - ^ -:1222:1: error: unexpected token at start of statement -.0elseif0 0dst_w_bpp0 == -^ -:1223:5: error: unknown directive - .0set0 0dst_bpp_shift0, - ^ -:1224:1: error: unexpected token at start of statement -.0elseif0 0dst_w_bpp0 == 0160 -^ -:1225:5: error: unknown directive - .0set0 0dst_bpp_shift0, 010 - ^ -:1226:1: error: unexpected token at start of statement -.0elseif0 0dst_w_bpp0 == 080 -^ -:1227:5: error: unknown directive - .0set0 0dst_bpp_shift0, - ^ -:1228:1: error: unexpected token at start of statement -.0else0 -^ -:1229:5: error: unexpected token at start of statement - .0error0 "0requested0 0dst0 0bpp0 (0dst_w_bpp0) 0is0 0not0 0supported0" - ^ -:1230:1: error: unexpected token at start of statement -.0endif0 -^ -:1232:1: error: unknown directive -.0if0 (((0FLAG_DST_WRITEONLY0) & 0FLAG_DST_READWRITE0) != ) -^ -:1233:5: error: unknown directive - .0set0 0dst_r_bpp0, 0dst_w_bpp0 - ^ -:1234:1: error: unexpected token at start of statement -.0else0 -^ -:1235:5: error: unknown directive - .0set0 0dst_r_bpp0, - ^ -:1236:1: error: unexpected token at start of statement -.0endif0 -^ -:1237:1: error: unknown directive -.0if0 (((0FLAG_DST_WRITEONLY0) & 0FLAG_DEINTERLEAVE_32BPP0) != ) -^ -:1238:5: error: unknown directive - .0set0 0DEINTERLEAVE_32BPP_ENABLED0, 010 - ^ -:1239:1: error: unexpected token at start of statement -.0else0 -^ -:1240:5: error: unknown directive - .0set0 0DEINTERLEAVE_32BPP_ENABLED0, - ^ -:1241:1: error: unexpected token at start of statement -.0endif0 -^ -:1243:1: error: unknown directive -.0if0 0100 < || 0100 > 0150 -^ -:1244:5: error: unexpected token at start of statement - .0error0 "0invalid0 0prefetch0 0distance0 (0100)" - ^ -:1245:1: error: unexpected token at start of statement -.0endif0 -^ -:1247:1: error: unknown directive -.0if0 0src_bpp0 > -^ -:1248:5: error: unexpected token at start of statement - 0ldr0 0SRC0, [0sp0, #0400] - ^ -:1249:1: error: unexpected token at start of statement -.0endif0 -^ -:1250:1: error: unknown directive -.0if0 0mask_bpp0 > -^ -:1251:5: error: unexpected token at start of statement - 0ldr0 0MASK0, [0sp0, #0480] - ^ -:1252:1: error: unexpected token at start of statement -.0endif0 -^ -:1253:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_X0, # - ^ -:1254:1: error: unknown directive -.0if0 0src_bpp0 > -^ -:1255:5: error: unexpected token at start of statement - 0ldr0 0SRC_STRIDE0, [0sp0, #0440] - ^ -:1256:1: error: unexpected token at start of statement -.0endif0 -^ -:1257:1: error: unknown directive -.0if0 0mask_bpp0 > -^ -:1258:5: error: unexpected token at start of statement - 0ldr0 0MASK_STRIDE0, [0sp0, #0520] - ^ -:1259:1: error: unexpected token at start of statement -.0endif0 -^ -:1260:5: error: unexpected token at start of statement - 0mov0 0DST_R0, 0DST_W0 - ^ -:1262:1: error: unknown directive -.0if0 0src_bpp0 == -^ -:1263:5: error: unexpected token at start of statement - 0sub0 0SRC_STRIDE0, 0SRC_STRIDE0, 0W0 - ^ -:1264:5: error: unexpected token at start of statement - 0sub0 0SRC_STRIDE0, 0SRC_STRIDE0, 0W0, 0lsl0 #010 - ^ -:1265:1: error: unexpected token at start of statement -.0endif0 -^ -:1266:1: error: unknown directive -.0if0 0mask_bpp0 == -^ -:1267:5: error: unexpected token at start of statement - 0sub0 0MASK_STRIDE0, 0MASK_STRIDE0, 0W0 - ^ -:1268:5: error: unexpected token at start of statement - 0sub0 0MASK_STRIDE0, 0MASK_STRIDE0, 0W0, 0lsl0 #010 - ^ -:1269:1: error: unexpected token at start of statement -.0endif0 -^ -:1270:1: error: unknown directive -.0if0 0dst_w_bpp0 == -^ -:1271:5: error: unexpected token at start of statement - 0sub0 0DST_STRIDE0, 0DST_STRIDE0, 0W0 - ^ -:1272:5: error: unexpected token at start of statement - 0sub0 0DST_STRIDE0, 0DST_STRIDE0, 0W0, 0lsl0 #010 - ^ -:1273:1: error: unexpected token at start of statement -.0endif0 -^ -:1278:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_SRC0, 0SRC0 - ^ -:1279:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_DST0, 0DST_R0 - ^ -:1280:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_MASK0, 0MASK0 - ^ -:1282:5: error: unexpected token at start of statement - 0PF0 0mov0 0PF_CTL0, 0H0, 0lsl0 # - ^ -:1283:5: error: unexpected token at start of statement - 0PF0 0add0 0PF_CTL0, #(0100 - 00x100) - ^ -:1285:5: error: unexpected token at start of statement - 0default_init0 - ^ -:1286:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1287:5: error: unexpected token at start of statement - 0push0 {0r00, 0r10} - ^ -:1288:1: error: unexpected token at start of statement -.0endif0 -^ -:1289:5: error: unexpected token at start of statement - 0subs0 0H0, 0H0, #010 - ^ -:1290:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1291:5: error: unexpected token at start of statement - 0str0 0H0, [0sp0, #] - ^ -:1292:1: error: unexpected token at start of statement -.0else0 -^ -:1293:5: error: unexpected token at start of statement - 0mov0 0ORIG_W0, 0W0 - ^ -:1294:1: error: unexpected token at start of statement -.0endif0 -^ -:1295:5: error: unexpected token at start of statement - 0blt0 09f0 - ^ -:1296:5: error: unexpected token at start of statement - 0cmp0 0W0, #(0pixblock_size0 * 020) - ^ -:1297:5: error: unexpected token at start of statement - 0blt0 08f0 - ^ -:1302:1: error: unexpected token at start of statement -: -^ -:1303:5: error: unexpected token at start of statement - 0ensure_destination_ptr_alignment0 0pixman_composite_src_8888_8888_process_pixblock_head0, 0pixman_composite_src_8888_8888_process_pixblock_tail0, 0pixman_composite_src_8888_8888_process_pixblock_tail_head0 - ^ -:1308:5: error: unexpected token at start of statement - 0pixld_a0 0pixblock_size0, 0dst_r_bpp0, (0dst_r_basereg0 - 0pixblock_size0 * 0dst_r_bpp0 / 0640), 0DST_R0 - ^ -:1310:5: error: unexpected token at start of statement - 0fetch_src_pixblock0 - ^ -:1311:5: error: unexpected token at start of statement - 0pixld0 0pixblock_size0, 0mask_bpp0, (0mask_basereg0 - 0pixblock_size0 * 0mask_bpp0 / 0640), 0MASK0 - ^ -:1313:5: error: unexpected token at start of statement - 0PF0 0add0 0PF_X0, 0PF_X0, #0pixblock_size0 - ^ -:1314:5: error: unexpected token at start of statement - 0pixman_composite_src_8888_8888_process_pixblock_head0 - ^ -:1315:5: error: unexpected token at start of statement - 0cache_preload0 , 0pixblock_size0 - ^ -:1316:5: error: unexpected token at start of statement - 0cache_preload_simple0 - ^ -:1317:5: error: unexpected token at start of statement - 0subs0 0W0, 0W0, #(0pixblock_size0 * 020) - ^ -:1318:5: error: unexpected token at start of statement - 0blt0 02f0 - ^ -:1320:5: error: unexpected token at start of statement - 0pixman_composite_src_8888_8888_process_pixblock_tail_head0 - ^ -:1321:5: error: unexpected token at start of statement - 0cache_preload_simple0 - ^ -:1322:5: error: unexpected token at start of statement - 0subs0 0W0, 0W0, #0pixblock_size0 - ^ -:1323:5: error: unexpected token at start of statement - 0bge0 01b0 - ^ -:1325:5: error: unexpected token at start of statement - 0pixman_composite_src_8888_8888_process_pixblock_tail0 - ^ -:1326:5: error: unexpected token at start of statement - 0pixst_a0 0pixblock_size0, 0dst_w_bpp0, (0dst_w_basereg0 - 0pixblock_size0 * 0dst_w_bpp0 / 0640), 0DST_W0 - ^ -:1330:5: error: unexpected token at start of statement - 0process_trailing_pixels0 010, 010, 0pixman_composite_src_8888_8888_process_pixblock_head0, 0pixman_composite_src_8888_8888_process_pixblock_tail0, 0pixman_composite_src_8888_8888_process_pixblock_tail_head0 - ^ -:1334:5: error: unexpected token at start of statement - 0advance_to_next_scanline0 00b0 - ^ -:1336:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1337:5: error: unexpected token at start of statement - 0pop0 {0r00, 0r10} - ^ -:1338:1: error: unexpected token at start of statement -.0endif0 -^ -:1339:5: error: unexpected token at start of statement - 0default_cleanup0 - ^ -:1340:5: error: unexpected token at start of statement - 0pop0 {0r40-0r120, 0pc0} - ^ -:1346:1: error: invalid octal number -080: -^ -:1346:1: error: unexpected token at start of statement -080: -^ -:1348:5: error: unexpected token at start of statement - 0tst0 0W0, #0pixblock_size0 - ^ -:1349:5: error: unexpected token at start of statement - 0beq0 01f0 - ^ -:1350:5: error: unexpected token at start of statement - 0pixld0 0pixblock_size0, 0dst_r_bpp0, (0dst_r_basereg0 - 0pixblock_size0 * 0dst_r_bpp0 / 0640), 0DST_R0 - ^ -:1352:5: error: unexpected token at start of statement - 0fetch_src_pixblock0 - ^ -:1353:5: error: unexpected token at start of statement - 0pixld0 0pixblock_size0, 0mask_bpp0, (0mask_basereg0 - 0pixblock_size0 * 0mask_bpp0 / 0640), 0MASK0 - ^ -:1355:5: error: unexpected token at start of statement - 0pixman_composite_src_8888_8888_process_pixblock_head0 - ^ -:1356:5: error: unexpected token at start of statement - 0pixman_composite_src_8888_8888_process_pixblock_tail0 - ^ -:1357:5: error: unexpected token at start of statement - 0pixst0 0pixblock_size0, 0dst_w_bpp0, (0dst_w_basereg0 - 0pixblock_size0 * 0dst_w_bpp0 / 0640), 0DST_W0 - ^ -:1361:5: error: unexpected token at start of statement - 0process_trailing_pixels0 , , 0pixman_composite_src_8888_8888_process_pixblock_head0, 0pixman_composite_src_8888_8888_process_pixblock_tail0, 0pixman_composite_src_8888_8888_process_pixblock_tail_head0 - ^ -:1365:5: error: unexpected token at start of statement - 0advance_to_next_scanline0 08b0 - ^ -:1366:1: error: invalid octal number -090: -^ -:1366:1: error: unexpected token at start of statement -090: -^ -:1367:1: error: unknown directive -.0if0 0regs_shortage0 -^ -:1368:5: error: unexpected token at start of statement - 0pop0 {0r00, 0r10} - ^ -:1369:1: error: unexpected token at start of statement -.0endif0 -^ -:1370:5: error: unexpected token at start of statement - 0default_cleanup0 - ^ -:1371:5: error: unexpected token at start of statement - 0pop0 {0r40-0r120, 0pc0} - ^ -:1374:5: error: unknown directive - .0unreq0 0SRC0 - ^ -:1375:5: error: unknown directive - .0unreq0 0MASK0 - ^ -:1376:5: error: unknown directive - .0unreq0 0DST_R0 - ^ -:1377:5: error: unknown directive - .0unreq0 0DST_W0 - ^ -:1378:5: error: unknown directive - .0unreq0 0ORIG_W0 - ^ -:1379:5: error: unknown directive - .0unreq0 0W0 - ^ -:1380:5: error: unknown directive - .0unreq0 0H0 - ^ -:1381:5: error: unknown directive - .0unreq0 0SRC_STRIDE0 - ^ -:1382:5: error: unknown directive - .0unreq0 0DST_STRIDE0 - ^ -:1383:5: error: unknown directive - .0unreq0 0MASK_STRIDE0 - ^ -:1384:5: error: unknown directive - .0unreq0 0PF_CTL0 - ^ -:1385:5: error: unknown directive - .0unreq0 0PF_X0 - ^ -:1386:5: error: unknown directive - .0unreq0 0PF_SRC0 - ^ -:1387:5: error: unknown directive - .0unreq0 0PF_DST0 - ^ -:1388:5: error: unknown directive - .0unreq0 0PF_MASK0 - ^ -:1389:5: error: unknown directive - .0unreq0 0DUMMY0 - ^ -:1390:5: error: unexpected token at start of statement - .0endfunc0 - ^ -1:1:15: error: invalid symbol redefinition -clang: error: clang: error: no such file or directory: '2' - ^ -1:1:22: error: invalid symbol redefinition -clang: error: clang: error: no such file or directory: '2' - ^ -1:1:37: error: unexpected token in argument list -clang: error: clang: error: no such file or directory: '2' - ^ -1:2:9: error: unexpected token in argument list -no such file or directory: '2' - ^ diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arma64-neon-asm.S b/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arma64-neon-asm.S deleted file mode 100644 index 7705eee0a5..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arma64-neon-asm.S +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright © 2009 Nokia Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com) - */ - -/* - * This file contains implementations of NEON optimized pixel processing - * functions. There is no full and detailed tutorial, but some functions - * (those which are exposing some new or interesting features) are - * extensively commented and can be used as examples. - * - * You may want to have a look at the comments for following functions: - * - pixman_composite_over_8888_0565_asm_neon - * - pixman_composite_over_n_8_0565_asm_neon - */ - -/* Prevent the stack from becoming executable for no reason... */ -#if defined(__linux__) && defined(__ELF__) -.section .note.GNU-stack,"",%progbits -#endif - -.text -.arch armv8-a -.altmacro -.p2align 2 - -/* Supplementary macro for setting function attributes */ -.macro pixman_asm_function fname -.func fname -.global fname -#ifdef __ELF__ -.hidden fname -.type fname, %function -#endif -fname: -.endm - -#include "pixman-arma64-neon-asm.h" - -/* Global configuration options and preferences */ - -/* - * The code can optionally make use of unaligned memory accesses to improve - * performance of handling leading/trailing pixels for each scanline. - * Configuration variable RESPECT_STRICT_ALIGNMENT can be set to 0 for - * example in linux if unaligned memory accesses are not configured to - * generate.exceptions. - */ -.set RESPECT_STRICT_ALIGNMENT, 1 - -/* - * Set default prefetch type. There is a choice between the following options: - * - * PREFETCH_TYPE_NONE (may be useful for the ARM cores where PLD is set to work - * as NOP to workaround some HW bugs or for whatever other reason) - * - * PREFETCH_TYPE_SIMPLE (may be useful for simple single-issue ARM cores where - * advanced prefetch intruduces heavy overhead) - * - * PREFETCH_TYPE_ADVANCED (useful for superscalar cores such as ARM Cortex-A8 - * which can run ARM and NEON instructions simultaneously so that extra ARM - * instructions do not add (many) extra cycles, but improve prefetch efficiency) - * - * Note: some types of function can't support advanced prefetch and fallback - * to simple one (those which handle 24bpp pixels) - */ -.set PREFETCH_TYPE_DEFAULT, PREFETCH_TYPE_ADVANCED - -/* Prefetch distance in pixels for simple prefetch */ -.set PREFETCH_DISTANCE_SIMPLE, 64 - -/* - * Implementation of pixman_composite_over_8888_0565_asm_neon - * - * This function takes a8r8g8b8 source buffer, r5g6b5 destination buffer and - * performs OVER compositing operation. Function fast_composite_over_8888_0565 - * from pixman-fast-path.c does the same in C and can be used as a reference. - * - * First we need to have some NEON assembly code which can do the actual - * operation on the pixels and provide it to the template macro. - * - * Template macro quite conveniently takes care of emitting all the necessary - * code for memory reading and writing (including quite tricky cases of - * handling unaligned leading/trailing pixels), so we only need to deal with - * the data in NEON registers. - * - * NEON registers allocation in general is recommented to be the following: - * v0, v1, v2, v3 - contain loaded source pixel data - * v4, v5, v6, v7 - contain loaded destination pixels (if they are needed) - * v24, v25, v26, v27 - contain loading mask pixel data (if mask is used) - * v28, v29, v30, v31 - place for storing the result (destination pixels) - * - * As can be seen above, four 64-bit NEON registers are used for keeping - * intermediate pixel data and up to 8 pixels can be processed in one step - * for 32bpp formats (16 pixels for 16bpp, 32 pixels for 8bpp). - * - * This particular function uses the following registers allocation: - * v0, v1, v2, v3 - contain loaded source pixel data - * v4, v5 - contain loaded destination pixels (they are needed) - * v28, v29 - place for storing the result (destination pixels) - */ - -/* - * Step one. We need to have some code to do some arithmetics on pixel data. - * This is implemented as a pair of macros: '*_head' and '*_tail'. When used - * back-to-back, they take pixel data from {v0, v1, v2, v3} and {v4, v5}, - * perform all the needed calculations and write the result to {v28, v29}. - * The rationale for having two macros and not just one will be explained - * later. In practice, any single monolitic function which does the work can - * be split into two parts in any arbitrary way without affecting correctness. - * - * There is one special trick here too. Common template macro can optionally - * make our life a bit easier by doing R, G, B, A color components - * deinterleaving for 32bpp pixel formats (and this feature is used in - * 'pixman_composite_over_8888_0565_asm_neon' function). So it means that - * instead of having 8 packed pixels in {v0, v1, v2, v3} registers, we - * actually use v0 register for blue channel (a vector of eight 8-bit - * values), v1 register for green, v2 for red and v3 for alpha. This - * simple conversion can be also done with a few NEON instructions: - * - * Packed to planar conversion: // vuzp8 is a wrapper macro - * vuzp8 v0, v1 - * vuzp8 v2, v3 - * vuzp8 v1, v3 - * vuzp8 v0, v2 - * - * Planar to packed conversion: // vzip8 is a wrapper macro - * vzip8 v0, v2 - * vzip8 v1, v3 - * vzip8 v2, v3 - * vzip8 v0, v1 - * - * But pixel can be loaded directly in planar format using LD4 / b NEON - * instruction. It is 1 cycle slower than LD1 / s, so this is not always - * desirable, that's why deinterleaving is optional. - * - * But anyway, here is the code: - */ - -.macro pixman_composite_out_reverse_8888_8888_process_pixblock_head - mvn v24.8b, v3.8b /* get inverted alpha */ - /* do alpha blending */ - umull v8.8h, v24.8b, v4.8b - umull v9.8h, v24.8b, v5.8b - umull v10.8h, v24.8b, v6.8b - umull v11.8h, v24.8b, v7.8b -.endm - -.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail - urshr v14.8h, v8.8h, #8 - urshr v15.8h, v9.8h, #8 - urshr v16.8h, v10.8h, #8 - urshr v17.8h, v11.8h, #8 - raddhn v28.8b, v14.8h, v8.8h - raddhn v29.8b, v15.8h, v9.8h - raddhn v30.8b, v16.8h, v10.8h - raddhn v31.8b, v17.8h, v11.8h -.endm - -/******************************************************************************/ - -.macro pixman_composite_over_8888_8888_process_pixblock_head - pixman_composite_out_reverse_8888_8888_process_pixblock_head -.endm - -.macro pixman_composite_over_8888_8888_process_pixblock_tail - pixman_composite_out_reverse_8888_8888_process_pixblock_tail - uqadd v28.8b, v0.8b, v28.8b - uqadd v29.8b, v1.8b, v29.8b - uqadd v30.8b, v2.8b, v30.8b - uqadd v31.8b, v3.8b, v31.8b -.endm - -.macro pixman_composite_over_8888_8888_process_pixblock_tail_head - ld4 {v4.8b, v5.8b, v6.8b, v7.8b}, [DST_R], #32 - urshr v14.8h, v8.8h, #8 - PF add PF_X, PF_X, #8 - PF tst PF_CTL, #0xF - urshr v15.8h, v9.8h, #8 - urshr v16.8h, v10.8h, #8 - urshr v17.8h, v11.8h, #8 - PF beq 10f - PF add PF_X, PF_X, #8 - PF sub PF_CTL, PF_CTL, #1 -10: - raddhn v28.8b, v14.8h, v8.8h - raddhn v29.8b, v15.8h, v9.8h - PF cmp PF_X, ORIG_W - raddhn v30.8b, v16.8h, v10.8h - raddhn v31.8b, v17.8h, v11.8h - uqadd v28.8b, v0.8b, v28.8b - uqadd v29.8b, v1.8b, v29.8b - uqadd v30.8b, v2.8b, v30.8b - uqadd v31.8b, v3.8b, v31.8b - fetch_src_pixblock - PF lsl DUMMY, PF_X, #src_bpp_shift - PF prfm PREFETCH_MODE, [PF_SRC, DUMMY] - mvn v22.8b, v3.8b - PF lsl DUMMY, PF_X, #dst_bpp_shift - PF prfm PREFETCH_MODE, [PF_DST, DUMMY] - st4 {v28.8b, v29.8b, v30.8b, v31.8b}, [DST_W], #32 - PF ble 10f - PF sub PF_X, PF_X, ORIG_W -10: - umull v8.8h, v22.8b, v4.8b - PF ble 10f - PF subs PF_CTL, PF_CTL, #0x10 -10: - umull v9.8h, v22.8b, v5.8b - PF ble 10f - PF lsl DUMMY, SRC_STRIDE, #src_bpp_shift - PF ldrsb DUMMY, [PF_SRC, DUMMY] - PF add PF_SRC, PF_SRC, #1 -10: - umull v10.8h, v22.8b, v6.8b - PF ble 10f - PF lsl DUMMY, DST_STRIDE, #dst_bpp_shift - PF ldrsb DUMMY, [PF_DST, DUMMY] - PF add PF_DST, PF_DST, #1 -10: - umull v11.8h, v22.8b, v7.8b -.endm - -generate_composite_function \ - pixman_composite_over_8888_8888_asm_neon, 32, 0, 32, \ - FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ - 8, /* number of pixels, processed in a single block */ \ - 5, /* prefetch distance */ \ - default_init, \ - default_cleanup, \ - pixman_composite_over_8888_8888_process_pixblock_head, \ - pixman_composite_over_8888_8888_process_pixblock_tail, \ - pixman_composite_over_8888_8888_process_pixblock_tail_head - -generate_composite_function_single_scanline \ - pixman_composite_scanline_over_asm_neon, 32, 0, 32, \ - FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ - 8, /* number of pixels, processed in a single block */ \ - default_init, \ - default_cleanup, \ - pixman_composite_over_8888_8888_process_pixblock_head, \ - pixman_composite_over_8888_8888_process_pixblock_tail, \ - pixman_composite_over_8888_8888_process_pixblock_tail_head - -/******************************************************************************/ - -.macro pixman_composite_over_n_8888_process_pixblock_head - /* deinterleaved source pixels in {v0, v1, v2, v3} */ - /* inverted alpha in {v24} */ - /* destination pixels in {v4, v5, v6, v7} */ - umull v8.8h, v24.8b, v4.8b - umull v9.8h, v24.8b, v5.8b - umull v10.8h, v24.8b, v6.8b - umull v11.8h, v24.8b, v7.8b -.endm - -.macro pixman_composite_over_n_8888_process_pixblock_tail - urshr v14.8h, v8.8h, #8 - urshr v15.8h, v9.8h, #8 - urshr v16.8h, v10.8h, #8 - urshr v17.8h, v11.8h, #8 - raddhn v28.8b, v14.8h, v8.8h - raddhn v29.8b, v15.8h, v9.8h - raddhn v30.8b, v16.8h, v10.8h - raddhn v31.8b, v17.8h, v11.8h - uqadd v28.8b, v0.8b, v28.8b - uqadd v29.8b, v1.8b, v29.8b - uqadd v30.8b, v2.8b, v30.8b - uqadd v31.8b, v3.8b, v31.8b -.endm - -.macro pixman_composite_over_n_8888_process_pixblock_tail_head - urshr v14.8h, v8.8h, #8 - urshr v15.8h, v9.8h, #8 - urshr v16.8h, v10.8h, #8 - urshr v17.8h, v11.8h, #8 - raddhn v28.8b, v14.8h, v8.8h - raddhn v29.8b, v15.8h, v9.8h - raddhn v30.8b, v16.8h, v10.8h - raddhn v31.8b, v17.8h, v11.8h - ld4 {v4.8b, v5.8b, v6.8b, v7.8b}, [DST_R], #32 - uqadd v28.8b, v0.8b, v28.8b - PF add PF_X, PF_X, #8 - PF tst PF_CTL, #0x0F - PF beq 10f - PF add PF_X, PF_X, #8 - PF sub PF_CTL, PF_CTL, #1 -10: - uqadd v29.8b, v1.8b, v29.8b - uqadd v30.8b, v2.8b, v30.8b - uqadd v31.8b, v3.8b, v31.8b - PF cmp PF_X, ORIG_W - umull v8.8h, v24.8b, v4.8b - PF lsl DUMMY, PF_X, #dst_bpp_shift - PF prfm PREFETCH_MODE, [PF_DST, DUMMY] - umull v9.8h, v24.8b, v5.8b - PF ble 10f - PF sub PF_X, PF_X, ORIG_W -10: - umull v10.8h, v24.8b, v6.8b - PF subs PF_CTL, PF_CTL, #0x10 - umull v11.8h, v24.8b, v7.8b - PF ble 10f - PF lsl DUMMY, DST_STRIDE, #dst_bpp_shift - PF ldrsb DUMMY, [PF_DST, DUMMY] - PF add PF_DST, PF_DST, #1 -10: - st4 {v28.8b, v29.8b, v30.8b, v31.8b}, [DST_W], #32 -.endm - -.macro pixman_composite_over_n_8888_init - mov v3.s[0], w4 - dup v0.8b, v3.b[0] - dup v1.8b, v3.b[1] - dup v2.8b, v3.b[2] - dup v3.8b, v3.b[3] - mvn v24.8b, v3.8b /* get inverted alpha */ -.endm - -generate_composite_function \ - pixman_composite_over_n_8888_asm_neon, 0, 0, 32, \ - FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ - 8, /* number of pixels, processed in a single block */ \ - 5, /* prefetch distance */ \ - pixman_composite_over_n_8888_init, \ - default_cleanup, \ - pixman_composite_over_8888_8888_process_pixblock_head, \ - pixman_composite_over_8888_8888_process_pixblock_tail, \ - pixman_composite_over_n_8888_process_pixblock_tail_head - -/******************************************************************************/ - -.macro pixman_composite_src_n_8888_process_pixblock_head -.endm - -.macro pixman_composite_src_n_8888_process_pixblock_tail -.endm - -.macro pixman_composite_src_n_8888_process_pixblock_tail_head - st1 {v0.2s, v1.2s, v2.2s, v3.2s}, [DST_W], #32 -.endm - -.macro pixman_composite_src_n_8888_init - mov v0.s[0], w4 - dup v3.2s, v0.s[0] - dup v2.2s, v0.s[0] - dup v1.2s, v0.s[0] - dup v0.2s, v0.s[0] -.endm - -.macro pixman_composite_src_n_8888_cleanup -.endm - -generate_composite_function \ - pixman_composite_src_n_8888_asm_neon, 0, 0, 32, \ - FLAG_DST_WRITEONLY, \ - 8, /* number of pixels, processed in a single block */ \ - 0, /* prefetch distance */ \ - pixman_composite_src_n_8888_init, \ - pixman_composite_src_n_8888_cleanup, \ - pixman_composite_src_n_8888_process_pixblock_head, \ - pixman_composite_src_n_8888_process_pixblock_tail, \ - pixman_composite_src_n_8888_process_pixblock_tail_head, \ - 0, /* dst_w_basereg */ \ - 0, /* dst_r_basereg */ \ - 0, /* src_basereg */ \ - 0 /* mask_basereg */ - -/******************************************************************************/ - -.macro pixman_composite_src_8888_8888_process_pixblock_head -.endm - -.macro pixman_composite_src_8888_8888_process_pixblock_tail -.endm - -.macro pixman_composite_src_8888_8888_process_pixblock_tail_head - st1 {v0.2s, v1.2s, v2.2s, v3.2s}, [DST_W], #32 - fetch_src_pixblock - cache_preload 8, 8 -.endm - -generate_composite_function \ - pixman_composite_src_8888_8888_asm_neon, 32, 0, 32, \ - FLAG_DST_WRITEONLY, \ - 8, /* number of pixels, processed in a single block */ \ - 10, /* prefetch distance */ \ - default_init, \ - default_cleanup, \ - pixman_composite_src_8888_8888_process_pixblock_head, \ - pixman_composite_src_8888_8888_process_pixblock_tail, \ - pixman_composite_src_8888_8888_process_pixblock_tail_head, \ - 0, /* dst_w_basereg */ \ - 0, /* dst_r_basereg */ \ - 0, /* src_basereg */ \ - 0 /* mask_basereg */ - -/******************************************************************************/ diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arma64-neon-asm.h b/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arma64-neon-asm.h deleted file mode 100644 index 1103084a3e..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arma64-neon-asm.h +++ /dev/null @@ -1,1223 +0,0 @@ -/* - * Copyright © 2009 Nokia Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com) - */ - -/* - * This file contains a macro ('generate_composite_function') which can - * construct 2D image processing functions, based on a common template. - * Any combinations of source, destination and mask images with 8bpp, - * 16bpp, 24bpp, 32bpp color formats are supported. - * - * This macro takes care of: - * - handling of leading and trailing unaligned pixels - * - doing most of the work related to L2 cache preload - * - encourages the use of software pipelining for better instructions - * scheduling - * - * The user of this macro has to provide some configuration parameters - * (bit depths for the images, prefetch distance, etc.) and a set of - * macros, which should implement basic code chunks responsible for - * pixels processing. See 'pixman-armv8-neon-asm.S' file for the usage - * examples. - * - * TODO: - * - try overlapped pixel method (from Ian Rickards) when processing - * exactly two blocks of pixels - * - maybe add an option to do reverse scanline processing - */ - -/* - * Bit flags for 'generate_composite_function' macro which are used - * to tune generated functions behavior. - */ -.set FLAG_DST_WRITEONLY, 0 -.set FLAG_DST_READWRITE, 1 -.set FLAG_DEINTERLEAVE_32BPP, 2 - -/* - * Constants for selecting preferable prefetch type. - */ -.set PREFETCH_TYPE_NONE, 0 /* No prefetch at all */ -.set PREFETCH_TYPE_SIMPLE, 1 /* A simple, fixed-distance-ahead prefetch */ -.set PREFETCH_TYPE_ADVANCED, 2 /* Advanced fine-grained prefetch */ - -/* - * prefetch mode - * available modes are: - * pldl1keep - * pldl1strm - * pldl2keep - * pldl2strm - * pldl3keep - * pldl3strm - */ -#define PREFETCH_MODE pldl1keep - -/* - * Definitions of supplementary pixld/pixst macros (for partial load/store of - * pixel data). - */ - -.macro pixldst1 op, elem_size, reg1, mem_operand, abits - op {v®1&.&elem_size}, [&mem_operand&], #8 -.endm - -.macro pixldst2 op, elem_size, reg1, reg2, mem_operand, abits - op {v®1&.&elem_size, v®2&.&elem_size}, [&mem_operand&], #16 -.endm - -.macro pixldst4 op, elem_size, reg1, reg2, reg3, reg4, mem_operand, abits - op {v®1&.&elem_size, v®2&.&elem_size, v®3&.&elem_size, v®4&.&elem_size}, [&mem_operand&], #32 -.endm - -.macro pixldst0 op, elem_size, reg1, idx, mem_operand, abits, bytes - op {v®1&.&elem_size}[idx], [&mem_operand&], #&bytes& -.endm - -.macro pixldst3 op, elem_size, reg1, reg2, reg3, mem_operand - op {v®1&.&elem_size, v®2&.&elem_size, v®3&.&elem_size}, [&mem_operand&], #24 -.endm - -.macro pixldst30 op, elem_size, reg1, reg2, reg3, idx, mem_operand - op {v®1&.&elem_size, v®2&.&elem_size, v®3&.&elem_size}[idx], [&mem_operand&], #3 -.endm - -.macro pixldst numbytes, op, elem_size, basereg, mem_operand, abits -.if numbytes == 32 - .if elem_size==32 - pixldst4 op, 2s, %(basereg+4), %(basereg+5), \ - %(basereg+6), %(basereg+7), mem_operand, abits - .elseif elem_size==16 - pixldst4 op, 4h, %(basereg+4), %(basereg+5), \ - %(basereg+6), %(basereg+7), mem_operand, abits - .else - pixldst4 op, 8b, %(basereg+4), %(basereg+5), \ - %(basereg+6), %(basereg+7), mem_operand, abits - .endif -.elseif numbytes == 16 - .if elem_size==32 - pixldst2 op, 2s, %(basereg+2), %(basereg+3), mem_operand, abits - .elseif elem_size==16 - pixldst2 op, 4h, %(basereg+2), %(basereg+3), mem_operand, abits - .else - pixldst2 op, 8b, %(basereg+2), %(basereg+3), mem_operand, abits - .endif -.elseif numbytes == 8 - .if elem_size==32 - pixldst1 op, 2s, %(basereg+1), mem_operand, abits - .elseif elem_size==16 - pixldst1 op, 4h, %(basereg+1), mem_operand, abits - .else - pixldst1 op, 8b, %(basereg+1), mem_operand, abits - .endif -.elseif numbytes == 4 - .if !RESPECT_STRICT_ALIGNMENT || (elem_size == 32) - pixldst0 op, s, %(basereg+0), 1, mem_operand, abits, 4 - .elseif elem_size == 16 - pixldst0 op, h, %(basereg+0), 2, mem_operand, abits, 2 - pixldst0 op, h, %(basereg+0), 3, mem_operand, abits, 2 - .else - pixldst0 op, b, %(basereg+0), 4, mem_operand, abits, 1 - pixldst0 op, b, %(basereg+0), 5, mem_operand, abits, 1 - pixldst0 op, b, %(basereg+0), 6, mem_operand, abits, 1 - pixldst0 op, b, %(basereg+0), 7, mem_operand, abits, 1 - .endif -.elseif numbytes == 2 - .if !RESPECT_STRICT_ALIGNMENT || (elem_size == 16) - pixldst0 op, h, %(basereg+0), 1, mem_operand, abits, 2 - .else - pixldst0 op, b, %(basereg+0), 2, mem_operand, abits, 1 - pixldst0 op, b, %(basereg+0), 3, mem_operand, abits, 1 - .endif -.elseif numbytes == 1 - pixldst0 op, b, %(basereg+0), 1, mem_operand, abits, 1 -.else - .error "unsupported size: numbytes" -.endif -.endm - -.macro pixld numpix, bpp, basereg, mem_operand, abits=0 -.if bpp > 0 -.if (bpp == 32) && (numpix == 8) && (DEINTERLEAVE_32BPP_ENABLED != 0) - pixldst4 ld4, 8b, %(basereg+4), %(basereg+5), \ - %(basereg+6), %(basereg+7), mem_operand, abits -.elseif (bpp == 24) && (numpix == 8) - pixldst3 ld3, 8b, %(basereg+3), %(basereg+4), %(basereg+5), mem_operand -.elseif (bpp == 24) && (numpix == 4) - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 4, mem_operand - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 5, mem_operand - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 6, mem_operand - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 7, mem_operand -.elseif (bpp == 24) && (numpix == 2) - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 2, mem_operand - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 3, mem_operand -.elseif (bpp == 24) && (numpix == 1) - pixldst30 ld3, b, %(basereg+0), %(basereg+1), %(basereg+2), 1, mem_operand -.else - pixldst %(numpix * bpp / 8), ld1, %(bpp), basereg, mem_operand, abits -.endif -.endif -.endm - -.macro pixst numpix, bpp, basereg, mem_operand, abits=0 -.if bpp > 0 -.if (bpp == 32) && (numpix == 8) && (DEINTERLEAVE_32BPP_ENABLED != 0) - pixldst4 st4, 8b, %(basereg+4), %(basereg+5), \ - %(basereg+6), %(basereg+7), mem_operand, abits -.elseif (bpp == 24) && (numpix == 8) - pixldst3 st3, 8b, %(basereg+3), %(basereg+4), %(basereg+5), mem_operand -.elseif (bpp == 24) && (numpix == 4) - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 4, mem_operand - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 5, mem_operand - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 6, mem_operand - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 7, mem_operand -.elseif (bpp == 24) && (numpix == 2) - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 2, mem_operand - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 3, mem_operand -.elseif (bpp == 24) && (numpix == 1) - pixldst30 st3, b, %(basereg+0), %(basereg+1), %(basereg+2), 1, mem_operand -.else - pixldst %(numpix * bpp / 8), st1, %(bpp), basereg, mem_operand, abits -.endif -.endif -.endm - -.macro pixld_a numpix, bpp, basereg, mem_operand -.if (bpp * numpix) <= 128 - pixld numpix, bpp, basereg, mem_operand, %(bpp * numpix) -.else - pixld numpix, bpp, basereg, mem_operand, 128 -.endif -.endm - -.macro pixst_a numpix, bpp, basereg, mem_operand -.if (bpp * numpix) <= 128 - pixst numpix, bpp, basereg, mem_operand, %(bpp * numpix) -.else - pixst numpix, bpp, basereg, mem_operand, 128 -.endif -.endm - -/* - * Pixel fetcher for nearest scaling (needs TMP1, TMP2, VX, UNIT_X register - * aliases to be defined) - */ -.macro pixld1_s elem_size, reg1, mem_operand -.if elem_size == 16 - asr TMP1, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP1, mem_operand, TMP1, lsl #1 - asr TMP2, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP2, mem_operand, TMP2, lsl #1 - ld1 {v®1&.h}[0], [TMP1] - asr TMP1, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP1, mem_operand, TMP1, lsl #1 - ld1 {v®1&.h}[1], [TMP2] - asr TMP2, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP2, mem_operand, TMP2, lsl #1 - ld1 {v®1&.h}[2], [TMP1] - ld1 {v®1&.h}[3], [TMP2] -.elseif elem_size == 32 - asr TMP1, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP1, mem_operand, TMP1, lsl #2 - asr TMP2, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP2, mem_operand, TMP2, lsl #2 - ld1 {v®1&.s}[0], [TMP1] - ld1 {v®1&.s}[1], [TMP2] -.else - .error "unsupported" -.endif -.endm - -.macro pixld2_s elem_size, reg1, reg2, mem_operand -.if 0 /* elem_size == 32 */ - mov TMP1, VX, asr #16 - add VX, VX, UNIT_X, asl #1 - add TMP1, mem_operand, TMP1, asl #2 - mov TMP2, VX, asr #16 - sub VX, VX, UNIT_X - add TMP2, mem_operand, TMP2, asl #2 - ld1 {v®1&.s}[0], [TMP1] - mov TMP1, VX, asr #16 - add VX, VX, UNIT_X, asl #1 - add TMP1, mem_operand, TMP1, asl #2 - ld1 {v®2&.s}[0], [TMP2, :32] - mov TMP2, VX, asr #16 - add VX, VX, UNIT_X - add TMP2, mem_operand, TMP2, asl #2 - ld1 {v®1&.s}[1], [TMP1] - ld1 {v®2&.s}[1], [TMP2] -.else - pixld1_s elem_size, reg1, mem_operand - pixld1_s elem_size, reg2, mem_operand -.endif -.endm - -.macro pixld0_s elem_size, reg1, idx, mem_operand -.if elem_size == 16 - asr TMP1, VX, #16 - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP1, mem_operand, TMP1, lsl #1 - ld1 {v®1&.h}[idx], [TMP1] -.elseif elem_size == 32 - asr DUMMY, VX, #16 - mov TMP1, DUMMY - adds VX, VX, UNIT_X - bmi 55f -5: subs VX, VX, SRC_WIDTH_FIXED - bpl 5b -55: - add TMP1, mem_operand, TMP1, lsl #2 - ld1 {v®1&.s}[idx], [TMP1] -.endif -.endm - -.macro pixld_s_internal numbytes, elem_size, basereg, mem_operand -.if numbytes == 32 - pixld2_s elem_size, %(basereg+4), %(basereg+5), mem_operand - pixld2_s elem_size, %(basereg+6), %(basereg+7), mem_operand - pixdeinterleave elem_size, %(basereg+4) -.elseif numbytes == 16 - pixld2_s elem_size, %(basereg+2), %(basereg+3), mem_operand -.elseif numbytes == 8 - pixld1_s elem_size, %(basereg+1), mem_operand -.elseif numbytes == 4 - .if elem_size == 32 - pixld0_s elem_size, %(basereg+0), 1, mem_operand - .elseif elem_size == 16 - pixld0_s elem_size, %(basereg+0), 2, mem_operand - pixld0_s elem_size, %(basereg+0), 3, mem_operand - .else - pixld0_s elem_size, %(basereg+0), 4, mem_operand - pixld0_s elem_size, %(basereg+0), 5, mem_operand - pixld0_s elem_size, %(basereg+0), 6, mem_operand - pixld0_s elem_size, %(basereg+0), 7, mem_operand - .endif -.elseif numbytes == 2 - .if elem_size == 16 - pixld0_s elem_size, %(basereg+0), 1, mem_operand - .else - pixld0_s elem_size, %(basereg+0), 2, mem_operand - pixld0_s elem_size, %(basereg+0), 3, mem_operand - .endif -.elseif numbytes == 1 - pixld0_s elem_size, %(basereg+0), 1, mem_operand -.else - .error "unsupported size: numbytes" -.endif -.endm - -.macro pixld_s numpix, bpp, basereg, mem_operand -.if bpp > 0 - pixld_s_internal %(numpix * bpp / 8), %(bpp), basereg, mem_operand -.endif -.endm - -.macro vuzp8 reg1, reg2 - umov DUMMY, v16.d[0] - uzp1 v16.8b, v®1&.8b, v®2&.8b - uzp2 v®2&.8b, v®1&.8b, v®2&.8b - mov v®1&.8b, v16.8b - mov v16.d[0], DUMMY -.endm - -.macro vzip8 reg1, reg2 - umov DUMMY, v16.d[0] - zip1 v16.8b, v®1&.8b, v®2&.8b - zip2 v®2&.8b, v®1&.8b, v®2&.8b - mov v®1&.8b, v16.8b - mov v16.d[0], DUMMY -.endm - -/* deinterleave B, G, R, A channels for eight 32bpp pixels in 4 registers */ -.macro pixdeinterleave bpp, basereg -.if (bpp == 32) && (DEINTERLEAVE_32BPP_ENABLED != 0) - vuzp8 %(basereg+0), %(basereg+1) - vuzp8 %(basereg+2), %(basereg+3) - vuzp8 %(basereg+1), %(basereg+3) - vuzp8 %(basereg+0), %(basereg+2) -.endif -.endm - -/* interleave B, G, R, A channels for eight 32bpp pixels in 4 registers */ -.macro pixinterleave bpp, basereg -.if (bpp == 32) && (DEINTERLEAVE_32BPP_ENABLED != 0) - vzip8 %(basereg+0), %(basereg+2) - vzip8 %(basereg+1), %(basereg+3) - vzip8 %(basereg+2), %(basereg+3) - vzip8 %(basereg+0), %(basereg+1) -.endif -.endm - -/* - * This is a macro for implementing cache preload. The main idea is that - * cache preload logic is mostly independent from the rest of pixels - * processing code. It starts at the top left pixel and moves forward - * across pixels and can jump across scanlines. Prefetch distance is - * handled in an 'incremental' way: it starts from 0 and advances to the - * optimal distance over time. After reaching optimal prefetch distance, - * it is kept constant. There are some checks which prevent prefetching - * unneeded pixel lines below the image (but it still can prefetch a bit - * more data on the right side of the image - not a big issue and may - * be actually helpful when rendering text glyphs). Additional trick is - * the use of LDR instruction for prefetch instead of PLD when moving to - * the next line, the point is that we have a high chance of getting TLB - * miss in this case, and PLD would be useless. - * - * This sounds like it may introduce a noticeable overhead (when working with - * fully cached data). But in reality, due to having a separate pipeline and - * instruction queue for NEON unit in ARM Cortex-A8, normal ARM code can - * execute simultaneously with NEON and be completely shadowed by it. Thus - * we get no performance overhead at all (*). This looks like a very nice - * feature of Cortex-A8, if used wisely. We don't have a hardware prefetcher, - * but still can implement some rather advanced prefetch logic in software - * for almost zero cost! - * - * (*) The overhead of the prefetcher is visible when running some trivial - * pixels processing like simple copy. Anyway, having prefetch is a must - * when working with the graphics data. - */ -.macro PF a, x:vararg -.if (PREFETCH_TYPE_CURRENT == PREFETCH_TYPE_ADVANCED) - a x -.endif -.endm - -.macro cache_preload std_increment, boost_increment -.if (src_bpp_shift >= 0) || (dst_r_bpp != 0) || (mask_bpp_shift >= 0) -.if std_increment != 0 - PF add PF_X, PF_X, #std_increment -.endif - PF tst PF_CTL, #0xF - PF beq 71f - PF add PF_X, PF_X, #boost_increment - PF sub PF_CTL, PF_CTL, #1 -71: - PF cmp PF_X, ORIG_W -.if src_bpp_shift >= 0 - PF lsl DUMMY, PF_X, #src_bpp_shift - PF prfm PREFETCH_MODE, [PF_SRC, DUMMY] -.endif -.if dst_r_bpp != 0 - PF lsl DUMMY, PF_X, #dst_bpp_shift - PF prfm PREFETCH_MODE, [PF_DST, DUMMY] -.endif -.if mask_bpp_shift >= 0 - PF lsl DUMMY, PF_X, #mask_bpp_shift - PF prfm PREFETCH_MODE, [PF_MASK, DUMMY] -.endif - PF ble 71f - PF sub PF_X, PF_X, ORIG_W - PF subs PF_CTL, PF_CTL, #0x10 -71: - PF ble 72f -.if src_bpp_shift >= 0 - PF lsl DUMMY, SRC_STRIDE, #src_bpp_shift - PF ldrsb DUMMY, [PF_SRC, DUMMY] - PF add PF_SRC, PF_SRC, #1 -.endif -.if dst_r_bpp != 0 - PF lsl DUMMY, DST_STRIDE, #dst_bpp_shift - PF ldrsb DUMMY, [PF_DST, DUMMY] - PF add PF_DST, PF_DST, #1 -.endif -.if mask_bpp_shift >= 0 - PF lsl DUMMY, MASK_STRIDE, #mask_bpp_shift - PF ldrsb DUMMY, [PF_MASK, DUMMY] - PF add PF_MASK, PF_MASK, #1 -.endif -72: -.endif -.endm - -.macro cache_preload_simple -.if (PREFETCH_TYPE_CURRENT == PREFETCH_TYPE_SIMPLE) -.if src_bpp > 0 - prfm PREFETCH_MODE, [SRC, #(PREFETCH_DISTANCE_SIMPLE * src_bpp / 8)] -.endif -.if dst_r_bpp > 0 - prfm PREFETCH_MODE, [DST_R, #(PREFETCH_DISTANCE_SIMPLE * dst_r_bpp / 8)] -.endif -.if mask_bpp > 0 - prfm PREFETCH_MODE, [MASK, #(PREFETCH_DISTANCE_SIMPLE * mask_bpp / 8)] -.endif -.endif -.endm - -.macro fetch_mask_pixblock - pixld pixblock_size, mask_bpp, \ - (mask_basereg - pixblock_size * mask_bpp / 64), MASK -.endm - -/* - * Macro which is used to process leading pixels until destination - * pointer is properly aligned (at 16 bytes boundary). When destination - * buffer uses 16bpp format, this is unnecessary, or even pointless. - */ -.macro ensure_destination_ptr_alignment process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head -.if dst_w_bpp != 24 - tst DST_R, #0xF - beq 52f -.irp lowbit, 1, 2, 4, 8, 16 -local skip1 -.if (dst_w_bpp <= (lowbit * 8)) && ((lowbit * 8) < (pixblock_size * dst_w_bpp)) -.if lowbit < 16 /* we don't need more than 16-byte alignment */ - tst DST_R, #lowbit - beq 51f -.endif - pixld_src (lowbit * 8 / dst_w_bpp), src_bpp, src_basereg, SRC - pixld (lowbit * 8 / dst_w_bpp), mask_bpp, mask_basereg, MASK -.if dst_r_bpp > 0 - pixld_a (lowbit * 8 / dst_r_bpp), dst_r_bpp, dst_r_basereg, DST_R -.else - add DST_R, DST_R, #lowbit -.endif - PF add PF_X, PF_X, #(lowbit * 8 / dst_w_bpp) - sub W, W, #(lowbit * 8 / dst_w_bpp) -51: -.endif -.endr - pixdeinterleave src_bpp, src_basereg - pixdeinterleave mask_bpp, mask_basereg - pixdeinterleave dst_r_bpp, dst_r_basereg - - process_pixblock_head - cache_preload 0, pixblock_size - cache_preload_simple - process_pixblock_tail - - pixinterleave dst_w_bpp, dst_w_basereg - -.irp lowbit, 1, 2, 4, 8, 16 -.if (dst_w_bpp <= (lowbit * 8)) && ((lowbit * 8) < (pixblock_size * dst_w_bpp)) -.if lowbit < 16 /* we don't need more than 16-byte alignment */ - tst DST_W, #lowbit - beq 51f -.endif - pixst_a (lowbit * 8 / dst_w_bpp), dst_w_bpp, dst_w_basereg, DST_W -51: -.endif -.endr -.endif -52: -.endm - -/* - * Special code for processing up to (pixblock_size - 1) remaining - * trailing pixels. As SIMD processing performs operation on - * pixblock_size pixels, anything smaller than this has to be loaded - * and stored in a special way. Loading and storing of pixel data is - * performed in such a way that we fill some 'slots' in the NEON - * registers (some slots naturally are unused), then perform compositing - * operation as usual. In the end, the data is taken from these 'slots' - * and saved to memory. - * - * cache_preload_flag - allows to suppress prefetch if - * set to 0 - * dst_aligned_flag - selects whether destination buffer - * is aligned - */ -.macro process_trailing_pixels cache_preload_flag, \ - dst_aligned_flag, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - tst W, #(pixblock_size - 1) - beq 52f -.irp chunk_size, 16, 8, 4, 2, 1 -.if pixblock_size > chunk_size - tst W, #chunk_size - beq 51f - pixld_src chunk_size, src_bpp, src_basereg, SRC - pixld chunk_size, mask_bpp, mask_basereg, MASK -.if dst_aligned_flag != 0 - pixld_a chunk_size, dst_r_bpp, dst_r_basereg, DST_R -.else - pixld chunk_size, dst_r_bpp, dst_r_basereg, DST_R -.endif -.if cache_preload_flag != 0 - PF add PF_X, PF_X, #chunk_size -.endif -51: -.endif -.endr - pixdeinterleave src_bpp, src_basereg - pixdeinterleave mask_bpp, mask_basereg - pixdeinterleave dst_r_bpp, dst_r_basereg - - process_pixblock_head -.if cache_preload_flag != 0 - cache_preload 0, pixblock_size - cache_preload_simple -.endif - process_pixblock_tail - pixinterleave dst_w_bpp, dst_w_basereg -.irp chunk_size, 16, 8, 4, 2, 1 -.if pixblock_size > chunk_size - tst W, #chunk_size - beq 51f -.if dst_aligned_flag != 0 - pixst_a chunk_size, dst_w_bpp, dst_w_basereg, DST_W -.else - pixst chunk_size, dst_w_bpp, dst_w_basereg, DST_W -.endif -51: -.endif -.endr -52: -.endm - -/* - * Macro, which performs all the needed operations to switch to the next - * scanline and start the next loop iteration unless all the scanlines - * are already processed. - */ -.macro advance_to_next_scanline start_of_loop_label - mov W, ORIG_W - add DST_W, DST_W, DST_STRIDE, lsl #dst_bpp_shift -.if src_bpp != 0 - add SRC, SRC, SRC_STRIDE, lsl #src_bpp_shift -.endif -.if mask_bpp != 0 - add MASK, MASK, MASK_STRIDE, lsl #mask_bpp_shift -.endif -.if (dst_w_bpp != 24) - sub DST_W, DST_W, W, lsl #dst_bpp_shift -.endif -.if (src_bpp != 24) && (src_bpp != 0) - sub SRC, SRC, W, lsl #src_bpp_shift -.endif -.if (mask_bpp != 24) && (mask_bpp != 0) - sub MASK, MASK, W, lsl #mask_bpp_shift -.endif - subs H, H, #1 - mov DST_R, DST_W - bge start_of_loop_label -.endm - -/* - * Registers are allocated in the following way by default: - * v0, v1, v2, v3 - reserved for loading source pixel data - * v4, v5, v6, v7 - reserved for loading destination pixel data - * v24, v25, v26, v27 - reserved for loading mask pixel data - * v28, v29, v30, v31 - final destination pixel data for writeback to memory - */ -.macro generate_composite_function fname, \ - src_bpp_, \ - mask_bpp_, \ - dst_w_bpp_, \ - flags, \ - pixblock_size_, \ - prefetch_distance, \ - init, \ - cleanup, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head, \ - dst_w_basereg_ = 28, \ - dst_r_basereg_ = 4, \ - src_basereg_ = 0, \ - mask_basereg_ = 24 - - pixman_asm_function fname - stp x29, x30, [sp, -16]! - mov x29, sp - sub sp, sp, 232 /* push all registers */ - sub x29, x29, 64 - st1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], #32 - st1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], #32 - stp x8, x9, [x29, -80] - stp x10, x11, [x29, -96] - stp x12, x13, [x29, -112] - stp x14, x15, [x29, -128] - stp x16, x17, [x29, -144] - stp x18, x19, [x29, -160] - stp x20, x21, [x29, -176] - stp x22, x23, [x29, -192] - stp x24, x25, [x29, -208] - stp x26, x27, [x29, -224] - str x28, [x29, -232] - -/* - * Select prefetch type for this function. If prefetch distance is - * set to 0 or one of the color formats is 24bpp, SIMPLE prefetch - * has to be used instead of ADVANCED. - */ - .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_DEFAULT -.if prefetch_distance == 0 - .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE -.elseif (PREFETCH_TYPE_CURRENT > PREFETCH_TYPE_SIMPLE) && \ - ((src_bpp_ == 24) || (mask_bpp_ == 24) || (dst_w_bpp_ == 24)) - .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_SIMPLE -.endif - -/* - * Make some macro arguments globally visible and accessible - * from other macros - */ - .set src_bpp, src_bpp_ - .set mask_bpp, mask_bpp_ - .set dst_w_bpp, dst_w_bpp_ - .set pixblock_size, pixblock_size_ - .set dst_w_basereg, dst_w_basereg_ - .set dst_r_basereg, dst_r_basereg_ - .set src_basereg, src_basereg_ - .set mask_basereg, mask_basereg_ - - .macro pixld_src x:vararg - pixld x - .endm - .macro fetch_src_pixblock - pixld_src pixblock_size, src_bpp, \ - (src_basereg - pixblock_size * src_bpp / 64), SRC - .endm -/* - * Assign symbolic names to registers - */ - W .req x0 /* width (is updated during processing) */ - H .req x1 /* height (is updated during processing) */ - DST_W .req x2 /* destination buffer pointer for writes */ - DST_STRIDE .req x3 /* destination image stride */ - SRC .req x4 /* source buffer pointer */ - SRC_STRIDE .req x5 /* source image stride */ - MASK .req x6 /* mask pointer */ - MASK_STRIDE .req x7 /* mask stride */ - - DST_R .req x8 /* destination buffer pointer for reads */ - - PF_CTL .req x9 /* combined lines counter and prefetch */ - /* distance increment counter */ - PF_X .req x10 /* pixel index in a scanline for current */ - /* pretetch position */ - PF_SRC .req x11 /* pointer to source scanline start */ - /* for prefetch purposes */ - PF_DST .req x12 /* pointer to destination scanline start */ - /* for prefetch purposes */ - PF_MASK .req x13 /* pointer to mask scanline start */ - /* for prefetch purposes */ - - ORIG_W .req x14 /* saved original width */ - DUMMY .req x15 /* temporary register */ - - sxtw x0, w0 - sxtw x1, w1 - sxtw x3, w3 - sxtw x5, w5 - sxtw x7, w7 - - .set mask_bpp_shift, -1 -.if src_bpp == 32 - .set src_bpp_shift, 2 -.elseif src_bpp == 24 - .set src_bpp_shift, 0 -.elseif src_bpp == 16 - .set src_bpp_shift, 1 -.elseif src_bpp == 8 - .set src_bpp_shift, 0 -.elseif src_bpp == 0 - .set src_bpp_shift, -1 -.else - .error "requested src bpp (src_bpp) is not supported" -.endif -.if mask_bpp == 32 - .set mask_bpp_shift, 2 -.elseif mask_bpp == 24 - .set mask_bpp_shift, 0 -.elseif mask_bpp == 8 - .set mask_bpp_shift, 0 -.elseif mask_bpp == 0 - .set mask_bpp_shift, -1 -.else - .error "requested mask bpp (mask_bpp) is not supported" -.endif -.if dst_w_bpp == 32 - .set dst_bpp_shift, 2 -.elseif dst_w_bpp == 24 - .set dst_bpp_shift, 0 -.elseif dst_w_bpp == 16 - .set dst_bpp_shift, 1 -.elseif dst_w_bpp == 8 - .set dst_bpp_shift, 0 -.else - .error "requested dst bpp (dst_w_bpp) is not supported" -.endif - -.if (((flags) & FLAG_DST_READWRITE) != 0) - .set dst_r_bpp, dst_w_bpp -.else - .set dst_r_bpp, 0 -.endif -.if (((flags) & FLAG_DEINTERLEAVE_32BPP) != 0) - .set DEINTERLEAVE_32BPP_ENABLED, 1 -.else - .set DEINTERLEAVE_32BPP_ENABLED, 0 -.endif - -.if prefetch_distance < 0 || prefetch_distance > 15 - .error "invalid prefetch distance (prefetch_distance)" -.endif - - PF mov PF_X, #0 - mov DST_R, DST_W - -.if src_bpp == 24 - sub SRC_STRIDE, SRC_STRIDE, W - sub SRC_STRIDE, SRC_STRIDE, W, lsl #1 -.endif -.if mask_bpp == 24 - sub MASK_STRIDE, MASK_STRIDE, W - sub MASK_STRIDE, MASK_STRIDE, W, lsl #1 -.endif -.if dst_w_bpp == 24 - sub DST_STRIDE, DST_STRIDE, W - sub DST_STRIDE, DST_STRIDE, W, lsl #1 -.endif - -/* - * Setup advanced prefetcher initial state - */ - PF mov PF_SRC, SRC - PF mov PF_DST, DST_R - PF mov PF_MASK, MASK - /* PF_CTL = prefetch_distance | ((h - 1) << 4) */ - PF lsl DUMMY, H, #4 - PF mov PF_CTL, DUMMY - PF add PF_CTL, PF_CTL, #(prefetch_distance - 0x10) - - init - subs H, H, #1 - mov ORIG_W, W - blt 9f - cmp W, #(pixblock_size * 2) - blt 800f -/* - * This is the start of the pipelined loop, which if optimized for - * long scanlines - */ -0: - ensure_destination_ptr_alignment process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - - /* Implement "head (tail_head) ... (tail_head) tail" loop pattern */ - pixld_a pixblock_size, dst_r_bpp, \ - (dst_r_basereg - pixblock_size * dst_r_bpp / 64), DST_R - fetch_src_pixblock - pixld pixblock_size, mask_bpp, \ - (mask_basereg - pixblock_size * mask_bpp / 64), MASK - PF add PF_X, PF_X, #pixblock_size - process_pixblock_head - cache_preload 0, pixblock_size - cache_preload_simple - subs W, W, #(pixblock_size * 2) - blt 200f - -100: - process_pixblock_tail_head - cache_preload_simple - subs W, W, #pixblock_size - bge 100b - -200: - process_pixblock_tail - pixst_a pixblock_size, dst_w_bpp, \ - (dst_w_basereg - pixblock_size * dst_w_bpp / 64), DST_W - - /* Process the remaining trailing pixels in the scanline */ - process_trailing_pixels 1, 1, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - advance_to_next_scanline 0b - - cleanup -1000: - /* pop all registers */ - sub x29, x29, 64 - ld1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - ld1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - ldp x8, x9, [x29, -80] - ldp x10, x11, [x29, -96] - ldp x12, x13, [x29, -112] - ldp x14, x15, [x29, -128] - ldp x16, x17, [x29, -144] - ldp x18, x19, [x29, -160] - ldp x20, x21, [x29, -176] - ldp x22, x23, [x29, -192] - ldp x24, x25, [x29, -208] - ldp x26, x27, [x29, -224] - ldr x28, [x29, -232] - mov sp, x29 - ldp x29, x30, [sp], 16 - ret /* exit */ -/* - * This is the start of the loop, designed to process images with small width - * (less than pixblock_size * 2 pixels). In this case neither pipelining - * nor prefetch are used. - */ -800: - /* Process exactly pixblock_size pixels if needed */ - tst W, #pixblock_size - beq 100f - pixld pixblock_size, dst_r_bpp, \ - (dst_r_basereg - pixblock_size * dst_r_bpp / 64), DST_R - fetch_src_pixblock - pixld pixblock_size, mask_bpp, \ - (mask_basereg - pixblock_size * mask_bpp / 64), MASK - process_pixblock_head - process_pixblock_tail - pixst pixblock_size, dst_w_bpp, \ - (dst_w_basereg - pixblock_size * dst_w_bpp / 64), DST_W -100: - /* Process the remaining trailing pixels in the scanline */ - process_trailing_pixels 0, 0, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - advance_to_next_scanline 800b -9: - cleanup - /* pop all registers */ - sub x29, x29, 64 - ld1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - ld1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - ldp x8, x9, [x29, -80] - ldp x10, x11, [x29, -96] - ldp x12, x13, [x29, -112] - ldp x14, x15, [x29, -128] - ldp x16, x17, [x29, -144] - ldp x18, x19, [x29, -160] - ldp x20, x21, [x29, -176] - ldp x22, x23, [x29, -192] - ldp x24, x25, [x29, -208] - ldp x26, x27, [x29, -224] - ldr x28, [x29, -232] - mov sp, x29 - ldp x29, x30, [sp], 16 - ret /* exit */ - - .purgem fetch_src_pixblock - .purgem pixld_src - - .unreq SRC - .unreq MASK - .unreq DST_R - .unreq DST_W - .unreq ORIG_W - .unreq W - .unreq H - .unreq SRC_STRIDE - .unreq DST_STRIDE - .unreq MASK_STRIDE - .unreq PF_CTL - .unreq PF_X - .unreq PF_SRC - .unreq PF_DST - .unreq PF_MASK - .unreq DUMMY - .endfunc -.endm - -/* - * A simplified variant of function generation template for a single - * scanline processing (for implementing pixman combine functions) - */ -.macro generate_composite_function_scanline use_nearest_scaling, \ - fname, \ - src_bpp_, \ - mask_bpp_, \ - dst_w_bpp_, \ - flags, \ - pixblock_size_, \ - init, \ - cleanup, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head, \ - dst_w_basereg_ = 28, \ - dst_r_basereg_ = 4, \ - src_basereg_ = 0, \ - mask_basereg_ = 24 - - pixman_asm_function fname - .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE - -/* - * Make some macro arguments globally visible and accessible - * from other macros - */ - .set src_bpp, src_bpp_ - .set mask_bpp, mask_bpp_ - .set dst_w_bpp, dst_w_bpp_ - .set pixblock_size, pixblock_size_ - .set dst_w_basereg, dst_w_basereg_ - .set dst_r_basereg, dst_r_basereg_ - .set src_basereg, src_basereg_ - .set mask_basereg, mask_basereg_ - -.if use_nearest_scaling != 0 - /* - * Assign symbolic names to registers for nearest scaling - */ - W .req x0 - DST_W .req x1 - SRC .req x2 - VX .req x3 - UNIT_X .req x4 - SRC_WIDTH_FIXED .req x5 - MASK .req x6 - TMP1 .req x8 - TMP2 .req x9 - DST_R .req x10 - DUMMY .req x30 - - .macro pixld_src x:vararg - pixld_s x - .endm - - sxtw x0, w0 - sxtw x3, w3 - sxtw x4, w4 - sxtw x5, w5 - - stp x29, x30, [sp, -16]! - mov x29, sp - sub sp, sp, 88 - sub x29, x29, 64 - st1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - st1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - stp x8, x9, [x29, -80] - str x10, [x29, -88] -.else - /* - * Assign symbolic names to registers - */ - W .req x0 /* width (is updated during processing) */ - DST_W .req x1 /* destination buffer pointer for writes */ - SRC .req x2 /* source buffer pointer */ - MASK .req x3 /* mask pointer */ - DST_R .req x4 /* destination buffer pointer for reads */ - DUMMY .req x30 - - .macro pixld_src x:vararg - pixld x - .endm - - sxtw x0, w0 - - stp x29, x30, [sp, -16]! - mov x29, sp - sub sp, sp, 64 - sub x29, x29, 64 - st1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - st1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 -.endif - -.if (((flags) & FLAG_DST_READWRITE) != 0) - .set dst_r_bpp, dst_w_bpp -.else - .set dst_r_bpp, 0 -.endif -.if (((flags) & FLAG_DEINTERLEAVE_32BPP) != 0) - .set DEINTERLEAVE_32BPP_ENABLED, 1 -.else - .set DEINTERLEAVE_32BPP_ENABLED, 0 -.endif - - .macro fetch_src_pixblock - pixld_src pixblock_size, src_bpp, \ - (src_basereg - pixblock_size * src_bpp / 64), SRC - .endm - - init - mov DST_R, DST_W - - cmp W, #pixblock_size - blt 800f - - ensure_destination_ptr_alignment process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - - subs W, W, #pixblock_size - blt 700f - - /* Implement "head (tail_head) ... (tail_head) tail" loop pattern */ - pixld_a pixblock_size, dst_r_bpp, \ - (dst_r_basereg - pixblock_size * dst_r_bpp / 64), DST_R - fetch_src_pixblock - pixld pixblock_size, mask_bpp, \ - (mask_basereg - pixblock_size * mask_bpp / 64), MASK - process_pixblock_head - subs W, W, #pixblock_size - blt 200f -100: - process_pixblock_tail_head - subs W, W, #pixblock_size - bge 100b -200: - process_pixblock_tail - pixst_a pixblock_size, dst_w_bpp, \ - (dst_w_basereg - pixblock_size * dst_w_bpp / 64), DST_W -700: - /* Process the remaining trailing pixels in the scanline (dst aligned) */ - process_trailing_pixels 0, 1, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - - cleanup -.if use_nearest_scaling != 0 - sub x29, x29, 64 - ld1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - ld1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - ldp x8, x9, [x29, -80] - ldr x10, [x29, -96] - mov sp, x29 - ldp x29, x30, [sp], 16 - ret /* exit */ -.else - sub x29, x29, 64 - ld1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - ld1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - mov sp, x29 - ldp x29, x30, [sp], 16 - ret /* exit */ -.endif -800: - /* Process the remaining trailing pixels in the scanline (dst unaligned) */ - process_trailing_pixels 0, 0, \ - process_pixblock_head, \ - process_pixblock_tail, \ - process_pixblock_tail_head - - cleanup -.if use_nearest_scaling != 0 - sub x29, x29, 64 - ld1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - ld1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - ldp x8, x9, [x29, -80] - ldr x10, [x29, -88] - mov sp, x29 - ldp x29, x30, [sp], 16 - ret /* exit */ - - .unreq DUMMY - .unreq DST_R - .unreq SRC - .unreq W - .unreq VX - .unreq UNIT_X - .unreq TMP1 - .unreq TMP2 - .unreq DST_W - .unreq MASK - .unreq SRC_WIDTH_FIXED - -.else - sub x29, x29, 64 - ld1 {v8.8b, v9.8b, v10.8b, v11.8b}, [x29], 32 - ld1 {v12.8b, v13.8b, v14.8b, v15.8b}, [x29], 32 - mov sp, x29 - ldp x29, x30, [sp], 16 - ret /* exit */ - - .unreq DUMMY - .unreq SRC - .unreq MASK - .unreq DST_R - .unreq DST_W - .unreq W -.endif - - .purgem fetch_src_pixblock - .purgem pixld_src - - .endfunc -.endm - -.macro generate_composite_function_single_scanline x:vararg - generate_composite_function_scanline 0, x -.endm - -.macro generate_composite_function_nearest_scanline x:vararg - generate_composite_function_scanline 1, x -.endm - -/* Default prologue/epilogue, nothing special needs to be done */ - -.macro default_init -.endm - -.macro default_cleanup -.endm - -/* - * Prologue/epilogue variant which additionally saves/restores v8-v15 - * registers (they need to be saved/restored by callee according to ABI). - * This is required if the code needs to use all the NEON registers. - */ - -.macro default_init_need_all_regs -.endm - -.macro default_cleanup_need_all_regs -.endm - -/******************************************************************************/ diff --git a/submodules/RLottie/Sources/rlottie/src/vector/stb/CMakeLists.txt b/submodules/RLottie/Sources/rlottie/src/vector/stb/CMakeLists.txt deleted file mode 100644 index 9c9a530477..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/stb/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -add_library(rlottie-image-loader SHARED - stb_image.cpp - ) -install(TARGETS rlottie-image-loader - LIBRARY DESTINATION ${LIB_INSTALL_DIR} - ARCHIVE DESTINATION ${LIB_INSTALL_DIR} - ) diff --git a/submodules/RLottie/Sources/rlottie/src/vector/stb/meson.build b/submodules/RLottie/Sources/rlottie/src/vector/stb/meson.build deleted file mode 100644 index 79f19625f5..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/stb/meson.build +++ /dev/null @@ -1,8 +0,0 @@ - -rlottie_image_loader_sources = ['stb_image.cpp'] - -rlottie_image_loader_lib = shared_library('rlottie-image-loader', - rlottie_image_loader_sources, - install : true - ) - diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vimageloader.cpp b/submodules/RLottie/Sources/rlottie/src/vector/vimageloader.cpp deleted file mode 100644 index d8f29f93a6..0000000000 --- a/submodules/RLottie/Sources/rlottie/src/vector/vimageloader.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "vimageloader.h" -#include "config.h" -#include "vdebug.h" -#ifndef WIN32 -#include -#else -#include -#endif -#include - -#include "vimageloader.h" - -struct VImageLoader::Impl { -}; - -VImageLoader::VImageLoader() : mImpl(std::make_unique()) {} - -VImageLoader::~VImageLoader() {} - -VBitmap VImageLoader::load(const char *fileName) -{ - return VBitmap(); -} - -VBitmap VImageLoader::load(const char *data, int len) -{ - return VBitmap(); -} diff --git a/submodules/RLottie/Sources/rlottie/test/meson.build b/submodules/RLottie/Sources/rlottie/test/meson.build deleted file mode 100644 index 312e53e1d0..0000000000 --- a/submodules/RLottie/Sources/rlottie/test/meson.build +++ /dev/null @@ -1,25 +0,0 @@ - -vector_test_sources = files('testsuite.cpp') -vector_test_sources += files('test_vpath.cpp') - -gtest_dep = dependency('gtest') - -vector_testsuite = executable('vectorTestSuite', - vector_test_sources, - include_directories : inc, - dependencies : [gtest_dep, library_deps]) - -test('Vector Testsuite', vector_testsuite) - - -animation_test_sources = files('testsuite.cpp') -animation_test_sources += files('test_lottieanimation.cpp') -animation_test_sources += files('test_lottieanimation_capi.cpp') - -animation_testsuite = executable('animationTestSuite', - animation_test_sources, - include_directories : inc, - link_with : rlottie_lib, - dependencies : gtest_dep) - -test('Animation Testsuite', animation_testsuite) diff --git a/submodules/TelegramCore/TelegramCore/CacheStorageSettings.swift b/submodules/TelegramCore/TelegramCore/CacheStorageSettings.swift index 89dd389413..d0c5e28908 100644 --- a/submodules/TelegramCore/TelegramCore/CacheStorageSettings.swift +++ b/submodules/TelegramCore/TelegramCore/CacheStorageSettings.swift @@ -11,7 +11,7 @@ public struct CacheStorageSettings: PreferencesEntry, Equatable { public let defaultCacheStorageTimeout: Int32 public static var defaultSettings: CacheStorageSettings { - return CacheStorageSettings(defaultCacheStorageTimeout: 1 * 31 * 24 * 60 * 60) + return CacheStorageSettings(defaultCacheStorageTimeout: Int32.max) } init(defaultCacheStorageTimeout: Int32) { @@ -19,7 +19,7 @@ public struct CacheStorageSettings: PreferencesEntry, Equatable { } public init(decoder: PostboxDecoder) { - self.defaultCacheStorageTimeout = decoder.decodeInt32ForKey("dt", orElse: 0) + self.defaultCacheStorageTimeout = decoder.decodeInt32ForKey("dt", orElse: Int32.max) } public func encode(_ encoder: PostboxEncoder) { diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift b/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift index 234787ddbd..0f5cd71c96 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageItem.swift @@ -370,8 +370,14 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible { loop: for media in self.message.media { if let telegramFile = media as? TelegramMediaFile { - if telegramFile.isAnimatedSticker, let size = telegramFile.size, size > 0 && size <= 128 * 1024 { - viewClassName = ChatMessageAnimatedStickerItemNode.self + if telegramFile.isAnimatedSticker, !telegramFile.previewRepresentations.isEmpty, let size = telegramFile.size, size > 0 && size <= 128 * 1024 { + if self.message.id.peerId.namespace == Namespaces.Peer.SecretChat { + if telegramFile.fileId.namespace == Namespaces.Media.CloudFile { + viewClassName = ChatMessageAnimatedStickerItemNode.self + } + } else { + viewClassName = ChatMessageAnimatedStickerItemNode.self + } break loop } for attribute in telegramFile.attributes { diff --git a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj index 909c30af3e..c0c9d96e98 100644 --- a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj @@ -74,7 +74,6 @@ D00818CD22B595CB008A895F /* LightweightAccountData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00818CC22B595CB008A895F /* LightweightAccountData.framework */; }; D00ACA4B20222C280045D427 /* libtgvoip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00ACA4C20222C280045D427 /* libtgvoip.framework */; }; D00ACA5A2022897D0045D427 /* ProcessedPeerRestrictionText.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00ACA592022897D0045D427 /* ProcessedPeerRestrictionText.swift */; }; - D010E17D22C238BC009324D4 /* RLottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D010E17C22C238BC009324D4 /* RLottie.framework */; }; D015E04F225D2E5900CB9E8A /* WebP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D015E04E225D2E5900CB9E8A /* WebP.framework */; }; D017734C22049BF800DA06A7 /* UpgradedAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017734B22049BF800DA06A7 /* UpgradedAccounts.swift */; }; D01776BE1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01776BD1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift */; }; @@ -236,6 +235,7 @@ D09E77A922FA5CEA00B9CCA7 /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77A822FA5CEA00B9CCA7 /* TextFormat.framework */; }; D09E77AB22FA5CEA00B9CCA7 /* Tuples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */; }; D09E77AD22FA5CEA00B9CCA7 /* UrlEscaping.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */; }; + D0AA5793231BE2FD000F88F3 /* RLottieBinding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0AA5792231BE2FD000F88F3 /* RLottieBinding.framework */; }; D0AA840C1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */; }; D0AB262921C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262821C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift */; }; D0ACCB1C1EC5FF4B0079D8BF /* ChatMessageCallBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ACCB1B1EC5FF4B0079D8BF /* ChatMessageCallBubbleContentNode.swift */; }; @@ -895,6 +895,7 @@ D09E77A822FA5CEA00B9CCA7 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Tuples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UrlEscaping.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0AA5792231BE2FD000F88F3 /* RLottieBinding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RLottieBinding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayPlayerControlsNode.swift; sourceTree = ""; }; D0AB0BB01D6718DA002C78E7 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; D0AB0BB21D6718EB002C78E7 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; @@ -1169,6 +1170,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D0AA5793231BE2FD000F88F3 /* RLottieBinding.framework in Frameworks */, 09B4A9BA231519CD005C2E08 /* VideoToolbox.framework in Frameworks */, D072F38423155EAF0009E66F /* MessageReactionListUI.framework in Frameworks */, D03E495D230868DF0049C28B /* PersistentStringHash.framework in Frameworks */, @@ -1302,7 +1304,6 @@ D060184222F35D2000796784 /* ActivityIndicator.framework in Frameworks */, D060184022F35D1C00796784 /* MergeLists.framework in Frameworks */, D0D3281422F31B3000D07EE2 /* TelegramUpdateUI.framework in Frameworks */, - D010E17D22C238BC009324D4 /* RLottie.framework in Frameworks */, D03AE67522B945D30078411C /* BuildConfig.framework in Frameworks */, D03AE67322B9459C0078411C /* HockeySDK.framework in Frameworks */, D02D634A22B85B94006BE519 /* PushKit.framework in Frameworks */, @@ -1774,6 +1775,7 @@ D08D45281D5E340200A7428A /* Frameworks */ = { isa = PBXGroup; children = ( + D0AA5792231BE2FD000F88F3 /* RLottieBinding.framework */, 09B4A9B9231519CD005C2E08 /* VideoToolbox.framework */, D072F38323155EAF0009E66F /* MessageReactionListUI.framework */, D03E495C230868DF0049C28B /* PersistentStringHash.framework */, diff --git a/submodules/RLottie/Info.plist b/submodules/rlottie/Info.plist old mode 100644 new mode 100755 similarity index 100% rename from submodules/RLottie/Info.plist rename to submodules/rlottie/Info.plist diff --git a/submodules/RLottie/Sources/LottieInstance.h b/submodules/rlottie/LottieInstance.h old mode 100644 new mode 100755 similarity index 100% rename from submodules/RLottie/Sources/LottieInstance.h rename to submodules/rlottie/LottieInstance.h diff --git a/submodules/RLottie/Sources/LottieInstance.mm b/submodules/rlottie/LottieInstance.mm old mode 100644 new mode 100755 similarity index 98% rename from submodules/RLottie/Sources/LottieInstance.mm rename to submodules/rlottie/LottieInstance.mm index 83a10557ff..a5750c075a --- a/submodules/RLottie/Sources/LottieInstance.mm +++ b/submodules/rlottie/LottieInstance.mm @@ -1,6 +1,6 @@ #import "LottieInstance.h" -#include +#include "rlottie.h" @interface LottieInstance () { std::unique_ptr _animation; diff --git a/submodules/RLottie/Sources/RLottie.h b/submodules/rlottie/RLottieBinding.h old mode 100644 new mode 100755 similarity index 58% rename from submodules/RLottie/Sources/RLottie.h rename to submodules/rlottie/RLottieBinding.h index 6f9e94b224..e73a9891cd --- a/submodules/RLottie/Sources/RLottie.h +++ b/submodules/rlottie/RLottieBinding.h @@ -9,11 +9,10 @@ #import //! Project version number for RLottie. -FOUNDATION_EXPORT double RLottieVersionNumber; +FOUNDATION_EXPORT double RLottieBindingVersionNumber; //! Project version string for RLottie. -FOUNDATION_EXPORT const unsigned char RLottieVersionString[]; - -#import +FOUNDATION_EXPORT const unsigned char RLottieBindingVersionString[]; +#import diff --git a/submodules/rlottie/RLottieBinding_Xcode.xcodeproj/project.pbxproj b/submodules/rlottie/RLottieBinding_Xcode.xcodeproj/project.pbxproj new file mode 100755 index 0000000000..5662c4f281 --- /dev/null +++ b/submodules/rlottie/RLottieBinding_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,1018 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0AA5676231BE262000F88F3 /* LottieInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5544231BE25E000F88F3 /* LottieInstance.h */; }; + D0AA567F231BE262000F88F3 /* rlottiecommon.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5551231BE25F000F88F3 /* rlottiecommon.h */; }; + D0AA5681231BE262000F88F3 /* rlottie.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5553231BE25F000F88F3 /* rlottie.h */; }; + D0AA5682231BE262000F88F3 /* rlottie_capi.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5554231BE25F000F88F3 /* rlottie_capi.h */; }; + D0AA5718231BE263000F88F3 /* lottiemodel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55F6231BE260000F88F3 /* lottiemodel.cpp */; }; + D0AA5719231BE263000F88F3 /* lottieitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55F7231BE260000F88F3 /* lottieitem.cpp */; }; + D0AA571B231BE263000F88F3 /* lottieanimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55F9231BE260000F88F3 /* lottieanimation.cpp */; }; + D0AA571C231BE263000F88F3 /* lottiekeypath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55FA231BE260000F88F3 /* lottiekeypath.cpp */; }; + D0AA571D231BE263000F88F3 /* lottieparser.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA55FB231BE260000F88F3 /* lottieparser.h */; }; + D0AA571E231BE263000F88F3 /* lottieparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55FC231BE261000F88F3 /* lottieparser.cpp */; }; + D0AA571F231BE263000F88F3 /* lottieloader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55FD231BE261000F88F3 /* lottieloader.cpp */; }; + D0AA5720231BE263000F88F3 /* lottieitem.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA55FE231BE261000F88F3 /* lottieitem.h */; }; + D0AA5721231BE263000F88F3 /* lottiekeypath.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA55FF231BE261000F88F3 /* lottiekeypath.h */; }; + D0AA5723231BE263000F88F3 /* lottieproxymodel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5601231BE261000F88F3 /* lottieproxymodel.cpp */; }; + D0AA5724231BE263000F88F3 /* fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5603231BE261000F88F3 /* fwd.h */; }; + D0AA5725231BE263000F88F3 /* memorystream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5604231BE261000F88F3 /* memorystream.h */; }; + D0AA5726231BE263000F88F3 /* reader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5605231BE261000F88F3 /* reader.h */; }; + D0AA5727231BE263000F88F3 /* prettywriter.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5606231BE261000F88F3 /* prettywriter.h */; }; + D0AA5728231BE263000F88F3 /* ostreamwrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5607231BE261000F88F3 /* ostreamwrapper.h */; }; + D0AA5729231BE263000F88F3 /* encodedstream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5608231BE261000F88F3 /* encodedstream.h */; }; + D0AA572A231BE263000F88F3 /* filereadstream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5609231BE261000F88F3 /* filereadstream.h */; }; + D0AA572B231BE263000F88F3 /* cursorstreamwrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA560A231BE261000F88F3 /* cursorstreamwrapper.h */; }; + D0AA572C231BE263000F88F3 /* istreamwrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA560B231BE261000F88F3 /* istreamwrapper.h */; }; + D0AA572D231BE263000F88F3 /* stringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA560C231BE261000F88F3 /* stringbuffer.h */; }; + D0AA572E231BE263000F88F3 /* ieee754.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA560E231BE261000F88F3 /* ieee754.h */; }; + D0AA572F231BE263000F88F3 /* strtod.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA560F231BE261000F88F3 /* strtod.h */; }; + D0AA5730231BE263000F88F3 /* swap.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5610231BE261000F88F3 /* swap.h */; }; + D0AA5731231BE263000F88F3 /* regex.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5611231BE261000F88F3 /* regex.h */; }; + D0AA5732231BE263000F88F3 /* diyfp.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5612231BE261000F88F3 /* diyfp.h */; }; + D0AA5733231BE263000F88F3 /* biginteger.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5613231BE261000F88F3 /* biginteger.h */; }; + D0AA5734231BE263000F88F3 /* strfunc.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5614231BE261000F88F3 /* strfunc.h */; }; + D0AA5735231BE263000F88F3 /* itoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5615231BE261000F88F3 /* itoa.h */; }; + D0AA5736231BE263000F88F3 /* stack.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5616231BE261000F88F3 /* stack.h */; }; + D0AA5737231BE263000F88F3 /* dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5617231BE261000F88F3 /* dtoa.h */; }; + D0AA5738231BE263000F88F3 /* meta.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5618231BE261000F88F3 /* meta.h */; }; + D0AA5739231BE263000F88F3 /* pow10.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5619231BE261000F88F3 /* pow10.h */; }; + D0AA573A231BE263000F88F3 /* encodings.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA561A231BE261000F88F3 /* encodings.h */; }; + D0AA573B231BE263000F88F3 /* schema.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA561B231BE261000F88F3 /* schema.h */; }; + D0AA573C231BE263000F88F3 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA561C231BE261000F88F3 /* stream.h */; }; + D0AA573D231BE263000F88F3 /* filewritestream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA561D231BE261000F88F3 /* filewritestream.h */; }; + D0AA573E231BE263000F88F3 /* rapidjson.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA561E231BE261000F88F3 /* rapidjson.h */; }; + D0AA573F231BE263000F88F3 /* document.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA561F231BE261000F88F3 /* document.h */; }; + D0AA5740231BE263000F88F3 /* allocators.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5620231BE261000F88F3 /* allocators.h */; }; + D0AA5741231BE263000F88F3 /* writer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5621231BE261000F88F3 /* writer.h */; }; + D0AA5742231BE263000F88F3 /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5623231BE261000F88F3 /* error.h */; }; + D0AA5743231BE263000F88F3 /* en.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5624231BE261000F88F3 /* en.h */; }; + D0AA5744231BE263000F88F3 /* memorybuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5625231BE261000F88F3 /* memorybuffer.h */; }; + D0AA5745231BE263000F88F3 /* pointer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5626231BE261000F88F3 /* pointer.h */; }; + D0AA5748231BE263000F88F3 /* lottieproxymodel.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA562A231BE261000F88F3 /* lottieproxymodel.h */; }; + D0AA5749231BE263000F88F3 /* lottiemodel.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA562B231BE261000F88F3 /* lottiemodel.h */; }; + D0AA574A231BE263000F88F3 /* lottieloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA562C231BE261000F88F3 /* lottieloader.h */; }; + D0AA574B231BE263000F88F3 /* vdasher.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA562E231BE261000F88F3 /* vdasher.h */; }; + D0AA574C231BE263000F88F3 /* vrle.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA562F231BE261000F88F3 /* vrle.h */; }; + D0AA574D231BE263000F88F3 /* velapsedtimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5630231BE261000F88F3 /* velapsedtimer.cpp */; }; + D0AA574F231BE263000F88F3 /* velapsedtimer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5632231BE261000F88F3 /* velapsedtimer.h */; }; + D0AA5751231BE263000F88F3 /* vrect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5634231BE261000F88F3 /* vrect.cpp */; }; + D0AA5752231BE263000F88F3 /* vdasher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5635231BE261000F88F3 /* vdasher.cpp */; }; + D0AA5753231BE263000F88F3 /* vbezier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5636231BE261000F88F3 /* vbezier.cpp */; }; + D0AA5756231BE263000F88F3 /* vregion.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA563A231BE261000F88F3 /* vregion.h */; }; + D0AA5759231BE263000F88F3 /* vregion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA563D231BE261000F88F3 /* vregion.cpp */; }; + D0AA575A231BE263000F88F3 /* vpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA563E231BE261000F88F3 /* vpath.cpp */; }; + D0AA575B231BE263000F88F3 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA563F231BE261000F88F3 /* config.h */; }; + D0AA575D231BE263000F88F3 /* v_ft_types.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5642231BE261000F88F3 /* v_ft_types.h */; }; + D0AA575E231BE263000F88F3 /* v_ft_raster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5643231BE261000F88F3 /* v_ft_raster.cpp */; }; + D0AA5760231BE263000F88F3 /* v_ft_stroker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5645231BE261000F88F3 /* v_ft_stroker.cpp */; }; + D0AA5761231BE263000F88F3 /* v_ft_math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5646231BE261000F88F3 /* v_ft_math.cpp */; }; + D0AA5762231BE263000F88F3 /* v_ft_stroker.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5647231BE261000F88F3 /* v_ft_stroker.h */; }; + D0AA5763231BE263000F88F3 /* v_ft_math.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5648231BE261000F88F3 /* v_ft_math.h */; }; + D0AA5764231BE263000F88F3 /* v_ft_raster.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5649231BE261000F88F3 /* v_ft_raster.h */; }; + D0AA5765231BE263000F88F3 /* vcompositionfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA564A231BE261000F88F3 /* vcompositionfunctions.cpp */; }; + D0AA5766231BE263000F88F3 /* vdrawhelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA564B231BE261000F88F3 /* vdrawhelper.h */; }; + D0AA5767231BE263000F88F3 /* vbitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA564C231BE261000F88F3 /* vbitmap.cpp */; }; + D0AA5768231BE263000F88F3 /* vdrawable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA564D231BE261000F88F3 /* vdrawable.h */; }; + D0AA5769231BE263000F88F3 /* vbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA564E231BE261000F88F3 /* vbitmap.h */; }; + D0AA576A231BE263000F88F3 /* vpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA564F231BE261000F88F3 /* vpoint.h */; }; + D0AA576B231BE263000F88F3 /* vpathmesure.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5650231BE261000F88F3 /* vpathmesure.h */; }; + D0AA576C231BE263000F88F3 /* vdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5651231BE261000F88F3 /* vdebug.h */; }; + D0AA576D231BE263000F88F3 /* vpath.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5652231BE261000F88F3 /* vpath.h */; }; + D0AA5770231BE263000F88F3 /* stb_image.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5656231BE261000F88F3 /* stb_image.h */; }; + D0AA5771231BE263000F88F3 /* stb_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5657231BE261000F88F3 /* stb_image.cpp */; }; + D0AA5773231BE263000F88F3 /* vtaskqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5659231BE261000F88F3 /* vtaskqueue.h */; }; + D0AA5774231BE263000F88F3 /* vline.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA565A231BE261000F88F3 /* vline.h */; }; + D0AA5775231BE263000F88F3 /* vdrawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA565B231BE261000F88F3 /* vdrawable.cpp */; }; + D0AA5776231BE263000F88F3 /* vpathmesure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA565C231BE261000F88F3 /* vpathmesure.cpp */; }; + D0AA5777231BE263000F88F3 /* vbrush.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA565D231BE261000F88F3 /* vbrush.h */; }; + D0AA5778231BE263000F88F3 /* vpainter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA565E231BE261000F88F3 /* vpainter.cpp */; }; + D0AA5779231BE263000F88F3 /* vdebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA565F231BE261000F88F3 /* vdebug.cpp */; }; + D0AA577A231BE263000F88F3 /* vimageloader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5660231BE261000F88F3 /* vimageloader.cpp */; }; + D0AA577B231BE263000F88F3 /* vglobal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5661231BE261000F88F3 /* vglobal.h */; }; + D0AA577C231BE263000F88F3 /* vraster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5662231BE261000F88F3 /* vraster.cpp */; }; + D0AA577D231BE263000F88F3 /* vpainter.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5663231BE261000F88F3 /* vpainter.h */; }; + D0AA577E231BE263000F88F3 /* vmatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5664231BE261000F88F3 /* vmatrix.cpp */; }; + D0AA577F231BE263000F88F3 /* vrect.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5665231BE261000F88F3 /* vrect.h */; }; + D0AA5780231BE263000F88F3 /* vinterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5666231BE261000F88F3 /* vinterpolator.h */; }; + D0AA5781231BE263000F88F3 /* vbezier.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5667231BE261000F88F3 /* vbezier.h */; }; + D0AA5782231BE263000F88F3 /* vdrawhelper_sse2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5668231BE261000F88F3 /* vdrawhelper_sse2.cpp */; }; + D0AA5783231BE263000F88F3 /* vinterpolator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5669231BE261000F88F3 /* vinterpolator.cpp */; }; + D0AA5784231BE263000F88F3 /* vdrawhelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA566A231BE262000F88F3 /* vdrawhelper.cpp */; }; + D0AA5785231BE263000F88F3 /* vstackallocator.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA566B231BE262000F88F3 /* vstackallocator.h */; }; + D0AA5786231BE263000F88F3 /* vimageloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA566C231BE262000F88F3 /* vimageloader.h */; }; + D0AA5787231BE263000F88F3 /* vraster.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA566D231BE262000F88F3 /* vraster.h */; }; + D0AA5788231BE263000F88F3 /* vmatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA566E231BE262000F88F3 /* vmatrix.h */; }; + D0AA5789231BE263000F88F3 /* vrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA566F231BE262000F88F3 /* vrle.cpp */; }; + D0AA578A231BE263000F88F3 /* vcowptr.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5670231BE262000F88F3 /* vcowptr.h */; }; + D0AA578B231BE263000F88F3 /* vbrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5671231BE262000F88F3 /* vbrush.cpp */; }; + D0AA578D231BE263000F88F3 /* RLottieBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AA5673231BE262000F88F3 /* RLottieBinding.h */; }; + D0AA578E231BE263000F88F3 /* LottieInstance.mm in Sources */ = {isa = PBXBuildFile; fileRef = D0AA5674231BE262000F88F3 /* LottieInstance.mm */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D010DF3C22C225E4009324D4 /* RLottieBinding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RLottieBinding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0AA5544231BE25E000F88F3 /* LottieInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LottieInstance.h; sourceTree = ""; }; + D0AA5551231BE25F000F88F3 /* rlottiecommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rlottiecommon.h; sourceTree = ""; }; + D0AA5553231BE25F000F88F3 /* rlottie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rlottie.h; sourceTree = ""; }; + D0AA5554231BE25F000F88F3 /* rlottie_capi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rlottie_capi.h; sourceTree = ""; }; + D0AA55F6231BE260000F88F3 /* lottiemodel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottiemodel.cpp; sourceTree = ""; }; + D0AA55F7231BE260000F88F3 /* lottieitem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottieitem.cpp; sourceTree = ""; }; + D0AA55F9231BE260000F88F3 /* lottieanimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottieanimation.cpp; sourceTree = ""; }; + D0AA55FA231BE260000F88F3 /* lottiekeypath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottiekeypath.cpp; sourceTree = ""; }; + D0AA55FB231BE260000F88F3 /* lottieparser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lottieparser.h; sourceTree = ""; }; + D0AA55FC231BE261000F88F3 /* lottieparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottieparser.cpp; sourceTree = ""; }; + D0AA55FD231BE261000F88F3 /* lottieloader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottieloader.cpp; sourceTree = ""; }; + D0AA55FE231BE261000F88F3 /* lottieitem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lottieitem.h; sourceTree = ""; }; + D0AA55FF231BE261000F88F3 /* lottiekeypath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lottiekeypath.h; sourceTree = ""; }; + D0AA5601231BE261000F88F3 /* lottieproxymodel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lottieproxymodel.cpp; sourceTree = ""; }; + D0AA5603231BE261000F88F3 /* fwd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fwd.h; sourceTree = ""; }; + D0AA5604231BE261000F88F3 /* memorystream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memorystream.h; sourceTree = ""; }; + D0AA5605231BE261000F88F3 /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = ""; }; + D0AA5606231BE261000F88F3 /* prettywriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = prettywriter.h; sourceTree = ""; }; + D0AA5607231BE261000F88F3 /* ostreamwrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ostreamwrapper.h; sourceTree = ""; }; + D0AA5608231BE261000F88F3 /* encodedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encodedstream.h; sourceTree = ""; }; + D0AA5609231BE261000F88F3 /* filereadstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filereadstream.h; sourceTree = ""; }; + D0AA560A231BE261000F88F3 /* cursorstreamwrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursorstreamwrapper.h; sourceTree = ""; }; + D0AA560B231BE261000F88F3 /* istreamwrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = istreamwrapper.h; sourceTree = ""; }; + D0AA560C231BE261000F88F3 /* stringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stringbuffer.h; sourceTree = ""; }; + D0AA560E231BE261000F88F3 /* ieee754.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ieee754.h; sourceTree = ""; }; + D0AA560F231BE261000F88F3 /* strtod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strtod.h; sourceTree = ""; }; + D0AA5610231BE261000F88F3 /* swap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swap.h; sourceTree = ""; }; + D0AA5611231BE261000F88F3 /* regex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regex.h; sourceTree = ""; }; + D0AA5612231BE261000F88F3 /* diyfp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diyfp.h; sourceTree = ""; }; + D0AA5613231BE261000F88F3 /* biginteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = biginteger.h; sourceTree = ""; }; + D0AA5614231BE261000F88F3 /* strfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strfunc.h; sourceTree = ""; }; + D0AA5615231BE261000F88F3 /* itoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = itoa.h; sourceTree = ""; }; + D0AA5616231BE261000F88F3 /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = ""; }; + D0AA5617231BE261000F88F3 /* dtoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtoa.h; sourceTree = ""; }; + D0AA5618231BE261000F88F3 /* meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta.h; sourceTree = ""; }; + D0AA5619231BE261000F88F3 /* pow10.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pow10.h; sourceTree = ""; }; + D0AA561A231BE261000F88F3 /* encodings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encodings.h; sourceTree = ""; }; + D0AA561B231BE261000F88F3 /* schema.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = schema.h; sourceTree = ""; }; + D0AA561C231BE261000F88F3 /* stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; + D0AA561D231BE261000F88F3 /* filewritestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filewritestream.h; sourceTree = ""; }; + D0AA561E231BE261000F88F3 /* rapidjson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rapidjson.h; sourceTree = ""; }; + D0AA561F231BE261000F88F3 /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = document.h; sourceTree = ""; }; + D0AA5620231BE261000F88F3 /* allocators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = allocators.h; sourceTree = ""; }; + D0AA5621231BE261000F88F3 /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = writer.h; sourceTree = ""; }; + D0AA5623231BE261000F88F3 /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; + D0AA5624231BE261000F88F3 /* en.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = en.h; sourceTree = ""; }; + D0AA5625231BE261000F88F3 /* memorybuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memorybuffer.h; sourceTree = ""; }; + D0AA5626231BE261000F88F3 /* pointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pointer.h; sourceTree = ""; }; + D0AA562A231BE261000F88F3 /* lottieproxymodel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lottieproxymodel.h; sourceTree = ""; }; + D0AA562B231BE261000F88F3 /* lottiemodel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lottiemodel.h; sourceTree = ""; }; + D0AA562C231BE261000F88F3 /* lottieloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lottieloader.h; sourceTree = ""; }; + D0AA562E231BE261000F88F3 /* vdasher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdasher.h; sourceTree = ""; }; + D0AA562F231BE261000F88F3 /* vrle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vrle.h; sourceTree = ""; }; + D0AA5630231BE261000F88F3 /* velapsedtimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = velapsedtimer.cpp; sourceTree = ""; }; + D0AA5632231BE261000F88F3 /* velapsedtimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = velapsedtimer.h; sourceTree = ""; }; + D0AA5634231BE261000F88F3 /* vrect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vrect.cpp; sourceTree = ""; }; + D0AA5635231BE261000F88F3 /* vdasher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vdasher.cpp; sourceTree = ""; }; + D0AA5636231BE261000F88F3 /* vbezier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vbezier.cpp; sourceTree = ""; }; + D0AA563A231BE261000F88F3 /* vregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vregion.h; sourceTree = ""; }; + D0AA563D231BE261000F88F3 /* vregion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vregion.cpp; sourceTree = ""; }; + D0AA563E231BE261000F88F3 /* vpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vpath.cpp; sourceTree = ""; }; + D0AA563F231BE261000F88F3 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + D0AA5642231BE261000F88F3 /* v_ft_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = v_ft_types.h; sourceTree = ""; }; + D0AA5643231BE261000F88F3 /* v_ft_raster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = v_ft_raster.cpp; sourceTree = ""; }; + D0AA5645231BE261000F88F3 /* v_ft_stroker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = v_ft_stroker.cpp; sourceTree = ""; }; + D0AA5646231BE261000F88F3 /* v_ft_math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = v_ft_math.cpp; sourceTree = ""; }; + D0AA5647231BE261000F88F3 /* v_ft_stroker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = v_ft_stroker.h; sourceTree = ""; }; + D0AA5648231BE261000F88F3 /* v_ft_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = v_ft_math.h; sourceTree = ""; }; + D0AA5649231BE261000F88F3 /* v_ft_raster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = v_ft_raster.h; sourceTree = ""; }; + D0AA564A231BE261000F88F3 /* vcompositionfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vcompositionfunctions.cpp; sourceTree = ""; }; + D0AA564B231BE261000F88F3 /* vdrawhelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdrawhelper.h; sourceTree = ""; }; + D0AA564C231BE261000F88F3 /* vbitmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vbitmap.cpp; sourceTree = ""; }; + D0AA564D231BE261000F88F3 /* vdrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdrawable.h; sourceTree = ""; }; + D0AA564E231BE261000F88F3 /* vbitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vbitmap.h; sourceTree = ""; }; + D0AA564F231BE261000F88F3 /* vpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vpoint.h; sourceTree = ""; }; + D0AA5650231BE261000F88F3 /* vpathmesure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vpathmesure.h; sourceTree = ""; }; + D0AA5651231BE261000F88F3 /* vdebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdebug.h; sourceTree = ""; }; + D0AA5652231BE261000F88F3 /* vpath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vpath.h; sourceTree = ""; }; + D0AA5656231BE261000F88F3 /* stb_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stb_image.h; sourceTree = ""; }; + D0AA5657231BE261000F88F3 /* stb_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stb_image.cpp; sourceTree = ""; }; + D0AA5659231BE261000F88F3 /* vtaskqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vtaskqueue.h; sourceTree = ""; }; + D0AA565A231BE261000F88F3 /* vline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vline.h; sourceTree = ""; }; + D0AA565B231BE261000F88F3 /* vdrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vdrawable.cpp; sourceTree = ""; }; + D0AA565C231BE261000F88F3 /* vpathmesure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vpathmesure.cpp; sourceTree = ""; }; + D0AA565D231BE261000F88F3 /* vbrush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vbrush.h; sourceTree = ""; }; + D0AA565E231BE261000F88F3 /* vpainter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vpainter.cpp; sourceTree = ""; }; + D0AA565F231BE261000F88F3 /* vdebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vdebug.cpp; sourceTree = ""; }; + D0AA5660231BE261000F88F3 /* vimageloader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vimageloader.cpp; sourceTree = ""; }; + D0AA5661231BE261000F88F3 /* vglobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vglobal.h; sourceTree = ""; }; + D0AA5662231BE261000F88F3 /* vraster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vraster.cpp; sourceTree = ""; }; + D0AA5663231BE261000F88F3 /* vpainter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vpainter.h; sourceTree = ""; }; + D0AA5664231BE261000F88F3 /* vmatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vmatrix.cpp; sourceTree = ""; }; + D0AA5665231BE261000F88F3 /* vrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vrect.h; sourceTree = ""; }; + D0AA5666231BE261000F88F3 /* vinterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vinterpolator.h; sourceTree = ""; }; + D0AA5667231BE261000F88F3 /* vbezier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vbezier.h; sourceTree = ""; }; + D0AA5668231BE261000F88F3 /* vdrawhelper_sse2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vdrawhelper_sse2.cpp; sourceTree = ""; }; + D0AA5669231BE261000F88F3 /* vinterpolator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vinterpolator.cpp; sourceTree = ""; }; + D0AA566A231BE262000F88F3 /* vdrawhelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vdrawhelper.cpp; sourceTree = ""; }; + D0AA566B231BE262000F88F3 /* vstackallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vstackallocator.h; sourceTree = ""; }; + D0AA566C231BE262000F88F3 /* vimageloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vimageloader.h; sourceTree = ""; }; + D0AA566D231BE262000F88F3 /* vraster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vraster.h; sourceTree = ""; }; + D0AA566E231BE262000F88F3 /* vmatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vmatrix.h; sourceTree = ""; }; + D0AA566F231BE262000F88F3 /* vrle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vrle.cpp; sourceTree = ""; }; + D0AA5670231BE262000F88F3 /* vcowptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vcowptr.h; sourceTree = ""; }; + D0AA5671231BE262000F88F3 /* vbrush.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vbrush.cpp; sourceTree = ""; }; + D0AA5673231BE262000F88F3 /* RLottieBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RLottieBinding.h; sourceTree = ""; }; + D0AA5674231BE262000F88F3 /* LottieInstance.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LottieInstance.mm; sourceTree = ""; }; + D0AA5675231BE262000F88F3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D010DF3922C225E4009324D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D010DF3222C225E4009324D4 = { + isa = PBXGroup; + children = ( + D0AA5675231BE262000F88F3 /* Info.plist */, + D0AA5544231BE25E000F88F3 /* LottieInstance.h */, + D0AA5674231BE262000F88F3 /* LottieInstance.mm */, + D0AA5545231BE25F000F88F3 /* rlottie */, + D0AA5673231BE262000F88F3 /* RLottieBinding.h */, + D010DF3D22C225E4009324D4 /* Products */, + ); + sourceTree = ""; + }; + D010DF3D22C225E4009324D4 /* Products */ = { + isa = PBXGroup; + children = ( + D010DF3C22C225E4009324D4 /* RLottieBinding.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0AA5545231BE25F000F88F3 /* rlottie */ = { + isa = PBXGroup; + children = ( + D0AA554F231BE25F000F88F3 /* inc */, + D0AA55EA231BE260000F88F3 /* src */, + ); + path = rlottie; + sourceTree = ""; + }; + D0AA554F231BE25F000F88F3 /* inc */ = { + isa = PBXGroup; + children = ( + D0AA5551231BE25F000F88F3 /* rlottiecommon.h */, + D0AA5553231BE25F000F88F3 /* rlottie.h */, + D0AA5554231BE25F000F88F3 /* rlottie_capi.h */, + ); + path = inc; + sourceTree = ""; + }; + D0AA55EA231BE260000F88F3 /* src */ = { + isa = PBXGroup; + children = ( + D0AA55F5231BE260000F88F3 /* lottie */, + D0AA562D231BE261000F88F3 /* vector */, + ); + path = src; + sourceTree = ""; + }; + D0AA55F5231BE260000F88F3 /* lottie */ = { + isa = PBXGroup; + children = ( + D0AA55F6231BE260000F88F3 /* lottiemodel.cpp */, + D0AA55F7231BE260000F88F3 /* lottieitem.cpp */, + D0AA55F9231BE260000F88F3 /* lottieanimation.cpp */, + D0AA55FA231BE260000F88F3 /* lottiekeypath.cpp */, + D0AA55FB231BE260000F88F3 /* lottieparser.h */, + D0AA55FC231BE261000F88F3 /* lottieparser.cpp */, + D0AA55FD231BE261000F88F3 /* lottieloader.cpp */, + D0AA55FE231BE261000F88F3 /* lottieitem.h */, + D0AA55FF231BE261000F88F3 /* lottiekeypath.h */, + D0AA5601231BE261000F88F3 /* lottieproxymodel.cpp */, + D0AA5602231BE261000F88F3 /* rapidjson */, + D0AA562A231BE261000F88F3 /* lottieproxymodel.h */, + D0AA562B231BE261000F88F3 /* lottiemodel.h */, + D0AA562C231BE261000F88F3 /* lottieloader.h */, + ); + path = lottie; + sourceTree = ""; + }; + D0AA5602231BE261000F88F3 /* rapidjson */ = { + isa = PBXGroup; + children = ( + D0AA5603231BE261000F88F3 /* fwd.h */, + D0AA5604231BE261000F88F3 /* memorystream.h */, + D0AA5605231BE261000F88F3 /* reader.h */, + D0AA5606231BE261000F88F3 /* prettywriter.h */, + D0AA5607231BE261000F88F3 /* ostreamwrapper.h */, + D0AA5608231BE261000F88F3 /* encodedstream.h */, + D0AA5609231BE261000F88F3 /* filereadstream.h */, + D0AA560A231BE261000F88F3 /* cursorstreamwrapper.h */, + D0AA560B231BE261000F88F3 /* istreamwrapper.h */, + D0AA560C231BE261000F88F3 /* stringbuffer.h */, + D0AA560D231BE261000F88F3 /* internal */, + D0AA561A231BE261000F88F3 /* encodings.h */, + D0AA561B231BE261000F88F3 /* schema.h */, + D0AA561C231BE261000F88F3 /* stream.h */, + D0AA561D231BE261000F88F3 /* filewritestream.h */, + D0AA561E231BE261000F88F3 /* rapidjson.h */, + D0AA561F231BE261000F88F3 /* document.h */, + D0AA5620231BE261000F88F3 /* allocators.h */, + D0AA5621231BE261000F88F3 /* writer.h */, + D0AA5622231BE261000F88F3 /* error */, + D0AA5625231BE261000F88F3 /* memorybuffer.h */, + D0AA5626231BE261000F88F3 /* pointer.h */, + ); + path = rapidjson; + sourceTree = ""; + }; + D0AA560D231BE261000F88F3 /* internal */ = { + isa = PBXGroup; + children = ( + D0AA560E231BE261000F88F3 /* ieee754.h */, + D0AA560F231BE261000F88F3 /* strtod.h */, + D0AA5610231BE261000F88F3 /* swap.h */, + D0AA5611231BE261000F88F3 /* regex.h */, + D0AA5612231BE261000F88F3 /* diyfp.h */, + D0AA5613231BE261000F88F3 /* biginteger.h */, + D0AA5614231BE261000F88F3 /* strfunc.h */, + D0AA5615231BE261000F88F3 /* itoa.h */, + D0AA5616231BE261000F88F3 /* stack.h */, + D0AA5617231BE261000F88F3 /* dtoa.h */, + D0AA5618231BE261000F88F3 /* meta.h */, + D0AA5619231BE261000F88F3 /* pow10.h */, + ); + path = internal; + sourceTree = ""; + }; + D0AA5622231BE261000F88F3 /* error */ = { + isa = PBXGroup; + children = ( + D0AA5623231BE261000F88F3 /* error.h */, + D0AA5624231BE261000F88F3 /* en.h */, + ); + path = error; + sourceTree = ""; + }; + D0AA562D231BE261000F88F3 /* vector */ = { + isa = PBXGroup; + children = ( + D0AA562E231BE261000F88F3 /* vdasher.h */, + D0AA562F231BE261000F88F3 /* vrle.h */, + D0AA5630231BE261000F88F3 /* velapsedtimer.cpp */, + D0AA5632231BE261000F88F3 /* velapsedtimer.h */, + D0AA5634231BE261000F88F3 /* vrect.cpp */, + D0AA5635231BE261000F88F3 /* vdasher.cpp */, + D0AA5636231BE261000F88F3 /* vbezier.cpp */, + D0AA5637231BE261000F88F3 /* pixman */, + D0AA563E231BE261000F88F3 /* vpath.cpp */, + D0AA563F231BE261000F88F3 /* config.h */, + D0AA5640231BE261000F88F3 /* freetype */, + D0AA564A231BE261000F88F3 /* vcompositionfunctions.cpp */, + D0AA564B231BE261000F88F3 /* vdrawhelper.h */, + D0AA564C231BE261000F88F3 /* vbitmap.cpp */, + D0AA564D231BE261000F88F3 /* vdrawable.h */, + D0AA564E231BE261000F88F3 /* vbitmap.h */, + D0AA564F231BE261000F88F3 /* vpoint.h */, + D0AA5650231BE261000F88F3 /* vpathmesure.h */, + D0AA5651231BE261000F88F3 /* vdebug.h */, + D0AA5652231BE261000F88F3 /* vpath.h */, + D0AA5653231BE261000F88F3 /* stb */, + D0AA5659231BE261000F88F3 /* vtaskqueue.h */, + D0AA565A231BE261000F88F3 /* vline.h */, + D0AA565B231BE261000F88F3 /* vdrawable.cpp */, + D0AA565C231BE261000F88F3 /* vpathmesure.cpp */, + D0AA565D231BE261000F88F3 /* vbrush.h */, + D0AA565E231BE261000F88F3 /* vpainter.cpp */, + D0AA565F231BE261000F88F3 /* vdebug.cpp */, + D0AA5660231BE261000F88F3 /* vimageloader.cpp */, + D0AA5661231BE261000F88F3 /* vglobal.h */, + D0AA5662231BE261000F88F3 /* vraster.cpp */, + D0AA5663231BE261000F88F3 /* vpainter.h */, + D0AA5664231BE261000F88F3 /* vmatrix.cpp */, + D0AA5665231BE261000F88F3 /* vrect.h */, + D0AA5666231BE261000F88F3 /* vinterpolator.h */, + D0AA5667231BE261000F88F3 /* vbezier.h */, + D0AA5668231BE261000F88F3 /* vdrawhelper_sse2.cpp */, + D0AA5669231BE261000F88F3 /* vinterpolator.cpp */, + D0AA566A231BE262000F88F3 /* vdrawhelper.cpp */, + D0AA566B231BE262000F88F3 /* vstackallocator.h */, + D0AA566C231BE262000F88F3 /* vimageloader.h */, + D0AA566D231BE262000F88F3 /* vraster.h */, + D0AA566E231BE262000F88F3 /* vmatrix.h */, + D0AA566F231BE262000F88F3 /* vrle.cpp */, + D0AA5670231BE262000F88F3 /* vcowptr.h */, + D0AA5671231BE262000F88F3 /* vbrush.cpp */, + ); + path = vector; + sourceTree = ""; + }; + D0AA5637231BE261000F88F3 /* pixman */ = { + isa = PBXGroup; + children = ( + D0AA563A231BE261000F88F3 /* vregion.h */, + D0AA563D231BE261000F88F3 /* vregion.cpp */, + ); + path = pixman; + sourceTree = ""; + }; + D0AA5640231BE261000F88F3 /* freetype */ = { + isa = PBXGroup; + children = ( + D0AA5642231BE261000F88F3 /* v_ft_types.h */, + D0AA5643231BE261000F88F3 /* v_ft_raster.cpp */, + D0AA5645231BE261000F88F3 /* v_ft_stroker.cpp */, + D0AA5646231BE261000F88F3 /* v_ft_math.cpp */, + D0AA5647231BE261000F88F3 /* v_ft_stroker.h */, + D0AA5648231BE261000F88F3 /* v_ft_math.h */, + D0AA5649231BE261000F88F3 /* v_ft_raster.h */, + ); + path = freetype; + sourceTree = ""; + }; + D0AA5653231BE261000F88F3 /* stb */ = { + isa = PBXGroup; + children = ( + D0AA5656231BE261000F88F3 /* stb_image.h */, + D0AA5657231BE261000F88F3 /* stb_image.cpp */, + ); + path = stb; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D010DF3722C225E4009324D4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0AA5786231BE263000F88F3 /* vimageloader.h in Headers */, + D0AA5731231BE263000F88F3 /* regex.h in Headers */, + D0AA5724231BE263000F88F3 /* fwd.h in Headers */, + D0AA5738231BE263000F88F3 /* meta.h in Headers */, + D0AA5769231BE263000F88F3 /* vbitmap.h in Headers */, + D0AA5728231BE263000F88F3 /* ostreamwrapper.h in Headers */, + D0AA5745231BE263000F88F3 /* pointer.h in Headers */, + D0AA575D231BE263000F88F3 /* v_ft_types.h in Headers */, + D0AA5734231BE263000F88F3 /* strfunc.h in Headers */, + D0AA5740231BE263000F88F3 /* allocators.h in Headers */, + D0AA5726231BE263000F88F3 /* reader.h in Headers */, + D0AA5676231BE262000F88F3 /* LottieInstance.h in Headers */, + D0AA5748231BE263000F88F3 /* lottieproxymodel.h in Headers */, + D0AA574C231BE263000F88F3 /* vrle.h in Headers */, + D0AA5721231BE263000F88F3 /* lottiekeypath.h in Headers */, + D0AA5730231BE263000F88F3 /* swap.h in Headers */, + D0AA573D231BE263000F88F3 /* filewritestream.h in Headers */, + D0AA574B231BE263000F88F3 /* vdasher.h in Headers */, + D0AA5737231BE263000F88F3 /* dtoa.h in Headers */, + D0AA5739231BE263000F88F3 /* pow10.h in Headers */, + D0AA577B231BE263000F88F3 /* vglobal.h in Headers */, + D0AA575B231BE263000F88F3 /* config.h in Headers */, + D0AA5729231BE263000F88F3 /* encodedstream.h in Headers */, + D0AA578D231BE263000F88F3 /* RLottieBinding.h in Headers */, + D0AA573E231BE263000F88F3 /* rapidjson.h in Headers */, + D0AA5725231BE263000F88F3 /* memorystream.h in Headers */, + D0AA5780231BE263000F88F3 /* vinterpolator.h in Headers */, + D0AA5741231BE263000F88F3 /* writer.h in Headers */, + D0AA5766231BE263000F88F3 /* vdrawhelper.h in Headers */, + D0AA5727231BE263000F88F3 /* prettywriter.h in Headers */, + D0AA5773231BE263000F88F3 /* vtaskqueue.h in Headers */, + D0AA573A231BE263000F88F3 /* encodings.h in Headers */, + D0AA573C231BE263000F88F3 /* stream.h in Headers */, + D0AA5764231BE263000F88F3 /* v_ft_raster.h in Headers */, + D0AA574A231BE263000F88F3 /* lottieloader.h in Headers */, + D0AA5681231BE262000F88F3 /* rlottie.h in Headers */, + D0AA5736231BE263000F88F3 /* stack.h in Headers */, + D0AA572C231BE263000F88F3 /* istreamwrapper.h in Headers */, + D0AA5682231BE262000F88F3 /* rlottie_capi.h in Headers */, + D0AA5749231BE263000F88F3 /* lottiemodel.h in Headers */, + D0AA5733231BE263000F88F3 /* biginteger.h in Headers */, + D0AA5720231BE263000F88F3 /* lottieitem.h in Headers */, + D0AA572F231BE263000F88F3 /* strtod.h in Headers */, + D0AA5785231BE263000F88F3 /* vstackallocator.h in Headers */, + D0AA573B231BE263000F88F3 /* schema.h in Headers */, + D0AA576B231BE263000F88F3 /* vpathmesure.h in Headers */, + D0AA5756231BE263000F88F3 /* vregion.h in Headers */, + D0AA5744231BE263000F88F3 /* memorybuffer.h in Headers */, + D0AA5777231BE263000F88F3 /* vbrush.h in Headers */, + D0AA5768231BE263000F88F3 /* vdrawable.h in Headers */, + D0AA572E231BE263000F88F3 /* ieee754.h in Headers */, + D0AA572A231BE263000F88F3 /* filereadstream.h in Headers */, + D0AA5781231BE263000F88F3 /* vbezier.h in Headers */, + D0AA5743231BE263000F88F3 /* en.h in Headers */, + D0AA5788231BE263000F88F3 /* vmatrix.h in Headers */, + D0AA572D231BE263000F88F3 /* stringbuffer.h in Headers */, + D0AA577F231BE263000F88F3 /* vrect.h in Headers */, + D0AA572B231BE263000F88F3 /* cursorstreamwrapper.h in Headers */, + D0AA5735231BE263000F88F3 /* itoa.h in Headers */, + D0AA571D231BE263000F88F3 /* lottieparser.h in Headers */, + D0AA573F231BE263000F88F3 /* document.h in Headers */, + D0AA5732231BE263000F88F3 /* diyfp.h in Headers */, + D0AA576D231BE263000F88F3 /* vpath.h in Headers */, + D0AA578A231BE263000F88F3 /* vcowptr.h in Headers */, + D0AA5742231BE263000F88F3 /* error.h in Headers */, + D0AA576C231BE263000F88F3 /* vdebug.h in Headers */, + D0AA574F231BE263000F88F3 /* velapsedtimer.h in Headers */, + D0AA5763231BE263000F88F3 /* v_ft_math.h in Headers */, + D0AA577D231BE263000F88F3 /* vpainter.h in Headers */, + D0AA5770231BE263000F88F3 /* stb_image.h in Headers */, + D0AA5762231BE263000F88F3 /* v_ft_stroker.h in Headers */, + D0AA5774231BE263000F88F3 /* vline.h in Headers */, + D0AA576A231BE263000F88F3 /* vpoint.h in Headers */, + D0AA567F231BE262000F88F3 /* rlottiecommon.h in Headers */, + D0AA5787231BE263000F88F3 /* vraster.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D010DF3B22C225E4009324D4 /* RLottieBinding */ = { + isa = PBXNativeTarget; + buildConfigurationList = D010DF4422C225E4009324D4 /* Build configuration list for PBXNativeTarget "RLottieBinding" */; + buildPhases = ( + D010DF3722C225E4009324D4 /* Headers */, + D010DF3822C225E4009324D4 /* Sources */, + D010DF3922C225E4009324D4 /* Frameworks */, + D010DF3A22C225E4009324D4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RLottieBinding; + productName = RLottie; + productReference = D010DF3C22C225E4009324D4 /* RLottieBinding.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D010DF3322C225E4009324D4 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1010; + ORGANIZATIONNAME = "Telegram LLP"; + TargetAttributes = { + D010DF3B22C225E4009324D4 = { + CreatedOnToolsVersion = 10.1; + }; + }; + }; + buildConfigurationList = D010DF3622C225E4009324D4 /* Build configuration list for PBXProject "RLottieBinding_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D010DF3222C225E4009324D4; + productRefGroup = D010DF3D22C225E4009324D4 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D010DF3B22C225E4009324D4 /* RLottieBinding */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D010DF3A22C225E4009324D4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D010DF3822C225E4009324D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0AA575A231BE263000F88F3 /* vpath.cpp in Sources */, + D0AA5771231BE263000F88F3 /* stb_image.cpp in Sources */, + D0AA5789231BE263000F88F3 /* vrle.cpp in Sources */, + D0AA5775231BE263000F88F3 /* vdrawable.cpp in Sources */, + D0AA571F231BE263000F88F3 /* lottieloader.cpp in Sources */, + D0AA5776231BE263000F88F3 /* vpathmesure.cpp in Sources */, + D0AA5778231BE263000F88F3 /* vpainter.cpp in Sources */, + D0AA577E231BE263000F88F3 /* vmatrix.cpp in Sources */, + D0AA5782231BE263000F88F3 /* vdrawhelper_sse2.cpp in Sources */, + D0AA571C231BE263000F88F3 /* lottiekeypath.cpp in Sources */, + D0AA571B231BE263000F88F3 /* lottieanimation.cpp in Sources */, + D0AA5759231BE263000F88F3 /* vregion.cpp in Sources */, + D0AA5784231BE263000F88F3 /* vdrawhelper.cpp in Sources */, + D0AA5765231BE263000F88F3 /* vcompositionfunctions.cpp in Sources */, + D0AA577C231BE263000F88F3 /* vraster.cpp in Sources */, + D0AA5719231BE263000F88F3 /* lottieitem.cpp in Sources */, + D0AA5723231BE263000F88F3 /* lottieproxymodel.cpp in Sources */, + D0AA5718231BE263000F88F3 /* lottiemodel.cpp in Sources */, + D0AA5751231BE263000F88F3 /* vrect.cpp in Sources */, + D0AA578B231BE263000F88F3 /* vbrush.cpp in Sources */, + D0AA5760231BE263000F88F3 /* v_ft_stroker.cpp in Sources */, + D0AA5753231BE263000F88F3 /* vbezier.cpp in Sources */, + D0AA5752231BE263000F88F3 /* vdasher.cpp in Sources */, + D0AA5761231BE263000F88F3 /* v_ft_math.cpp in Sources */, + D0AA5779231BE263000F88F3 /* vdebug.cpp in Sources */, + D0AA571E231BE263000F88F3 /* lottieparser.cpp in Sources */, + D0AA5783231BE263000F88F3 /* vinterpolator.cpp in Sources */, + D0AA578E231BE263000F88F3 /* LottieInstance.mm in Sources */, + D0AA5767231BE263000F88F3 /* vbitmap.cpp in Sources */, + D0AA574D231BE263000F88F3 /* velapsedtimer.cpp in Sources */, + D0AA575E231BE263000F88F3 /* v_ft_raster.cpp in Sources */, + D0AA577A231BE263000F88F3 /* vimageloader.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D010DF4222C225E4009324D4 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D010DF4322C225E4009324D4 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D010DF4522C225E4009324D4 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + OTHER_CFLAGS = "-Dpixman_region_selfcheck(x)=1"; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.RLottieBinding; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D010DF4622C225E4009324D4 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + OTHER_CFLAGS = "-Dpixman_region_selfcheck(x)=1"; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.RLottieBinding; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0AF792F22C2C26A00CECCB8 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0AF793022C2C26A00CECCB8 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_OPTIMIZATION_LEVEL = s; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + OTHER_CFLAGS = "-Dpixman_region_selfcheck(x)=1"; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.RLottieBinding; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0AF793122C2C27700CECCB8 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0AF793222C2C27700CECCB8 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + OTHER_CFLAGS = "-Dpixman_region_selfcheck(x)=1"; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.RLottieBinding; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D010DF3622C225E4009324D4 /* Build configuration list for PBXProject "RLottieBinding_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D010DF4222C225E4009324D4 /* DebugAppStoreLLC */, + D0AF792F22C2C26A00CECCB8 /* DebugHockeyapp */, + D010DF4322C225E4009324D4 /* ReleaseAppStoreLLC */, + D0AF793122C2C27700CECCB8 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D010DF4422C225E4009324D4 /* Build configuration list for PBXNativeTarget "RLottieBinding" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D010DF4522C225E4009324D4 /* DebugAppStoreLLC */, + D0AF793022C2C26A00CECCB8 /* DebugHockeyapp */, + D010DF4622C225E4009324D4 /* ReleaseAppStoreLLC */, + D0AF793222C2C27700CECCB8 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D010DF3322C225E4009324D4 /* Project object */; +} diff --git a/submodules/RLottie/Sources/rlottie/.Gifs/1.gif b/submodules/rlottie/rlottie/.Gifs/1.gif similarity index 100% rename from submodules/RLottie/Sources/rlottie/.Gifs/1.gif rename to submodules/rlottie/rlottie/.Gifs/1.gif diff --git a/submodules/RLottie/Sources/rlottie/.Gifs/2.gif b/submodules/rlottie/rlottie/.Gifs/2.gif similarity index 100% rename from submodules/RLottie/Sources/rlottie/.Gifs/2.gif rename to submodules/rlottie/rlottie/.Gifs/2.gif diff --git a/submodules/rlottie/rlottie/.appveyor.yml b/submodules/rlottie/rlottie/.appveyor.yml new file mode 100644 index 0000000000..0b51e2990b --- /dev/null +++ b/submodules/rlottie/rlottie/.appveyor.yml @@ -0,0 +1,23 @@ +os: Visual Studio 2017 +platform: + - x86 +environment: + matrix: + - ARCH: x86 + PYTHON: "C:\\Python35" + - ARCH: x64 + PYTHON: "C:\\Python35-x64" +skip_branch_with_pr: true +install: + - git submodule update --init --recursive + - set PATH=%cd%;%PYTHON%;%PYTHON%\Scripts;%PATH% + - pip install meson==0.50.0 ninja + - call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" %ARCH% +build_script: + - meson -Dwerror=false --backend=ninja --prefix=%cd% build + - where link + - ninja -C build +test_script: + - ninja -C build test +after_build: + - ninja -C build install \ No newline at end of file diff --git a/submodules/RLottie/Sources/rlottie/.clang-format b/submodules/rlottie/rlottie/.clang-format similarity index 100% rename from submodules/RLottie/Sources/rlottie/.clang-format rename to submodules/rlottie/rlottie/.clang-format diff --git a/submodules/RLottie/Sources/rlottie/.gitignore b/submodules/rlottie/rlottie/.gitignore similarity index 95% rename from submodules/RLottie/Sources/rlottie/.gitignore rename to submodules/rlottie/rlottie/.gitignore index 3718fd9827..9b1fe5ed75 100644 --- a/submodules/RLottie/Sources/rlottie/.gitignore +++ b/submodules/rlottie/rlottie/.gitignore @@ -9,3 +9,4 @@ latex tmp .cproject .project +.vs diff --git a/submodules/rlottie/rlottie/.travis.yml b/submodules/rlottie/rlottie/.travis.yml new file mode 100644 index 0000000000..f40e68b98e --- /dev/null +++ b/submodules/rlottie/rlottie/.travis.yml @@ -0,0 +1,20 @@ +sudo: false + +os: + - linux + +language: + - cpp + +services: + - docker + +before_install: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull smohantty/rlottie-ci-setup; fi + +script: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo FROM smohantty/rlottie-ci-setup > Dockerfile; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo ADD . /root >> Dockerfile; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build -t withgit .; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true meson -Dtest=true builddir && ninja -C builddir test && ninja -C builddir install"; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true cmake -DLOTTIE_TEST=ON -Bbuilddir -H. && make -C builddir -j$(nproc) all test && make -C builddir install"; fi diff --git a/submodules/RLottie/Sources/rlottie/AUTHORS b/submodules/rlottie/rlottie/AUTHORS similarity index 73% rename from submodules/RLottie/Sources/rlottie/AUTHORS rename to submodules/rlottie/rlottie/AUTHORS index fe35a4e0ad..60b6e0a89d 100644 --- a/submodules/RLottie/Sources/rlottie/AUTHORS +++ b/submodules/rlottie/rlottie/AUTHORS @@ -6,3 +6,6 @@ Bryce Harrington Junsu Choi Yuangu Mihai Serban +Shinwoo Kim +Vincent Torri +Nicholas Guriev diff --git a/submodules/RLottie/Sources/rlottie/CMakeLists.txt b/submodules/rlottie/rlottie/CMakeLists.txt similarity index 79% rename from submodules/RLottie/Sources/rlottie/CMakeLists.txt rename to submodules/rlottie/rlottie/CMakeLists.txt index 8284907885..e0d4e0b2ae 100644 --- a/submodules/RLottie/Sources/rlottie/CMakeLists.txt +++ b/submodules/rlottie/rlottie/CMakeLists.txt @@ -1,10 +1,20 @@ -cmake_minimum_required( VERSION 3.2 ) +cmake_minimum_required( VERSION 3.3 ) #declare project project( rlottie VERSION 0.0.1 LANGUAGES C CXX ASM) +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE MinSizeRel) +endif() + +if (NOT DEFINED BUILD_SHARED_LIBS) + # Keep the previous behavior of the build system, consistent with Meson. + set(BUILD_SHARED_LIBS ON) +endif() + #declare target -add_library( rlottie SHARED "" ) +add_library( rlottie ) +set_target_properties( rlottie PROPERTIES DEFINE_SYMBOL LOT_BUILD ) #declare version of the target set(player_version_major 0) @@ -19,12 +29,23 @@ set_target_properties(rlottie PROPERTIES #declare alias so that library can be used inside the build tree, e.g. when testing add_library(rlottie::rlottie ALIAS rlottie) +option(LOTTIE_MODULE "Enable LOTTIE MODULE SUPPORT" ON) +option(LOTTIE_THREAD "Enable LOTTIE THREAD SUPPORT" ON) +option(LOTTIE_CACHE "Enable LOTTIE CACHE SUPPORT" ON) +option(LOTTIE_TEST "Build LOTTIE AUTOTESTS" OFF) + +CONFIGURE_FILE(${CMAKE_CURRENT_LIST_DIR}/cmake/config.h.in config.h) + +target_include_directories(rlottie + PRIVATE + "${CMAKE_CURRENT_BINARY_DIR}" + ) + #declare target compilation options target_compile_options(rlottie PUBLIC PRIVATE -std=c++14 - -Os -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables @@ -47,10 +68,10 @@ target_link_libraries(rlottie "${CMAKE_THREAD_LIBS_INIT}" ) -# for dlopen, dlsym and dlclose dependancy -target_link_libraries(rlottie - PRIVATE - ${CMAKE_DL_LIBS}) +if (LOTTIE_MODULE) + # for dlopen, dlsym and dlclose dependancy + target_link_libraries(rlottie PRIVATE ${CMAKE_DL_LIBS}) +endif() if(APPLE) target_link_libraries(rlottie @@ -74,6 +95,11 @@ add_subdirectory(inc) add_subdirectory(src) add_subdirectory(example) +if (LOTTIE_TEST) + enable_testing() + add_subdirectory(test) +endif() + SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_DIR ${PREFIX}) SET(LIBDIR ${LIB_INSTALL_DIR}) diff --git a/submodules/RLottie/Sources/rlottie/COPYING b/submodules/rlottie/rlottie/COPYING similarity index 100% rename from submodules/RLottie/Sources/rlottie/COPYING rename to submodules/rlottie/rlottie/COPYING diff --git a/submodules/RLottie/Sources/rlottie/README.md b/submodules/rlottie/rlottie/README.md similarity index 97% rename from submodules/RLottie/Sources/rlottie/README.md rename to submodules/rlottie/rlottie/README.md index b402d24994..4f74ef6b8e 100644 --- a/submodules/RLottie/Sources/rlottie/README.md +++ b/submodules/rlottie/rlottie/README.md @@ -2,6 +2,8 @@ # rlottie [![Build Status](https://travis-ci.org/Samsung/rlottie.svg?branch=master)](https://travis-ci.org/Samsung/rlottie) +[![Build status](https://ci.appveyor.com/api/projects/status/n3xonxk1ooo6s7nr?svg=true&passingText=windows%20-%20passing)](https://ci.appveyor.com/project/smohantty/rlottie-mliua) + rlottie is a platform independent standalone c++ library for rendering vector based animations and art in realtime. diff --git a/submodules/rlottie/rlottie/cmake/config.h.in b/submodules/rlottie/rlottie/cmake/config.h.in new file mode 100644 index 0000000000..e120bba17e --- /dev/null +++ b/submodules/rlottie/rlottie/cmake/config.h.in @@ -0,0 +1,17 @@ +#cmakedefine LOTTIE_MODULE + +#ifdef LOTTIE_MODULE +#define LOTTIE_IMAGE_MODULE_SUPPORT +#endif + +#cmakedefine LOTTIE_THREAD + +#ifdef LOTTIE_THREAD +#define LOTTIE_THREAD_SUPPORT +#endif + +#cmakedefine LOTTIE_CACHE + +#ifdef LOTTIE_CACHE +#define LOTTIE_CACHE_SUPPORT +#endif diff --git a/submodules/RLottie/Sources/rlottie/cmake/rlottieConfig.cmake.in b/submodules/rlottie/rlottie/cmake/rlottieConfig.cmake.in similarity index 100% rename from submodules/RLottie/Sources/rlottie/cmake/rlottieConfig.cmake.in rename to submodules/rlottie/rlottie/cmake/rlottieConfig.cmake.in diff --git a/submodules/RLottie/Sources/rlottie/example/CMakeLists.txt b/submodules/rlottie/rlottie/example/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/CMakeLists.txt rename to submodules/rlottie/rlottie/example/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/example/demo.cpp b/submodules/rlottie/rlottie/example/demo.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/demo.cpp rename to submodules/rlottie/rlottie/example/demo.cpp diff --git a/submodules/RLottie/Sources/rlottie/example/efl_animview.cpp b/submodules/rlottie/rlottie/example/efl_animview.cpp similarity index 90% rename from submodules/RLottie/Sources/rlottie/example/efl_animview.cpp rename to submodules/rlottie/rlottie/example/efl_animview.cpp index 32aed202f9..cb05f79cca 100644 --- a/submodules/RLottie/Sources/rlottie/example/efl_animview.cpp +++ b/submodules/rlottie/rlottie/example/efl_animview.cpp @@ -24,16 +24,14 @@ #define WIDTH 400 #define HEIGHT 400 -Eo *slider = NULL; - void -win_del(void *data, Eo *o, void *ev) +win_del(void *data EINA_UNUSED, Eo *o EINA_UNUSED, void *event_info EINA_UNUSED) { elm_exit(); } static void -btn_clicked_cb(void *data, Eo *obj, void *event_info) +btn_clicked_cb(void *data, Eo *obj, void *event_info EINA_UNUSED) { Eo *anim_view = (Eo *) data; const char *text = elm_object_text_get(obj); @@ -53,14 +51,14 @@ btn_clicked_cb(void *data, Eo *obj, void *event_info) } static void -check_changed_cb(void *data, Eo *obj, void *event_info) +check_changed_cb(void *data, Eo *obj, void *event_info EINA_UNUSED) { Eo *anim_view = (Eo *) data; elm_animation_view_auto_repeat_set(anim_view, elm_check_state_get(obj)); } static void -speed_changed_cb(void *data, Eo *obj, void *event_info) +speed_changed_cb(void *data, Eo *obj, void *event_info EINA_UNUSED) { Eo *anim_view = (Eo *) data; double speed = 1; @@ -94,40 +92,40 @@ update_anim_view_state(Eo *anim_view, Eo *label) } static void -_play_done(void *data, Eo *obj, void *ev) +_play_done(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED) { printf("done!\n"); } static void -_play_updated(void *data, Eo *obj, void *ev) +_play_updated(void *data, Eo *obj, void *event_info EINA_UNUSED) { Eo *slider = (Eo *) data; elm_slider_value_set(slider, elm_animation_view_progress_get(obj)); } static void -_state_update(void *data, Eo *obj, void *ev) +_state_update(void *data, Eo *obj, void *event_info EINA_UNUSED) { Eo *label = (Eo *) data; update_anim_view_state(obj, label); } static void -_play_repeated(void *data, Eo *obj, void *ev) +_play_repeated(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED) { printf("repeated!\n"); } static void -_slider_drag_cb(void *data, Eo *obj, void *ev) +_slider_drag_cb(void *data, Eo *obj, void *event_info EINA_UNUSED) { Eo *anim_view = (Eo *) data; elm_animation_view_progress_set(anim_view, elm_slider_value_get(obj)); } static void -_slider_reset(void *data, Eo *obj, void *ev) +_slider_reset(void *data, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Eo *slider = (Eo *) data; elm_slider_value_set(slider, 0); diff --git a/submodules/RLottie/Sources/rlottie/example/evasapp.cpp b/submodules/rlottie/rlottie/example/evasapp.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/evasapp.cpp rename to submodules/rlottie/rlottie/example/evasapp.cpp diff --git a/submodules/RLottie/Sources/rlottie/example/evasapp.h b/submodules/rlottie/rlottie/example/evasapp.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/evasapp.h rename to submodules/rlottie/rlottie/example/evasapp.h diff --git a/submodules/RLottie/Sources/rlottie/example/gif.h b/submodules/rlottie/rlottie/example/gif.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/gif.h rename to submodules/rlottie/rlottie/example/gif.h diff --git a/submodules/RLottie/Sources/rlottie/example/lottie2gif.cpp b/submodules/rlottie/rlottie/example/lottie2gif.cpp similarity index 75% rename from submodules/RLottie/Sources/rlottie/example/lottie2gif.cpp rename to submodules/rlottie/rlottie/example/lottie2gif.cpp index c678d10028..23d24a562e 100644 --- a/submodules/RLottie/Sources/rlottie/example/lottie2gif.cpp +++ b/submodules/rlottie/rlottie/example/lottie2gif.cpp @@ -2,9 +2,16 @@ #include #include +#include #include #include + +#ifndef _WIN32 #include +#else +#include +#include +#endif class GifBuilder { public: @@ -78,7 +85,7 @@ public: auto buffer = std::unique_ptr(new uint32_t[w * h]); size_t frameCount = player->totalFrame(); - GifBuilder builder(baseName.data(), w, h, bgColor); + GifBuilder builder(gifName.data(), w, h, bgColor); for (size_t i = 0; i < frameCount ; i++) { rlottie::Surface surface(buffer.get(), w, h, w * 4); player->renderSync(i, surface); @@ -89,31 +96,48 @@ public: int setup(int argc, char **argv) { - if (argc > 1) fileName = argv[1]; + char *path{nullptr}; + + if (argc > 1) path = argv[1]; if (argc > 2) bgColor = strtol(argv[2], NULL, 16); - if (!fileName) return help(); + if (!path) return help(); - fileName = realpath(fileName, absoloutePath.data()); + std::array memory; - if (!fileName || !jsonFile(fileName) ) return help(); +#ifdef _WIN32 + path = _fullpath(memory.data(), path, memory.size()); +#else + path = realpath(path, memory.data()); +#endif + if (!path) return help(); - baseName = absoloutePath; - char *base = basename(baseName.data()); - snprintf(baseName.data(), baseName.size(), "%s.gif",base); + fileName = std::string(path); + + if (!jsonFile()) return help(); + + gifName = basename(fileName); + gifName.append(".gif"); return 0; } private: + std::string basename(const std::string &str) + { + return str.substr(str.find_last_of("/\\") + 1); + } - bool jsonFile(const char *filename) { - const char *dot = strrchr(filename, '.'); - if(!dot || dot == filename) return false; - return !strcmp(dot + 1, "json"); + bool jsonFile() { + std::string extn = ".json"; + if ( fileName.size() <= extn.size() || + fileName.substr(fileName.size()- extn.size()) != extn ) + return false; + + return true; } int result() { - std::cout<<"Generated GIF file : "< absoloutePath; - std::array baseName; + std::string fileName; + std::string gifName; }; int diff --git a/submodules/RLottie/Sources/rlottie/example/lottieview.cpp b/submodules/rlottie/rlottie/example/lottieview.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/lottieview.cpp rename to submodules/rlottie/rlottie/example/lottieview.cpp diff --git a/submodules/RLottie/Sources/rlottie/example/lottieview.h b/submodules/rlottie/rlottie/example/lottieview.h similarity index 99% rename from submodules/RLottie/Sources/rlottie/example/lottieview.h rename to submodules/rlottie/rlottie/example/lottieview.h index 34c414f285..fcaf31b08a 100644 --- a/submodules/RLottie/Sources/rlottie/example/lottieview.h +++ b/submodules/rlottie/rlottie/example/lottieview.h @@ -409,7 +409,7 @@ public: const float *data = node->mPath.ptPtr; if (!data) return; - for (int i = 0; i < node->mPath.elmCount; i++) { + for (size_t i = 0; i < node->mPath.elmCount; i++) { switch (node->mPath.elmPtr[i]) { case 0: evas_vg_shape_append_move_to(shape, data[0], data[1]); diff --git a/submodules/RLottie/Sources/rlottie/example/lottieviewer.cpp b/submodules/rlottie/rlottie/example/lottieviewer.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/lottieviewer.cpp rename to submodules/rlottie/rlottie/example/lottieviewer.cpp diff --git a/submodules/RLottie/Sources/rlottie/example/lottieviewtest.cpp b/submodules/rlottie/rlottie/example/lottieviewtest.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/lottieviewtest.cpp rename to submodules/rlottie/rlottie/example/lottieviewtest.cpp diff --git a/submodules/rlottie/rlottie/example/meson.build b/submodules/rlottie/rlottie/example/meson.build new file mode 100644 index 0000000000..dd5aa935fa --- /dev/null +++ b/submodules/rlottie/rlottie/example/meson.build @@ -0,0 +1,63 @@ + +override_default = ['warning_level=2', 'werror=false'] + +common_source = files('evasapp.cpp') +common_source += files('lottieview.cpp') + +demo_sources = files('demo.cpp') +demo_sources += common_source + +executable('lottie2gif', + 'lottie2gif.cpp', + include_directories : inc, + override_options : override_default, + link_with : rlottie_lib) + +demo_dep = dependency('elementary', required : false, disabler : true) + +executable('demo', + demo_sources, + include_directories : inc, + override_options : override_default, + link_with : rlottie_lib, + dependencies : demo_dep) + +lottieview_test_src = files('lottieviewtest.cpp') +lottieview_test_src += common_source + +executable('lottieviewTest', + lottieview_test_src, + include_directories : inc, + override_options : override_default, + link_with : rlottie_lib, + dependencies : demo_dep) + +uxsample_test_src = files('uxsampletest.cpp') +uxsample_test_src += common_source + +executable('uxsampleTest', + uxsample_test_src, + include_directories : inc, + override_options : override_default, + link_with : rlottie_lib, + dependencies : demo_dep) + +lottieviewer_sources = files('lottieviewer.cpp') +lottieviewer_sources += common_source + +executable('lottieviewer', + lottieviewer_sources, + include_directories : inc, + override_options : override_default, + link_with : rlottie_lib, + dependencies : demo_dep) + +if (meson.get_compiler('cpp').has_header('elementary-1/efl_ui_animation_view.h')) + executable('efl_animview', + 'efl_animview.cpp', + include_directories : inc, + link_with : rlottie_lib, + override_options : override_default, + dependencies : demo_dep) +endif + diff --git a/submodules/RLottie/Sources/rlottie/example/pathtest.cpp b/submodules/rlottie/rlottie/example/pathtest.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/pathtest.cpp rename to submodules/rlottie/rlottie/example/pathtest.cpp diff --git a/submodules/RLottie/Sources/rlottie/example/resource/1643-exploding-star.json b/submodules/rlottie/rlottie/example/resource/1643-exploding-star.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/1643-exploding-star.json rename to submodules/rlottie/rlottie/example/resource/1643-exploding-star.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/1667-firework.json b/submodules/rlottie/rlottie/example/resource/1667-firework.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/1667-firework.json rename to submodules/rlottie/rlottie/example/resource/1667-firework.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/360º_degree.json b/submodules/rlottie/rlottie/example/resource/360º_degree.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/360º_degree.json rename to submodules/rlottie/rlottie/example/resource/360º_degree.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/3d.json b/submodules/rlottie/rlottie/example/resource/3d.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/3d.json rename to submodules/rlottie/rlottie/example/resource/3d.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/4479-fireworks.json b/submodules/rlottie/rlottie/example/resource/4479-fireworks.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/4479-fireworks.json rename to submodules/rlottie/rlottie/example/resource/4479-fireworks.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/5317-fireworkds.json b/submodules/rlottie/rlottie/example/resource/5317-fireworkds.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/5317-fireworkds.json rename to submodules/rlottie/rlottie/example/resource/5317-fireworkds.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/5344-honey-sack-hud.json b/submodules/rlottie/rlottie/example/resource/5344-honey-sack-hud.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/5344-honey-sack-hud.json rename to submodules/rlottie/rlottie/example/resource/5344-honey-sack-hud.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/Indicators1.json b/submodules/rlottie/rlottie/example/resource/Indicators1.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/Indicators1.json rename to submodules/rlottie/rlottie/example/resource/Indicators1.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/ModernPictogramsForLottie_LoudMute.json b/submodules/rlottie/rlottie/example/resource/ModernPictogramsForLottie_LoudMute.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/ModernPictogramsForLottie_LoudMute.json rename to submodules/rlottie/rlottie/example/resource/ModernPictogramsForLottie_LoudMute.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/StickAndBall.json b/submodules/rlottie/rlottie/example/resource/StickAndBall.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/StickAndBall.json rename to submodules/rlottie/rlottie/example/resource/StickAndBall.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/A Shapes_All_01_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/A Shapes_All_01_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/A Shapes_All_01_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/A Shapes_All_01_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/B Fills_All_01_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/B Fills_All_01_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/B Fills_All_01_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/B Fills_All_01_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/C Strokes_All_01_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/C Strokes_All_01_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/C Strokes_All_01_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/C Strokes_All_01_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/D Transforms_All_01_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/D Transforms_All_01_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/D Transforms_All_01_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/D Transforms_All_01_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/E Interpolation_All_01_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/E Interpolation_All_01_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/E Interpolation_All_01_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/E Interpolation_All_01_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/F Masks_All_01_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/F Masks_All_01_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/F Masks_All_01_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/F Masks_All_01_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/F Masks_All_02_1920x1080.json b/submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/F Masks_All_02_1920x1080.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/UXSample_1920x1080/F Masks_All_02_1920x1080.json rename to submodules/rlottie/rlottie/example/resource/UXSample_1920x1080/F Masks_All_02_1920x1080.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/_alarm.json b/submodules/rlottie/rlottie/example/resource/_alarm.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/_alarm.json rename to submodules/rlottie/rlottie/example/resource/_alarm.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/a_cup_of_coffee.json b/submodules/rlottie/rlottie/example/resource/a_cup_of_coffee.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/a_cup_of_coffee.json rename to submodules/rlottie/rlottie/example/resource/a_cup_of_coffee.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/a_mountain.json b/submodules/rlottie/rlottie/example/resource/a_mountain.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/a_mountain.json rename to submodules/rlottie/rlottie/example/resource/a_mountain.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/abstract_circle.json b/submodules/rlottie/rlottie/example/resource/abstract_circle.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/abstract_circle.json rename to submodules/rlottie/rlottie/example/resource/abstract_circle.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/acrobatics.json b/submodules/rlottie/rlottie/example/resource/acrobatics.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/acrobatics.json rename to submodules/rlottie/rlottie/example/resource/acrobatics.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/anubis.json b/submodules/rlottie/rlottie/example/resource/anubis.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/anubis.json rename to submodules/rlottie/rlottie/example/resource/anubis.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/ao.json b/submodules/rlottie/rlottie/example/resource/ao.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/ao.json rename to submodules/rlottie/rlottie/example/resource/ao.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/balloons_with_string.json b/submodules/rlottie/rlottie/example/resource/balloons_with_string.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/balloons_with_string.json rename to submodules/rlottie/rlottie/example/resource/balloons_with_string.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/bell.json b/submodules/rlottie/rlottie/example/resource/bell.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/bell.json rename to submodules/rlottie/rlottie/example/resource/bell.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/birth_stone_logo.json b/submodules/rlottie/rlottie/example/resource/birth_stone_logo.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/birth_stone_logo.json rename to submodules/rlottie/rlottie/example/resource/birth_stone_logo.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/bounching_ball.json b/submodules/rlottie/rlottie/example/resource/bounching_ball.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/bounching_ball.json rename to submodules/rlottie/rlottie/example/resource/bounching_ball.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/browser.json b/submodules/rlottie/rlottie/example/resource/browser.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/browser.json rename to submodules/rlottie/rlottie/example/resource/browser.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/confetti.json b/submodules/rlottie/rlottie/example/resource/confetti.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/confetti.json rename to submodules/rlottie/rlottie/example/resource/confetti.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/cooking.json b/submodules/rlottie/rlottie/example/resource/cooking.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/cooking.json rename to submodules/rlottie/rlottie/example/resource/cooking.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/dna.json b/submodules/rlottie/rlottie/example/resource/dna.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/dna.json rename to submodules/rlottie/rlottie/example/resource/dna.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/done.json b/submodules/rlottie/rlottie/example/resource/done.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/done.json rename to submodules/rlottie/rlottie/example/resource/done.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/dynamic_path_test.json b/submodules/rlottie/rlottie/example/resource/dynamic_path_test.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/dynamic_path_test.json rename to submodules/rlottie/rlottie/example/resource/dynamic_path_test.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/dynamic_property.json b/submodules/rlottie/rlottie/example/resource/dynamic_property.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/dynamic_property.json rename to submodules/rlottie/rlottie/example/resource/dynamic_property.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/eid_mubarak.json b/submodules/rlottie/rlottie/example/resource/eid_mubarak.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/eid_mubarak.json rename to submodules/rlottie/rlottie/example/resource/eid_mubarak.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/emoji_shock.json b/submodules/rlottie/rlottie/example/resource/emoji_shock.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/emoji_shock.json rename to submodules/rlottie/rlottie/example/resource/emoji_shock.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/emoji_wink.json b/submodules/rlottie/rlottie/example/resource/emoji_wink.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/emoji_wink.json rename to submodules/rlottie/rlottie/example/resource/emoji_wink.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/file_transfer.json b/submodules/rlottie/rlottie/example/resource/file_transfer.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/file_transfer.json rename to submodules/rlottie/rlottie/example/resource/file_transfer.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/fingerprint_success.json b/submodules/rlottie/rlottie/example/resource/fingerprint_success.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/fingerprint_success.json rename to submodules/rlottie/rlottie/example/resource/fingerprint_success.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/funky_chicken.json b/submodules/rlottie/rlottie/example/resource/funky_chicken.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/funky_chicken.json rename to submodules/rlottie/rlottie/example/resource/funky_chicken.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/gears.json b/submodules/rlottie/rlottie/example/resource/gears.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/gears.json rename to submodules/rlottie/rlottie/example/resource/gears.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/gears_or_settings.json b/submodules/rlottie/rlottie/example/resource/gears_or_settings.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/gears_or_settings.json rename to submodules/rlottie/rlottie/example/resource/gears_or_settings.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/glow_loading.json b/submodules/rlottie/rlottie/example/resource/glow_loading.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/glow_loading.json rename to submodules/rlottie/rlottie/example/resource/glow_loading.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/gradient_animated_background.json b/submodules/rlottie/rlottie/example/resource/gradient_animated_background.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/gradient_animated_background.json rename to submodules/rlottie/rlottie/example/resource/gradient_animated_background.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/gradient_sleepy_loader.json b/submodules/rlottie/rlottie/example/resource/gradient_sleepy_loader.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/gradient_sleepy_loader.json rename to submodules/rlottie/rlottie/example/resource/gradient_sleepy_loader.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/happy.json b/submodules/rlottie/rlottie/example/resource/happy.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/happy.json rename to submodules/rlottie/rlottie/example/resource/happy.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/heart.json b/submodules/rlottie/rlottie/example/resource/heart.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/heart.json rename to submodules/rlottie/rlottie/example/resource/heart.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/hourglass.json b/submodules/rlottie/rlottie/example/resource/hourglass.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/hourglass.json rename to submodules/rlottie/rlottie/example/resource/hourglass.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/image_embedded.json b/submodules/rlottie/rlottie/example/resource/image_embedded.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/image_embedded.json rename to submodules/rlottie/rlottie/example/resource/image_embedded.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/image_test.json b/submodules/rlottie/rlottie/example/resource/image_test.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/image_test.json rename to submodules/rlottie/rlottie/example/resource/image_test.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/images/img_0.png b/submodules/rlottie/rlottie/example/resource/images/img_0.png similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/images/img_0.png rename to submodules/rlottie/rlottie/example/resource/images/img_0.png diff --git a/submodules/RLottie/Sources/rlottie/example/resource/imprint.json b/submodules/rlottie/rlottie/example/resource/imprint.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/imprint.json rename to submodules/rlottie/rlottie/example/resource/imprint.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/insta_camera.json b/submodules/rlottie/rlottie/example/resource/insta_camera.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/insta_camera.json rename to submodules/rlottie/rlottie/example/resource/insta_camera.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/intelia_logo_animation.json b/submodules/rlottie/rlottie/example/resource/intelia_logo_animation.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/intelia_logo_animation.json rename to submodules/rlottie/rlottie/example/resource/intelia_logo_animation.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/it's_lunch_time!.json b/submodules/rlottie/rlottie/example/resource/it's_lunch_time!.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/it's_lunch_time!.json rename to submodules/rlottie/rlottie/example/resource/it's_lunch_time!.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/jolly_walker.json b/submodules/rlottie/rlottie/example/resource/jolly_walker.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/jolly_walker.json rename to submodules/rlottie/rlottie/example/resource/jolly_walker.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/layout.edc b/submodules/rlottie/rlottie/example/resource/layout.edc similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/layout.edc rename to submodules/rlottie/rlottie/example/resource/layout.edc diff --git a/submodules/RLottie/Sources/rlottie/example/resource/layout.edj b/submodules/rlottie/rlottie/example/resource/layout.edj similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/layout.edj rename to submodules/rlottie/rlottie/example/resource/layout.edj diff --git a/submodules/RLottie/Sources/rlottie/example/resource/leap_frog_loader.json b/submodules/rlottie/rlottie/example/resource/leap_frog_loader.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/leap_frog_loader.json rename to submodules/rlottie/rlottie/example/resource/leap_frog_loader.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/like.json b/submodules/rlottie/rlottie/example/resource/like.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/like.json rename to submodules/rlottie/rlottie/example/resource/like.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loader.json b/submodules/rlottie/rlottie/example/resource/loader.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loader.json rename to submodules/rlottie/rlottie/example/resource/loader.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loader_4.json b/submodules/rlottie/rlottie/example/resource/loader_4.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loader_4.json rename to submodules/rlottie/rlottie/example/resource/loader_4.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loader_animation.json b/submodules/rlottie/rlottie/example/resource/loader_animation.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loader_animation.json rename to submodules/rlottie/rlottie/example/resource/loader_animation.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loading.json b/submodules/rlottie/rlottie/example/resource/loading.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loading.json rename to submodules/rlottie/rlottie/example/resource/loading.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loading_.json b/submodules/rlottie/rlottie/example/resource/loading_.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loading_.json rename to submodules/rlottie/rlottie/example/resource/loading_.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loading_animation.json b/submodules/rlottie/rlottie/example/resource/loading_animation.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loading_animation.json rename to submodules/rlottie/rlottie/example/resource/loading_animation.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/loading_rectangles.json b/submodules/rlottie/rlottie/example/resource/loading_rectangles.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/loading_rectangles.json rename to submodules/rlottie/rlottie/example/resource/loading_rectangles.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/looping_landscape_+_plane_+_clouds.json b/submodules/rlottie/rlottie/example/resource/looping_landscape_+_plane_+_clouds.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/looping_landscape_+_plane_+_clouds.json rename to submodules/rlottie/rlottie/example/resource/looping_landscape_+_plane_+_clouds.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/maps.json b/submodules/rlottie/rlottie/example/resource/maps.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/maps.json rename to submodules/rlottie/rlottie/example/resource/maps.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/mask.json b/submodules/rlottie/rlottie/example/resource/mask.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/mask.json rename to submodules/rlottie/rlottie/example/resource/mask.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/material_wave_loading.json b/submodules/rlottie/rlottie/example/resource/material_wave_loading.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/material_wave_loading.json rename to submodules/rlottie/rlottie/example/resource/material_wave_loading.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/matte_two_item_with_lowerlayer.json b/submodules/rlottie/rlottie/example/resource/matte_two_item_with_lowerlayer.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/matte_two_item_with_lowerlayer.json rename to submodules/rlottie/rlottie/example/resource/matte_two_item_with_lowerlayer.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/mnemonics.json b/submodules/rlottie/rlottie/example/resource/mnemonics.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/mnemonics.json rename to submodules/rlottie/rlottie/example/resource/mnemonics.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/movie_loading.json b/submodules/rlottie/rlottie/example/resource/movie_loading.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/movie_loading.json rename to submodules/rlottie/rlottie/example/resource/movie_loading.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/mughead.json b/submodules/rlottie/rlottie/example/resource/mughead.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/mughead.json rename to submodules/rlottie/rlottie/example/resource/mughead.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/night_own.json b/submodules/rlottie/rlottie/example/resource/night_own.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/night_own.json rename to submodules/rlottie/rlottie/example/resource/night_own.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/ondas.json b/submodules/rlottie/rlottie/example/resource/ondas.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/ondas.json rename to submodules/rlottie/rlottie/example/resource/ondas.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/party_penguin.json b/submodules/rlottie/rlottie/example/resource/party_penguin.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/party_penguin.json rename to submodules/rlottie/rlottie/example/resource/party_penguin.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/peli-canon.json b/submodules/rlottie/rlottie/example/resource/peli-canon.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/peli-canon.json rename to submodules/rlottie/rlottie/example/resource/peli-canon.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/personal_character.json b/submodules/rlottie/rlottie/example/resource/personal_character.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/personal_character.json rename to submodules/rlottie/rlottie/example/resource/personal_character.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/polystar_anim.json b/submodules/rlottie/rlottie/example/resource/polystar_anim.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/polystar_anim.json rename to submodules/rlottie/rlottie/example/resource/polystar_anim.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/polystar_line_clockwise_trim.json b/submodules/rlottie/rlottie/example/resource/polystar_line_clockwise_trim.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/polystar_line_clockwise_trim.json rename to submodules/rlottie/rlottie/example/resource/polystar_line_clockwise_trim.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/pumped_up.json b/submodules/rlottie/rlottie/example/resource/pumped_up.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/pumped_up.json rename to submodules/rlottie/rlottie/example/resource/pumped_up.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/red_box.json b/submodules/rlottie/rlottie/example/resource/red_box.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/red_box.json rename to submodules/rlottie/rlottie/example/resource/red_box.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/ripple_loading_animation.json b/submodules/rlottie/rlottie/example/resource/ripple_loading_animation.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/ripple_loading_animation.json rename to submodules/rlottie/rlottie/example/resource/ripple_loading_animation.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/settings.json b/submodules/rlottie/rlottie/example/resource/settings.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/settings.json rename to submodules/rlottie/rlottie/example/resource/settings.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/spin,_lil_loader_v2.json b/submodules/rlottie/rlottie/example/resource/spin,_lil_loader_v2.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/spin,_lil_loader_v2.json rename to submodules/rlottie/rlottie/example/resource/spin,_lil_loader_v2.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/square_wheel.json b/submodules/rlottie/rlottie/example/resource/square_wheel.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/square_wheel.json rename to submodules/rlottie/rlottie/example/resource/square_wheel.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/starts_transparent.json b/submodules/rlottie/rlottie/example/resource/starts_transparent.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/starts_transparent.json rename to submodules/rlottie/rlottie/example/resource/starts_transparent.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/static_dynamic_dash.json b/submodules/rlottie/rlottie/example/resource/static_dynamic_dash.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/static_dynamic_dash.json rename to submodules/rlottie/rlottie/example/resource/static_dynamic_dash.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/telegram.json b/submodules/rlottie/rlottie/example/resource/telegram.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/telegram.json rename to submodules/rlottie/rlottie/example/resource/telegram.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/tile_grid_loading_animation.json b/submodules/rlottie/rlottie/example/resource/tile_grid_loading_animation.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/tile_grid_loading_animation.json rename to submodules/rlottie/rlottie/example/resource/tile_grid_loading_animation.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/tractor.json b/submodules/rlottie/rlottie/example/resource/tractor.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/tractor.json rename to submodules/rlottie/rlottie/example/resource/tractor.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/triib_manage.json b/submodules/rlottie/rlottie/example/resource/triib_manage.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/triib_manage.json rename to submodules/rlottie/rlottie/example/resource/triib_manage.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/waves_.json b/submodules/rlottie/rlottie/example/resource/waves_.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/waves_.json rename to submodules/rlottie/rlottie/example/resource/waves_.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/windmill.json b/submodules/rlottie/rlottie/example/resource/windmill.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/windmill.json rename to submodules/rlottie/rlottie/example/resource/windmill.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/world_locations.json b/submodules/rlottie/rlottie/example/resource/world_locations.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/world_locations.json rename to submodules/rlottie/rlottie/example/resource/world_locations.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/worm.json b/submodules/rlottie/rlottie/example/resource/worm.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/worm.json rename to submodules/rlottie/rlottie/example/resource/worm.json diff --git a/submodules/RLottie/Sources/rlottie/example/resource/you're_in!.json b/submodules/rlottie/rlottie/example/resource/you're_in!.json similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/resource/you're_in!.json rename to submodules/rlottie/rlottie/example/resource/you're_in!.json diff --git a/submodules/RLottie/Sources/rlottie/example/uxsampletest.cpp b/submodules/rlottie/rlottie/example/uxsampletest.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/example/uxsampletest.cpp rename to submodules/rlottie/rlottie/example/uxsampletest.cpp diff --git a/submodules/RLottie/Sources/rlottie/inc/CMakeLists.txt b/submodules/rlottie/rlottie/inc/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/inc/CMakeLists.txt rename to submodules/rlottie/rlottie/inc/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/inc/meson.build b/submodules/rlottie/rlottie/inc/meson.build similarity index 100% rename from submodules/RLottie/Sources/rlottie/inc/meson.build rename to submodules/rlottie/rlottie/inc/meson.build diff --git a/submodules/RLottie/Sources/rlottie/inc/rlottie.h b/submodules/rlottie/rlottie/inc/rlottie.h similarity index 87% rename from submodules/RLottie/Sources/rlottie/inc/rlottie.h rename to submodules/rlottie/rlottie/inc/rlottie.h index ab70720b2b..1436539dd3 100644 --- a/submodules/RLottie/Sources/rlottie/inc/rlottie.h +++ b/submodules/rlottie/rlottie/inc/rlottie.h @@ -23,26 +23,18 @@ #include #include -#ifdef _WIN32 -#ifdef LOT_BUILD -#ifdef DLL_EXPORT -#define LOT_EXPORT __declspec(dllexport) +#if defined _WIN32 || defined __CYGWIN__ + #ifdef LOT_BUILD + #define LOT_EXPORT __declspec(dllexport) + #else + #define LOT_EXPORT __declspec(dllimport) + #endif #else -#define LOT_EXPORT -#endif -#else -#define LOT_EXPORT __declspec(dllimport) -#endif -#else -#ifdef __GNUC__ -#if __GNUC__ >= 4 -#define LOT_EXPORT __attribute__((visibility("default"))) -#else -#define LOT_EXPORT -#endif -#else -#define LOT_EXPORT -#endif + #ifdef LOT_BUILD + #define LOT_EXPORT __attribute__ ((visibility ("default"))) + #else + #define LOT_EXPORT + #endif #endif class AnimationImpl; @@ -51,6 +43,23 @@ struct LOTLayerNode; namespace rlottie { +/** + * @brief Configures rlottie model cache policy. + * + * Provides Library level control to configure model cache + * policy. Setting it to 0 will disable + * the cache as well as flush all the previously cached content. + * + * @param[in] cacheSize Maximum Model Cache size. + * + * @note to disable Caching configure with 0 size. + * @note to flush the current Cache content configure it with 0 and + * then reconfigure with the new size. + * + * @internal + */ +LOT_EXPORT void configureModelCacheSize(size_t cacheSize); + struct Color { Color() = default; Color(float r, float g , float b):_r(r), _g(g), _b(b){} @@ -251,6 +260,10 @@ public: * @brief Constructs an animation object from file path. * * @param[in] path Lottie resource file path + * @param[in] cachePolicy whether to cache or not the model data. + * use only when need to explicit disabl caching for a + * particular resource. To disable caching at library level + * use @see configureModelCacheSize() instead. * * @return Animation object that can render the contents of the * Lottie resource represented by file path. @@ -258,7 +271,7 @@ public: * @internal */ static std::unique_ptr - loadFromFile(const std::string &path); + loadFromFile(const std::string &path, bool cachePolicy=true); /** * @brief Constructs an animation object from JSON string data. @@ -266,6 +279,10 @@ public: * @param[in] jsonData The JSON string data. * @param[in] key the string that will be used to cache the JSON string data. * @param[in] resourcePath the path will be used to search for external resource. + * @param[in] cachePolicy whether to cache or not the model data. + * use only when need to explicit disabl caching for a + * particular resource. To disable caching at library level + * use @see configureModelCacheSize() instead. * * @return Animation object that can render the contents of the * Lottie resource represented by JSON string data. @@ -273,7 +290,10 @@ public: * @internal */ static std::unique_ptr - loadFromData(std::string jsonData, const std::string &key, const std::string &resourcePath=""); + loadFromData(std::string jsonData, const std::string &key, + const std::string &resourcePath="", bool cachePolicy=true, + const std::vector> + &colorReplacements = {}); /** * @brief Returns default framerate of the Lottie resource. @@ -348,6 +368,7 @@ public: * * @param[in] frameNo Content corresponds to the @p frameNo needs to be drawn * @param[in] surface Surface in which content will be drawn + * @param[in] keepAspectRatio whether to keep the aspect ratio while scaling the content. * * @return future that will hold the result when rendering finished. * @@ -356,7 +377,7 @@ public: * @see Surface * @internal */ - std::future render(size_t frameNo, Surface surface); + std::future render(size_t frameNo, Surface surface, bool keepAspectRatio=true); /** * @brief Renders the content to surface synchronously. @@ -364,10 +385,11 @@ public: * * @param[in] frameNo Content corresponds to the @p frameNo needs to be drawn * @param[in] surface Surface in which content will be drawn + * @param[in] keepAspectRatio whether to keep the aspect ratio while scaling the content. * * @internal */ - void renderSync(size_t frameNo, Surface surface); + void renderSync(size_t frameNo, Surface surface, bool keepAspectRatio=true); /** * @brief Returns root layer of the composition updated with @@ -423,8 +445,6 @@ public: * @internal */ ~Animation(); - - bool isTgs() const; private: void setValue(Color_Type, Property, const std::string &, Color); diff --git a/submodules/RLottie/Sources/rlottie/inc/rlottie_capi.h b/submodules/rlottie/rlottie/inc/rlottie_capi.h similarity index 69% rename from submodules/RLottie/Sources/rlottie/inc/rlottie_capi.h rename to submodules/rlottie/rlottie/inc/rlottie_capi.h index a5cb70ad50..653c86d086 100644 --- a/submodules/RLottie/Sources/rlottie/inc/rlottie_capi.h +++ b/submodules/rlottie/rlottie/inc/rlottie_capi.h @@ -27,6 +27,19 @@ extern "C" { #endif +typedef enum { + LOTTIE_ANIMATION_PROPERTY_FILLCOLOR, /*!< Color property of Fill object , value type is float [0 ... 1] */ + LOTTIE_ANIMATION_PROPERTY_FILLOPACITY, /*!< Opacity property of Fill object , value type is float [ 0 .. 100] */ + LOTTIE_ANIMATION_PROPERTY_STROKECOLOR, /*!< Color property of Stroke object , value type is float [0 ... 1] */ + LOTTIE_ANIMATION_PROPERTY_STROKEOPACITY, /*!< Opacity property of Stroke object , value type is float [ 0 .. 100] */ + LOTTIE_ANIMATION_PROPERTY_STROKEWIDTH, /*!< stroke with property of Stroke object , value type is float */ + LOTTIE_ANIMATION_PROPERTY_TR_ANCHOR, /*!< Transform Anchor property of Layer and Group object , value type is int */ + LOTTIE_ANIMATION_PROPERTY_TR_POSITION, /*!< Transform Position property of Layer and Group object , value type is int */ + LOTTIE_ANIMATION_PROPERTY_TR_SCALE, /*!< Transform Scale property of Layer and Group object , value type is float range[0 ..100] */ + LOTTIE_ANIMATION_PROPERTY_TR_ROTATION, /*!< Transform Scale property of Layer and Group object , value type is float. range[0 .. 360] in degrees*/ + LOTTIE_ANIMATION_PROPERTY_TR_OPACITY /*!< Transform Opacity property of Layer and Group object , value type is float [ 0 .. 100] */ +}Lottie_Animation_Property; + typedef struct Lottie_Animation_S Lottie_Animation; /** @@ -151,9 +164,7 @@ LOT_EXPORT double lottie_animation_get_framerate(const Lottie_Animation *animati * @ingroup Lottie_Animation * @internal */ -LOT_EXPORT const LOTLayerNode * lottie_animation_render_tree(Lottie_Animation *animation, - size_t frame_num, - size_t width, size_t height); +LOT_EXPORT const LOTLayerNode *lottie_animation_render_tree(Lottie_Animation *animation, size_t frame_num, size_t width, size_t height); /** * @brief Maps position to frame number and returns it. @@ -184,13 +195,7 @@ LOT_EXPORT size_t lottie_animation_get_frame_at_pos(const Lottie_Animation *anim * @ingroup Lottie_Animation * @internal */ -LOT_EXPORT void -lottie_animation_render(Lottie_Animation *animation, - size_t frame_num, - uint32_t *buffer, - size_t width, - size_t height, - size_t bytes_per_line); +LOT_EXPORT void lottie_animation_render(Lottie_Animation *animation, size_t frame_num, uint32_t *buffer, size_t width, size_t height, size_t bytes_per_line); /** * @brief Request to render the content of the frame @p frame_num to buffer @p buffer asynchronously. @@ -207,13 +212,7 @@ lottie_animation_render(Lottie_Animation *animation, * @ingroup Lottie_Animation * @internal */ -LOT_EXPORT void -lottie_animation_render_async(Lottie_Animation *animation, - size_t frame_num, - uint32_t *buffer, - size_t width, - size_t height, - size_t bytes_per_line); +LOT_EXPORT void lottie_animation_render_async(Lottie_Animation *animation, size_t frame_num, uint32_t *buffer, size_t width, size_t height, size_t bytes_per_line); /** * @brief Request to finish the current async renderer job for this animation object. @@ -230,8 +229,31 @@ lottie_animation_render_async(Lottie_Animation *animation, * @ingroup Lottie_Animation * @internal */ -LOT_EXPORT uint32_t * -lottie_animation_render_flush(Lottie_Animation *animation); +LOT_EXPORT uint32_t *lottie_animation_render_flush(Lottie_Animation *animation); + + +/** + * @brief Request to change the properties of this animation object. + * Keypath should conatin object names separated by (.) and can handle globe(**) or wildchar(*) + * + * @usage + * To change fillcolor property of fill1 object in the layer1->group1->fill1 hirarchy to RED color + * + * lottie_animation_property_override(animation, LOTTIE_ANIMATION_PROPERTY_FILLCOLOR, "layer1.group1.fill1", 1.0, 0.0, 0.0); + * + * if all the color property inside group1 needs to be changed to GREEN color + * + * lottie_animation_property_override(animation, LOTTIE_ANIMATION_PROPERTY_FILLCOLOR, "**.group1.**", 1.0, 0.0, 0.0); + * + * @param[in] animation Animation object. + * @param[in] type Property type. (@p Lottie_Animation_Property) + * @param[in] keypath Specific content of target. + * @param[in] ... Property values. + * + * @ingroup Lottie_Animation + * @internal + * */ +LOT_EXPORT void lottie_animation_property_override(Lottie_Animation *animation, const Lottie_Animation_Property type, const char *keypath, ...); #ifdef __cplusplus } diff --git a/submodules/RLottie/Sources/rlottie/inc/rlottiecommon.h b/submodules/rlottie/rlottie/inc/rlottiecommon.h similarity index 73% rename from submodules/RLottie/Sources/rlottie/inc/rlottiecommon.h rename to submodules/rlottie/rlottie/inc/rlottiecommon.h index b3ac0229e6..07e751a9f0 100644 --- a/submodules/RLottie/Sources/rlottie/inc/rlottiecommon.h +++ b/submodules/rlottie/rlottie/inc/rlottiecommon.h @@ -19,26 +19,18 @@ #ifndef _RLOTTIE_COMMON_H_ #define _RLOTTIE_COMMON_H_ -#ifdef _WIN32 -#ifdef LOT_BUILD -#ifdef DLL_EXPORT -#define LOT_EXPORT __declspec(dllexport) +#if defined _WIN32 || defined __CYGWIN__ + #ifdef LOT_BUILD + #define LOT_EXPORT __declspec(dllexport) + #else + #define LOT_EXPORT __declspec(dllimport) + #endif #else -#define LOT_EXPORT -#endif -#else -#define LOT_EXPORT __declspec(dllimport) -#endif -#else -#ifdef __GNUC__ -#if __GNUC__ >= 4 -#define LOT_EXPORT __attribute__((visibility("default"))) -#else -#define LOT_EXPORT -#endif -#else -#define LOT_EXPORT -#endif + #ifdef LOT_BUILD + #define LOT_EXPORT __attribute__ ((visibility ("default"))) + #else + #define LOT_EXPORT + #endif #endif @@ -60,22 +52,6 @@ * @ingroup Lottie_Animation */ - -/** - * @brief Enumeration for Lottie Player error code. - */ -typedef enum -{ - //TODO: Coding convention?? - LOT_ANIMATION_ERROR_NONE = 0, - LOT_ANIMATION_ERROR_NOT_PERMITTED, - LOT_ANIMATION_ERROR_OUT_OF_MEMORY, - LOT_ANIMATION_ERROR_INVALID_PARAMETER, - LOT_ANIMATION_ERROR_RESULT_OUT_OF_RANGE, - LOT_ANIMATION_ERROR_ALREADY_IN_PROGRESS, - LOT_ANIMATION_ERROR_UNKNOWN -} LOTErrorType; - typedef enum { BrushSolid = 0, @@ -125,12 +101,12 @@ typedef enum typedef struct LOTMask { struct { const float *ptPtr; - int ptCount; + size_t ptCount; const char* elmPtr; - int elmCount; + size_t elmCount; } mPath; LOTMaskType mMode; - int mAlpha; + unsigned char mAlpha; }LOTMask; typedef enum @@ -151,9 +127,9 @@ typedef struct LOTNode { struct { const float *ptPtr; - int ptCount; - const char* elmPtr; - int elmCount; + size_t ptCount; + const char *elmPtr; + size_t elmCount; } mPath; struct { @@ -162,18 +138,18 @@ typedef struct LOTNode { struct { unsigned char enable; - int width; + float width; LOTCapStyle cap; LOTJoinStyle join; - int meterLimit; - float* dashArray; + float miterLimit; + float *dashArray; int dashArraySize; } mStroke; struct { - LOTGradientType type; + LOTGradientType type; LOTGradientStop *stopPtr; - unsigned int stopCount; + size_t stopCount; struct { float x, y; } start, end, center, focal; @@ -182,9 +158,9 @@ typedef struct LOTNode { } mGradient; struct { - unsigned char* data; - int width; - int height; + unsigned char *data; + size_t width; + size_t height; struct { float m11; float m12; float m13; float m21; float m22; float m23; @@ -203,30 +179,30 @@ typedef struct LOTLayerNode { struct { LOTMask *ptr; - unsigned int size; + size_t size; } mMaskList; struct { const float *ptPtr; - int ptCount; - const char* elmPtr; - int elmCount; + size_t ptCount; + const char *elmPtr; + size_t elmCount; } mClipPath; struct { struct LOTLayerNode **ptr; - unsigned int size; + size_t size; } mLayerList; struct { LOTNode **ptr; - unsigned int size; + size_t size; } mNodeList; LOTMatteType mMatte; int mVisible; - int mAlpha; - const char *name; + unsigned char mAlpha; + const char *keypath; } LOTLayerNode; diff --git a/submodules/RLottie/Sources/rlottie/licenses/COPYING.FTL b/submodules/rlottie/rlottie/licenses/COPYING.FTL similarity index 100% rename from submodules/RLottie/Sources/rlottie/licenses/COPYING.FTL rename to submodules/rlottie/rlottie/licenses/COPYING.FTL diff --git a/submodules/RLottie/Sources/rlottie/licenses/COPYING.LGPL b/submodules/rlottie/rlottie/licenses/COPYING.LGPL similarity index 100% rename from submodules/RLottie/Sources/rlottie/licenses/COPYING.LGPL rename to submodules/rlottie/rlottie/licenses/COPYING.LGPL diff --git a/submodules/RLottie/Sources/rlottie/licenses/COPYING.PIX b/submodules/rlottie/rlottie/licenses/COPYING.PIX similarity index 100% rename from submodules/RLottie/Sources/rlottie/licenses/COPYING.PIX rename to submodules/rlottie/rlottie/licenses/COPYING.PIX diff --git a/submodules/RLottie/Sources/rlottie/licenses/COPYING.RPD b/submodules/rlottie/rlottie/licenses/COPYING.RPD similarity index 100% rename from submodules/RLottie/Sources/rlottie/licenses/COPYING.RPD rename to submodules/rlottie/rlottie/licenses/COPYING.RPD diff --git a/submodules/RLottie/Sources/rlottie/licenses/COPYING.STB b/submodules/rlottie/rlottie/licenses/COPYING.STB similarity index 100% rename from submodules/RLottie/Sources/rlottie/licenses/COPYING.STB rename to submodules/rlottie/rlottie/licenses/COPYING.STB diff --git a/submodules/rlottie/rlottie/meson.build b/submodules/rlottie/rlottie/meson.build new file mode 100644 index 0000000000..e4d1669aec --- /dev/null +++ b/submodules/rlottie/rlottie/meson.build @@ -0,0 +1,100 @@ +project('rlottie', + 'cpp', + default_options : ['warning_level=3', 'werror=true', 'cpp_std=c++14', 'optimization=s'], + version : '0.0.1', + license : 'Apache') + +add_project_arguments('-DDEMO_DIR="@0@/example/resource/"'.format(meson.current_source_dir()), language : 'cpp') + +inc = [include_directories('inc')] +config_dir = include_directories('.') +inc += config_dir + +config_h = configuration_data() + +if get_option('thread') == true + config_h.set10('LOTTIE_THREAD_SUPPORT', true) +endif + +if get_option('module') == true + config_h.set10('LOTTIE_IMAGE_MODULE_SUPPORT', true) +endif + +if get_option('cache') == true + config_h.set10('LOTTIE_CACHE_SUPPORT', true) +endif + +if get_option('log') == true + config_h.set10('LOTTIE_LOGGING_SUPPORT', true) +endif + +if get_option('dumptree') == true + config_h.set10('LOTTIE_LOGGING_SUPPORT', true) + config_h.set10('LOTTIE_DUMP_TREE_SUPPORT', true) +endif + + +configure_file( + output: 'config.h', + configuration: config_h +) + + +subdir('inc') +subdir('src') + +if get_option('example') == true + subdir('example') +endif + +if get_option('test') == true + subdir('test') +endif + + +if get_option('cmake') == true and host_machine.system() != 'windows' + cmake_bin = find_program('cmake', required: false) + if cmake_bin.found() + cmake = import('cmake') + cmake.write_basic_package_version_file( + version: meson.project_version(), + name: 'rlottie', + ) + + cmakeconf = configuration_data() + cmakeconf.set('VERSION', meson.project_version()) + + cmake.configure_package_config_file( + input: meson.current_source_dir() + '/cmake/rlottieConfig.cmake.in', + name: 'rlottie', + configuration: cmakeconf, + ) + endif +endif + +summary = ''' + +Summary: + rlottie version : @0@ + Build type : @1@ + Thread Support : @2@ + Module Support : @3@ + Cache Support : @4@ + Example : @5@ + Test : @6@ + Prefix : @7@ +'''.format( + meson.project_version(), + get_option('buildtype'), + get_option('thread'), + get_option('module'), + get_option('cache'), + get_option('example'), + get_option('test'), + get_option('prefix'), + ) + +message(summary) + + + diff --git a/submodules/rlottie/rlottie/meson_options.txt b/submodules/rlottie/rlottie/meson_options.txt new file mode 100644 index 0000000000..bf4a854b3e --- /dev/null +++ b/submodules/rlottie/rlottie/meson_options.txt @@ -0,0 +1,42 @@ +option('thread', + type: 'boolean', + value: true, + description: 'Enable threading in rlottie') + +option('cache', + type: 'boolean', + value: true, + description: 'Enable cache support in rlottie') + +option('module', + type: 'boolean', + value: true, + description: 'Enable module support in rlottie') + +option('log', + type: 'boolean', + value: false, + description: 'Enable logging in rlottie') + +option('dumptree', + type: 'boolean', + value: false, + description: 'Enable logging the rlottie tree in rlottie') + +option('test', + type: 'boolean', + value: false, + description: 'Enable building unit tests') + +option('example', + type: 'boolean', + value: true, + description: 'Enable building examples') + +option('cmake', + type: 'boolean', + value: false, + description: 'Enable Generating CMake config files') + + + diff --git a/submodules/RLottie/Sources/rlottie/packaging/rlottie.manifest b/submodules/rlottie/rlottie/packaging/rlottie.manifest similarity index 100% rename from submodules/RLottie/Sources/rlottie/packaging/rlottie.manifest rename to submodules/rlottie/rlottie/packaging/rlottie.manifest diff --git a/submodules/RLottie/Sources/rlottie/packaging/rlottie.spec b/submodules/rlottie/rlottie/packaging/rlottie.spec similarity index 65% rename from submodules/RLottie/Sources/rlottie/packaging/rlottie.spec rename to submodules/rlottie/rlottie/packaging/rlottie.spec index b9e3cc0dc0..06aa9c16f9 100644 --- a/submodules/RLottie/Sources/rlottie/packaging/rlottie.spec +++ b/submodules/rlottie/rlottie/packaging/rlottie.spec @@ -6,7 +6,8 @@ Group: UI Framework/Services License: LGPL-v2.1 URL: http://www.tizen.org/ Source0: %{name}-%{version}.tar.gz -BuildRequires: cmake +BuildRequires: meson +BuildRequires: ninja Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig @@ -29,28 +30,24 @@ rlottie library (devel) %build -export CFLAGS+=" -fvisibility=hidden -fPIC -Wall -O2" -export LDFLAGS+=" " -%ifarch %{arm} -export CXXFLAGS+=" -D_ARCH_ARM_ -mfpu=neon" -%endif +export DESTDIR=%{buildroot} +export CXXFLAGS+=" -std=gnu++14" -%ifarch %{arm} -cmake . -DCMAKE_INSTALL_PREFIX=/usr \ - -DLIB_INSTALL_DIR:PATH=%{_libdir} \ - -DARCH="arm" -%else -cmake . -DCMAKE_INSTALL_PREFIX=/usr \ - -DLIB_INSTALL_DIR:PATH=%{_libdir} -%endif - - -make %{?jobs:-j%jobs} +meson setup \ + --prefix /usr \ + --libdir %{_libdir} \ + builddir 2>&1 +ninja \ + -C builddir \ + -j %(echo "`/usr/bin/getconf _NPROCESSORS_ONLN`") %install -%make_install + +export DESTDIR=%{buildroot} + +ninja -C builddir install %files %defattr(-,root,root,-) @@ -65,5 +62,4 @@ make %{?jobs:-j%jobs} %{_libdir}/librlottie.so %{_libdir}/librlottie-image-loader.so -%{_libdir}/cmake/rlottie/*.cmake %{_libdir}/pkgconfig/rlottie.pc diff --git a/submodules/RLottie/Sources/rlottie/rlottie.pc.in b/submodules/rlottie/rlottie/rlottie.pc.in similarity index 100% rename from submodules/RLottie/Sources/rlottie/rlottie.pc.in rename to submodules/rlottie/rlottie/rlottie.pc.in diff --git a/submodules/RLottie/Sources/rlottie/src/CMakeLists.txt b/submodules/rlottie/rlottie/src/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/CMakeLists.txt rename to submodules/rlottie/rlottie/src/CMakeLists.txt diff --git a/submodules/rlottie/rlottie/src/binding/.lottieplayer.cpp.swp b/submodules/rlottie/rlottie/src/binding/.lottieplayer.cpp.swp new file mode 100644 index 0000000000..e312a378e0 Binary files /dev/null and b/submodules/rlottie/rlottie/src/binding/.lottieplayer.cpp.swp differ diff --git a/submodules/RLottie/Sources/rlottie/src/binding/CMakeLists.txt b/submodules/rlottie/rlottie/src/binding/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/binding/CMakeLists.txt rename to submodules/rlottie/rlottie/src/binding/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/src/binding/c/CMakeLists.txt b/submodules/rlottie/rlottie/src/binding/c/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/binding/c/CMakeLists.txt rename to submodules/rlottie/rlottie/src/binding/c/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/src/binding/c/lottieanimation_capi.cpp b/submodules/rlottie/rlottie/src/binding/c/lottieanimation_capi.cpp similarity index 66% rename from submodules/RLottie/Sources/rlottie/src/binding/c/lottieanimation_capi.cpp rename to submodules/rlottie/rlottie/src/binding/c/lottieanimation_capi.cpp index d40df28b1a..7793607f12 100644 --- a/submodules/RLottie/Sources/rlottie/src/binding/c/lottieanimation_capi.cpp +++ b/submodules/rlottie/rlottie/src/binding/c/lottieanimation_capi.cpp @@ -17,11 +17,14 @@ */ #include "rlottie.h" +#include "rlottie_capi.h" #include "vdebug.h" using namespace rlottie; extern "C" { +#include +#include struct Lottie_Animation_S { @@ -148,4 +151,58 @@ lottie_animation_render_flush(Lottie_Animation_S *animation) return animation->mBufferRef; } +LOT_EXPORT void +lottie_animation_property_override(Lottie_Animation_S *animation, + const Lottie_Animation_Property type, + const char *keypath, + ...) +{ + va_list prop; + va_start(prop, keypath); + + switch(type) { + case LOTTIE_ANIMATION_PROPERTY_FILLCOLOR: { + double r = va_arg(prop, double); + double g = va_arg(prop, double); + double b = va_arg(prop, double); + if (r > 1 || r < 0 || g > 1 || g < 0 || b > 1 || b < 0) break; + animation->mAnimation->setValue(keypath, rlottie::Color(r, g, b)); + break; + } + case LOTTIE_ANIMATION_PROPERTY_FILLOPACITY: { + double opacity = va_arg(prop, double); + if (opacity > 100 || opacity < 0) break; + animation->mAnimation->setValue(keypath, (float)opacity); + break; + } + case LOTTIE_ANIMATION_PROPERTY_STROKECOLOR: { + double r = va_arg(prop, double); + double g = va_arg(prop, double); + double b = va_arg(prop, double); + if (r > 1 || r < 0 || g > 1 || g < 0 || b > 1 || b < 0) break; + animation->mAnimation->setValue(keypath, rlottie::Color(r, g, b)); + break; + } + case LOTTIE_ANIMATION_PROPERTY_STROKEOPACITY: { + double opacity = va_arg(prop, double); + if (opacity > 100 || opacity < 0) break; + animation->mAnimation->setValue(keypath, (float)opacity); + break; + } + case LOTTIE_ANIMATION_PROPERTY_STROKEWIDTH: { + double width = va_arg(prop, double); + if (width < 0) break; + animation->mAnimation->setValue(keypath, (float)width); + break; + } + case LOTTIE_ANIMATION_PROPERTY_TR_ANCHOR: + case LOTTIE_ANIMATION_PROPERTY_TR_POSITION: + case LOTTIE_ANIMATION_PROPERTY_TR_SCALE: + case LOTTIE_ANIMATION_PROPERTY_TR_ROTATION: + case LOTTIE_ANIMATION_PROPERTY_TR_OPACITY: + //@TODO handle propery update. + break; + } + va_end(prop); +} } diff --git a/submodules/RLottie/Sources/rlottie/src/binding/c/meson.build b/submodules/rlottie/rlottie/src/binding/c/meson.build similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/binding/c/meson.build rename to submodules/rlottie/rlottie/src/binding/c/meson.build diff --git a/submodules/RLottie/Sources/rlottie/src/binding/meson.build b/submodules/rlottie/rlottie/src/binding/meson.build similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/binding/meson.build rename to submodules/rlottie/rlottie/src/binding/meson.build diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/CMakeLists.txt b/submodules/rlottie/rlottie/src/lottie/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/CMakeLists.txt rename to submodules/rlottie/rlottie/src/lottie/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieanimation.cpp b/submodules/rlottie/rlottie/src/lottie/lottieanimation.cpp similarity index 87% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieanimation.cpp rename to submodules/rlottie/rlottie/src/lottie/lottieanimation.cpp index 91514858e7..58d1b13bca 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieanimation.cpp +++ b/submodules/rlottie/rlottie/src/lottie/lottieanimation.cpp @@ -25,6 +25,11 @@ using namespace rlottie; +LOT_EXPORT void configureModelCacheSize(size_t cacheSize) +{ + LottieLoader::configureModelCacheSize(cacheSize); +} + struct RenderTask { RenderTask() { receiver = sender.get_future(); } std::promise sender; @@ -32,23 +37,23 @@ struct RenderTask { AnimationImpl * playerImpl{nullptr}; size_t frameNo{0}; Surface surface; + bool keepAspectRatio{true}; }; using SharedRenderTask = std::shared_ptr; class AnimationImpl { public: void init(const std::shared_ptr &model); - bool update(size_t frameNo, const VSize &size); - VSize size() const { return mCompItem->size(); } + bool update(size_t frameNo, const VSize &size, bool keepAspectRatio); + VSize size() const { return mModel->size(); } double duration() const { return mModel->duration(); } double frameRate() const { return mModel->frameRate(); } size_t totalFrame() const { return mModel->totalFrame(); } size_t frameAtPos(double pos) const { return mModel->frameAtPos(pos); } - Surface render(size_t frameNo, const Surface &surface); - std::future renderAsync(size_t frameNo, Surface &&surface); + Surface render(size_t frameNo, const Surface &surface, bool keepAspectRatio); + std::future renderAsync(size_t frameNo, Surface &&surface, bool keepAspectRatio); const LOTLayerNode * renderTree(size_t frameNo, const VSize &size); - bool isTgs() const { return mModel->isTgs(); } - + const LayerInfoList &layerInfoList() const { return mModel->layerInfoList(); @@ -72,13 +77,13 @@ void AnimationImpl::setValue(const std::string &keypath, LOTVariant &&value) const LOTLayerNode *AnimationImpl::renderTree(size_t frameNo, const VSize &size) { - if (update(frameNo, size)) { + if (update(frameNo, size, true)) { mCompItem->buildRenderTree(); } return mCompItem->renderTree(); } -bool AnimationImpl::update(size_t frameNo, const VSize &size) +bool AnimationImpl::update(size_t frameNo, const VSize &size, bool keepAspectRatio) { frameNo += mModel->startFrame(); @@ -86,11 +91,10 @@ bool AnimationImpl::update(size_t frameNo, const VSize &size) if (frameNo < mModel->startFrame()) frameNo = mModel->startFrame(); - mCompItem->resize(size); - return mCompItem->update(frameNo); + return mCompItem->update(int(frameNo), size, keepAspectRatio); } -Surface AnimationImpl::render(size_t frameNo, const Surface &surface) +Surface AnimationImpl::render(size_t frameNo, const Surface &surface, bool keepAspectRatio) { bool renderInProgress = mRenderInProgress.load(); if (renderInProgress) { @@ -100,7 +104,7 @@ Surface AnimationImpl::render(size_t frameNo, const Surface &surface) mRenderInProgress.store(true); update(frameNo, - VSize(surface.drawRegionWidth(), surface.drawRegionHeight())); + VSize(int(surface.drawRegionWidth()), int(surface.drawRegionHeight())), keepAspectRatio); mCompItem->render(surface); mRenderInProgress.store(false); @@ -150,7 +154,7 @@ class RenderTaskScheduler { if (!success && !_q[i].pop(task)) break; auto result = - task->playerImpl->render(task->frameNo, task->surface); + task->playerImpl->render(task->frameNo, task->surface, task->keepAspectRatio); task->sender.set_value(result); } } @@ -204,7 +208,7 @@ public: std::future process(SharedRenderTask task) { - auto result = task->playerImpl->render(task->frameNo, task->surface); + auto result = task->playerImpl->render(task->frameNo, task->surface, task->keepAspectRatio); task->sender.set_value(result); return std::move(task->receiver); } @@ -212,7 +216,8 @@ public: #endif std::future AnimationImpl::renderAsync(size_t frameNo, - Surface &&surface) + Surface &&surface, + bool keepAspectRatio) { if (!mTask) { mTask = std::make_shared(); @@ -223,6 +228,7 @@ std::future AnimationImpl::renderAsync(size_t frameNo, mTask->playerImpl = this; mTask->frameNo = frameNo; mTask->surface = std::move(surface); + mTask->keepAspectRatio = keepAspectRatio; return RenderTaskScheduler::instance().process(mTask); } @@ -234,7 +240,9 @@ std::future AnimationImpl::renderAsync(size_t frameNo, */ std::unique_ptr Animation::loadFromData( std::string jsonData, const std::string &key, - const std::string &resourcePath) + const std::string &resourcePath, bool cachePolicy, + const std::vector> + &colorReplacements) { if (jsonData.empty()) { vWarning << "jason data is empty"; @@ -243,7 +251,8 @@ std::unique_ptr Animation::loadFromData( LottieLoader loader; if (loader.loadFromData(std::move(jsonData), key, - (resourcePath.empty() ? " " : resourcePath))) { + (resourcePath.empty() ? " " : resourcePath), + cachePolicy, colorReplacements)) { auto animation = std::unique_ptr(new Animation); animation->d->init(loader.model()); return animation; @@ -251,7 +260,8 @@ std::unique_ptr Animation::loadFromData( return nullptr; } -std::unique_ptr Animation::loadFromFile(const std::string &path) +std::unique_ptr +Animation::loadFromFile(const std::string &path, bool cachePolicy) { if (path.empty()) { vWarning << "File path is empty"; @@ -259,7 +269,7 @@ std::unique_ptr Animation::loadFromFile(const std::string &path) } LottieLoader loader; - if (loader.load(path)) { + if (loader.load(path, cachePolicy)) { auto animation = std::unique_ptr(new Animation); animation->d->init(loader.model()); return animation; @@ -267,11 +277,6 @@ std::unique_ptr Animation::loadFromFile(const std::string &path) return nullptr; } -bool Animation::isTgs() const -{ - return d->isTgs(); -} - void Animation::size(size_t &width, size_t &height) const { VSize sz = d->size(); @@ -303,17 +308,17 @@ size_t Animation::frameAtPos(double pos) const LOTLayerNode *Animation::renderTree(size_t frameNo, size_t width, size_t height) const { - return d->renderTree(frameNo, VSize(width, height)); + return d->renderTree(frameNo, VSize(int(width), int(height))); } -std::future Animation::render(size_t frameNo, Surface surface) +std::future Animation::render(size_t frameNo, Surface surface, bool keepAspectRatio) { - return d->renderAsync(frameNo, std::move(surface)); + return d->renderAsync(frameNo, std::move(surface), keepAspectRatio); } -void Animation::renderSync(size_t frameNo, Surface surface) +void Animation::renderSync(size_t frameNo, Surface surface, bool keepAspectRatio) { - d->render(frameNo, surface); + d->render(frameNo, surface, keepAspectRatio); } const LayerInfoList &Animation::layers() const @@ -373,14 +378,9 @@ void Animation::setValue(Point_Type, Property prop, const std::string &keypath, d->setValue(keypath, LOTVariant(prop, value)); } +Animation::~Animation() = default; Animation::Animation() : d(std::make_unique()) {} -/* - * this is only to supress build fail - * because unique_ptr expects the destructor in the same translation unit. - */ -Animation::~Animation() {} - Surface::Surface(uint32_t *buffer, size_t width, size_t height, size_t bytesPerLine) : mBuffer(buffer), diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieitem.cpp b/submodules/rlottie/rlottie/src/lottie/lottieitem.cpp similarity index 91% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieitem.cpp rename to submodules/rlottie/rlottie/src/lottie/lottieitem.cpp index 8dcdebe274..09d14a4e67 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieitem.cpp +++ b/submodules/rlottie/rlottie/src/lottie/lottieitem.cpp @@ -69,8 +69,18 @@ static bool strokeProp(rlottie::Property prop) } } +static bool isGoodParentLayer(LOTLayerItem *parent, LOTLayerItem *child) { + do { + if (parent == child) { + return false; + } + parent = parent->resolvedParentLayer(); + } while (parent); + return true; +} + LOTCompItem::LOTCompItem(LOTModel *model) - : mUpdateViewBox(false), mCurFrameNo(-1) + : mCurFrameNo(-1) { mCompData = model->mRoot.get(); mRootLayer = createLayerItem(mCompData->mRootLayer.get()); @@ -109,43 +119,36 @@ std::unique_ptr LOTCompItem::createLayerItem( } } -void LOTCompItem::resize(const VSize &size) -{ - if (mViewSize == size) return; - mViewSize = size; - mUpdateViewBox = true; -} - -VSize LOTCompItem::size() const -{ - return mViewSize; -} - -bool LOTCompItem::update(int frameNo) +bool LOTCompItem::update(int frameNo, const VSize &size, bool keepAspectRatio) { // check if cached frame is same as requested frame. - if (!mUpdateViewBox && (mCurFrameNo == frameNo)) return false; + if ((mViewSize == size) && + (mCurFrameNo == frameNo) && + (mKeepAspectRatio == keepAspectRatio)) return false; + + mViewSize = size; + mCurFrameNo = frameNo; + mKeepAspectRatio = keepAspectRatio; /* * if viewbox dosen't scale exactly to the viewport * we scale the viewbox keeping AspectRatioPreserved and then align the * viewbox to the viewport using AlignCenter rule. */ + VMatrix m; VSize viewPort = mViewSize; VSize viewBox = mCompData->size(); - float sx = float(viewPort.width()) / viewBox.width(); float sy = float(viewPort.height()) / viewBox.height(); - float scale = fmin(sx, sy); - float tx = (viewPort.width() - viewBox.width() * scale) * 0.5; - float ty = (viewPort.height() - viewBox.height() * scale) * 0.5; - - VMatrix m; - m.translate(tx, ty).scale(scale, scale); + if (mKeepAspectRatio) { + float scale = std::min(sx, sy); + float tx = (viewPort.width() - viewBox.width() * scale) * 0.5f; + float ty = (viewPort.height() - viewBox.height() * scale) * 0.5f; + m.translate(tx, ty).scale(scale, scale); + } else { + m.scale(sx, sy); + } mRootLayer->update(frameNo, m, 1.0); - - mCurFrameNo = frameNo; - mUpdateViewBox = false; return true; } @@ -161,15 +164,15 @@ const LOTLayerNode *LOTCompItem::renderTree() const bool LOTCompItem::render(const rlottie::Surface &surface) { - VBitmap bitmap(reinterpret_cast(surface.buffer()), surface.width(), - surface.height(), surface.bytesPerLine(), + VBitmap bitmap(reinterpret_cast(surface.buffer()), + uint(surface.width()), uint(surface.height()), uint(surface.bytesPerLine()), VBitmap::Format::ARGB32_Premultiplied); /* schedule all preprocess task for this frame at once. */ mDrawableList.clear(); mRootLayer->renderList(mDrawableList); - VRect clip(0, 0, surface.drawRegionWidth(), surface.drawRegionHeight()); + VRect clip(0, 0, int(surface.drawRegionWidth()), int(surface.drawRegionHeight())); for (auto &e : mDrawableList) { e->preprocess(clip); } @@ -177,8 +180,8 @@ bool LOTCompItem::render(const rlottie::Surface &surface) VPainter painter(&bitmap); // set sub surface area for drawing. painter.setDrawRegion( - VRect(surface.drawRegionPosX(), surface.drawRegionPosY(), - surface.drawRegionWidth(), surface.drawRegionHeight())); + VRect(int(surface.drawRegionPosX()), int(surface.drawRegionPosY()), + int(surface.drawRegionWidth()), int(surface.drawRegionHeight()))); mRootLayer->render(&painter, {}, {}); return true; @@ -211,7 +214,7 @@ VRle LOTMaskItem::rle() if (mRasterRequest) { mRasterRequest = false; if (!vCompare(mCombinedAlpha, 1.0f)) - mRasterizer.rle() *= (mCombinedAlpha * 255); + mRasterizer.rle() *= uchar(mCombinedAlpha * 255); if (mData->mInv) mRasterizer.rle().invert(); } return mRasterizer.rle(); @@ -234,9 +237,9 @@ void LOTLayerItem::buildLayerNode() mLayerCNode->mClipPath.elmPtr = nullptr; mLayerCNode->mClipPath.ptCount = 0; mLayerCNode->mClipPath.elmCount = 0; - mLayerCNode->name = name().c_str(); + mLayerCNode->keypath = name().c_str(); } - if (complexContent()) mLayerCNode->mAlpha = combinedAlpha() * 255; + if (complexContent()) mLayerCNode->mAlpha = uchar(combinedAlpha() * 255.f); mLayerCNode->mVisible = visible(); // update matte if (hasMatte()) { @@ -266,13 +269,13 @@ void LOTLayerItem::buildLayerNode() LOTMask * cNode = &mMasksCNode[i++]; const std::vector &elm = mask.mFinalPath.elements(); const std::vector & pts = mask.mFinalPath.points(); - const float *ptPtr = reinterpret_cast(pts.data()); - const char * elmPtr = reinterpret_cast(elm.data()); + auto ptPtr = reinterpret_cast(pts.data()); + auto elmPtr = reinterpret_cast(elm.data()); cNode->mPath.ptPtr = ptPtr; cNode->mPath.ptCount = pts.size(); cNode->mPath.elmPtr = elmPtr; cNode->mPath.elmCount = elm.size(); - cNode->mAlpha = mask.mCombinedAlpha * 255; + cNode->mAlpha = uchar(mask.mCombinedAlpha * 255.0f); switch (mask.maskMode()) { case LOTMaskData::Mode::Add: cNode->mMode = MaskAdd; @@ -341,9 +344,11 @@ void LOTLayerItem::render(VPainter *painter, const VRle &inheritMask, LOTLayerMaskItem::LOTLayerMaskItem(LOTLayerData *layerData) { - mMasks.reserve(layerData->mMasks.size()); + if (!layerData->mExtra) return; - for (auto &i : layerData->mMasks) { + mMasks.reserve(layerData->mExtra->mMasks.size()); + + for (auto &i : layerData->mExtra->mMasks) { mMasks.emplace_back(i.get()); mStatic &= i->isStatic(); } @@ -467,18 +472,20 @@ void LOTLayerItem::update(int frameNumber, const VMatrix &parentMatrix, m *= parentMatrix; // 3. update the dirty flag based on the change - if (!mCombinedMatrix.fuzzyCompare(m)) { + if (mCombinedMatrix != m) { mDirtyFlag |= DirtyFlagBit::Matrix; + mCombinedMatrix = m; } + if (!vCompare(mCombinedAlpha, alpha)) { mDirtyFlag |= DirtyFlagBit::Alpha; + mCombinedAlpha = alpha; } - mCombinedMatrix = m; - mCombinedAlpha = alpha; // 4. update the mask if (mLayerMask) { - mLayerMask->update(frameNo(), m, alpha, mDirtyFlag); + mLayerMask->update(frameNo(), mCombinedMatrix, mCombinedAlpha, + mDirtyFlag); } // 5. if no parent property change and layer is static then nothing to do. @@ -502,11 +509,8 @@ VMatrix LOTLayerItem::matrix(int frameNo) const bool LOTLayerItem::visible() const { - if (frameNo() >= mLayerData->inFrame() && - frameNo() < mLayerData->outFrame()) - return true; - else - return false; + return (frameNo() >= mLayerData->inFrame() && + frameNo() < mLayerData->outFrame()); } LOTCompLayerItem::LOTCompLayerItem(LOTLayerData *layerModel) @@ -514,9 +518,9 @@ LOTCompLayerItem::LOTCompLayerItem(LOTLayerData *layerModel) { // 1. create layer item for (auto &i : mLayerData->mChildren) { - LOTLayerData *layerModel = static_cast(i.get()); - auto layerItem = LOTCompItem::createLayerItem(layerModel); - if (layerItem) mLayers.push_back(std::move(layerItem)); + auto model = static_cast(i.get()); + auto item = LOTCompItem::createLayerItem(model); + if (item) mLayers.push_back(std::move(item)); } // 2. update parent layer @@ -526,7 +530,10 @@ LOTCompLayerItem::LOTCompLayerItem(LOTLayerData *layerModel) auto search = std::find_if(mLayers.begin(), mLayers.end(), [id](const auto &val) { return val->id() == id; }); - if (search != mLayers.end()) layer->setParentLayer((*search).get()); + if (search != mLayers.end() && + isGoodParentLayer((*search).get(), layer.get())) { + layer->setParentLayer((*search).get()); + } } } @@ -548,8 +555,8 @@ void LOTCompLayerItem::buildLayerNode() if (mClipper) { const std::vector &elm = mClipper->mPath.elements(); const std::vector & pts = mClipper->mPath.points(); - const float *ptPtr = reinterpret_cast(pts.data()); - const char * elmPtr = reinterpret_cast(elm.data()); + auto ptPtr = reinterpret_cast(pts.data()); + auto elmPtr = reinterpret_cast(elm.data()); layerNode()->mClipPath.ptPtr = ptPtr; layerNode()->mClipPath.elmPtr = elmPtr; layerNode()->mClipPath.ptCount = 2 * pts.size(); @@ -585,7 +592,7 @@ void LOTCompLayerItem::render(VPainter *painter, const VRle &inheritMask, srcPainter.begin(&srcBitmap); renderHelper(&srcPainter, inheritMask, matteRle); srcPainter.end(); - painter->drawBitmap(VPoint(), srcBitmap, combinedAlpha() * 255); + painter->drawBitmap(VPoint(), srcBitmap, uchar(combinedAlpha() * 255.0f)); } else { renderHelper(painter, inheritMask, matteRle); } @@ -744,7 +751,9 @@ void LOTSolidLayerItem::updateContent() if (flag() & DirtyFlagBit::Matrix) { VPath path; path.addRect( - VRectF(0, 0, mLayerData->solidWidth(), mLayerData->solidHeight())); + VRectF(0, 0, + mLayerData->layerSize().width(), + mLayerData->layerSize().height())); path.transform(combinedMatrix()); mRenderNode.mFlag |= VDrawable::DirtyState::Path; mRenderNode.mPath = path; @@ -766,7 +775,7 @@ void LOTSolidLayerItem::buildLayerNode() mCNodeList.clear(); for (auto &i : mDrawableList) { - LOTDrawable *lotDrawable = static_cast(i); + auto lotDrawable = static_cast(i); lotDrawable->sync(); mCNodeList.push_back(lotDrawable->mCNode.get()); } @@ -784,16 +793,20 @@ void LOTSolidLayerItem::renderList(std::vector &list) LOTImageLayerItem::LOTImageLayerItem(LOTLayerData *layerData) : LOTLayerItem(layerData) { - VBrush brush(mLayerData->mAsset->bitmap()); + if (!mLayerData->asset()) return; + + VBrush brush(mLayerData->asset()->bitmap()); mRenderNode.setBrush(brush); } void LOTImageLayerItem::updateContent() { + if (!mLayerData->asset()) return; + if (flag() & DirtyFlagBit::Matrix) { VPath path; - path.addRect(VRectF(0, 0, mLayerData->mAsset->mWidth, - mLayerData->mAsset->mHeight)); + path.addRect(VRectF(0, 0, mLayerData->asset()->mWidth, + mLayerData->asset()->mHeight)); path.transform(combinedMatrix()); mRenderNode.mFlag |= VDrawable::DirtyState::Path; mRenderNode.mPath = path; @@ -821,15 +834,15 @@ void LOTImageLayerItem::buildLayerNode() mCNodeList.clear(); for (auto &i : mDrawableList) { - LOTDrawable *lotDrawable = static_cast(i); + auto lotDrawable = static_cast(i); lotDrawable->sync(); lotDrawable->mCNode->mImageInfo.data = lotDrawable->mBrush.mTexture.data(); lotDrawable->mCNode->mImageInfo.width = - lotDrawable->mBrush.mTexture.width(); + int(lotDrawable->mBrush.mTexture.width()); lotDrawable->mCNode->mImageInfo.height = - lotDrawable->mBrush.mTexture.height(); + int(lotDrawable->mBrush.mTexture.height()); lotDrawable->mCNode->mImageInfo.mMatrix.m11 = combinedMatrix().m_11(); lotDrawable->mCNode->mImageInfo.mMatrix.m12 = combinedMatrix().m_12(); @@ -841,7 +854,7 @@ void LOTImageLayerItem::buildLayerNode() lotDrawable->mCNode->mImageInfo.mMatrix.m31 = combinedMatrix().m_tx(); lotDrawable->mCNode->mImageInfo.mMatrix.m32 = combinedMatrix().m_ty(); - lotDrawable->mCNode->mImageInfo.mMatrix.m33 = combinedMatrix().m_13(); + lotDrawable->mCNode->mImageInfo.mMatrix.m33 = combinedMatrix().m_33(); mCNodeList.push_back(lotDrawable->mCNode.get()); } @@ -942,7 +955,7 @@ void LOTShapeLayerItem::buildLayerNode() mCNodeList.clear(); for (auto &i : mDrawableList) { - LOTDrawable *lotDrawable = static_cast(i); + auto lotDrawable = static_cast(i); lotDrawable->sync(); mCNodeList.push_back(lotDrawable->mCNode.get()); } @@ -1034,28 +1047,30 @@ void LOTContentGroupItem::addChildren(LOTGroupData *data) void LOTContentGroupItem::update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) { - VMatrix m = parentMatrix; float alpha = parentAlpha; DirtyFlag newFlag = flag; if (mData && mData->mTransform) { - // update the matrix and the flag - if ((flag & DirtyFlagBit::Matrix) || !mData->mTransform->isStatic()) { + VMatrix m = mData->mTransform->matrix(frameNo); + m *= parentMatrix; + + if (!(flag & DirtyFlagBit::Matrix) && !mData->mTransform->isStatic() && + (m != mMatrix)) { newFlag |= DirtyFlagBit::Matrix; } - m = mData->mTransform->matrix(frameNo); - m *= parentMatrix; - alpha *= mData->mTransform->opacity(frameNo); + mMatrix = m; + + alpha *= mData->mTransform->opacity(frameNo); if (!vCompare(alpha, parentAlpha)) { newFlag |= DirtyFlagBit::Alpha; } + } else { + mMatrix = parentMatrix; } - mMatrix = m; - for (const auto &content : mContents) { - content->update(frameNo, m, alpha, newFlag); + content->update(frameNo, matrix(), alpha, newFlag); } } @@ -1088,7 +1103,7 @@ void LOTContentGroupItem::renderList(std::vector &list) void LOTContentGroupItem::processPaintItems( std::vector &list) { - int curOpCount = list.size(); + size_t curOpCount = list.size(); for (auto i = mContents.rbegin(); i != mContents.rend(); ++i) { auto content = (*i).get(); switch (content->type()) { @@ -1114,7 +1129,7 @@ void LOTContentGroupItem::processPaintItems( void LOTContentGroupItem::processTrimItems(std::vector &list) { - int curOpCount = list.size(); + size_t curOpCount = list.size(); for (auto i = mContents.rbegin(); i != mContents.rend(); ++i) { auto content = (*i).get(); @@ -1246,7 +1261,7 @@ void LOTPolystarItem::updatePath(VPath &path, int frameNo) path.reset(); VMatrix m; - if (mData->mType == LOTPolystarData::PolyType::Star) { + if (mData->mPolyType == LOTPolystarData::PolyType::Star) { path.addPolystar(points, innerRadius, outerRadius, innerRoundness, outerRoundness, 0.0, 0.0, 0.0, mData->direction()); } else { @@ -1313,7 +1328,7 @@ void LOTPaintDataItem::renderList(std::vector &list) } void LOTPaintDataItem::addPathItems(std::vector &list, - int startOffset) + size_t startOffset) { std::copy(list.begin() + startOffset, list.end(), back_inserter(mPathItems)); @@ -1333,7 +1348,7 @@ void LOTFillItem::updateRenderNode() { VColor color = mColor; - color.setAlpha(color.a * parentAlpha()); + color.setAlpha(uchar(color.a * parentAlpha())); VBrush brush(color); mDrawable.setBrush(brush); mDrawable.setFillRule(mModel.fillRule()); @@ -1360,58 +1375,47 @@ void LOTGFillItem::updateRenderNode() } LOTStrokeItem::LOTStrokeItem(LOTStrokeData *data) - : LOTPaintDataItem(data->isStatic()), mModel(data) -{ - mDashArraySize = 0; -} + : LOTPaintDataItem(data->isStatic()), mModel(data){} void LOTStrokeItem::updateContent(int frameNo) { mColor = mModel.color(frameNo).toColor(mModel.opacity(frameNo)); mWidth = mModel.strokeWidth(frameNo); - if (mModel.hasDashInfo()) { - mDashArraySize = mModel.getDashInfo(frameNo, mDashArray); - } + if (mModel.hasDashInfo()) mModel.getDashInfo(frameNo, mDashInfo); } static float getScale(const VMatrix &matrix) { - constexpr float SQRT_2 = 1.41421; + constexpr float SQRT_2 = 1.41421f; VPointF p1(0, 0); VPointF p2(SQRT_2, SQRT_2); p1 = matrix.map(p1); p2 = matrix.map(p2); VPointF final = p2 - p1; - return std::sqrt(final.x() * final.x() + final.y() * final.y()) / 2.0; + return std::sqrt(final.x() * final.x() + final.y() * final.y()) / 2.0f; } void LOTStrokeItem::updateRenderNode() { VColor color = mColor; - color.setAlpha(color.a * parentAlpha()); + color.setAlpha(uchar(color.a * parentAlpha())); VBrush brush(color); mDrawable.setBrush(brush); float scale = getScale(static_cast(parent())->matrix()); mDrawable.setStrokeInfo(mModel.capStyle(), mModel.joinStyle(), - mModel.meterLimit(), mWidth * scale); - if (mDashArraySize) { - for (int i = 0; i < mDashArraySize; i++) mDashArray[i] *= scale; + mModel.miterLimit(), mWidth * scale); - /* AE draw the dash even if dash value is 0 */ - if (vCompare(mDashArray[0], 0.0f)) mDashArray[0] = 0.1; - - mDrawable.setDashInfo(mDashArray, mDashArraySize); + if (!mDashInfo.empty()) { + for (auto &elm : mDashInfo) elm *= scale; + mDrawable.setDashInfo(mDashInfo); } } LOTGStrokeItem::LOTGStrokeItem(LOTGStrokeData *data) - : LOTPaintDataItem(data->isStatic()), mData(data) -{ - mDashArraySize = 0; -} + : LOTPaintDataItem(data->isStatic()), mData(data){} void LOTGStrokeItem::updateContent(int frameNo) { @@ -1420,11 +1424,10 @@ void LOTGStrokeItem::updateContent(int frameNo) mGradient->mMatrix = static_cast(parent())->matrix(); mCap = mData->capStyle(); mJoin = mData->joinStyle(); - mMiterLimit = mData->meterLimit(); + mMiterLimit = mData->miterLimit(); mWidth = mData->width(frameNo); - if (mData->hasDashInfo()) { - mDashArraySize = mData->getDashInfo(frameNo, mDashArray); - } + + if (mData->hasDashInfo()) mData->getDashInfo(frameNo, mDashInfo); } void LOTGStrokeItem::updateRenderNode() @@ -1433,9 +1436,10 @@ void LOTGStrokeItem::updateRenderNode() mGradient->setAlpha(mAlpha * parentAlpha()); mDrawable.setBrush(VBrush(mGradient.get())); mDrawable.setStrokeInfo(mCap, mJoin, mMiterLimit, mWidth * scale); - if (mDashArraySize) { - for (int i = 0; i < mDashArraySize; i++) mDashArray[i] *= scale; - mDrawable.setDashInfo(mDashArray, mDashArraySize); + + if (!mDashInfo.empty()) { + for (auto &elm : mDashInfo) elm *= scale; + mDrawable.setDashInfo(mDashInfo); } } @@ -1532,7 +1536,7 @@ void LOTTrimItem::update() } void LOTTrimItem::addPathItems(std::vector &list, - int startOffset) + size_t startOffset) { std::copy(list.begin() + startOffset, list.end(), back_inserter(mPathItems)); @@ -1563,10 +1567,10 @@ void LOTRepeaterItem::update(int frameNo, const VMatrix &parentMatrix, if (visibleCopies == 0) { mHidden = true; return; - } else { - mHidden = false; } + mHidden = false; + if (!mRepeaterData->isStatic()) newFlag |= DirtyFlagBit::Matrix; float offset = mRepeaterData->offset(frameNo); @@ -1606,7 +1610,7 @@ static void updateGStops(LOTNode *n, const VGradient *grad) LOTGradientStop *ptr = n->mGradient.stopPtr; for (const auto &i : grad->mStops) { ptr->pos = i.first; - ptr->a = i.second.alpha() * grad->alpha(); + ptr->a = uchar(i.second.alpha() * grad->alpha()); ptr->r = i.second.red(); ptr->g = i.second.green(); ptr->b = i.second.blue(); @@ -1626,7 +1630,7 @@ void LOTDrawable::sync() if (mFlag & DirtyState::None) return; if (mFlag & DirtyState::Path) { - if (mStroke.mDash.size()) { + if (!mStroke.mDash.empty()) { VDasher dasher(mStroke.mDash.data(), mStroke.mDash.size()); mPath = dasher.dashed(mPath); } @@ -1643,7 +1647,7 @@ void LOTDrawable::sync() if (mStroke.enable) { mCNode->mStroke.width = mStroke.width; - mCNode->mStroke.meterLimit = mStroke.meterLimit; + mCNode->mStroke.miterLimit = mStroke.miterLimit; mCNode->mStroke.enable = 1; switch (mStroke.cap) { diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieitem.h b/submodules/rlottie/rlottie/src/lottie/lottieitem.h similarity index 96% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieitem.h rename to submodules/rlottie/rlottie/src/lottie/lottieitem.h index 407994dee9..a359791291 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieitem.h +++ b/submodules/rlottie/rlottie/src/lottie/lottieitem.h @@ -65,19 +65,18 @@ class LOTCompItem public: explicit LOTCompItem(LOTModel *model); static std::unique_ptr createLayerItem(LOTLayerData *layerData); - bool update(int frameNo); - void resize(const VSize &size); - VSize size() const; + bool update(int frameNo, const VSize &size, bool keepAspectRatio); + VSize size() const { return mViewSize;} void buildRenderTree(); const LOTLayerNode * renderTree()const; bool render(const rlottie::Surface &surface); void setValue(const std::string &keypath, LOTVariant &value); private: - VMatrix mScaleMatrix; - VSize mViewSize; + VMatrix mScaleMatrix; + VSize mViewSize; LOTCompositionData *mCompData; std::unique_ptr mRootLayer; - bool mUpdateViewBox; + bool mKeepAspectRatio{true}; int mCurFrameNo; std::vector mRenderList; std::vector mDrawableList; @@ -108,6 +107,7 @@ public: int id() const {return mLayerData->id();} int parentId() const {return mLayerData->parentId();} void setParentLayer(LOTLayerItem *parent){mParentLayer = parent;} + LOTLayerItem *resolvedParentLayer() const {return mParentLayer;} void setComplexContent(bool value) { mComplexContent = value;} bool complexContent() const {return mComplexContent;} virtual void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha); @@ -398,7 +398,7 @@ class LOTPaintDataItem : public LOTContentItem { public: LOTPaintDataItem(bool staticContent); - void addPathItems(std::vector &list, int startOffset); + void addPathItems(std::vector &list, size_t startOffset); void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) override; void renderList(std::vector &list) final; protected: @@ -455,8 +455,7 @@ private: LOTProxyModel mModel; VColor mColor; float mWidth{0}; - float mDashArray[6]; - int mDashArraySize{0}; + std::vector mDashInfo; }; class LOTGStrokeItem : public LOTPaintDataItem @@ -475,8 +474,7 @@ private: VColor mColor; float mAlpha{1.0}; float mWidth{0}; - float mDashArray[6]; - int mDashArraySize{0}; + std::vector mDashInfo; }; @@ -488,7 +486,7 @@ public: LOTTrimItem(LOTTrimData *data); void update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) final; void update(); - void addPathItems(std::vector &list, int startOffset); + void addPathItems(std::vector &list, size_t startOffset); private: bool pathDirty() const { for (auto &i : mPathItems) { diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottiekeypath.cpp b/submodules/rlottie/rlottie/src/lottie/lottiekeypath.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottiekeypath.cpp rename to submodules/rlottie/rlottie/src/lottie/lottiekeypath.cpp diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottiekeypath.h b/submodules/rlottie/rlottie/src/lottie/lottiekeypath.h similarity index 97% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottiekeypath.h rename to submodules/rlottie/rlottie/src/lottie/lottiekeypath.h index 527788f73c..921bcada40 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottiekeypath.h +++ b/submodules/rlottie/rlottie/src/lottie/lottiekeypath.h @@ -38,7 +38,7 @@ private: bool isGlobstar(uint depth) const {return mKeys[depth] == "**";} bool isGlob(uint depth) const {return mKeys[depth] == "*";} bool endsWithGlobstar() const { return mKeys.back() == "**"; } - uint size() const {return mKeys.size() - 1;} + size_t size() const {return mKeys.size() - 1;} private: std::vector mKeys; }; diff --git a/submodules/rlottie/rlottie/src/lottie/lottieloader.cpp b/submodules/rlottie/rlottie/src/lottie/lottieloader.cpp new file mode 100644 index 0000000000..8c06780808 --- /dev/null +++ b/submodules/rlottie/rlottie/src/lottie/lottieloader.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "lottieloader.h" +#include "lottieparser.h" + +#include +#include + +#ifdef LOTTIE_CACHE_SUPPORT + +#include +#include + +class LottieModelCache { +public: + static LottieModelCache &instance() + { + static LottieModelCache CACHE; + return CACHE; + } + std::shared_ptr find(const std::string &key) + { + std::lock_guard guard(mMutex); + + if (!mcacheSize) return nullptr; + + auto search = mHash.find(key); + + return (search != mHash.end()) ? search->second : nullptr; + + } + void add(const std::string &key, std::shared_ptr value) + { + std::lock_guard guard(mMutex); + + if (!mcacheSize) return; + + //@TODO just remove the 1st element + // not the best of LRU logic + if (mcacheSize == mHash.size()) mHash.erase(mHash.cbegin()); + + mHash[key] = std::move(value); + } + + void configureCacheSize(size_t cacheSize) + { + std::lock_guard guard(mMutex); + mcacheSize = cacheSize; + + if (!mcacheSize) mHash.clear(); + } + +private: + LottieModelCache() = default; + + std::unordered_map> mHash; + std::mutex mMutex; + size_t mcacheSize{10}; +}; + +#else + +class LottieModelCache { +public: + static LottieModelCache &instance() + { + static LottieModelCache CACHE; + return CACHE; + } + std::shared_ptr find(const std::string &) { return nullptr; } + void add(const std::string &, std::shared_ptr) {} + void configureCacheSize(size_t) {} +}; + +#endif + +void LottieLoader::configureModelCacheSize(size_t cacheSize) +{ + LottieModelCache::instance().configureCacheSize(cacheSize); +} + +static std::string dirname(const std::string &path) +{ + const char *ptr = strrchr(path.c_str(), '/'); +#ifdef _WIN32 + if (ptr) ptr = strrchr(ptr + 1, '\\'); +#endif + int len = int(ptr + 1 - path.c_str()); // +1 to include '/' + return std::string(path, 0, len); +} + +bool LottieLoader::load(const std::string &path, bool cachePolicy) +{ + if (cachePolicy) { + mModel = LottieModelCache::instance().find(path); + if (mModel) return true; + } + + std::ifstream f; + f.open(path); + + if (!f.is_open()) { + vCritical << "failed to open file = " << path.c_str(); + return false; + } else { + std::string content; + + std::getline(f, content, '\0') ; + f.close(); + + if (content.empty()) return false; + + const char *str = content.c_str(); + LottieParser parser(const_cast(str), + dirname(path).c_str()); + mModel = parser.model(); + + if (!mModel) return false; + + if (cachePolicy) + LottieModelCache::instance().add(path, mModel); + } + + return true; +} + +bool LottieLoader::loadFromData( + std::string &&jsonData, const std::string &key, + const std::string &resourcePath, bool cachePolicy, + const std::vector> + &colorReplacements) +{ + if (cachePolicy) { + mModel = LottieModelCache::instance().find(key); + if (mModel) return true; + } + + LottieParser parser(const_cast(jsonData.c_str()), + resourcePath.c_str(), colorReplacements); + mModel = parser.model(); + + if (!mModel) return false; + + if (cachePolicy) + LottieModelCache::instance().add(key, mModel); + + return true; +} + +std::shared_ptr LottieLoader::model() +{ + return mModel; +} diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieloader.h b/submodules/rlottie/rlottie/src/lottie/lottieloader.h similarity index 76% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieloader.h rename to submodules/rlottie/rlottie/src/lottie/lottieloader.h index d7228bbce1..711d0d64ee 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieloader.h +++ b/submodules/rlottie/rlottie/src/lottie/lottieloader.h @@ -21,15 +21,20 @@ #include #include +#include class LOTModel; class LottieLoader { public: - bool load(const std::string &filePath); - bool loadFromData(std::string &&jsonData, const std::string &key, const std::string &resourcePath); + static void configureModelCacheSize(size_t cacheSize); + bool load(const std::string &filePath, bool cachePolicy); + bool loadFromData(std::string &&jsonData, const std::string &key, + const std::string &resourcePath, bool cachePolicy, + const std::vector> + &colorReplacements); std::shared_ptr model(); -private: +private: std::shared_ptr mModel; }; diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottiemodel.cpp b/submodules/rlottie/rlottie/src/lottie/lottiemodel.cpp similarity index 83% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottiemodel.cpp rename to submodules/rlottie/rlottie/src/lottie/lottiemodel.cpp index e51941cadb..ab7e984acd 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottiemodel.cpp +++ b/submodules/rlottie/rlottie/src/lottie/lottiemodel.cpp @@ -111,19 +111,19 @@ VMatrix TransformData::matrix(int frameNo, bool autoOrient) const { VMatrix m; VPointF position; - if (mSeparate) { - position.setX(mX.value(frameNo)); - position.setY(mY.value(frameNo)); + if (mExtra && mExtra->mSeparate) { + position.setX(mExtra->mSeparateX.value(frameNo)); + position.setY(mExtra->mSeparateY.value(frameNo)); } else { position = mPosition.value(frameNo); } float angle = autoOrient ? mPosition.angle(frameNo) : 0; - if (m3D) { + if (mExtra && mExtra->m3DData) { m.translate(position) - .rotate(m3D->mRz.value(frameNo) + angle) - .rotate(m3D->mRy.value(frameNo), VMatrix::Axis::Y) - .rotate(m3D->mRx.value(frameNo), VMatrix::Axis::X) + .rotate(mExtra->m3DRz.value(frameNo) + angle) + .rotate(mExtra->m3DRy.value(frameNo), VMatrix::Axis::Y) + .rotate(mExtra->m3DRx.value(frameNo), VMatrix::Axis::X) .scale(mScale.value(frameNo) / 100.f) .translate(-mAnchor.value(frameNo)); } else { @@ -135,43 +135,27 @@ VMatrix TransformData::matrix(int frameNo, bool autoOrient) const return m; } -int LOTStrokeData::getDashInfo(int frameNo, float *array) const +void LOTDashProperty::getDashInfo(int frameNo, std::vector& result) const { - if (!mDash.mDashCount) return 0; - // odd case - if (mDash.mDashCount % 2) { - for (int i = 0; i < mDash.mDashCount; i++) { - array[i] = mDash.mDashArray[i].value(frameNo); - } - return mDash.mDashCount; - } else { // even case when last gap info is not provided. - int i; - for (i = 0; i < mDash.mDashCount - 1; i++) { - array[i] = mDash.mDashArray[i].value(frameNo); - } - array[i] = array[i - 1]; - array[i + 1] = mDash.mDashArray[i].value(frameNo); - return mDash.mDashCount + 1; - } -} + result.clear(); -int LOTGStrokeData::getDashInfo(int frameNo, float *array) const -{ - if (!mDash.mDashCount) return 0; - // odd case - if (mDash.mDashCount % 2) { - for (int i = 0; i < mDash.mDashCount; i++) { - array[i] = mDash.mDashArray[i].value(frameNo); - } - return mDash.mDashCount; - } else { // even case when last gap info is not provided. - int i; - for (i = 0; i < mDash.mDashCount - 1; i++) { - array[i] = mDash.mDashArray[i].value(frameNo); - } - array[i] = array[i - 1]; - array[i + 1] = mDash.mDashArray[i].value(frameNo); - return mDash.mDashCount + 1; + if (mData.empty()) return; + + if (result.capacity() < mData.size()) result.reserve(mData.size() + 1); + + for (const auto &elm : mData) + result.push_back(elm.value(frameNo)); + + // if the size is even then we are missing last + // gap information which is same as the last dash value + // copy it from the last dash value. + // NOTE: last value is the offset and last-1 is the last dash value. + auto size = result.size(); + if ((size % 2) == 0) { + //copy offset value to end. + result.push_back(result.back()); + // copy dash value to gap. + result[size-1] = result[size-2]; } } @@ -198,16 +182,16 @@ int LOTGStrokeData::getDashInfo(int frameNo, float *array) const void LOTGradient::populate(VGradientStops &stops, int frameNo) { LottieGradient gradData = mGradient.value(frameNo); - int size = gradData.mGradient.size(); + auto size = gradData.mGradient.size(); float * ptr = gradData.mGradient.data(); int colorPoints = mColorPoints; if (colorPoints == -1) { // for legacy bodymovin (ref: lottie-android) - colorPoints = size / 4; + colorPoints = int(size / 4); } - int opacityArraySize = size - colorPoints * 4; + auto opacityArraySize = size - colorPoints * 4; float *opacityPtr = ptr + (colorPoints * 4); stops.clear(); - int j = 0; + size_t j = 0; for (int i = 0; i < colorPoints; i++) { float colorStop = ptr[0]; LottieColor color = LottieColor(ptr[1], ptr[2], ptr[3]); @@ -265,9 +249,9 @@ void LOTGradient::update(std::unique_ptr &grad, int frameNo) bool init = false; if (!grad) { if (mGradientType == 1) - grad = std::make_unique(0, 0, 0, 0); + grad = std::make_unique(VGradient::Type::Linear); else - grad = std::make_unique(0, 0, 0, 0, 0, 0); + grad = std::make_unique(VGradient::Type::Radial); grad->mSpread = VGradient::Spread::Pad; init = true; } @@ -302,7 +286,8 @@ void LOTGradient::update(std::unique_ptr &grad, int frameNo) if (vCompare(progress, 1.0f)) progress = 0.99f; float startAngle = VLine(start, end).angle(); float highlightAngle = mHighlightAngle.value(frameNo); - float angle = ((startAngle + highlightAngle) * M_PI) / 180.0f; + static constexpr float K_PI = 3.1415926f; + float angle = (startAngle + highlightAngle) * (K_PI / 180.0f); grad->radial.fx = grad->radial.cx + std::cos(angle) * progress * grad->radial.cradius; grad->radial.fy = diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottiemodel.h b/submodules/rlottie/rlottie/src/lottie/lottiemodel.h similarity index 82% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottiemodel.h rename to submodules/rlottie/rlottie/src/lottie/lottiemodel.h index 2353cb7a05..4a5473d21d 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottiemodel.h +++ b/submodules/rlottie/rlottie/src/lottie/lottiemodel.h @@ -22,7 +22,8 @@ #include #include #include -#include +#include +#include #include"vpoint.h" #include"vrect.h" #include"vinterpolator.h" @@ -51,7 +52,7 @@ class LottieShapeData; class LOTPolystarData; class LOTMaskData; -enum class MatteType +enum class MatteType: uchar { None = 0, Alpha = 1, @@ -60,7 +61,8 @@ enum class MatteType LumaInv }; -enum class LayerType { +enum class LayerType: uchar +{ Precomp = 0, Solid = 1, Image = 2, @@ -74,7 +76,10 @@ class LottieColor public: LottieColor() = default; LottieColor(float red, float green , float blue):r(red), g(green),b(blue){} - VColor toColor(float a=1){ return VColor((255 * r), (255 * g), (255 * b), (255 * a));} + VColor toColor(float a=1){ return VColor(uchar(255 * r), + uchar(255 * g), + uchar(255 * b), + uchar(255 * a));} friend inline LottieColor operator+(const LottieColor &c1, const LottieColor &c2); friend inline LottieColor operator-(const LottieColor &c1, const LottieColor &c2); public: @@ -101,7 +106,7 @@ inline const LottieColor operator*(float m, const LottieColor &c) class LottieShapeData { public: - void reserve(int size) { + void reserve(size_t size) { mPoints.reserve(mPoints.size() + size); } void toPath(VPath& path) { @@ -109,23 +114,23 @@ public: if (mPoints.empty()) return; - int size = mPoints.size(); - const VPointF *points = mPoints.data(); + auto size = mPoints.size(); + auto points = mPoints.data(); /* reserve exact memory requirement at once * ptSize = size + 1(size + close) * elmSize = size/3 cubic + 1 move + 1 close */ path.reserve(size + 1 , size/3 + 2); path.moveTo(points[0]); - for (int i = 1 ; i < size; i+=3) { + for (size_t i = 1 ; i < size; i+=3) { path.cubicTo(points[i], points[i+1], points[i+2]); } if (mClosed) path.close(); } public: - std::vector mPoints; - bool mClosed = false; /* "c" */ + std::vector mPoints; + bool mClosed = false; /* "c" */ }; @@ -179,9 +184,8 @@ struct LOTKeyFrameValue mEndValue + mInTangent, mEndValue); return b.pointAt(b.tAtLength(t * b.length())); - } else { - return lerp(mStartValue, mEndValue, t); } + return lerp(mStartValue, mEndValue, t); } float angle(float t) const { @@ -246,15 +250,11 @@ public: } bool changed(int prevFrame, int curFrame) const { - int first = mKeyFrames.front().mStartFrame; - int last = mKeyFrames.back().mEndFrame; + auto first = mKeyFrames.front().mStartFrame; + auto last = mKeyFrames.back().mEndFrame; - if ((first > prevFrame && first > curFrame) || - (last < prevFrame && last < curFrame)) { - return false; - } - - return true; + return !((first > prevFrame && first > curFrame) || + (last < prevFrame && last < curFrame)); } public: @@ -287,9 +287,17 @@ public: return impl.mValue; } + LOTAnimatable(LOTAnimatable &&other) noexcept { + if (!other.mStatic) { + construct(impl.mAnimInfo, std::move(other.impl.mAnimInfo)); + mStatic = false; + } else { + construct(impl.mValue, std::move(other.impl.mValue)); + mStatic = true; + } + } // delete special member functions LOTAnimatable(const LOTAnimatable &) = delete; - LOTAnimatable(LOTAnimatable &&) = delete; LOTAnimatable& operator=(const LOTAnimatable&) = delete; LOTAnimatable& operator=(LOTAnimatable&&) = delete; @@ -326,13 +334,17 @@ private: union details { std::unique_ptr> mAnimInfo; T mValue; - details(){} - ~details(){} + details(){}; + details(const details&) = delete; + details(details&&) = delete; + details& operator=(details&&) = delete; + details& operator=(const details&) = delete; + ~details(){}; }impl; bool mStatic{true}; }; -enum class LottieBlendMode +enum class LottieBlendMode: uchar { Normal = 0, Multiply = 1, @@ -411,37 +423,40 @@ struct LOTAsset VBitmap mBitmap; }; -struct LOT3DData +struct TransformDataExtra { - LOTAnimatable mRx{0}; - LOTAnimatable mRy{0}; - LOTAnimatable mRz{0}; + LOTAnimatable m3DRx{0}; + LOTAnimatable m3DRy{0}; + LOTAnimatable m3DRz{0}; + LOTAnimatable mSeparateX{0}; + LOTAnimatable mSeparateY{0}; + bool mSeparate{false}; + bool m3DData{false}; }; struct TransformData { VMatrix matrix(int frameNo, bool autoOrient = false) const; float opacity(int frameNo) const { return mOpacity.value(frameNo)/100.0f; } - bool isStatic() const { return mStatic;} - std::unique_ptr m3D; - LOTAnimatable mRotation{0}; /* "r" */ - LOTAnimatable mScale{{100, 100}}; /* "s" */ - LOTAnimatable mPosition; /* "p" */ - LOTAnimatable mX{0}; - LOTAnimatable mY{0}; - LOTAnimatable mAnchor; /* "a" */ - LOTAnimatable mOpacity{100}; /* "o" */ - bool mSeparate{false}; - bool mStatic{false}; + void createExtraData() + { + if (!mExtra) mExtra = std::make_unique(); + } + LOTAnimatable mRotation{0}; /* "r" */ + LOTAnimatable mScale{{100, 100}}; /* "s" */ + LOTAnimatable mPosition; /* "p" */ + LOTAnimatable mAnchor; /* "a" */ + LOTAnimatable mOpacity{100}; /* "o" */ + std::unique_ptr mExtra; }; class LOTTransformData : public LOTData { public: LOTTransformData():LOTData(LOTData::Type::Transform){} - void set(std::unique_ptr data) + void set(std::unique_ptr data, bool staticFlag) { - setStatic(data->isStatic()); + setStatic(staticFlag); if (isStatic()) { new (&impl.mStaticData) static_data(data->matrix(0), data->opacity(0)); } else { @@ -458,7 +473,9 @@ public: if (isStatic()) return impl.mStaticData.mOpacity; return impl.mData->opacity(frameNo); } - + LOTTransformData(const LOTTransformData&) = delete; + LOTTransformData(LOTTransformData&&) = delete; + LOTTransformData& operator=(LOTTransformData&) = delete; LOTTransformData& operator=(LOTTransformData&&) = delete; ~LOTTransformData() {destroy();} @@ -480,11 +497,25 @@ private: union details { std::unique_ptr mData; static_data mStaticData; - details(){} - ~details(){} + details(){}; + details(const details&) = delete; + details(details&&) = delete; + details& operator=(details&&) = delete; + details& operator=(const details&) = delete; + ~details(){}; }impl; }; +struct ExtraLayerData +{ + LottieColor mSolidColor; + std::string mPreCompRefId; + LOTAnimatable mTimeRemap; /* "tm" */ + LOTCompositionData *mCompRef{nullptr}; + std::shared_ptr mAsset; + std::vector> mMasks; +}; + class LOTLayerData : public LOTGroupData { public: @@ -498,9 +529,7 @@ public: int inFrame() const noexcept{return mInFrame;} int outFrame() const noexcept{return mOutFrame;} int startFrame() const noexcept{return mStartFrame;} - int solidWidth() const noexcept{return mSolidLayer.mWidth;} - int solidHeight() const noexcept{return mSolidLayer.mHeight;} - LottieColor solidColor() const noexcept{return mSolidLayer.mColor;} + LottieColor solidColor() const noexcept{return mExtra->mSolidColor;} bool autoOrient() const noexcept{return mAutoOrient;} int timeRemap(int frameNo) const; VSize layerSize() const {return mLayerSize;} @@ -513,34 +542,32 @@ public: { return mTransform ? mTransform->opacity(frameNo) : 1.0f; } + LOTAsset* asset() const + { + return (mExtra && mExtra->mAsset) ? mExtra->mAsset.get() : nullptr; + } public: - struct SolidLayer { - int mWidth{0}; - int mHeight{0}; - LottieColor mColor; - }; - + ExtraLayerData* extra() + { + if (!mExtra) mExtra = std::make_unique(); + return mExtra.get(); + } MatteType mMatteType{MatteType::None}; - LayerType mLayerType{LayerType::Null}; //lottie layer type (solid/shape/precomp) - int mParentId{-1}; // Lottie the id of the parent in the composition - int mId{-1}; // Lottie the group id used for parenting. - long mInFrame{0}; - long mOutFrame{0}; - long mStartFrame{0}; - VSize mLayerSize; + LayerType mLayerType{LayerType::Null}; LottieBlendMode mBlendMode{LottieBlendMode::Normal}; - float mTimeStreatch{1.0f}; - std::string mPreCompRefId; - LOTAnimatable mTimeRemap; /* "tm" */ - SolidLayer mSolidLayer; bool mHasPathOperator{false}; bool mHasMask{false}; bool mHasRepeater{false}; bool mHasGradient{false}; bool mAutoOrient{false}; - std::vector> mMasks; - LOTCompositionData *mCompRef{nullptr}; - std::shared_ptr mAsset; + VSize mLayerSize; + int mParentId{-1}; // Lottie the id of the parent in the composition + int mId{-1}; // Lottie the group id used for parenting. + float mTimeStreatch{1.0f}; + int mInFrame{0}; + int mOutFrame{0}; + int mStartFrame{0}; + std::unique_ptr mExtra{nullptr}; }; using LayerInfo = std::tuple; @@ -556,10 +583,10 @@ public: size_t frameAtPos(double pos) const { if (pos < 0) pos = 0; if (pos > 1) pos = 1; - return pos * frameDuration(); + return size_t(pos * frameDuration()); } long frameAtTime(double timeInSec) const { - return frameAtPos(timeInSec / duration()); + return long(frameAtPos(timeInSec / duration())); } size_t totalFrame() const {return mEndFrame - mStartFrame;} long frameDuration() const {return mEndFrame - mStartFrame -1;} @@ -569,7 +596,6 @@ public: VSize size() const {return mSize;} void processRepeaterObjects(); public: - int mTgs; std::string mVersion; VSize mSize; long mStartFrame{0}; @@ -598,15 +624,17 @@ inline int LOTLayerData::timeRemap(int frameNo) const * when a layer has timeremap bodymovin updates the startFrame() * of all child layer so we don't have to take care of it. */ - frameNo = mTimeRemap.isStatic() ? frameNo - startFrame(): - mCompRef->frameAtTime(mTimeRemap.value(frameNo)); + if (!mExtra || mExtra->mTimeRemap.isStatic()) + frameNo = frameNo - startFrame(); + else + frameNo = mExtra->mCompRef->frameAtTime(mExtra->mTimeRemap.value(frameNo)); /* Apply time streatch if it has any. * Time streatch is just a factor by which the animation will speedup or slow * down with respect to the overal animation. * Time streach factor is already applied to the layers inFrame and outFrame. * @TODO need to find out if timestreatch also affects the in and out frame of the * child layers or not. */ - return frameNo / mTimeStreatch; + return int(frameNo / mTimeStreatch); } class LOTFillData : public LOTData @@ -614,7 +642,7 @@ class LOTFillData : public LOTData public: LOTFillData():LOTData(LOTData::Type::Fill){} LottieColor color(int frameNo) const {return mColor.value(frameNo);} - float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0;} + float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0f;} FillRule fillRule() const {return mFillRule;} public: FillRule mFillRule{FillRule::Winding}; /* "r" */ @@ -625,9 +653,15 @@ public: struct LOTDashProperty { - LOTAnimatable mDashArray[5]; /* "d" "g" "o"*/ - int mDashCount{0}; - bool mStatic{true}; + std::vector> mData; + bool empty() const {return mData.empty();} + size_t size() const {return mData.size();} + bool isStatic() const { + for(const auto &elm : mData) + if (!elm.isStatic()) return false; + return true; + } + void getDashInfo(int frameNo, std::vector& result) const; }; class LOTStrokeData : public LOTData @@ -635,20 +669,23 @@ class LOTStrokeData : public LOTData public: LOTStrokeData():LOTData(LOTData::Type::Stroke){} LottieColor color(int frameNo) const {return mColor.value(frameNo);} - float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0;} + float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0f;} float strokeWidth(int frameNo) const {return mWidth.value(frameNo);} CapStyle capStyle() const {return mCapStyle;} JoinStyle joinStyle() const {return mJoinStyle;} - float meterLimit() const{return mMeterLimit;} - bool hasDashInfo() const { return !(mDash.mDashCount == 0);} - int getDashInfo(int frameNo, float *array) const; + float miterLimit() const{return mMiterLimit;} + bool hasDashInfo() const {return !mDash.empty();} + void getDashInfo(int frameNo, std::vector& result) const + { + return mDash.getDashInfo(frameNo, result); + } public: LOTAnimatable mColor; /* "c" */ LOTAnimatable mOpacity{100}; /* "o" */ LOTAnimatable mWidth{0}; /* "w" */ CapStyle mCapStyle{CapStyle::Flat}; /* "lc" */ JoinStyle mJoinStyle{JoinStyle::Miter}; /* "lj" */ - float mMeterLimit{0}; /* "ml" */ + float mMiterLimit{0}; /* "ml" */ LOTDashProperty mDash; bool mEnabled{true}; /* "fillEnabled" */ }; @@ -713,7 +750,7 @@ class LOTGradient : public LOTData { public: explicit LOTGradient(LOTData::Type type):LOTData(type){} - inline float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0;} + inline float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0f;} void update(std::unique_ptr &grad, int frameNo); private: @@ -724,7 +761,7 @@ public: LOTAnimatable mEndPoint; /* "e" */ LOTAnimatable mHighlightLength{0}; /* "h" */ LOTAnimatable mHighlightAngle{0}; /* "a" */ - LOTAnimatable mOpacity{0}; /* "o" */ + LOTAnimatable mOpacity{100}; /* "o" */ LOTAnimatable mGradient; /* "g" */ int mColorPoints{-1}; bool mEnabled{true}; /* "fillEnabled" */ @@ -746,14 +783,17 @@ public: float width(int frameNo) const {return mWidth.value(frameNo);} CapStyle capStyle() const {return mCapStyle;} JoinStyle joinStyle() const {return mJoinStyle;} - float meterLimit() const{return mMeterLimit;} - bool hasDashInfo() const { return !(mDash.mDashCount == 0);} - int getDashInfo(int frameNo, float *array) const; + float miterLimit() const{return mMiterLimit;} + bool hasDashInfo() const {return !mDash.empty();} + void getDashInfo(int frameNo, std::vector& result) const + { + return mDash.getDashInfo(frameNo, result); + } public: LOTAnimatable mWidth; /* "w" */ CapStyle mCapStyle{CapStyle::Flat}; /* "lc" */ JoinStyle mJoinStyle{JoinStyle::Miter}; /* "lj" */ - float mMeterLimit{0}; /* "ml" */ + float mMiterLimit{0}; /* "ml" */ LOTDashProperty mDash; }; @@ -761,8 +801,10 @@ class LOTPath : public LOTData { public: explicit LOTPath(LOTData::Type type):LOTData(type){} - VPath::Direction direction() { if (mDirection == 3) return VPath::Direction::CCW; - else return VPath::Direction::CW;} + VPath::Direction direction() { + return (mDirection == 3) ? + VPath::Direction::CCW : VPath::Direction::CW; + } public: int mDirection{1}; }; @@ -786,11 +828,11 @@ public: Intersect, Difference }; - float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0;} + float opacity(int frameNo) const {return mOpacity.value(frameNo)/100.0f;} bool isStatic() const {return mIsStatic;} public: LOTAnimatable mShape; - LOTAnimatable mOpacity; + LOTAnimatable mOpacity{100}; bool mInv{false}; bool mIsStatic{true}; LOTMaskData::Mode mMode; @@ -824,7 +866,7 @@ public: }; LOTPolystarData():LOTPath(LOTData::Type::Polystar){} public: - LOTPolystarData::PolyType mType{PolyType::Polygon}; + LOTPolystarData::PolyType mPolyType{PolyType::Polygon}; LOTAnimatable mPos; LOTAnimatable mPointCount{0}; LOTAnimatable mInnerRadius{0}; @@ -840,8 +882,8 @@ public: struct Segment { float start{0}; float end{0}; - Segment() {} - Segment(float s, float e):start(s), end(e) {} + Segment() = default; + explicit Segment(float s, float e):start(s), end(e) {} }; enum class TrimType { Simultaneously, @@ -856,9 +898,9 @@ public: Segment segment(int frameNo) const { float start = mStart.value(frameNo)/100.0f; float end = mEnd.value(frameNo)/100.0f; - float offset = fmod(mOffset.value(frameNo), 360.0f)/ 360.0f; + float offset = std::fmod(mOffset.value(frameNo), 360.0f)/ 360.0f; - float diff = fabs(start - end); + float diff = std::abs(start - end); if (vCompare(diff, 0.0f)) return Segment(0, 0); if (vCompare(diff, 1.0f)) return Segment(0, 1); @@ -870,8 +912,8 @@ public: } else if (start > 1 && end > 1) { return noloop(start - 1, end - 1); } else { - if (start > 1) return loop(start - 1 , end); - else return loop(start , end - 1); + return (start > 1) ? + loop(start - 1 , end) : loop(start , end - 1); } } else { start += offset; @@ -881,8 +923,8 @@ public: } else if (start < 0 && end < 0) { return noloop(1 + start, 1 + end); } else { - if (start < 0) return loop(1 + start, end); - else return loop(start , 1 + end); + return (start < 0) ? + loop(1 + start, end) : loop(start , 1 + end); } } } @@ -955,12 +997,12 @@ public: class LOTModel { public: - bool isTgs() const {return mRoot->mTgs == 1;} bool isStatic() const {return mRoot->isStatic();} + VSize size() const {return mRoot->size();} double duration() const {return mRoot->duration();} size_t totalFrame() const {return mRoot->totalFrame();} size_t frameDuration() const {return mRoot->frameDuration();} - size_t frameRate() const {return mRoot->frameRate();} + double frameRate() const {return mRoot->frameRate();} size_t startFrame() const {return mRoot->startFrame();} size_t endFrame() const {return mRoot->endFrame();} size_t frameAtPos(double pos) const {return mRoot->frameAtPos(pos);} diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieparser.cpp b/submodules/rlottie/rlottie/src/lottie/lottieparser.cpp similarity index 90% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieparser.cpp rename to submodules/rlottie/rlottie/src/lottie/lottieparser.cpp index 9def4aa8a0..1cc7febfc4 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieparser.cpp +++ b/submodules/rlottie/rlottie/src/lottie/lottieparser.cpp @@ -20,8 +20,6 @@ //#define DEBUG_PARSER -//#define DEBUG_PRINT_TREE - // This parser implements JSON token-by-token parsing with an API that is // more direct; we don't have to create handler object and // callbacks. Instead, we retrieve values from the JSON stream by calling @@ -97,7 +95,7 @@ public: v_.SetInt64(i); return true; } - bool Uint64(uint64_t u) + bool Uint64(int64_t u) { st_ = kHasNumber; v_.SetUint64(u); @@ -145,7 +143,6 @@ public: protected: explicit LookaheadParserHandler(char *str); - void ParseNext(); protected: enum LookaheadParsingState { @@ -170,13 +167,18 @@ protected: static const int parseFlags = kParseDefaultFlags | kParseInsituFlag; }; -class LottieParserImpl : protected LookaheadParserHandler { +class LottieParserImpl : public LookaheadParserHandler { public: - LottieParserImpl(char *str, const char *dir_path) - : LookaheadParserHandler(str), mDirPath(dir_path) + LottieParserImpl(char *str, const char *dir_path, + const std::vector> + &colorReplacements) + : LookaheadParserHandler(str), + mColorReplacements(colorReplacements), + mDirPath(dir_path) { } - + bool VerifyType(); + bool ParseNext(); public: bool EnterObject(); bool EnterArray(); @@ -192,9 +194,7 @@ public: void SkipArray(); void SkipValue(); Value *PeekValue(); - int PeekType(); // returns a rapidjson::Type, or -1 for no value (at end of - // object/array) - + int PeekType() const; bool IsValid() { return st_ != kError; } void Skip(const char *key); @@ -238,10 +238,10 @@ public: VPointF parseInperpolatorPoint(); - void getValue(VPointF &val); - void getValue(float &val); - void getValue(LottieColor &val); - void getValue(int &val); + void getValue(VPointF &pt); + void getValue(float &fval); + void getValue(LottieColor &color); + void getValue(int &ival); void getValue(LottieShapeData &shape); void getValue(LottieGradient &gradient); void getValue(std::vector &v); @@ -263,10 +263,13 @@ public: std::shared_ptr interpolator(VPointF, VPointF, std::string); LottieColor toColor(const char *str); + LottieColor applyReplacements(const LottieColor &color); void resolveLayerRefs(); protected: + const std::vector> + &mColorReplacements; std::unordered_map> mInterpolatorCache; std::shared_ptr mComposition; @@ -279,23 +282,31 @@ protected: }; LookaheadParserHandler::LookaheadParserHandler(char *str) - : v_(), st_(kInit), r_(), ss_(str) + : v_(), st_(kInit), ss_(str) { r_.IterativeParseInit(); - ParseNext(); } -void LookaheadParserHandler::ParseNext() +bool LottieParserImpl::VerifyType() +{ + /* Verify the media type is lottie json. + Could add more strict check. */ + return ParseNext(); +} + +bool LottieParserImpl::ParseNext() { if (r_.HasParseError()) { st_ = kError; - return; + return false; } if (!r_.IterativeParseNext(ss_, *this)) { vCritical << "Lottie file parsing error"; - RAPIDJSON_ASSERT(0); + st_ = kError; + return false; } + return true; } bool LottieParserImpl::EnterObject() @@ -340,17 +351,17 @@ const char *LottieParserImpl::NextObjectKey() // #ifdef DEBUG_PARSER // vDebug<<"Object: Exiting nested loop"; // #endif - return 0; + return nullptr; } if (st_ != kExitingObject) { RAPIDJSON_ASSERT(false); st_ = kError; - return 0; + return nullptr; } ParseNext(); - return 0; + return nullptr; } bool LottieParserImpl::NextArrayValue() @@ -364,10 +375,7 @@ bool LottieParserImpl::NextArrayValue() * same as NextObjectKey() */ if (st_ == kExitingObject) { - // #ifdef DEBUG_PARSER - // vDebug<<"Array: Exiting nested loop"; - // #endif - return 0; + return false; } if (st_ == kError || st_ == kHasKey) { @@ -433,7 +441,7 @@ const char *LottieParserImpl::GetString() if (st_ != kHasString) { st_ = kError; RAPIDJSON_ASSERT(false); - return 0; + return nullptr; } const char *result = v_.GetString(); @@ -478,10 +486,12 @@ Value *LottieParserImpl::PeekValue() return &v_; } - return 0; + return nullptr; } -int LottieParserImpl::PeekType() +// returns a rapidjson::Type, or -1 for no value (at end of +// object/array) +int LottieParserImpl::PeekType() const { if (st_ >= kHasNull && st_ <= kHasKey) { return v_.GetType(); @@ -536,10 +546,10 @@ void LottieParserImpl::resolveLayerRefs() { for (const auto &i : mLayersToUpdate) { LOTLayerData *layer = i.get(); - auto search = compRef->mAssets.find(layer->mPreCompRefId); + auto search = compRef->mAssets.find(layer->extra()->mPreCompRefId); if (search != compRef->mAssets.end()) { if (layer->mLayerType == LayerType::Image) { - layer->mAsset = search->second; + layer->extra()->mAsset = search->second; } else if (layer->mLayerType == LayerType::Precomp) { layer->mChildren = search->second->mLayers; layer->setStatic(layer->isStatic() && @@ -558,10 +568,7 @@ void LottieParserImpl::parseComposition() LOTCompositionData *comp = sharedComposition.get(); compRef = comp; while (const char *key = NextObjectKey()) { - if (0 == strcmp(key, "tgs")) { - RAPIDJSON_ASSERT(PeekType() == kNumberType); - comp->mTgs = GetInt(); - }else if (0 == strcmp(key, "v")) { + if (0 == strcmp(key, "v")) { RAPIDJSON_ASSERT(PeekType() == kStringType); comp->mVersion = std::string(GetString()); } else if (0 == strcmp(key, "w")) { @@ -590,12 +597,12 @@ void LottieParserImpl::parseComposition() Skip(key); } } - - if (comp->mVersion.empty()) { + + if (comp->mVersion.empty() || !comp->mRootLayer) { // don't have a valid bodymovin header return; } - + resolveLayerRefs(); comp->setStatic(comp->mRootLayer->isStatic()); comp->mRootLayer->mInFrame = comp->mStartFrame; @@ -626,9 +633,9 @@ static constexpr const unsigned char B64index[256] = { 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51}; -std::string b64decode(const void *data, const size_t len) +std::string b64decode(const char *data, const size_t len) { - unsigned char *p = (unsigned char *)data; + auto p = reinterpret_cast(data); int pad = len > 0 && (len % 4 || p[len - 1] == '='); const size_t L = ((len + 3) / 4 - pad) * 4; std::string str(L / 4 * 3 + pad, '\0'); @@ -656,15 +663,27 @@ static std::string convertFromBase64(const std::string &str) { // usual header look like "data:image/png;base64," // so need to skip till ','. - int startIndex = str.find(",", 0); + size_t startIndex = str.find(",", 0); startIndex += 1; // skip "," - int length = str.length() - startIndex; + size_t length = str.length() - startIndex; const char *b64Data = str.c_str() + startIndex; return b64decode(b64Data, length); } +/* + * std::to_string() function is missing in VS2017 + * so this is workaround for windows build + */ +#include +template +static std::string toString(const T &value) { + std::ostringstream os; + os << value; + return os.str(); +} + /* * https://github.com/airbnb/lottie-web/blob/master/docs/json/layers/shape.json * @@ -699,7 +718,7 @@ std::shared_ptr LottieParserImpl::parseAsset() asset->mRefId = std::string(GetString()); } else { RAPIDJSON_ASSERT(PeekType() == kNumberType); - asset->mRefId = std::to_string(GetInt()); + asset->mRefId = toString(GetInt()); } } else if (0 == strcmp(key, "layers")) { asset->mAssetType = LOTAsset::Type::Precomp; @@ -757,28 +776,49 @@ void LottieParserImpl::parseLayers(LOTCompositionData *comp) LottieColor LottieParserImpl::toColor(const char *str) { LottieColor color; - int len = strlen(str); + auto len = strlen(str); // some resource has empty color string // return a default color for those cases. - if (!len) return color; - - RAPIDJSON_ASSERT(len == 7); - RAPIDJSON_ASSERT(str[0] == '#'); + if (len != 7 || str[0] != '#') return color; char tmp[3] = {'\0', '\0', '\0'}; tmp[0] = str[1]; tmp[1] = str[2]; - color.r = std::strtol(tmp, NULL, 16) / 255.0; + color.r = std::strtol(tmp, nullptr, 16) / 255.0f; tmp[0] = str[3]; tmp[1] = str[4]; - color.g = std::strtol(tmp, NULL, 16) / 255.0; + color.g = std::strtol(tmp, nullptr, 16) / 255.0f; tmp[0] = str[5]; tmp[1] = str[6]; - color.b = std::strtol(tmp, NULL, 16) / 255.0; + color.b = std::strtol(tmp, nullptr, 16) / 255.0f; + return applyReplacements(color); +} + +LottieColor LottieParserImpl::applyReplacements(const LottieColor &color) +{ + if (mColorReplacements.empty()) { + return color; + } + const auto convert = [](float value) { + return std::uint32_t( + std::round(std::min(std::max(value, 0.f), 1.f) * 255.)); + }; + const auto part = [](std::uint32_t value, int shift) { + return float((value >> shift) & 0xFFU) / 255.f; + }; + const auto converted = + convert(color.b) | (convert(color.g) << 8) | (convert(color.r) << 16); + for (const auto &pair : mColorReplacements) { + const auto key = pair.first; + const auto value = pair.second; + if (key == converted) { + return LottieColor(part(value, 16), part(value, 8), part(value, 0)); + } + } return color; } @@ -865,20 +905,20 @@ std::shared_ptr LottieParserImpl::parseLayer(bool record) layer->mParentId = GetInt(); } else if (0 == strcmp(key, "refId")) { /*preComp Layer reference id*/ RAPIDJSON_ASSERT(PeekType() == kStringType); - layer->mPreCompRefId = std::string(GetString()); + layer->extra()->mPreCompRefId = std::string(GetString()); layer->mHasGradient = true; mLayersToUpdate.push_back(sharedLayer); } else if (0 == strcmp(key, "sr")) { // "Layer Time Stretching" RAPIDJSON_ASSERT(PeekType() == kNumberType); layer->mTimeStreatch = GetDouble(); } else if (0 == strcmp(key, "tm")) { // time remapping - parseProperty(layer->mTimeRemap); + parseProperty(layer->extra()->mTimeRemap); } else if (0 == strcmp(key, "ip")) { RAPIDJSON_ASSERT(PeekType() == kNumberType); - layer->mInFrame = std::round(GetDouble()); + layer->mInFrame = std::lround(GetDouble()); } else if (0 == strcmp(key, "op")) { RAPIDJSON_ASSERT(PeekType() == kNumberType); - layer->mOutFrame = std::round(GetDouble()); + layer->mOutFrame = std::lround(GetDouble()); } else if (0 == strcmp(key, "st")) { RAPIDJSON_ASSERT(PeekType() == kNumberType); layer->mStartFrame = GetDouble(); @@ -895,11 +935,11 @@ std::shared_ptr LottieParserImpl::parseLayer(bool record) } else if (0 == strcmp(key, "h")) { layer->mLayerSize.setHeight(GetInt()); } else if (0 == strcmp(key, "sw")) { - layer->mSolidLayer.mWidth = GetInt(); + layer->mLayerSize.setWidth(GetInt()); } else if (0 == strcmp(key, "sh")) { - layer->mSolidLayer.mHeight = GetInt(); + layer->mLayerSize.setHeight(GetInt()); } else if (0 == strcmp(key, "sc")) { - layer->mSolidLayer.mColor = toColor(GetString()); + layer->extra()->mSolidColor = toColor(GetString()); } else if (0 == strcmp(key, "tt")) { layer->mMatteType = getMatteType(); } else if (0 == strcmp(key, "hasMask")) { @@ -917,13 +957,13 @@ std::shared_ptr LottieParserImpl::parseLayer(bool record) Skip(key); } } - + if (!layer->mTransform) { // not a valid layer return nullptr; } - layer->mCompRef = compRef; + if (layer->mExtra) layer->mExtra->mCompRef = compRef; if (layer->hidden()) { // if layer is hidden, only data that is usefull is its @@ -941,8 +981,10 @@ std::shared_ptr LottieParserImpl::parseLayer(bool record) staticFlag &= child.get()->isStatic(); } - for (const auto &mask : layer->mMasks) { - staticFlag &= mask->isStatic(); + if (layer->hasMask()) { + for (const auto &mask : layer->mExtra->mMasks) { + staticFlag &= mask->isStatic(); + } } layer->setStatic(staticFlag && layer->mTransform->isStatic()); @@ -959,7 +1001,7 @@ void LottieParserImpl::parseMaskProperty(LOTLayerData *layer) RAPIDJSON_ASSERT(PeekType() == kArrayType); EnterArray(); while (NextArrayValue()) { - layer->mMasks.push_back(parseMaskObject()); + layer->extra()->mMasks.push_back(parseMaskObject()); } } @@ -975,6 +1017,10 @@ std::shared_ptr LottieParserImpl::parseMaskObject() obj->mInv = GetBool(); } else if (0 == strcmp(key, "mode")) { const char *str = GetString(); + if (!str) { + obj->mMode = LOTMaskData::Mode::None; + continue; + } switch (str[0]) { case 'n': obj->mMode = LOTMaskData::Mode::None; @@ -1103,7 +1149,9 @@ std::shared_ptr LottieParserImpl::parseGroupObject() staticFlag &= child.get()->isStatic(); } - group->setStatic(staticFlag && group->mTransform->isStatic()); + if (group->mTransform) { + group->setStatic(staticFlag && group->mTransform->isStatic()); + } return sharedGroup; } @@ -1224,8 +1272,8 @@ std::shared_ptr LottieParserImpl::parsePolystarObject() parseProperty(obj->mRotation); } else if (0 == strcmp(key, "sy")) { int starType = GetInt(); - if (starType == 1) obj->mType = LOTPolystarData::PolyType::Star; - if (starType == 2) obj->mType = LOTPolystarData::PolyType::Polygon; + if (starType == 1) obj->mPolyType = LOTPolystarData::PolyType::Star; + if (starType == 2) obj->mPolyType = LOTPolystarData::PolyType::Polygon; } else if (0 == strcmp(key, "d")) { obj->mDirection = GetInt(); } else if (0 == strcmp(key, "hd")) { @@ -1258,7 +1306,7 @@ LOTTrimData::TrimType LottieParserImpl::getTrimType() break; default: RAPIDJSON_ASSERT(0); - return LOTTrimData::TrimType::Individually; + return LOTTrimData::TrimType::Simultaneously; break; } } @@ -1371,7 +1419,10 @@ std::shared_ptr LottieParserImpl::parseTransformObject( std::make_shared(); auto obj = std::make_unique(); - if (ddd) obj->m3D = std::make_unique(); + if (ddd) { + obj->createExtraData(); + obj->mExtra->m3DData = true; + } while (const char *key = NextObjectKey()) { if (0 == strcmp(key, "nm")) { @@ -1380,15 +1431,18 @@ std::shared_ptr LottieParserImpl::parseTransformObject( parseProperty(obj->mAnchor); } else if (0 == strcmp(key, "p")) { EnterObject(); + bool separate = false; while (const char *key = NextObjectKey()) { if (0 == strcmp(key, "k")) { parsePropertyHelper(obj->mPosition); } else if (0 == strcmp(key, "s")) { - obj->mSeparate = GetBool(); - } else if (obj->mSeparate && (0 == strcmp(key, "x"))) { - parseProperty(obj->mX); - } else if (obj->mSeparate && (0 == strcmp(key, "y"))) { - parseProperty(obj->mY); + obj->createExtraData(); + obj->mExtra->mSeparate = GetBool(); + separate = true; + } else if (separate && (0 == strcmp(key, "x"))) { + parseProperty(obj->mExtra->mSeparateX); + } else if (separate && (0 == strcmp(key, "y"))) { + parseProperty(obj->mExtra->mSeparateY); } else { Skip(key); } @@ -1402,25 +1456,28 @@ std::shared_ptr LottieParserImpl::parseTransformObject( } else if (0 == strcmp(key, "hd")) { sharedTransform->mHidden = GetBool(); } else if (0 == strcmp(key, "rx")) { - parseProperty(obj->m3D->mRx); + parseProperty(obj->mExtra->m3DRx); } else if (0 == strcmp(key, "ry")) { - parseProperty(obj->m3D->mRy); + parseProperty(obj->mExtra->m3DRy); } else if (0 == strcmp(key, "rz")) { - parseProperty(obj->m3D->mRz); + parseProperty(obj->mExtra->m3DRz); } else { Skip(key); } } - obj->mStatic = obj->mAnchor.isStatic() && obj->mPosition.isStatic() && - obj->mRotation.isStatic() && obj->mScale.isStatic() && - obj->mX.isStatic() && obj->mY.isStatic() && - obj->mOpacity.isStatic(); - if (obj->m3D) { - obj->mStatic = obj->mStatic && obj->m3D->mRx.isStatic() && - obj->m3D->mRy.isStatic() && obj->m3D->mRz.isStatic(); + bool isStatic = obj->mAnchor.isStatic() && obj->mPosition.isStatic() && + obj->mRotation.isStatic() && obj->mScale.isStatic() && + obj->mOpacity.isStatic(); + if (obj->mExtra) { + isStatic = isStatic && + obj->mExtra->m3DRx.isStatic() && + obj->mExtra->m3DRy.isStatic() && + obj->mExtra->m3DRz.isStatic() && + obj->mExtra->mSeparateX.isStatic() && + obj->mExtra->mSeparateY.isStatic(); } - sharedTransform->set(std::move(obj)); + sharedTransform->set(std::move(obj), isStatic); return sharedTransform; } @@ -1538,7 +1595,7 @@ std::shared_ptr LottieParserImpl::parseStrokeObject() obj->mJoinStyle = getLineJoin(); } else if (0 == strcmp(key, "ml")) { RAPIDJSON_ASSERT(PeekType() == kNumberType); - obj->mMeterLimit = GetDouble(); + obj->mMiterLimit = GetDouble(); } else if (0 == strcmp(key, "d")) { parseDashProperty(obj->mDash); } else if (0 == strcmp(key, "hd")) { @@ -1551,7 +1608,7 @@ std::shared_ptr LottieParserImpl::parseStrokeObject() } } obj->setStatic(obj->mColor.isStatic() && obj->mOpacity.isStatic() && - obj->mWidth.isStatic() && obj->mDash.mStatic); + obj->mWidth.isStatic() && obj->mDash.isStatic()); return sharedStroke; } @@ -1618,8 +1675,6 @@ std::shared_ptr LottieParserImpl::parseGFillObject() void LottieParserImpl::parseDashProperty(LOTDashProperty &dash) { - dash.mDashCount = 0; - dash.mStatic = true; RAPIDJSON_ASSERT(PeekType() == kArrayType); EnterArray(); while (NextArrayValue()) { @@ -1627,20 +1682,13 @@ void LottieParserImpl::parseDashProperty(LOTDashProperty &dash) EnterObject(); while (const char *key = NextObjectKey()) { if (0 == strcmp(key, "v")) { - parseProperty(dash.mDashArray[dash.mDashCount++]); + dash.mData.emplace_back(); + parseProperty(dash.mData.back()); } else { Skip(key); } } } - - // update the staic proprty - for (int i = 0; i < dash.mDashCount; i++) { - if (!dash.mDashArray[i].isStatic()) { - dash.mStatic = false; - break; - } - } } /* @@ -1663,7 +1711,7 @@ std::shared_ptr LottieParserImpl::parseGStrokeObject() obj->mJoinStyle = getLineJoin(); } else if (0 == strcmp(key, "ml")) { RAPIDJSON_ASSERT(PeekType() == kNumberType); - obj->mMeterLimit = GetDouble(); + obj->mMiterLimit = GetDouble(); } else if (0 == strcmp(key, "d")) { parseDashProperty(obj->mDash); } else { @@ -1672,7 +1720,7 @@ std::shared_ptr LottieParserImpl::parseGStrokeObject() } obj->setStatic(obj->isStatic() && obj->mWidth.isStatic() && - obj->mDash.mStatic); + obj->mDash.isStatic()); return sharedGStroke; } @@ -1691,13 +1739,16 @@ void LottieParserImpl::getValue(std::vector &v) void LottieParserImpl::getValue(VPointF &pt) { - float val[4]; + float val[4] = {0.f}; int i = 0; if (PeekType() == kArrayType) EnterArray(); while (NextArrayValue()) { - val[i++] = GetDouble(); + const auto value = GetDouble(); + if (i < 4) { + val[i++] = value; + } } pt.setX(val[0]); pt.setY(val[1]); @@ -1721,16 +1772,17 @@ void LottieParserImpl::getValue(float &val) void LottieParserImpl::getValue(LottieColor &color) { - float val[4]; + float val[4] = {0.f}; int i = 0; if (PeekType() == kArrayType) EnterArray(); while (NextArrayValue()) { - val[i++] = GetDouble(); + const auto value = GetDouble(); + if (i < 4) { + val[i++] = value; + } } - color.r = val[0]; - color.g = val[1]; - color.b = val[2]; + color = applyReplacements(LottieColor(val[0], val[1], val[2])); } void LottieParserImpl::getValue(LottieGradient &grad) @@ -1804,10 +1856,10 @@ void LottieParserImpl::getValue(LottieShapeData &obj) vCritical << "The Shape data are corrupted"; points = std::vector(); } else { - int size = vertices.size(); + auto size = vertices.size(); points.reserve(3 * size + 4); points.push_back(vertices[0]); - for (int i = 1; i < size; i++) { + for (size_t i = 1; i < size; i++) { points.push_back(vertices[i - 1] + outPoint[i - 1]); // CP1 = start + outTangent points.push_back(vertices[i] + @@ -1876,14 +1928,15 @@ std::shared_ptr LottieParserImpl::interpolator( } auto search = mInterpolatorCache.find(key); + if (search != mInterpolatorCache.end()) { return search->second; - } else { - auto obj = std::make_shared( - VInterpolator(outTangent, inTangent)); - mInterpolatorCache[std::move(key)] = obj; - return obj; } + + auto obj = std::make_shared( + VInterpolator(outTangent, inTangent)); + mInterpolatorCache[std::move(key)] = obj; + return obj; } /* @@ -2051,7 +2104,7 @@ void LottieParserImpl::parseProperty(LOTAnimatable &obj) } } -#ifdef DEBUG_PRINT_TREE +#ifdef LOTTIE_DUMP_TREE_SUPPORT class LOTDataInspector { public: @@ -2076,15 +2129,14 @@ public: << ", mask:" << obj->hasMask() << ", inFm:" << obj->mInFrame << ", outFm:" << obj->mOutFrame << ", stFm:" << obj->mStartFrame << ", ts:" << obj->mTimeStreatch << ", ao:" << obj->autoOrient() - << ", ddd:" << (obj->mTransform ? obj->mTransform->ddd() : false) << ", W:" << obj->layerSize().width() << ", H:" << obj->layerSize().height(); if (obj->mLayerType == LayerType::Image) vDebug << level << "\t{ " << "ImageInfo:" - << " W :" << obj->mAsset->mWidth - << ", H :" << obj->mAsset->mHeight << " }" + << " W :" << obj->extra()->mAsset->mWidth + << ", H :" << obj->extra()->mAsset->mHeight << " }" << "\n"; else { vDebug << level; @@ -2235,26 +2287,28 @@ public: #endif -LottieParser::~LottieParser() +LottieParser::~LottieParser() = default; +LottieParser::LottieParser( + char *str, const char *dir_path, + const std::vector> + &colorReplacements) + : d(std::make_unique(str, dir_path, colorReplacements)) { - delete d; -} - -LottieParser::LottieParser(char *str, const char *dir_path) - : d(new LottieParserImpl(str, dir_path)) -{ - d->parseComposition(); + if (d->VerifyType()) + d->parseComposition(); + else + vWarning << "Input data is not Lottie format!"; } std::shared_ptr LottieParser::model() { if (!d->composition()) return nullptr; - + std::shared_ptr model = std::make_shared(); model->mRoot = d->composition(); model->mRoot->processRepeaterObjects(); -#ifdef DEBUG_PRINT_TREE +#ifdef LOTTIE_DUMP_TREE_SUPPORT LOTDataInspector inspector; inspector.visit(model->mRoot.get(), ""); #endif diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieparser.h b/submodules/rlottie/rlottie/src/lottie/lottieparser.h similarity index 81% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieparser.h rename to submodules/rlottie/rlottie/src/lottie/lottieparser.h index 21e5ae8a43..06165f9776 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieparser.h +++ b/submodules/rlottie/rlottie/src/lottie/lottieparser.h @@ -20,15 +20,18 @@ #define LOTTIEPARSER_H #include "lottiemodel.h" +#include class LottieParserImpl; class LottieParser { public: ~LottieParser(); - LottieParser(char* str, const char *dir_path); + LottieParser(char *str, const char *dir_path, + const std::vector> + &colorReplacements = {}); std::shared_ptr model(); private: - LottieParserImpl *d; + std::unique_ptr d; }; #endif // LOTTIEPARSER_H diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieproxymodel.cpp b/submodules/rlottie/rlottie/src/lottie/lottieproxymodel.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieproxymodel.cpp rename to submodules/rlottie/rlottie/src/lottie/lottieproxymodel.cpp diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/lottieproxymodel.h b/submodules/rlottie/rlottie/src/lottie/lottieproxymodel.h similarity index 98% rename from submodules/RLottie/Sources/rlottie/src/lottie/lottieproxymodel.h rename to submodules/rlottie/rlottie/src/lottie/lottieproxymodel.h index 8b5ad17594..1debf7ab05 100644 --- a/submodules/RLottie/Sources/rlottie/src/lottie/lottieproxymodel.h +++ b/submodules/rlottie/rlottie/src/lottie/lottieproxymodel.h @@ -294,11 +294,13 @@ public: } return _modelData->strokeWidth(frame); } - float meterLimit() const {return _modelData->meterLimit();} + float miterLimit() const {return _modelData->miterLimit();} CapStyle capStyle() const {return _modelData->capStyle();} JoinStyle joinStyle() const {return _modelData->joinStyle();} bool hasDashInfo() const { return _modelData->hasDashInfo();} - int getDashInfo(int frameNo, float *array) const {return _modelData->getDashInfo(frameNo, array);} + void getDashInfo(int frameNo, std::vector& result) const { + return _modelData->getDashInfo(frameNo, result); + } private: T *_modelData; diff --git a/submodules/rlottie/rlottie/src/lottie/meson.build b/submodules/rlottie/rlottie/src/lottie/meson.build new file mode 100644 index 0000000000..7a4df79b87 --- /dev/null +++ b/submodules/rlottie/rlottie/src/lottie/meson.build @@ -0,0 +1,15 @@ + +source_file = [ + 'lottieparser.cpp', + 'lottieloader.cpp', + 'lottiemodel.cpp', + 'lottieproxymodel.cpp', + 'lottieanimation.cpp', + 'lottieitem.cpp', + 'lottiekeypath.cpp' +] + +lottie_dep = declare_dependency( + include_directories : include_directories('.'), + sources : source_file + ) diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/allocators.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/allocators.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/allocators.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/allocators.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/cursorstreamwrapper.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/cursorstreamwrapper.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/cursorstreamwrapper.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/cursorstreamwrapper.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/document.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/document.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/document.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/document.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/encodedstream.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/encodedstream.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/encodedstream.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/encodedstream.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/encodings.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/encodings.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/encodings.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/encodings.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/error/en.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/error/en.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/error/en.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/error/en.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/error/error.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/error/error.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/error/error.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/error/error.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/filereadstream.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/filereadstream.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/filereadstream.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/filereadstream.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/filewritestream.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/filewritestream.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/filewritestream.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/filewritestream.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/fwd.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/fwd.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/fwd.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/fwd.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/biginteger.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/biginteger.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/biginteger.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/biginteger.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/diyfp.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/diyfp.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/diyfp.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/diyfp.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/dtoa.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/dtoa.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/dtoa.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/dtoa.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/ieee754.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/ieee754.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/ieee754.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/ieee754.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/itoa.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/itoa.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/itoa.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/itoa.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/meta.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/meta.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/meta.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/meta.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/pow10.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/pow10.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/pow10.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/pow10.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/regex.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/regex.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/regex.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/regex.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/stack.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/stack.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/stack.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/stack.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/strfunc.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/strfunc.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/strfunc.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/strfunc.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/strtod.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/strtod.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/strtod.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/strtod.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/swap.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/internal/swap.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/internal/swap.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/internal/swap.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/istreamwrapper.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/istreamwrapper.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/istreamwrapper.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/istreamwrapper.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/memorybuffer.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/memorybuffer.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/memorybuffer.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/memorybuffer.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/memorystream.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/memorystream.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/memorystream.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/memorystream.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/msinttypes/inttypes.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/msinttypes/inttypes.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/msinttypes/inttypes.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/msinttypes/inttypes.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/msinttypes/stdint.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/msinttypes/stdint.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/msinttypes/stdint.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/msinttypes/stdint.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/ostreamwrapper.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/ostreamwrapper.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/ostreamwrapper.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/ostreamwrapper.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/pointer.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/pointer.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/pointer.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/pointer.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/prettywriter.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/prettywriter.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/prettywriter.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/prettywriter.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/rapidjson.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/rapidjson.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/rapidjson.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/rapidjson.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/reader.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/reader.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/reader.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/reader.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/schema.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/schema.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/schema.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/schema.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/stream.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/stream.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/stream.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/stream.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/stringbuffer.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/stringbuffer.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/stringbuffer.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/stringbuffer.h diff --git a/submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/writer.h b/submodules/rlottie/rlottie/src/lottie/rapidjson/writer.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/lottie/rapidjson/writer.h rename to submodules/rlottie/rlottie/src/lottie/rapidjson/writer.h diff --git a/submodules/rlottie/rlottie/src/meson.build b/submodules/rlottie/rlottie/src/meson.build new file mode 100644 index 0000000000..3bcd60974a --- /dev/null +++ b/submodules/rlottie/rlottie/src/meson.build @@ -0,0 +1,37 @@ +compiler_flags = ['-DLOT_BUILD'] + +cc = meson.get_compiler('cpp') +if (cc.get_id() != 'msvc') + compiler_flags += ['-fno-exceptions', '-fno-rtti', + '-fno-unwind-tables' , '-fno-asynchronous-unwind-tables', + '-Woverloaded-virtual', '-Wno-unused-parameter'] +endif + +subdir('vector') +subdir('lottie') +subdir('binding') + +rlottie_lib_dep = [ vector_dep, lottie_dep, binding_dep, dependency('threads')] + +rlottie_lib = library('rlottie', + include_directories : inc, + version : meson.project_version(), + dependencies : rlottie_lib_dep, + install : true, + cpp_args : compiler_flags, + gnu_symbol_visibility : 'hidden', + ) + +# Make rlottie library usable as a Meson subproject. +rlottie_dep = declare_dependency( + include_directories: inc, + link_with : rlottie_lib) + +pkg_mod = import('pkgconfig') + +pkg_mod.generate( libraries : rlottie_lib, + version : meson.project_version(), + name : 'librlottie', + filebase : 'rlottie', + description : 'A Library for rendering lottie files.' + ) diff --git a/submodules/RLottie/Sources/rlottie/src/vector/CMakeLists.txt b/submodules/rlottie/rlottie/src/vector/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/CMakeLists.txt rename to submodules/rlottie/rlottie/src/vector/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/src/vector/config.h b/submodules/rlottie/rlottie/src/vector/config.h similarity index 52% rename from submodules/RLottie/Sources/rlottie/src/vector/config.h rename to submodules/rlottie/rlottie/src/vector/config.h index 596ad11616..528115bcf1 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/config.h +++ b/submodules/rlottie/rlottie/src/vector/config.h @@ -2,15 +2,18 @@ #define CONFIG_H // enable threading -//#define LOTTIE_THREAD_SUPPORT +#define LOTTIE_THREAD_SUPPORT //enable logging //#define LOTTIE_LOGGING_SUPPORT -//enable static building of image loader -//#define LOTTIE_STATIC_IMAGE_LOADER +//enable module building of image loader +//#define LOTTIE_IMAGE_MODULE_SUPPORT //enable lottie model caching //#define LOTTIE_CACHE_SUPPORT +// disable image loader +#define LOTTIE_IMAGE_MODULE_DISABLED + #endif // CONFIG_H diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/CMakeLists.txt b/submodules/rlottie/rlottie/src/vector/freetype/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/CMakeLists.txt rename to submodules/rlottie/rlottie/src/vector/freetype/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/meson.build b/submodules/rlottie/rlottie/src/vector/freetype/meson.build similarity index 53% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/meson.build rename to submodules/rlottie/rlottie/src/vector/freetype/meson.build index 8bbff5c329..7c1217feb5 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/freetype/meson.build +++ b/submodules/rlottie/rlottie/src/vector/freetype/meson.build @@ -1,10 +1,11 @@ -source_file = files('v_ft_math.cpp') -source_file += files('v_ft_raster.cpp') -source_file += files('v_ft_stroker.cpp') - +source_file = [ + 'v_ft_math.cpp', + 'v_ft_raster.cpp', + 'v_ft_stroker.cpp', + ] freetype_dep = declare_dependency( include_directories : include_directories('.'), sources : source_file - ) \ No newline at end of file + ) diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_math.cpp b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_math.cpp similarity index 97% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_math.cpp rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_math.cpp index 5a71e70e31..0c5d1f6afe 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_math.cpp +++ b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_math.cpp @@ -441,16 +441,17 @@ void SW_FT_Vector_From_Polar(SW_FT_Vector* vec, SW_FT_Fixed length, /* documentation is in fttrigon.h */ -SW_FT_Angle SW_FT_Angle_Diff(SW_FT_Angle angle1, SW_FT_Angle angle2) +SW_FT_Angle SW_FT_Angle_Diff( SW_FT_Angle angle1, SW_FT_Angle angle2 ) { - SW_FT_Angle delta = angle2 - angle1; + SW_FT_Angle delta = angle2 - angle1; - delta %= SW_FT_ANGLE_2PI; - if (delta < 0) delta += SW_FT_ANGLE_2PI; + while ( delta <= -SW_FT_ANGLE_PI ) + delta += SW_FT_ANGLE_2PI; - if (delta > SW_FT_ANGLE_PI) delta -= SW_FT_ANGLE_2PI; + while ( delta > SW_FT_ANGLE_PI ) + delta -= SW_FT_ANGLE_2PI; - return delta; + return delta; } /* END */ diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_math.h b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_math.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_math.h rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_math.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_raster.cpp b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_raster.cpp similarity index 98% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_raster.cpp rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_raster.cpp index 639eaaa9ff..51cb1f2cc8 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_raster.cpp +++ b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_raster.cpp @@ -637,19 +637,21 @@ End: static void gray_split_conic(SW_FT_Vector* base) { - TPos a, b; + TPos a, b; base[4].x = base[2].x; - b = base[1].x; - a = base[3].x = (base[2].x + b) / 2; - b = base[1].x = (base[0].x + b) / 2; - base[2].x = (a + b) / 2; + a = base[0].x + base[1].x; + b = base[1].x + base[2].x; + base[3].x = b >> 1; + base[2].x = ( a + b ) >> 2; + base[1].x = a >> 1; base[4].y = base[2].y; - b = base[1].y; - a = base[3].y = (base[2].y + b) / 2; - b = base[1].y = (base[0].y + b) / 2; - base[2].y = (a + b) / 2; + a = base[0].y + base[1].y; + b = base[1].y + base[2].y; + base[3].y = b >> 1; + base[2].y = ( a + b ) >> 2; + base[1].y = a >> 1; } static void gray_render_conic(RAS_ARG_ const SW_FT_Vector* control, @@ -719,27 +721,32 @@ static void gray_render_conic(RAS_ARG_ const SW_FT_Vector* control, static void gray_split_cubic(SW_FT_Vector* base) { - TPos a, b, c, d; + TPos a, b, c; + base[6].x = base[3].x; - c = base[1].x; - d = base[2].x; - base[1].x = a = (base[0].x + c) / 2; - base[5].x = b = (base[3].x + d) / 2; - c = (c + d) / 2; - base[2].x = a = (a + c) / 2; - base[4].x = b = (b + c) / 2; - base[3].x = (a + b) / 2; + a = base[0].x + base[1].x; + b = base[1].x + base[2].x; + c = base[2].x + base[3].x; + base[5].x = c >> 1; + c += b; + base[4].x = c >> 2; + base[1].x = a >> 1; + a += b; + base[2].x = a >> 2; + base[3].x = ( a + c ) >> 3; base[6].y = base[3].y; - c = base[1].y; - d = base[2].y; - base[1].y = a = (base[0].y + c) / 2; - base[5].y = b = (base[3].y + d) / 2; - c = (c + d) / 2; - base[2].y = a = (a + c) / 2; - base[4].y = b = (b + c) / 2; - base[3].y = (a + b) / 2; + a = base[0].y + base[1].y; + b = base[1].y + base[2].y; + c = base[2].y + base[3].y; + base[5].y = c >> 1; + c += b; + base[4].y = c >> 2; + base[1].y = a >> 1; + a += b; + base[2].y = a >> 2; + base[3].y = ( a + c ) >> 3; } static void gray_render_cubic(RAS_ARG_ const SW_FT_Vector* control1, diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_raster.h b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_raster.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_raster.h rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_raster.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_stroker.cpp b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_stroker.cpp similarity index 98% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_stroker.cpp rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_stroker.cpp index 2a857079b0..c7307eb3f7 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_stroker.cpp +++ b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_stroker.cpp @@ -47,16 +47,18 @@ static void ft_conic_split(SW_FT_Vector* base) SW_FT_Pos a, b; base[4].x = base[2].x; - b = base[1].x; - a = base[3].x = (base[2].x + b) / 2; - b = base[1].x = (base[0].x + b) / 2; - base[2].x = (a + b) / 2; + a = base[0].x + base[1].x; + b = base[1].x + base[2].x; + base[3].x = b >> 1; + base[2].x = ( a + b ) >> 2; + base[1].x = a >> 1; base[4].y = base[2].y; - b = base[1].y; - a = base[3].y = (base[2].y + b) / 2; - b = base[1].y = (base[0].y + b) / 2; - base[2].y = (a + b) / 2; + a = base[0].y + base[1].y; + b = base[1].y + base[2].y; + base[3].y = b >> 1; + base[2].y = ( a + b ) >> 2; + base[1].y = a >> 1; } static SW_FT_Bool ft_conic_is_small_enough(SW_FT_Vector* base, @@ -99,27 +101,31 @@ static SW_FT_Bool ft_conic_is_small_enough(SW_FT_Vector* base, static void ft_cubic_split(SW_FT_Vector* base) { - SW_FT_Pos a, b, c, d; + SW_FT_Pos a, b, c; base[6].x = base[3].x; - c = base[1].x; - d = base[2].x; - base[1].x = a = (base[0].x + c) / 2; - base[5].x = b = (base[3].x + d) / 2; - c = (c + d) / 2; - base[2].x = a = (a + c) / 2; - base[4].x = b = (b + c) / 2; - base[3].x = (a + b) / 2; + a = base[0].x + base[1].x; + b = base[1].x + base[2].x; + c = base[2].x + base[3].x; + base[5].x = c >> 1; + c += b; + base[4].x = c >> 2; + base[1].x = a >> 1; + a += b; + base[2].x = a >> 2; + base[3].x = ( a + c ) >> 3; base[6].y = base[3].y; - c = base[1].y; - d = base[2].y; - base[1].y = a = (base[0].y + c) / 2; - base[5].y = b = (base[3].y + d) / 2; - c = (c + d) / 2; - base[2].y = a = (a + c) / 2; - base[4].y = b = (b + c) / 2; - base[3].y = (a + b) / 2; + a = base[0].y + base[1].y; + b = base[1].y + base[2].y; + c = base[2].y + base[3].y; + base[5].y = c >> 1; + c += b; + base[4].y = c >> 2; + base[1].y = a >> 1; + a += b; + base[2].y = a >> 2; + base[3].y = ( a + c ) >> 3; } /* Return the average of `angle1' and `angle2'. */ diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_stroker.h b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_stroker.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_stroker.h rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_stroker.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_types.h b/submodules/rlottie/rlottie/src/vector/freetype/v_ft_types.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/freetype/v_ft_types.h rename to submodules/rlottie/rlottie/src/vector/freetype/v_ft_types.h diff --git a/submodules/rlottie/rlottie/src/vector/meson.build b/submodules/rlottie/rlottie/src/vector/meson.build new file mode 100644 index 0000000000..c0f0c256bc --- /dev/null +++ b/submodules/rlottie/rlottie/src/vector/meson.build @@ -0,0 +1,34 @@ + +subdir('freetype') +subdir('pixman') +subdir('stb') + +source_file = [ + 'vdasher.cpp', + 'vbrush.cpp', + 'vbitmap.cpp', + 'vpainter.cpp', + 'vcompositionfunctions.cpp', + 'vdrawhelper.cpp', + 'vdrawhelper_sse2.cpp', + 'vdrawhelper_neon.cpp', + 'vdrawable.cpp', + 'vrect.cpp', + 'vrle.cpp', + 'vpath.cpp', + 'vpathmesure.cpp', + 'vmatrix.cpp', + 'velapsedtimer.cpp', + 'vdebug.cpp', + 'vinterpolator.cpp', + 'vbezier.cpp', + 'vraster.cpp', + 'vimageloader.cpp', +] + +vector_dep = declare_dependency( include_directories : include_directories('.'), + sources : source_file, + dependencies : [freetype_dep, pixman_dep, stb_dep], + ) + + diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/CMakeLists.txt b/submodules/rlottie/rlottie/src/vector/pixman/CMakeLists.txt similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/pixman/CMakeLists.txt rename to submodules/rlottie/rlottie/src/vector/pixman/CMakeLists.txt diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/meson.build b/submodules/rlottie/rlottie/src/vector/pixman/meson.build similarity index 56% rename from submodules/RLottie/Sources/rlottie/src/vector/pixman/meson.build rename to submodules/rlottie/rlottie/src/vector/pixman/meson.build index 5d3b4e32ef..afa7b561cc 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/pixman/meson.build +++ b/submodules/rlottie/rlottie/src/vector/pixman/meson.build @@ -1,8 +1,8 @@ -source_file = files('vregion.cpp') +source_file = ['vregion.cpp'] -if host_machine.cpu_family() == 'arm' or host_machine.cpu_family() == 'aarch64' - source_file += files('pixman-arm-neon-asm.S') +if host_machine.cpu_family() == 'arm' + source_file += 'pixman-arm-neon-asm.S' endif pixman_dep = declare_dependency( diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arm-neon-asm.S b/submodules/rlottie/rlottie/src/vector/pixman/pixman-arm-neon-asm.S similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arm-neon-asm.S rename to submodules/rlottie/rlottie/src/vector/pixman/pixman-arm-neon-asm.S diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arm-neon-asm.h b/submodules/rlottie/rlottie/src/vector/pixman/pixman-arm-neon-asm.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/pixman/pixman-arm-neon-asm.h rename to submodules/rlottie/rlottie/src/vector/pixman/pixman-arm-neon-asm.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/vregion.cpp b/submodules/rlottie/rlottie/src/vector/pixman/vregion.cpp similarity index 99% rename from submodules/RLottie/Sources/rlottie/src/vector/pixman/vregion.cpp rename to submodules/rlottie/rlottie/src/vector/pixman/vregion.cpp index 3bd38e7f62..1c5300fb62 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/pixman/vregion.cpp +++ b/submodules/rlottie/rlottie/src/vector/pixman/vregion.cpp @@ -145,7 +145,7 @@ static void _pixman_log_error(const char *function, const char *message) #define GOOD_RECT(rect) ((rect)->x1 < (rect)->x2 && (rect)->y1 < (rect)->y2) #define BAD_RECT(rect) ((rect)->x1 > (rect)->x2 || (rect)->y1 > (rect)->y2) -#if 0 +#ifdef DEBUG #define GOOD(reg) \ do { \ @@ -413,6 +413,7 @@ PIXMAN_EXPORT void PREFIX(_fini)(region_type_t *region) { GOOD(region); FREE_DATA(region); + region->data = NULL; } PIXMAN_EXPORT int PREFIX(_n_rects)(region_type_t *region) diff --git a/submodules/RLottie/Sources/rlottie/src/vector/pixman/vregion.h b/submodules/rlottie/rlottie/src/vector/pixman/vregion.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/pixman/vregion.h rename to submodules/rlottie/rlottie/src/vector/pixman/vregion.h diff --git a/submodules/rlottie/rlottie/src/vector/stb/CMakeLists.txt b/submodules/rlottie/rlottie/src/vector/stb/CMakeLists.txt new file mode 100644 index 0000000000..dd96ec5888 --- /dev/null +++ b/submodules/rlottie/rlottie/src/vector/stb/CMakeLists.txt @@ -0,0 +1,20 @@ +if(LOTTIE_MODULE) + add_library(rlottie-image-loader SHARED + stb_image.cpp + ) + target_compile_options(rlottie-image-loader PRIVATE + -fvisibility=hidden + ) + set_target_properties(rlottie-image-loader PROPERTIES + DEFINE_SYMBOL LOT_BUILD + ) + install(TARGETS rlottie-image-loader + LIBRARY DESTINATION ${LIB_INSTALL_DIR} + ARCHIVE DESTINATION ${LIB_INSTALL_DIR} + ) +else() + target_sources(rlottie + PRIVATE + "${CMAKE_CURRENT_LIST_DIR}/stb_image.cpp" + ) +endif() diff --git a/submodules/rlottie/rlottie/src/vector/stb/meson.build b/submodules/rlottie/rlottie/src/vector/stb/meson.build new file mode 100644 index 0000000000..e04bde7471 --- /dev/null +++ b/submodules/rlottie/rlottie/src/vector/stb/meson.build @@ -0,0 +1,20 @@ + +source_file = ['stb_image.cpp'] + +if get_option('module') == true + rlottie_image_loader_lib = shared_library('rlottie-image-loader', + source_file, + include_directories : [include_directories('.'), config_dir], + install : true, + cpp_args : compiler_flags, + gnu_symbol_visibility : 'hidden', + ) + cc = meson.get_compiler('cpp') + stb_dep = cc.find_library('dl', required : false) +else + stb_dep = declare_dependency( include_directories : include_directories('.'), + sources : source_file + ) +endif + + diff --git a/submodules/RLottie/Sources/rlottie/src/vector/stb/stb_image.cpp b/submodules/rlottie/rlottie/src/vector/stb/stb_image.cpp similarity index 62% rename from submodules/RLottie/Sources/rlottie/src/vector/stb/stb_image.cpp rename to submodules/rlottie/rlottie/src/vector/stb/stb_image.cpp index c1b3f744d9..dceab58209 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/stb/stb_image.cpp +++ b/submodules/rlottie/rlottie/src/vector/stb/stb_image.cpp @@ -13,26 +13,18 @@ #include "stb_image.h" -#ifdef _WIN32 -#ifdef LOT_BUILD -#ifdef DLL_EXPORT -#define LOT_EXPORT __declspec(dllexport) +#if defined _WIN32 || defined __CYGWIN__ + #ifdef LOT_BUILD + #define LOT_EXPORT __declspec(dllexport) + #else + #define LOT_EXPORT __declspec(dllimport) + #endif #else -#define LOT_EXPORT -#endif -#else -#define LOT_EXPORT __declspec(dllimport) -#endif -#else -#ifdef __GNUC__ -#if __GNUC__ >= 4 -#define LOT_EXPORT __attribute__((visibility("default"))) -#else -#define LOT_EXPORT -#endif -#else -#define LOT_EXPORT -#endif + #ifdef LOT_BUILD + #define LOT_EXPORT __attribute__ ((visibility ("default"))) + #else + #define LOT_EXPORT + #endif #endif #ifdef __cplusplus @@ -46,18 +38,20 @@ extern "C" { LOT_EXPORT unsigned char *lottie_image_load(char const *filename, int *x, int *y, int *comp, int req_comp) { - return nullptr; + return stbi_load(filename, x, y, comp, req_comp); } LOT_EXPORT unsigned char *lottie_image_load_from_data(const char *imageData, int len, int *x, int *y, int *comp, int req_comp) { - return nullptr; + unsigned char *data = (unsigned char *)imageData; + return stbi_load_from_memory(data, len, x, y, comp, req_comp); } LOT_EXPORT void lottie_image_free(unsigned char *data) { + stbi_image_free(data); } #ifdef __cplusplus diff --git a/submodules/RLottie/Sources/rlottie/src/vector/stb/stb_image.h b/submodules/rlottie/rlottie/src/vector/stb/stb_image.h similarity index 99% rename from submodules/RLottie/Sources/rlottie/src/vector/stb/stb_image.h rename to submodules/rlottie/rlottie/src/vector/stb/stb_image.h index b8ab055374..8c85e52c84 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/stb/stb_image.h +++ b/submodules/rlottie/rlottie/src/vector/stb/stb_image.h @@ -4580,6 +4580,7 @@ static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint3 } } STBI_FREE(a->out); + a->out = NULL; image_data += img_len; image_data_len -= img_len; } diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vbezier.cpp b/submodules/rlottie/rlottie/src/vector/vbezier.cpp similarity index 96% rename from submodules/RLottie/Sources/rlottie/src/vector/vbezier.cpp rename to submodules/rlottie/rlottie/src/vector/vbezier.cpp index c5d7a173da..e699157425 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vbezier.cpp +++ b/submodules/rlottie/rlottie/src/vector/vbezier.cpp @@ -79,7 +79,7 @@ float VBezier::tAtLength(float l) const { float len = length(); float t = 1.0; - const float error = 0.01; + const float error = 0.01f; if (l > len || vCompare(l, len)) return t; t *= 0.5; @@ -93,10 +93,10 @@ float VBezier::tAtLength(float l) const if (fabs(lLen - l) < error) break; if (lLen < l) { - t += (lastBigger - t) * 0.5; + t += (lastBigger - t) * 0.5f; } else { lastBigger = t; - t -= t * 0.5; + t -= t * 0.5f; } } return t; @@ -116,7 +116,7 @@ VPointF VBezier::derivative(float t) const // p'(t) = 3 * (-(1-2t+t^2) * p0 + (1 - 4 * t + 3 * t^2) * p1 + (2 * t - 3 * // t^2) * p2 + t^2 * p3) - float m_t = 1. - t; + float m_t = 1.0f - t; float d = t * t; float a = -m_t * m_t; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vbezier.h b/submodules/rlottie/rlottie/src/vector/vbezier.h similarity index 87% rename from submodules/RLottie/Sources/rlottie/src/vector/vbezier.h rename to submodules/rlottie/rlottie/src/vector/vbezier.h index b07e7824da..c90b884985 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vbezier.h +++ b/submodules/rlottie/rlottie/src/vector/vbezier.h @@ -50,13 +50,13 @@ private: inline void VBezier::coefficients(float t, float &a, float &b, float &c, float &d) { - float m_t = 1. - t; + float m_t = 1.0f - t; b = m_t * m_t; c = t * t; d = c * t; a = b * m_t; - b *= 3. * t; - c *= 3. * m_t; + b *= 3.0f * t; + c *= 3.0f * m_t; } inline VPointF VBezier::pointAt(float t) const @@ -64,7 +64,7 @@ inline VPointF VBezier::pointAt(float t) const // numerically more stable: float x, y; - float m_t = 1. - t; + float m_t = 1.0f - t; { float a = x1 * m_t + x2 * t; float b = x2 * m_t + x3 * t; @@ -110,23 +110,23 @@ inline void VBezier::parameterSplitLeft(float t, VBezier *left) inline void VBezier::split(VBezier *firstHalf, VBezier *secondHalf) const { - float c = (x2 + x3) * .5; - firstHalf->x2 = (x1 + x2) * .5; - secondHalf->x3 = (x3 + x4) * .5; + float c = (x2 + x3) * 0.5f; + firstHalf->x2 = (x1 + x2) * 0.5f; + secondHalf->x3 = (x3 + x4) * 0.5f; firstHalf->x1 = x1; secondHalf->x4 = x4; - firstHalf->x3 = (firstHalf->x2 + c) * .5; - secondHalf->x2 = (secondHalf->x3 + c) * .5; - firstHalf->x4 = secondHalf->x1 = (firstHalf->x3 + secondHalf->x2) * .5; + firstHalf->x3 = (firstHalf->x2 + c) * 0.5f; + secondHalf->x2 = (secondHalf->x3 + c) * 0.5f; + firstHalf->x4 = secondHalf->x1 = (firstHalf->x3 + secondHalf->x2) * 0.5f; c = (y2 + y3) / 2; - firstHalf->y2 = (y1 + y2) * .5; - secondHalf->y3 = (y3 + y4) * .5; + firstHalf->y2 = (y1 + y2) * 0.5f; + secondHalf->y3 = (y3 + y4) * 0.5f; firstHalf->y1 = y1; secondHalf->y4 = y4; - firstHalf->y3 = (firstHalf->y2 + c) * .5; - secondHalf->y2 = (secondHalf->y3 + c) * .5; - firstHalf->y4 = secondHalf->y1 = (firstHalf->y3 + secondHalf->y2) * .5; + firstHalf->y3 = (firstHalf->y2 + c) * 0.5f; + secondHalf->y2 = (secondHalf->y3 + c) * 0.5f; + firstHalf->y4 = secondHalf->y1 = (firstHalf->y3 + secondHalf->y2) * 0.5f; } V_END_NAMESPACE diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vbitmap.cpp b/submodules/rlottie/rlottie/src/vector/vbitmap.cpp similarity index 69% rename from submodules/RLottie/Sources/rlottie/src/vector/vbitmap.cpp rename to submodules/rlottie/rlottie/src/vector/vbitmap.cpp index 20963a65e0..7453407bed 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vbitmap.cpp +++ b/submodules/rlottie/rlottie/src/vector/vbitmap.cpp @@ -17,73 +17,56 @@ */ #include "vbitmap.h" -#include +#include +#include #include "vdrawhelper.h" #include "vglobal.h" V_BEGIN_NAMESPACE struct VBitmap::Impl { - uchar * mData{nullptr}; + std::unique_ptr mOwnData{nullptr}; + uchar * mRoData{nullptr}; uint mWidth{0}; uint mHeight{0}; uint mStride{0}; - uint mBytes{0}; - uint mDepth{0}; + uchar mDepth{0}; VBitmap::Format mFormat{VBitmap::Format::Invalid}; - bool mOwnData; - bool mRoData; - Impl() = delete; - - Impl(uint width, uint height, VBitmap::Format format) - : mOwnData(true), mRoData(false) + explicit Impl(size_t width, size_t height, VBitmap::Format format) { reset(width, height, format); } - void reset(uint width, uint height, VBitmap::Format format) - { - if (mOwnData && mData) delete (mData); + explicit Impl(uchar *data, size_t w, size_t h, size_t bytesPerLine, VBitmap::Format format) + : mRoData(data), mWidth(uint(w)), mHeight(uint(h)), mStride(uint(bytesPerLine)), + mDepth(depth(format)), mFormat(format){} - mDepth = depth(format); - uint stride = ((width * mDepth + 31) >> 5) - << 2; // bytes per scanline (must be multiple of 4) + VRect rect() const { return VRect(0, 0, mWidth, mHeight);} + VSize size() const { return VSize(mWidth, mHeight); } + size_t stride() const { return mStride; } + size_t width() const { return mWidth; } + size_t height() const { return mHeight; } + uchar * data() { return mRoData ? mRoData : mOwnData.get(); } - mWidth = width; - mHeight = height; - mFormat = format; - mStride = stride; - mBytes = mStride * mHeight; - mData = reinterpret_cast(::operator new(mBytes)); - } - - Impl(uchar *data, uint w, uint h, uint bytesPerLine, VBitmap::Format format) - : mOwnData(false), mRoData(false) - { - mWidth = w; - mHeight = h; - mFormat = format; - mStride = bytesPerLine; - mBytes = mStride * mHeight; - mData = data; - mDepth = depth(format); - } - - ~Impl() - { - if (mOwnData && mData) ::operator delete(mData); - } - - uint stride() const { return mStride; } - uint width() const { return mWidth; } - uint height() const { return mHeight; } VBitmap::Format format() const { return mFormat; } - uchar * data() { return mData; } - static uint depth(VBitmap::Format format) + void reset(size_t width, size_t height, VBitmap::Format format) { - uint depth = 1; + mRoData = nullptr; + mWidth = uint(width); + mHeight = uint(height); + mFormat = format; + + mDepth = depth(format); + mStride = ((mWidth * mDepth + 31) >> 5) + << 2; // bytes per scanline (must be multiple of 4) + mOwnData = std::make_unique(mStride * mHeight); + } + + static uchar depth(VBitmap::Format format) + { + uchar depth = 1; switch (format) { case VBitmap::Format::Alpha8: depth = 8; @@ -105,9 +88,9 @@ struct VBitmap::Impl { void updateLuma() { if (mFormat != VBitmap::Format::ARGB32_Premultiplied) return; - + auto dataPtr = data(); for (uint col = 0; col < mHeight; col++) { - uint *pixel = (uint *)(mData + mStride * col); + uint *pixel = (uint *)(dataPtr + mStride * col); for (uint row = 0; row < mWidth; row++) { int alpha = vAlpha(*pixel); if (alpha == 0) { @@ -125,7 +108,7 @@ struct VBitmap::Impl { green = (green * 255) / alpha; blue = (blue * 255) / alpha; } - int luminosity = (0.299 * red + 0.587 * green + 0.114 * blue); + int luminosity = int(0.299f * red + 0.587f * green + 0.114f * blue); *pixel = luminosity << 24; pixel++; } @@ -133,14 +116,14 @@ struct VBitmap::Impl { } }; -VBitmap::VBitmap(uint width, uint height, VBitmap::Format format) +VBitmap::VBitmap(size_t width, size_t height, VBitmap::Format format) { if (width <= 0 || height <= 0 || format == Format::Invalid) return; mImpl = std::make_shared(width, height, format); } -VBitmap::VBitmap(uchar *data, uint width, uint height, uint bytesPerLine, +VBitmap::VBitmap(uchar *data, size_t width, size_t height, size_t bytesPerLine, VBitmap::Format format) { if (!data || width <= 0 || height <= 0 || bytesPerLine <= 0 || @@ -150,7 +133,7 @@ VBitmap::VBitmap(uchar *data, uint width, uint height, uint bytesPerLine, mImpl = std::make_shared(data, width, height, bytesPerLine, format); } -void VBitmap::reset(uint w, uint h, VBitmap::Format format) +void VBitmap::reset(size_t w, size_t h, VBitmap::Format format) { if (mImpl) { if (w == mImpl->width() && h == mImpl->height() && @@ -163,22 +146,22 @@ void VBitmap::reset(uint w, uint h, VBitmap::Format format) } } -uint VBitmap::stride() const +size_t VBitmap::stride() const { return mImpl ? mImpl->stride() : 0; } -uint VBitmap::width() const +size_t VBitmap::width() const { return mImpl ? mImpl->width() : 0; } -uint VBitmap::height() const +size_t VBitmap::height() const { return mImpl ? mImpl->height() : 0; } -uint VBitmap::depth() const +size_t VBitmap::depth() const { return mImpl ? mImpl->mDepth : 0; } @@ -193,9 +176,19 @@ uchar *VBitmap::data() const return mImpl ? mImpl->data() : nullptr; } +VRect VBitmap::rect() const +{ + return mImpl ? mImpl->rect() : VRect(); +} + +VSize VBitmap::size() const +{ + return mImpl ? mImpl->size() : VSize(); +} + bool VBitmap::valid() const { - return mImpl ? true : false; + return (mImpl != nullptr); } VBitmap::Format VBitmap::format() const diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vbitmap.h b/submodules/rlottie/rlottie/src/vector/vbitmap.h similarity index 75% rename from submodules/RLottie/Sources/rlottie/src/vector/vbitmap.h rename to submodules/rlottie/rlottie/src/vector/vbitmap.h index a21c680a24..4de0dcde0d 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vbitmap.h +++ b/submodules/rlottie/rlottie/src/vector/vbitmap.h @@ -34,19 +34,20 @@ public: }; VBitmap() = default; - VBitmap(uint w, uint h, VBitmap::Format format); - VBitmap(uchar *data, uint w, uint h, uint bytesPerLine, VBitmap::Format format); + VBitmap(size_t w, size_t h, VBitmap::Format format); + VBitmap(uchar *data, size_t w, size_t h, size_t bytesPerLine, VBitmap::Format format); - void reset(uint w, uint h, VBitmap::Format format=Format::ARGB32_Premultiplied); - uint stride() const; - uint width() const; - uint height() const; - uint depth() const; + void reset(size_t w, size_t h, VBitmap::Format format=Format::ARGB32_Premultiplied); + size_t stride() const; + size_t width() const; + size_t height() const; + size_t depth() const; VBitmap::Format format() const; bool valid() const; uchar * data(); uchar * data() const; - + VRect rect() const; + VSize size() const; void fill(uint pixel); void updateLuma(); private: diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vbrush.cpp b/submodules/rlottie/rlottie/src/vector/vbrush.cpp similarity index 55% rename from submodules/RLottie/Sources/rlottie/src/vector/vbrush.cpp rename to submodules/rlottie/rlottie/src/vector/vbrush.cpp index cdc114ecfe..7d761faa05 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vbrush.cpp +++ b/submodules/rlottie/rlottie/src/vector/vbrush.cpp @@ -21,10 +21,13 @@ V_BEGIN_NAMESPACE VGradient::VGradient(VGradient::Type type) - : mType(type), - mSpread(VGradient::Spread::Pad), - mMode(VGradient::Mode::Absolute) + : mType(type) { + if (mType == Type::Linear) + linear.x1 = linear.y1 = linear.x2 = linear.y2 = 0.0f; + else + radial.cx = radial.cy = radial.fx = + radial.fy = radial.cradius = radial.fradius = 0.0f; } void VGradient::setStops(const VGradientStops &stops) @@ -32,54 +35,11 @@ void VGradient::setStops(const VGradientStops &stops) mStops = stops; } -VLinearGradient::VLinearGradient(const VPointF &start, const VPointF &stop) - : VGradient(VGradient::Type::Linear) -{ - linear.x1 = start.x(); - linear.y1 = start.y(); - linear.x1 = stop.x(); - linear.y1 = stop.y(); -} - -VLinearGradient::VLinearGradient(float xStart, float yStart, float xStop, - float yStop) - : VGradient(VGradient::Type::Linear) -{ - linear.x1 = xStart; - linear.y1 = yStart; - linear.x1 = xStop; - linear.y1 = yStop; -} - -VRadialGradient::VRadialGradient(const VPointF ¢er, float cradius, - const VPointF &focalPoint, float fradius) - : VGradient(VGradient::Type::Radial) -{ - radial.cx = center.x(); - radial.cy = center.y(); - radial.fx = focalPoint.x(); - radial.fy = focalPoint.y(); - radial.cradius = cradius; - radial.fradius = fradius; -} - -VRadialGradient::VRadialGradient(float cx, float cy, float cradius, float fx, - float fy, float fradius) - : VGradient(VGradient::Type::Radial) -{ - radial.cx = cx; - radial.cy = cy; - radial.fx = fx; - radial.fy = fy; - radial.cradius = cradius; - radial.fradius = fradius; -} - VBrush::VBrush(const VColor &color) : mType(VBrush::Type::Solid), mColor(color) { } -VBrush::VBrush(int r, int g, int b, int a) +VBrush::VBrush(uchar r, uchar g, uchar b, uchar a) : mType(VBrush::Type::Solid), mColor(r, g, b, a) { diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vbrush.h b/submodules/rlottie/rlottie/src/vector/vbrush.h similarity index 64% rename from submodules/RLottie/Sources/rlottie/src/vector/vbrush.h rename to submodules/rlottie/rlottie/src/vector/vbrush.h index 348e2ec877..8869ec0c8b 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vbrush.h +++ b/submodules/rlottie/rlottie/src/vector/vbrush.h @@ -27,59 +27,46 @@ V_BEGIN_NAMESPACE -typedef std::pair VGradientStop; -typedef std::vector VGradientStops; +using VGradientStop = std::pair; +using VGradientStops = std::vector; class VGradient { public: enum class Mode { Absolute, Relative }; enum class Spread { Pad, Repeat, Reflect }; enum class Type { Linear, Radial }; - VGradient(VGradient::Type type); + explicit VGradient(VGradient::Type type); void setStops(const VGradientStops &stops); void setAlpha(float alpha) {mAlpha = alpha;} float alpha() const {return mAlpha;} - VGradient() = default; public: static constexpr int colorTableSize = 1024; - VGradient::Type mType; - VGradient::Spread mSpread; - VGradient::Mode mMode; + VGradient::Type mType{Type::Linear}; + VGradient::Spread mSpread{Spread::Pad}; + VGradient::Mode mMode{Mode::Absolute}; VGradientStops mStops; float mAlpha{1.0}; + struct Linear{ + float x1{0}, y1{0}, x2{0}, y2{0}; + }; + struct Radial{ + float cx{0}, cy{0}, fx{0}, fy{0}, cradius{0}, fradius{0}; + }; union { - struct { - float x1, y1, x2, y2; - } linear; - struct { - float cx, cy, fx, fy, cradius, fradius; - } radial; + Linear linear; + Radial radial; }; VMatrix mMatrix; }; -class VLinearGradient : public VGradient { -public: - VLinearGradient(const VPointF &start, const VPointF &stop); - VLinearGradient(float xStart, float yStart, float xStop, float yStop); -}; - -class VRadialGradient : public VGradient { -public: - VRadialGradient(const VPointF ¢er, float cradius, - const VPointF &focalPoint, float fradius); - VRadialGradient(float cx, float cy, float cradius, float fx, float fy, - float fradius); -}; - class VBrush { public: enum class Type { NoBrush, Solid, LinearGradient, RadialGradient, Texture }; VBrush() = default; - VBrush(const VColor &color); - VBrush(const VGradient *gradient); - VBrush(int r, int g, int b, int a); - VBrush(const VBitmap &texture); + explicit VBrush(const VColor &color); + explicit VBrush(const VGradient *gradient); + explicit VBrush(uchar r, uchar g, uchar b, uchar a); + explicit VBrush(const VBitmap &texture); inline VBrush::Type type() const { return mType; } void setMatrix(const VMatrix &m); public: diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vcompositionfunctions.cpp b/submodules/rlottie/rlottie/src/vector/vcompositionfunctions.cpp similarity index 88% rename from submodules/RLottie/Sources/rlottie/src/vector/vcompositionfunctions.cpp rename to submodules/rlottie/rlottie/src/vector/vcompositionfunctions.cpp index 52ac0dbe0e..04c9cc2b5c 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vcompositionfunctions.cpp +++ b/submodules/rlottie/rlottie/src/vector/vcompositionfunctions.cpp @@ -22,7 +22,7 @@ result = s dest = s * ca + d * cia */ -void comp_func_solid_Source(uint32_t *dest, int length, uint32_t color, +static void comp_func_solid_Source(uint32_t *dest, int length, uint32_t color, uint32_t const_alpha) { int ialpha, i; @@ -45,7 +45,8 @@ void comp_func_solid_Source(uint32_t *dest, int length, uint32_t color, = s * ca + d * (1 - sa*ca) = s' + d ( 1 - s'a) */ -void comp_func_solid_SourceOver(uint32_t *dest, int length, uint32_t color, +static void comp_func_solid_SourceOver(uint32_t *dest, int length, + uint32_t color, uint32_t const_alpha) { int ialpha, i; @@ -87,7 +88,7 @@ static void comp_func_solid_DestinationOut(uint *dest, int length, uint color, } } -void comp_func_Source(uint32_t *dest, const uint32_t *src, int length, +static void comp_func_Source(uint32_t *dest, const uint32_t *src, int length, uint32_t const_alpha) { if (const_alpha == 255) { @@ -104,7 +105,8 @@ void comp_func_Source(uint32_t *dest, const uint32_t *src, int length, /* s' = s * ca * d' = s' + d (1 - s'a) */ -void comp_func_SourceOver(uint32_t *dest, const uint32_t *src, int length, +static void comp_func_SourceOver(uint32_t *dest, const uint32_t *src, + int length, uint32_t const_alpha) { uint s, sia; @@ -124,14 +126,14 @@ void comp_func_SourceOver(uint32_t *dest, const uint32_t *src, int length, * dest = source' + dest ( 1- source'a) */ for (int i = 0; i < length; ++i) { - uint s = BYTE_MUL(src[i], const_alpha); + s = BYTE_MUL(src[i], const_alpha); sia = vAlpha(~s); dest[i] = s + BYTE_MUL(dest[i], sia); } } } -void comp_func_DestinationIn(uint *dest, const uint *src, int length, +static void comp_func_DestinationIn(uint *dest, const uint *src, int length, uint const_alpha) { if (const_alpha == 255) { @@ -147,7 +149,7 @@ void comp_func_DestinationIn(uint *dest, const uint *src, int length, } } -void comp_func_DestinationOut(uint *dest, const uint *src, int length, +static void comp_func_DestinationOut(uint *dest, const uint *src, int length, uint const_alpha) { if (const_alpha == 255) { diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vcowptr.h b/submodules/rlottie/rlottie/src/vector/vcowptr.h similarity index 90% rename from submodules/RLottie/Sources/rlottie/src/vector/vcowptr.h rename to submodules/rlottie/rlottie/src/vector/vcowptr.h index dcc283ad1e..705945d8df 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vcowptr.h +++ b/submodules/rlottie/rlottie/src/vector/vcowptr.h @@ -19,7 +19,7 @@ #ifndef VCOWPTR_H #define VCOWPTR_H -#include +#include #include "vglobal.h" template @@ -30,9 +30,8 @@ class vcow_ptr { model() = default; template - explicit model(Args&&... args) : mValue(std::forward(args)...) - { - } + explicit model(Args&&... args) : mValue(std::forward(args)...){} + explicit model(const T& other) : mValue(other){} T mValue; }; @@ -54,7 +53,7 @@ public: } template - vcow_ptr(Args&&... args) : mModel(new model(std::forward(args)...)) + explicit vcow_ptr(Args&&... args) : mModel(new model(std::forward(args)...)) { } @@ -71,7 +70,8 @@ public: auto operator=(const vcow_ptr& x) noexcept -> vcow_ptr& { - return *this = vcow_ptr(x); + *this = vcow_ptr(x); + return *this; } auto operator=(vcow_ptr&& x) noexcept -> vcow_ptr& @@ -85,7 +85,7 @@ public: auto operator-> () const noexcept -> const element_type* { return &read(); } - int refCount() const noexcept + std::size_t refCount() const noexcept { assert(mModel); diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdasher.cpp b/submodules/rlottie/rlottie/src/vector/vdasher.cpp similarity index 92% rename from submodules/RLottie/Sources/rlottie/src/vector/vdasher.cpp rename to submodules/rlottie/rlottie/src/vector/vdasher.cpp index a6ca9abcea..e83728fcdd 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdasher.cpp +++ b/submodules/rlottie/rlottie/src/vector/vdasher.cpp @@ -33,6 +33,15 @@ VDasher::VDasher(const float *dashArray, size_t size) mIndex = 0; mCurrentLength = 0; mDiscard = false; + //if the dash array contains ZERO length + // segments or ZERO lengths gaps we could + // optimize those usecase. + for (size_t i = 0; i < mArraySize; i++) { + if (!vCompare(mDashArray[i].length, 0.0f)) + mNoLength = false; + if (!vCompare(mDashArray[i].gap, 0.0f)) + mNoGap = false; + } } void VDasher::moveTo(const VPointF &p) @@ -178,7 +187,11 @@ void VDasher::cubicTo(const VPointF &cp1, const VPointF &cp2, const VPointF &e) VPath VDasher::dashed(const VPath &path) { - if (path.empty()) return VPath(); + if (mNoLength && mNoGap) return path; + + if (path.empty() || mNoLength) return VPath(); + + if (mNoGap) return path; mResult = {}; mResult.reserve(path.points().size(), path.elements().size()); diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdasher.h b/submodules/rlottie/rlottie/src/vector/vdasher.h similarity index 91% rename from submodules/RLottie/Sources/rlottie/src/vector/vdasher.h rename to submodules/rlottie/rlottie/src/vector/vdasher.h index 224a2a8f28..81ce197ec5 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdasher.h +++ b/submodules/rlottie/rlottie/src/vector/vdasher.h @@ -46,10 +46,12 @@ private: VPointF mCurPt; size_t mIndex{0}; /* index to the dash Array */ float mCurrentLength; - bool mDiscard; float mDashOffset{0}; VPath mResult; - bool mStartNewSegment=true; + bool mDiscard{false}; + bool mStartNewSegment{true}; + bool mNoLength{true}; + bool mNoGap{true}; }; V_END_NAMESPACE diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdebug.cpp b/submodules/rlottie/rlottie/src/vector/vdebug.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vdebug.cpp rename to submodules/rlottie/rlottie/src/vector/vdebug.cpp diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdebug.h b/submodules/rlottie/rlottie/src/vector/vdebug.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vdebug.h rename to submodules/rlottie/rlottie/src/vector/vdebug.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdrawable.cpp b/submodules/rlottie/rlottie/src/vector/vdrawable.cpp similarity index 80% rename from submodules/RLottie/Sources/rlottie/src/vector/vdrawable.cpp rename to submodules/rlottie/rlottie/src/vector/vdrawable.cpp index 946054f2cc..cba3288f5e 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdrawable.cpp +++ b/submodules/rlottie/rlottie/src/vector/vdrawable.cpp @@ -26,10 +26,10 @@ void VDrawable::preprocess(const VRect &clip) if (mStroke.enable) { if (mStroke.mDash.size()) { VDasher dasher(mStroke.mDash.data(), mStroke.mDash.size()); - mPath = dasher.dashed(mPath); + mPath.clone(dasher.dashed(mPath)); } mRasterizer.rasterize(std::move(mPath), mStroke.cap, mStroke.join, - mStroke.width, mStroke.meterLimit, clip); + mStroke.width, mStroke.miterLimit, clip); } else { mRasterizer.rasterize(std::move(mPath), mFillRule, clip); } @@ -43,29 +43,29 @@ VRle VDrawable::rle() return mRasterizer.rle(); } -void VDrawable::setStrokeInfo(CapStyle cap, JoinStyle join, float meterLimit, +void VDrawable::setStrokeInfo(CapStyle cap, JoinStyle join, float miterLimit, float strokeWidth) { if ((mStroke.cap == cap) && (mStroke.join == join) && - vCompare(mStroke.meterLimit, meterLimit) && + vCompare(mStroke.miterLimit, miterLimit) && vCompare(mStroke.width, strokeWidth)) return; mStroke.enable = true; mStroke.cap = cap; mStroke.join = join; - mStroke.meterLimit = meterLimit; + mStroke.miterLimit = miterLimit; mStroke.width = strokeWidth; mFlag |= DirtyState::Path; } -void VDrawable::setDashInfo(float *array, uint size) +void VDrawable::setDashInfo(std::vector &dashInfo) { bool hasChanged = false; - if (mStroke.mDash.size() == size) { - for (uint i = 0; i < size; i++) { - if (!vCompare(mStroke.mDash[i], array[i])) { + if (mStroke.mDash.size() == dashInfo.size()) { + for (uint i = 0; i < dashInfo.size(); i++) { + if (!vCompare(mStroke.mDash[i], dashInfo[i])) { hasChanged = true; break; } @@ -76,11 +76,8 @@ void VDrawable::setDashInfo(float *array, uint size) if (!hasChanged) return; - mStroke.mDash.clear(); + mStroke.mDash = dashInfo; - for (uint i = 0; i < size; i++) { - mStroke.mDash.push_back(array[i]); - } mFlag |= DirtyState::Path; } diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdrawable.h b/submodules/rlottie/rlottie/src/vector/vdrawable.h similarity index 92% rename from submodules/RLottie/Sources/rlottie/src/vector/vdrawable.h rename to submodules/rlottie/rlottie/src/vector/vdrawable.h index 861d9be1a0..749865d5d5 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdrawable.h +++ b/submodules/rlottie/rlottie/src/vector/vdrawable.h @@ -41,9 +41,9 @@ public: void setPath(const VPath &path); void setFillRule(FillRule rule) { mFillRule = rule; } void setBrush(const VBrush &brush) { mBrush = brush; } - void setStrokeInfo(CapStyle cap, JoinStyle join, float meterLimit, + void setStrokeInfo(CapStyle cap, JoinStyle join, float miterLimit, float strokeWidth); - void setDashInfo(float *array, uint size); + void setDashInfo(std::vector &dashInfo); void preprocess(const VRect &clip); VRle rle(); @@ -51,7 +51,7 @@ public: struct StrokeInfo { std::vector mDash; float width{0.0}; - float meterLimit{10}; + float miterLimit{10}; bool enable{false}; CapStyle cap{CapStyle::Flat}; JoinStyle join{JoinStyle::Bevel}; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper.cpp b/submodules/rlottie/rlottie/src/vector/vdrawhelper.cpp similarity index 96% rename from submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper.cpp rename to submodules/rlottie/rlottie/src/vector/vdrawhelper.cpp index 2b1c7b2759..771228ed64 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper.cpp +++ b/submodules/rlottie/rlottie/src/vector/vdrawhelper.cpp @@ -76,7 +76,7 @@ public: VCacheData info; const VGradientStops &stops = gradient.mStops; for (uint i = 0; i < stops.size() && i <= 2; i++) - hash_val += (stops[i].second.premulARGB() * gradient.alpha()); + hash_val += VCacheKey(stops[i].second.premulARGB() * gradient.alpha()); { std::lock_guard guard(mMutex); @@ -137,9 +137,10 @@ bool VGradientCache::generateGradientColorTable(const VGradientStops &stops, float opacity, uint32_t *colorTable, int size) { - int dist, idist, pos = 0, i; + int dist, idist, pos = 0; + size_t i; bool alpha = false; - int stopCount = stops.size(); + size_t stopCount = stops.size(); const VGradientStop *curr, *next, *start; uint32_t curColor, nextColor; float delta, t, incr, fpos; @@ -150,8 +151,8 @@ bool VGradientCache::generateGradientColorTable(const VGradientStops &stops, curr = start; if (!curr->second.isOpaque()) alpha = true; curColor = curr->second.premulARGB(opacity); - incr = 1.0 / (float)size; - fpos = 1.5 * incr; + incr = 1.0f / (float)size; + fpos = 1.5f * incr; colorTable[pos++] = curColor; @@ -208,7 +209,7 @@ VBitmap::Format VRasterBuffer::prepare(VBitmap *image) void VSpanData::init(VRasterBuffer *image) { mRasterBuffer = image; - setDrawRegion(VRect(0, 0, image->width(), image->height())); + setDrawRegion(VRect(0, 0, int(image->width()), int(image->height()))); mType = VSpanData::Type::None; mBlendFunc = nullptr; mUnclippedBlendFunc = nullptr; @@ -348,9 +349,9 @@ void fetch_linear_gradient(uint32_t *buffer, const Operator *op, float rw = data->m23 * (y + float(0.5)) + data->m13 * (x + float(0.5)) + data->m33; while (buffer < end) { - float x = rx / rw; - float y = ry / rw; - t = (op->linear.dx * x + op->linear.dy * y) + op->linear.off; + float xt = rx / rw; + float yt = ry / rw; + t = (op->linear.dx * xt + op->linear.dy * yt) + op->linear.off; *buffer = gradientPixel(gradient, t); rx += data->m11; @@ -716,8 +717,8 @@ static void blend_untransformed_argb(size_t count, const VRle::Span *spans, const int image_width = data->mBitmap.width; const int image_height = data->mBitmap.height; - int xoff = data->dx; - int yoff = data->dy; + int xoff = int(data->dx); + int yoff = int(data->dy); while (count--) { int x = spans->x; @@ -788,7 +789,7 @@ void VSpanData::setup(const VBrush &brush, VPainter::CompositionMode /*mode*/, mType = VSpanData::Type::Texture; initTexture( &brush.mTexture, 255, VBitmapData::Plain, - VRect(0, 0, brush.mTexture.width(), brush.mTexture.height())); + brush.mTexture.rect()); setupMatrix(brush.mMatrix); break; } @@ -825,8 +826,8 @@ void VSpanData::initTexture(const VBitmap *bitmap, int alpha, mType = VSpanData::Type::Texture; mBitmap.imageData = bitmap->data(); - mBitmap.width = bitmap->width(); - mBitmap.height = bitmap->height(); + mBitmap.width = int(bitmap->width()); + mBitmap.height = int(bitmap->height()); mBitmap.bytesPerLine = bitmap->stride(); mBitmap.format = bitmap->format(); mBitmap.x1 = sourceRect.x(); @@ -866,7 +867,7 @@ void VSpanData::updateSpanFunc() } } -#if !defined(__SSE2__)// && !defined(__ARM_NEON__) +#if !defined(__SSE2__) && !defined(__ARM_NEON__) void memfill32(uint32_t *dest, uint32_t value, int length) { int n; @@ -911,34 +912,34 @@ void vInitDrawhelperFunctions() { vInitBlendFunctions(); -#if 0 // defined(__ARM_NEON__) +#if defined(__ARM_NEON__) // update fast path for NEON - extern void comp_func_solid_SourceOver_neon( + extern void Vcomp_func_solid_SourceOver_neon( uint32_t * dest, int length, uint32_t color, uint32_t const_alpha); COMP_functionForModeSolid_C[VPainter::CompModeSrcOver] = - comp_func_solid_SourceOver_neon; + Vcomp_func_solid_SourceOver_neon; #endif #if defined(__SSE2__) // update fast path for SSE2 - extern void comp_func_solid_SourceOver_sse2( + extern void Vcomp_func_solid_SourceOver_sse2( uint32_t * dest, int length, uint32_t color, uint32_t const_alpha); - extern void comp_func_solid_Source_sse2( + extern void Vcomp_func_solid_Source_sse2( uint32_t * dest, int length, uint32_t color, uint32_t const_alpha); - extern void comp_func_Source_sse2(uint32_t * dest, const uint32_t *src, + extern void Vcomp_func_Source_sse2(uint32_t * dest, const uint32_t *src, int length, uint32_t const_alpha); - extern void comp_func_SourceOver_sse2(uint32_t * dest, const uint32_t *src, + extern void Vcomp_func_SourceOver_sse2(uint32_t * dest, const uint32_t *src, int length, uint32_t const_alpha); COMP_functionForModeSolid_C[VPainter::CompModeSrc] = - comp_func_solid_Source_sse2; + Vcomp_func_solid_Source_sse2; COMP_functionForModeSolid_C[VPainter::CompModeSrcOver] = - comp_func_solid_SourceOver_sse2; + Vcomp_func_solid_SourceOver_sse2; - COMP_functionForMode_C[VPainter::CompModeSrc] = comp_func_Source_sse2; + COMP_functionForMode_C[VPainter::CompModeSrc] = Vcomp_func_Source_sse2; // COMP_functionForMode_C[VPainter::CompModeSrcOver] = - // comp_func_SourceOver_sse2; + // Vcomp_func_SourceOver_sse2; #endif } diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper.h b/submodules/rlottie/rlottie/src/vector/vdrawhelper.h similarity index 92% rename from submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper.h rename to submodules/rlottie/rlottie/src/vector/vdrawhelper.h index a0245d7784..5c9a6dbb1b 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper.h +++ b/submodules/rlottie/rlottie/src/vector/vdrawhelper.h @@ -83,33 +83,35 @@ public: inline uchar *scanLine(int y) { assert(y >= 0); - assert(y < mHeight); + assert(size_t(y) < mHeight); return mBuffer + y * mBytesPerLine; } - int width() const { return mWidth; } - int height() const { return mHeight; } - int bytesPerLine() const { return mBytesPerLine; } - int bytesPerPixel() const { return mBytesPerPixel; } + size_t width() const { return mWidth; } + size_t height() const { return mHeight; } + size_t bytesPerLine() const { return mBytesPerLine; } + size_t bytesPerPixel() const { return mBytesPerPixel; } VBitmap::Format mFormat{VBitmap::Format::ARGB32_Premultiplied}; private: - int mWidth{0}; - int mHeight{0}; - int mBytesPerLine{0}; - int mBytesPerPixel{0}; - uchar *mBuffer{nullptr}; + size_t mWidth{0}; + size_t mHeight{0}; + size_t mBytesPerLine{0}; + size_t mBytesPerPixel{0}; + uchar *mBuffer{nullptr}; }; struct VGradientData { VGradient::Spread mSpread; + struct Linear{ + float x1, y1, x2, y2; + }; + struct Radial{ + float cx, cy, fx, fy, cradius, fradius; + }; union { - struct { - float x1, y1, x2, y2; - } linear; - struct { - float cx, cy, fx, fy, cradius, fradius; - } radial; + Linear linear; + Radial radial; }; const uint32_t *mColorTable; bool mColorTableAlpha; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper_neon.cpp b/submodules/rlottie/rlottie/src/vector/vdrawhelper_neon.cpp similarity index 89% rename from submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper_neon.cpp rename to submodules/rlottie/rlottie/src/vector/vdrawhelper_neon.cpp index 25a2fed5f1..99fd34f643 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper_neon.cpp +++ b/submodules/rlottie/rlottie/src/vector/vdrawhelper_neon.cpp @@ -17,7 +17,8 @@ void memfill32(uint32_t *dest, uint32_t value, int length) pixman_composite_src_n_8888_asm_neon(length, 1, dest, length, value); } -void comp_func_solid_SourceOver_neon(uint32_t *dest, int length, uint32_t color, +void Vcomp_func_solid_SourceOver_neon(uint32_t *dest, int length, + uint32_t color, uint32_t const_alpha) { if (const_alpha != 255) color = BYTE_MUL(color, const_alpha); diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper_sse2.cpp b/submodules/rlottie/rlottie/src/vector/vdrawhelper_sse2.cpp similarity index 97% rename from submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper_sse2.cpp rename to submodules/rlottie/rlottie/src/vector/vdrawhelper_sse2.cpp index c2133d31fa..6d05127423 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vdrawhelper_sse2.cpp +++ b/submodules/rlottie/rlottie/src/vector/vdrawhelper_sse2.cpp @@ -196,7 +196,7 @@ inline static void comp_func_helper_sse2(uint32_t* dest, int length, }) } -void comp_func_solid_Source_sse2(uint32_t* dest, int length, uint32_t color, +void Vcomp_func_solid_Source_sse2(uint32_t* dest, int length, uint32_t color, uint32_t const_alpha) { if (const_alpha == 255) { @@ -210,7 +210,8 @@ void comp_func_solid_Source_sse2(uint32_t* dest, int length, uint32_t color, } } -void comp_func_solid_SourceOver_sse2(uint32_t* dest, int length, uint32_t color, +void Vcomp_func_solid_SourceOver_sse2(uint32_t* dest, int length, + uint32_t color, uint32_t const_alpha) { int ialpha; @@ -220,7 +221,7 @@ void comp_func_solid_SourceOver_sse2(uint32_t* dest, int length, uint32_t color, comp_func_helper_sse2(dest, length, color, ialpha); } -void comp_func_Source_sse2(uint32_t* dest, const uint32_t* src, int length, +void Vcomp_func_Source_sse2(uint32_t* dest, const uint32_t* src, int length, uint32_t const_alpha) { int ialpha; @@ -439,7 +440,7 @@ static force_inline uint32_t core_combine_over_u_pixel_sse2(uint32_t src, // core_combine_over_u_sse2_no_mask (uint32_t * pd, // const uint32_t* ps, // int w) -void comp_func_SourceOver_sse2(uint32_t* pd, const uint32_t* ps, int w, +void Vcomp_func_SourceOver_sse2(uint32_t* pd, const uint32_t* ps, int w, uint32_t) { uint32_t s, d; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/velapsedtimer.cpp b/submodules/rlottie/rlottie/src/vector/velapsedtimer.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/velapsedtimer.cpp rename to submodules/rlottie/rlottie/src/vector/velapsedtimer.cpp diff --git a/submodules/RLottie/Sources/rlottie/src/vector/velapsedtimer.h b/submodules/rlottie/rlottie/src/vector/velapsedtimer.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/velapsedtimer.h rename to submodules/rlottie/rlottie/src/vector/velapsedtimer.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vglobal.h b/submodules/rlottie/rlottie/src/vector/vglobal.h similarity index 83% rename from submodules/RLottie/Sources/rlottie/src/vector/vglobal.h rename to submodules/rlottie/rlottie/src/vector/vglobal.h index 98837fd235..75c947c66e 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vglobal.h +++ b/submodules/rlottie/rlottie/src/vector/vglobal.h @@ -25,9 +25,9 @@ #include #include -typedef uint32_t uint; -typedef uint16_t ushort; -typedef uint8_t uchar; +using uint = uint32_t; +using ushort = uint16_t; +using uchar = uint8_t; #if !defined(V_NAMESPACE) @@ -73,7 +73,7 @@ typedef uint8_t uchar; #include class RefCount { public: - inline RefCount(int i) : atomic(i) {} + explicit RefCount(int i) : atomic(i) {} inline bool ref() { int count = atomic.load(); @@ -91,7 +91,7 @@ public: if (count == -1) // isStatic return true; atomic.fetch_sub(1); - return --count; + return (--count == 0); } bool isShared() const { @@ -144,12 +144,12 @@ class vFlagHelper { int i; public: - constexpr inline vFlagHelper(int ai) noexcept : i(ai) {} + explicit constexpr inline vFlagHelper(int ai) noexcept : i(ai) {} constexpr inline operator int() const noexcept { return i; } - constexpr inline vFlagHelper(uint ai) noexcept : i(int(ai)) {} - constexpr inline vFlagHelper(short ai) noexcept : i(int(ai)) {} - constexpr inline vFlagHelper(ushort ai) noexcept : i(int(uint(ai))) {} + explicit constexpr inline vFlagHelper(uint ai) noexcept : i(int(ai)) {} + explicit constexpr inline vFlagHelper(short ai) noexcept : i(int(ai)) {} + explicit constexpr inline vFlagHelper(ushort ai) noexcept : i(int(uint(ai))) {} constexpr inline operator uint() const noexcept { return uint(i); } }; @@ -162,16 +162,16 @@ public: static_assert((std::is_enum::value), "vFlag is only usable on enumeration types."); - typedef typename std::conditional< + using Int = typename std::conditional< std::is_unsigned::type>::value, - unsigned int, signed int>::type Int; + unsigned int, signed int>::type; - typedef Enum enum_type; + using enum_type = Enum; // compiler-generated copy/move ctor/assignment operators are fine! - constexpr inline vFlag(Enum f) noexcept : i(Int(f)) {} - constexpr inline vFlag() noexcept : i(0) {} - constexpr inline vFlag(vFlagHelper f) noexcept : i(f) {} + vFlag() = default; + constexpr vFlag(Enum f) noexcept : i(Int(f)) {} + explicit constexpr vFlag(vFlagHelper f) noexcept : i(f) {} inline vFlag &operator&=(int mask) noexcept { @@ -255,27 +255,22 @@ public: return on ? (*this |= f) : (*this &= ~f); } - Int i; + Int i{0}; }; class VColor { public: - inline VColor() noexcept { a = r = g = b = 0; } - inline VColor(int red, int green, int blue, int alpha = 255) noexcept - { - r = red; - g = green; - b = blue; - a = alpha; - } - inline int red() const noexcept { return r; } - inline int green() const noexcept { return g; } - inline int blue() const noexcept { return b; } - inline int alpha() const noexcept { return a; } - inline void setRed(int red) noexcept { r = red; } - inline void setGreen(int green) noexcept { g = green; } - inline void setBlue(int blue) noexcept { b = blue; } - inline void setAlpha(int alpha) noexcept { a = alpha; } + VColor() = default; + explicit VColor(uchar red, uchar green, uchar blue, uchar alpha = 255) noexcept + :a(alpha), r(red), g(green), b(blue){} + inline uchar red() const noexcept { return r; } + inline uchar green() const noexcept { return g; } + inline uchar blue() const noexcept { return b; } + inline uchar alpha() const noexcept { return a; } + inline void setRed(uchar red) noexcept { r = red; } + inline void setGreen(uchar green) noexcept { g = green; } + inline void setBlue(uchar blue) noexcept { b = blue; } + inline void setAlpha(uchar alpha) noexcept { a = alpha; } inline bool isOpaque() const { return a == 255; } inline bool operator==(const VColor &o) const { @@ -291,7 +286,7 @@ public: uint premulARGB(float opacity) const { - int alpha = a * opacity; + int alpha = int(a * opacity); int pr = (r * alpha) / 255; int pg = (g * alpha) / 255; int pb = (b * alpha) / 255; @@ -299,10 +294,10 @@ public: } public: - uchar a; - uchar r; - uchar g; - uchar b; + uchar a{0}; + uchar r{0}; + uchar g{0}; + uchar b{0}; }; enum class FillRule: unsigned char { EvenOdd, Winding }; diff --git a/submodules/rlottie/rlottie/src/vector/vimageloader.cpp b/submodules/rlottie/rlottie/src/vector/vimageloader.cpp new file mode 100644 index 0000000000..b4fd1884ef --- /dev/null +++ b/submodules/rlottie/rlottie/src/vector/vimageloader.cpp @@ -0,0 +1,248 @@ +#include "vimageloader.h" +#include "config.h" +#include "vdebug.h" +#ifndef _WIN32 +#include +#else +#include +#endif +#include + +using lottie_image_load_f = unsigned char *(*)(const char *filename, int *x, + int *y, int *comp, int req_comp); +using lottie_image_load_data_f = unsigned char *(*)(const char *data, int len, + int *x, int *y, int *comp, + int req_comp); +using lottie_image_free_f = void (*)(unsigned char *); + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LOTTIE_IMAGE_MODULE_DISABLED + +unsigned char *lottie_image_load(char const *filename, int *x, int *y, + int *comp, int req_comp) +{ + return nullptr; +} +unsigned char *lottie_image_load_from_data(const char *imageData, int len, + int *x, int *y, int *comp, + int req_comp) +{ + return nullptr; +} + +void lottie_image_free(unsigned char *data) {} + +#else + +extern unsigned char *lottie_image_load(char const *filename, int *x, int *y, + int *comp, int req_comp); +extern unsigned char *lottie_image_load_from_data(const char *imageData, + int len, int *x, int *y, + int *comp, int req_comp); +extern void lottie_image_free(unsigned char *data); + +#endif + +#ifdef __cplusplus +} +#endif + +struct VImageLoader::Impl { + lottie_image_load_f imageLoad{nullptr}; + lottie_image_free_f imageFree{nullptr}; + lottie_image_load_data_f imageFromData{nullptr}; + +#ifdef LOTTIE_IMAGE_MODULE_SUPPORT +#ifdef _WIN32 + HMODULE dl_handle{nullptr}; + bool moduleLoad() + { + dl_handle = LoadLibraryA("librlottie-image-loader.dll"); + return (dl_handle == nullptr); + } + void moduleFree() + { + if (dl_handle) FreeLibrary(dl_handle); + } + void init() + { + imageLoad = reinterpret_cast( + GetProcAddress(dl_handle, "lottie_image_load")); + imageFree = reinterpret_cast( + GetProcAddress(dl_handle, "lottie_image_free")); + imageFromData = reinterpret_cast( + GetProcAddress(dl_handle, "lottie_image_load_from_data")); + } +#else + void *dl_handle{nullptr}; + void init() + { + imageLoad = reinterpret_cast( + dlsym(dl_handle, "lottie_image_load")); + imageFree = reinterpret_cast( + dlsym(dl_handle, "lottie_image_free")); + imageFromData = reinterpret_cast( + dlsym(dl_handle, "lottie_image_load_from_data")); + } + + void moduleFree() + { + if (dl_handle) dlclose(dl_handle); + } +#ifdef __APPLE__ + bool moduleLoad() + { + dl_handle = dlopen("librlottie-image-loader.dylib", RTLD_LAZY); + return (dl_handle == nullptr); + } +#else + bool moduleLoad() + { + dl_handle = dlopen("librlottie-image-loader.so", RTLD_LAZY); + return (dl_handle == nullptr); + } +#endif +#endif +#else + void *dl_handle{nullptr}; + void init() + { + imageLoad = lottie_image_load; + imageFree = lottie_image_free; + imageFromData = lottie_image_load_from_data; + } + void moduleFree() {} + bool moduleLoad() { return false; } +#endif + + Impl() + { + if (moduleLoad()) { + vWarning << "Failed to dlopen librlottie-image-loader library"; + return; + } + + init(); + + if (!imageLoad) + vWarning << "Failed to find symbol lottie_image_load in " + "librlottie-image-loader library"; + + if (!imageFree) + vWarning << "Failed to find symbol lottie_image_free in " + "librlottie-image-loader library"; + + if (!imageFromData) + vWarning << "Failed to find symbol lottie_image_load_data in " + "librlottie-image-loader library"; + } + + ~Impl() { moduleFree(); } + + VBitmap createBitmap(unsigned char *data, int width, int height, + int channel) + { + // premultiply alpha + if (channel == 4) + convertToBGRAPremul(data, width, height); + else + convertToBGRA(data, width, height); + + // create a bitmap of same size. + VBitmap result = + VBitmap(width, height, VBitmap::Format::ARGB32_Premultiplied); + + // copy the data to bitmap buffer + memcpy(result.data(), data, width * height * 4); + + // free the image data + imageFree(data); + + return result; + } + + VBitmap load(const char *fileName) + { + if (!imageLoad) return VBitmap(); + + int width, height, n; + unsigned char *data = imageLoad(fileName, &width, &height, &n, 4); + + if (!data) { + return VBitmap(); + } + + return createBitmap(data, width, height, n); + } + + VBitmap load(const char *imageData, size_t len) + { + if (!imageFromData) return VBitmap(); + + int width, height, n; + unsigned char *data = + imageFromData(imageData, static_cast(len), &width, &height, &n, 4); + + if (!data) { + return VBitmap(); + } + + return createBitmap(data, width, height, n); + } + /* + * convert from RGBA to BGRA and premultiply + */ + void convertToBGRAPremul(unsigned char *bits, int width, int height) + { + int pixelCount = width * height; + unsigned char *pix = bits; + for (int i = 0; i < pixelCount; i++) { + unsigned char r = pix[0]; + unsigned char g = pix[1]; + unsigned char b = pix[2]; + unsigned char a = pix[3]; + + r = (r * a) / 255; + g = (g * a) / 255; + b = (b * a) / 255; + + pix[0] = b; + pix[1] = g; + pix[2] = r; + + pix += 4; + } + } + /* + * convert from RGBA to BGRA + */ + void convertToBGRA(unsigned char *bits, int width, int height) + { + int pixelCount = width * height; + unsigned char *pix = bits; + for (int i = 0; i < pixelCount; i++) { + unsigned char r = pix[0]; + unsigned char b = pix[2]; + pix[0] = b; + pix[2] = r; + pix += 4; + } + } +}; + +VImageLoader::VImageLoader() : mImpl(std::make_unique()) {} + +VImageLoader::~VImageLoader() {} + +VBitmap VImageLoader::load(const char *fileName) +{ + return mImpl->load(fileName); +} + +VBitmap VImageLoader::load(const char *data, size_t len) +{ + return mImpl->load(data, int(len)); +} diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vimageloader.h b/submodules/rlottie/rlottie/src/vector/vimageloader.h similarity index 89% rename from submodules/RLottie/Sources/rlottie/src/vector/vimageloader.h rename to submodules/rlottie/rlottie/src/vector/vimageloader.h index 2ca4cec39a..4d96a7dc07 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vimageloader.h +++ b/submodules/rlottie/rlottie/src/vector/vimageloader.h @@ -15,7 +15,7 @@ public: } VBitmap load(const char *fileName); - VBitmap load(const char *data, int len); + VBitmap load(const char *data, size_t len); ~VImageLoader(); private: VImageLoader(); diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vinterpolator.cpp b/submodules/rlottie/rlottie/src/vector/vinterpolator.cpp similarity index 96% rename from submodules/RLottie/Sources/rlottie/src/vector/vinterpolator.cpp rename to submodules/rlottie/rlottie/src/vector/vinterpolator.cpp index 94f454ad33..86fbf7a6cb 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vinterpolator.cpp +++ b/submodules/rlottie/rlottie/src/vector/vinterpolator.cpp @@ -45,7 +45,7 @@ V_BEGIN_NAMESPACE #define SUBDIVISION_MAX_ITERATIONS 10 const float VInterpolator::kSampleStepSize = - 1.0 / float(VInterpolator::kSplineTableSize - 1); + 1.0f / float(VInterpolator::kSplineTableSize - 1); void VInterpolator::init(float aX1, float aY1, float aX2, float aY2) { @@ -72,7 +72,7 @@ void VInterpolator::CalcSampleValues() float VInterpolator::GetSlope(float aT, float aA1, float aA2) { - return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); + return 3.0f * A(aA1, aA2) * aT * aT + 2.0f * B(aA1, aA2) * aT + C(aA1); } float VInterpolator::value(float aX) const @@ -137,7 +137,7 @@ float VInterpolator::BinarySubdivide(float aX, float aA, float aB) const int i = 0; do { - currentT = aA + (aB - aA) / 2.0; + currentT = aA + (aB - aA) / 2.0f; currentX = CalcBezier(currentT, mX1, mX2) - aX; if (currentX > 0.0) { diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vinterpolator.h b/submodules/rlottie/rlottie/src/vector/vinterpolator.h similarity index 90% rename from submodules/RLottie/Sources/rlottie/src/vector/vinterpolator.h rename to submodules/rlottie/rlottie/src/vector/vinterpolator.h index 77aaaae26e..2201882191 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vinterpolator.h +++ b/submodules/rlottie/rlottie/src/vector/vinterpolator.h @@ -64,11 +64,11 @@ private: float BinarySubdivide(float aX, float aA, float aB) const; - static float A(float aA1, float aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } + static float A(float aA1, float aA2) { return 1.0f - 3.0f * aA2 + 3.0f * aA1; } - static float B(float aA1, float aA2) { return 3.0 * aA2 - 6.0 * aA1; } + static float B(float aA1, float aA2) { return 3.0f * aA2 - 6.0f * aA1; } - static float C(float aA1) { return 3.0 * aA1; } + static float C(float aA1) { return 3.0f * aA1; } float mX1; float mY1; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vline.h b/submodules/rlottie/rlottie/src/vector/vline.h similarity index 94% rename from submodules/RLottie/Sources/rlottie/src/vector/vline.h rename to submodules/rlottie/rlottie/src/vector/vline.h index f466e31772..d3167c1205 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vline.h +++ b/submodules/rlottie/rlottie/src/vector/vline.h @@ -51,10 +51,11 @@ private: inline float VLine::angle() const { + static constexpr float K_PI = 3.141592f; const float dx = mX2 - mX1; const float dy = mY2 - mY1; - const float theta = std::atan2(dy, dx) * 180.0 / M_PI; + const float theta = std::atan2(dy, dx) * 180.0f / K_PI; return theta; } @@ -69,7 +70,7 @@ inline float VLine::length(float x1, float y1, float x2, float y2) x = x < 0 ? -x : x; y = y < 0 ? -y : y; - return (x > y ? x + 0.375 * y : y + 0.375 * x); + return (x > y ? x + 0.375f * y : y + 0.375f * x); } inline void VLine::splitAtLength(float lengthAt, VLine &left, VLine &right) const diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vmatrix.cpp b/submodules/rlottie/rlottie/src/vector/vmatrix.cpp similarity index 91% rename from submodules/RLottie/Sources/rlottie/src/vector/vmatrix.cpp rename to submodules/rlottie/rlottie/src/vector/vmatrix.cpp index 334e33e7dd..04abf81bfe 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vmatrix.cpp +++ b/submodules/rlottie/rlottie/src/vector/vmatrix.cpp @@ -20,7 +20,6 @@ #include #include #include -#include V_BEGIN_NAMESPACE @@ -511,8 +510,8 @@ VMatrix VMatrix::inverted(bool *invertible) const inv = !vIsZero(m11); inv &= !vIsZero(m22); if (inv) { - invert.m11 = 1. / m11; - invert.m22 = 1. / m22; + invert.m11 = 1.0f / m11; + invert.m22 = 1.0f / m22; invert.mtx = -mtx * invert.m11; invert.mty = -mty * invert.m22; } @@ -554,7 +553,7 @@ bool VMatrix::fuzzyCompare(const VMatrix &o) const vCompare(mtx, o.mtx) && vCompare(mty, o.mty); } -#define V_NEAR_CLIP 0.000001 +#define V_NEAR_CLIP 0.000001f #ifdef MAP #undef MAP #endif @@ -594,13 +593,13 @@ VRect VMatrix::map(const VRect &rect) const { VMatrix::MatrixType t = type(); if (t <= MatrixType::Translate) - return rect.translated(std::round(mtx), std::round(mty)); + return rect.translated(std::lround(mtx), std::lround(mty)); if (t <= MatrixType::Scale) { - int x = std::round(m11 * rect.x() + mtx); - int y = std::round(m22 * rect.y() + mty); - int w = std::round(m11 * rect.width()); - int h = std::round(m22 * rect.height()); + int x = std::lround(m11 * rect.x() + mtx); + int y = std::lround(m22 * rect.y() + mty); + int w = std::lround(m11 * rect.width()); + int h = std::lround(m22 * rect.height()); if (w < 0) { w = -w; x -= w; @@ -633,12 +632,13 @@ VRect VMatrix::map(const VRect &rect) const ymin = vMin(ymin, y); xmax = vMax(xmax, x); ymax = vMax(ymax, y); - return VRect(std::round(xmin), std::round(ymin), - std::round(xmax) - std::round(xmin), - std::round(ymax) - std::round(ymin)); + return VRect(std::lround(xmin), std::lround(ymin), + std::lround(xmax) - std::lround(xmin), + std::lround(ymax) - std::lround(ymin)); } else { // Not supported assert(0); + return {}; } } @@ -649,7 +649,7 @@ VRegion VMatrix::map(const VRegion &r) const if (t == MatrixType::Translate) { VRegion copy(r); - copy.translate(std::round(mtx), std::round(mty)); + copy.translate(std::lround(mtx), std::lround(mty)); return copy; } @@ -687,45 +687,12 @@ VPointF VMatrix::map(const VPointF &p) const x = m11 * fx + m21 * fy + mtx; y = m12 * fx + m22 * fy + mty; if (t == MatrixType::Project) { - float w = 1. / (m13 * fx + m23 * fy + m33); + float w = 1.0f / (m13 * fx + m23 * fy + m33); x *= w; y *= w; } } return {x, y}; } -static std::string type_helper(VMatrix::MatrixType t) -{ - switch (t) { - case VMatrix::MatrixType::None: - return "MatrixType::None"; - break; - case VMatrix::MatrixType::Translate: - return "MatrixType::Translate"; - break; - case VMatrix::MatrixType::Scale: - return "MatrixType::Scale"; - break; - case VMatrix::MatrixType::Rotate: - return "MatrixType::Rotate"; - break; - case VMatrix::MatrixType::Shear: - return "MatrixType::Shear"; - break; - case VMatrix::MatrixType::Project: - return "MatrixType::Project"; - break; - } - return ""; -} -std::ostream &operator<<(std::ostream &os, const VMatrix &o) -{ - os << "[Matrix: " - << "type =" << type_helper(o.type()) << ", Data : " << o.m11 << " " - << o.m12 << " " << o.m13 << " " << o.m21 << " " << o.m22 << " " << o.m23 - << " " << o.mtx << " " << o.mty << " " << o.m33 << " " - << "]" << std::endl; - return os; -} V_END_NAMESPACE diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vmatrix.h b/submodules/rlottie/rlottie/src/vector/vmatrix.h similarity index 97% rename from submodules/RLottie/Sources/rlottie/src/vector/vmatrix.h rename to submodules/rlottie/rlottie/src/vector/vmatrix.h index f762343300..fe2f0ed5d3 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vmatrix.h +++ b/submodules/rlottie/rlottie/src/vector/vmatrix.h @@ -81,8 +81,6 @@ public: bool operator==(const VMatrix &) const; bool operator!=(const VMatrix &) const; bool fuzzyCompare(const VMatrix &) const; - friend std::ostream &operator<<(std::ostream &os, const VMatrix &o); - private: friend struct VSpanData; float m11{1}, m12{0}, m13{0}; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpainter.cpp b/submodules/rlottie/rlottie/src/vector/vpainter.cpp similarity index 87% rename from submodules/RLottie/Sources/rlottie/src/vector/vpainter.cpp rename to submodules/rlottie/rlottie/src/vector/vpainter.cpp index cdcaa11f43..af0da6e5db 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vpainter.cpp +++ b/submodules/rlottie/rlottie/src/vector/vpainter.cpp @@ -61,12 +61,10 @@ void VPainterImpl::drawRle(const VRle &rle, const VRle &clip) static void fillRect(const VRect &r, VSpanData *data) { - int x1, x2, y1, y2; - - x1 = std::max(r.x(), 0); - x2 = std::min(r.x() + r.width(), data->mDrawableSize.width()); - y1 = std::max(r.y(), 0); - y2 = std::min(r.y() + r.height(), data->mDrawableSize.height()); + auto x1 = std::max(r.x(), 0); + auto x2 = std::min(r.x() + r.width(), data->mDrawableSize.width()); + auto y1 = std::max(r.y(), 0); + auto y2 = std::min(r.y() + r.height(), data->mDrawableSize.height()); if (x2 <= x1 || y2 <= y1) return; @@ -78,9 +76,9 @@ static void fillRect(const VRect &r, VSpanData *data) int n = std::min(nspans, y2 - y); int i = 0; while (i < n) { - spans[i].x = x1; - spans[i].len = x2 - x1; - spans[i].y = y + i; + spans[i].x = short(x1); + spans[i].len = ushort(x2 - x1); + spans[i].y = short(y + i); spans[i].coverage = 255; ++i; } @@ -97,8 +95,8 @@ void VPainterImpl::drawBitmapUntransform(const VRect & target, { mSpanData.initTexture(&bitmap, const_alpha, VBitmapData::Plain, source); if (!mSpanData.mUnclippedBlendFunc) return; - mSpanData.dx = -target.x(); - mSpanData.dy = -target.y(); + mSpanData.dx = float(-target.x()); + mSpanData.dy = float(-target.y()); VRect rr = source.translated(target.x(), target.y()); @@ -165,7 +163,7 @@ void VPainter::drawBitmap(const VPoint &point, const VBitmap &bitmap, { if (!bitmap.valid()) return; - drawBitmap(VRect(point.x(), point.y(), bitmap.width(), bitmap.height()), + drawBitmap(VRect(point, bitmap.size()), bitmap, source, const_alpha); } @@ -189,8 +187,8 @@ void VPainter::drawBitmap(const VPoint &point, const VBitmap &bitmap, { if (!bitmap.valid()) return; - drawBitmap(VRect(point.x(), point.y(), bitmap.width(), bitmap.height()), - bitmap, VRect(0, 0, bitmap.width(), bitmap.height()), + drawBitmap(VRect(point, bitmap.size()), + bitmap, bitmap.rect(), const_alpha); } @@ -199,7 +197,7 @@ void VPainter::drawBitmap(const VRect &rect, const VBitmap &bitmap, { if (!bitmap.valid()) return; - drawBitmap(rect, bitmap, VRect(0, 0, bitmap.width(), bitmap.height()), + drawBitmap(rect, bitmap, bitmap.rect(), const_alpha); } diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpainter.h b/submodules/rlottie/rlottie/src/vector/vpainter.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vpainter.h rename to submodules/rlottie/rlottie/src/vector/vpainter.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpath.cpp b/submodules/rlottie/rlottie/src/vector/vpath.cpp similarity index 99% rename from submodules/RLottie/Sources/rlottie/src/vector/vpath.cpp rename to submodules/rlottie/rlottie/src/vector/vpath.cpp index a82cbdf2cd..475e144b2a 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vpath.cpp +++ b/submodules/rlottie/rlottie/src/vector/vpath.cpp @@ -144,7 +144,7 @@ void VPath::VPathData::reserve(size_t pts, size_t elms) static VPointF curvesForArc(const VRectF &, float, float, VPointF *, size_t *); static constexpr float PATH_KAPPA = 0.5522847498f; -static constexpr float K_PI = float(M_PI); +static constexpr float K_PI = 3.141592f; void VPath::VPathData::arcTo(const VRectF &rect, float startAngle, float sweepLength, bool forceMoveTo) @@ -524,7 +524,7 @@ void VPath::VPathData::addPolystar(float points, float innerRadius, float partialPointAmount = points - floorf(points); bool longSegment = false; size_t numPoints = size_t(ceilf(points) * 2); - float angleDir = ((dir == VPath::Direction::CW) ? 1.0 : -1.0); + float angleDir = ((dir == VPath::Direction::CW) ? 1.0f : -1.0f); bool hasRoundness = false; innerRoundness /= 100.0f; @@ -625,7 +625,7 @@ void VPath::VPathData::addPolygon(float points, float radius, float roundness, float y; float anglePerPoint = 2.0f * K_PI / floorf(points); size_t numPoints = size_t(floorf(points)); - float angleDir = ((dir == VPath::Direction::CW) ? 1.0 : -1.0); + float angleDir = ((dir == VPath::Direction::CW) ? 1.0f : -1.0f); bool hasRoundness = false; roundness /= 100.0f; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpath.h b/submodules/rlottie/rlottie/src/vector/vpath.h similarity index 98% rename from submodules/RLottie/Sources/rlottie/src/vector/vpath.h rename to submodules/rlottie/rlottie/src/vector/vpath.h index 1c4bf0b781..60458547a8 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vpath.h +++ b/submodules/rlottie/rlottie/src/vector/vpath.h @@ -69,7 +69,7 @@ public: const std::vector & points() const; void clone(const VPath &srcPath); bool unique() const { return d.unique();} - int refCount() const { return d.refCount();} + size_t refCount() const { return d.refCount();} private: struct VPathData { @@ -107,7 +107,7 @@ private: const std::vector &points() const { return m_points; } std::vector m_points; std::vector m_elements; - unsigned int m_segments; + size_t m_segments; VPointF mStartPoint; mutable float mLength{0}; mutable bool mLengthDirty{true}; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpathmesure.cpp b/submodules/rlottie/rlottie/src/vector/vpathmesure.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vpathmesure.cpp rename to submodules/rlottie/rlottie/src/vector/vpathmesure.cpp diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpathmesure.h b/submodules/rlottie/rlottie/src/vector/vpathmesure.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vpathmesure.h rename to submodules/rlottie/rlottie/src/vector/vpathmesure.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vpoint.h b/submodules/rlottie/rlottie/src/vector/vpoint.h similarity index 97% rename from submodules/RLottie/Sources/rlottie/src/vector/vpoint.h rename to submodules/rlottie/rlottie/src/vector/vpoint.h index 1a84cb17cb..3565cafde6 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vpoint.h +++ b/submodules/rlottie/rlottie/src/vector/vpoint.h @@ -44,10 +44,10 @@ public: inline friend VDebug & operator<<(VDebug &os, const VPointF &o); friend inline VPointF operator-(const VPointF &p1, const VPointF &p2); - friend inline const VPointF operator*(const VPointF &, float val); - friend inline const VPointF operator*(float val, const VPointF &); - friend inline const VPointF operator/(const VPointF &, float val); - friend inline const VPointF operator/(float val, const VPointF &); + friend inline const VPointF operator*(const VPointF &, float); + friend inline const VPointF operator*(float, const VPointF &); + friend inline const VPointF operator/(const VPointF &, float); + friend inline const VPointF operator/(float, const VPointF &); private: float mx{0}; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vraster.cpp b/submodules/rlottie/rlottie/src/vector/vraster.cpp similarity index 91% rename from submodules/RLottie/Sources/rlottie/src/vector/vraster.cpp rename to submodules/rlottie/rlottie/src/vector/vraster.cpp index fec83e83b5..80e7537e68 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vraster.cpp +++ b/submodules/rlottie/rlottie/src/vector/vraster.cpp @@ -17,6 +17,7 @@ */ #include "vraster.h" +#include #include #include #include "config.h" @@ -71,7 +72,7 @@ public: SW_FT_Stroker_LineCap ftCap; SW_FT_Stroker_LineJoin ftJoin; SW_FT_Fixed ftWidth; - SW_FT_Fixed ftMeterLimit; + SW_FT_Fixed ftMiterLimit; dyn_array mPointMemory{100}; dyn_array mTagMemory{100}; dyn_array mContourMemory{10}; @@ -129,7 +130,7 @@ void FTOutline::convert(const VPath &path) } void FTOutline::convert(CapStyle cap, JoinStyle join, float width, - float meterLimit) + float miterLimit) { // map strokeWidth to freetype. It uses as the radius of the pen not the // diameter @@ -138,7 +139,7 @@ void FTOutline::convert(CapStyle cap, JoinStyle join, float width, // IMP: stroker takes radius in 26.6 co-ordinate ftWidth = SW_FT_Fixed(width * (1 << 6)); // IMP: stroker takes meterlimit in 16.16 co-ordinate - ftMeterLimit = SW_FT_Fixed(meterLimit * (1 << 16)); + ftMiterLimit = SW_FT_Fixed(miterLimit * (1 << 16)); // map to freetype capstyle switch (cap) { @@ -167,6 +168,8 @@ void FTOutline::convert(CapStyle cap, JoinStyle join, float width, void FTOutline::moveTo(const VPointF &pt) { + assert(ft.n_points <= SHRT_MAX - 1); + ft.points[ft.n_points].x = TO_FT_COORD(pt.x()); ft.points[ft.n_points].y = TO_FT_COORD(pt.y()); ft.tags[ft.n_points] = SW_FT_CURVE_TAG_ON; @@ -183,6 +186,8 @@ void FTOutline::moveTo(const VPointF &pt) void FTOutline::lineTo(const VPointF &pt) { + assert(ft.n_points <= SHRT_MAX - 1); + ft.points[ft.n_points].x = TO_FT_COORD(pt.x()); ft.points[ft.n_points].y = TO_FT_COORD(pt.y()); ft.tags[ft.n_points] = SW_FT_CURVE_TAG_ON; @@ -192,6 +197,8 @@ void FTOutline::lineTo(const VPointF &pt) void FTOutline::cubicTo(const VPointF &cp1, const VPointF &cp2, const VPointF ep) { + assert(ft.n_points <= SHRT_MAX - 3); + ft.points[ft.n_points].x = TO_FT_COORD(cp1.x()); ft.points[ft.n_points].y = TO_FT_COORD(cp1.y()); ft.tags[ft.n_points] = SW_FT_CURVE_TAG_CUBIC; @@ -209,6 +216,8 @@ void FTOutline::cubicTo(const VPointF &cp1, const VPointF &cp2, } void FTOutline::close() { + assert(ft.n_points <= SHRT_MAX - 1); + // mark the contour as a close path. ft.contours_flag[ft.n_contours] = 0; @@ -233,6 +242,8 @@ void FTOutline::close() void FTOutline::end() { + assert(ft.n_contours <= SHRT_MAX - 1); + if (ft.n_points) { ft.contours[ft.n_contours] = ft.n_points - 1; ft.n_contours++; @@ -292,7 +303,7 @@ struct VRleTask { SharedRle mRle; VPath mPath; float mStrokeWidth; - float mMeterLimit; + float mMiterLimit; VRect mClip; FillRule mFillRule; CapStyle mCap; @@ -311,14 +322,14 @@ struct VRleTask { } void update(VPath path, CapStyle cap, JoinStyle join, float width, - float meterLimit, const VRect &clip) + float miterLimit, const VRect &clip) { mRle.reset(); mPath = std::move(path); mCap = cap; mJoin = join; mStrokeWidth = width; - mMeterLimit = meterLimit; + mMiterLimit = miterLimit; mClip = clip; mGenerateStroke = true; } @@ -346,16 +357,21 @@ struct VRleTask { sw_ft_grays_raster.raster_render(nullptr, ¶ms); } - void update(FTOutline &outRef, SW_FT_Stroker &stroker) + void operator()(FTOutline &outRef, SW_FT_Stroker &stroker) { + if (mPath.points().size() > SHRT_MAX || + mPath.points().size() + mPath.segments() > SHRT_MAX) { + return; + } + if (mGenerateStroke) { // Stroke Task outRef.convert(mPath); - outRef.convert(mCap, mJoin, mStrokeWidth, mMeterLimit); + outRef.convert(mCap, mJoin, mStrokeWidth, mMiterLimit); uint points, contors; SW_FT_Stroker_Set(stroker, outRef.ftWidth, outRef.ftCap, - outRef.ftJoin, outRef.ftMeterLimit); + outRef.ftJoin, outRef.ftMiterLimit); SW_FT_Stroker_ParseOutline(stroker, &outRef.ft); SW_FT_Stroker_GetCounts(stroker, &points, &contors); @@ -467,7 +483,7 @@ public: class RleTaskScheduler { public: - FTOutline outlineRef; + FTOutline outlineRef{}; SW_FT_Stroker stroker; public: @@ -481,23 +497,13 @@ public: ~RleTaskScheduler() { SW_FT_Stroker_Done(stroker); } - void process(VTask task) { (*task).update(outlineRef, stroker); } + void process(VTask task) { (*task)(outlineRef, stroker); } }; #endif struct VRasterizer::VRasterizerImpl { VRleTask mTask; - FTOutline outlineRef; - SW_FT_Stroker stroker; - - VRasterizerImpl() { - SW_FT_Stroker_New(&stroker); - } - - ~VRasterizerImpl() { - SW_FT_Stroker_Done(stroker); - } - + VRle & rle() { return mTask.rle(); } VRleTask &task() { return mTask; } }; @@ -515,7 +521,8 @@ void VRasterizer::init() void VRasterizer::updateRequest() { - d->task().update(d->outlineRef, d->stroker); + VTask taskObj = VTask(d, &d->task()); + RleTaskScheduler::instance().process(std::move(taskObj)); } void VRasterizer::rasterize(VPath path, FillRule fillRule, const VRect &clip) @@ -530,14 +537,14 @@ void VRasterizer::rasterize(VPath path, FillRule fillRule, const VRect &clip) } void VRasterizer::rasterize(VPath path, CapStyle cap, JoinStyle join, - float width, float meterLimit, const VRect &clip) + float width, float miterLimit, const VRect &clip) { init(); if (path.empty() || vIsZero(width)) { d->rle().reset(); return; } - d->task().update(std::move(path), cap, join, width, meterLimit, clip); + d->task().update(std::move(path), cap, join, width, miterLimit, clip); updateRequest(); } diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vraster.h b/submodules/rlottie/rlottie/src/vector/vraster.h similarity index 95% rename from submodules/RLottie/Sources/rlottie/src/vector/vraster.h rename to submodules/rlottie/rlottie/src/vector/vraster.h index 987f9ad2bf..4f7d2ed337 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vraster.h +++ b/submodules/rlottie/rlottie/src/vector/vraster.h @@ -32,7 +32,7 @@ class VRasterizer public: void rasterize(VPath path, FillRule fillRule = FillRule::Winding, const VRect &clip = VRect()); void rasterize(VPath path, CapStyle cap, JoinStyle join, float width, - float meterLimit, const VRect &clip = VRect()); + float miterLimit, const VRect &clip = VRect()); VRle rle(); private: struct VRasterizerImpl; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vrect.cpp b/submodules/rlottie/rlottie/src/vector/vrect.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vrect.cpp rename to submodules/rlottie/rlottie/src/vector/vrect.cpp diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vrect.h b/submodules/rlottie/rlottie/src/vector/vrect.h similarity index 87% rename from submodules/RLottie/Sources/rlottie/src/vector/vrect.h rename to submodules/rlottie/rlottie/src/vector/vrect.h index 494579bcea..1b1f59bb85 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vrect.h +++ b/submodules/rlottie/rlottie/src/vector/vrect.h @@ -28,7 +28,8 @@ class VRect { public: VRect() = default; VRect(int x, int y, int w, int h):x1(x),y1(y),x2(x+w),y2(y+h){} - explicit VRect(const VRectF &r); + explicit VRect(VPoint pt, VSize sz):VRect(pt.x(), pt.y(), sz.width(), sz.height()){} + operator VRectF() const; V_CONSTEXPR bool empty() const {return x1 >= x2 || y1 >= y2;} V_CONSTEXPR int left() const {return x1;} V_CONSTEXPR int top() const {return y1;} @@ -107,23 +108,21 @@ inline void VRect::translate(int dx, int dy) inline bool VRect::contains(const VRect &r, bool proper) const { - if (!proper) { - if ((x1 <= r.x1) && (x2 >= r.x2) && (y1 <= r.y1) && (y2 >= r.y2)) - return true; - return false; - } else { - if ((x1 < r.x1) && (x2 > r.x2) && (y1 < r.y1) && (y2 > r.y2)) - return true; - return false; - } + return proper ? + ((x1 < r.x1) && (x2 > r.x2) && (y1 < r.y1) && (y2 > r.y2)) : + ((x1 <= r.x1) && (x2 >= r.x2) && (y1 <= r.y1) && (y2 >= r.y2)); } class VRectF { public: VRectF() = default; - VRectF(float x, float y, float w, float h):x1(x),y1(y),x2(x+w),y2(y+h){} - explicit VRectF(const VRect &r):x1(r.left()),y1(r.top()), - x2(r.right()),y2(r.bottom()){} + + VRectF(double x, double y, double w, double h): + x1(float(x)),y1(float(y)), + x2(float(x+w)),y2(float(y+h)){} + operator VRect() const { + return {int(left()), int(right()), int(width()), int(height())}; + } V_CONSTEXPR bool empty() const {return x1 >= x2 || y1 >= y2;} V_CONSTEXPR float left() const {return x1;} @@ -159,8 +158,11 @@ private: float y2{0}; }; -inline VRect::VRect(const VRectF &r):x1(r.left()),y1(r.top()), - x2(r.right()),y2(r.bottom()){} +inline VRect::operator VRectF() const +{ + return {double(left()), double(right()), double(width()), double(height())}; +} + V_END_NAMESPACE #endif // VRECT_H diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vrle.cpp b/submodules/rlottie/rlottie/src/vector/vrle.cpp similarity index 99% rename from submodules/RLottie/Sources/rlottie/src/vector/vrle.cpp rename to submodules/rlottie/rlottie/src/vector/vrle.cpp index 988ea3af48..d56710d384 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vrle.cpp +++ b/submodules/rlottie/rlottie/src/vector/vrle.cpp @@ -31,9 +31,9 @@ V_BEGIN_NAMESPACE enum class Operation { Add, Xor }; struct VRleHelper { - size_t alloc; - size_t size; - VRle::Span *spans; + size_t alloc{0}; + size_t size{0}; + VRle::Span *spans{nullptr}; }; static void rleIntersectWithRle(VRleHelper *, int, int, VRleHelper *, VRleHelper *); @@ -150,7 +150,7 @@ void VRle::VRleData::invert() } } -void VRle::VRleData::operator*=(int alpha) +void VRle::VRleData::operator*=(uchar alpha) { alpha &= 0xff; for (auto &i : mSpans) { @@ -384,7 +384,7 @@ static void rleIntersectWithRle(VRleHelper *tmp_clip, int clip_offset_x, VRleHelper *result) { VRle::Span *out = result->spans; - int available = result->alloc; + size_t available = result->alloc; VRle::Span *spans = tmp_obj->spans; VRle::Span *end = tmp_obj->spans + tmp_obj->size; VRle::Span *clipSpans = tmp_clip->spans; @@ -459,7 +459,7 @@ static void rleIntersectWithRect(const VRect &clip, VRleHelper *tmp_obj, VRleHelper *result) { VRle::Span *out = result->spans; - int available = result->alloc; + size_t available = result->alloc; VRle::Span *spans = tmp_obj->spans; VRle::Span *end = tmp_obj->spans + tmp_obj->size; short minx, miny, maxx, maxy; diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vrle.h b/submodules/rlottie/rlottie/src/vector/vrle.h similarity index 92% rename from submodules/RLottie/Sources/rlottie/src/vector/vrle.h rename to submodules/rlottie/rlottie/src/vector/vrle.h index b8d97db3c7..6ba92d65cc 100644 --- a/submodules/RLottie/Sources/rlottie/src/vector/vrle.h +++ b/submodules/rlottie/rlottie/src/vector/vrle.h @@ -30,13 +30,13 @@ V_BEGIN_NAMESPACE class VRle { public: struct Span { - short x; - short y; - ushort len; - uchar coverage; + short x{0}; + short y{0}; + ushort len{0}; + uchar coverage{0}; }; - typedef void (*VRleSpanCb)(size_t count, const VRle::Span *spans, - void *userData); + using VRleSpanCb = void (*)(size_t count, const VRle::Span *spans, + void *userData); bool empty() const; VRect boundingRect() const; void setBoundingRect(const VRect &bbox); @@ -46,7 +46,7 @@ public: void translate(const VPoint &p); void invert(); - void operator*=(int alpha); + void operator*=(uchar alpha); void intersect(const VRect &r, VRleSpanCb cb, void *userData) const; void intersect(const VRle &rle, VRleSpanCb cb, void *userData) const; @@ -59,7 +59,7 @@ public: static VRle toRle(const VRect &rect); bool unique() const {return d.unique();} - int refCount() const { return d.refCount();} + size_t refCount() const { return d.refCount();} void clone(const VRle &o); private: @@ -75,7 +75,7 @@ private: void setBbox(const VRect &bbox) const; void reset(); void translate(const VPoint &p); - void operator*=(int alpha); + void operator*=(uchar alpha); void invert(); void opIntersect(const VRect &, VRle::VRleSpanCb, void *) const; void opGeneric(const VRle::VRleData &, const VRle::VRleData &, OpCode code); @@ -119,7 +119,7 @@ inline void VRle::invert() d.write().invert(); } -inline void VRle::operator*=(int alpha) +inline void VRle::operator*=(uchar alpha) { d.write() *= alpha; } diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vstackallocator.h b/submodules/rlottie/rlottie/src/vector/vstackallocator.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vstackallocator.h rename to submodules/rlottie/rlottie/src/vector/vstackallocator.h diff --git a/submodules/RLottie/Sources/rlottie/src/vector/vtaskqueue.h b/submodules/rlottie/rlottie/src/vector/vtaskqueue.h similarity index 100% rename from submodules/RLottie/Sources/rlottie/src/vector/vtaskqueue.h rename to submodules/rlottie/rlottie/src/vector/vtaskqueue.h diff --git a/submodules/rlottie/rlottie/test/CMakeLists.txt b/submodules/rlottie/rlottie/test/CMakeLists.txt new file mode 100644 index 0000000000..235c18b904 --- /dev/null +++ b/submodules/rlottie/rlottie/test/CMakeLists.txt @@ -0,0 +1,21 @@ +project(rlottie_tests CXX) +find_package(GTest REQUIRED) + +add_definitions(-DDEMO_DIR="${CMAKE_SOURCE_DIR}/example/resource/") +link_libraries(GTest::GTest GTest::Main) + +add_executable(vectorTestSuite testsuite.cpp test_vrect.cpp test_vpath.cpp + ${CMAKE_SOURCE_DIR}/src/vector/vbezier.cpp + ${CMAKE_SOURCE_DIR}/src/vector/vdebug.cpp + ${CMAKE_SOURCE_DIR}/src/vector/vmatrix.cpp + ${CMAKE_SOURCE_DIR}/src/vector/vpath.cpp + ${CMAKE_SOURCE_DIR}/src/vector/pixman/vregion.cpp) +target_include_directories(vectorTestSuite PRIVATE ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/src/vector ${CMAKE_SOURCE_DIR}/src/vector/pixman) +gtest_add_tests(vectorTestSuite "" AUTO) + +add_executable(animationTestSuite testsuite.cpp + test_lottieanimation.cpp test_lottieanimation_capi.cpp) +target_include_directories(animationTestSuite PRIVATE ${CMAKE_SOURCE_DIR}/inc) +target_link_libraries(animationTestSuite PRIVATE rlottie) +gtest_add_tests(animationTestSuite "" AUTO) diff --git a/submodules/rlottie/rlottie/test/meson.build b/submodules/rlottie/rlottie/test/meson.build new file mode 100644 index 0000000000..1dbd66ba56 --- /dev/null +++ b/submodules/rlottie/rlottie/test/meson.build @@ -0,0 +1,36 @@ + +override_default = ['warning_level=2', 'werror=false'] + +gtest_dep = dependency('gtest') + +vector_test_sources = [ + 'testsuite.cpp', + 'test_vrect.cpp', + 'test_vpath.cpp', + ] + +vector_testsuite = executable('vectorTestSuite', + vector_test_sources, + include_directories : inc, + override_options : override_default, + dependencies : [gtest_dep, rlottie_lib_dep], + ) + +test('Vector Testsuite', vector_testsuite) + + +animation_test_sources = [ + 'testsuite.cpp', + 'test_lottieanimation.cpp', + 'test_lottieanimation_capi.cpp' + ] + +animation_testsuite = executable('animationTestSuite', + animation_test_sources, + include_directories : inc, + override_options : override_default, + link_with : rlottie_lib, + dependencies : gtest_dep, + ) + +test('Animation Testsuite', animation_testsuite) diff --git a/submodules/RLottie/Sources/rlottie/test/test_lottieanimation.cpp b/submodules/rlottie/rlottie/test/test_lottieanimation.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/test/test_lottieanimation.cpp rename to submodules/rlottie/rlottie/test/test_lottieanimation.cpp diff --git a/submodules/RLottie/Sources/rlottie/test/test_lottieanimation_capi.cpp b/submodules/rlottie/rlottie/test/test_lottieanimation_capi.cpp similarity index 96% rename from submodules/RLottie/Sources/rlottie/test/test_lottieanimation_capi.cpp rename to submodules/rlottie/rlottie/test/test_lottieanimation_capi.cpp index ac058e011f..a0d24ef1c8 100644 --- a/submodules/RLottie/Sources/rlottie/test/test_lottieanimation_capi.cpp +++ b/submodules/rlottie/rlottie/test/test_lottieanimation_capi.cpp @@ -1,5 +1,5 @@ #include -#include "lottieanimation_capi.h" +#include "rlottie_capi.h" class AnimationCApiTest : public ::testing::Test { public: diff --git a/submodules/RLottie/Sources/rlottie/test/test_vpath.cpp b/submodules/rlottie/rlottie/test/test_vpath.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/test/test_vpath.cpp rename to submodules/rlottie/rlottie/test/test_vpath.cpp diff --git a/submodules/rlottie/rlottie/test/test_vrect.cpp b/submodules/rlottie/rlottie/test/test_vrect.cpp new file mode 100644 index 0000000000..12fa09d0dd --- /dev/null +++ b/submodules/rlottie/rlottie/test/test_vrect.cpp @@ -0,0 +1,58 @@ +#include +#include "vrect.h" + +class VRectFTest : public ::testing::Test { +public: + void SetUp() + { + conersionRect = rect; + } + void TearDown() + { + + } +public: + VRectF Empty; + VRectF illigal{0, 0, -100, 200}; + VRectF conersionRect; + VRect rect{0, 0, 100, 100}; +}; + +class VRectTest : public ::testing::Test { +public: + void SetUp() + { + conersionRect = rect; + } + void TearDown() + { + + } +public: + VRect Empty; + VRect illigal{0, 0, -100, 200}; + VRect conersionRect; + VRectF rect{0, 0, 100.5, 100}; +}; + +TEST_F(VRectFTest, construct) { + VRectF r1{0, 0, 100, 100}; + VRectF r2{0, 0, 100.0, 100}; + VRectF r3 = {0, 0, 100, 100}; + VRectF r4 = {0, 0, 100.0, 100}; + VRectF r6(0, 0, 100, 100); + VRectF r7(0, 0, 100.0, 100); + ASSERT_TRUE(Empty.empty()); + ASSERT_TRUE(illigal.empty()); +} + +TEST_F(VRectTest, construct) { + VRect r1{0, 0, 100, 100}; + VRect r2{0, 0, 10, 100}; + VRect r3 = {0, 0, 100, 100}; + VRect r4 = {0, 0, 10, 100}; + VRect r6(0, 0, 100, 100); + VRect r7(0, 0, 10, 100); + ASSERT_TRUE(Empty.empty()); + ASSERT_TRUE(illigal.empty()); +} diff --git a/submodules/RLottie/Sources/rlottie/test/testsgregion.cpp b/submodules/rlottie/rlottie/test/testsgregion.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/test/testsgregion.cpp rename to submodules/rlottie/rlottie/test/testsgregion.cpp diff --git a/submodules/RLottie/Sources/rlottie/test/testsuite.cpp b/submodules/rlottie/rlottie/test/testsuite.cpp similarity index 100% rename from submodules/RLottie/Sources/rlottie/test/testsuite.cpp rename to submodules/rlottie/rlottie/test/testsuite.cpp diff --git a/submodules/rlottie/rlottie/vs2019/config.h b/submodules/rlottie/rlottie/vs2019/config.h new file mode 100644 index 0000000000..6c6d78a548 --- /dev/null +++ b/submodules/rlottie/rlottie/vs2019/config.h @@ -0,0 +1,13 @@ +/* + * Autogenerated by the Meson build system. + * Do not edit, your changes will be lost. + */ + +#pragma once + +#define LOTTIE_CACHE_SUPPORT 1 + +#define LOTTIE_IMAGE_MODULE_SUPPORT 1 + +#define LOTTIE_THREAD_SUPPORT 1 + diff --git a/submodules/rlottie/rlottie/vs2019/rlottie.sln b/submodules/rlottie/rlottie/vs2019/rlottie.sln new file mode 100644 index 0000000000..ddeb4a0c42 --- /dev/null +++ b/submodules/rlottie/rlottie/vs2019/rlottie.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29020.237 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rlottie", "rlottie.vcxproj", "{9C97B40D-AB46-4EC7-9A17-7F5256FBC059}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Debug|x64.ActiveCfg = Debug|x64 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Debug|x64.Build.0 = Debug|x64 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Debug|x86.ActiveCfg = Debug|Win32 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Debug|x86.Build.0 = Debug|Win32 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Release|x64.ActiveCfg = Release|x64 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Release|x64.Build.0 = Release|x64 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Release|x86.ActiveCfg = Release|Win32 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A8E849A6-AE99-4AEA-92AD-23F0F12B1C68} + EndGlobalSection +EndGlobal diff --git a/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj b/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj new file mode 100644 index 0000000000..5e38a478a3 --- /dev/null +++ b/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj @@ -0,0 +1,247 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {9C97B40D-AB46-4EC7-9A17-7F5256FBC059} + rlottie + 10.0 + + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + DynamicLibrary + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + Console + + + + + Level3 + Disabled + true + true + ../inc;./;../src/lottie;../src/vector;../src/vector/pixman;../src/vector/freetype;%(AdditionalIncludeDirectories) + -DLOT_BUILD %(AdditionalOptions) + 4251;4244 + + + Console + + + + + Level3 + MaxSpeed + true + true + true + true + + + Console + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + Console + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj.filters b/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj.filters new file mode 100644 index 0000000000..3669078830 --- /dev/null +++ b/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj.filters @@ -0,0 +1,382 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {fe19fe8c-ea12-4233-a5b3-e1d3b5eef911} + + + {d270b25a-5e50-4fd3-9552-e97a4855bbce} + + + {14ba4b30-7907-4e82-9e05-46bb1083eb30} + + + {fb769465-148c-4a24-b6f7-d4f296c045f7} + + + {6c95ecc5-8b13-4cdf-b729-ef98cf1e23e0} + + + {089f6054-13bb-4ffe-8129-4b38224412db} + + + {02c6210d-fe4b-4971-a04d-ca33f9b7f033} + + + {d981dfd0-86e1-47ea-9fdb-2c06401fddec} + + + {75db7b83-6147-402f-bc29-25e5edab2531} + + + {386829e3-2415-4992-a85e-b3e9a352278d} + + + {79196b11-c3ac-449b-83d6-52f81e748794} + + + + + inc + + + inc + + + inc + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson + + + src\lottie\rapidjson\error + + + src\lottie\rapidjson\error + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\internal + + + src\lottie\rapidjson\msinttypes + + + src\lottie\rapidjson\msinttypes + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\vector\freetype + + + src\vector\freetype + + + src\vector\freetype + + + src\vector\freetype + + + src\vector\pixman + + + src\vector\pixman + + + src\vector\stb + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + inc + + + + + src\binding\c + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\lottie + + + src\vector\freetype + + + src\vector\freetype + + + src\vector\freetype + + + src\vector\pixman + + + src\vector\stb + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + src\vector + + + + + src\vector\pixman + + + \ No newline at end of file diff --git a/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj.user b/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj.user new file mode 100644 index 0000000000..0f14913f3c --- /dev/null +++ b/submodules/rlottie/rlottie/vs2019/rlottie.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file