From 0eeb619b35b8394a6a4f765b6fb01bf2695c1a30 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 2 Oct 2026 20:09:44 +0200 Subject: [PATCH 01/13] CultMath HLSL: write the shader in the subset GLSL ES 3.00 shares, bit for bit Each edit is legal HLSL that computes the same bits, and closes one dialect gap the GLSL lowering would otherwise have to special-case: - snoise and snoise_grad: step(h, 0.0) -> step(h, float4(0.0, 0.0, 0.0, 0.0)); GLSL has no step(genType, float). - pcg: (state >> 28) + 4 -> + 4u; GLSL has no implicit int -> uint. - cellular and phacelle jitter, cellular id: (float)((uint)hash.x >> 8) before the float multiply; GLSL has no implicit uint -> float. - damp (float2/3/4): the scalar amount is splatted explicitly; GLSL has no lerp(vecN, vecN, float) promotion. - pcg3d(float3) is defined before pcg3d(float2), which calls it; GLSL needs a declaration before use. Both tracked copies; the C# mirror stays green, FXC cs_5_0 compiles both copies. Co-Authored-By: Claude Opus 5.5 --- .../cultmath/shaders/CultMath.Phacelle.hlsl | 6 ++--- packages/cultmath/shaders/CultMath.hlsl | 25 +++++++++++-------- .../Shaders/CultMath.Phacelle.hlsl | 6 ++--- .../Shaders/CultMath.hlsl | 25 +++++++++++-------- 4 files changed, 34 insertions(+), 28 deletions(-) diff --git a/packages/cultmath/shaders/CultMath.Phacelle.hlsl b/packages/cultmath/shaders/CultMath.Phacelle.hlsl index 1db0a2fc..c95aafc6 100644 --- a/packages/cultmath/shaders/CultMath.Phacelle.hlsl +++ b/packages/cultmath/shaders/CultMath.Phacelle.hlsl @@ -49,9 +49,9 @@ CultPhasor cultmath_phacelle(float3 p, float3 side, float offset, float normaliz float3 gridStep = float3(dx, dy, dz); int3 hash = cultmath_pcg3d(int3(cell + gridStep)); float3 jitter = float3( - ((uint)hash.x >> 8) * (1.0 / 16777216.0) - 0.5, - ((uint)hash.y >> 8) * (1.0 / 16777216.0) - 0.5, - ((uint)hash.z >> 8) * (1.0 / 16777216.0) - 0.5); + (float)((uint)hash.x >> 8) * (1.0 / 16777216.0) - 0.5, + (float)((uint)hash.y >> 8) * (1.0 / 16777216.0) - 0.5, + (float)((uint)hash.z >> 8) * (1.0 / 16777216.0) - 0.5); float3 v = local - gridStep - jitter; float falloff = exp(-2.0 * dot(v, v)); float w = max(0.0, falloff - 0.01111); diff --git a/packages/cultmath/shaders/CultMath.hlsl b/packages/cultmath/shaders/CultMath.hlsl index da3362a6..cbb13e4e 100644 --- a/packages/cultmath/shaders/CultMath.hlsl +++ b/packages/cultmath/shaders/CultMath.hlsl @@ -111,7 +111,7 @@ float cultmath_snoise(float3 value) float4 b1 = float4(x.zw, y.zw); float4 s0 = floor(b0) * 2.0 + 1.0; float4 s1 = floor(b1) * 2.0 + 1.0; - float4 sh = -step(h, 0.0); + float4 sh = -step(h, float4(0.0, 0.0, 0.0, 0.0)); float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; @@ -197,7 +197,7 @@ float4 cultmath_snoise_grad(float3 value) float4 b1 = float4(x.zw, y.zw); float4 s0 = floor(b0) * 2.0 + 1.0; float4 s1 = floor(b1) * 2.0 + 1.0; - float4 sh = -step(h, 0.0); + float4 sh = -step(h, float4(0.0, 0.0, 0.0, 0.0)); float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; @@ -316,17 +316,20 @@ float cultmath_damp(float start, float end, float lambda_value, float dt) float2 cultmath_damp(float2 start, float2 end, float lambda_value, float dt) { - return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, float2(amount, amount)); } float3 cultmath_damp(float3 start, float3 end, float lambda_value, float dt) { - return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, float3(amount, amount, amount)); } float4 cultmath_damp(float4 start, float4 end, float lambda_value, float dt) { - return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, float4(amount, amount, amount, amount)); } float cultmath_catmullrom(float p0, float p1, float p2, float p3, float t) @@ -393,7 +396,7 @@ float cultmath_hash(float3 value) { return cultmath_hash(dot(value, float3(127.1 uint cultmath_pcg(uint value) { uint state = value * 747796405u + 2891336453u; - uint word = ((state >> (int)((state >> 28) + 4)) ^ state) * 277803737u; + uint word = ((state >> (int)((state >> 28) + 4u)) ^ state) * 277803737u; return (word >> 22) ^ word; } @@ -406,8 +409,8 @@ int3 cultmath_pcg3d(int3 value) return int3((int)x, (int)y, (int)z); } -int3 cultmath_pcg3d(float2 value) { return cultmath_pcg3d(float3(value, 0.0)); } int3 cultmath_pcg3d(float3 value) { return cultmath_pcg3d(int3((int)asuint(value.x), (int)asuint(value.y), (int)asuint(value.z))); } +int3 cultmath_pcg3d(float2 value) { return cultmath_pcg3d(float3(value, 0.0)); } int4 cultmath_pcg4d(int4 value) { @@ -468,9 +471,9 @@ CultCellular cultmath_cellular(float3 p) float3 neighbor = cell + float3(dx, dy, dz); int3 hash = cultmath_pcg3d(int3(neighbor)); float3 jitter = float3( - ((uint)hash.x >> 8) * (1.0 / 16777216.0), - ((uint)hash.y >> 8) * (1.0 / 16777216.0), - ((uint)hash.z >> 8) * (1.0 / 16777216.0)); + (float)((uint)hash.x >> 8) * (1.0 / 16777216.0), + (float)((uint)hash.y >> 8) * (1.0 / 16777216.0), + (float)((uint)hash.z >> 8) * (1.0 / 16777216.0)); float3 feature = neighbor + jitter; float d = cultmath_distance(p, feature); @@ -499,7 +502,7 @@ CultCellular cultmath_cellular(float3 p) CultCellular result; result.nearest = float4(grad1, f1); result.edge = float4(grad2 - grad1, f2 - f1); - result.id = ((uint)idHash.w >> 8) * (1.0 / 16777216.0); + result.id = (float)((uint)idHash.w >> 8) * (1.0 / 16777216.0); return result; } diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.Phacelle.hlsl b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.Phacelle.hlsl index 1db0a2fc..c95aafc6 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.Phacelle.hlsl +++ b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.Phacelle.hlsl @@ -49,9 +49,9 @@ CultPhasor cultmath_phacelle(float3 p, float3 side, float offset, float normaliz float3 gridStep = float3(dx, dy, dz); int3 hash = cultmath_pcg3d(int3(cell + gridStep)); float3 jitter = float3( - ((uint)hash.x >> 8) * (1.0 / 16777216.0) - 0.5, - ((uint)hash.y >> 8) * (1.0 / 16777216.0) - 0.5, - ((uint)hash.z >> 8) * (1.0 / 16777216.0) - 0.5); + (float)((uint)hash.x >> 8) * (1.0 / 16777216.0) - 0.5, + (float)((uint)hash.y >> 8) * (1.0 / 16777216.0) - 0.5, + (float)((uint)hash.z >> 8) * (1.0 / 16777216.0) - 0.5); float3 v = local - gridStep - jitter; float falloff = exp(-2.0 * dot(v, v)); float w = max(0.0, falloff - 0.01111); diff --git a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl index da3362a6..cbb13e4e 100644 --- a/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl +++ b/packages/cultmath/unity/org.gamecult.cultmath/Shaders/CultMath.hlsl @@ -111,7 +111,7 @@ float cultmath_snoise(float3 value) float4 b1 = float4(x.zw, y.zw); float4 s0 = floor(b0) * 2.0 + 1.0; float4 s1 = floor(b1) * 2.0 + 1.0; - float4 sh = -step(h, 0.0); + float4 sh = -step(h, float4(0.0, 0.0, 0.0, 0.0)); float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; @@ -197,7 +197,7 @@ float4 cultmath_snoise_grad(float3 value) float4 b1 = float4(x.zw, y.zw); float4 s0 = floor(b0) * 2.0 + 1.0; float4 s1 = floor(b1) * 2.0 + 1.0; - float4 sh = -step(h, 0.0); + float4 sh = -step(h, float4(0.0, 0.0, 0.0, 0.0)); float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; @@ -316,17 +316,20 @@ float cultmath_damp(float start, float end, float lambda_value, float dt) float2 cultmath_damp(float2 start, float2 end, float lambda_value, float dt) { - return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, float2(amount, amount)); } float3 cultmath_damp(float3 start, float3 end, float lambda_value, float dt) { - return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, float3(amount, amount, amount)); } float4 cultmath_damp(float4 start, float4 end, float lambda_value, float dt) { - return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, float4(amount, amount, amount, amount)); } float cultmath_catmullrom(float p0, float p1, float p2, float p3, float t) @@ -393,7 +396,7 @@ float cultmath_hash(float3 value) { return cultmath_hash(dot(value, float3(127.1 uint cultmath_pcg(uint value) { uint state = value * 747796405u + 2891336453u; - uint word = ((state >> (int)((state >> 28) + 4)) ^ state) * 277803737u; + uint word = ((state >> (int)((state >> 28) + 4u)) ^ state) * 277803737u; return (word >> 22) ^ word; } @@ -406,8 +409,8 @@ int3 cultmath_pcg3d(int3 value) return int3((int)x, (int)y, (int)z); } -int3 cultmath_pcg3d(float2 value) { return cultmath_pcg3d(float3(value, 0.0)); } int3 cultmath_pcg3d(float3 value) { return cultmath_pcg3d(int3((int)asuint(value.x), (int)asuint(value.y), (int)asuint(value.z))); } +int3 cultmath_pcg3d(float2 value) { return cultmath_pcg3d(float3(value, 0.0)); } int4 cultmath_pcg4d(int4 value) { @@ -468,9 +471,9 @@ CultCellular cultmath_cellular(float3 p) float3 neighbor = cell + float3(dx, dy, dz); int3 hash = cultmath_pcg3d(int3(neighbor)); float3 jitter = float3( - ((uint)hash.x >> 8) * (1.0 / 16777216.0), - ((uint)hash.y >> 8) * (1.0 / 16777216.0), - ((uint)hash.z >> 8) * (1.0 / 16777216.0)); + (float)((uint)hash.x >> 8) * (1.0 / 16777216.0), + (float)((uint)hash.y >> 8) * (1.0 / 16777216.0), + (float)((uint)hash.z >> 8) * (1.0 / 16777216.0)); float3 feature = neighbor + jitter; float d = cultmath_distance(p, feature); @@ -499,7 +502,7 @@ CultCellular cultmath_cellular(float3 p) CultCellular result; result.nearest = float4(grad1, f1); result.edge = float4(grad2 - grad1, f2 - f1); - result.id = ((uint)idHash.w >> 8) * (1.0 / 16777216.0); + result.id = (float)((uint)idHash.w >> 8) * (1.0 / 16777216.0); return result; } From d2ff33085f31c506eed8738c5f5f43171cd4e6cf Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 2 Oct 2026 20:09:44 +0200 Subject: [PATCH 02/13] CultMath GLSL: shaders/CultMath.glsl generated from the HLSL by one enumerated lowering, pinned GlslLowering (test project) is the HLSL -> GLSL ES 3.00 transformation as named steps: includes inlined by the C# mirror's own resolver, guards and texture functions dropped, type names, static const, casts by a balanced scanner, intrinsic renames, literals passed through, the CULTMATH_GLSL guard and a provenance line. GlslMirrorTests pins the committed file to the lowering (CULTMATH_WRITE_GLSL=1 regenerates it), finds no HLSL-only token, finds every public function but the texture samplers, and pins fixtures/glsl-parity.json (256 seeded cases per family as float32 bit patterns) to C#. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/shaders/CultMath.glsl | 745 ++ .../tests/CultMath.Tests/GlslLowering.cs | 130 + .../tests/CultMath.Tests/GlslMirrorTests.cs | 221 + .../HlslSourceCompatibilityTests.cs | 2 +- .../CultMath.Tests/fixtures/glsl-parity.json | 6558 +++++++++++++++++ 5 files changed, 7655 insertions(+), 1 deletion(-) create mode 100644 packages/cultmath/shaders/CultMath.glsl create mode 100644 packages/cultmath/tests/CultMath.Tests/GlslLowering.cs create mode 100644 packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs create mode 100644 packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json diff --git a/packages/cultmath/shaders/CultMath.glsl b/packages/cultmath/shaders/CultMath.glsl new file mode 100644 index 00000000..ad58fe35 --- /dev/null +++ b/packages/cultmath/shaders/CultMath.glsl @@ -0,0 +1,745 @@ +// Generated from shaders/CultMath.hlsl and its includes by GlslLowering (packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with CULTMATH_WRITE_GLSL=1 dotnet test --filter GlslMirrorTests. +#ifndef CULTMATH_GLSL +#define CULTMATH_GLSL +// CultMath HLSL mirror. +// +// HLSL already owns the vec2/vec3/vec4 type names and most primitive +// intrinsics. This include names the CultMath semantic surface explicitly so +// shader code, C# wrappers, and Rust/native parity fixtures can share the same +// small vocabulary without local helper drift. + +const float CULTMATH_PI = 3.14159265358979323846; +const float CULTMATH_TAU = 6.28318530717958647692; +const float CULTMATH_HALF_PI = 1.57079632679489661923; + +float cultmath_radians(float degrees_value) { return degrees_value * (CULTMATH_PI / 180.0); } +float cultmath_degrees(float radians_value) { return radians_value * (180.0 / CULTMATH_PI); } + +float cultmath_frac(float value) { return value - floor(value); } +vec2 cultmath_frac(vec2 value) { return value - floor(value); } +vec3 cultmath_frac(vec3 value) { return value - floor(value); } +vec4 cultmath_frac(vec4 value) { return value - floor(value); } + +float cultmath_clamp(float value, float minimum, float maximum) { return min(max(value, minimum), maximum); } +vec2 cultmath_clamp(vec2 value, vec2 minimum, vec2 maximum) { return min(max(value, minimum), maximum); } +vec3 cultmath_clamp(vec3 value, vec3 minimum, vec3 maximum) { return min(max(value, minimum), maximum); } +vec4 cultmath_clamp(vec4 value, vec4 minimum, vec4 maximum) { return min(max(value, minimum), maximum); } + +// DXIL Saturate is FMin(1, FMax(0, x)); dxc lowers min/max to the same FMin/FMax, NaN rules included. +float cultmath_saturate(float value) { return min(1.0, max(0.0, value)); } +vec2 cultmath_saturate(vec2 value) { return min(vec2(1.0, 1.0), max(vec2(0.0, 0.0), value)); } +vec3 cultmath_saturate(vec3 value) { return min(vec3(1.0, 1.0, 1.0), max(vec3(0.0, 0.0, 0.0), value)); } +vec4 cultmath_saturate(vec4 value) { return min(vec4(1.0, 1.0, 1.0, 1.0), max(vec4(0.0, 0.0, 0.0, 0.0), value)); } + +float cultmath_lerp(float start, float end, float amount) { return start + (end - start) * amount; } +vec2 cultmath_lerp(vec2 start, vec2 end, vec2 amount) { return start + (end - start) * amount; } +vec3 cultmath_lerp(vec3 start, vec3 end, vec3 amount) { return start + (end - start) * amount; } +vec4 cultmath_lerp(vec4 start, vec4 end, vec4 amount) { return start + (end - start) * amount; } + +float cultmath_step(float edge, float value) { return value < edge ? 0.0 : 1.0; } +vec2 cultmath_step(vec2 edge, vec2 value) { return vec2(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y)); } +vec3 cultmath_step(vec3 edge, vec3 value) { return vec3(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y), cultmath_step(edge.z, value.z)); } +vec4 cultmath_step(vec4 edge, vec4 value) { return vec4(cultmath_step(edge.x, value.x), cultmath_step(edge.y, value.y), cultmath_step(edge.z, value.z), cultmath_step(edge.w, value.w)); } + +float cultmath_smoothstep(float minimum, float maximum, float value) +{ + float t = cultmath_saturate((value - minimum) / (maximum - minimum)); + return t * t * (3.0 - 2.0 * t); +} + +vec2 cultmath_smoothstep(vec2 minimum, vec2 maximum, vec2 value) +{ + vec2 t = cultmath_saturate((value - minimum) / (maximum - minimum)); + return t * t * (vec2(3.0, 3.0) - vec2(2.0, 2.0) * t); +} + +vec3 cultmath_smoothstep(vec3 minimum, vec3 maximum, vec3 value) +{ + vec3 t = cultmath_saturate((value - minimum) / (maximum - minimum)); + return t * t * (vec3(3.0, 3.0, 3.0) - vec3(2.0, 2.0, 2.0) * t); +} + +vec4 cultmath_smoothstep(vec4 minimum, vec4 maximum, vec4 value) +{ + vec4 t = cultmath_saturate((value - minimum) / (maximum - minimum)); + return t * t * (vec4(3.0, 3.0, 3.0, 3.0) - vec4(2.0, 2.0, 2.0, 2.0) * t); +} + +float cultmath_smoothstep01(float value) { return cultmath_smoothstep(0.0, 1.0, value); } + +float cultmath_smootherstep(float value) +{ + value = cultmath_saturate(value); + return value * value * value * (value * (value * 6.0 - 15.0) + 10.0); +} + +vec2 cultmath_snoise_mod289(vec2 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } +vec3 cultmath_snoise_mod289(vec3 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } +vec4 cultmath_snoise_mod289(vec4 value) { return value - floor(value * (1.0 / 289.0)) * 289.0; } +vec3 cultmath_snoise_permute(vec3 value) { return cultmath_snoise_mod289(((value * 34.0) + 10.0) * value); } +vec4 cultmath_snoise_permute(vec4 value) { return cultmath_snoise_mod289(((value * 34.0) + 10.0) * value); } + +// Ashima Arts / Ian McEwan 3D simplex noise (MIT), same float32 evaluation +// order as the C# math.snoise(vec3) mirror. +float cultmath_snoise(vec3 value) +{ + vec2 c = vec2(1.0 / 6.0, 1.0 / 3.0); + vec3 i = floor(value + dot(value, c.yyy)); + vec3 x0 = value - i + dot(i, c.xxx); + vec3 g = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g; + vec3 i1 = min(g.xyz, l.zxy); + vec3 i2 = max(g.xyz, l.zxy); + vec3 x1 = x0 - i1 + c.xxx; + vec3 x2 = x0 - i2 + c.yyy; + vec3 x3 = x0 - 0.5; + + i = cultmath_snoise_mod289(i); + vec4 p = cultmath_snoise_permute(cultmath_snoise_permute(cultmath_snoise_permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + vec4(0.0, i1.x, i2.x, 1.0)); + + const float n_ = 0.142857142857; + vec3 ns = vec3(2.0 * n_, 0.5 * n_ - 1.0, n_); + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_); + vec4 x = x_ * ns.x + ns.yyyy; + vec4 y = y_ * ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4(x.xy, y.xy); + vec4 b1 = vec4(x.zw, y.zw); + vec4 s0 = floor(b0) * 2.0 + 1.0; + vec4 s1 = floor(b1) * 2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0, 0.0, 0.0, 0.0)); + vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; + vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww; + + vec3 p0 = vec3(a0.xy, h.x); + vec3 p1 = vec3(a0.zw, h.y); + vec3 p2 = vec3(a1.xy, h.z); + vec3 p3 = vec3(a1.zw, h.w); + vec4 norm = 1.79284291400159 - 0.85373472095314 * vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); + m = m * m; + return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); +} + +float cultmath_snoise(vec2 value) +{ + vec4 c = vec4( + 0.211324865405187, + 0.366025403784439, + -0.577350269189626, + 0.024390243902439); + vec2 i = floor(value + dot(value, c.yy)); + vec2 x0 = value - i + dot(i, c.xx); + vec2 i1 = x0.x > x0.y ? vec2(1.0, 0.0) : vec2(0.0, 1.0); + vec4 x12 = vec4(x0.x + c.x - i1.x, x0.y + c.x - i1.y, x0.x + c.z, x0.y + c.z); + + i = cultmath_snoise_mod289(i); + vec3 p = cultmath_snoise_permute( + cultmath_snoise_permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0)); + vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); + m *= m; + m *= m; + + vec3 x = 2.0 * fract(p * c.w) - 1.0; + vec3 h = abs(x) - 0.5; + vec3 ox = floor(x + 0.5); + vec3 a0 = x - ox; + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + + vec3 g = vec3( + a0.x * x0.x + h.x * x0.y, + a0.y * x12.x + h.y * x12.y, + a0.z * x12.z + h.z * x12.w); + return 130.0 * dot(m, g); +} + +// Analytic gradient of cultmath_snoise(vec3) (invariant 8), following webgl-noise +// src/noise3Dgrad.glsl (Ashima Arts / McEwan, MIT); same kernel, permutation and scale as +// cultmath_snoise(vec3) (stegu/webgl-noise 22434e04d7). See the C# math.snoise_grad comment for the +// derivation. Every local up through p0..p3 and x0..x3 is cultmath_snoise(vec3)'s own derivation +// verbatim. +vec4 cultmath_snoise_grad(vec3 value) +{ + vec2 c = vec2(1.0 / 6.0, 1.0 / 3.0); + vec3 i = floor(value + dot(value, c.yyy)); + vec3 x0 = value - i + dot(i, c.xxx); + vec3 g = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g; + vec3 i1 = min(g.xyz, l.zxy); + vec3 i2 = max(g.xyz, l.zxy); + vec3 x1 = x0 - i1 + c.xxx; + vec3 x2 = x0 - i2 + c.yyy; + vec3 x3 = x0 - 0.5; + + i = cultmath_snoise_mod289(i); + vec4 p = cultmath_snoise_permute(cultmath_snoise_permute(cultmath_snoise_permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + vec4(0.0, i1.x, i2.x, 1.0)); + + const float n_ = 0.142857142857; + vec3 ns = vec3(2.0 * n_, 0.5 * n_ - 1.0, n_); + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_); + vec4 x = x_ * ns.x + ns.yyyy; + vec4 y = y_ * ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4(x.xy, y.xy); + vec4 b1 = vec4(x.zw, y.zw); + vec4 s0 = floor(b0) * 2.0 + 1.0; + vec4 s1 = floor(b1) * 2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0, 0.0, 0.0, 0.0)); + vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; + vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww; + + vec3 p0 = vec3(a0.xy, h.x); + vec3 p1 = vec3(a0.zw, h.y); + vec3 p2 = vec3(a1.xy, h.z); + vec3 p3 = vec3(a1.zw, h.w); + vec4 norm = 1.79284291400159 - 0.85373472095314 * vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + vec4 m0 = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); + vec4 m2 = m0 * m0; + vec4 m3 = m2 * m0; + vec4 m4 = m2 * m2; + + vec4 px = vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)); + float value2 = 105.0 * dot(m4, px); + vec3 grad = -8.0 * m3.x * x0 * px.x + m4.x * p0 + + -8.0 * m3.y * x1 * px.y + m4.y * p1 + + -8.0 * m3.z * x2 * px.z + m4.z * p2 + + -8.0 * m3.w * x3 * px.w + m4.w * p3; + grad *= 105.0; + + return vec4(grad, value2); +} + +// Octave sum of cultmath_snoise_grad (invariant 8); see the C# math.fbm_grad comment for the +// per-octave frequency/amplitude derivation and why octaves is clamped. +vec4 cultmath_fbm_grad(vec3 p, int octaves, float lacunarity, float gain) +{ + octaves = clamp(octaves, 0, 16); + float amplitude = 1.0; + float frequency = 1.0; + float value = 0.0; + vec3 gradient = vec3(0.0, 0.0, 0.0); + for (int i = 0; i < octaves; i++) + { + vec4 n = cultmath_snoise_grad(p * frequency); + value += amplitude * n.w; + gradient += amplitude * frequency * n.xyz; + frequency *= lacunarity; + amplitude *= gain; + } + + return vec4(gradient, value); +} + +// Ridged multifractal noise (Musgrave, Texturing and Modeling, ch. 16); see the C# math.ridged_grad +// comment for the fold/sign derivation, the deliberate crease at n = 0, and why octaves is clamped. +vec4 cultmath_ridged_grad(vec3 p, int octaves, float lacunarity, float gain) +{ + octaves = clamp(octaves, 0, 16); + float amplitude = 1.0; + float frequency = 1.0; + float value = 0.0; + vec3 gradient = vec3(0.0, 0.0, 0.0); + for (int i = 0; i < octaves; i++) + { + vec4 n = cultmath_snoise_grad(p * frequency); + float s = sign(n.w); + value += amplitude * (1.0 - abs(n.w)); + gradient += -amplitude * frequency * s * n.xyz; + frequency *= lacunarity; + amplitude *= gain; + } + + return vec4(gradient, value); +} + +float cultmath_lengthsq(vec2 value) { return dot(value, value); } +float cultmath_lengthsq(vec3 value) { return dot(value, value); } +float cultmath_lengthsq(vec4 value) { return dot(value, value); } + +float cultmath_distance(vec2 left, vec2 right) { return length(left - right); } +float cultmath_distance(vec3 left, vec3 right) { return length(left - right); } +float cultmath_distance(vec4 left, vec4 right) { return length(left - right); } + +vec2 cultmath_reflect(vec2 incident, vec2 normal_value) +{ + return incident - 2.0 * dot(normal_value, incident) * normal_value; +} + +vec3 cultmath_reflect(vec3 incident, vec3 normal_value) +{ + return incident - 2.0 * dot(normal_value, incident) * normal_value; +} + +vec2 cultmath_rotate(vec2 value, float radians_value) +{ + float s = sin(radians_value); + float c = cos(radians_value); + return vec2(value.x * c - value.y * s, value.x * s + value.y * c); +} + +vec2 cultmath_rotate_degrees(vec2 value, float degrees_value) +{ + return cultmath_rotate(value, cultmath_radians(degrees_value)); +} + +float cultmath_csum(vec2 value) { return value.x + value.y; } +float cultmath_csum(vec3 value) { return value.x + value.y + value.z; } +float cultmath_csum(vec4 value) { return value.x + value.y + value.z + value.w; } + +float cultmath_decay(float source, float lambda_value, float dt) { return source * exp(-lambda_value * dt); } +vec2 cultmath_decay(vec2 source, float lambda_value, float dt) { return source * exp(-lambda_value * dt); } +vec3 cultmath_decay(vec3 source, float lambda_value, float dt) { return source * exp(-lambda_value * dt); } +vec4 cultmath_decay(vec4 source, float lambda_value, float dt) { return source * exp(-lambda_value * dt); } + +float cultmath_damp(float start, float end, float lambda_value, float dt) +{ + return cultmath_lerp(start, end, 1.0 - exp(-lambda_value * dt)); +} + +vec2 cultmath_damp(vec2 start, vec2 end, float lambda_value, float dt) +{ + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, vec2(amount, amount)); +} + +vec3 cultmath_damp(vec3 start, vec3 end, float lambda_value, float dt) +{ + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, vec3(amount, amount, amount)); +} + +vec4 cultmath_damp(vec4 start, vec4 end, float lambda_value, float dt) +{ + float amount = 1.0 - exp(-lambda_value * dt); + return cultmath_lerp(start, end, vec4(amount, amount, amount, amount)); +} + +float cultmath_catmullrom(float p0, float p1, float p2, float p3, float t) +{ + float t2 = t * t; + float t3 = t2 * t; + return 0.5 * ((2.0 * p1) + (p2 - p0) * t + (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t2 + (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t3); +} + +vec2 cultmath_catmullrom(vec2 p0, vec2 p1, vec2 p2, vec2 p3, float t) +{ + float t2 = t * t; + float t3 = t2 * t; + return 0.5 * ((2.0 * p1) + (p2 - p0) * t + (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t2 + (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t3); +} + +vec3 cultmath_catmullrom(vec3 p0, vec3 p1, vec3 p2, vec3 p3, float t) +{ + float t2 = t * t; + float t3 = t2 * t; + return 0.5 * ((2.0 * p1) + (p2 - p0) * t + (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t2 + (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t3); +} + +vec4 cultmath_catmullrom(vec4 p0, vec4 p1, vec4 p2, vec4 p3, float t) +{ + float t2 = t * t; + float t3 = t2 * t; + return 0.5 * ((2.0 * p1) + (p2 - p0) * t + (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t2 + (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t3); +} + +float cultmath_quadratic_bezier(float p0, float p1, float p2, float t) +{ + t = cultmath_saturate(t); + float inv = 1.0 - t; + return inv * inv * p0 + 2.0 * inv * t * p1 + t * t * p2; +} + +vec3 cultmath_quadratic_bezier(vec3 p0, vec3 p1, vec3 p2, float t) +{ + t = cultmath_saturate(t); + float inv = 1.0 - t; + return inv * inv * p0 + 2.0 * inv * t * p1 + t * t * p2; +} + +float cultmath_cubic_bezier(float p0, float p1, float p2, float p3, float t) +{ + t = cultmath_saturate(t); + float inv = 1.0 - t; + return inv * inv * inv * p0 + 3.0 * inv * inv * t * p1 + 3.0 * inv * t * t * p2 + t * t * t * p3; +} + +vec3 cultmath_cubic_bezier(vec3 p0, vec3 p1, vec3 p2, vec3 p3, float t) +{ + t = cultmath_saturate(t); + float inv = 1.0 - t; + return inv * inv * inv * p0 + 3.0 * inv * inv * t * p1 + 3.0 * inv * t * t * p2 + t * t * t * p3; +} + +float cultmath_hash(float value) { return cultmath_frac(sin(value) * 43758.5453); } +float cultmath_hash(vec2 value) { return cultmath_hash(dot(value, vec2(127.1, 311.7))); } +float cultmath_hash(vec3 value) { return cultmath_hash(dot(value, vec3(127.1, 311.7, 74.7))); } + +// PCG hashes (Jarzynski and Olano, JCGT 2020), written over scalar uints so CultMath's ivec3/ivec4 carry the bits. +uint cultmath_pcg(uint value) +{ + uint state = value * 747796405u + 2891336453u; + uint word = ((state >> int((state >> 28) + 4u)) ^ state) * 277803737u; + return (word >> 22) ^ word; +} + +ivec3 cultmath_pcg3d(ivec3 value) +{ + uint x = uint(value.x) * 1664525u + 1013904223u, y = uint(value.y) * 1664525u + 1013904223u, z = uint(value.z) * 1664525u + 1013904223u; + x += y * z; y += z * x; z += x * y; + x ^= x >> 16; y ^= y >> 16; z ^= z >> 16; + x += y * z; y += z * x; z += x * y; + return ivec3(int(x), int(y), int(z)); +} + +ivec3 cultmath_pcg3d(vec3 value) { return cultmath_pcg3d(ivec3(int(floatBitsToUint(value.x)), int(floatBitsToUint(value.y)), int(floatBitsToUint(value.z)))); } +ivec3 cultmath_pcg3d(vec2 value) { return cultmath_pcg3d(vec3(value, 0.0)); } + +ivec4 cultmath_pcg4d(ivec4 value) +{ + uint x = uint(value.x) * 1664525u + 1013904223u, y = uint(value.y) * 1664525u + 1013904223u; + uint z = uint(value.z) * 1664525u + 1013904223u, w = uint(value.w) * 1664525u + 1013904223u; + x += y * w; y += z * x; z += x * y; w += y * z; + x ^= x >> 16; y ^= y >> 16; z ^= z >> 16; w ^= w >> 16; + x += y * w; y += z * x; z += x * y; w += y * z; + return ivec4(int(x), int(y), int(z), int(w)); +} + +ivec4 cultmath_pcg4d(vec4 value) { return cultmath_pcg4d(ivec4(int(floatBitsToUint(value.x)), int(floatBitsToUint(value.y)), int(floatBitsToUint(value.z)), int(floatBitsToUint(value.w)))); } + +// Inigo Quilez, "smooth minimum": quadratic-polynomial smin carried to value-and-gradient form. See +// math.smin_grad's comment (math.cs) for why the gradient blend is exact, not an approximation. +vec4 cultmath_smin_grad(vec4 a, vec4 b, float k) +{ + float h = clamp(0.5 + 0.5 * (b.w - a.w) / k, 0.0, 1.0); + float value = mix(b.w, a.w, h) - k * h * (1.0 - h); + vec3 gradient = mix(b.xyz, a.xyz, h); + return vec4(gradient, value); +} + +// Invariant 8's one struct return shape (design.md, "HLSL Target: Source Transformations"): +// compared field by field and bit for bit against CultMath.CultCellular, same field order. +struct CultCellular +{ + vec4 nearest; + vec4 edge; + float id; +}; + +// Worley, "A Cellular Texture Basis Function" (SIGGRAPH 1996). See math.cellular's comment +// (math.cs) for the hashing, gradient, search-radius exactness proof, id source and +// degenerate-point conventions this mirrors exactly, including the 5x5x5 lower-bound prune. +CultCellular cultmath_cellular(vec3 p) +{ + vec3 cell = floor(p); + float f1 = 1.0e30; + float f2 = 1.0e30; + vec3 c1 = vec3(0.0, 0.0, 0.0); + vec3 c2 = vec3(0.0, 0.0, 0.0); + vec3 cellId = vec3(0.0, 0.0, 0.0); + + for (int dz = -2; dz <= 2; dz++) + { + float lz = max(0.0, abs(float(dz)) - 1.0); + for (int dy = -2; dy <= 2; dy++) + { + float ly = max(0.0, abs(float(dy)) - 1.0); + for (int dx = -2; dx <= 2; dx++) + { + float lx = max(0.0, abs(float(dx)) - 1.0); + float lowerBound = sqrt(lx * lx + ly * ly + lz * lz); + if (lowerBound >= f2) + continue; + + vec3 neighbor = cell + vec3(dx, dy, dz); + ivec3 hash = cultmath_pcg3d(ivec3(neighbor)); + vec3 jitter = vec3( + float(uint(hash.x) >> 8) * (1.0 / 16777216.0), + float(uint(hash.y) >> 8) * (1.0 / 16777216.0), + float(uint(hash.z) >> 8) * (1.0 / 16777216.0)); + vec3 feature = neighbor + jitter; + float d = cultmath_distance(p, feature); + + if (d < f1) + { + f2 = f1; c2 = c1; + f1 = d; c1 = feature; cellId = neighbor; + } + else if (d < f2) + { + f2 = d; c2 = feature; + } + } + } + } + + // F1 = 0 and F2 = 0 share the same degenerate-gradient guard; see math.cellular's comment + // (math.cs) for why F2 = 0 is reachable past roughly |p| = 2^23. + vec3 grad1 = f1 > 0.0 ? (p - c1) / f1 : vec3(0.0, 0.0, 0.0); + vec3 grad2 = f2 > 0.0 ? (p - c2) / f2 : vec3(0.0, 0.0, 0.0); + + // id comes from pcg4d over the winning cell's integer coordinate alone (same int-hashing rule + // as the jitter above), never from the pcg3d hash that produced its jitter (F4). + ivec4 idHash = cultmath_pcg4d(ivec4(ivec3(cellId), 0)); + + CultCellular result; + result.nearest = vec4(grad1, f1); + result.edge = vec4(grad2 - grad1, f2 - f1); + result.id = float(uint(idHash.w) >> 8) * (1.0 / 16777216.0); + return result; +} + + + + +// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of +// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. +// +// Phacelle noise. Copyright (c) 2025 Rune Skovbo Johansen (Shadertoy t3dyWl; MPL-2.0), read from the +// C# port PhacelleNoise in lpmitchell/AdvancedTerrainErosion, converted to burstable C# by Luke +// Mitchell (2026). Modified by GameCult: 3D cells, a caller-supplied stripe wave vector, an exact +// gradient and exact pruning. This file is an MPL-2.0 file; CultMath.hlsl, which includes it after +// its own definitions of CULTMATH_TAU and cultmath_pcg3d, is MIT (see THIRD-PARTY-NOTICES.md). + +// Invariant 8's struct return shape for cultmath_phacelle, compared field by field and bit for bit +// against CultMath.CultPhasor, same field order. +struct CultPhasor +{ + vec4 cos; + vec4 sin; +}; + +// Johansen's Phacelle noise on 3D cells. See math.phacelle's comment (math.Phacelle.cs) for the stripe wave +// vector, the weight, the normalization, the exact gradient and why the prune is exact. Mirrors +// the C# body operation for operation; the C#-only internal overload that switches the prune off +// has no shader twin. +CultPhasor cultmath_phacelle(vec3 p, vec3 side, float offset, float normalization) +{ + vec3 cell = floor(p); + vec3 local = p - cell; + float phaseOffset = offset * CULTMATH_TAU; + float sumW = 0.0; + float sumCos = 0.0; + float sumSin = 0.0; + vec3 gradW = vec3(0.0, 0.0, 0.0); + vec3 gradCos = vec3(0.0, 0.0, 0.0); + vec3 gradSin = vec3(0.0, 0.0, 0.0); + + for (int dz = -1; dz <= 2; dz++) + { + float gz = max(0.0, abs(local.z - float(dz)) - 0.5); + for (int dy = -1; dy <= 2; dy++) + { + float gy = max(0.0, abs(local.y - float(dy)) - 0.5); + for (int dx = -1; dx <= 2; dx++) + { + float gx = max(0.0, abs(local.x - float(dx)) - 0.5); + if (gx * gx + gy * gy + gz * gz >= 2.25) + continue; + + vec3 gridStep = vec3(dx, dy, dz); + ivec3 hash = cultmath_pcg3d(ivec3(cell + gridStep)); + vec3 jitter = vec3( + float(uint(hash.x) >> 8) * (1.0 / 16777216.0) - 0.5, + float(uint(hash.y) >> 8) * (1.0 / 16777216.0) - 0.5, + float(uint(hash.z) >> 8) * (1.0 / 16777216.0) - 0.5); + vec3 v = local - gridStep - jitter; + float falloff = exp(-2.0 * dot(v, v)); + float w = max(0.0, falloff - 0.01111); + vec3 dw = w > 0.0 ? (-4.0 * falloff) * v : vec3(0.0, 0.0, 0.0); + float phase = dot(v, side) + phaseOffset; + float c = cos(phase); + float s = sin(phase); + + sumW += w; + sumCos += w * c; + sumSin += w * s; + gradW += dw; + gradCos += dw * c - (w * s) * side; + gradSin += dw * s + (w * c) * side; + } + } + } + + float invW = 1.0 / sumW; + float rawCos = sumCos * invW; + float rawSin = sumSin * invW; + vec3 gradRawCos = (gradCos - rawCos * gradW) * invW; + vec3 gradRawSin = (gradSin - rawSin * gradW) * invW; + float rawLength = sqrt(rawCos * rawCos + rawSin * rawSin); + float floorLength = 1.0 - normalization; + + CultPhasor result; + if (rawLength > floorLength) + { + float outCos = rawCos / rawLength; + float outSin = rawSin / rawLength; + vec3 gradLength = (rawCos * gradRawCos + rawSin * gradRawSin) / rawLength; + result.cos = vec4((gradRawCos - outCos * gradLength) / rawLength, outCos); + result.sin = vec4((gradRawSin - outSin * gradLength) / rawLength, outSin); + } + else + { + result.cos = vec4(gradRawCos / floorLength, rawCos / floorLength); + result.sin = vec4(gradRawSin / floorLength, rawSin / floorLength); + } + + return result; +} + + + + + + +// Interval arithmetic over vec2(lo, hi), lo <= hi, both finite. Every cultmath_iv_* function returns +// an interval containing f(x) for every x in its input intervals, mirroring math.Interval.cs bit for +// bit; see that file and docs/design.md ("Intervals") for each op's enclosure and its ulp widening. +// Included by CultMath.hlsl after its own definitions of cultmath_smoothstep and cultmath_snoise. + +// Lipschitz constant of cultmath_snoise(vec3); provenance in math.Interval.cs (SNOISE_LIPSCHITZ). +const float CULTMATH_SNOISE_LIPSCHITZ = 10.099261; + +vec2 cultmath_iv_point(float value) { return vec2(value, value); } +vec2 cultmath_iv_add(vec2 a, vec2 b) { return vec2(a.x + b.x, a.y + b.y); } +vec2 cultmath_iv_sub(vec2 a, vec2 b) { return vec2(a.x - b.y, a.y - b.x); } +vec2 cultmath_iv_neg(vec2 a) { return vec2(-a.y, -a.x); } + +vec2 cultmath_iv_mul(vec2 a, vec2 b) +{ + float p0 = a.x * b.x; + float p1 = a.x * b.y; + float p2 = a.y * b.x; + float p3 = a.y * b.y; + return vec2(min(min(p0, p1), min(p2, p3)), max(max(p0, p1), max(p2, p3))); +} + +vec2 cultmath_iv_scale(vec2 a, float s) { return s >= 0.0 ? vec2(a.x * s, a.y * s) : vec2(a.y * s, a.x * s); } + +vec2 cultmath_iv_abs(vec2 a) +{ + if (a.x >= 0.0) + return a; + if (a.y <= 0.0) + return vec2(-a.y, -a.x); + return vec2(0.0, max(-a.x, a.y)); +} + +vec2 cultmath_iv_min(vec2 a, vec2 b) { return vec2(min(a.x, b.x), min(a.y, b.y)); } +vec2 cultmath_iv_max(vec2 a, vec2 b) { return vec2(max(a.x, b.x), max(a.y, b.y)); } + +vec2 cultmath_iv_sqr(vec2 a) +{ + float l = a.x * a.x; + float h = a.y * a.y; + if (a.x >= 0.0) + return vec2(l, h); + if (a.y <= 0.0) + return vec2(h, l); + return vec2(0.0, max(l, h)); +} + +vec2 cultmath_iv_sqrt(vec2 a) { return vec2(sqrt(max(a.x, 0.0)), sqrt(max(a.y, 0.0))); } + +// Widened by one ulp on each side: exp is not required to be correctly rounded. +vec2 cultmath_iv_exp(vec2 a) +{ + float lo = exp(a.x); + float hi = exp(a.y); + return vec2(lo > 0.0 ? uintBitsToFloat(floatBitsToUint(lo) - 1u) : 0.0, uintBitsToFloat(floatBitsToUint(hi) + 1u)); +} + +vec2 cultmath_iv_clamp(vec2 a, float minimum, float maximum) +{ + return vec2(cultmath_clamp(a.x, minimum, maximum), cultmath_clamp(a.y, minimum, maximum)); +} + +vec2 cultmath_iv_saturate(vec2 a) { return vec2(cultmath_saturate(a.x), cultmath_saturate(a.y)); } + +// The endpoints, ordered, widened by one ulp inside [0, 1]: the float32 evaluation of smoothstep is +// monotone only to within one ulp. +vec2 cultmath_iv_smoothstep(float minimum, float maximum, vec2 a) +{ + float s0 = cultmath_smoothstep(minimum, maximum, a.x); + float s1 = cultmath_smoothstep(minimum, maximum, a.y); + float lo = min(s0, s1); + float hi = max(s0, s1); + return vec2(lo > 0.0 ? uintBitsToFloat(floatBitsToUint(lo) - 1u) : 0.0, hi < 1.0 ? uintBitsToFloat(floatBitsToUint(hi) + 1u) : 1.0); +} + +// The natural interval extension of x + (y - x) * amount, which is how cultmath_lerp evaluates. +vec2 cultmath_iv_lerp(vec2 a, vec2 b, float amount) { return cultmath_iv_add(a, cultmath_iv_scale(cultmath_iv_sub(b, a), amount)); } + +// [n - L r, n + L r] intersected with [-1, 1], n = cultmath_snoise(centre). One snoise, value only. +vec2 cultmath_iv_snoise_ball(vec3 centre, float radius) +{ + float n = cultmath_snoise(centre); + float e = CULTMATH_SNOISE_LIPSCHITZ * radius; + return vec2(max(n - e, -1.0), min(n + e, 1.0)); +} + +// Octave sum of cultmath_iv_snoise_ball, compounding frequency and amplitude as the value-and-gradient fBm does. +vec2 cultmath_iv_fbm_ball(vec3 centre, float radius, int octaves, float lacunarity, float gain) +{ + octaves = clamp(octaves, 0, 16); + float amplitude = 1.0; + float frequency = 1.0; + vec2 sum = vec2(0.0, 0.0); + for (int i = 0; i < octaves; i++) + { + sum = cultmath_iv_add(sum, cultmath_iv_scale(cultmath_iv_snoise_ball(centre * frequency, radius * abs(frequency)), amplitude)); + frequency *= lacunarity; + amplitude *= gain; + } + + return sum; +} + + + + +float cultmath_value_noise(vec2 position) +{ + vec2 cell = floor(position); + vec2 local = cultmath_frac(position); + vec2 u = local * local * (vec2(3.0, 3.0) - vec2(2.0, 2.0) * local); + + float a = cultmath_hash(cell); + float b = cultmath_hash(cell + vec2(1.0, 0.0)); + float c = cultmath_hash(cell + vec2(0.0, 1.0)); + float d = cultmath_hash(cell + vec2(1.0, 1.0)); + + return cultmath_lerp(cultmath_lerp(a, b, u.x), cultmath_lerp(c, d, u.x), u.y); +} + +float cultmath_value_noise_bicubic(vec2 position) +{ + vec2 cell = floor(position); + vec2 local = cultmath_frac(position); + + float y0 = cultmath_catmullrom(cultmath_hash(cell + vec2(-1.0, -1.0)), cultmath_hash(cell + vec2(0.0, -1.0)), cultmath_hash(cell + vec2(1.0, -1.0)), cultmath_hash(cell + vec2(2.0, -1.0)), local.x); + float y1 = cultmath_catmullrom(cultmath_hash(cell + vec2(-1.0, 0.0)), cultmath_hash(cell + vec2(0.0, 0.0)), cultmath_hash(cell + vec2(1.0, 0.0)), cultmath_hash(cell + vec2(2.0, 0.0)), local.x); + float y2 = cultmath_catmullrom(cultmath_hash(cell + vec2(-1.0, 1.0)), cultmath_hash(cell + vec2(0.0, 1.0)), cultmath_hash(cell + vec2(1.0, 1.0)), cultmath_hash(cell + vec2(2.0, 1.0)), local.x); + float y3 = cultmath_catmullrom(cultmath_hash(cell + vec2(-1.0, 2.0)), cultmath_hash(cell + vec2(0.0, 2.0)), cultmath_hash(cell + vec2(1.0, 2.0)), cultmath_hash(cell + vec2(2.0, 2.0)), local.x); + + return cultmath_catmullrom(y0, y1, y2, y3, local.y); +} + +#endif diff --git a/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs b/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs new file mode 100644 index 00000000..950fb270 --- /dev/null +++ b/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs @@ -0,0 +1,130 @@ +using System.Text; +using System.Text.RegularExpressions; + +namespace CultMath.Tests; + +/// +/// The HLSL to GLSL ES 3.00 transformation that produces shaders/CultMath.glsl from +/// shaders/CultMath.hlsl. The steps below, in order, are the complete list documented in +/// docs/design.md (GLSL Target: Source Transformations). A dialect gap outside the list is fixed in the +/// HLSL, in the subset both languages share, never by a special case here; GlslMirrorTests fails on any +/// HLSL-only token that survives. +/// +internal static class GlslLowering +{ + internal const string ProvenanceLine = + "// Generated from shaders/CultMath.hlsl and its includes by GlslLowering " + + "(packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with " + + "CULTMATH_WRITE_GLSL=1 dotnet test --filter GlslMirrorTests."; + + /// + /// Lowers the HLSL text whose includes are already inlined in place (step 1: + /// , the C# mirror's own resolver). + /// + internal static string Lower(string hlsl) + { + var source = hlsl.ReplaceLineEndings("\n"); + + // 2. Include guards are dropped, and so are the functions taking Texture2D/SamplerState, exactly + // as the C# mirror drops them; the host shader samples its own textures. + source = Regex.Replace(source, @"(?m)^[ \t]*#(ifndef|define|endif)\b.*$", string.Empty); + source = Regex.Replace(source, @"(?ms)^\w+ \w+\([^)]*\b(Texture2D|SamplerState)\b[^)]*\)\s*\{.*?^\}[ \t]*$", string.Empty); + + // 3. Type names: floatN, intN, uintN and boolN become vecN, ivecN, uvecN and bvecN. + source = Regex.Replace(source, @"\bfloat([234])\b", "vec$1"); + source = Regex.Replace(source, @"\bint([234])\b", "ivec$1"); + source = Regex.Replace(source, @"\buint([234])\b", "uvec$1"); + source = Regex.Replace(source, @"\bbool([234])\b", "bvec$1"); + + // 4. File-scope `static const` becomes `const`. + source = Regex.Replace(source, @"(?m)^static const ", "const "); + + // 5. C-style casts (float)x, (int)x and (uint)x become constructor calls float(x), int(x) and + // uint(x). The operand is found by a balanced scanner, not a regex: (int)((state >> 28) + 4u) + // nests parentheses. + source = LowerCasts(source); + + // 6. Intrinsic renames: lerp -> mix, frac -> fract, rsqrt -> inversesqrt, asuint -> + // floatBitsToUint, asfloat -> uintBitsToFloat, and saturate(x) -> clamp(x, 0.0, 1.0). + // Identifier boundaries keep cultmath_lerp and the rest of the cultmath_ names intact. + source = Regex.Replace(source, @"\blerp\(", "mix("); + source = Regex.Replace(source, @"\bfrac\(", "fract("); + source = Regex.Replace(source, @"\brsqrt\(", "inversesqrt("); + source = Regex.Replace(source, @"\basuint\(", "floatBitsToUint("); + source = Regex.Replace(source, @"\basfloat\(", "uintBitsToFloat("); + source = LowerSaturate(source); + + // 7. Float literals pass through: HLSL's unsuffixed 0.5 and 1.0e30 are GLSL literals already. + + // 8. The CULTMATH_GLSL guard, and 9. the provenance line. + return ProvenanceLine + "\n#ifndef CULTMATH_GLSL\n#define CULTMATH_GLSL\n" + source.Trim('\n') + "\n\n#endif\n"; + } + + private static readonly Regex Cast = new(@"\((float|int|uint)\)"); + + private static string LowerCasts(string source) + { + for (var match = Cast.Match(source); match.Success; match = Cast.Match(source)) + { + var start = match.Index + match.Length; + var end = OperandEnd(source, start); + // A parenthesized operand lends its own parentheses to the constructor call. + var operand = source[start] == '(' && Balanced(source, start) == end ? source[(start + 1)..(end - 1)] : source[start..end]; + source = source[..match.Index] + match.Groups[1].Value + "(" + operand + ")" + source[end..]; + } + + return source; + } + + // The cast operand: a parenthesized group, or an identifier or number followed by any member + // accesses, calls and indexing. Anything else is outside the list and throws. + private static int OperandEnd(string source, int index) + { + if (index < source.Length && source[index] == '(') + return Balanced(source, index); + var token = Regex.Match(source[index..], @"^[A-Za-z_0-9]+"); + if (!token.Success) + throw new InvalidOperationException($"cast operand outside the lowering list at: {source.Substring(index, Math.Min(40, source.Length - index))}"); + index += token.Length; + while (index < source.Length) + { + if (source[index] == '(' || source[index] == '[') + index = Balanced(source, index); + else if (source[index] == '.' && index + 1 < source.Length && (char.IsLetter(source[index + 1]) || source[index + 1] == '_')) + index += 1 + Regex.Match(source[(index + 1)..], @"^[A-Za-z_0-9]+").Length; + else + break; + } + + return index; + } + + // The index one past the bracket that closes the one at `open`. + private static int Balanced(string source, int open) + { + var depth = 0; + for (var i = open; i < source.Length; i++) + { + if (source[i] is '(' or '[') + depth++; + else if (source[i] is ')' or ']' && --depth == 0) + return i + 1; + } + + throw new InvalidOperationException($"unbalanced bracket at {open}"); + } + + private static string LowerSaturate(string source) + { + var saturate = new Regex(@"\bsaturate\("); + for (var match = saturate.Match(source); match.Success; match = saturate.Match(source)) + { + var open = match.Index + match.Length - 1; + var close = Balanced(source, open); + var argument = source[(open + 1)..(close - 1)]; + source = source[..match.Index] + "clamp(" + argument + ", 0.0, 1.0)" + source[close..]; + } + + return source; + } +} diff --git a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs new file mode 100644 index 00000000..e31b69da --- /dev/null +++ b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs @@ -0,0 +1,221 @@ +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using CultMath; +using Xunit; + +namespace CultMath.Tests; + +/// +/// shaders/CultMath.glsl is derived: it is exactly of the committed HLSL, +/// no HLSL-only token survives the lowering, no public function is dropped except the texture samplers, +/// and the golden fixture a WebGL2 consumer evaluates is C#'s current output. With CULTMATH_WRITE_GLSL=1 +/// set, the first and last tests write the committed files before comparing, which is the one +/// regeneration path. +/// +public sealed class GlslMirrorTests +{ + private static bool Write => Environment.GetEnvironmentVariable("CULTMATH_WRITE_GLSL") == "1"; + + private static string Root => HlslSourceCompatibilityTests.FindCultMathRoot(); + + private static string GlslPath => Path.Combine(Root, "shaders", "CultMath.glsl"); + + private static string FixturePath => Path.Combine(Root, "tests", "CultMath.Tests", "fixtures", "glsl-parity.json"); + + private static string Hlsl => HlslSourceCompatibilityTests.ReadShaderSource(Root).ReplaceLineEndings("\n"); + + private static string Lowered => GlslLowering.Lower(HlslSourceCompatibilityTests.ReadShaderSource(Root)); + + [Fact] + public void CommittedGlslEqualsLowering() + { + var expected = Lowered; + if (Write) + File.WriteAllText(GlslPath, expected); + var committed = File.ReadAllText(GlslPath).ReplaceLineEndings("\n"); + Assert.True(committed == expected, "shaders/CultMath.glsl is not the lowering of the committed HLSL (regenerate with CULTMATH_WRITE_GLSL=1):\n" + UnifiedDiff(committed, expected)); + } + + // Identifier boundaries: cultmath_lerp is a CultMath function, lerp( is HLSL. + private static readonly Regex HlslOnly = new( + @"\b(float|u?int|bool)[234]\b|\blerp\(|\bfrac\(|\bsaturate\(|\brsqrt\(|\basuint\(|\basfloat\(|static const|\((float|int|uint)\)|Texture2D|SamplerState|#include|precision (high|medium|low)p"); + + [Fact] + public void NoHlslOnlyTokensSurvive() + { + var survivors = HlslOnly.Matches(Lowered).Select(m => m.Value).Distinct().ToArray(); + Assert.True(survivors.Length == 0, "HLSL-only tokens in the lowering: " + string.Join(", ", survivors)); + } + + private static readonly Regex Definition = new(@"(?m)^\w+\s+(cultmath_\w+)\s*\(([^)]*)\)"); + + [Fact] + public void EveryPublicFunctionIsLowered() + { + var hlsl = Definition.Matches(Hlsl).Where(m => !Regex.IsMatch(m.Groups[2].Value, @"\b(Texture2D|SamplerState)\b")) + .Select(m => m.Groups[1].Value).ToHashSet(); + var glsl = Definition.Matches(Lowered).Select(m => m.Groups[1].Value).ToHashSet(); + Assert.Contains("cultmath_snoise", glsl); + Assert.True(hlsl.SetEquals(glsl), "HLSL only: " + string.Join(", ", hlsl.Except(glsl)) + "; GLSL only: " + string.Join(", ", glsl.Except(hlsl))); + } + + [Fact] + public void GoldenFixtureMatchesCSharp() + { + var expected = GoldenFixture(); + if (Write) + { + Directory.CreateDirectory(Path.GetDirectoryName(FixturePath)!); + File.WriteAllText(FixturePath, expected); + } + + var committed = File.ReadAllText(FixturePath).ReplaceLineEndings("\n"); + Assert.True(committed == expected, "fixtures/glsl-parity.json is not C#'s current output (regenerate with CULTMATH_WRITE_GLSL=1):\n" + UnifiedDiff(committed, expected)); + } + + // ---- The golden fixture ---- + + private const int Seed = 20261002; + private const int Points = 256; + + private sealed record Family(string Glsl, string Tolerance, Func Arguments); + + private static float Uniform(System.Random r, float lo, float hi) => lo + (hi - lo) * r.NextSingle(); + private static float3 Point3(System.Random r) => new(Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f)); + private static int Bits(System.Random r) => r.Next(int.MinValue, int.MaxValue); + + private static float2 Interval(System.Random r) + { + var centre = Uniform(r, -20.0f, 20.0f); + var width = MathF.Pow(10.0f, Uniform(r, -4.0f, 1.0f)); + return new float2(centre - width * 0.5f, centre + width * 0.5f); + } + + // Every family the site's WebGL2 readback evaluates. pcg3d and pcg4d are integer-only and must match + // exactly; the float families are ulp-bounded, with the bound measured on the device by the consumer. + // iv_exp is left out: it calls the platform's exp, so its C# bits are not the same on every OS. + private static readonly Family[] Families = + { + new("float cultmath_snoise(vec3)", "ulp-bounded", r => new object[] { Point3(r) }), + new("float cultmath_snoise(vec2)", "ulp-bounded", r => new object[] { new float2(Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f)) }), + new("vec4 cultmath_snoise_grad(vec3)", "ulp-bounded", r => new object[] { Point3(r) }), + new("vec4 cultmath_fbm_grad(vec3, int, float, float)", "ulp-bounded", r => new object[] { Point3(r), 4, 2.0f, 0.5f }), + new("vec4 cultmath_ridged_grad(vec3, int, float, float)", "ulp-bounded", r => new object[] { Point3(r), 4, 2.0f, 0.5f }), + new("CultCellular cultmath_cellular(vec3)", "ulp-bounded", r => new object[] { Point3(r) }), + new("ivec3 cultmath_pcg3d(ivec3)", "exact", r => new object[] { new int3(Bits(r), Bits(r), Bits(r)) }), + new("ivec4 cultmath_pcg4d(ivec4)", "exact", r => new object[] { new int4(Bits(r), Bits(r), Bits(r), Bits(r)) }), + new("vec2 cultmath_iv_point(float)", "ulp-bounded", r => new object[] { Uniform(r, -20.0f, 20.0f) }), + new("vec2 cultmath_iv_add(vec2, vec2)", "ulp-bounded", r => new object[] { Interval(r), Interval(r) }), + new("vec2 cultmath_iv_sub(vec2, vec2)", "ulp-bounded", r => new object[] { Interval(r), Interval(r) }), + new("vec2 cultmath_iv_neg(vec2)", "ulp-bounded", r => new object[] { Interval(r) }), + new("vec2 cultmath_iv_mul(vec2, vec2)", "ulp-bounded", r => new object[] { Interval(r), Interval(r) }), + new("vec2 cultmath_iv_scale(vec2, float)", "ulp-bounded", r => new object[] { Interval(r), Uniform(r, -4.0f, 4.0f) }), + new("vec2 cultmath_iv_abs(vec2)", "ulp-bounded", r => new object[] { Interval(r) }), + new("vec2 cultmath_iv_min(vec2, vec2)", "ulp-bounded", r => new object[] { Interval(r), Interval(r) }), + new("vec2 cultmath_iv_max(vec2, vec2)", "ulp-bounded", r => new object[] { Interval(r), Interval(r) }), + new("vec2 cultmath_iv_sqr(vec2)", "ulp-bounded", r => new object[] { Interval(r) }), + new("vec2 cultmath_iv_sqrt(vec2)", "ulp-bounded", r => new object[] { Interval(r) }), + new("vec2 cultmath_iv_clamp(vec2, float, float)", "ulp-bounded", r => new object[] { Interval(r), Uniform(r, -25.0f, 0.0f), Uniform(r, 0.0f, 25.0f) }), + new("vec2 cultmath_iv_saturate(vec2)", "ulp-bounded", r => new object[] { Interval(r) }), + new("vec2 cultmath_iv_smoothstep(float, float, vec2)", "ulp-bounded", r => new object[] { Uniform(r, -25.0f, 0.0f), Uniform(r, 0.0f, 25.0f), Interval(r) }), + new("vec2 cultmath_iv_lerp(vec2, vec2, float)", "ulp-bounded", r => new object[] { Interval(r), Interval(r), Uniform(r, 0.0f, 1.0f) }), + new("vec2 cultmath_iv_snoise_ball(vec3, float)", "ulp-bounded", r => new object[] { Point3(r), Uniform(r, 0.001f, 2.0f) }), + new("vec2 cultmath_iv_fbm_ball(vec3, float, int, float, float)", "ulp-bounded", r => new object[] { Point3(r), Uniform(r, 0.001f, 2.0f), 4, 2.0f, 0.5f }), + }; + + private static string GoldenFixture() + { + var random = new System.Random(Seed); + var json = new StringBuilder(); + json.Append("{\n"); + json.Append(" \"generator\": \"GlslMirrorTests.GoldenFixtureMatchesCSharp (packages/cultmath/tests/CultMath.Tests); regenerate with CULTMATH_WRITE_GLSL=1\",\n"); + json.Append($" \"seed\": {Seed},\n"); + json.Append($" \"points\": {Points},\n"); + json.Append(" \"encoding\": \"each case is 'arguments -> result', every scalar a float32 or 32-bit integer bit pattern in hex, vectors and structs flattened in field order\",\n"); + json.Append(" \"functions\": [\n"); + for (var f = 0; f < Families.Length; f++) + { + var family = Families[f]; + var method = Resolve(family.Glsl); + json.Append(" {\n"); + json.Append($" \"glsl\": \"{family.Glsl}\",\n"); + json.Append($" \"tolerance\": \"{family.Tolerance}\",\n"); + json.Append(" \"cases\": [\n"); + for (var p = 0; p < Points; p++) + { + var arguments = family.Arguments(random); + var result = method.Invoke(null, arguments)!; + json.Append(" \"").Append(Hex(arguments)).Append(" -> ").Append(Hex(new[] { result })).Append('"'); + json.Append(p + 1 < Points ? ",\n" : "\n"); + } + + json.Append(" ]\n"); + json.Append(f + 1 < Families.Length ? " },\n" : " }\n"); + } + + json.Append(" ]\n}\n"); + return json.ToString(); + } + + private static readonly Dictionary GlslTypes = new() + { + ["float"] = typeof(float), ["int"] = typeof(int), ["vec2"] = typeof(float2), ["vec3"] = typeof(float3), + ["vec4"] = typeof(float4), ["ivec3"] = typeof(int3), ["ivec4"] = typeof(int4), + }; + + // The C# math method a GLSL signature names: cultmath_ dropped, parameter types mapped. + private static MethodInfo Resolve(string glsl) + { + var match = Regex.Match(glsl, @"^\w+ cultmath_(\w+)\(([^)]*)\)$"); + var types = match.Groups[2].Value.Split(", ").Select(t => GlslTypes[t]).ToArray(); + return typeof(math).GetMethod(match.Groups[1].Value, BindingFlags.Public | BindingFlags.Static, null, types, null) + ?? throw new InvalidOperationException("no C# math counterpart for " + glsl); + } + + private static string Hex(IEnumerable values) => string.Join(" ", values.SelectMany(Scalars).Select(v => v switch + { + float f => BitConverter.SingleToInt32Bits(f).ToString("x8"), + int i => i.ToString("x8"), + uint u => u.ToString("x8"), + _ => throw new InvalidOperationException(v.GetType().Name), + })); + + private static IEnumerable Scalars(object value) => value is float or int or uint + ? new[] { value } + : value.GetType().GetFields().Where(f => !f.IsStatic).SelectMany(f => Scalars(f.GetValue(value)!)); + + // ---- A small unified diff for the failure message ---- + + private static string UnifiedDiff(string before, string after) + { + var a = before.Split('\n'); + var b = after.Split('\n'); + if ((long)a.Length * b.Length > 4_000_000) + { + var first = Enumerable.Range(0, Math.Min(a.Length, b.Length)).FirstOrDefault(i => a[i] != b[i], Math.Min(a.Length, b.Length)); + return $"@@ first difference at line {first + 1} @@\n-{(first < a.Length ? a[first] : "")}\n+{(first < b.Length ? b[first] : "")}"; + } + + var lcs = new int[a.Length + 1, b.Length + 1]; + for (var i = a.Length - 1; i >= 0; i--) + for (var j = b.Length - 1; j >= 0; j--) + lcs[i, j] = a[i] == b[j] ? lcs[i + 1, j + 1] + 1 : Math.Max(lcs[i + 1, j], lcs[i, j + 1]); + + var lines = new List { "--- committed", "+++ lowering" }; + int x = 0, y = 0; + while (x < a.Length || y < b.Length) + { + if (x < a.Length && y < b.Length && a[x] == b[y]) { x++; y++; continue; } + lines.Add($"@@ -{x + 1} +{y + 1} @@"); + while (x < a.Length && (y >= b.Length || lcs[x + 1, y] >= lcs[x, y + 1]) && !(y < b.Length && a[x] == b[y])) + lines.Add("-" + a[x++]); + while (y < b.Length && (x >= a.Length || a[x] != b[y])) + lines.Add("+" + b[y++]); + if (lines.Count > 200) + break; + } + + return string.Join("\n", lines.Take(200)); + } +} diff --git a/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs b/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs index 07f026ff..d4d867f6 100644 --- a/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs @@ -374,7 +374,7 @@ public sealed class HlslSourceCompatibilityTests return (result.Success ? Assembly.Load(stream.ToArray()) : null, errors); } - private static string FindCultMathRoot() + internal static string FindCultMathRoot() { var directory = new DirectoryInfo(AppContext.BaseDirectory); while (directory is not null && !File.Exists(Path.Combine(directory.FullName, "packages", "cultmath", "shaders", "CultMath.hlsl"))) diff --git a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json new file mode 100644 index 00000000..433a41b6 --- /dev/null +++ b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json @@ -0,0 +1,6558 @@ +{ + "generator": "GlslMirrorTests.GoldenFixtureMatchesCSharp (packages/cultmath/tests/CultMath.Tests); regenerate with CULTMATH_WRITE_GLSL=1", + "seed": 20261002, + "points": 256, + "encoding": "each case is 'arguments -> result', every scalar a float32 or 32-bit integer bit pattern in hex, vectors and structs flattened in field order", + "functions": [ + { + "glsl": "float cultmath_snoise(vec3)", + "tolerance": "ulp-bounded", + "cases": [ + "c22f3f7f c241f026 42086d0e -> 3dc3bd61", + "c1eeb062 4191e9f8 41d64d04 -> 3e64f99c", + "40a655e0 c2139bac c1a6578d -> bf33f2f0", + "c247c91e 4244cbbc c11bf440 -> bd94807e", + "422464e0 40031be0 c16a63b4 -> bf03f8bf", + "c20850d4 42014d2a 41214454 -> bf253813", + "4203a578 c1e6e5c0 c230f931 -> 3cb3484b", + "c204e06e 4209e452 4113c120 -> bd526702", + "417aabb0 41e621a8 4107cc30 -> be069d04", + "41ee9a64 4131eed0 c16156a0 -> 3f16616a", + "c20c7df7 4124d148 41e464c4 -> 3e265e07", + "42309e74 c0d5b1f8 c118c484 -> bdbe1f67", + "423fbf28 c1a46420 4134cc04 -> beaaad1a", + "c1b93680 41163fc4 c235e117 -> bf0d1bf5", + "401b4390 c1911e9f c21e8891 -> bc24123d", + "c19c6a0a c0263960 c1fcc4a4 -> bcc0935f", + "41081530 c21add9e 41e81abc -> be4f9154", + "400bae30 c15f8b3c 420fe162 -> be88fbc4", + "41ee68d4 421da0f0 c203d478 -> 3c936ddf", + "c1c90676 408fe720 421de426 -> bebdf28e", + "c1fd9913 41cafb14 3ffd1420 -> 3ef38d65", + "422d29e2 420cb4da c131a258 -> 3e205d5a", + "413b423c 423bc66c c2251802 -> 3e5b5f8e", + "42339834 c2000ffb 4037f3a0 -> bf26310c", + "42431e16 40c205b8 413bf4b8 -> bf304da7", + "c243181a 4165ad60 40273a10 -> 3dd06d33", + "bf90e4e0 c16c8038 c195172a -> bcdb1b7b", + "c11eaa88 c1e57032 be26ae00 -> bf18743d", + "40dce7d0 414b1c94 c1cdd1be -> 3ebd3149", + "422a5100 c20e95f6 407a8d00 -> 3cb43550", + "c1d4b951 41b884c4 41c7a21c -> bd8d01af", + "41ae9db4 c225ceb7 42081266 -> 3ce24194", + "402364a0 4112295c c0544290 -> bd354345", + "41abc00c 4195f4d8 3eeafe80 -> 3efe97fd", + "c2214a50 4159b460 422d325c -> 3f1850f1", + "c1bee3b6 4059ccd0 41efb8f0 -> be9d1ff1", + "c1ce379b 41e49908 c1c794d2 -> bcef933c", + "4166dfa0 41d007d8 c1f5c61d -> 3e3d4f85", + "4101beec 41e1bc34 4081ad10 -> 3f281a82", + "c23f70b2 c159cc60 c1dc2499 -> 3e768a7a", + "c20d7fb7 4198ff20 42025c64 -> bd8aa5e9", + "4099f970 41abe9b8 c0a292e8 -> 3d69b9d6", + "41df5c5c c1b8618a c01f0910 -> bb368569", + "41ddd590 bfa9cc80 c2331efe -> bdd74923", + "c2304836 41db31a8 4183cb0c -> 3e5e637a", + "41f73cdc c19cc0a5 40f6d678 -> 3dd3615a", + "40d137a8 c199e256 c222d5a8 -> 3d3af417", + "c0b62ac0 4192d99c c16389e8 -> bf0f7369", + "c1a9198b 410fadc4 423c3e78 -> 3e7e9da4", + "40b5a0d0 c21120e1 c19d599f -> be566e46", + "c1a04678 3ed37d80 c1da0522 -> bee19a4a", + "c1ce63b9 40dafde0 42467adc -> bea14422", + "418ef334 409bb418 4228783c -> 3e7a446e", + "bfcf68a0 bfe40120 c1bc64da -> 3f150f10", + "c18c65ec c0606960 c1a0ca32 -> 3efec306", + "c1f156d8 41080074 42426b16 -> 3d39d23c", + "403376c0 41d9a298 c00c1950 -> be16c8bd", + "42395ad2 c08cbd30 c23181ec -> bec4aeca", + "c2133ca4 41a28b44 c244ed3d -> 3cae78f7", + "c04c1230 c1c0681a c215f694 -> bf15377b", + "c0090d50 c1de0bdb c2130fe4 -> 3ed331dc", + "c20343c1 c00f1fc0 42410aa2 -> bdbb4889", + "4201e394 41fdd34c c1eb8dce -> 3e149ec6", + "4186d554 c213db2c 41cc5254 -> 3e321ce0", + "41798a50 c2275dc6 42022ede -> 3d1ad50c", + "42035cc6 c2189262 c1e1193b -> 3d9529f7", + "c2307d61 c223e15a c24614ac -> bf05d482", + "4241d360 c23c8351 c157c8b4 -> 3cce7384", + "420214c4 c182fc1e c234c15e -> 3e8e9010", + "c20380a5 c21bf538 42121a1a -> be848e89", + "42436818 c1e78a85 c1a8aadf -> 3ecf0ef4", + "41ecdda0 c245ea71 c1c03436 -> 3debbc6e", + "c2132289 c20aef35 4242eb66 -> 3e3971fe", + "c192df75 c14a3bfc 41d62cec -> bf234d0f", + "41e063fc 420fccc2 4162b1e0 -> be2cf959", + "41b22a84 c19a0f80 c148e780 -> 3ee88a9c", + "c1d76194 c19d32d2 41076010 -> 3ec66de4", + "41e73ec0 c1110f04 c20452b3 -> 3d22da8e", + "c217e1e8 bf190d00 c1f50539 -> bef2d374", + "41d5c494 c1756218 c20f73ed -> 3e62c125", + "422dcc00 417590e8 41a5bdbc -> 3e97d5a9", + "c17f8404 41900520 4227ea18 -> 3f4ed95a", + "c0581670 420ff3c4 c2297356 -> 3e1d42d8", + "40d247c8 419cfe9c 423a5cd2 -> bea571f0", + "c1d6f008 41c1e4b0 41ad5b4c -> 3dc3100e", + "c1d25644 c1ecbd3d c2045013 -> bf1148ef", + "41b2c2b4 c21f007e c23c764f -> 3ec43235", + "418af104 42303024 41f54860 -> 3dbea278", + "c1af7bd4 c1f06e8d 41f0fd00 -> 3ee84840", + "c21802bc 418ca170 3f8f3880 -> be2581c7", + "c22d977f c1581348 41f4d2a4 -> 3f143b1f", + "420a5f54 c13ceeec 41b01990 -> 3b575500", + "c22fc869 c0bf6810 c20035ce -> 3f3d8497", + "41b184c4 c1c2d2af c0a7dc28 -> 3e87a525", + "c1a18d16 41840c7c 412b9d20 -> 3efdab43", + "413decc8 40b8bb20 418593c8 -> bf0054c1", + "c09802c8 4219493a c1a80b2c -> bea2a0b0", + "c23e3289 c2367f12 c1ccb010 -> 3f3112f1", + "c21afd9e c1bf5904 41aa6824 -> bebdd8e1", + "42203aae c2302317 bff8c520 -> be1d86e6", + "c2189468 c175faac c1fcb9e7 -> bf1e0747", + "40d09738 bcfc4800 c186f7c0 -> be61a0b7", + "c2080c7f c1375d60 c15f47b0 -> 3e2e23fd", + "4246a0de c20162b9 41d31cc8 -> bf372c50", + "4243e5bc c2476107 420a68da -> bec8db55", + "410214dc c14703cc c1b3ac31 -> bdcf84e8", + "c1f08630 41818dc8 4162c558 -> bf26bdaa", + "c2124b66 4185fb38 41ea0efc -> be556ab9", + "c1df014c c23764f5 c18f0b80 -> bee4e6d0", + "40c60ac8 41bab9e4 c2178f38 -> 3eec0065", + "c245274b c2080317 c13f27ac -> bf230ddf", + "419f20b4 41255b28 42241554 -> bbe18975", + "c1bd3d23 41ba4d1c c205da3a -> bed2487a", + "c1b339ad c083c280 c2031144 -> 3e279977", + "c19ac85c c08d09a8 41a557e4 -> 3dd624a3", + "4026c060 c23a1844 c2371e0a -> 3def8300", + "c1230388 4047d2b0 421a1472 -> be0369ab", + "c0c7aea8 41a0fb8c c123a7ec -> be62f324", + "42078882 4241b700 418f0770 -> 3f02a2cb", + "c12d91c8 c179b1cc c085d498 -> bb99d007", + "c243f620 411cc8a0 41732ed8 -> beb86cad", + "c1d08568 4243c828 c2415fa2 -> 3da788fb", + "c13a9ec8 c1a75540 c122df40 -> be0be87f", + "422e5386 c191b872 416461f8 -> 3da00b8a", + "c21bfbde 422959be c1ed8199 -> bda65fc5", + "c043d660 420318c8 c1e6c25d -> be8915af", + "c225a474 419c26a8 c2454cb1 -> 3f489f5e", + "c1b0cf6c c2067dc5 c1ee4073 -> bdd8fe5d", + "c1d34754 40de7448 c08406e8 -> be4347b6", + "42412010 421007da 413e7f28 -> bebd5e17", + "c1d6dccb 4214c5e0 c131b3f8 -> bf632789", + "41a5c0b4 c1bb4d6d 42105588 -> bd3c7d7e", + "40023050 c22d217a c05695d0 -> 3ec3b678", + "41981728 c20eec48 41c324b8 -> bd4c1408", + "41666718 c0714680 c1e54d38 -> be80eca2", + "c1ce081a c189f3ec 41de480c -> 3dda780c", + "c1f4525d c150e864 c20961c8 -> 3dbbbb45", + "c051b190 c19b7ffc 416e00e0 -> 3f2c3f71", + "c09b6f18 41b8e32c c0d28090 -> 3e1034e0", + "c0a0a080 c2469f0a c1001984 -> 3f031311", + "40b909d0 c11f1f08 c0dd93c8 -> bf1a07b5", + "41df50cc 41a383d8 c0ad10c8 -> 3e309c9a", + "c1c4f507 c11b70e0 417c01d8 -> 3e39459c", + "c17c5954 42339f94 41d07484 -> 3d5dc230", + "41c41060 c126c024 40a7fcd8 -> bed28bbc", + "c1bdbe19 4157fa10 41a12d44 -> 3ca546f1", + "42438662 42456064 c1ce6f00 -> bebdf519", + "4190b638 41e6927c bf6f8380 -> beeb58a5", + "c06fe6e0 41d35964 40d42ef0 -> 3df90763", + "41c02594 c1c36388 405e7b30 -> bdcb29db", + "c0ead328 c22bc8eb c22e8270 -> becb5b60", + "c23562fc c21315a6 41c1b6f4 -> 3f23e147", + "c1957657 4211f160 41ce5358 -> 3ed499af", + "41d5f6fc 42437676 4229e240 -> 3f2ecabf", + "c217dc6e 420ced26 c0fecd68 -> 3dea1f49", + "c1267028 41b1b970 4223f00a -> 3e25100e", + "c2217f62 c1f91dad c2218cee -> 3eb9c032", + "41ba3294 c079a720 c243ff6d -> 3f4798d8", + "c200cee2 4216c61e 4133bbfc -> 3e9eaf39", + "42300b96 c192b25a 42301538 -> 3e5f5cb7", + "4217d808 3fae5680 c20d2a73 -> 3e14d2fa", + "c216e73e 42264410 42176880 -> bdf27620", + "419d7964 419ed658 c1bd34c4 -> be1d1c2c", + "41f84840 4233dc20 41d81a4c -> be10b521", + "42316cf8 c1deea37 c2461614 -> bc9bea4d", + "c1923382 40c1bc48 422e5c18 -> 3e84ca45", + "c22be462 c22d6263 c2373005 -> be1d3fcb", + "417a5750 416648b0 c22d22ee -> bdace4f1", + "c0c45af0 419b18a0 412f4620 -> beccadca", + "c2328304 42136be6 c1c3b78a -> 3e0f493a", + "c2141386 c14b1b04 409a5468 -> 3cb81859", + "41fe28e4 421b2376 c01fc3c0 -> be7f8af9", + "41de1968 42470ad0 422ea916 -> 3dc1cc72", + "4085eea0 419f4e88 c23e8e74 -> 3e661e77", + "416a29b0 c1ab4706 c1d0d5ec -> bed8d156", + "c18b3426 41e758a4 c1d04aae -> 3e17f846", + "c245e958 42104ae0 c192e2d7 -> be27faaa", + "418d25d0 4213eff8 c1c7ed94 -> bd45b2b6", + "421f4540 c1dd7b97 4213e088 -> 3d448b06", + "c2280786 41934840 c1de9080 -> 3db85c7b", + "c1b8d212 4164fed0 4203ff46 -> 3f050672", + "c244be9e 41906f4c 40f51708 -> be6e773a", + "c1de7ad1 c215a77b c1853122 -> 3ec665f6", + "403e6280 407d98b0 40c965d0 -> be52d108", + "4247b302 4035dca0 c15426a0 -> 3f30ba22", + "c240a192 c243f49a c1632948 -> bd1e9e17", + "42034808 c21af14b 4221dffe -> 3eaab8a1", + "c1502484 c23499ab c244defa -> 3eadb8c5", + "422f95a6 c0953368 3ea4a380 -> be87ed8a", + "c1a17d52 4227cf32 4183c280 -> be6a6a26", + "41288cec 419e2874 c195329f -> 3cc2f024", + "41abe2ac c1b5b247 c2319871 -> bf434d3f", + "c1f51b74 415d2430 41289360 -> 3c4db14a", + "4181e454 c21e5cab 4182a79c -> 3ee59531", + "4222733a c01cf810 c18f1d56 -> bd03bc6b", + "41cac3b8 418dbfcc c17db74c -> be3da819", + "421912de 4217e6d0 c1e59262 -> bf2789f9", + "3f955b60 c1c69f1b 40e4ab58 -> be5011f2", + "c192507a 421fa01a 41176584 -> be8ee03b", + "4200de40 c22c5444 c1da43db -> be33f83b", + "c22aa668 42298142 c1eaed5d -> 3dd35a8b", + "41870c5c 4229c2ec 4208c552 -> bd80259c", + "c1c873ed c1ac7ca9 c1c39226 -> 3cfe207b", + "c196e26c 4201ec28 c14cf694 -> be9d809f", + "41ca21ac c205aa22 c24494a0 -> 3e2577fc", + "c1cee7a3 c067c5b0 40e9aea8 -> 3daaebc9", + "41955f60 c1fb9868 41dcf35c -> 3dbe0a21", + "c20748e6 c107461c c238179d -> be07ba0d", + "c09aac70 c222879e c0ace1c0 -> 3e5f2fc2", + "41c1a28c c12399b4 c149e4f0 -> be9676e1", + "c0771d10 c14dafe8 40dcea80 -> bdf24cc3", + "c142e4f0 410e6244 c1ffbbd7 -> bf700ceb", + "c089ac18 c1d225e9 40a36ca0 -> 3eb80f2f", + "c0053fc0 3ecde880 c12b8718 -> 3eed151c", + "c225a4c0 40e420a0 c2320558 -> 3e425f48", + "42087474 41cf3408 c225a56c -> 3e5609fe", + "40c95050 c229b46c c0cf1c60 -> bddf812a", + "c23f5c75 c211d171 421977f0 -> 3f5929d9", + "c09cdcd8 4224a27e 3f54b180 -> b9d5e094", + "c2055f12 c1e24888 42044a8a -> bedd9fbe", + "c12679dc 3f3d3140 421aa818 -> beaf9a4c", + "4218b028 420c009c c0953ef0 -> bf3767c9", + "41f24a18 c148d7b8 40f5ea68 -> 3ddbc89d", + "4203494c 41e38364 c1dad2ce -> bf50e8ed", + "c23f37be c1e9f8a5 41912ff4 -> bd1fbf7e", + "c13a9230 c229a426 4209aa66 -> 3eee46a1", + "4241edba 4130d7f8 c1844344 -> 3dc93e47", + "c15fdb30 c20058c6 c18e6402 -> 3f4178ab", + "422f6a50 c0c0aae8 c1d33512 -> 3ec9729a", + "41944ac0 422ae260 418dec28 -> 3e1554d9", + "41899e9c c1a7ace4 c23feeb0 -> bd993dcd", + "41b04614 c226b585 4246a70c -> 3c3cd44f", + "3f1d8880 c1eca9d2 41b106f0 -> beea0162", + "41228a1c c238b097 c138c03c -> bdcd7eac", + "3f675180 41bbc17c c1a6ec3c -> be18a787", + "c1e8f44b 4247db4a 422b2ae2 -> 3deb7931", + "c1ee4015 c22cf70f 420646a4 -> 3c5f9f1c", + "418350c4 c1fe9997 412a96f8 -> 3ddbd2b8", + "bec9ea00 c239a7ab c18964ec -> bec175c3", + "40ced0c8 423145da c10fa820 -> 3ec9e0e7", + "c1e21aa9 c2190054 c0a8c268 -> be69f384", + "421fc73a c2098602 bf19f700 -> 3e7d371d", + "c1eaf56d c19eb58f c21646ce -> 3dc16373", + "4193e1dc 4216e552 4214b0c2 -> 3daefa73", + "c216d912 c13ad330 40e734a0 -> bf1cee17", + "42340e6c 420c6bec c0b1cc28 -> 3eeadd22", + "c23bbbe3 41b7c8e8 c0bf8530 -> bd953604", + "c1998ad6 bfd752c0 420fd96e -> 3eb6b020", + "4208af6e c244d914 c21c89a6 -> 3eb65277", + "c10a51bc c1dc9247 c2350dda -> 3e6f462d", + "4186b300 42309c08 c1bf3583 -> be260dfe", + "c1972500 c1394094 42284fbc -> bef0df4a", + "422ee83e 412f5834 40fb3600 -> 3f16fa11", + "41ede37c c246ff6f 419e6c20 -> be8961d3", + "41f2e360 3fdde0c0 c1f7b8c3 -> 3d118acb", + "423995e2 40840ba0 41eed000 -> bede1533" + ] + }, + { + "glsl": "float cultmath_snoise(vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c23a40d6 4092ee00 -> 3ecf1315", + "c1fc2730 42198710 -> bd00e19e", + "40595fc0 c1e53d38 -> be186764", + "423c069e 4223b816 -> 3f23739c", + "4156e904 410c3910 -> bebe7508", + "c230e835 c20cacee -> bb67bb5f", + "c13778d8 41ea3370 -> 3eba9904", + "c22911a4 c22938f4 -> 3e9f5ae5", + "c2416893 422e494a -> beaba2d8", + "41312e14 41f972d8 -> 3f4031e0", + "42479b5a 41725b60 -> 3f118d48", + "c242d9d3 c1ced440 -> bec4f21a", + "42125fba c1d55b43 -> bf1458c2", + "41b5c7c8 41c1b290 -> 3e98bad3", + "3ee47300 423a5664 -> 3f579d68", + "41876ba0 4217198c -> 3ef8dadf", + "c055a870 c197e34b -> beb1da3b", + "c1414e64 418eb238 -> 3e97fa39", + "421105be 41e3a4e4 -> 3ef4ae49", + "c113e7d0 c234fc26 -> 3f174bfd", + "c17e6478 c02083b0 -> 3ea4a4ba", + "c1aad508 c1709810 -> bf312920", + "40a5f208 c0df6288 -> bf19d55e", + "c10cc02c c1e8324e -> 3e4f6230", + "41411ed0 41b55548 -> 3e16b891", + "3daf3200 c1c44b56 -> be11ec0a", + "c16ad68c 41b7900c -> 3ea8dbb1", + "41ef994c c13b5eb8 -> 3e7e8521", + "40537930 42315688 -> 3f36d7fa", + "c240d8aa c19f78c5 -> 3f200ead", + "bfb05000 c1d9a553 -> be56e19f", + "c118433c 4186c7bc -> bea269de", + "42275874 c20001c2 -> baca3050", + "41915b30 c229ec90 -> bc7e25c3", + "c10a4abc c121ab00 -> bf1b4e85", + "c1e47d65 c1d67609 -> bf3ba9de", + "403433d0 40ca3d58 -> 3ec85501", + "c03ad740 401a3960 -> 3ecf425e", + "c157fa90 41829864 -> 3ecccb28", + "4197af3c c0cd9fa8 -> 3e5566f6", + "4200826a 3fdfa160 -> bd24f929", + "c2176e6d 41de3c80 -> 3f25752c", + "c0601350 c1089214 -> 3e434b48", + "401cf300 41bdbae8 -> bf00dd52", + "3f883680 42468414 -> 3f0be9f2", + "c20dde77 4227af36 -> 3f4195d7", + "41d55638 c21d3d91 -> 3c7097ef", + "40c432d0 c21ac675 -> bcd9e766", + "c22bf76d 413cc678 -> be93a671", + "c0dbf3c8 c14cfff4 -> be926a38", + "41c6cc2c c18286f8 -> bf0dba64", + "41ecf310 c1de9b16 -> 3f23e003", + "3f9d2ac0 c1b8dac4 -> bed1e9e5", + "41b52e2c 41e80568 -> bf21f444", + "c1c1150e c1b3addf -> bef6ed6c", + "c240d909 4213eb62 -> bf5dcf5a", + "c1c5022e 41036d2c -> 3d87f9ee", + "c003ecd0 423b8076 -> 3f2ffe30", + "c21d643c 414b43c0 -> 3e8b1660", + "c1ed35da 3ebe7d00 -> 3ec0a748", + "4178bc38 4231d024 -> bd056a43", + "40ce8de0 c1045b10 -> bf0c1e05", + "c1c51893 c1a3dbd1 -> 3e46996d", + "c05e6210 c0fbf988 -> 3f2a90e7", + "c2473eb0 c1639bfc -> bea66771", + "c09327f0 41c59f7c -> bf3be812", + "c1d66aac c191d0c9 -> 3dfb1150", + "4195cbe8 bfc74340 -> 3f2c9e6a", + "41b10708 421fdf1e -> bf679a28", + "c1bb962b c1f327a6 -> 3d8b9a0c", + "419688c8 41bb98f8 -> 3d67ed41", + "c0098050 c1d3cebb -> 3eb105cf", + "423f5d1e c1b393b3 -> 3f2d236c", + "41846098 c1fc605c -> 3e6cc5bf", + "414c04f0 41141794 -> beb85357", + "c2456239 c0b642e0 -> 3d9831b5", + "c108cdd4 422b048e -> be2458ee", + "41ad21e8 41f32be4 -> 3df830bf", + "41d9d590 c141bed4 -> 3eb8d354", + "423b3ebe c1e25182 -> 3ee49774", + "41f2f180 c19bd36e -> 3f396f40", + "41e682c4 42205c78 -> 3f4fba2c", + "42008e10 c1b7518e -> 3ce9a76d", + "415c82e0 422e674e -> 3e9c4579", + "421df556 4245fb4c -> 3df5320a", + "c1ca061c c1ea86b5 -> bf3c39a3", + "c15d8fec c245071a -> bebf97b8", + "41fc7130 42286292 -> be894a35", + "c0597d60 c1888dcc -> bf6f1644", + "c0c39f10 423f3d90 -> 3e4ae246", + "414f872c c1af6be6 -> bf5a368f", + "41eaff28 c1111250 -> 3e187bcf", + "c16e1318 c2439ca1 -> 3f05d625", + "c185f99a c19c73c7 -> bf29b3a8", + "41221a9c 42195002 -> bf1d43b6", + "41a9b63c c17c3320 -> 3f302997", + "422ca05e c234a254 -> bccd6744", + "c12c3248 c13b4798 -> be411a10", + "42328b1a 40f85c10 -> beaca107", + "c109d5b0 41a60bc8 -> bc4b6545", + "415c55bc 41b79200 -> 3ee032ce", + "c1a84b07 415417bc -> be813be1", + "c177dc34 41efc244 -> bf23b34f", + "c2276462 c114b16c -> 3ef6f9cc", + "c21b3409 41ec5cc4 -> 3eafad51", + "c181a470 c0b67290 -> 3ea8acb2", + "4230042c 4244012e -> be33cc5a", + "410bd5d4 4012eb20 -> 3e38e6af", + "3f92d6a0 c141e824 -> bcca46ae", + "409f09e8 41f85560 -> beff379d", + "422f5406 c1854ac8 -> bef6232a", + "c1843eb4 c2435aad -> be6bdad4", + "c1adbfa2 422209ba -> 3ee4dae7", + "c1b3c775 c195834d -> 3ecec9a7", + "413815e0 c0d7ac20 -> bf04b4ba", + "423dd778 421b5ca8 -> 3f365159", + "42262e86 41b90c74 -> bdd85d24", + "c17f5f78 422018ca -> 3f01f866", + "42446f90 c207865b -> bf288195", + "c22e4d87 40a4d0c8 -> bf488e4a", + "422bc7c0 422a2f8e -> bf24cfd7", + "c1f60bb4 41f4b08c -> bef0f54b", + "409111d8 c1b8ad20 -> 3f2fef6f", + "c11c43d4 42309f32 -> bdb7abbc", + "c0797c90 4213c4bc -> 3f2153a0", + "42149764 40d82920 -> 3f3c0210", + "c23cd5bb 41257f8c -> bf1d720c", + "41d763bc c19c8a59 -> 3ee81d7c", + "c1285e98 c1b195ad -> bbe505bf", + "c1706904 c0c00640 -> 3f3dbb4b", + "401c4dc0 41d6ba88 -> bedb1c02", + "41e99c5c 418f82f4 -> bf262d83", + "420056ea c0a17700 -> 3f17b0fa", + "40303290 c1e90419 -> bf1ecec2", + "416f6438 4195b954 -> 3f267c7d", + "404bf220 c16f8bc0 -> bf025a95", + "c1945905 42474724 -> 3e6ddd5c", + "421862f0 c242db87 -> 3e8cf21a", + "c20f9f8b 40388600 -> bf48b7fa", + "c057ce90 c2428941 -> befdfefc", + "3e8d5780 c18505d6 -> bdceedeb", + "420cd622 41c48178 -> bf13d89d", + "40c398c0 c114b6ac -> bf383e28", + "42103262 c19662bb -> 3e2632af", + "4238d45a c23992b2 -> 3e70e2aa", + "3f0c1c00 41aa74cc -> bf3d538b", + "41f927cc 4146cd04 -> 3ee49a39", + "c23d2ac3 c2079584 -> bf743bfe", + "c2129e9f 3fa71580 -> 3f165a80", + "4242015c c221aee5 -> bf14b7be", + "41c14c90 c1f51dd1 -> 3e803abf", + "c1a673b6 41db171c -> 3ed25651", + "c181f4cc 4007a550 -> 3f244144", + "c1c59cb5 c23c1ce0 -> 3f3e27a6", + "41b1f9e8 41cd1acc -> bf2cc582", + "c206a5a2 42125ffa -> 3f1cd2e7", + "41f96424 c1832200 -> 3ea41e15", + "422ee488 c1f77072 -> 3eb62be5", + "42268722 c235728f -> 3f22e8ce", + "c218b19d c109edb0 -> bf175de1", + "410e7af4 c1e396f6 -> 3dccf526", + "c1caacce 4135aefc -> 3ed93df5", + "c1fea78c 41ff0978 -> 3f1fc63b", + "407892b0 4198407c -> 3eefde77", + "423c71e8 41aff0e4 -> bf24a2d0", + "4217c318 414c9f28 -> beb4e35e", + "408c3828 c14f3810 -> 3c4c7c54", + "c1b65f13 c198acd0 -> 3e811444", + "c2374910 c228b56b -> 3ea4c230", + "c1131378 c238073d -> 3f4b6b51", + "c20a5f50 42044f42 -> 3ebbbc7b", + "410f46bc c1eb7217 -> bf13bd7a", + "421512ee 415f41d4 -> 3e18f640", + "42208854 c01db1a0 -> 3f148866", + "41959d70 42068d76 -> be4960d2", + "c1cc394c c2252c10 -> 3e871fa1", + "c12856dc 40e3e640 -> 3f058470", + "3f2c9780 40271c30 -> bd6c52ba", + "4232c77e 418eb4cc -> beacb0ec", + "41137d4c 3ff01c00 -> bf517658", + "4240f12a 40c88b40 -> 3f231185", + "c2308ec8 c246fb80 -> 3ed11cb1", + "4216ca4e 40632950 -> 3f337bd2", + "c18e4e12 c0bbff58 -> bf368e3f", + "c22e6177 414cebc4 -> 3eee0400", + "c20c6f29 42073c8c -> 3ee84c2d", + "415d4940 c228aa60 -> bf1870d9", + "c1c03839 41ce9ef4 -> bf0d7e6d", + "41498b58 c2379d5c -> bef8f48c", + "41c0b19c 4086de20 -> bf3795bc", + "4226fc66 c22e9bbb -> 3f17fb29", + "c246ae7b c2121b8e -> 3ec697fc", + "c01eae70 41e9de50 -> 3f48f065", + "c1d58500 423d0a3c -> 3ee1cbb3", + "42117f9e 41c4bd68 -> bf590c72", + "c15c7798 c15a8dd8 -> bee2db5d", + "bfb297e0 421bba42 -> 3ef3c3ca", + "c230f866 41123d24 -> 3f2fca18", + "41d9bc18 410b34b8 -> 3efe6978", + "c18906b2 c1823f4a -> bf2c8121", + "c1921103 c07f7c00 -> 3ec56140", + "c10de68c c2306c39 -> bf215d6b", + "4195f93c c11564cc -> be8a0d21", + "c0a3f2f8 c192d6ac -> bf010f75", + "c196ce38 41c6c5c4 -> 3f0ec591", + "42200eee 422264da -> be38b652", + "422f0196 c233fc71 -> bdac16c1", + "412211e4 42278ce6 -> 3f32fd53", + "40bdff20 42298cc4 -> 3f3e88f7", + "402ef670 c22624da -> 3e7cf7a1", + "c19e15d6 c170c514 -> 3df4b1c8", + "40f803b0 c1918055 -> be85acca", + "c1bb4e51 41e4689c -> bf2b4784", + "c16cbad0 41c73018 -> bea9b72b", + "c23fb1fa 4186a938 -> 3e8b1460", + "42427170 c2386a59 -> 3f47ce00", + "41a9cbfc c11a1e2c -> 3eaec4b6", + "c1dc3775 c0885ed0 -> bf2e98ec", + "417377a0 4231bdbe -> 3e885bcc", + "c0a8c160 c22c91b4 -> bec2d17d", + "c17a49e0 4226a8d6 -> 3f11cdbc", + "4180e2b0 c219e344 -> 3baa372b", + "420a4fc6 c08c1600 -> bf388e6c", + "c0ed2868 c0ccc270 -> 3f480896", + "c1a9946d c210854b -> bf28d264", + "c23b309c 420b5146 -> be85a38f", + "c2302239 c1ccbcff -> bf1a2a1d", + "c23a14ba 423b28c4 -> 3f3a2b5c", + "421907ca c222b979 -> 3ef316e0", + "41ea75e0 4220c852 -> bf2f7c3f", + "c2322a80 419fd328 -> 3f15c168", + "c1a372b8 41651120 -> 3b2c91af", + "41d1e2e4 42107946 -> 3e57580f", + "c1f50248 40589210 -> beff7102", + "42021f4a c20e6fac -> be909220", + "c1baa207 41380898 -> bee5bd3e", + "c015b0f0 c083f728 -> beb11933", + "41c0db3c c136cf08 -> 3f1cda6b", + "4196bac4 c071c460 -> beba750d", + "c030ff10 41f7b730 -> bf333c46", + "c1609a98 4226699a -> bf205072", + "c079dbe0 4218d350 -> 3f0a3f18", + "415a14dc c210dfd6 -> 3e9c1475", + "423fb7e0 c04bb830 -> 3f278e04", + "c151cb44 c1c288fd -> bd938f0b", + "40ef62e8 40bcbb08 -> 3ea5c06c", + "c20b7d33 4090fc10 -> 3e77ff64", + "c2426734 41660fd0 -> 3ef7e0bb", + "414188cc c240d2f0 -> 3f163b0c", + "c16b52d8 4241d680 -> be816f9c", + "c1be0338 421cd1d2 -> 3f01d8c5", + "413121a0 c20e5a8a -> bebcd718", + "4214cbb8 c104cb08 -> bdf89065", + "c14d4eac 412172b0 -> 3f11920c", + "3e99f180 416e7c20 -> 3e5dc77d", + "c1b0693d c0fedf88 -> be74dc4d" + ] + }, + { + "glsl": "vec4 cultmath_snoise_grad(vec3)", + "tolerance": "ulp-bounded", + "cases": [ + "414159e0 42415f5a 408777c0 -> bfc283b9 be845996 403c134a be8fa30e", + "c210941b c1d0f15a c10a32b4 -> 3f8879d3 3ece0782 bf9417e9 bebaf6fe", + "c24540ef 41474524 4218c166 -> c0107e33 3e84b23d 406156ad 3f0b904e", + "41b474bc c206040e 40db1e48 -> c016cdbe bec9f4a3 3fd31714 bd97fc37", + "40dd1fb8 41a62f38 c0680a60 -> bf828288 bff020bd 3f9b4203 be2d525b", + "422c856e c0b0bd88 c2211654 -> bfda3a71 401f2363 3e76bccd 3db9aee8", + "41d3d418 418860a4 c21c4790 -> 3b9b54a6 3f81f2e0 3f0d7a69 be140daf", + "bf9cce40 4096e998 c04f8780 -> c0932f88 be352dd4 40167f4e 3e3816a2", + "c19bbd9b c1928668 c243f868 -> 3fc18357 3fb40f7a bffa5af4 3ed5aaed", + "c1e0900d 41d4e7a8 c1429330 -> bfc158ef be6ec42b 40010051 3cfcb479", + "423a109a 41afdc50 423ef01e -> 3fe14a57 be713f9b beef1416 3dd80d87", + "c20a37b2 422f40e8 c204dc8c -> c082494a 3eec8b30 3f249f22 bed26a45", + "c246cf75 42162ce8 c1180d84 -> c058de17 bf0800da be546d56 3d8ac329", + "c1ea2240 c2439201 41b6b404 -> 3d52317f 3f0295b0 3f4f70c3 bd564a82", + "c21eeae5 406c4060 41b5abbc -> bf0901c3 bf96028e 3fa4a150 be05284b", + "c2371b61 40f00c00 c2064be4 -> bf2b1b45 3faeab20 3ebe6a94 be405e66", + "42354de4 c0bec8c0 c2098ba3 -> 3f2fba6b bf172ae3 3f75dfed bdfb6b3b", + "c116d724 4219b4fc 412e6c40 -> bfb8d25d 3f2c6b78 3fe6d2b8 be16ed51", + "c19728c2 c212c315 c0cbeed0 -> 40250a36 4000c857 bfa85cef 3eac45a4", + "c22a1890 42054ab2 4228ca88 -> 3e9ddf01 bf93cc09 3fd4e524 3db4dc74", + "c11a5114 41e60e2c 420f5d74 -> 3f174946 3fa8b399 bf92e39b 3e95810f", + "3eb31900 41d05388 c0af91b0 -> 3f7c81d1 bf85b173 401ec50e beed210e", + "4111cea8 c108915c 41d7ad68 -> bfbf7bf1 3ef1ae29 bf756b8c 3e949501", + "c1a34834 422b54e4 40dddb40 -> 40235187 3fcb8828 3ed54e6a 3ed87052", + "4199da18 40b7d958 417f0950 -> 3d58466a 3faebacd 4005fea3 3e858257", + "c13e8644 c137ee34 c243e6d2 -> 3e42b9dd 3f72d579 3ff98eee 3ed176ca", + "41c06350 c1bd86d9 41c17698 -> bc0ff503 3f2e4d68 bfdb4ae1 3c9075a7", + "420a537c c1bb2bd5 c18b6626 -> 3f7b76ff 4027fb29 3fe09427 3e48de70", + "c1de3251 40be3320 4206392c -> bef709cb bf9a1c46 4084aecc bd77fb34", + "c152abc0 42095cb0 41f407fc -> 3f9e219c c059ff5a bfa632a4 bef43ef9", + "41b9429c 422b491c c2371dcb -> bf8b7b56 40433d3b bf187932 3f210296", + "bfd9bce0 41f30648 c1dd3231 -> be343aae 400809d6 bfc72cb5 3eab8e8d", + "4213fc8e 411ebba4 41dd3480 -> 3e2b7294 3f309ea7 404f1e48 3f34fe70", + "c1ae6fd6 c09c7850 c207da2a -> 408217df bf55e8a7 402ed8cd be958d33", + "c1288a60 417bc7f8 3f9a40a0 -> bf6f4f5c bdbf8ba4 3ea55906 be16b50f", + "410ae3d4 41aaba54 c18a8c5c -> 3f305906 bfee6f69 bffce034 bcde502b", + "4233d8ba 422c0d30 41c670ec -> bf16828f bfc2f289 bf296ead 3d757478", + "c0ecb840 c1849472 40e070f8 -> bf3804f0 bf3550ef bf7efd4e bea09a41", + "c1ffe18b 40b8c200 4009d010 -> 3f484c46 3fe7800e bceda50c 3f413ab2", + "40510880 c1af014b c1ef393d -> 3ff4f8f3 3f7b07b6 c07b1101 3f14b5f2", + "412f5280 c1ddc2cc 40e3f7e0 -> 3edbcd7d 3e8cd07b be20f13f 3f6074e1", + "4239d2b8 40cdd4b8 c247f439 -> 400191e3 3f26632a bf23af81 be421986", + "402d9340 c1e88a19 41caf00c -> 3e73881e 402a1ba1 bf55a3d0 bd83dbd5", + "c0cd2498 3f8c3c40 41e4ab14 -> 3ff6282b bfab9663 3fc5afac bece0e18", + "c1d50226 c084b360 41f9973c -> beb2ba88 3eeed41f bd15acf3 3dfa3092", + "410255d8 c09c4f60 412de060 -> 3eae8566 bfd439b3 401e1069 3f1b61c2", + "41faf5cc 4158b78c 420a6938 -> c06fe526 3c77d226 bff6e217 3f14977d", + "3f5fd640 c1020eac 42254f7e -> 3eadff8c 3f5558c1 c02415c8 be5546d2", + "c231347a c19b8f54 41164d50 -> bf9edad8 be1e19ea 3f3c79e4 3d96ebc5", + "c032beb0 c19dba46 c1cb2a35 -> bef2d54a 3efdfd31 bf41aeae bd125578", + "41a193cc c18227f6 c191a0e2 -> 3fe43304 bfad607f 3c777eae be5c3d7d", + "40f1b700 4189e6ec c1d95b48 -> bfdd3e0f bf57165d 3e45b39a bebcddab", + "410e9b6c c0dfaa70 c222c89a -> 3dde43d8 bf8983dc 4048012f bf1cc4fa", + "3f98c7c0 c230203f 3ed11c00 -> 401a5ff0 3f46a1c1 bea5aba7 3e7a5165", + "40ea0e60 3fafa9c0 c10152c8 -> bf532996 bf4935c8 3e5954b0 3d46f9fe", + "4238e2ee c1f62bea 42164c32 -> c015d71d bf8b6378 3f0b1daf bf244bc4", + "41ce8504 411de714 c21d5dd4 -> 401ab373 40427d6e 4053def7 3e86bfd7", + "422524ea 41af2b44 416945e0 -> bf8b3068 3ecb8d8b 3f5d0f4a 3e319045", + "c1681758 c21faaba 41f3448c -> 3f27ca21 3f5a3319 3f88901e bd90ba75", + "417cbdf0 42230730 c1c0fb7c -> bfc982b5 bea41ee2 3f777a2a bf175517", + "c1161e34 c231fae2 42229816 -> 40669423 bfbcc43b bff0f466 3eb7f79a", + "3f434840 41bb2310 c2028a23 -> 3f02ee61 bf5c946e 3f000033 bc3c6771", + "c04da050 417d2038 41e4ec3c -> 3f0c1928 bfb1d1d6 badeed24 3e376d00", + "4105e508 4244ee9c c23f949e -> 40514768 3fee4ac2 3f91a293 beadde13", + "3fc81620 c19e96ad 40f27108 -> c018615c bf1ebcfa bbdb23f6 bdc9a83c", + "c17ce400 422e3d8e 4221ff06 -> 3fc043b9 c00652a3 3ef0a249 3f22cb31", + "bf16f3c0 c2221768 c21ab1b5 -> be1e1f1d bf90905f bfaf28d2 3f5777ef", + "41ae8e44 41ab2328 41a35234 -> 3fa2b9e1 c02935f0 bf86a238 be9de484", + "c2103746 41e749f8 413d5990 -> bedac8bc 3fb79194 3f8ded5b 3ea8c971", + "4189bc30 c1df8694 40e4f178 -> c0b13b97 bfdf75d3 bcc21274 bdf1ab56", + "c0f27f50 422c7760 40103820 -> 401da2a5 3fa4cb55 3e083317 3f1e4a46", + "4205b524 c21db235 c246255d -> 3f8d57e4 40953f97 c003698b 3ee03cfb", + "411c2884 c22dcb56 41dfd78c -> 3f23da60 3feff431 3f9635dd 3ee92d6e", + "c1cb951e bf10c380 405a1fe0 -> 40854c0e bf2999e7 405a5ae7 bd902530", + "c22429ec c20236c0 412a2ca0 -> 3f3a9b15 bff5bb46 bd742c53 be426c7a", + "c225c936 c1246f1c c1047c24 -> bffd2ac8 3fba2e4f bf215851 be7a279b", + "c22bfcaa c242ccd6 c205e848 -> 3fa805bd 3f190f2d bee663cc 3c32b823", + "421fa340 c20674b5 41fa3d30 -> 3fb8bf85 3f69f9bf 3fb74b93 3eb448aa", + "c20dcc09 419662a0 c17e31d4 -> 3feefb73 be760b44 bfa09912 3ed02814", + "c1ee2207 c152ee64 4231ec8c -> bf5ac1f9 3f8e5c3f bf718e8a bea8c4b3", + "40b0fbc0 41ec8fc8 c0c7a548 -> 400c7cc9 3eaca3ca bf83cf3b 3f09403f", + "c1e45020 c20836d4 c22f88c3 -> 3f155b19 3f7f688c 3e837ead 3db4af2d", + "be181f00 4191171c c1f33243 -> bfb1e348 bee4ab12 3ee99335 bcc9b722", + "40e39be8 41c379bc 421408e4 -> c0129945 bfa385f1 3eb0cdf6 3e903312", + "c215ecc1 c1c92280 4120ae98 -> 3f387a9f bee2edfd c04f1782 3e4bcc8c", + "40fd6268 414dc438 407c8530 -> 3f8b5645 403c8626 c06f15d6 bec0ba65", + "c220e20f c2326e10 c12cfcf8 -> 3e49b7d6 bf2fa2f0 3fb32f1e 3ba8f4b5", + "c1ef1527 41236b04 c1e9ece7 -> bf39afba bd9e8231 bf5117c9 3e270cc1", + "c115e624 4020cd70 41d5d828 -> 40098dca bf54b134 be2be60d bf3dbf28", + "41a7c9d4 41970258 c1038e18 -> bff26007 bfbcf90d c0006cc8 3ea257c0", + "4182ce30 c127936c 419de084 -> 3ef19329 404957ce bf28d945 3e892bf8", + "4205ff3a 41982bf0 419eea1c -> c07b8e83 3e71b89b 3feb920e be23fde4", + "c221695a 4215fe24 c241ffec -> bf46ad68 3e927925 400f90d8 3ea60fdd", + "40909f58 410b3ba0 41acb158 -> 404142ee bf943be6 4015c62f 3e4cf8b5", + "c1df0bce bde05000 c1b9136a -> 3f7075f8 404c61cb bf355f18 bf241576", + "c1a3e258 41db2004 42261c8a -> 401a1ab1 3e9e4d2b 3f498f65 3ea392fb", + "c1e61a1c 40d43d50 c2303fbc -> 3ffa1e37 bf2dfcc4 bf0c4c43 beca6d33", + "41f15670 c21e2ef4 c1949b13 -> c024821d c0348ebf bf175522 3eb9e398", + "40a95e58 c16957d0 c1f525bb -> be3d44a1 40a783b5 3f6129cc 3f0a60ef", + "c1d7fc6a 41f6a2f0 4156f158 -> bf739ff0 c03db8f4 3f444889 be980d0b", + "c1a4e9ad 41e705f0 42450a5e -> 3d96a193 bede4c17 3e79b65f 3dbf999d", + "41de94c8 42230c66 c171791c -> 400c4bed bf73d276 beb025c2 3e966348", + "c202e75e c1a7d7f5 40bac640 -> 3fbe908e c00d59b1 3d97eb87 be8dd7f6", + "4220b698 bfdd4b20 41cae5d4 -> 402e193b 403bab19 40145e1a 3e9d4751", + "401c8400 40a85030 c053cf80 -> c00d6511 3f0406eb bfa0e107 3ea6dca3", + "418cd02c 423ffb54 c21eb517 -> 3fd19adc bfbf0b56 bec2bf59 bed3e44c", + "422f9340 c21b885d 41c8f9ac -> bfa37f4b c0658cf0 3f87a9d0 bf0007f8", + "420ccf88 be870480 c217067d -> 3fd9cee2 c0182ec6 3f37c956 be917347", + "c1628f24 4210bbe2 c1a76bcd -> bd9ec9b4 c0271ded bf806815 3ebb0c17", + "c13b08d0 c1ae5923 c1832828 -> bf97398a bf9acb13 3fdef325 bee35ff2", + "3f01fb00 421294dc c22d5355 -> c02f31e5 bf99dcc5 bfd5f970 bdbfcebd", + "c13ef108 c1c6ee7c 41ee97e0 -> bf16d21f 3fb68ee7 3f880f1d 3e89bb7d", + "41b29c98 c0b68260 41120dcc -> 3f0991d7 402d79bb bfa3fc52 3f2966b6", + "4227d492 c21709ce bfd080a0 -> 3fed784f 3feabe67 3eb6c37f 3e5e96c9", + "c164f0f4 c197874c c2268dfc -> bfba921e 3e1a7e54 3e915d8e bdbd116f", + "c19b654c c1b23a11 40a63830 -> be8777ce bfb9af02 3db46577 3ea4e2cc", + "420aef6e 4216c3b6 c1494520 -> bff4feaa bf82d787 bf762bc2 bd97be00", + "c223ddc6 c1a722ed 419db3ac -> 3f70210d bfd79ec7 bf5ce4f2 bee15fe9", + "42193f80 c0ba22f8 c1a6de00 -> bcae8fa7 c0981f7b 400337e7 be581b10", + "421410dc c1004748 c235af7c -> bf38eea2 bf28f1e8 3e5420fb 3d8eb8dd", + "c230a860 41e7b5a8 c244bf69 -> bf8e742e 3f53f80b bd091802 3cacd62f", + "c1de2649 c1254554 413a032c -> 3f8e922d 3f08ee11 3f92994a 3f0df07b", + "41958c7c c20e7b7e c19efd7a -> 40659eef bfee266a be8c3cff bd2e1380", + "4186ee2c 423519c8 406cb9f0 -> bfb35807 3f8acc36 bfb14a90 be6f15fd", + "3f98eec0 c2404150 42438170 -> be7048c3 40263431 400e60fd 3f1cccbf", + "c1b9fe4a befa1d80 c1fa94c6 -> bf33da87 bfd3f1ec 3fe0ceff be4091fd", + "c2387880 c232f124 410763ac -> 3f9544ee 3f82a5e1 bfaa8afe 3eeb6446", + "41bf0628 4064e5e0 c117c120 -> 3e70a4ed bfab5c60 bbd75e06 be374825", + "4238bd34 c1086938 40f13298 -> bfc65ba7 3e324395 3f4d2cab be0d74d1", + "c150b4ac be7bc200 41f79a44 -> bf02591f 3f55cb71 bf51eacb 3f4ff1b5", + "3f2ebc00 420d3d70 c23ebe7a -> 3ed94950 3ff0bfd9 4006df48 bc4002bd", + "40919770 42107cf0 c185c946 -> bf45ed78 3f089f0d 3f6ada58 3da7fb52", + "c01c49c0 c2122918 42258dae -> 3f18286f c00c347a 400e7c5e 3e1396e3", + "c050ec80 413e1c70 c212a18a -> 3e74aea4 bd8f99c0 3f11f548 bd935070", + "c1c7747b c20087a8 4229a9ee -> 3f89cf03 bf900216 3f2a6393 be407b47", + "4206e318 40fad620 c1b6a04d -> 3fb5b484 bf79334e c048ba80 3f076475", + "41a6b0cc 4138fa90 4232afda -> 3f8ed92c bdcd7cf6 3ff2d297 be51a014", + "c21e249d 4204895c c15482b8 -> bf841e29 3f06a507 3e4caa07 bd8acfa5", + "c0788670 c19056e7 c1c4e710 -> 3cd40656 3fdfead4 3eb1905e 3e3c397c", + "4124c378 c1bfa0b0 4240c8f8 -> 3f3ea9f9 401813a8 bf5d2d82 3f09f7b1", + "c237a587 c192192c 416a0110 -> bfcebb53 3f5b9304 3f85ed97 3d5a4754", + "bf52f780 c20743da c22023a9 -> c0221ace 3fe97faf bee8675d 3ee17fb1", + "3fb14320 423a9488 c208be42 -> 3fd8e677 bffb507e bf8306ea 3ef9ee71", + "41799850 41e98af0 c15f2c88 -> 3f1b9192 bef1738f 3f2c5ca8 3e2a00e4", + "c1b5b024 40e4b240 c0d3c1f8 -> 3f55e43a bfed427d c0518a31 3eed406d", + "c09c2c60 bf9855e0 c164a7e8 -> 3fd50a46 4014e14d bdd49bd6 be20fd21", + "bff346c0 c21625e5 42068aee -> be0a1934 bf81618c be3f2534 3ca38f3d", + "c19d130f 4180f4dc 4218c59a -> 40646f24 3d3d355a 3f67f4e1 3dc31f63", + "42111d48 c11c81c8 c23f4bec -> c089257e bf6c67d6 3ddaace5 bf343571", + "417988d0 c22644ab 40854320 -> c00d2156 3fa63b43 3f11408e 3ee3fa65", + "c228711b 42150a86 4215a740 -> 401a5809 bfa1f183 bfd42d5c 3f0a14b8", + "422cc4b6 c0eb4a00 c19ed89d -> 3faae513 bf6bf90d 3fff4360 ba8d8790", + "bfa439a0 41cf2344 c24143cf -> c0726886 bf252abd 4013f97f 3e382fb3", + "4201cd98 c18d4e00 413318ec -> c07dff8b 3ef096a7 bffa2938 bee48c3f", + "c21a91e4 c2330dae 4201792e -> bf8352bd 3ec3e236 400d6b8e bf1f7860", + "4109ebf4 4204b376 c1c019d7 -> c01defd0 3f946655 bf5e0790 bdc07aea", + "422d5792 c24402db 4204973c -> 3ed4bb96 3feda904 bebdfe0e bd5c78c1", + "421eb672 c21734ec c211aa74 -> bfb4331d 40232753 bfbee30c 3f11ff1d", + "c20dc1f6 41bdc804 4179e3e8 -> 4031cee1 3f1e6914 c093f528 bd4a5482", + "41d37554 414e5b6c 41cfb934 -> 3fdd44f5 c00ace3c bfc08f03 bebe4b05", + "c228d7bd 420f27e4 4218d934 -> 4022d58d 4027d1db bf5b6c23 bdccb8c2", + "413a6568 40f6b978 4227baf2 -> 3e0028fa 401383b4 3f098e0a bf2c94af", + "bfae4c40 c17e7320 c20e0078 -> 3f17b522 400b4547 3e6d9ccd 3e960947", + "c2130bf1 42399c40 41b75760 -> bfae4657 c0140d5a 3f77e814 3efaf448", + "c17f98ac 417a60d0 41f10238 -> 3e6be0e2 402e3727 3f95e312 3e6d89d4", + "c1dc7699 c1f7ef46 412e2078 -> c03687b6 bea297c4 be44197a bcee6ac3", + "c230b394 c1b2bb6c 40e160c8 -> bf463fcb bfb06e27 c01c8d55 3f15b483", + "41d18200 41b21548 c22a41d0 -> bfb80001 c010c997 3fc5eb99 be94ba54", + "41a82254 c1fe4f1b 41c87ee4 -> bfa6ed64 c0818a1f 3faa639b bea40371", + "41bea368 41e50d58 41976580 -> 3f988779 bfef83f0 3f5a2684 be612566", + "41686ae0 41b24714 c2140539 -> 401600ef 3fccd158 bfc74a6b bec49159", + "c1c240cf 41c54aa8 c05cee50 -> 3f475fd3 401083ed 404339fa 3eef74bc", + "41b7da10 be959f00 c01e4dd0 -> be13c854 bf61f81b 3e775b3b 3e1e20a1", + "4221be3c c22012a2 bf6bf0c0 -> 3ee970ce bfd01465 bfba3bc5 be50922c", + "c21a0c73 41f0c704 c2359f1c -> bea776fe 3c0c88f4 3e85a75a be32dfd6", + "c21f1474 40b4e4f0 c05cd200 -> 3f2e09cd c02786a5 bf22626c 3ece3eee", + "c184571e 42287956 4096dd28 -> bf6c398e 3f1d23a7 bdda2e92 be11eff4", + "c2350f24 41a4dc7c c16c2dc0 -> bf74bc16 bfb1db27 3cd5969c bce7a58f", + "c1f89eff c193317a c211e2bf -> bfa0287b c0339645 bd55d7c2 bcf3e3bf", + "41f63608 42228830 c128050c -> c066fd26 bf228785 bfb64f83 bef9024c", + "c2048480 41c677d8 40aee468 -> 3d064c84 3f931331 c000d264 bef1b5cb", + "c08d99b8 bfa4d520 c1cf0e90 -> 3f433248 bee215da bf30ea69 be15e77a", + "411ec3a0 c226c5c4 4223f2e0 -> 400d76b8 3f4defe0 bf6d082f bdb7fe0a", + "c1836000 bf0a1580 419a6734 -> 3f4a8479 c02542e7 3f6b5dfa 3eb4388d", + "c2129304 c20a71cf c2014b14 -> beaf8e77 bfac9147 beb6d833 bf59d902", + "c2282424 416b35c8 4228a722 -> 3fd63f53 3e1a4690 bfe787bd 3eca8b19", + "c23ca2b4 412c9678 4148ef54 -> c03abc3d 3f4a6506 bf2861db be7fd8fd", + "c1abe6dc c11a0af8 42120d54 -> c007c724 bd887b1e 402713d5 beacdfd4", + "c20f28e6 411ca76c c2414ab4 -> c09831c3 3f50bc2b bedc3060 3bfb86d7", + "41de0c70 c22cd0e8 c0de0f80 -> c01b1c82 c011e19c bfbec372 3e8439ef", + "c187d84a 4228d206 41113248 -> bfd1e61e c005a113 c034d69e 3dd061fc", + "c227e39a 41bc8578 c16d3a30 -> 3fc6237b c0785ab6 beb8cba2 3edc0bca", + "422e73b0 417e9b10 c194ebad -> bf96ff03 40936de7 bf9fc6ab be2c14bb", + "41f3d058 3e9d5180 c029d9e0 -> c05cfcf4 bf2ab396 3fa4a91f bda5a7b3", + "40b1fff8 42478470 c0eaf2a0 -> bd45ef52 3f1eefd2 c01f8bf5 bed52b76", + "420da80a 422583e0 40a70068 -> bfbd942c 3fd1bbe3 bf4ba357 be92b03d", + "c201c05c c21c2b5c 418733a4 -> 3e834769 3d25edbb be90233d bd4b59f3", + "c1e513c3 41df7b70 c1a13adc -> c05425c8 bec9f9a9 3f2c74cc bb0b65da", + "41d785d0 42196eee c1790560 -> bf309829 3f669d40 3f3d2c30 3ecb081c", + "41979e6c c19514a3 421baf7c -> 3deaf415 c05a8a48 3fc9e67d 3f16e51f", + "c1dc792a 4200aab0 c241f4dc -> bf2ea52a c0152911 3fc6835a bf0018eb", + "c004b310 c245c3db 40e82d28 -> 3f525312 3fa1ef90 c030695a 3ca519ae", + "c21f18f7 c232af6a c102d228 -> c007b7fd c021c5cb 3f3db6ea 3e99c1f9", + "42020378 c20e97d4 424326ae -> 3f6b78a7 3fe44f18 3f74c6be 3e8fd014", + "412c73e0 c1dd15c1 c21e1505 -> 3fe57c38 bfffa749 bfa81379 bef0f96c", + "c20b268e 41b79924 c1181cb8 -> 3f757848 bfcbf14f 3e91cfcb be2c879b", + "c0c4a2b0 c1a9a1de 41934bf4 -> 3fbe57a4 3f052a41 bfa5368e 3ec2997d", + "c062ac00 41231a4c 42375a74 -> 3c367fab bfe88ccd 3f2b96fe bdc31a50", + "41d14880 c2196244 c20eebb2 -> bea1570e c032c2cd 3f18c3db bd6e1fb4", + "c1a62c01 c1974d04 420cd3cc -> 3f70f552 3fe13609 3f73d0b5 3f4cff68", + "c2450d34 c1cab70e c1773ba8 -> 4018e354 bd78a440 3e03a9c5 3cb119b3", + "c0f12a90 41009304 41911fe4 -> bf5b58dc bf4640b5 bfc688cf 3ea7a478", + "c0854610 c22974d0 4245484c -> 3e3077e9 3f31e415 c01e0c93 3d0c5036", + "420d9c06 41c98200 4210334c -> c01e9b27 c00aecd6 bfe178f1 3e834164", + "c2126b6a c16f0f50 423a6c78 -> bfd1dda5 3f90688e bf74eec7 be2fa65e", + "4190e648 41296498 40b244c8 -> 4019d62f 3ea83805 bf484717 3d7ad9d8", + "c1f510d2 413ba5d8 c20a5da4 -> c011b409 3f469f11 c03b340f bef15a1e", + "422fc5d6 c1c738e6 c23db963 -> 4008589d 3f928d65 bf84bf7c bc917e33", + "c1ebecfd 41cfdc58 c1e037c5 -> bf56e7d9 3f9ef23e 400db2c9 be11c87e", + "c2314f50 41ae2120 421b9e68 -> bec21f10 402ba7f7 bfce4123 3f03dbfb", + "c0e07550 41f7fa10 41c1ee2c -> 3fa7688a 403a4f30 3e57b11d 3ec3aab5", + "40d3bd48 41fe2158 421ec3b4 -> 3f8140ed bfe830f5 c00a0f6c bf01ec49", + "4163d668 c1fd7b6a 41654178 -> 4029e64e bffa80e9 3ea36a47 bedd8786", + "c0f527b8 419b0468 41750588 -> 3d308fcc 3f908c35 c0188609 3a154349", + "c10d3de8 41073e88 4066e110 -> 3f1d114e bd0abdfe bd65f7de 3d3b7008", + "420172b0 c1877eae c1c6eb30 -> 3febd92c 403c361c 3fdd8095 bdf37743", + "4244edfc c227cee4 3f8892e0 -> 40110031 402be3f2 3f9d7aba bf10410d", + "410b2edc c2208d97 419ae014 -> 3f2751b9 bcd409df 3fd00bbc 3e02b423", + "419e62e4 c22cd30a 424640ea -> 3f9033cf 3f5e12b2 400c80c0 bd940c94", + "c1902b10 c1e05da8 42003696 -> 3fe9f31e bff392a5 be9dbe8e 3e97fd56", + "c07542c0 c11d65c8 c162157c -> 40361a04 bee37bff bc8c13a7 be2cae62", + "c21e561c c0f2aa80 4230c3f8 -> 3ff1e95f 3ff9f80d 3fc893ea bf04a2c5", + "c218c3cc 40d8e770 4052b7f0 -> 3e7d152a becf5933 3e217f54 be528e2d", + "c22c573b c2388276 c0f74928 -> c0083499 bfc08315 3ea66f58 beef5f06", + "4224f83a 41d8391c 42296742 -> bfa0be54 c03a8416 bfd76290 3b4dba24", + "3dc1f200 40315510 418527d4 -> 40312d8b bf0d0627 be8840d2 be6f6e0a", + "bf84ee80 c13da4b8 c0e293f8 -> bfe9a2f0 c00f5e87 bf376603 3f2bf86f", + "423b59b4 c22e3d4b 415b7dcc -> bd653f3d bfc313d5 3f0ec0f2 bd20ee18", + "c14298b8 420925a0 41a91540 -> 3fc24ca8 be5ee1a1 bf4c0c80 bcf439b0", + "c23478f1 42134638 41c7c76c -> c004cdb2 bfd8abbe bfc79eb6 3eecc8a9", + "422082c8 c18de9c0 4239711e -> 4087fc41 be9a8f3b 3f75ae02 bd578ea4", + "420119ca 4238af36 c1a648b2 -> bf6f10c7 bf032662 3f58764a 3f13db72", + "c1a4727c c199f2bb c207db0e -> bf92fb18 bf0d338c 3fc20459 be189e53", + "4116a864 41a46cf8 41d24778 -> 40537644 bf8689fe 3f1b924c be83d5e0", + "41aebdd4 42294536 c2374c6e -> 3f48c164 3f5d1a92 bf1acd52 3cb6ca3f", + "c224d244 418ba6f8 c189544a -> 3f01a79e 4025e094 be855fca 3f231e68", + "41d81190 c1f25f11 4080bd30 -> be4671b2 3e505614 c0027cb9 3f3d3887", + "c188a5fe 420411ec 42073a5a -> 3cb7dc4d bf3843cc 3f00b5de 3e0ce4f1", + "c12ddbb0 bf2b7880 c1823850 -> bfe66676 bfb425d6 4099ea3e be2f28b9", + "41b13658 41b4a024 41021440 -> bfa049a6 bf457a08 3f91f402 3dd6eeb9", + "c1d78d50 c22c4adb 419fad6c -> be8e2e35 403de25d bfc61038 3e4b02cb", + "41e28f94 c204da03 41ace4d4 -> bef1b49d 3ef66226 40055b7e be927dc1", + "c082d220 c2242190 41f6dab0 -> bfbc80c3 c0302d91 3ea48a34 bf507c23", + "41522e64 c1eacb91 c1dfe2a4 -> 3fefc663 bf02049f 3d6e40f4 be9cfa75", + "3f1bbe00 421e2e74 418cc0ac -> c082200e bfb1d733 3f35c55f 3f1530ab", + "4185138c c1c80a66 c20f8281 -> 3be36ee6 3fcb2d90 3f7b2eef be6b7425" + ] + }, + { + "glsl": "vec4 cultmath_fbm_grad(vec3, int, float, float)", + "tolerance": "ulp-bounded", + "cases": [ + "4118af88 c1a7a7d3 c204addd 00000004 40000000 3f000000 -> 40719fd8 c07c5fe4 40cdafd8 3f2fa97f", + "c13b2cec c1b10373 4188eb80 00000004 40000000 3f000000 -> c01b8792 bcca1a40 3fd8c305 bd01dff0", + "c1e867dd 40e6ae40 bf41b2c0 00000004 40000000 3f000000 -> 40859093 3eb645e8 4031bcaf 3ea94661", + "c215c93b c0db7a50 c04a2e90 00000004 40000000 3f000000 -> bfad7980 be6570c0 3fbfbd6c bed152fa", + "4235f7ce 40e95cb0 4102da44 00000004 40000000 3f000000 -> c0b970ba 3ff679c7 bed54bba be34e22b", + "40fcff18 c15a3cf8 415a055c 00000004 40000000 3f000000 -> 408001b9 c054681a 4098ddce bdc95e37", + "c22eb2fa 422e1720 41cc3e74 00000004 40000000 3f000000 -> 3f4a6a40 40eb7d01 40958799 bf098676", + "c18b7db0 414e2000 4107d430 00000004 40000000 3f000000 -> c015b428 3f3a147f be15d2b4 bf60e2f6", + "3ffd1060 c21082d2 42443640 00000004 40000000 3f000000 -> c02316e0 3f9445ee c088cfa2 bde5275e", + "c18fee12 42013e08 422de378 00000004 40000000 3f000000 -> c0146f0b 402fff82 bf4e169a 3de5674c", + "c20725fc 41b3fe9c c1cd515d 00000004 40000000 3f000000 -> 401d5ef0 c0950cf2 c0b3a0ff 3e061897", + "c1f3334c c21590b5 c0cee030 00000004 40000000 3f000000 -> 40575831 3f977e8d 3f319cc0 bf4be29d", + "c10b344c 420b0494 41e86dbc 00000004 40000000 3f000000 -> 3fad611c 3f0cc06c 3f9f42e2 3efe2f4d", + "c23c9f0a 40ebddc0 411940d8 00000004 40000000 3f000000 -> 3f5aa199 404a04d3 3faa1910 bd181aaa", + "c1dd0d96 c1852212 417d36f0 00000004 40000000 3f000000 -> 3f362bba c08e754b 40447734 3f54611d", + "c17fbefc 418d2798 4155ba88 00000004 40000000 3f000000 -> 4049ff74 bf7e64e8 3ffa7bfa bee55145", + "415d6078 422acf16 404bdb20 00000004 40000000 3f000000 -> bef92570 3e8f33e8 c028dc0e bd67db19", + "c2382102 4124f300 c19438a7 00000004 40000000 3f000000 -> c0cba0f4 4058eaea 3f8cf5bb be9ab9f0", + "c13686e8 c1b82a8d 4181482c 00000004 40000000 3f000000 -> 3ffc488a bff26e29 c0c807bc be3c13ba", + "41057454 42114c42 c20ffee7 00000004 40000000 3f000000 -> c05a9513 405bc594 c0c71330 bf179132", + "41907f00 421bc31a 41c72f7c 00000004 40000000 3f000000 -> c0198ed4 bf4fe6b4 3f03b184 3ee43c08", + "40b8ade0 42395cc0 41a522d0 00000004 40000000 3f000000 -> c0191031 bfbd0bfa c022aec8 3eb86305", + "c1dbf475 41cf22e8 c0aa1db0 00000004 40000000 3f000000 -> 3f824dbc bfab9a6e 3ef38818 3e112a02", + "c20d6d69 c205930b 3fcd85e0 00000004 40000000 3f000000 -> c0ccf921 befcdf1c 3fe48bf5 bfa0173d", + "420a4a7a c23a13ef c15d925c 00000004 40000000 3f000000 -> c0a64506 c05d8974 3f542ee4 3e7cb472", + "c20830fc c21f380d c1a3cdf0 00000004 40000000 3f000000 -> 40d96645 c083e0a4 c00a384b 3ee43020", + "422aa752 c20027be c07169e0 00000004 40000000 3f000000 -> bf8db6a2 c00a9202 bf4bd594 3e8c0d4a", + "c164e18c 419161b8 421e6ef2 00000004 40000000 3f000000 -> 4045d2d2 4020c085 3f91bbea bf27128c", + "c11b68e8 c21704fa c2173d71 00000004 40000000 3f000000 -> c0b56c28 3f0cc1ba 4006c15f befe5ee4", + "422b73a4 41f81028 420e8492 00000004 40000000 3f000000 -> bf5efd39 c088c3ed c09604bc 3c8844c8", + "41daffc8 4203d5d8 4241b850 00000004 40000000 3f000000 -> bfaeb305 40389ec0 bee2f008 bf15cfc6", + "4170d710 c1737a2c 4193713c 00000004 40000000 3f000000 -> 3f1c63f0 4088ed85 c10a832a 3eabd2c1", + "420ab876 4184c6f0 c14fb724 00000004 40000000 3f000000 -> 3ff916f8 bf217280 bfc3449c be7284eb", + "4234bc54 c219f585 42270256 00000004 40000000 3f000000 -> 4015fb41 3f8d22dd bf59552f bdb58c62", + "c1fa9b4f bf4e9e80 41d0c444 00000004 40000000 3f000000 -> c00a4e41 3fa1e8ce 400c3336 bf6f4af1", + "c241ae7d c1f4d6f7 40da8578 00000004 40000000 3f000000 -> c074a8c0 bf9f1082 40aec20b 3e1c7918", + "42354844 c1dae17d c204dd3a 00000004 40000000 3f000000 -> 40104aac c058e102 bfcf37b1 bc3268c5", + "c155d3c4 417ad710 4192e800 00000004 40000000 3f000000 -> 403a735f 410fd4ce 3f8004d2 3d50b7b5", + "418e2f6c c18d103a c1e9db81 00000004 40000000 3f000000 -> c031fc7f 3de98220 bffca1b8 3ed3ed1e", + "420d28cc c20a100a 420861ba 00000004 40000000 3f000000 -> bf531198 406c96dd 40715ee6 bf20476d", + "41073b5c c1a2dbc0 42338960 00000004 40000000 3f000000 -> c02b8f27 3ffcd0a1 3fc9b653 3e835d9a", + "4110dee4 c14bb530 c182d1c6 00000004 40000000 3f000000 -> bf4124fe 3f41071a c07329bd bea20819", + "404b3de0 c1f3d697 41959538 00000004 40000000 3f000000 -> 3f985ae2 c028883f bfe02eff 3b34e866", + "418dc594 c195d2e4 c0ccdc28 00000004 40000000 3f000000 -> bd1f17f0 3f88da62 40b16212 3e9ca913", + "422a06d2 423deafc c22e3239 00000004 40000000 3f000000 -> 4121709c c0eeac6c 4073671a beb4dfd8", + "408f3858 c203eabb c1f82957 00000004 40000000 3f000000 -> bf97e4e3 4093030d 3fe68ad0 bed459b5", + "c211f32f c134aef0 422b6680 00000004 40000000 3f000000 -> c06487b8 3fdde56d bfa77694 bd428a4c", + "40ab8f00 423e2b62 4105e34c 00000004 40000000 3f000000 -> bf148e84 c079808f bf8a8428 3e947796", + "4196c398 c1142cac c202dfec 00000004 40000000 3f000000 -> be05e115 40458a24 bf635592 3e226587", + "c19f775d 423d1e0e c23e566f 00000004 40000000 3f000000 -> 40311fcc bdbbfd90 bff9b814 3d447710", + "c0159a20 42458fa8 3f8e7040 00000004 40000000 3f000000 -> 3f8707c5 403c40fc bf4bc9b4 bddd2048", + "403b07d0 c1544a0c 41fef0b4 00000004 40000000 3f000000 -> bf80aab8 40b921c2 c010f34d bd798ac6", + "423b78f6 4119ea7c c2184d2d 00000004 40000000 3f000000 -> c0a59b02 c0ef19bc 40f0cbd8 3ca26a67", + "c0f1a7e0 bfcc4b60 42477fd0 00000004 40000000 3f000000 -> becf2ea8 40aba947 40061982 be03aca2", + "42188614 c1b3350f 422578b4 00000004 40000000 3f000000 -> c0248df3 3f858698 407fc064 bd267fcd", + "41b97c94 c0bbde10 41919590 00000004 40000000 3f000000 -> 401bf2ed be8c5c28 40ce6776 3db6ee9b", + "413e98e0 c212cf55 c20a9d62 00000004 40000000 3f000000 -> 3c594580 bfab178a 3f97391c be0d5cdc", + "c240d915 41ae37f8 41d63764 00000004 40000000 3f000000 -> 40a66ca2 3fb56885 c0e68c9c 3f0fa1e5", + "4224fb3a c23ba309 c18f3282 00000004 40000000 3f000000 -> c02a3e25 bf83ed6a 40e192f4 3f448b2c", + "c157bdc4 4220d5ec 423a1de0 00000004 40000000 3f000000 -> 3f12f798 3ff2757a beec9920 3eb5740d", + "c20688f6 c1d720e7 c1de12b5 00000004 40000000 3f000000 -> c00550d9 bfc4e2e8 3e302f80 be11fe5f", + "41824214 c1ef8727 c190f237 00000004 40000000 3f000000 -> 3f1208ae 40bc4f34 c0136b24 be0f09b9", + "4229f0fa c126a6b0 412bf604 00000004 40000000 3f000000 -> 3fe53206 c06c7c11 40512de1 bd819439", + "c1cb5527 40f370a8 40ecd528 00000004 40000000 3f000000 -> c05a007e bfe6997f c01ab8eb bee9ecdb", + "c22bc77e 41a88398 4221369e 00000004 40000000 3f000000 -> 400c2720 40709041 c0831561 3eb2edea", + "422be6b2 4189d79c 419f8bd0 00000004 40000000 3f000000 -> 3fea4c43 bff08da0 c0126644 bd97f793", + "4188003c 4236a380 423a7096 00000004 40000000 3f000000 -> c097df29 bd918c20 3ddd7cb0 3e80f152", + "bf6aacc0 41913c34 4207ed64 00000004 40000000 3f000000 -> c0f11604 c008214a bfc3aac2 bedf0ed1", + "421446f2 c0840460 c1b318a5 00000004 40000000 3f000000 -> bfd5acf0 3f5386f8 404a6ee5 3e8ebf6f", + "41c2afa0 413ad50c c182def4 00000004 40000000 3f000000 -> c0f0d5d1 be9a5674 40259f0c bf50948b", + "be6e6500 4125a1a4 419b4964 00000004 40000000 3f000000 -> 408a4fcb c0330540 3fdbc6ac bf0b3479", + "c20a6b0c c1bf580a c1c5a3cf 00000004 40000000 3f000000 -> 4063aacf 406c45ee 3fb4ff38 be30a380", + "41dd1258 c1e135ef c229d6f4 00000004 40000000 3f000000 -> 40aa19e7 40252554 406e4605 bef8862b", + "4117c738 41f59aa4 c235d216 00000004 40000000 3f000000 -> 40792732 c093c2de bde5ac90 bcbc9178", + "c22a32ba c14abcd0 40b614b0 00000004 40000000 3f000000 -> bcaa7340 3e7d263c c0116fe7 3ee9bc36", + "40fe3fc8 4232ee6a c24525d1 00000004 40000000 3f000000 -> 3ed5dba0 40a0e22a bfaea6bc 3e79646d", + "4211e514 42411488 c1623b58 00000004 40000000 3f000000 -> bdebd870 40036744 bff748ea 3ed3cd9b", + "4142835c 419c20e0 4232326e 00000004 40000000 3f000000 -> bf49dbe0 c0f16006 403ba02d beb48569", + "4247ad48 418a4378 409e8b98 00000004 40000000 3f000000 -> c09c8565 403f1cfc 3f47585a 3eb1fad0", + "c13bdafc 41e9b430 41c179f0 00000004 40000000 3f000000 -> 408c5074 bff2ab84 3fe5d98d 3f399d55", + "c236ecc8 c1fecdac 41df4220 00000004 40000000 3f000000 -> 40a2a0b9 bfd0031b 3f5ee21d 3da40a50", + "c1b72609 41c687a0 423d05ac 00000004 40000000 3f000000 -> 401ffa1b 3ff68ae8 40076b12 bc565c2d", + "4217f5f4 4226a38e c0a09170 00000004 40000000 3f000000 -> bfa1aba6 bfb0626a 3ffafcc5 bf70bf4b", + "41702210 c20aa279 c093c9d8 00000004 40000000 3f000000 -> c08a7d8a 3fc712fc 3f957e9e bed44ebc", + "41467370 c229f1b1 c20c29d2 00000004 40000000 3f000000 -> 4062f490 40926930 40464493 3da4bef8", + "422842ae c105dfe0 c1996566 00000004 40000000 3f000000 -> 40641dfe c0eac1d5 3f9309d4 3c9df665", + "c1adaa63 c1a7020c 3f922120 00000004 40000000 3f000000 -> c065905e 3ffcf8f8 405acb78 3ecc9fbf", + "c1b8cd04 421772ba 415682f0 00000004 40000000 3f000000 -> c0181362 c0222401 c02217b9 bedf4af3", + "423f1f5c 421670c4 422357f8 00000004 40000000 3f000000 -> 4040179a 407cbe5f 40850bf7 be50a995", + "41c6e488 c20a1855 410cc8f8 00000004 40000000 3f000000 -> bffa6904 3f80ff5d bf286047 be83b6f7", + "41a2b94c c12a0058 c0eba878 00000004 40000000 3f000000 -> 3e4b1a20 3faf29e9 404b1e70 bdc697bc", + "c18527da 40a6f4b8 4148d0a0 00000004 40000000 3f000000 -> 3e923cdc 3f5e3d25 3f3bc88c 3ea96d78", + "c1bae64d 41f2c094 414833ec 00000004 40000000 3f000000 -> c049d728 c094acf9 3cef2c80 3d9718b8", + "4106f3a8 419fa40c c23bb524 00000004 40000000 3f000000 -> 40483521 bfe30e30 4080fd1b 3ebba8b2", + "40b762f0 c1e446e2 4203b700 00000004 40000000 3f000000 -> 3eebe2aa c02b325f 3e84f150 bea886e6", + "4221ea64 424703fa 41400884 00000004 40000000 3f000000 -> 401150f8 4083b896 be9d66eb 3f3a54bf", + "41ecb880 c2289564 c1c2cc97 00000004 40000000 3f000000 -> bfe46297 405d6788 3eedbb08 bed882e1", + "c1cef7b4 c220218d 3db63a00 00000004 40000000 3f000000 -> 40fd2bac 3e0ca780 3f7771d1 3ef9d618", + "c1d7a821 41daf374 c19db323 00000004 40000000 3f000000 -> bf9f56cd c0831915 3ea59424 bf5f2e51", + "c20dffac c1a564c1 4214d30c 00000004 40000000 3f000000 -> 40d8c056 bfdc0d32 beb1ab6f 3f067dac", + "c22e524c c2137c51 41d177c4 00000004 40000000 3f000000 -> c09570bb be7df6d2 400752ef bf794d32", + "4210bb94 4232abe0 41cfbb38 00000004 40000000 3f000000 -> 3edd5df2 4054651d 402357c4 3e096c9e", + "c23d042c c1a79e70 4012fb90 00000004 40000000 3f000000 -> c057f93d 400fbf1a 406dec40 bf0fd047", + "401a2060 4176d750 41349ef8 00000004 40000000 3f000000 -> 3e23dec8 c0f30289 c07d520c bf5ea7b8", + "419280a4 419edbc8 4112b3d0 00000004 40000000 3f000000 -> 3fb94478 3f6d196c 3f448ca4 3f5faac2", + "bff73a40 41a95a44 41832c58 00000004 40000000 3f000000 -> bfa31237 40738afe bf4a891f 3ecb4754", + "41f3d378 c22acb09 42176cc8 00000004 40000000 3f000000 -> bfa7056c 3fe9ca0e 402301ba 3e85738c", + "c1a95451 42351606 c22982f0 00000004 40000000 3f000000 -> bec2c500 c0872c75 bf4502d6 3ea90351", + "c186ceec c0727800 c1a4bd12 00000004 40000000 3f000000 -> 3fa09c8e bec3cad8 403aced1 3c23b2ac", + "422a2fd2 c21ebfdc 41dec9bc 00000004 40000000 3f000000 -> 408d6b8b c07de6c2 bf9f8508 3e27372e", + "c18de48e c217737a 3f825560 00000004 40000000 3f000000 -> 3df86140 beee4704 4019613e bf6aa720", + "41ca73dc 4000f350 40da72b8 00000004 40000000 3f000000 -> bfa23ed8 bfb4d6a0 3f4b1ff0 3dc2ea29", + "c1b8e20e 419c6190 c1b99ea1 00000004 40000000 3f000000 -> 3f42df94 bfffbde1 c0acc4da bf791707", + "c22c269c 4216ee90 41a5a664 00000004 40000000 3f000000 -> c09495f8 c0a093ee 4021f048 bf0d898a", + "c2212d97 c1b68b8d c0f259c0 00000004 40000000 3f000000 -> c1086ae0 40227204 3e101cc0 3f26dfd4", + "4165c7e0 40ba1ea0 c11e3dc8 00000004 40000000 3f000000 -> 4055a127 40c79e3c 4010cb96 be70886c", + "4223ae2a 41c7cb84 c22f3368 00000004 40000000 3f000000 -> 3f23d258 3fc98b31 bfc15f9e 3e3ceece", + "415e410c c17fa5a0 c1dfceb0 00000004 40000000 3f000000 -> 408b5b1c bf87241a c10e7c50 bf0aa12e", + "42456644 41dcafbc c2009256 00000004 40000000 3f000000 -> 3ee56a40 c0802eec 40d7c7b8 3e6b2318", + "41947da4 404230a0 bfc59420 00000004 40000000 3f000000 -> c02bcd9b 3fda51c4 c04533a8 3f105222", + "c05c3d90 c21f33ff c1fa1eb7 00000004 40000000 3f000000 -> 4080f89a c0131e9c bf8704d9 3f0321ee", + "41c395b4 c1eed768 405294e0 00000004 40000000 3f000000 -> 4021195f 40136d49 407cf0e8 3e9569ae", + "c21eeaee 422c0664 c200a150 00000004 40000000 3f000000 -> 4027d8f9 c052a417 40317586 3e5fa84d", + "c23ea162 c1e69196 c24183a8 00000004 40000000 3f000000 -> c07f15e9 3e5a4752 bf9d635e bf35cda9", + "c1266a0c 41bc20b0 c1f37332 00000004 40000000 3f000000 -> 3f3c07b8 3f8bce9e be546960 be83a783", + "c203666a c1f6f922 4190b794 00000004 40000000 3f000000 -> c09e31c2 401e601c 40148c9e bd234feb", + "41732120 41964d28 422194ac 00000004 40000000 3f000000 -> 3fd443c6 4013fac6 c0cf88d2 3eafa404", + "421d30e8 c2417e56 c16a9674 00000004 40000000 3f000000 -> 3e207870 402e1318 c00d31a9 bdbb0dbd", + "41ad3088 4192faec 41e0ebdc 00000004 40000000 3f000000 -> 3f922eb6 3f9a38ae 3fac4a2e bbbc0d90", + "c1a80bfa 41cfa758 41c36eb0 00000004 40000000 3f000000 -> bfce4a7c 4080b78e c04161ca 3ce6003a", + "c1307d54 41054098 c205f240 00000004 40000000 3f000000 -> bff180c4 c0af54af bd916c58 beabd2f7", + "41e2baa0 412674f0 41dc451c 00000004 40000000 3f000000 -> 40c23a6f 4072fac8 40687514 3df21c59", + "3ffc51c0 c16be1c8 c22bda12 00000004 40000000 3f000000 -> 3f8d4fa0 408b8418 bf15e9b8 bda2a365", + "421c8b7a 4082e720 414cf5c0 00000004 40000000 3f000000 -> 40038344 40199cee c09343dc be50a682", + "c1dddc44 421a4f8a 4072e8c0 00000004 40000000 3f000000 -> be80b60e 40af223a 40866d74 3da6dd9b", + "c235afc0 c1cdaa74 412818fc 00000004 40000000 3f000000 -> 406a31c9 3e280ee4 c038d282 3e31ecc8", + "c23e2dbf 4200ccac 410751b8 00000004 40000000 3f000000 -> bedd0c22 c0566b1a c044be14 3f36da3d", + "be6e2000 c23a8975 4208fc78 00000004 40000000 3f000000 -> 3fbf3ea1 3fcc295e c01dcf8a 3e248dba", + "4100facc 40e859f0 c225b5a9 00000004 40000000 3f000000 -> c09b43aa bfcf26fc 40a4a82e bed50e15", + "42059642 c23ccd6a 3fe2daa0 00000004 40000000 3f000000 -> 409ecc87 c070c2b5 bd979e78 3e90e3eb", + "41c966c0 41fa3620 c203cd47 00000004 40000000 3f000000 -> c04fb496 c0dc085c 3fe7be9e be7649f2", + "c0d2c548 4155f7c8 414d9c3c 00000004 40000000 3f000000 -> c1037971 40057e85 3ef3d382 3e5a0b50", + "420c6e9a 413420b0 c2138ce4 00000004 40000000 3f000000 -> c088a555 3f5ed7fb c025d9ca bec3445f", + "c0fee140 4172dc20 42077be0 00000004 40000000 3f000000 -> c021f18c 4013ccda c01f2bfa bf2c27bb", + "4130d774 41d0799c c20d3652 00000004 40000000 3f000000 -> 403fb850 bf1ead25 40477b20 bd8ce43c", + "c1b35188 41883e14 c213cde1 00000004 40000000 3f000000 -> c0a3199c 3d79f2c0 bf329bd6 3f382e76", + "41fc57ac 41889008 c0bd6a80 00000004 40000000 3f000000 -> 3f0d807b bff37964 c0ae0530 3e779051", + "c2019051 c1bbb07c 422f06fe 00000004 40000000 3f000000 -> 40b6f230 3ee5d398 3d6b0f40 bd9ba618", + "c2081d16 421ccecc 409eccd8 00000004 40000000 3f000000 -> c0979f13 c037a524 c028cc27 3e8feb70", + "c18ddd70 c1edc2c5 c23b6e02 00000004 40000000 3f000000 -> 3fd4e086 40de25a2 3f854129 3e4097d0", + "4197b070 41949898 c18c560e 00000004 40000000 3f000000 -> 40612ddd c0467a52 c0404484 3ef09f0f", + "40a878c0 c21027e7 41b683ac 00000004 40000000 3f000000 -> 40a022a6 bf86d1dc 3f2af90d bda3f56e", + "c087aa50 41e6d50c c1c65cd0 00000004 40000000 3f000000 -> c0043118 c06cd194 bfa0d8af bebaf532", + "4223c77e c1f43cb1 41508a68 00000004 40000000 3f000000 -> 3f27aa97 4091fdc5 40d51226 be6232bf", + "c026cdd0 4126b9a4 c203ea5a 00000004 40000000 3f000000 -> c0b119e0 bfff0bec c01360e1 3e184e49", + "41c4b118 421adc04 c1b58c87 00000004 40000000 3f000000 -> c08f8809 40d1e891 3f815966 be4dfe38", + "419c6594 c19c3114 4220ec34 00000004 40000000 3f000000 -> c06320e9 bfdb9466 bf9a82e2 bf4cd386", + "42361838 c2409595 c16455bc 00000004 40000000 3f000000 -> c0badf42 4005d3ae bf435e81 bef68548", + "c2293bdb 40f21d88 40979a70 00000004 40000000 3f000000 -> 403fe7e4 bf81f5fa 40039980 3e08ef6b", + "c1d5a888 c1b47727 41c15e50 00000004 40000000 3f000000 -> bfd43abe 3fec4ef2 c031176c bd31abe2", + "c228728c 4035d520 c11059c4 00000004 40000000 3f000000 -> 3fd7ee39 3f831058 c02d1fab 3ee650cb", + "c2201ee2 41b89740 423a6abc 00000004 40000000 3f000000 -> 403d69b3 c08612f1 403f262a 3f1290cc", + "3fb4dd00 c230d93c 414192d4 00000004 40000000 3f000000 -> 3c14ba00 c075ecbc bf8f546e 3d92d95c", + "c101e0a0 41fe990c 4218b482 00000004 40000000 3f000000 -> 3ccb6f48 3f8fa07c 3fc8cfd7 3e2a60f3", + "42176086 42226458 c0199a30 00000004 40000000 3f000000 -> 406aa4ce c0493499 3eee6fec 3ee6b58f", + "41f8602c 41a1b918 4180f2b0 00000004 40000000 3f000000 -> 3fe65f43 c0b297b5 bfab0600 beaa4684", + "41d5e2b0 c109d68c c2460d38 00000004 40000000 3f000000 -> beb176f8 c08cee13 bf33b73c 3f02f41b", + "c1b2c043 414b79f8 421f3726 00000004 40000000 3f000000 -> c0b10ba4 bed816e0 409e291c becb6389", + "c2145a36 41bb8000 4185c3c4 00000004 40000000 3f000000 -> bf9c4a61 bf2cecb8 bf215406 3f2b55a3", + "423aea68 c01b50d0 40cca340 00000004 40000000 3f000000 -> 40d1c5ba bc8bd440 bff7a192 be93d41c", + "c1ff62f2 c1dc420b 3fb4c340 00000004 40000000 3f000000 -> c05caeb4 bf714bba bfe86cef 3e8d2a58", + "3f844e20 42043a0a 418508ac 00000004 40000000 3f000000 -> 40b9cd6a bfa66f2a bf2b8808 bf2f85ca", + "c1df8de9 c14937e8 421562c8 00000004 40000000 3f000000 -> c04577be bfbdc990 be0e7480 be390a5e", + "c1ecaa2c c1d69cb4 4203b540 00000004 40000000 3f000000 -> bd8086f0 402d4cf1 40114111 3cd02bb0", + "41735420 c1b2aa1c bfaca200 00000004 40000000 3f000000 -> 40afc6f1 4042d6d0 bf5bc13c bcb18eb4", + "c23fc850 c229484f c21af9ee 00000004 40000000 3f000000 -> c0110866 c0673a80 c06605aa 3de96683", + "42188434 c1bad7e1 42156724 00000004 40000000 3f000000 -> 4089ed3d c0a1cd06 bf9c87bb 3ea51fbd", + "421a79f6 c05c59c0 42103a10 00000004 40000000 3f000000 -> c08d49aa c0081df1 40162dc1 3e242417", + "41bd78bc 41f1db28 42207ed4 00000004 40000000 3f000000 -> bf74a815 3f8ed3be c0b4708a 3e9b6922", + "3f964d00 423c3b52 42468ba2 00000004 40000000 3f000000 -> 4084ec2f 400962c6 c078e719 3e8efeec", + "c1a0ee4a 4095e3f8 41036f44 00000004 40000000 3f000000 -> 40951681 3facc3de c01a73fa 3ea4a62e", + "c2312fb3 c1d18d5e 4115b62c 00000004 40000000 3f000000 -> 3e9b3fd8 4092bc05 3f67cfee bed83eac", + "c153c65c c15307a4 c229d5b1 00000004 40000000 3f000000 -> c05b2e8f 3d14509d 4059cb35 3e0bd33d", + "41f7c40c 410fdc2c c189aaf4 00000004 40000000 3f000000 -> 401e1cec 3f47793e 408bc51a 3df1cd75", + "41e62d24 40ca3370 c1fe4e93 00000004 40000000 3f000000 -> 3f092620 3f9af46e bf83e916 3d5df26b", + "c201c276 41472b60 c16f31d0 00000004 40000000 3f000000 -> 3f199dcc c01b605d 4074a84b bf04f648", + "c10d8f24 c21c91e6 417c2140 00000004 40000000 3f000000 -> 3e603160 bf8310ba be8dce40 3e2c8dca", + "40aede78 c22599cc c1e89238 00000004 40000000 3f000000 -> bf9b9db4 bf87d807 c08652a2 3f2899f3", + "41985a88 c1a456dd 41cf492c 00000004 40000000 3f000000 -> 4018b10b c0a7234a c0850444 bd1780f6", + "4175b028 41dacc24 c23cb38b 00000004 40000000 3f000000 -> 3ff2d00c c09b821a 3fd0031d be344ac8", + "41d40b04 41a70d48 c11a2534 00000004 40000000 3f000000 -> 4014cfe2 c0a0d4b6 3f83ecfe 3f0d149c", + "4216d728 42222210 4193ea4c 00000004 40000000 3f000000 -> 3f147d1a 3fe2c653 bffc01ff 3ecce6b2", + "c1ca4d25 411812e8 c2388e5f 00000004 40000000 3f000000 -> bfe54d34 bfd10a02 c08496d4 bec6f5b3", + "421d2d66 4174a518 41a6f334 00000004 40000000 3f000000 -> 3d53b84e 41049f07 401eb644 be2c7b49", + "c239243c c22b5dd3 418d3a0c 00000004 40000000 3f000000 -> 40aaab74 bfe3daff 4043c14e 3f22cc5a", + "4091e4f8 c2209c9b 4220f3f6 00000004 40000000 3f000000 -> bf33433a 3ede4d68 c08c9ff0 beffef54", + "418ec2b4 40c3f6a8 c200dd43 00000004 40000000 3f000000 -> c0391a89 c02bf3a8 3eb633d0 3effb8a9", + "40a25a40 c21fe9cf 4210cd38 00000004 40000000 3f000000 -> 402c05b2 401a67d1 409094a2 3f043015", + "c180f95c 41c35a18 c07a9b40 00000004 40000000 3f000000 -> 4081f4b7 c0898981 bc144700 3c8b2442", + "c14b6c48 c15573d8 423164c0 00000004 40000000 3f000000 -> 400d50e0 bf9840c1 bf04d676 3e182abb", + "4205c8f4 41ab44c0 41176014 00000004 40000000 3f000000 -> c0d46cda 3ee91cec 400000d5 3ed223a7", + "c2352227 c236237c 42187066 00000004 40000000 3f000000 -> 3dfa72e0 408786de c01963ad 3e281f58", + "4229b3d4 42243f6a 417c9180 00000004 40000000 3f000000 -> 3ed3ac88 3f65e74a c088cb9a be25b176", + "be8e3780 422b641c c23c39e3 00000004 40000000 3f000000 -> 40ccb3fe bf608f7a bf491d78 3ed627dd", + "c1967c2a 3fedda40 c08dd968 00000004 40000000 3f000000 -> 3f0a0c28 400c1864 4092bfe0 bbf7da04", + "42338eb4 3fe00140 c2423bf9 00000004 40000000 3f000000 -> bf9c146b 401fc01b bfd8cadf 3f170f38", + "40519df0 c20e0f5c c1f31da6 00000004 40000000 3f000000 -> 3fec542a bf0c20d2 406c2877 be70629b", + "420eb0a2 423e0ab0 c1e63187 00000004 40000000 3f000000 -> 40809f5c 40d0ae85 402d1f5f 3e0eeaba", + "420c29b8 c1e48b8a 412dc1c8 00000004 40000000 3f000000 -> 409d73d8 40600ced bef043be bef5127b", + "40854bd0 40753d60 c2078afd 00000004 40000000 3f000000 -> 3f9b76c0 4089fee0 bff00e5d 3e8251c3", + "c1dcc24b 4215b480 c1d93c9f 00000004 40000000 3f000000 -> c091b658 c0489ffa c08eae54 be816009", + "c221f31f c2309b90 422f86e8 00000004 40000000 3f000000 -> bfb1d0ea bf6b3701 40bd4849 bdea4120", + "c21a5e6a 4243fdea c23d3a57 00000004 40000000 3f000000 -> 3f74d39c c005729b c054bf5b 3e3aef87", + "41ec593c 4142232c c1f9b809 00000004 40000000 3f000000 -> 3fe5b186 c115e50b 3f2a623c be56dffc", + "c1cc60d3 c1ff046f 41546ae8 00000004 40000000 3f000000 -> c0883b9f 40625177 40d60bb2 3e707c27", + "c20ca360 c1d0ed46 41029d80 00000004 40000000 3f000000 -> c01f4530 400da160 40c948b0 bdd47c44", + "c115de6c c1302d8c c1daa5fd 00000004 40000000 3f000000 -> c003a8ae 40d9ac3a bdfab11c bed9f7f6", + "c0ab6dd8 42080b0e c1de9b34 00000004 40000000 3f000000 -> c082200c 40adcdff 4055275c be1b98b2", + "41c5e724 423f1854 41bf2f60 00000004 40000000 3f000000 -> c013c6df 3ead47b8 3fe8c572 3ea75881", + "c13c3ce0 c1f297be 4204224a 00000004 40000000 3f000000 -> 3fff5bb4 3f1285ea 4030ff34 bf23b822", + "c1b60019 c13bd698 c14c51b0 00000004 40000000 3f000000 -> bfb2f3c4 4080030c bfa66262 3e929c10", + "bea85200 c1b57692 c2325064 00000004 40000000 3f000000 -> bf0bbdb0 bf6e1ac8 c081bcf8 bf0b93f6", + "41f0c8d8 c1e295ec c07f59e0 00000004 40000000 3f000000 -> 3fa8bfb2 c08b97c8 c04a7a67 be928f60", + "3fd7bd80 4205ed1e 40302210 00000004 40000000 3f000000 -> 3ff41792 401f7496 bef7901c 3f00837e", + "4242fe5e 41bdda80 40167d80 00000004 40000000 3f000000 -> c037d40c bf0d7aa3 bf1de4ac 3da10a69", + "c244b2cf 4133842c 41eb19cc 00000004 40000000 3f000000 -> 4073414c be1574b8 c0514736 3d8c033e", + "40fe6410 41a19a30 423e30de 00000004 40000000 3f000000 -> 40b3f9ce 4083b144 be829ff0 3da460fd", + "c23d36ed c211deec c20ca0c8 00000004 40000000 3f000000 -> bf702828 c00bf16e 40d7e71e bf39c340", + "422dc802 41de192c c23a568f 00000004 40000000 3f000000 -> bfc7a19e be334c43 40878c4f be8eb25a", + "c24550b5 c1739ac4 c227b3e4 00000004 40000000 3f000000 -> 406f8c94 3f34e80d 3e10d310 be90d1aa", + "c1f02190 41b9619c 41ea9394 00000004 40000000 3f000000 -> 403b8a2c 40d7221e c044e2b5 3f32b625", + "c1f2b93f 4012caa0 c1d1031c 00000004 40000000 3f000000 -> c0c7f01d bf9b4342 c048dc28 3e3fb926", + "41fc70d0 41c64074 42233912 00000004 40000000 3f000000 -> c01b8cf3 4050a541 c0bbd73b beb25108", + "40fb58f0 c1741f30 c23f2bad 00000004 40000000 3f000000 -> bfbde2a8 3fffd822 3ffa69cd 3eda8773", + "c2176302 421bca7a 40b03be8 00000004 40000000 3f000000 -> c0b97938 bf85f834 3ef97358 3e0b9f76", + "419f55c4 c08360c0 c21ee232 00000004 40000000 3f000000 -> 3f3ff0a2 bfacf4e4 4010d3cc bf401e32", + "419e951c 41bf4cc0 c15722dc 00000004 40000000 3f000000 -> bf1844a6 3e19d438 c0d63b7e be58a62f", + "42320ac8 41f2488c bf063d80 00000004 40000000 3f000000 -> 3fc535c8 c013338f be2cce18 bd85f6e0", + "420df16c c1cb923f c1ca2d76 00000004 40000000 3f000000 -> 408ac5b3 3e8441f8 40fa4668 3d388ede", + "c1dce748 40c73ad8 bee3ef00 00000004 40000000 3f000000 -> 40691798 c0115d22 3f9fbde7 3f01b603", + "c23ff9d6 41eb6a44 42139bbc 00000004 40000000 3f000000 -> 3fa35b05 40e4786f 401dc9f3 bc7c8764", + "c14106ec c1926299 c21ec3ae 00000004 40000000 3f000000 -> 3f9189b1 3f9c4443 3fcefd9e 3e2e873b", + "41bb70b0 41e8b5f8 c1e47ed3 00000004 40000000 3f000000 -> 3f44b784 3f6606ec 4040bb28 bf143734", + "c1ac2d32 c1f5d66c 4211c0d0 00000004 40000000 3f000000 -> c01d338a 3beeb6e0 402dc61c bdf16ca6", + "421a53d6 c2479e9c c168ac70 00000004 40000000 3f000000 -> bff5c5ac 3ff97e63 400fbbd0 3e7890cd", + "42355c8a 42222c16 c1cb52cb 00000004 40000000 3f000000 -> 40d19544 bee3ab6c 3fe68be6 3f3f7bfe", + "41155eec c1d3c5c0 c1910ea5 00000004 40000000 3f000000 -> 406cc4f8 bdd55d70 c01937b2 3f0543f8", + "422c8ba4 c1993686 412dcbb4 00000004 40000000 3f000000 -> 400236fd 3eef459a c0b888c2 3e1da049", + "41ac29a8 c1c43721 422b8c88 00000004 40000000 3f000000 -> c0b0d76a bf875f46 4013d804 bf351afb", + "c1a13a80 c17d382c c1b2146c 00000004 40000000 3f000000 -> 40718e96 bf89f056 4089f4ae 3e36dac0", + "4244952e 4112b02c c1fb8e40 00000004 40000000 3f000000 -> 3f7f446e c084c4f2 bf4f8925 bd0afe96", + "c10bfc40 40bb27a0 40aa1898 00000004 40000000 3f000000 -> bfd3e954 408df202 bf52cec0 3f442fdb", + "c20ac768 41c1bd70 40e7de30 00000004 40000000 3f000000 -> c07fd71b 400312d1 3fb19826 bf7d548b", + "c099a6a0 4239f28a 418671d4 00000004 40000000 3f000000 -> 4010b748 3f00e024 c00f0a1d 3f0a8f0f", + "421b5d38 c10a7b64 40948cb8 00000004 40000000 3f000000 -> 3f8cc813 3fa8381e 3e3cc348 be8b92b0", + "3decf000 c230490e 41f185c4 00000004 40000000 3f000000 -> 3fb30742 bf5d0c18 409c2600 bf38454b" + ] + }, + { + "glsl": "vec4 cultmath_ridged_grad(vec3, int, float, float)", + "tolerance": "ulp-bounded", + "cases": [ + "c20feddb 422094e2 c17fd4d4 00000004 40000000 3f000000 -> 404718ec c0643e2f bf9650f4 3f49a955", + "c2476d55 4150d284 c18a6b8c 00000004 40000000 3f000000 -> 4036f044 40bbbe95 be16d928 3f505676", + "c201408c c2248579 bfb5f360 00000004 40000000 3f000000 -> bf69961b 3dfc4800 bf0881ab 3fcbcabc", + "c1bfae64 418352e4 c22f15bc 00000004 40000000 3f000000 -> bfa88d6e 4011ec01 bfcf15a7 3fb08f7f", + "c2025036 c0cd5348 c0a2b7c0 00000004 40000000 3f000000 -> c0c99f9c c04edc46 c0328d31 3fbc9b67", + "422ecace c1a5578d 4121a2fc 00000004 40000000 3f000000 -> be8f06bf c0457f62 bfdcdf9e 3fc3a10a", + "418f0fe0 c02ad1b0 c0b81c78 00000004 40000000 3f000000 -> 3d94c500 3e0eef46 c035b2e9 3f950bbe", + "41f123a4 41f047e4 c206b2a2 00000004 40000000 3f000000 -> 403a55fa 3ffee79a 4008a70b 3fa2e591", + "418ab5a8 c20f7372 c1b7aad3 00000004 40000000 3f000000 -> 40ecff51 c0a0f518 c0aa61ce 3f83e537", + "4170ff08 c236d194 421e0396 00000004 40000000 3f000000 -> 40e0b8bc bf8ea3ef bf00df14 3fcde1b3", + "c22f1eaa c1e4c34b c1f3a505 00000004 40000000 3f000000 -> 4099b400 3fd94a14 bf2cc80e 3fdd0053", + "c2153659 c208af65 c0bf1760 00000004 40000000 3f000000 -> bfc0c20c 3f456c08 3fff02fa 3f9663f0", + "422eeb00 42440282 4238776a 00000004 40000000 3f000000 -> bf37f62a be699d48 c0c193ae 3fae5c01", + "420f6ea6 c1d37d06 c0415930 00000004 40000000 3f000000 -> 400b8dd0 bf143882 3fa59342 3f937a03", + "c22d0d53 421d0fcc c228caba 00000004 40000000 3f000000 -> bfd7c7c0 c0a12c92 4085e67b 3fc86583", + "3f823060 c1b1c93c 4039cf30 00000004 40000000 3f000000 -> bf54efeb be3a4000 3e9d2b2c 3f654e39", + "c1e0e03b 4234926a c217f313 00000004 40000000 3f000000 -> bfdb47cd c0fb14b1 40b1acc1 3f9180e8", + "423228d8 4200ee8a 41099038 00000004 40000000 3f000000 -> 4015e1c2 3fb5645c bf18329e 3f8aa71e", + "c160e640 c180ff5a c21f8f11 00000004 40000000 3f000000 -> 3f074f29 c04e1852 c02e7c0a 3f88a0ba", + "c2014292 c1899054 bf8afda0 00000004 40000000 3f000000 -> 3f689c00 c0c2c63b 402c2b28 3f860b87", + "c231605c 4027fb00 c235b3e4 00000004 40000000 3f000000 -> 3f89275a c083eae0 40931276 3f89845d", + "4111333c c1f17111 c09fa740 00000004 40000000 3f000000 -> 3f5e3f0a 4052c2fc 4068b892 3f7ecae8", + "4212bcc6 c23519dc c1b1f607 00000004 40000000 3f000000 -> 408e1689 bfdc786e 3f9a9a59 3fa72295", + "c244740d 4247dfce c19d5c92 00000004 40000000 3f000000 -> 4025f679 c01936ce 3f8330b0 3fa5ce9b", + "415fc554 4200194a c1d1dd30 00000004 40000000 3f000000 -> c026c4e8 bf9e1df0 3eb207ac 3fcae4d7", + "423d1204 41bb3e4c 42231428 00000004 40000000 3f000000 -> c0281b72 400d7152 402cff7c 3fa7ac79", + "c225e7e9 c206b6ae 4211712c 00000004 40000000 3f000000 -> bf92e953 3f277f22 4083e796 3fb961e7", + "41c11b48 c0da80f8 c2236400 00000004 40000000 3f000000 -> 402ad6aa c043cc0a bf9535c3 3f97ad98", + "41dbed50 c2194782 c12d40b8 00000004 40000000 3f000000 -> 409f28fe bebd0560 c07dbf2d 3fbcb519", + "412f25c0 41d6066c 41ffa090 00000004 40000000 3f000000 -> bfd0312e c0471400 40e19e88 3fbbbece", + "c180a7b4 41d05b24 41819558 00000004 40000000 3f000000 -> 3fd9cf27 4037754c c01d9cfc 3fdaa9ff", + "c0330a90 41f19e04 41a7839c 00000004 40000000 3f000000 -> 3f9f3593 3f839573 c0462cb1 3fb44252", + "c0f30d80 c015a220 419b90a4 00000004 40000000 3f000000 -> bfc32a9c 3f5c1c60 3e6727e4 3faaf18f", + "414ca8b8 416552f0 c1d79583 00000004 40000000 3f000000 -> c07f94c1 3f6fff3e bf362df9 3f905ad5", + "c1c6d013 c1e7f822 4234b29c 00000004 40000000 3f000000 -> bfae8952 c0e66e2f 3fbbff6b 3fcc2c90", + "41fd766c c19b90fa c2472ac1 00000004 40000000 3f000000 -> 3fd08c2e bf758741 c04febad 3f9c59ac", + "c172b568 c1352e50 412784b8 00000004 40000000 3f000000 -> bf4c7bb2 bfef6c50 406ff99c 3facb390", + "c1f54671 c2235aa9 c206117c 00000004 40000000 3f000000 -> 3fa61001 4067a97e 3e2d1d38 3fa11eec", + "4148db9c c193dc00 c2223031 00000004 40000000 3f000000 -> bf5ac728 bedcb004 40d45cd1 3fa66da4", + "4235b01a 41fcac4c c2277106 00000004 40000000 3f000000 -> 3ffa198d 3f530e12 3efd5c66 3fc7e25c", + "c230a4ba c1c21953 c1b03a24 00000004 40000000 3f000000 -> c07f73a0 bebd8fa8 40578c76 3f866630", + "c0865a58 4187bf9c c1d09b87 00000004 40000000 3f000000 -> 40150a7e 40c3d334 40874532 3f9e2388", + "41621c30 c204de02 c240b5b8 00000004 40000000 3f000000 -> c0178777 bf1edcf6 4043f35e 3fb56dfc", + "4034f9b0 409b9d98 c1c20d74 00000004 40000000 3f000000 -> beacc3dc beef40de 403377a0 3fde5282", + "c1e56857 c08890c8 3ffe92c0 00000004 40000000 3f000000 -> bd4606e8 40124c7e c0b5dbad 3fc7f12f", + "4154efb8 bf814a40 c1dea81b 00000004 40000000 3f000000 -> 4091a7fd 4000cb47 bf2d4a6c 3f757079", + "c210169d 42373b74 41f901f4 00000004 40000000 3f000000 -> c087d3c3 bfc05e52 3fe5db41 3fb065a4", + "c13095b4 c1bf126b c13ec4dc 00000004 40000000 3f000000 -> 3fa4585d 40765fac c041f50f 3f8a6684", + "c1e421ce c20db0a2 41871074 00000004 40000000 3f000000 -> 3fa5540e c02b37aa 3f8a9822 3fb50d57", + "be91ec00 420a9872 bfa85fc0 00000004 40000000 3f000000 -> 41035970 c0a9ff5a bf10f894 3faa5bb4", + "4137c7f8 c0411ca0 41809f70 00000004 40000000 3f000000 -> bfa7bdec 3efe5840 408527d9 3fae2fc8", + "4134e568 40de7748 c1367a6c 00000004 40000000 3f000000 -> c0375c9d 40d98758 bfbe174a 3fe36717", + "42345252 41eac680 40812108 00000004 40000000 3f000000 -> bf42a664 40403bb4 402b7992 3fb285c3", + "41aa00c4 c201cbd6 c210ea7a 00000004 40000000 3f000000 -> c108423e 409d2501 405da022 3fbfac94", + "42418af8 4200030a 420740b8 00000004 40000000 3f000000 -> 3f1512e8 3efcc177 c0841891 3f9e99de", + "c1746060 424010f4 4156ddbc 00000004 40000000 3f000000 -> 402cb948 40862a1e c04cb3bd 3fa6800d", + "4167e7b8 4244faf8 42021c52 00000004 40000000 3f000000 -> c070e14a c09aa2c5 405e44f5 3fcc4b73", + "421523de 41fb8d70 420f1ab2 00000004 40000000 3f000000 -> be0f5f60 40716df4 40442d51 3fcb48f7", + "c1b7e402 41870164 42467c8c 00000004 40000000 3f000000 -> 40165fda 3f4afd8e 409d1224 3f819d7e", + "421f9424 c1cd74c8 40190700 00000004 40000000 3f000000 -> 3f9b7740 3f7af71e 3d9b4f20 3fa30367", + "40e15010 c20e551d c18eece6 00000004 40000000 3f000000 -> c012b794 c02188c5 c0312198 3f9f4bae", + "4048d450 42255d9c c2287a82 00000004 40000000 3f000000 -> c00677e6 404f85aa c05ed7dd 3f81cea8", + "411aa634 412049e8 421b1efe 00000004 40000000 3f000000 -> 3fbaa3b5 bfc1536d c04afeec 3fb91f60", + "c2126ccf 4191d338 419d24d8 00000004 40000000 3f000000 -> 3f230048 be9b267a bf9233bc 3fcc9142", + "41910fa0 c0e8b7f0 41e20e90 00000004 40000000 3f000000 -> be1ff9e0 bfa91b4f bf7f6d92 3fbb3c25", + "418ad6e8 c116c190 c0bc6200 00000004 40000000 3f000000 -> c068af50 3ff8faa7 3fa74cec 3f6bb446", + "40887080 42130730 c205c194 00000004 40000000 3f000000 -> bff6edd2 3eac4f2f beb08e0a 3fa53ee8", + "c23a2f34 420ce23a 420d9d7a 00000004 40000000 3f000000 -> bfe88805 40611a7e 40327597 3f6f5d56", + "41814160 41c19c40 41789df8 00000004 40000000 3f000000 -> beeacfe6 bec90980 be61a874 3fb67f6a", + "41f26a10 c17b5298 42204e36 00000004 40000000 3f000000 -> 409f72c6 4096f7e7 c08b05ed 3f9612d0", + "c1306c98 c23341d3 40a0ed28 00000004 40000000 3f000000 -> bf45fcf4 c075d2be c03249e7 3f8068b4", + "c2416c4e c20f29a1 c23b76b8 00000004 40000000 3f000000 -> 40f28842 c0010de6 c11a2a18 3fcf2c02", + "41fd17f0 c0981270 4222a56e 00000004 40000000 3f000000 -> bf634538 bfb9709e 3e94035f 3f81cb1b", + "41cf7678 41c87cb4 c1400620 00000004 40000000 3f000000 -> c079b4d6 c081efef 40861e3e 3fbe0176", + "41c530e4 3f8cd7a0 c197dd4a 00000004 40000000 3f000000 -> 400f6ebc 40127d4d 40341a19 3f98391d", + "c214761b c1f6c7e9 c1348928 00000004 40000000 3f000000 -> c006c4ef 3e4ae17c 3e61ff20 3fb79df2", + "c229ec96 411a8a28 c1bd9dd4 00000004 40000000 3f000000 -> 400f3009 407b7304 3f402e36 3fcdbce0", + "40b04660 c165e7b4 c1470650 00000004 40000000 3f000000 -> 3e807de4 3fa9d7c8 409a2d42 3f7fbda7", + "c162b7f0 40659360 c1a66eaf 00000004 40000000 3f000000 -> c034b0a0 c0cb209a 402f3794 3fe36f7c", + "c0513ec0 4213ec94 c2037084 00000004 40000000 3f000000 -> c0899395 bf27cf00 c06ced67 3fa3131a", + "c0f51000 41eae90c c1c231c0 00000004 40000000 3f000000 -> c054f570 c110db3d 406033d1 3fbd26a1", + "4242d0c8 41c35cb0 4150adc0 00000004 40000000 3f000000 -> 3f84aedc 3e650d3c c09331a5 3fcc8410", + "c20d8b38 4183e83c c1abdaba 00000004 40000000 3f000000 -> c01bde11 c0950623 be09f2dc 3f78ca20", + "41c8fc00 420edf7c 423551ec 00000004 40000000 3f000000 -> be57da00 bf24b5a0 3f256480 3fc8a2f7", + "405ce520 41e2a5ac c219372a 00000004 40000000 3f000000 -> be396680 bc12f480 3fbd776a 3f8f2e62", + "41e47fe8 c1a98f4a c17e120c 00000004 40000000 3f000000 -> c08e6163 bc0c2580 3f972113 3fe1231f", + "408c60f8 40516cb0 40a190b0 00000004 40000000 3f000000 -> c00fbb8a bf90645c 3ef93224 3fc410d8", + "c1b96c6f 41b6433c 41c511a4 00000004 40000000 3f000000 -> be9d6b70 c04794a9 c09b0317 3f7aaa5f", + "415c7488 4205dc0e 419c7034 00000004 40000000 3f000000 -> c0325f7a c026bba6 3fdd0186 3fa0e373", + "c20220c6 417d06b8 4129f4a4 00000004 40000000 3f000000 -> bfb272b0 c0cfae24 4026fe10 3fd7d982", + "41bf8140 c1718068 41044474 00000004 40000000 3f000000 -> c01ff306 4079577c 3ffac84f 3fcf7f07", + "41bc2be4 c183458a 4236c9d4 00000004 40000000 3f000000 -> 407f5667 c02a0918 405a6f47 3fd3ed5d", + "c216e8a8 41cf8f50 41d570cc 00000004 40000000 3f000000 -> 4061a11c c0257d94 bfe91c78 3f97de98", + "418fcbd4 4241151e 402a7ec0 00000004 40000000 3f000000 -> 40798616 3feeafa4 c0f3b71c 3fbbae09", + "c21f34ed c18cd52e 41bf861c 00000004 40000000 3f000000 -> 3fb3376a 40151f99 bf47b93c 3fa958b0", + "c19841ab c23fc586 40e999e8 00000004 40000000 3f000000 -> c0b238b7 403115ca bfc89626 3fe73142", + "c1c114d5 40e89088 c1c9be4a 00000004 40000000 3f000000 -> 3f9d36f6 3f3c0756 c086c39a 3fa08cc1", + "42344d2c 42295ff6 c182546e 00000004 40000000 3f000000 -> bef84538 405630bc 40810f6f 3fca794e", + "41417598 c209ebc9 c22dad16 00000004 40000000 3f000000 -> 4026c61a c04c0876 bf5f5e1a 3fa7e84b", + "3f8bca00 c1713164 4223d24a 00000004 40000000 3f000000 -> 3fa9fad1 4041700a 409e8c65 3fc53010", + "422df356 423c958e c2454d90 00000004 40000000 3f000000 -> c0848916 c0206c5a 40b8fa10 3f96edbc", + "418f2af4 c243429e 3f4fe580 00000004 40000000 3f000000 -> 40a08673 40a4471e bff21aa8 3fd7296a", + "c14efcc8 41ef70c0 c0a85330 00000004 40000000 3f000000 -> 3f0ee1da c106970c 408125c8 3f498874", + "c20800ff 41825134 40370b10 00000004 40000000 3f000000 -> bf5bd4b5 3fe28ceb 3f2597a8 3fbcbf89", + "40ee18b0 4211a634 40a00d70 00000004 40000000 3f000000 -> 3e83bfc8 c0310f18 40176286 3f978736", + "c23e75d7 c205814a c119cf30 00000004 40000000 3f000000 -> c0473355 c056a1ce 4064108d 3fbb74f9", + "c2453a3e c1898414 41fb4328 00000004 40000000 3f000000 -> 3d585610 402186a4 c05c3380 3fbc1e63", + "c216fb24 422669a4 c225d062 00000004 40000000 3f000000 -> bfd8d0d6 bff55e2c 3ff9a560 3f097b86", + "c1628ec8 41e6e6e8 c0ee0080 00000004 40000000 3f000000 -> bf04423e 40414a20 406644b0 3f91e19c", + "c1cb8959 c21a4774 c1ff6df7 00000004 40000000 3f000000 -> 4053413f bec832b8 3f634b48 3f9441a9", + "421c76ec 4132e424 c10faff4 00000004 40000000 3f000000 -> c059cadc 41138eb0 4078f83e 3fde8a3d", + "420ee61c 41c3e528 c2438072 00000004 40000000 3f000000 -> beec4010 c0bb8377 bf329fda 3fa1717d", + "3ffeafa0 c0f65338 c1964ff2 00000004 40000000 3f000000 -> 400ccb20 3e2c1609 410233c6 3fdb0fb2", + "c1d6f911 422f9e5c c1defbce 00000004 40000000 3f000000 -> bece9af0 c09e7b39 c021a726 3fc43845", + "c215c25c c220896c 4223e976 00000004 40000000 3f000000 -> c04952bf 40cd48cd 3fb5f1d0 3fdcec2b", + "41af6054 c145d7ac c230463e 00000004 40000000 3f000000 -> 40878b96 bf02479f 4068b6c0 3f70887e", + "41e5a838 411b4cf4 42439582 00000004 40000000 3f000000 -> 3f8b39f0 c013059e be3a9f58 3f726e62", + "41818d6c 3ecc4680 c23f8a50 00000004 40000000 3f000000 -> 3fb36ddf 3fc85612 c090d437 3fb12797", + "c221cf4a 41f9dcf4 c231d415 00000004 40000000 3f000000 -> 3f46aa72 c0046a62 3fb509ca 3fd615f4", + "422882d4 c18f8da8 c1dd6c24 00000004 40000000 3f000000 -> c054dc8e 3f18670e 3d977020 3f5fbe2a", + "c2270059 c215fa85 4193ffa8 00000004 40000000 3f000000 -> 3fde0722 c0b0acd4 40a49729 3fa13fda", + "c1baa6d5 c1b8efd3 c233906f 00000004 40000000 3f000000 -> 3fd8dcda c0896764 3f74a1b2 3fc53d99", + "c218a350 41adb9f4 c2184c61 00000004 40000000 3f000000 -> c0a7a1c5 4016b630 bd6b67ac 3f8e7b1d", + "40782200 3eca5680 41c29238 00000004 40000000 3f000000 -> 3f89d28c bf8bfc9a c0629459 3f8b7e84", + "c2234bd4 41dc8498 c1318198 00000004 40000000 3f000000 -> 408e16f4 403bd988 4069407e 3fa16196", + "41147dec 4246c738 41fde620 00000004 40000000 3f000000 -> 3eb8bf67 40426c4e c08916db 3f8cae9c", + "c201b9d8 415eb090 c10c5a84 00000004 40000000 3f000000 -> bfa835de c0234294 404cb694 3fcae572", + "c155e74c c084c640 3fdca9e0 00000004 40000000 3f000000 -> bdc47f08 40acc577 bf865357 3f9cef46", + "c1f698fa c1d89f96 c21cdf84 00000004 40000000 3f000000 -> 3ed9f67a 3f709720 3f2ef514 3fbc7774", + "c13186b8 41d16acc 422d041c 00000004 40000000 3f000000 -> c0ece2d3 beaaec34 c00199b0 3fc1517f", + "423653a2 411dcaa8 c21f0392 00000004 40000000 3f000000 -> bfe1b397 400511b8 c0889788 3fcbf134", + "c22471e7 c20c7c2f 41fb31c8 00000004 40000000 3f000000 -> 3fac0ee0 4003d654 c111646e 3f8410e2", + "40682440 420f910e 4203ee7e 00000004 40000000 3f000000 -> 3fa283e0 be110a88 bee4a9f4 3f87efaf", + "420f79e6 41214de4 417eb468 00000004 40000000 3f000000 -> c04d004a c0143860 c0b147ec 3f9f6110", + "42300624 c1c95c0a c222c16f 00000004 40000000 3f000000 -> bfb1e66c c0e232c9 3ffb5663 3f87444d", + "c1cb6736 40e09448 41b6ac84 00000004 40000000 3f000000 -> 3ea7e8c8 bf87de0a 408f09b8 3fcdd90b", + "41535860 3e889d80 41fc4e80 00000004 40000000 3f000000 -> c031d92e 406c5e3a 3ddb1c70 3f9f518a", + "c1d18e48 41c47958 41911a10 00000004 40000000 3f000000 -> 3f1e5351 400e7fc0 407b2e0b 3fcbd01e", + "41f8c11c 41acf2f4 41853c84 00000004 40000000 3f000000 -> 4008064d 4082d813 40611dbd 3f997aac", + "c204e57a c22a06ee c238281e 00000004 40000000 3f000000 -> 40837ddd c06b0d11 c084d72c 3fc0c0a7", + "42314f16 41b77cbc 42362792 00000004 40000000 3f000000 -> bf9a3613 3f7ed181 4017d6b4 3fb80a43", + "c1faa0f8 4104b9f4 42222204 00000004 40000000 3f000000 -> 408f71b5 bf8e6382 40cb9e7f 3fb3290c", + "416132b8 c246d9ed 414af9e8 00000004 40000000 3f000000 -> 3f4f455d c0652f3c bf4d8ee2 3fba415c", + "40f035b0 c23162c9 c210c9d6 00000004 40000000 3f000000 -> 40037148 3fe84fa2 c00decfc 3fdebf79", + "42430492 c192677b c238a755 00000004 40000000 3f000000 -> 3f40faa2 c082f128 3eca101e 3fa7a972", + "41ca7884 c0ebffb0 c1e7d585 00000004 40000000 3f000000 -> bf8173ac c0488fb2 c0896110 3fc9cb66", + "c0f2ca10 4232671e 417e76b0 00000004 40000000 3f000000 -> 408e3848 40798524 bfd62564 3fb09df2", + "c140d718 41cd9078 c1c0b7a7 00000004 40000000 3f000000 -> bf5b652d 40844dea c0ca92dd 3fd31542", + "c2192326 41ae358c 420d35fc 00000004 40000000 3f000000 -> 3f266f23 c10e78ba bf0b419c 3fac3c1c", + "c0fc84d0 c1b1a4ec c0d7ad40 00000004 40000000 3f000000 -> be729f70 c00b8dfa 3fc6699e 3f6b8564", + "c20d0560 c1526108 41e32ff8 00000004 40000000 3f000000 -> bff58a71 c0305c9f c023b168 3facf8a8", + "41e82d38 42262ad0 4214951c 00000004 40000000 3f000000 -> 403231bc 40c29f8d 40028a36 3f8f7fa2", + "41a30b14 41caad3c 418446fc 00000004 40000000 3f000000 -> bfa3e2b2 3ff651af 4093b872 3fa8a3b0", + "c1f9c6e4 4127fedc 40d763b0 00000004 40000000 3f000000 -> 40b00b87 3e041649 3f8686d8 3f9b96f6", + "c21f6838 c23130a0 c0ac5fe0 00000004 40000000 3f000000 -> bf55e6d8 bf9b0a89 c031f3a2 3f9ac39f", + "418de230 c1c79769 c0e47cb0 00000004 40000000 3f000000 -> bf47071e bee77bc0 409f82f5 3f96e4aa", + "4164d170 c230dbb4 c1a80d23 00000004 40000000 3f000000 -> c07fcdef bfa363a6 403e2046 3facaa86", + "c08bb7d8 41c2e790 c2146e0b 00000004 40000000 3f000000 -> bf6cd0fe c014f588 4091cec9 3fa5edee", + "c13f1728 40cc26d8 423cf622 00000004 40000000 3f000000 -> c0bf8394 bee1acae c025e1db 3fce40ca", + "419d06cc c22c2d56 421213b8 00000004 40000000 3f000000 -> c0b842a2 bf681908 4030d86e 3f86f760", + "c23313fb c1e0456f 41b3f114 00000004 40000000 3f000000 -> 4004a9e6 bff28b87 c07d4cd2 3fd19a53", + "c1f497bb c0e79f48 41966af4 00000004 40000000 3f000000 -> bfc24331 c079fd6a bda58890 3fb3fd5a", + "c1698748 c1f22418 c11d7a38 00000004 40000000 3f000000 -> 40947279 3f1fc022 bf0c1f5c 3fbfb825", + "c2053c71 c2344946 418a52d8 00000004 40000000 3f000000 -> 402dd345 40432d49 c0a8ce5c 3fc775f2", + "408f8df0 c1d2eba1 c17e6264 00000004 40000000 3f000000 -> 40609113 406e766e c10e6be1 3fae3df9", + "c2234ecb c1b19b1a 419ff1b4 00000004 40000000 3f000000 -> c08e0e07 bf31f46d 3e0fd0cc 3fcc4ba1", + "41fa6054 c0c0a1e8 c0519850 00000004 40000000 3f000000 -> be072c78 404c49c5 40a932d6 3fc7d95b", + "c0f1d360 41de7614 c1dfed85 00000004 40000000 3f000000 -> bfd21281 bee67500 c082cf3e 3fc9c76a", + "c20eef17 4198e334 4147cfd4 00000004 40000000 3f000000 -> 3f9daa7a c015c4f4 40976286 3fc7fa83", + "41781820 c1108e68 c16d6828 00000004 40000000 3f000000 -> c064c192 3f98f042 bfb26640 3fdf1bc0", + "421f9efa c244fddd 419307ec 00000004 40000000 3f000000 -> 3f2a7504 bfeaae34 c0e03af5 3f9f02a2", + "41f01f90 c211cf77 c1377648 00000004 40000000 3f000000 -> c04d3265 c058cdaf c084b1d2 3fa93cbb", + "4208f3ec 4222e3a6 414f0d28 00000004 40000000 3f000000 -> 3f7c1a16 40764999 bfed2054 3fbc9f41", + "41ce7d14 c18d5a2e c232b9a9 00000004 40000000 3f000000 -> c0d19af6 c0ebb958 bf3d57e6 3fc08039", + "c23d3108 c018f340 c244926e 00000004 40000000 3f000000 -> 402c348c 401f2984 3fe0eaf2 3fb84158", + "413b4010 42249746 3f3a6640 00000004 40000000 3f000000 -> bcce7980 3f686e30 c0918ed7 3fb83acb", + "41e65518 c1a8edfc c1ab5b30 00000004 40000000 3f000000 -> bfd7dd24 4014db7c bcace5e0 3f7ce58c", + "c1b60570 4219533c 414f9b9c 00000004 40000000 3f000000 -> bf8a2a46 405af386 3ec1639c 3f742a6f", + "c1234b14 414c99c4 c0baee10 00000004 40000000 3f000000 -> c03d1a07 bf06433a 3fc7ba56 3fad8cd9", + "3ef7a580 c2335cc6 41bd34f8 00000004 40000000 3f000000 -> c0b4b824 40a971af bf1bdce0 3fca65d6", + "c22ebe7b 419f3050 41e6231c 00000004 40000000 3f000000 -> bf914dbd c09aa6a8 c0865c7f 3fcaf898", + "c2340484 c1b9b6d4 c2374b69 00000004 40000000 3f000000 -> c0234901 bf0309f0 3f8af55a 3fc7c656", + "4243a576 41c3c3f0 c21fa65a 00000004 40000000 3f000000 -> 3f2f2580 4045cd32 4086f1a8 3f87d35d", + "423644fa c1c88572 c14ec4c8 00000004 40000000 3f000000 -> c02e79c4 3f810a2a 3f72f558 3fb9651c", + "c22bca6f c2320e61 c2196725 00000004 40000000 3f000000 -> bfbc99be bff3090c 3fbafd7c 3fbdd46e", + "c1097f70 c1242590 c19e6b83 00000004 40000000 3f000000 -> 4005ebcf bfce8a17 be855304 3fca1427", + "c1e6c8a8 40240e50 41dfb4ac 00000004 40000000 3f000000 -> 3ff42693 c0844240 402bbd40 3fc03a3b", + "c218f5a5 4212db7a c217ac9c 00000004 40000000 3f000000 -> 3fcaf2b9 bf05bd9f 4006a2e4 3facf540", + "c22dac72 414a86c8 c2165119 00000004 40000000 3f000000 -> c030ff8e 4092ab66 3fb56e01 3fb02cce", + "c23262f2 c11c75d0 3f428600 00000004 40000000 3f000000 -> be889c30 c04779fd 40a37392 3fc71f35", + "42318032 c181f6bc 420e406c 00000004 40000000 3f000000 -> bf20a374 3fcdf12e c0806b68 3f66b710", + "421d28cc 419bfa0c 4146eb04 00000004 40000000 3f000000 -> bfe54590 bf2d24d6 bf14ce88 3fd3af41", + "c1bb966e 423ed37c c1e96792 00000004 40000000 3f000000 -> c050c02e bfd03225 3f3ca737 3f9c7c8d", + "423ab8fa 414caa38 c2054ab2 00000004 40000000 3f000000 -> 3f6c93fc c0a2ae2e c01c7c31 3f87062f", + "c115c030 4204e594 c2383446 00000004 40000000 3f000000 -> bf33278e 3f8b0668 c089e371 3fd8438c", + "4226039a c1ee7091 4203619c 00000004 40000000 3f000000 -> bf9b0298 bf2b7178 bfe8f93f 3fdb4c00", + "3fa9c160 42418d18 c1d7a057 00000004 40000000 3f000000 -> bf92b816 bfa70052 bf002f7c 3f9cb250", + "c2102800 c1a558c1 40262550 00000004 40000000 3f000000 -> 3f9ca51e bf48e824 40146c9d 3fbb5c5f", + "4236c028 4232372a 4204bcae 00000004 40000000 3f000000 -> bf810cac c00e2997 3feebead 3faaa108", + "41857c54 4241a7f0 41620b90 00000004 40000000 3f000000 -> 40401c84 3fa34a2e 4025a531 3fbd1459", + "422705b0 422e0868 c17c0250 00000004 40000000 3f000000 -> c06fe9ab 405fe58b c051a3d3 3fc8491f", + "41153e38 c2433b37 4224b8a6 00000004 40000000 3f000000 -> 403f8abe c00a45dd 3fc2c342 3f95fafd", + "3fc1cc40 c200f33d c1602d98 00000004 40000000 3f000000 -> 3f4a4420 c00e2496 be108b4a 3f8b3b26", + "bf4879c0 c20c94a4 c0fee6f8 00000004 40000000 3f000000 -> bfabb014 3f884cd2 4044a390 3fb485c3", + "c22281f9 c1cc3a9e 421f1658 00000004 40000000 3f000000 -> 400279a0 c05ed5de bf9d8534 3fcc0e75", + "41349418 41a8f4d0 c23a0a1a 00000004 40000000 3f000000 -> 40b6f5ed c061e89c bfffe8ba 3fc31808", + "c2277856 c20bb00c c0f13030 00000004 40000000 3f000000 -> 4047704b 4052d716 406d090b 3fbaff23", + "c1a3656d 40827810 c102aa2c 00000004 40000000 3f000000 -> 3fc0103f c06765ea c0194596 3fbfc04d", + "c1b24b7a 41f35060 c2364efe 00000004 40000000 3f000000 -> c08cceb2 c057c390 bf5381e4 3f068a0a", + "c18843d4 422e68a6 41c78bb8 00000004 40000000 3f000000 -> 3fe133cc 406ec9f8 3d177640 3fb65a26", + "41e9fc28 411dda78 42452b8c 00000004 40000000 3f000000 -> c0cc4987 4011c4cc c011bf86 3fb1e8b0", + "40d64a98 c2344cb5 419a444c 00000004 40000000 3f000000 -> bfa10904 3ef72b24 bf8cc006 3fbc031a", + "4201b5e2 41fa80cc 420020cc 00000004 40000000 3f000000 -> 40faff46 c032144b 3d951890 3fb7d03c", + "c214ecea c1202b24 c23e450c 00000004 40000000 3f000000 -> c0671420 bff998e2 3f28cba8 3fcb860e", + "c0492fd0 c23f900d 420621bc 00000004 40000000 3f000000 -> 3fbe4293 40753ba2 bf55f460 3fba397d", + "41f81968 c235a608 c2348f12 00000004 40000000 3f000000 -> be17535e c0319bad bf9119d1 3f4ebb5c", + "414d2ff4 c179937c c1d4867b 00000004 40000000 3f000000 -> 40b5d676 c0588518 bf9e8d3f 3f91eb4e", + "41ed8d90 4108da04 420557fa 00000004 40000000 3f000000 -> 406cde2b c02f2929 404b7aad 3f9f3c84", + "c1e2ae2a 4142e198 c1291a6c 00000004 40000000 3f000000 -> 40f831a9 bf912122 c050000f 3fcb142e", + "4229a9f8 c1931569 c1e9c6d0 00000004 40000000 3f000000 -> 40924fcc c042d9a5 bf6361ec 3f7c7320", + "421307a2 c1fb9f67 c1ceb7c6 00000004 40000000 3f000000 -> c0328769 c07c5aed 3fe85ece 3fbe731b", + "4130baf8 419fc00c 409fa5e0 00000004 40000000 3f000000 -> c0e2b87a 400333c6 c0deb02b 3fbdb37a", + "c0e84350 402b4b40 c1f3a133 00000004 40000000 3f000000 -> c0c088da 3faa1f96 409c3b2d 3f604c91", + "c1ec179c 41e6de48 421f3a02 00000004 40000000 3f000000 -> 3e8c9ac0 409291e2 bfe46acc 3f7e1fce", + "c1e455ca 42357494 41c8b578 00000004 40000000 3f000000 -> 3fdd36c3 bf225174 40158a26 3fcf425c", + "c11f83e8 4202e048 3ffbe200 00000004 40000000 3f000000 -> 404f4ab4 3fcc27c8 bf89e7a5 3f71b1b3", + "4104cee8 c0532700 41ce9c70 00000004 40000000 3f000000 -> c02120e6 c0f3d537 bf8a7c5c 3fa7e3c8", + "42464014 41a12434 41133614 00000004 40000000 3f000000 -> c0ef075a 3e7314ac bfe23d9d 3faae50b", + "3fc12320 4246374c c242bfe2 00000004 40000000 3f000000 -> bfe26f74 bce73d60 3ebecfd4 3fd379dc", + "c2082c6f c16f7e64 c0e828e0 00000004 40000000 3f000000 -> 40282e88 408777a7 40936413 3f92c1dd", + "c1a12e80 42200bec be9a7280 00000004 40000000 3f000000 -> 40c0bd28 407b36e0 c0106d75 3fa8e4d2", + "413410cc c1bfe91a c1e4762b 00000004 40000000 3f000000 -> 4025e1ca 402f0953 c05d8ad1 3fd286d2", + "41e22db0 420f3e46 c18ee028 00000004 40000000 3f000000 -> c0bb09e8 3fc8a343 bfd4bc8b 3fc1880b", + "c1aba603 c13bab88 3ff4a860 00000004 40000000 3f000000 -> 4026c90c 40755e65 400b8715 3fd42020", + "420d4188 c0f541a8 40b15fe8 00000004 40000000 3f000000 -> 403dd933 3f7468a2 3e47a3a8 3fa4ca6a", + "c182fa80 4103c6b0 415307b0 00000004 40000000 3f000000 -> 4044c306 4075c81d c0abf918 3fbd36dc", + "c22702c2 41fd13cc 41ebb040 00000004 40000000 3f000000 -> bff992d1 bfe7f14f c047dea6 3fbf7bb1", + "4215da56 c17e2708 420ba7bc 00000004 40000000 3f000000 -> bfe700e8 be13d052 4015eb4f 3fce8c04", + "c0a18d08 4214c78e bfcc39a0 00000004 40000000 3f000000 -> bf176118 c07c2786 3fc22330 3fc2e6b2", + "416f5a60 c221da5b 41a35174 00000004 40000000 3f000000 -> 40df6862 bf7de1ce c0b8631f 3fa8ad06", + "406b49e0 c1b9b7f8 c2016bb2 00000004 40000000 3f000000 -> bf2bd234 be25dca0 bfcaf460 3f50dd37", + "41d66904 42228b72 421b6338 00000004 40000000 3f000000 -> 403461cb 4091c421 40574824 3fd78b1a", + "c11e4460 412343a0 419ad244 00000004 40000000 3f000000 -> c0419d36 3f69bcac 403ce78d 3f9a3ad2", + "40695d20 413c20b8 423ba202 00000004 40000000 3f000000 -> c0765c02 bf62eada c0005575 3fad8c53", + "c1f161bb c1a1f28c c226478e 00000004 40000000 3f000000 -> be1f6090 3e69d870 40483bd1 3fb6d51c", + "c1d0ae14 c20f0174 c1b18b63 00000004 40000000 3f000000 -> 3f8b9082 bef81e2c bfde3c5c 3f8ff454", + "c2395e77 c20079a7 c10ae984 00000004 40000000 3f000000 -> be83aac0 bea813c8 3eba41fa 3fe46018", + "c13e0738 c22929ae 40596810 00000004 40000000 3f000000 -> bfdba32e c0923ebb 3f4cfd58 3fbd7121", + "41548b14 c0f38cb0 40bcad78 00000004 40000000 3f000000 -> 3efe8f04 40003dfc c0d01e92 3f9dadf2", + "416c8d80 c206ca2c c132f070 00000004 40000000 3f000000 -> 40857097 4086fb64 3e0bb9c0 3fb837b8", + "41b84d70 c212bfbf 41d23140 00000004 40000000 3f000000 -> c00293cd 3eced468 3f8e9433 3fcfbc48", + "413b9cc8 41c6f0c4 c21a0ee6 00000004 40000000 3f000000 -> c0810aa9 3f9cbb44 40b2931b 3fc26783", + "c17bbc2c c225f2fa 3fd98b40 00000004 40000000 3f000000 -> 40aa14e4 40517f5c 40208d86 3fb2d3f1", + "4185918c 422e13da 424020c6 00000004 40000000 3f000000 -> bf2ad675 c0a6ff98 406ea093 3f82f9ae", + "422f58ca 40933b68 c1f0fc90 00000004 40000000 3f000000 -> 3ee9e5e4 3fbeddc9 bf8e5abf 3f8005fe", + "4202361e 418d1664 c236907d 00000004 40000000 3f000000 -> bff278d5 40806ca4 3ffdd53e 3f9953b4" + ] + }, + { + "glsl": "CultCellular cultmath_cellular(vec3)", + "tolerance": "ulp-bounded", + "cases": [ + "41d3de94 c1e7b52f 41b79204 -> 3e314244 3ef597a3 bf5c3642 3f757ae0 bd81641f bfb3fdd7 3f9c2abc 3ce7f740 3ed72af6", + "c1eb3838 4134d438 42269f4c -> bf319c63 3d2a24e2 bf380ecf 3ee2808e be4dc6dc 3e0146a8 3f9100a5 3f004a00 3eb754c2", + "c1a739ca c209c994 c1f7649c -> 3f64fb87 3e181e95 3ed7eec6 3eeb93f9 bedeb74e bf3e4cf1 bf8a69ee 3d5836a8 3f7f2564", + "4163f730 c211ee42 bfe05f00 -> 3f0e3ea6 bf10a76a bf1c222e 3ece71c4 3da9a5b0 bdf94ac8 3e866772 3ebf84ae 3e82f232", + "c18864ec 41ca9710 c0c32760 -> bf2f9248 bebaeaee bf212bcc 3f543d38 3f97f1a9 3ebddb7c 3fbf57c3 3cb9ff60 3e88e6e2", + "c19bb584 41f4de34 bfc70260 -> 3f5a0da7 3e98c7a7 bedc7bf2 3f06db14 beebb173 3e88d07f 3f9407b7 3e3ae904 3f5be013", + "c1eaed3d 41019fbc 409c72c8 -> 3eb6f1ac bf0fd222 3f3f024c 3f3b0d3f beb0d25d bea5cd0e bf9aed45 3e594768 3f47ee8e", + "423bc758 421e9802 c2310e79 -> 3e85e4c6 be5cb2b1 bf70da39 3e886bf5 3e9115c2 be074899 3e360a88 3ef025f9 3e7ad68c", + "41d0dbec c1509cf0 c1cd1aff -> 3c4d565b be319e99 3f7c1959 3f3eabef bf37def2 3f1c6050 bfc56490 3d00e830 3f7885d9", + "c0d6d930 c0b6d4c0 4046ee60 -> 3eb3ed6a 3e92c309 bf642966 3f27f941 be064387 3e31c2b4 3fe02a12 3b79b000 3f5a48b5", + "c183d66e 41f5d950 41c60670 -> 3f132f6d 3e74a012 bf4854ac 3f462f4c be522012 bf015141 3fd61b5e 3d22ffd0 3e020528", + "3fc4c580 42193416 4235106c -> 3dfb082e be6c99a4 bf77169b 3f01ab95 be446f75 3dbc695c 3ff9fd7c 3b705800 3e82d7de", + "417deb88 401c2d40 4000b340 -> 3f347f2d 3f338d8f 3dd64fa7 3efbd69a bfbed462 be7c9af0 3ea11675 3db7ec40 3f7d6d79", + "420a7954 c18af7d0 411507d4 -> 3f5a8925 be64af66 bef0e957 3ea809f5 bfa94f86 bef6843b bd7c81a8 3ebe8afb 3ea6591e", + "4229a368 41a02650 4233fb48 -> 3e14c2a2 3f75b1af be762a21 3f5667c5 bdc0f380 bfe8be54 be8a1dec 3d2b5550 3f0139db", + "c23a30ae c182098a c1fe6f5f -> bf7ccdc5 3c4ee3a7 3e20c9af 3e9b22d9 3fd2edf8 bf0abade bf309120 3ef81a03 3e40bb6c", + "40842d90 4154ce34 41bff0a4 -> 3eed729e 3f3bcf86 befe4e2f 3f4573da becfd657 3e850122 3f187c70 3db3e038 3f14a8d4", + "41ab7398 413eb2f0 c221dcbd -> 3f08761d bf542d92 3e2e1dde 3ee33147 bfb63922 3fa38e31 be78e03b 3d9f67e4 3f06486c", + "bf07b580 41ec4fe4 c194e532 -> 3f54d41c 3f090e19 3e18a039 3ee033ac bfe286f9 bf1c0e7f 3e41022f 3ec58d96 3dab4668", + "4189aef4 c0b05090 c1cd476e -> 3f210e54 3e40e71c bf410ec2 3f0fab11 bfbe4873 3ea21f58 3f5a4810 3dc7f910 3d9bb8d0", + "418a5998 420f3e40 41aa2208 -> 3eb2e919 3f6c7ac2 be208f05 3f3d4934 bcb97f30 be66f89c 3f4b3496 3e30f084 3e0f9c6c", + "417f7b30 c19a2dfa c189b5d2 -> 3f57634b 3de8163b 3f074958 3ee43994 beb8670c 3db53425 bfb0d600 3ec6aa84 3f08faad", + "41bbf3a0 41fb4ebc 42141772 -> bd414e31 3eb451bb 3f6f4b14 3f5a318d 3e0cbb33 bead2a57 bff71ca3 3cccf560 3f26dad9", + "bfaeab00 416aa968 c1aea773 -> bf0237df 3cd17cde 3f5c4f46 3ed7189a bebe658c 3e22b9d7 bed9137c 3dd3e1f0 3f2778e1", + "4239bcba c15fbfcc c1c43850 -> 3f353c78 3f3212f2 3dfa526c 3eb7d9ea be9bbf70 bfc6c8c4 3e49a08e 3e803122 3eb577dc", + "42364c66 c235dc10 c1f2f650 -> 3ea7f9ec 3e06ec09 bf6f7772 3ec331ba bf525f36 beadb1fc 3dba2568 3ecae102 3e1cad40", + "c21d09c1 41b53d48 c23b2277 -> bdc30b22 bf3f83e3 bf281e1a 3f26dd88 be4ae32b 3fc889a0 3e26d186 3db339c0 3e163378", + "c22f55d0 421c9f28 41f7e3b8 -> bf150a41 3f054b9d bf1fdc50 3f5632fa be8d1988 bd7d3f70 3f5b2baf 3cb00160 3ec73376", + "41e8ed24 41416bf8 c1f9802c -> bc17c03c 3f62a3e6 3eee07b2 3f1a3337 3f357c8f bf1fb22a bf909d0f 3c7ee6c0 3e84cf06", + "41737fd0 c23fbafe c224f3db -> be991ef1 bf650646 3ea9f7d1 3ecd2b02 3fa62483 3f5b0e72 be9d1770 3ee61f26 3f092173", + "415e0c10 4242a368 c228331b -> bf36aa62 3ebc02a2 3f18bfce 3f35c7ab 3faf2c38 3daf5244 3c072780 3e1a7388 3f40a45e", + "c1b2a22a c202b376 c04ba280 -> bf164455 3f36bad8 3ec39bbf 3f001d88 3f2f4dac bfa3059d bf9a392e 3eda938c 3e9e86fc", + "421830f0 c1bc76c9 c12b5768 -> bef6b801 3cb1b0e0 3f603fc1 3ed93b2c 3f9b7afb be0ad3e4 bfc5fd86 3dbce740 3f3754ac", + "414358c4 c1a054fc 40153de0 -> bf092bc0 bf0add9f 3f25a3ba 3f672f0d 3d8d98fc 3fa9f79a bf86dcf2 3d93b168 3ee7204c", + "c1969e44 c23204f7 42428932 -> be93c075 3d415e0e 3f74cf8b 3f1692cf bd5de438 3e153c20 bff016a1 3d389240 3ee65932", + "c0859f98 41c7fa24 c1c0c6a1 -> 3eac3cc8 3f62d84f 3ea33aa3 3ef81a2f bebc4767 bfdbd254 3e71e34a 3e6c1972 3f242b60", + "42083f6c 40794c50 41c80800 -> 3eb5fcc9 bf4a3178 beffec17 3ed12844 bf73c102 3fc160d5 3e17078c 3eb07348 3e4c5050", + "c218f770 40cf09d8 41aeae94 -> 3d8fb200 be9b6205 bf734399 3e775b52 3f2400fa 3c43ab20 3fcb917d 3f16e4a8 3f4258c2", + "c1e70281 41320a6c 423a9f18 -> 3e80567b 3f211c3c bf3c5027 3e81b85b 3f232624 befc8013 3f966302 3f193778 3f501626", + "42211f2a 4213683a 41951c08 -> bf291d1f 3f25cf7d 3ec25abb 3f2523ec 3fc113ea bf053e62 3e0a721a 3cd7d500 3e375c80", + "c2101ad3 c226e625 41eac4b8 -> 3f6e0ca8 be1c3f84 beab60d4 3ee4059f bfdb4118 3e84675b be8e68a6 3ea00acf 3f198225", + "41e21698 420b07a4 41800de8 -> 3e303564 3ec96bb1 3f6732de 3f3c3e2b 3f2e394c be7a24a7 bece012a 3e9004ae 3d15e5c0", + "c1ee413f 41961b9c c1fa78f9 -> 3f2f3070 bf287b59 3ea0bb22 3f092994 bfcc70fa 3ee3c61c 3d0c1bb0 3cb16240 3ec111d6", + "41e53c00 c229e48b 41e0bea8 -> 3f4a530d 3f178e89 3e218f8e 3f1ca33e bf6bb3b0 bfc6143e bed84f90 3da074b8 3f04a2b1", + "41f2b564 bfbbfe40 c0e9b6f8 -> bdd8be7d bf2c42fa bf3b6ca5 3e9cf594 3f8bc3b4 3f0e4d24 3f1d2f18 3f281bd2 3ed2fb68", + "3f626b00 41c7f2a4 4206a420 -> 3f43bfc6 bed31c46 3efd95d8 3eefb7d7 bf30be0a 3fb45f78 bf060968 3f01610e 3f4b1e78", + "420168aa c185aaf6 42145dec -> bf7a95bf be1ba749 3e0c3997 3f02cc06 3f3edb12 bf133ce8 3f02383c 3e99d906 3f629c09", + "422ba33a 41f94110 bfe9f860 -> bf7024ad 3e9726a6 be39b644 3f6b9e65 3fa182f6 bf504c76 bf1c2f04 3b7f7000 3ecacd44", + "c181efb6 4007a760 c0f9eea8 -> bf202e23 3f446dad 3e0fe604 3ec0d2cc 3f8da9fe bf6f610c 3f384fac 3eac8c66 3f451c49", + "c15e2994 c22dcfd5 40c64f78 -> bdc008b9 bf118853 bf513ca5 3f3df35f bf2ed3a8 bd737fe0 3f5def8d 3e421000 3f717ea2", + "3e26c100 423f11c6 c1268e78 -> bf1b9ed7 be1b5fcc 3f4785e7 3e9d69dc 3f9a766e bef45d2c be913d5f 3e8af708 3f7cabc3", + "41a53844 bfe1df80 c1e288b1 -> 3d084a06 befdc654 3f5e2d8d 3dba6d5a bd8c220c 3fa43e54 bfbdd960 3ec53cec 3f72281c", + "41b7e304 403a5910 c1ea1936 -> beaf970a 3f6f9fc7 3da1a712 3ee4bcc6 3f868585 bfae4723 3ef829ae 3e9aeb42 3f719645", + "c18afb84 c1c326a6 c22f10bc -> bd558ac2 3f18b0fa bf4d0b63 3ef2e4c6 3f0c1857 bf9b3588 3fb4eed8 3eb34a48 3e5d8678", + "c22b26d4 c2325e95 c0686b00 -> bf500699 3e4993c5 3f0c6f17 3ec17453 3e6b1374 3ef04e8c bdab1b08 3ed2df51 3f789f87", + "423ba4ae c194a445 c2283ed2 -> be4a2740 3e85fd1a bf71dac6 3f236ba7 3f92fc74 bec62be5 3f9d2461 3e84baae 3f06137b", + "c1a6e3ae 41a1ea28 42108948 -> 3e89acd0 bf6311ec 3ec036ec 3eb97af1 3d3ce870 3f2cfdc1 bfa67d40 3f052d90 3f183004", + "c2140509 c2284980 4063db40 -> 3f65b8c9 3e80a5e7 beb9c17e 3eef0237 bf2bb5e6 bf7b3550 be905d80 3e94c2c5 3f349712", + "41fc6030 c1e77c1c c1b70d5d -> 3e4aba11 3ee85edb 3f5e6a31 3f1292f8 be0994c4 3e1418fa bfd56dfe 3d2cfc10 3e95f736", + "c1969bc1 c0afe6c0 c18ae5a2 -> 3e529c28 bf167abc 3f484c86 3f1f0a59 bf63c385 3f8411fe bfae3b86 3d168800 3d8a9e10", + "c1d1766f 420869c6 4143768c -> 3f558579 3f00cd9c 3e67aaf4 3f102aeb bfaa1b7b 3e33e638 bf44ca81 3e615a4c 3d570d30", + "4147e650 c1ac1181 c220f652 -> 3d4d1338 beab1157 3f70f28c 3f1846a4 3f5d67ae 3e35e3d3 bf11b498 3ea0275c 3eb76474", + "c137f438 c2214170 c246d0f6 -> 3da5ad83 3f0da90b bf54399b 3ec7a586 3e2bb9dc bf239efe 3fe59b62 3d68d208 3e68c048", + "c1e7e50c 41df3054 c1df587d -> be43549c 3f3e31a5 bf243fad 3f255bb3 bd812740 bf948e6c be6c6138 3d4bc750 3e9dc7bc", + "414ec2f0 be8cca80 c2294228 -> bf52c00b be4bd1c4 bf081a51 3e9529ba 3f0153f4 bdd4984c bebbc684 3e3c4e9e 3eaefb50", + "41f6dd50 420eca10 41cdfe3c -> 3e264558 3f49ff05 3f17ad1b 3f40525c bf1f014b bfd69f44 bf21d07c 3cfcc3c0 3e2760bc", + "c240c913 c1527220 c1ea66d1 -> bf77d75c be800f6b bc52e278 3f319d1b 3ff77824 3efbe344 3de5a0ca 3db60fd8 3f55ce3b", + "c17bfc0c c22c188e c15b13a0 -> bf4d067c 3e176d3f bf148d20 3f19c1ed 3fc1cd50 bd8c589c bdedef08 3cea9400 3f2d32f6", + "41a08150 c14d50dc 421f5b46 -> bf6624ce 3edefcca 3d3ca10c 3f455c62 3fd1ecff bf7c4e11 3ead97ce 3d642650 3ea5a4e6", + "42101eae 421c6c08 c1b6a1dc -> 3eb281f0 3f612321 3ea5ed7d 3ea98441 3e6e027c bfd014c0 3a521200 3f1d7ed6 3ef56e3a", + "42324256 c1030278 c2265d97 -> bf45a02e 3ef15cfb 3eda5237 3ee137fb be61d1a8 bee09adc bf0b4f0f 3dbf101c 3e475734", + "42186636 c224c28a c107f464 -> bedea61f 3ee26133 3f48d35b 3f17faac 3faedec5 bda90fb0 bf57a28d 3e818020 3f44da1f", + "c0bf72f8 c0a90340 41d75458 -> 3f55f9d2 bf073510 be1953be 3f378c7a bfbea82a 3f4abd9e 3f5beaca 3e68ac30 3f27fe63", + "c1564174 410686ec c1e22166 -> bf24fcb4 3f3cd825 3e4e0828 3f239123 3f8f2c8b bf0a2016 bf879104 3c133b00 3ead7cd8", + "c2296ddb c2277f51 42295ce8 -> bf56d1f3 3f0a6940 bd73013c 3f0f1781 3f91187c bfb38bd5 beb4dbc0 3e566b40 3f73123f", + "4160d618 3d947600 41034050 -> 3f5c3ccf 3ebfdd45 beb0f507 3e3cc1f0 bf0db192 bf798f74 3f8acc3b 3dc529dc 3f404110", + "c0840120 c2453e8e c16a2074 -> 3eb4cb9d 3f2609a5 bf2c9d4c 3f5581dc bf376206 bfca04f0 3f1cf39e 3cb73ca0 3e8b6564", + "3faf4640 c1a5099a c2296051 -> be8d5bbb 3f1103f0 bf46c613 3ef2807a 3f7235ce bf87e236 3faa2e42 3de5a8c0 3f2c12c2", + "c2183f68 421e43cc 41d904a8 -> 3f1cb952 3f3617b3 beb0d0b8 3f198932 bf9e8866 bec643a2 beba31e4 3e584070 3d1e67a0", + "c1c0bae9 4229b8ec 42254b76 -> bf6e14e2 3e97cc4c 3e5e70f6 3f330a60 3fe4766c bf483f97 becc9de0 3ea4283c 3dedc1d0", + "c1f0a334 401e4450 c1eb5af1 -> 3f2a8da8 bf3c548f bdfa5835 3e8b3b6b bfb5ae38 3ea167b8 bec4782f 3e0edebc 3ee5c8ae", + "41b8fff0 c1bc69ba c15e9cdc -> bf7b43ae 3d896881 be379df4 3f0531c2 3ff023c1 be17a68c be853558 3e5053b4 3e46a980", + "c2114ea8 41c6950c c1115c2c -> 3d7ba4e3 3f7f4fcb bd239f1c 3cf21ea7 3eca2b99 bff15f5c bc272a90 3f575d73 3ddeeba8", + "418175e0 c1528be8 c1105624 -> 3f4ca097 3d08b1a1 3f1997b2 3f37cc2d bf32dc30 3ecf8c91 bfbf184e 3e03a5fc 3cbcb120", + "424354f2 41731d28 41e3837c -> bf661ca2 be80af76 beb7c9e0 3f0244ee 3f4a96aa 3f98557c 3d018590 3da45048 3f46ec45", + "4243dd4a c1bb2250 424366c2 -> 3f3791f1 3f31a52d 3d85ea34 3f17e709 3e5759c8 bf25da3d bedf941c 3e826cbc 3f06e1c1", + "c0c10e90 c22ff4e0 4214618e -> bdd014eb 3f6bfa9f bebf8e40 3f0c98a1 bf1f6ee0 bf06ff2f 3f708451 3d97b178 3ee22b14", + "c192e99b c11d84bc 4219aa98 -> 3ebc20fb 3f12ef43 bf3b584b 3f4e02ab bb668980 bfb7e85e 3f8a9581 3e07e970 3f0dc38e", + "42273730 c0d9bee0 c2163bd1 -> be25b83d 3db70fc9 3f7b963c 3eedeb7a beccb8dc bf079472 bfd77573 3e8b8b76 3e3cff7c", + "c244fd46 41d14b3c c1f60cab -> be659d21 bf417882 bf1d82fc 3f02742f bf104806 3f8dd61c 3f8f6a0c 3da5e900 3f73fd77", + "41660250 c1ff21d5 40126aa0 -> beb07456 be023f1b bf6e19a7 3f3b7c9e be9a743a 3f56799d 3f9aa57e 3e346638 3e11d6c0", + "420e5eb6 c2053ec4 c230428a -> 3d6a3b56 3f008501 3f5ceacd 3f095e43 3eb4ea12 3d295e80 bfcc3002 3e8bbfaa 3f0c019c", + "c243633b c177b74c 41fd6b18 -> bf733f61 bd1b92cc 3e9e6493 3eb48839 3ef0d753 bf51de34 bdffdbb4 3eba3a43 3ef4a980", + "40c82100 3ec21780 41c9ff68 -> 3e325e32 bf3a3351 3f29eea4 3f03600d 3e8e2f51 3f2db679 3e686304 3e0d2250 3e5c1e4c", + "c202d8e0 41ed89d8 415d91b0 -> 3f38fc61 3c925255 bf30e7a4 3f0472ae bf9f5a3a bdd3bb0f 3fc50d6f 3e482a00 3f2afd18", + "42318d6c 40225410 4162cfa8 -> 3f30ad2d beebad72 bf0ef3de 3e858786 bf748676 bdd8a618 3fab63c6 3ea454e2 3f7e613b", + "c1a6441e c2141cb2 414f53d0 -> bde20fac 3f7a3041 3e392e0f 3ef75044 3e0e3532 bf20b421 bf8f0479 3dfbb728 3f54f591", + "41e23720 41ff88b8 4211adcc -> bf50246d 3f006055 be976c8f 3f49686c 3fa3d5f6 bf6e34ca bef47c5b 3c3bdcc0 3f75ce00", + "c2371619 42192334 c216ba8d -> bd8a0d6a beb5f932 bf6ea983 3f3673d5 3ecb19e6 3f9b6294 3fa9a4ff 3d5dabc0 3e9dc762", + "c18eb01e 41fa9190 420502fe -> bf61f1f9 beef908e 3d3b3ef6 3f2fc4d2 3f26a7a0 3d9c7750 3f584774 3e84af50 3d8d6088", + "c1d2d6cc c2145162 4242a4e8 -> bec7be28 bf677da6 be31b4a0 3f1254fa bdb47744 3fe41e51 3e19a34b 3d2a4540 3eed377c", + "c1e2a16a c240c5a2 c1fa241e -> 3f2eb528 3e45c941 3f347783 3ec5e68f bf3fe37d bf6cf31f bce0ade0 3ed3fc5d 3f523b37", + "421ac3cc c21309c4 bfbf3e40 -> bf265cdd 3ebf3104 bf2978ef 3f1a89ef 3f0e8d36 bfaea716 3f41f9f3 3da0c458 3e7771b8", + "41b40890 423f4084 42285caa -> 3f5ce620 3e348326 bef28349 3f2322bd bfbb6b34 3e6c2918 be5b1c02 3e1bb040 3f4793b3", + "c2034eca 4216da0e 40b43790 -> 3f4a258c bf165a01 be35dcda 3f4c920e bf92425d 3d0761c0 3f6e6ea8 3dbe3348 3f66e42c", + "c2189e28 c20e9bed 41276798 -> 3e601a04 bf714808 3e815012 3f074e00 bf6f32a5 3f766652 bf736c67 3e604484 3e8b01a6", + "c1cb73a8 423da9c2 4222a2e4 -> bf191fb6 bf4cd801 bd351b26 3f0e9183 3f9f1086 3f96f519 3f354785 3eb1a096 3f621288", + "bfddf760 41ac4990 41530940 -> 3f783428 bd60799c be746daa 3de6f056 3c0473c0 be09919a 3ea9505c 3f081c17 3dca6060", + "40c925b0 42106502 c15d5520 -> 3ef5f639 bf5c6448 3e2b8ae0 3e8fd48c bf972c17 3eaf8d58 3ea572bd 3e5a1fd8 3da6bb48", + "417de378 41fae9a0 c1acc3ee -> 3f74f880 be5fb276 3e43ded2 3eb7ac27 bf396b88 3ee88606 3f409686 3e707a56 3f216c90", + "422e7802 4197e9a8 404c9650 -> bf35a27a bddcb381 bf3247b0 3ec88aeb 3f9e0eae 3f3aca48 3deccd50 3de8d694 3f423b18", + "4241b28c c18b20f4 c148a9bc -> 3e29d0ee 3f6068d2 3ee74adf 3f311ef9 3e189a3c bfe874bd bea215d5 3c8bbbe0 3f28546f", + "41d4b598 423677d4 41df151c -> beb4887c be5c5c55 bf692329 3edc89d8 bed9b7e2 3f57d1ea 3f620140 3d8bef24 3f0b1ae0", + "c09c4c30 c2313661 c12b43f0 -> bf6c3ad6 3eb5ce08 be194502 3f01475d 3f1490ba be8d4a6c 3f8afe16 3e2ee420 3f64dfec", + "c2095224 40d6cd40 c20b5d37 -> 3eee8392 3eb15259 bf507432 3f0435d6 bd9e3d80 bf7b31f8 3fbdb354 3e18be70 3f14b959", + "41a6f090 4131a96c 4230ea50 -> bf1e8982 bec5a9e5 bf2f06c3 3ec4531d 3ea3eec4 3f2c2acc be67f1c8 3e844c9f 3f273541", + "c199b24a 4229880e 41bf7e40 -> bd87f60d 3e03ead1 3f7d4c1d 3ef05ce0 bf00224e 3f1f2175 bfaa24c9 3eaa3ae8 3f03055b", + "3fed7180 c2299e3b 42079f06 -> bf0260cf bea07f30 3f4d2d64 3f01cb39 3fa661a5 be28de64 bed69d23 3e8f0d4c 3ea9625a", + "422a601c 41cb08a8 c109d8ac -> 3f69af1e 3d2006c9 bed01cde 3f42648f bfa2e66e 3f46ea1b 3f5bd5ba 3c0cb680 3f28ac89", + "c16875a0 41762a50 c2092aa4 -> 3f2afe95 3eef2fc9 3f144e0b 3ea82d5f bf4cb37a 3e813021 3dd22038 3edaa281 3f0d1858", + "4202433a c1d96a20 c190fd27 -> bea74d6b be4546e4 3f6cde03 3efbfb17 3e88f873 bf32b138 bef2f021 3e1cba8e 3f101cea", + "c1ef2ff7 41e7188c c1a9689f -> 3f6d3698 3ebed780 3d4ad69a 3e8e7554 bf6ccf60 bfae232e 3ddaa785 3ed60f4e 3ee3a63c", + "c131b2e8 c1fa02ad 40a35440 -> 3f08debc 3f0d3fbc 3f23dd1e 3f1ea8a0 bf9e8824 bfa036ad bf42df0d 3dfe5be8 3f1a49c5", + "c1fe9d3e c16be3d0 c1fa2784 -> 3e5350a2 3f726180 3e7ce041 3f01eadd bf140fe4 bfbfe4f6 3eff81b4 3dd07d98 3f79ac76", + "42024f5a 41eb9f64 4226e024 -> 3e1f9cc1 3f299601 3f3b932d 3f1178a2 3e322d63 3e4d91c8 bf8eb578 3e23aafc 3ec66f04", + "3fae7bc0 c18b3b2e c20cb4e0 -> bf21e897 3e648112 3f3de3db 3f148f45 3f9c3cb0 be42c5e3 3d87d580 3e479124 3d9d40f8", + "bffc0f00 420dac6e c1c80ab0 -> bde6ae51 bf0e95e1 bf52a6b5 3e91a55f bf22761e 3f995cd8 3f7f5eac 3ef98c27 3f297cdb", + "c100fe5c c16eb7f8 421becc2 -> 3d07796d bcea1180 3f7fc15e 3ebd42ce bf3977d1 3f05e12d bfc34f22 3dbb78a0 3e2c285c", + "408ef738 c103ce28 41364c3c -> bf753dbd be526f98 be4cf0ff 3f0d69e2 3f52575c bef51064 bf042fc8 3d8df7d8 3f37a3c4", + "419a54bc c230ad8f 40e75988 -> bf0fef56 be201065 bf4fe35a 3f2df493 3fb55966 bdb1dae0 3fa2b04c 3dd32478 3f3512f2", + "42384bba c10e1f2c c19e257e -> bf3823e3 3f2fb13f 3ddca153 3f18f06f 3f05f16a bf97dea5 bf737ef1 3d3ea6e0 3ec0dc74", + "4142d4c8 4148cd08 42037eae -> beeeaf2f bf15e29a 3f29c9aa 3f143261 bd8a7d54 bdd7f1c8 bf934bb4 3df80da0 3e9df6cc", + "c22a5268 423645d8 41de9ac4 -> 3efb3ce9 bdb6a1c9 bf5de395 3f0ee372 bf191435 3f3aa8ce 3fd05664 3e807664 3ce2cc00", + "42115718 c19035fb c0f4a278 -> bd2895d4 bdfcb7ae 3f7dd32b 3f159f22 bf52997d 3f1b4df9 bf595d16 3d01db60 3f100061", + "c12e00e0 c2158a86 40e40810 -> 3f1bdd19 bf0b2a90 bf13e725 3f30f93c bee76cd2 bec1e392 3f6e526c 3e716e74 3f751430", + "40a69720 419a3868 c1aedbd9 -> 3ca6aff5 bf0eb670 bf547765 3f3a60ff 3eebedf7 3eeff857 bd2ccb00 3e57cde8 3f6bcb27", + "4228bee2 c10c4f0c c0e6f0a8 -> bf3334e9 3f1a543d 3ec3feb3 3f01d49e 3f357117 bf8b8dc0 3efb0bbd 3e8f7528 3f537bc2", + "c1bb8295 4215c312 41efbc4c -> 3f2f7c7a 3f1850c9 3ed6da94 3eb00d61 bfbd8100 bd7ed5a0 be04b470 3e76d6de 3f01b028", + "4222dab2 c115f4c0 4216f8ec -> 3e33b105 be6626bd bf755f2f 3f045683 3f2e64f6 3f1719a1 3fa94651 3e3ab620 3e744a98", + "c0e35aa0 417a2470 c14e00c0 -> 3f39100f 3f0e0eb7 bed2c8ac 3eff71b2 bfa707c4 3e56a71c 3f304eba 3e6f9b28 3f50fc57", + "418b7140 419cd1cc c21453c8 -> 3deda972 3f37246f 3f30630d 3f2e8227 3ed473de be8711dd bfb3f8b7 3e5a1b08 3f6b161e", + "423f7f56 c1df34b4 42308ed8 -> 3f232845 3e812e06 bf3a65a2 3ed09bc7 bf896a9e 3f213a5c 3f67e756 3eab7a93 3f547c4a", + "4219fefe c1eccbb1 c204638f -> 3f5f66c4 bee80732 3e3a451c 3f10ded1 bfbbf9e0 be6d2734 bf19f602 3abbae00 3e9a7db4", + "c2249e8a c0c1cdc8 c14f8db8 -> 3ee4687d be5af4a8 3f5e7ab9 3ed5179b bd9bfdd0 bddffd5c bfdebb30 3e60136e 3f511ab4", + "c150090c 413b21bc 405c76c0 -> 3e300e52 3f60e4df 3ee43920 3f363c72 3da325b4 bfddbf56 bf66bc8b 3e0b495c 3f726a40", + "42028ef8 c23cbf5f c1dc46ef -> bf5f3ece 3e00df54 bef2272c 3ed691a2 3ea347a2 be9752c8 3fa4efec 3e9a4fd0 3ee2581c", + "c1912886 42450c04 41b3e084 -> bf5dc098 beb6837b 3eb34428 3ea1d2d5 3fc3899c bdb63244 bf741bca 3e357ea4 3eb935ec", + "c185fe06 41d8d6fc 416998d0 -> 3f7cc2d0 3d765719 3e163ea1 3f60956e bfab5ade 3f341c61 3eca2a68 3ddd8db0 3e3c2210", + "c20e36ba 419c1a0c 406b5250 -> bf7e96af 3da38e72 3d8b2cda 3f05ff1f 3fde3ac6 bdfd5687 3f19f2cc 3da4ce90 3ef3d4be", + "3e878d80 41abb4fc c1e09f1e -> bf59a2be bf05dc12 bd7e2250 3f537a9d 3fdfd518 3e999f78 3ee1584c 3d1a2730 3f354efd", + "423485c2 416863b0 c1a0868b -> bec98c97 bef2cb4d 3f499a07 3ef7aaa6 3f7f5e7a 3f5e8384 bfbd6aff 3d8a0df8 3ef85c50", + "c114c9b4 c1f8c312 4145f070 -> 3f45d35c 3d888529 3f2195d4 3f113596 bf84f7c2 3e232168 3e9c9fbc 3e153c58 3d51e500", + "c1a48110 c10bfe38 42220fd4 -> bf0db45d bf551bad bccc45b5 3ef5ca21 3f994062 3fba4392 3ef079be 3cd67e30 3ec0dad0", + "414fc8b4 4185a7cc bf8fbe80 -> 3eb07a32 3f25a0a3 bf2e1e81 3f1718bb 3e9f4792 bf8d24a4 3fa41ab4 3e92db9e 3f386de8", + "c21b0a5e 42055d6c 423d25f6 -> bd1ed136 bf738535 be9ca811 3f2a1512 bf0d70da 3eaef89e 3f558582 3e433b6c 3f373da4", + "c230faa8 421e40f8 c1c20abd -> 3e36ed62 3f6ac210 3eb692cb 3ec029ef 3ea490a3 bfc94f95 bf6c18ec 3e31ca0a 3f4a1140", + "c1bbd290 c227b444 c142f740 -> 3cdd68b8 bf78e352 be6e16e0 3f23842f 3f48c9ab 3f79cfdd 3f512a53 3c901d20 3f390339", + "41747190 c21bd712 4182fa30 -> 3f1b87d8 bf0ab798 3f14ac63 3ef7c8e7 bfb2c681 3e95e2d9 bf9232ec 3e10b8c2 3f17d818", + "416a3e40 c17d216c 4229fd6a -> 3f384674 bec8e2c9 bf12981e 3f1e0033 bfa42569 be1c84aa bd482ee0 3d17e470 3f2db4c7", + "bfd73f60 4205b610 40258a00 -> bf29200d bf26dee7 3ebea656 3f267dbd 3f8f141b 3de3d7e0 bf8a0fa3 3db1e6e0 3d8ad980", + "c1189934 c13c4078 bf880ae0 -> bf397ebb 3e394c6d 3f2a3d68 3f007fd8 3f548e29 3f40d51c bf80bb16 3e5b6960 3f5d36aa", + "4233ec00 c211244c 41eb5ab4 -> 3f1cd5c4 3e8f46da 3f3d3a05 3f319a94 bf3bbb17 3f135c59 bf9f1301 3dfbe378 3eebf90c", + "c22ba028 4239302a c0e6b040 -> 3e8bf794 3f7275d5 3e2c1b92 3f3e5be8 bf57a031 bfe0cb04 bca99f98 3dd12ad0 3f19ccba", + "42244b52 404cf800 413900c0 -> bea9ecfe 3f6c2ca5 3e498d7f 3f4b917e bf1c883e bf9d7ffd bd95c967 3d80c7f8 3f46e8ba", + "c1906695 4196f320 c18b8fc2 -> bc8cccc3 bed00bf9 3f69df0d 3f021d20 bca5596d 3facc6ab bf9f1759 3e99a986 3d860718", + "c1d32393 c1dfe94c 422f0e12 -> 3f6b0efe beca2b37 3d016906 3f3b4fb1 bf45834e beb79879 bf2c2b76 3cbe1520 3f2afd1d", + "418a807c c2253c12 41ef981c -> bf585938 3e9294e1 3ee726d8 3f1dad3e 3fa12df6 bf91fa18 bf4419be 3d232190 3de28620", + "c1b08afc c1d20f38 41563b0c -> be99fdcb 3f591411 bedf782f 3f4cd60e 3f7f033c bfba2779 3d4fe9d0 3d2981d0 3f02f2df", + "42086e42 c1a12d48 405effd0 -> 3e799ab4 3f62918b becb108e 3eb84485 3f0556ab bfbb806b 3f2d9166 3e6b9952 3e761a58", + "4158fe88 41d07c08 420ae6d2 -> 3dd78f08 bf26f58d 3f402f0c 3f04523e 3ebe5436 bde7fea0 bf976067 3e5b28bc 3f376229", + "419efd64 41f8f2e4 40fa5310 -> bf6e7470 be1ec742 bea884c6 3f4587b3 3fcd46e1 bd25bf00 3f858675 3e0d89ec 3dd51558", + "c1412334 c1dbcf0c c1ac37f8 -> be9210e9 3f074aba 3f4cb0d1 3eb3da13 beb7e27d bf2e592a bfc640f8 3ebbe2b5 3f7e3967", + "4247c262 c206f65e 419d0370 -> bf3d91f1 bf108832 bebaa6c0 3efa1c55 3eb25252 3f8e2a5a bec05942 3ed3ac9b 3f72040e", + "c2008764 4242a580 422d10ce -> 3f0324af bdeeb415 bf59d2da 3f1ba40d be33c94c be6af406 3fdd0186 3e8374a4 3f4856a4", + "4203d0a8 c168d268 409be1e8 -> 3f511954 3ee30017 3ebd02fa 3f26943c bf8e660d bf0b7648 3f14aa14 3e0d4f84 3ec66eb6", + "41d20400 c18560a0 c0fa8510 -> 3e25d28a 3f72900b 3e8d2632 3f13d470 bea7bda2 becc8abc 3f0b519b 3e4509c0 3f2e17d3", + "c181760c c10f7aa0 c21753b6 -> bd93fc81 be56f507 3f799c8b 3f2dc41b 3ec1fabf 3f527754 be7c2118 3d765730 3ddc2dc0", + "4242ef58 41f80b90 41c5e444 -> bdb8c999 3ee467a1 3f63f2ae 3f307bdb bf234e9e beeb6d9c bfc9b0bc 3d7206c0 3f449d39", + "41b51924 c215e0d0 c20e0882 -> 3f58844c bef19122 be7f1e4e 3f35d34d be933a60 beaa4472 3d3b19e4 3e73dda0 3f4a77f8", + "420e30e8 c21c8241 42077258 -> 3cdd3025 be533585 3f7a6664 3e1650c6 bf39c755 be83c73e bfc2f0d8 3f5b1494 3eea98ec", + "c1c08546 c0cefe50 c1ee1bb3 -> bed2875d 3f608309 3e7e8db6 3ebed304 3f9ddad8 bed8ec84 3dc494c0 3ebcf3d8 3f3181d4", + "41010c98 c1e666c1 41b0ac18 -> bf43ec29 beee2085 bee3cf23 3ef19216 3e516228 be969afd 3f466c86 3d7510f0 3edc0b50", + "c2390a33 42301582 c069eea0 -> be13e90c 3f47a823 bf1be73e 3f48be45 3cdb372c bfe2c284 3f2964e4 3c8360a0 3e133954", + "c237abe5 c1d2a857 c230fe48 -> bf11f91b bf3ac06b 3ec16889 3e98b3ec 3f0c4e46 bcbc1c60 3e8f9f7b 3e973bbc 3f63cea3", + "c1cee74d bf0e17c0 c21fe192 -> bf485f2b 3eb5baaa 3f02e278 3ec783f1 3fb401c6 bf62e2f8 bf8ad6d6 3ef57bad 3dc02cc0", + "4212bb40 c0a0b138 42192cfc -> 3dda7c64 3f66a8a2 bed7486b 3e0140d1 baac94c0 be96a2de 3f9aaa0f 3f084bad 3f5a8200", + "c225ed7a c22893bf 423a19ac -> 3d7b55e9 bebb27df 3f6dc3f6 3eaba08a bf8591dc 3f0813c1 bf572204 3e431590 3f6e5c8d", + "c21abf60 c1a20aaf c16f8d50 -> 3f028bc2 3edb7ba4 bf3eeb9a 3f36ef84 bf26fe47 bf86b2a0 3fc1d847 3de72df0 3f7ada64", + "41b47510 41a91eb8 c2478c54 -> bf291f1c 3f37eb13 be5eff38 3f2b0aee 3ef8405e bfd9eedd 3e7633db 3e3d6928 3ef79c6e", + "42045842 4174aa88 c22006b6 -> 3e7f9464 3e99c1f1 bf6bad02 3ed2b693 bf330259 3f0ac700 3f1fab1a 3d95d02c 3dcf7838", + "c210137a c20e6e85 c232741c -> bf71030b 3ea4bd12 bdce3c31 3f39f170 3f0d93ba 3f197d0f 3daa9e39 3df11088 3e8a03ac", + "420f0f60 4227bb3e 40a42a50 -> 3f2653c3 3f26a9e1 bec8f161 3ef6bb06 bf39eb16 bf0c410b 3fb12ce7 3e04a390 3f1b27e6", + "41b83d4c c1c8e4fa c20f0139 -> be4a4f44 bf6be012 3eab5b4e 3f3bd558 3d5bbe48 3e2dc860 3e9e2f58 3d475c30 3e5f6f24", + "42032632 41b41868 c12b1748 -> befe3b50 3f1448c7 3f257f4b 3eafc4d0 bed6c59e be8b7bb9 bec6b14e 3ed810ee 3f68261f", + "42374e48 c1a21e42 c2028a7c -> 3f254324 3f42e394 3d793f48 3f0af663 bf8371a2 bf3436a7 bf7bc6dc 3ea768de 3f10e726", + "c22e556d 41c4c5fc c19383b2 -> beb73d38 bf6e8134 bd805742 3eb0fb5a 3e2ff487 3f8706fa bf698036 3f064fbd 3f0a766c", + "416b4ec8 420fd152 418c6ab0 -> bf2af088 3f358334 be682aff 3f0bf34e 3fa6c11e 3d3cae50 3ec7853a 3e3c0978 3f68451a", + "c1be6aff 41d83cc4 c23bee82 -> bd4df0eb beecfdd6 bf628f29 3f45b9f9 3f1801f7 bea2fc84 3f989740 3d5c17e0 3f72d47d", + "421558aa c20d8342 c210da72 -> bef3ed3f be0cfb3c 3f5e4d9c 3f220e8e 3ebec18f 3da8aed4 bfee4331 3e83e3c4 3f2c26f2", + "420cd57a 420e089e 3d751000 -> 3e94ff11 be04d49a 3f72a8a4 3f1d8de0 bf6fb666 bf20ed86 bf8512b2 3b05b500 3f584273", + "41afc4c0 c1eac4e8 c1aa2a3e -> 3d039468 be74c2c1 3f787184 3f2aaa24 3ee35a05 be9df990 be909942 3d4ec4b0 3b2d3100", + "c15a60d0 42206794 c222e5a7 -> bf3987a4 3f2b9951 3e23639e 3f51a8b4 bd860cb8 bfa1fe76 be9c5d7c 3d0c60d0 3e540968", + "c2468a2c c13a0c1c 40f06310 -> bf57aa48 3e7b52da bef5934d 3e586a08 3fd53882 bf3b660a 3e40069e 3ed7bece 3eece5c0", + "409cc920 c2116366 c1ef4754 -> 3f3028ba bf16a600 bed956b4 3eb4f894 bfd1047e 3f65a7e7 3ea1219c 3e825290 3f019973", + "41c05c6c c1c22757 c16a7fcc -> be95fb07 bf04b181 bf4dae7e 3f35c829 3fa1f48f 3ea276d4 3f6c1e5e 3d9315b0 3ed44f80", + "40e6fbf0 c20a0da8 c247f636 -> bf31d595 bdf6a0ae bf358ce9 3f23f293 3f91ea34 3f8049c9 3f5d4926 3d23fb80 3f7df300", + "c20158d8 41811fe8 423a2c5e -> bd996592 3f7f2850 bcfe0040 3f263c4f 3e577763 bfef43a9 bee07096 3e9ca20e 3f13a9e6", + "41946b0c c1fcf6e5 41eab2a0 -> 3e9ec768 bf1329ed bf41d87b 3f24fff6 bfa72494 3f23ab02 3f30c5e3 3df24490 3e6bcc8c", + "c0f1e060 42172206 c14a3398 -> 3e2402f1 bd229aa2 3f7c7d96 3e414137 3ee02a72 3cee0daf be3d4bbc 3f0f6fff 3ef9cc38", + "c23e859a 4241b6b6 41da7d00 -> bf106d37 bef03252 3f2def56 3ea10171 3fa5fd3e 3f14245d bbfb7180 3ed7e333 3f081982", + "c10a8110 4217492c c129ec6c -> 3f6bf64e bd72a849 bec43e51 3f067611 bfc594c8 3f578ea4 3eb8768b 3eb3688e 3f3c7e05", + "41630608 c21cbc2f 3fedd500 -> bf5348d7 befe6ca9 be89495f 3ebf638b 3f586f1b 3f0d8466 bf3ae7a4 3c1e2380 3f7d6077", + "c21db0b2 411799f0 c125dad8 -> 3ece6853 be347e42 3f65e38a 3f179607 bf4ca6d4 bf082d72 bea09ddc 3e3c1f68 3e567484", + "c227a4d6 c22fcb42 c15c67e8 -> bf38e2d8 3f2939ae be50753f 3f33a70a 3fd74a02 bf389761 bd9118e2 3e921890 3e8df7ce", + "41c06388 c220c571 41b26970 -> bee85f7d 3f60279a 3e294c76 3f3fe381 3e862fec bf915842 bf8e4d3e 3d70c4c0 3f2dc65a", + "c0226ff0 4009c4a0 3fa641c0 -> 3f187f9c 3f4a26d2 3e16764d 3f16251b bf5bc7cc bdae1218 3f031b9b 3e7ac340 3f2f78e3", + "418d62e4 c19f0da8 42448a66 -> 3effbe0d bee00764 3f3f68ea 3f2ec285 3e5cc49e 3f84efcb bf8d65c9 3d62b070 3d917988", + "c210e43b 418c5ca4 c1f50ead -> bf6a64fb beb66101 be3efc5c 3ee1b134 3f953c48 bf0b0312 3f0b9a2e 3e11b6e0 3f3ce8ac", + "40610e90 c23a5325 c23ee702 -> 3f5a6f4e 3ef195f8 be6360f5 3e988797 bf0f2852 bfb16dfd bd671fe4 3ebafc33 3f1f7d3e", + "bf1b9b80 422fa3d8 c23eba71 -> badb176d 3f201e4d bf47bea2 3f29b110 3c3a6cca bf941078 bd88f948 3e84d1e6 3ec2a5aa", + "41af4e7c 423ffb6e c120e6f8 -> bf1a7780 3f3e8d9d be927fc2 3f5610f4 3f24b79e bf273c1a 3fa3fd54 3d698290 3f4e8cf3", + "41f19bc0 c211c698 c1c15925 -> bf36957c 3e92aabe 3f23c5aa 3f3d8e28 3f3788eb 3f294019 bf758da4 3d5254f0 3f705f94", + "41f5aee4 c220934c c20c577d -> 3f1a7cf9 bf1bf0b8 3f03ba24 3f4cc8fc bcb42fe0 3f466f60 3e905418 3c005500 3e4b77a8", + "4205f166 c056fcf0 40c05ef0 -> 38aed89a bebce466 bf6df0e7 3f184564 3e3ee819 3f9a4bc2 3ed414ce 3eab01b0 3ef8e2ce", + "41260200 c221b402 41216cdc -> bf6e7ad1 3eb779c2 bd7bc121 3f0c1de1 3f2e489f bfa6b0a2 be1d05f1 3e052878 3d29b6b0", + "4125195c 423203c0 c225b602 -> bf2cd99d bf265f6d 3eb2a66d 3e43a51f 3f17a77f 3fd1460a befff9a8 3eb75a9a 3f69e9de", + "c22bdb6a 4233eaf2 c165e910 -> 3f7572fa be908c79 bd031941 3f347b7f bfe4fa9b 3e182fbf bf0262fb 3dbafb68 3f714072", + "4210410c c174dc30 41927b14 -> 3f3f92a3 bf10cd26 beb1688a 3ede876b be8cc4a1 3ed3f072 3f9b6aac 3c8449c0 3f2f78cb", + "41e16838 c1b37813 c1edca4c -> beadd4a1 bebccb06 bf5d8513 3eedcb75 3fa8052c 3f0a1364 3f8289e9 3e6e925e 3ef76bbe", + "c1efe78b c21d4f66 c22a690a -> 3e258253 bf22df66 bf411f71 3f04a910 bf44e19a 3f98bae6 3e4083bc 3d89e1d8 3f76a919", + "bed52b80 4132f6f0 41790a88 -> bf7cd75d 3c696bec be1fb30e 3f13d5e5 3ed0e34a bf192bfc 3f3960c6 3db8c6c8 3ed25020", + "c14af118 c15d3054 c227c6b0 -> bf594e0c 3f05c97c 3da317e1 3e99c6ec 3dad73f0 bf4070d0 3f05f969 3e406c6c 3f3cd8af", + "42391fc4 422f63e4 42390126 -> be9cf025 bf30b536 bf27c9d3 3ef91e0d 3e12f9be 3efa09c3 be9ee2c0 3e2176a2 3e8f9118", + "c061eb60 4186031c c0f68350 -> bf27d626 3f395d82 be5b54b9 3eb375e6 3f3e91d1 bf20451e 3f9a4aaf 3eab99fc 3ce5f3a0", + "c159d9d8 4208c00c 4205e8fc -> 3f74bfbd 3e896d9c bdf1a309 3f1c24b6 bf16eb6c 3f1ee3eb be1ffd2e 3e46e50c 3e1aa0b4", + "c0dc0bc0 4059b450 40ff12a0 -> 3f33f861 3f35737a bd6e8364 3f1168bc bfc1c3e4 bf27e4cf bf0653dd 3e8f5f0c 3ebd4770", + "411475c8 422cca92 c22456e6 -> 3da77776 3f3778c6 bf314d3e 3ef61bd4 3de32b8e bfc243e0 3fa1333d 3e7835d4 3eedf452", + "422ecf00 c0f49820 4243b8e6 -> bf2e07d8 bdf08734 bf395337 3eb60973 3e35f4b8 3ed2d9c4 3fc4bf24 3ef3e521 3e138ed4", + "41857fa8 420f6632 4154c9e8 -> bec6d2dc 3f697a2f be07270e 3f2661e2 3d905960 bfed0cdf 3bf59af0 3e0dc848 3f77bf02", + "41ad1170 c23fe63b 420ff572 -> bf5f6548 3efa0a54 bb16e9a2 3efbe848 3fc81158 be1b1364 3f247a9a 3eab495e 3da02e00", + "c231c76c 412b2cd8 4244bc1a -> bec73d97 bf69d702 3df40fa6 3f12ee2f 3e7917eb 3f8ef053 3f595988 3d27fb40 3f5fe448", + "c229ee74 c180c888 420dd276 -> be9c7885 3f72fcd0 bd9a5b1b 3eff54ff 3ebe99e4 be6e82a0 bf1e895e 3e9301f7 3f0aaeb4", + "4221c93a c1d78674 41bb3028 -> bd8190cc bed56d11 bf682237 3e8c87f7 3d42371b 3fa9ef4f 3efd0238 3f0083b6 3f5b6e1e", + "40021e70 41609a48 c2456022 -> bf77a773 bdcde2d9 3e6e077d 3f5019b9 3fe57676 3ea7e3ff 3e91a6cc 3cb4cc20 3e7fa96c", + "c216b728 41290d2c c1ae2d39 -> 3f25a030 3f17e8be 3ef52cdd 3ec3464d bf0f4608 bf10ebfd 3f0456c4 3e87ca13 3f0b6640", + "422d5626 bea43f00 3f023a40 -> bef007e8 3f37e959 bf039028 3f21aef1 3f8440cc 3ddb3020 3f061c82 3e1bc2bc 3f354742", + "420b5490 c16f29b4 41c15164 -> 3e979713 bf7427d0 3d562da9 3f13c88b bf605bcc 3f702f95 3f430ef0 3e1113ac 3e84891c", + "4144e214 412bbb24 c20219f7 -> 3f4fd4ed 3ea9e9f6 3ef5f62c 3e64c04b bc9e60e0 bf184c64 3d8efc60 3f2f05c0 3e3b7a30", + "4241eddc 40bc3550 c1f95e7f -> bf23bd13 bf2bedaf 3ebf7b41 3f310262 3f8e949c 3f99e79f bf89c588 3e3536b0 3e34f7e8", + "4185137c 41a507cc 3ea6db80 -> bf4ca8a8 3f0d69c3 be71c370 3f2ea6fb 3fd512d2 bd76c150 3eaa15e1 3b711400 3d6f02a0", + "c0a7c950 c1cad1e8 42274a1e -> bf48b0ee bbf56b47 bf1eeb61 3ee0665d 3f6d2a88 3f0b565e be57dfcc 3c21a820 3f738cad", + "c21ef44b c1115d24 c22fc9a8 -> bf7acb9a 3e3c971c 3da2ef11 3f163eba 3ee8ed6e bf378080 3f15a0fe 3e03ea50 3f606b4e", + "c0dc6418 c1a91004 3e922780 -> beeac8ce 3ed8f065 3f47f93c 3f08c5b5 bebc50e2 bf5dfc94 bede394c 3e67f834 3f5f7919", + "42401686 402b54f0 c19d4302 -> becd2a47 3f5d6f7a 3e9aa666 3f3868f4 3f9b2b97 bf746772 bf612033 3e4562b8 3f2bfdbe", + "420a4a40 c22b0474 c1a6b804 -> 3f16bcf8 3e1dd245 bf4b1e6f 3f5e7f97 bfb3bd1f bec69fcd 3fa9590a 3ac8b600 3f457c4c", + "c226f6c4 41fb0c50 41fe5360 -> 3e31ad13 bf26afd5 3f3d26e4 3f3286f2 3f1b2a28 3f82794a bf9f6aaa 3e8010c6 3ebb62d2" + ] + }, + { + "glsl": "ivec3 cultmath_pcg3d(ivec3)", + "tolerance": "exact", + "cases": [ + "a5802853 2e4c61bd 6f1aee13 -> 5ef3f2f8 1300bb2a f26b8884", + "f0dd3375 800b6194 f46f75ce -> 98dedf7c e3440ec1 6e7308b0", + "aab7c655 431c7074 0950579e -> a9522a1a 6f6d524e b7fe0bad", + "f4b15c4c 192739ef bfb7785c -> 3bfe2c44 a3cdd8c3 29f2365d", + "0049270e 6970b9f0 637f71f3 -> 29d7e66b de94b678 14aec4fb", + "8ef51b31 a0a3ade2 85350bc6 -> a49ab220 3ed42d8d 6aacc27a", + "ede197a9 307190ac 8200551b -> febd639b 808dc02f 36d843f4", + "f835260f 1962a846 282f9f61 -> 91f1b9eb 4a6a0b97 84066aa1", + "63ba1e86 7ff5e977 7f43acf5 -> 130c42d5 42a7bddf 1a945724", + "b0760be4 e26426c0 efe9ee8c -> 225351af 6669e5ee e9da87a1", + "6c48ef7c 53dcbbb4 778b86bb -> 724f7f33 3e6e4395 8702ab01", + "04817697 dc503ce9 f495f920 -> 7ca54127 04e0390b 820ee16d", + "fe063242 04a3416b 14976739 -> 0573d4f4 0efe13b5 70c93b8f", + "0141072a b91187f1 545da004 -> 83900e30 9b5e0750 3600ed63", + "4480e233 8bc75099 a0214aeb -> 8406f8b7 904e2111 ce73787c", + "a118943c e72b6c00 cc7a3d57 -> b504f141 e5ec4f39 5613ce01", + "2926095a a8f2bff7 57fe4ab2 -> 06a60563 0e00a946 3eaa37c0", + "0142bd6f bcb1bd53 8f11f989 -> 253fde12 a3d974a5 ad573004", + "60e4c07a d679d0b6 ed9854dd -> c6c30283 0c2e1c16 44f808d2", + "390e5e96 fd529208 89030f76 -> 7349a07e 7f47dc62 659b7554", + "23db7e6c b9ff2497 67b1bfb0 -> 32895174 4586a1cd 20962f6a", + "47911e2f 37fa2ee4 8d01947b -> b8ba139f 80771b6a 6dd07b11", + "e55d7f28 b434e4ef bcc48402 -> 3f610c35 018c36bf 547a33a1", + "ae871a3f 0d350a25 e7107045 -> 0ec4c949 fb3e8052 c39c3903", + "ecd8d190 6c0e0ae6 8899a48e -> 942a61ad e0e42a88 f727a744", + "dbb8d10c aaafe956 a28d03f8 -> 8e04f1ec de6b4de8 65742fc1", + "3c4f337e ca90cc9d a800e6e5 -> 53b76bbd fd2ae411 ead2eea3", + "a436737a 406713b6 eeb66874 -> ee6b9060 55561171 c118632c", + "df7e6f5f 648f3a13 92635274 -> 7cd39f6b 0d9fdcf2 db742dbf", + "6c336bf9 71bd96a8 53db36ef -> 7feeddce beb19bd7 c3bf8d63", + "20e645ec 5a1eb841 39677590 -> 6e6322a5 5e7f3190 1aa9d58b", + "72fa495e dd806f4e 084f35a6 -> 8c7646a5 164458d8 3cc2014e", + "01cd7990 4cf191cf 04ab6776 -> db8e0a34 401fe77f cdcf7837", + "93edddde 21b1bbd7 f3f9a84e -> bfbc929d f4423ca9 9d90fa42", + "d8d42d7d 838c3779 71715dea -> 245533a7 35ac8100 0c047f88", + "a46c7258 b99adede ea8c5415 -> 2ff94b5f b6960454 3a086c33", + "454a3a7e b6315998 91be7a1f -> fa4bc82c efc29ae1 04d7dcef", + "900a7245 6c20bfc8 49a34771 -> fb7370ca f91570ba 35a3d745", + "fae54c30 c144dd04 d28a7c90 -> acc77713 22f3aa43 40ef6455", + "1304b076 f0fd21cd faecb030 -> c8f7ffd3 ab2ed6e0 e456bdfc", + "0c7a2cec 4b8c5902 dd1996e6 -> 752c99ad 2146719e 873ee5df", + "629602c9 fa54b7fe 2881dce3 -> ea0683b6 1ef40a7a 0446e193", + "b41532a4 43a9d94d 69a35ec2 -> 736570cb 5c6db64a baaaef09", + "16d5a635 f0ccd982 81d6e2c3 -> a9e3211e 3a357bcb d4dd1680", + "5b514e99 8aadf57d 6db41699 -> 174482bc ec159a1c 91671e23", + "d20cfaf7 2a771a66 2afef156 -> 8df170b4 ba6433cb 94f63270", + "f7407867 7f2130c6 58fe135d -> aee07fff d9cb9c92 55875a19", + "4cd271a0 aa1a884c 1019558d -> 02f8f81c 58e82dfe dbebfbbd", + "5e45fe72 5da9faaa bfad53f2 -> ae3d3d91 2f5e273c 4ac6038f", + "aea21ed8 8e72a4e5 d2de2f7e -> f07d0180 cf69d8cd d30689f2", + "8fca62ca ec9f641a 6208a98f -> 95fff0a9 1b46e598 80f2f751", + "d5561d24 f665ed79 44a653a5 -> a823b1a3 4a8029d3 34439682", + "6add8d06 ed665705 a2dc62bc -> 9c4e7e86 b9000ef4 17fa3cc8", + "1d2491a1 6f76152e 462f4ae9 -> 2f702be4 8f874f4d 47967d69", + "8f83a831 2dcf3c2f e8204261 -> 74c7d84a 4ac195f1 1631f940", + "f3024d8e 3a609e1d e99c8520 -> 83256e06 98497568 32f32bc1", + "352df90e 13165ba4 3ef042dd -> 9b71b5c2 5da3c7b3 8ce2c70d", + "6f426d0b ff077e6b 3a269358 -> bc674895 dd953722 5eedc6dc", + "f91e1581 056080c5 c4a241f2 -> b0d385af 4eea0f05 1f6f0226", + "cc1f16d4 880e917d b8f76246 -> aae39909 3c7c9b1c 1e353c32", + "0c90b876 b5328f05 c7dee6aa -> ae768b65 08c7e87b 4f73ea09", + "b83fadf8 8626ecba 11769878 -> 72d257ac d37ae66f af9f1093", + "75f3bc5f cd3919fb 0d331de2 -> 1efe00a8 a09fe327 fae33775", + "271cbfcd b137aeb2 0a199c73 -> 9e9ab855 6f6d36dc 8b6e5f55", + "bce5ad76 74df79da 27e94942 -> b3d88837 f1ce5ce4 449ed0e8", + "dd14148e b1bb219c 0ef4ca93 -> 5abf21e5 6b6df56c bde97e6b", + "9d614a01 9ef9e6a4 13c8b87f -> f172ecf2 83d0b3c9 348342bc", + "c9c2f55a 86bd48da 728f86b1 -> 5ef16077 1477235c 5f5e930f", + "08a3c19a 99730b9d 442e9ab3 -> b2927362 82c8ec45 0a1c535a", + "f5ae8c60 f06b4089 81fb1351 -> bd36539f e0945596 d9f77ac0", + "e0765e1c 672a1155 ab2f9c68 -> d66f5b5a a868b22a f1ea371a", + "866ebd3a 8d55bbfc a094c7c4 -> b1a4e7ef a52a1a58 89564f7f", + "4c01fedf 012a94c6 477c13a1 -> a7159e01 28f008d9 a9e87d20", + "ec1c4924 ce151755 765234e3 -> ad2214c6 dde02c66 d2e51e16", + "3c167436 05b403d7 d054dce2 -> d27c43be 6bef679b 700473d5", + "15ad277f cfe1bed6 4d05c3f1 -> 70219ce7 ae373747 5282bb5c", + "bc16d896 c5aac81f bc06e325 -> fa6c9f1b f3bbbbf2 91dabe16", + "b8eb948c 126bc2b6 7ee75764 -> 427fd81c 9b92db8e e7ff3ecc", + "cf154454 475b868c 29c34c1f -> 462e1891 dc9e91af 824eccb3", + "61bbc14d 527826a0 e4e0c98a -> a765286f fd40b16b 90497a6c", + "41dff613 f3b3fd74 77d7d78c -> ee12eb6f 7404d51a b214b618", + "2ef1aee3 6d879605 5fcbf123 -> b4d44f99 fa96965a d4497f2f", + "409ec91d be6929ee 740c5ef2 -> d977518c 8b5be7ee b36b6a6f", + "dc597464 a6e4c23b 6b44d245 -> 4ea08072 25d843cb 01e52911", + "38c1a9d5 84cb991c 945c51eb -> 9918e2da 66b2cf63 fd2eaa86", + "78863656 bc17d67a 6fcec722 -> 3bfcd8b4 0c2f8ed2 e39b1c3a", + "2a4c5e81 0346eafe a774aa8e -> 759c71b4 f9a7b363 4b3f37d5", + "e3e6554a 06d069eb abfe0aa6 -> 26a1c574 eb06ebf8 ec0acb96", + "36de23b2 705c7886 0d71376a -> 03dcf627 f697bda2 a42ed50a", + "23b290a8 8de31d72 c6349636 -> 1eea8734 45c1c02e ecb01181", + "3f3f1e53 ed011e94 3da60174 -> 0c0adc9e 9a8d961e 45d71b69", + "db7375d9 8d99cd81 aef9d6e4 -> 5df4eb2e 2bf68fb2 3f8cb039", + "881378a6 5c0e1a70 5ff91867 -> 1c5bae37 504bc6c3 6c88e1db", + "bdc1a1df d2f58c4e ff34dc4d -> a282eaa8 1fec6005 cb1c8a6c", + "87bf8c10 fa9fd306 e62b2735 -> 8cf33b1c 8adabeb5 c185e371", + "747a8577 e54411f3 e746e0d3 -> 06491014 dd3a62a8 78467e66", + "92ba1981 c2e77d97 c5a5b740 -> 24ad6d9d 225d3a65 dc920899", + "aad7dffe 15631096 a0a7d30e -> e9c37cee d0a18450 f4c3bfc4", + "0a77ac1f 65d41a8d 00fedc5e -> 69b852af faa3c3ef f4c1dd4e", + "b63f052a 8982bc30 0caa35a0 -> dc1b097a aa98cd77 51c9bece", + "b865a035 694286e1 997b176d -> 27d8cfab f6266f9f 5c732caa", + "fb36e6e9 cd0ad10f 946f70a1 -> 23e56cfd ea10b96f e2290032", + "336dcc01 1f808e33 a1820b9b -> 68c54a31 56821d1d 18ca5ca6", + "6fd763c9 41e9551c 52eab6d1 -> 4740612e 6636f85f e0903bb9", + "442d799c 661047a3 42ba81a4 -> a225db06 4fca17fe d841d1b8", + "6ac5aa20 f57b347b 723b7d5f -> ce501731 0fa77854 21401bb0", + "67a80ec8 8aa632e8 4c0e5851 -> 40dfa90f 766a7447 aec086ab", + "0ecdba60 a0b4748f 4e28c81f -> fa8a4d10 189d9600 005b92fe", + "bf8ffb5d d2e4ea72 1ded093c -> 35f66b09 1188daab 8170fe3b", + "a584d5b5 743f705e 043724b3 -> 18d25808 064aa672 d57e95da", + "03e6bd71 d74976c5 effa7d9f -> 38e1d891 30a38fcc cf35036e", + "c1bab43d e9d2fc6a 8b8830c5 -> 3a6ea6a6 dfbde340 6eb2af0d", + "d06d5f0d 5b5aaa33 34cf8945 -> caad2aaf 11ec1e69 1a0cd268", + "6fad328a db44d6c9 85a4a96b -> b3ae46c8 d85a02ef 7ea717dd", + "6004ffad 41947037 b9c72748 -> 4236f2af c2b36e90 4a882e44", + "810f4ed3 088c5cfa 27854e0d -> d282043c 9a5c96fe ecb41a96", + "b4cf6726 7fa6fd3e a13b4876 -> 35073bb4 8d2cf358 fd427a2d", + "626957d4 79294d95 de01cb29 -> 2de4e3e4 f4bdfbcb 30714a40", + "f6197719 b0d26d23 d56369a3 -> b4dcf4e1 459c9e1b b7cedf4f", + "4ee5ce05 b05d98b3 45d01a04 -> 220bb2ed 8635fbd8 f8a8bdb9", + "b5855a4f 4c80f04a 2d5fbb7b -> c4f97b2e e5c18033 b59f5322", + "b6d1ea45 1ce60a3b 02d19a32 -> 04e125dc 4f119ff5 d0d0bd92", + "bc68c60b b7a14134 f4ef6b99 -> 1ae14823 06d34fa0 3a4785fc", + "5bf0173c 77369f84 e4a2f07a -> 1b6a28ba 8a1c3ae1 30b48b25", + "1f10ce62 dd3e5077 32d307d3 -> 7f97e083 0df09b22 04d91e69", + "326e3326 dcd77957 f73e3026 -> 2f9b2174 f40ca51d f3b72918", + "9111f12c 66bfdc7b edcd72e0 -> 4415c490 c980bebe 40ebd15d", + "3c9ba6b5 f658a2f3 6d69ff37 -> b6525f29 d5585a72 4b1beab5", + "14b4ef95 f4a3c32c 8852f2d8 -> 3ab331ea 8ba3f795 7f535d07", + "7f9a0e7c 7da4a3d2 f7222c0c -> e3b8644b e3cf2688 9d1a06a1", + "0457d9cf 7b06c340 26dbdc99 -> f98dab9b 1a488b8e 8a40d8ca", + "28ae61f1 ec5112d2 85a1e4bb -> d6187644 a85be492 dec6bdca", + "80841de1 7271cfb7 d488e76f -> ea591d83 d099d7c4 a16784a6", + "3018846c 9f7a8738 e93c40fa -> 6f40050f 07b27015 4b730b08", + "fa43bff9 801998b2 f6c3bf40 -> 169881e0 8f3836ff a8aa65a2", + "481e605b ce631e70 b248158f -> 8f5f8ac5 217c89b4 937a511f", + "791da67b 09c09c88 5aa8484e -> bcc084c8 f0a737dd cdc7945c", + "858313d4 6b3b88aa 9615396c -> 8c62af28 f9486f3e 480b8267", + "b1461289 36f0cdd9 9d577599 -> c29cbb61 810c54e0 1f28fe69", + "7eeacab4 06f1a81a 06114d5f -> fe2891d5 60312a1c 12af6fa0", + "0b57be71 3184a9f8 c582a5c1 -> 05305d39 ddf135e9 10e5fad8", + "1ef8fd55 3c28688d 09f48f49 -> 7e7a150b 65d89db5 11013adb", + "60fff9d6 4111dbd0 e5e715f9 -> c9f052a4 13f8cb48 3be35dfb", + "61fddb37 a0e33c1b 1342dc02 -> 274e716b a74df4c2 e963b777", + "6f691b92 79847598 0864ce49 -> 3d09679a da45d001 a8ed8e78", + "6d8b7de2 2abccbf0 8cee8725 -> 9d27a88b 0dd54959 499f2b3c", + "01246a87 579bdabd e4329f67 -> 99080336 477cf3c3 6eda4a1b", + "31a45199 8d6cb692 ce1bec63 -> b211b51d 12a7e40e 9a91afbe", + "d3ee2bff 55a91999 b4307bda -> f8362998 0e90e132 3d636a9d", + "7eb78e3e cc914388 821417d5 -> 2ee65ebf 54e9434b f7c29447", + "db535a54 9038852b ef96d428 -> e3e9c258 ae3bc175 194901d2", + "b013ccb2 3e9dd446 d3480641 -> 34dcb151 c7631d0e d2ebecb6", + "2d0eaf48 d0d77e7e 60755b88 -> 83bf81d9 3b53b8f6 e7ccc1c8", + "1a211e99 03563f4d 18675dbd -> c5bfa911 bd59a1f4 36c8ca7a", + "f7b332c9 807f3d04 2d34bc24 -> 96e61484 72914bec 10cd6b7e", + "6087f35e f0c3ffbb d7a23841 -> 89ce0495 a090cc98 2785beba", + "01f702a0 bfa3e819 93a464af -> eb0c52d4 57f88feb 20ff3706", + "725b68fb dba9934b 55386ec8 -> 952926a5 f23c35c8 0983055f", + "0bf2e9c7 e7374a3a f550dca6 -> f6be9295 58017940 09ef755c", + "fe1337f8 bde79224 55e5b488 -> a974a856 e1a119bd 4b14c7a3", + "3f23852e 07def34c 4c93389a -> af296c3b 67a389b9 d76b0471", + "824afeaa 6c95a612 9498bc31 -> 59f3ae16 f205532b 7c7c3385", + "02218061 46c5b1a6 a9d030a6 -> f3f885eb a31d11ec fb0f74b7", + "ed0004d8 160bf106 9c51891e -> 39f2a44d e133d6d7 c294b3eb", + "9ef54e37 ae5afac1 af93f49a -> 352dc726 808465e1 2d381fb5", + "80cad8db 8273e4ad 8b3483ec -> 90f8aafa b5802bb5 da94e31d", + "74f170da 32636f67 b4fce951 -> c013d27e 7803bb78 4686f832", + "b5b98fbf da0dfbfb 91305c32 -> 20e26d52 9ca152fc 6cc21c19", + "fbfb1673 fa0e6202 257117d3 -> d6f68963 b95cd0a6 dacf0ac1", + "0f18dafd 8363a43c 9c40450b -> cc4d69c7 24c70c3c 48736dc8", + "81413415 0a49d079 6ea5c55c -> 4a72c56f 9b237f91 3f5434f7", + "0f77705b 7166a143 11946a48 -> eeb96d83 59061bd8 f92232c1", + "98f2b9ad 8b6e617a 81a1c397 -> eadddba0 685603bb 98795093", + "75e9704f 00c72b63 406c7b84 -> e65be4c1 e8354ae1 d16f380e", + "464abc6b dbeb282c f3e18f1c -> 18ab2c5e f83a621c cc8e8f26", + "0f746ce8 49d1414c 5533cfa0 -> 1c498195 dd6fad3d 23892c8c", + "8fc73d8e d08dc816 7c4db9b8 -> 15931558 e23623b4 c853306a", + "331664ba 962d7d67 419a71cd -> 5e6a1232 5b782ba5 193bd46f", + "21bf60d1 87df63df 89e5f157 -> 6368ee0b b5ab1f38 9b7f7d5d", + "a3cac1f8 8728df40 a5f170c0 -> 17a77c87 6f34208b 4836c33b", + "7dcc7c53 5acbc39e d4bf83ec -> 80eeb406 ec8d7e6d b6603e99", + "a1326e35 69d98ff7 2b509baa -> 0afe0b9d 0d6e557d 234fec03", + "e9dbbe4c a7083207 7a119a80 -> 42ad911e 0b3796ac ff38c981", + "6b329bea eb0d02c9 ba8444d6 -> 3e7ecc53 2750269e 17485411", + "f9d3f893 12d3e33a 7931c7f5 -> 8ec6dbe2 878bb3a6 c1e56477", + "e717a654 b0216aa9 f9bbcc77 -> 8e4a2740 e9683248 acce0648", + "2d19abaa 1e0f847c 817ac6e4 -> dd181838 7f6f79a2 d4311ae2", + "8375d7be b7c11ec8 20e1a075 -> 6512c687 170d3d36 ac9d26e7", + "35826549 57853229 b5ede9f4 -> 00824c75 be3ec061 1934eb00", + "fcdaa6d9 62c09937 6cedf64d -> 2bd9522c 73705f58 2068a3c6", + "8a2d6ad4 1874785c b616358d -> cfcf7333 757ebed9 936a78a9", + "0492827d 6b948cec b437ef91 -> e73c83b2 5cb3415d 32c43a4c", + "a6f30986 958d4792 bed908a7 -> 5b1fb7f8 c630182b b64d4b41", + "afafed35 c87315b4 05d4a8c0 -> f627105e a7a05888 1ae161cd", + "2c17d0c9 8f1e058f ebcb7795 -> 86046358 522582b9 4bc1c0cb", + "7150cc1e 530e70b1 94a68af8 -> 30e7aba8 33edf9ad 66ecd5cd", + "177fb91c 75037243 e0e2fe30 -> bd904885 94eb9be5 d70d8192", + "18acc144 e8748e7e d75250ae -> 4b436c42 fe193fc2 433f8d84", + "f95c1ab4 810b9a9a 8e134329 -> dc857104 230cdcc9 b651af37", + "e4baf8f7 e25e2501 c5db43c5 -> 6ac3c0b2 f3b146ea becaa735", + "7f7a90bf 6a95d7b9 13959c7e -> 4118b4a4 4c76bc1b 95107c71", + "6706c2cc e152e34b b280ed61 -> ae3aa734 a7ce69eb bc978a4d", + "118b0c2c bca07eae 75e5d3c1 -> 2dc3a59e ce96fcd2 97b65003", + "81ad2b76 6e80048f a7dbedaa -> 1f6e4380 e94a98fd e7669ab9", + "47347164 870fe0c9 d00773da -> 23d7f5c7 e457d463 4ad8c0a9", + "3d6cda5e a3d720fb a7983aba -> 71775816 ae006c56 07b954e0", + "37816896 e2f99fd2 36693bdb -> 76a963cf a5a1f047 e0d4ccbf", + "215e679c af588532 4aa70e98 -> 983b8dbe 066b954f 059014fa", + "4711f1de 715a2c5e 04435dca -> cd8fa57c 48f957f9 a1146af0", + "443c11fe 4da67889 5e3744bc -> 83d1f7c0 4953158d 75fbd3e9", + "67fb152a 5dd6d727 ae08d74e -> 737a6872 54a5dbb6 c2444216", + "b14f82e8 2005f77e 5df4415f -> 4bd35146 ddf9fb87 c6f49a60", + "c7cdb415 583e9642 f087f17c -> 3d0b1440 5cf9f7a8 849b1055", + "da997fcc 4a77a2be 018b0ba2 -> 2f83cac2 12200772 870eb846", + "12bf4883 ef59d700 7e0b49b3 -> c4104c54 67744354 5f3c4d0f", + "2babfe63 eaf6399a 4ea527f1 -> a4902eb0 53359813 fb16c6a4", + "c2f88b24 dab74675 fa9573ca -> e0faa2a8 f392d8b3 8dab85dc", + "59790891 d824e450 efc91d00 -> 75f2b0e5 cd94223a abfa6be4", + "533e53d4 3f2c0c1e b0dea375 -> 501f0f84 22ca25ff b83bcb56", + "33ff4865 1cdeb9a7 f82ba0b3 -> 64ad5a47 d69ea8ac 0730b57d", + "d8109d28 aec7993b 1e610bfc -> 2bed6ebc 6c8bb625 a81846b9", + "6d9b023b 86f29087 e965bc4b -> 597998d5 b10b6f3f 1947f170", + "c464896d 92512418 25f81690 -> 7db8ad46 ffa479e9 6e30fa7e", + "024e1366 64ccc878 5d6da113 -> 450ffb53 3402383c 77833e1d", + "b568617b 73d82f50 956fd35f -> e9393b8d 1a52ac95 2e3bbd0a", + "7b20bce7 81099f7c 70228c20 -> 007153b6 924c1cf9 243ba1d8", + "d5d508a1 5ea3db7f fee59e7c -> 376a02e1 9aa93623 4d31ca98", + "438356e7 5a0015bd 3126d1dd -> ab196c92 578a0ce8 378a6aed", + "7d6f00ba 4291df75 315f94ab -> 0aa4241e c3941f69 64a47984", + "87d94b40 bf6918e7 b45551a6 -> e090427c 1dd483c0 1e0da852", + "27228632 2f12aa42 bae19d35 -> f6c0ef29 c094947e 69705a41", + "f64911cd 1d320517 db16b2bd -> 6cde6b0b 62b7a36c a28e45c0", + "25e248a3 dd107cbb 10920bb4 -> 3a522ad4 84a27f6f 6a5efc40", + "cc8f257a f23d1be8 d38316f9 -> 3326eb2c c8d054c4 1c58ddd1", + "23895273 57fa3819 502e8790 -> 4512b8a1 79e19f46 6a64d9b0", + "d930e30e 778c0d5c 9a422009 -> 0fcc4383 8f532d71 ff5af66c", + "478161d6 b21f2ea5 2cc7cf39 -> 5f63e2bb cfc4669a b4aefffc", + "db6539c7 4001b685 8d89b320 -> c7ff97b3 18079941 884bbabf", + "bf2508bc 4347f482 efa96402 -> c398310a bed8c7ea f0a5a863", + "ae4b8e0c 17322f75 6f68eb17 -> 71a83f93 d06bc683 a5b52f44", + "35463ed0 2317b2ae a0864510 -> a9099a6e 3d9c6f49 4e858555", + "94cab282 f05032b6 26b75a86 -> d9278679 0b045553 4e6bddf5", + "7c8d9b96 98aeee21 f28f6233 -> 36c5d522 07337835 ca3ef7ad", + "ba5c8dad 8fae2578 5a50eeb9 -> 19a49539 6b9ebd36 e6a9b83f", + "a6ff6899 560ce4df d287ec79 -> 0cad0949 8d9959e7 57120eae", + "d9c6e66e 41282e41 e8869ffd -> ea98c1bb 6540e695 56169b6a", + "e5371b10 e8539210 8b64c8e0 -> d6bbf583 82d998e9 769f75fe", + "2c421a25 63369dd7 86652171 -> ef680c2e 912b7c1d 70171057", + "afbf449c 67a68464 9c35f0e5 -> 68fb67c7 f41ef2d0 a09c4f0a", + "720460db 143a1978 d8171e35 -> 90ab2817 d4fca390 c5fd9d6e", + "6878e782 793dafa5 3f4b20ab -> ae7409cf 5424ad50 fa1fad13", + "e1273be7 4f37dbaf cae69874 -> 8fa1ceb7 77546ed5 087ad93b", + "1daa5239 b0e26945 9039c979 -> 7234d2f7 d2ee54ca 460d0aad", + "6309f157 c8f43bc2 6fb984b9 -> efcd8573 733f24d2 d3bdc59d", + "f6ffc69f c5b62eac 79863517 -> a093491d 290a6a4e bedfb5f3", + "d5fd5271 7bc86b3d 1903029d -> 6a195bd7 64db8239 6e441fd5" + ] + }, + { + "glsl": "ivec4 cultmath_pcg4d(ivec4)", + "tolerance": "exact", + "cases": [ + "5282da0a 1c0b9c58 446e3e11 5a6d8498 -> 7ad5acf5 bfa99213 1ddf75b7 2fd1385c", + "b347420f bbcee2eb a36d7978 d688485f -> af6e5c04 c30f8fb0 f570b858 75b760a5", + "79cd3223 77c753e6 3b8188a3 1608d623 -> e1a2f55f 1841915e e83ab622 3a149c5e", + "4e59a8c7 e8832f75 7f119d48 92091a7b -> e42dd7fe d6c6477f 4603ab4b 42d5a384", + "d4db7a6d adf18936 62ee955a ceb4a8d5 -> bef3459e c1aab385 a7e110e3 e5fd57de", + "51f9fffb a112cfe3 ffd372cf c71a7583 -> 2213da42 afd5ecda 9ffb76f6 cf98837a", + "54c3ba3b 44248f4a 8eedfe1d f2215ee3 -> fb95d9ba 9d99cf40 4d16ef35 4b9c1b45", + "7730347d 0c397af4 511b0861 281ad340 -> ff979306 253e5192 cdc0d38d 37ee9b32", + "0ff04e1e 8b81fea6 849b66bf 32515267 -> 0a5bac11 4cc7ed11 6a7c354d 468b80e4", + "00e3f563 95e89d0e 91556e7f 853f16c4 -> f5d15e45 858f318e f0bc49b4 384748f0", + "af84d765 83c75067 ccfce930 bc410570 -> 03ddd9d9 931d8c04 6d68a022 9b68596a", + "88213420 94a3089b 7c3d52a4 7d58e2ec -> 0d8a0142 731003be 9752c542 dd18dfc1", + "df8dbf10 7b28b79b d9d6b6ef cf51742e -> 76dd6ba8 58583b48 2576f30a 14030c6e", + "6271735f b74ad6b1 8d25c33f e9bf790e -> 2a2e26c5 cb3b3ea3 9f6c698c 98500915", + "d9a2c34a 6a926262 f2c794d1 dd71fef7 -> 6f081526 c8189c5f 1ec7b529 75fc0142", + "b45ed9ea 5ef64dac 5b8d9457 8ae6ee1b -> 6cf7c320 a2eafa06 81907499 d17bd088", + "2bfa85a8 52823385 0fc718ca f276eaad -> bc5ccc5f e9d8c788 09062b99 1b75741c", + "3abb1fa7 f8229bde 5ba89d83 a4a756de -> 6264a739 c8c265a9 631acf48 559517a0", + "c91d2896 1b7332b7 f4549636 3b507a09 -> bd1c4622 25744196 1a67b1c7 ab72607a", + "9931e8c0 dad4b987 031a2340 cdb465d7 -> f416c46b 5a4d4c56 a64bbb34 183ec8c8", + "5db518dc e43bec5d b79806df 5c794b4a -> 509bc767 5fd3817c a38dfee9 4d3c7efb", + "b501f8bb 2af63d40 ca11685e f0161636 -> 39f132fb 395ef884 d8c0b288 68dc541d", + "4af27256 775e637d aaf24fbb 7efabf6e -> 784a235d 22b03af4 cc234186 ef049054", + "99c1fc50 7e8061f9 9b36c9c7 6b509468 -> edb0f656 30358476 12bf5aaf b8c85d7a", + "3c13e6ef 027fd32e 9fc3b25c eb7359e5 -> 4717f4c5 07b36df6 527546a6 1296c299", + "dd5cb7fd 58b82ecc 6cb148c1 d3485271 -> c407acb1 e73638b1 6328708e 918ea277", + "8053b977 cb1444bf 0b0eed69 1ce2e020 -> 1968683d b1238fcd 9c96d867 3eb9f8fa", + "c0ebbf59 94f244a7 cd8e5443 379f89cc -> 13f4f0b9 84cd4264 27132526 787a10f2", + "10d7164e 62c50323 c026be33 6f64772c -> ac124381 5bfaace7 b2725bfb 370e1266", + "928af7a3 c63246f4 875552fa 27a1b6e1 -> 8bef317c 348ed446 3181c5ec 968a88a5", + "bcdbbf33 0084a1f2 58bf2c79 d2c11ea9 -> a1bc1733 010337cc 7a7633f4 1553488e", + "7909f398 a17aa335 e100d13c ac80e208 -> 959faa13 56ce06e1 c3736a41 fd0a3e2c", + "b8951719 8153573f c64d732e 649bc077 -> 7fba3d15 e94fd37c 3e4f360f 4948f02b", + "66260a77 13a36c6f e3f31fed ec586ff8 -> 1c7911ef 97088df5 e5f5a261 dd7fb3a9", + "a030a2e5 ea983603 a43c3f21 6493f30d -> 4d3fff4a 2335a34f 8e5e0cc2 e64dadcc", + "45698d2b 26f7d04a 13caef8e 21e6597a -> bcafa4c9 7dd9b4ca af758ef0 6eb2aea2", + "1dee7bd5 f167ab53 70ca579f 1013e6e8 -> d7b008ed ce6049fe 51b42d6f 1ce2b32d", + "756f9f3c d6e755e6 a96b4cd1 4a2c6dc2 -> 6a15b875 9d999a60 de57da23 e0a8a067", + "6286061c 78fbdc8b 2698d156 6a972451 -> 6a8385c2 6b6fe948 e2c0711b 83df9559", + "c92ee3c9 cb60b2ea 65be195b 79910a9e -> 4a32c4c1 890e446f 05c2ebaa 70ccf0b9", + "ade02678 7bb2d7c5 38474de4 a12d175b -> 756a932a 43693bc0 7fd1f5c8 01d2b381", + "113360b4 62f6acc5 7f482b22 aff5bc7b -> a1c89f62 09d46599 a1660b81 c0224054", + "325f478b 98da5a75 1d9d60f9 f524644c -> 7c25240d bac1a5f7 85979857 be82e09d", + "08dbaf86 d98b7e73 87067072 af4fc238 -> 5bb8eb7c 8fcdbc57 320cf6a9 93856036", + "866862db ed66e00c e8154a0d 861cfcdb -> 1d108255 b87cdf67 dccadcc5 080f2ded", + "cfeacc1d 6c84866d 1822252a 1fc1e884 -> 901db5cb 96be0a2b 8501815a 1cf438f0", + "f7fc9173 f538700a 33ca6f46 31ef6bf6 -> 94597f2b e88eb156 92829450 cad443fe", + "a8ac9c4a 1fbe5caf 0fed70b9 c6c30f13 -> 36299106 48d1dd9d 0c5d7f73 f4dbe4e0", + "f1b6caed 6f037bf4 92be265b e61eb67b -> 925de2a4 a19fb7b9 2c0d476d cc1df6e6", + "7aea7c1c 54cd9f27 c8561416 f54c7b45 -> 92365952 215c4fb8 f5aa8dd2 b0ba0428", + "4fcc587b ef46c8f7 48257f73 d94ae4d9 -> 7e63cf39 ab729ef5 e2ad4737 e9a3ef8f", + "d8638ecf e2edafec fe2bfb22 1c36a31d -> 0831b492 1bea5992 cf54fb4e 6c8f9ded", + "f27794d5 3956296d 12f88f42 b64bb703 -> 3f8cf2fb 83163a42 988b08e2 4cf809c2", + "68f2041b 76061dfb 1fe0986c 89b884b8 -> aa47336d 6931496d 7077ed4d be490cc9", + "b1d656d5 87134b98 caa2f3f4 7620d1d6 -> 5a72edca 0be5a253 49a14a37 20235a80", + "61c20733 7e1fdccc c16dc054 0ef8e123 -> ef695fb4 3175faaf a0499058 262060b7", + "e135116b b6b06642 09e613c3 8c18eaf4 -> c0092a9e 0c399557 4a257703 c7024b26", + "da35ea0e f2cbc22e 69b985ad 6508cd1f -> fd20627e ac3b2038 1634b7de b1ce69b1", + "919fc283 70e3dee3 383d41d8 cb5e1b39 -> 29dc8128 2c194a2d 5d03112d 06e16f00", + "381d6349 2de8fb9b 841a4245 923360db -> 41911c83 eb8f8c3f 142e9840 459101c8", + "6b01c8ce a60210fc ee3832a9 0a3112bd -> ec906b30 7e44d625 bc150b4c c00ad8fb", + "db085ca7 7aa4fbdc 35e2712d 44d00bb5 -> fcd31f00 53afe935 b8b66d7c 9109e5c5", + "faeeb6b7 e5c61c99 96101d6f 11834403 -> b1e5f4cf e77920a7 46c35726 de09d261", + "362cc992 aeb1ac83 4d1f864a 59e10039 -> d52752a2 2a53cbfc 83d702d5 84e72a7a", + "768db913 63290caf ac11b172 3abd3cc7 -> 9e84ddd8 5f3349b3 50438358 c0c53e0a", + "7eca16d0 43fda921 01229571 148f4afb -> f3c0ba41 f413863c e744d700 43877b05", + "ba0373ac 23cd2f93 26e044b4 242e6017 -> 2582718c a7b93517 55c437c2 c3fa8c34", + "1ac2541a 7ee5207f 1b8d7104 0601a0f5 -> 95663f54 b843379d f0a485a4 9b3ca6b0", + "b6bb09c7 a58b0542 44ccefa5 a01884e6 -> 1acbc07f 35aa1515 16450d35 3ea19625", + "89226a17 c93300b6 9dfa1477 21e0c7d0 -> 4cec37bb 95cddff5 24b1b02f 59490ab8", + "95b16d69 c6e31096 273b6c9a 3dcfa91f -> 61f0e1e2 7834fab5 76fc0ac0 7e110f36", + "5ae79b0e 22b19973 3111c28a 9a08f809 -> b55f8313 b3fab109 b8109a59 d188903e", + "e83ee951 4bd2552e 092a3636 4b5a774b -> 9496938c 14eb6663 107d3833 a1ebd983", + "1a2bb6dd 536d5520 016889c0 9d07b761 -> c998d4e5 e9ae84f1 6d09a193 9896ba51", + "1519c9ed d764a2d1 51faa799 cd4c6572 -> c1b4509c c3868da4 e0fe5c28 0457f14b", + "582564e6 5be4daf5 64aa84b1 dbf75c4f -> b9d84611 23776268 c825d00f 424dcfa8", + "32be6273 cb93ebbf 3099a36c b69c9d96 -> 7da7be20 6546e2d7 2a023f32 bce2e0e8", + "8a338ac3 38e09d75 3c28c00e c31059b4 -> 8a776419 961fd3d6 0e26a9de d4be8b0d", + "c4cd7011 f8260d1f 7f37efd6 21b7d833 -> 2dc88384 1c365a2f 88cd8aa1 092732ff", + "375b076d 13082281 01ddf9fe a60a1686 -> 9100c292 9ec2d71d 1d9a973c ae4e018e", + "2aaa25a9 5b6c77d5 dc6adf12 924347ee -> 3b6598e5 3193c16b b1098a0e 0104ee3a", + "62f42577 649a0f3f 85eb50d4 8279df08 -> 5f04ec68 2bfdccd8 86fd3659 70849337", + "a0d2db98 949078d1 3b19cb6b 4fd25909 -> 92f1e3a1 36347a41 a2f62a5d 444dffc9", + "2162a744 bf63bde0 dc54e219 f5523c5d -> aa6a7d14 438e0235 cd0b05e5 985413e6", + "208697c3 d2218267 abc7a900 a0aebb07 -> 840cea27 a404dbac f276fc15 96c5db6c", + "e9617a19 de39eacd d9098bc6 6ab71adf -> 0900a09e 1f97afce fda6279f c6b54dbe", + "149d5331 f21fb8df 3948d902 1c1e2d25 -> b4424b02 fa307130 d62f9ba4 7e69ad27", + "3490b333 e3149cfc d59b430c c544945d -> a34e4c26 ec4d6fc0 325b9721 c9c56f42", + "ee9e2412 36f78e98 d3b3864b 54483f12 -> 321925a5 ca8656d0 10fbddaf 1552b3e8", + "79ad3019 b64f3f27 7d8853d2 ffc8953b -> d6c6dbc7 1cbed898 3e96dab3 cd98d1a5", + "9b16d0ac 09d8dc11 b18a503b e834c3f7 -> 5433814e 6859954e 6bb45486 4cf9ade9", + "ba758841 0335009b 61b638ff da332c14 -> 59a20b9a 9b516939 5bbfea6b ff3b2223", + "6eb7fdb5 ae398ba0 1342233c 30e3966f -> dad59afb 31c9e3cd 27ef90aa 8e041f31", + "163f4d5b d0cdab2d d00a1e1a f22c972d -> a3c9045d 45470ab1 274817bd 24c64240", + "34072e17 6f0ba764 ba925344 38287ed1 -> 91981422 8e2d0f16 4d69ad42 fe15b9ca", + "7bbabe2d 52e19288 bd749374 7ed54f61 -> 7ee7c8a8 63dac721 bcf5aa45 b99a95f0", + "75712265 dd119ba1 e51c6b9d 43e6d230 -> 0591ec4c 29e8ba3e eca3175c 7fdc6474", + "cd776474 dd1bbbe5 cd64161b 76ea1322 -> ea055805 92fa2918 4d52d433 080dc6b6", + "14af5820 6bf29009 e3af3925 fe15afa0 -> c4b44ed6 923820bd c0e2fe04 5c16d243", + "62ff67c7 e84a442b 7f697e0e 0c517980 -> cac0d45e a1e19173 10e6b067 d4430ff6", + "2e7f6f57 2899c04a 9876994a 2d031612 -> 84e73b7d d322fbe3 16e825e4 902abffb", + "fe24649c eb901091 a14c69ec 83084cab -> 5028e70e 76165091 4370066c ba317a88", + "e6d27991 751a609e 485bf0e4 ae0004fc -> bf5bc4b2 afc4baf1 da534e52 127a294e", + "ff918c9d 7f61056e 551134ec 1334a0a8 -> 291c5a91 66115545 e7015941 2801a6f1", + "2eaa7c84 72a181ae aed966f5 ac76ba08 -> 88e6bee7 ead08c90 25d46f6c 7d8f2ccc", + "0e4b4013 e5e7cff3 4a645984 f1937286 -> 6bdd80d7 8e1fc98f 05a73bda d3c4764c", + "253b23d2 69fd033d ce0082ef e66b2478 -> d79fab57 eb084e9d 68c48f32 4c2b218b", + "6ee197f1 d2d1553a 2c11f627 8dd0f795 -> f2515c92 ef8a9e9b 4a1968ac 86e1de6f", + "b6c717fb 5bc73a2d db99f3e4 cf2c342e -> 09147e07 5d693252 a02cf3ed 8d403645", + "44459fe6 870e29b0 b736ac14 4c387fed -> e3b47e33 a6ce3e6f 9913522c f1537946", + "2761b359 ac8a6698 56bf4545 596f40ca -> ef131a63 e03ffec0 abe43828 b14e4898", + "275e9c26 fd274103 e3e1b5c4 c2d5999e -> 606948a3 4d7a37ec 36323cce 52b798a6", + "cd7cb5b5 76aa5627 e44ea083 2791cde3 -> db848a31 7cf06923 e898b738 a394e897", + "9b1874d6 dcab07b4 0c228cce fd2b6886 -> 6bede8b7 5339eab8 6db2e154 26b06107", + "45c466e7 f5a68d76 60dcbf71 959ff269 -> 6f283761 aa04c07b 9587ac15 de39703f", + "2f91f0c5 899e7dc1 08649d6a 33c24733 -> 33472e6a c1e69436 c77d18e5 d517f426", + "b14c6248 712653e7 1b7266ac 6d447a3a -> 38729db4 36e29259 b7362c68 865a93a8", + "0bd75d8c a591ad33 0845102c 1d738c97 -> f6505c2a 0fe3e1b9 7595089d 71345827", + "dbd10129 869ab4b5 1774ad8b 791c27c6 -> 2bc46fef 143c422e aaef513f ed0f4e57", + "91673066 11d1372c 7a4aecd3 ee66d5fc -> 784f3223 0a3c365e b16690e4 a5cf4f45", + "665a2a9a a89224bd fb3b1693 4152746e -> a9e6a874 4b47d58c 40081a3b facc6484", + "c90ba92d 6cd16d28 586ad7a8 eaa6309f -> f94d9a62 2331ba6f 1b528c70 414185c2", + "eb426bcf a6cc8907 7844ce52 0b02d246 -> fcdec043 76c7e9ec 10203859 6f7acd61", + "da2338b2 fec858db 86fbdf31 3c6a5771 -> 3c0455a5 16ce0123 e7d88902 e23213f0", + "d8215807 a9b75724 5bdfec90 2cae7567 -> e45cb24b f43a242d 9a2a2318 993831af", + "9b3e9090 40f1225a a84fd17f 273f4829 -> ecd06c53 608ecded a3da6b51 91cbde9a", + "bc4e58c1 ab3d557a 50fbe11e 85075cc8 -> 87774758 912f1b90 7a8c6940 e6d98263", + "8a2559cf b8b32990 ee338665 41eaee1e -> e4f24cb3 72f816c5 53bfb387 e886d421", + "e8c62930 8079ba7d 57749143 20643c60 -> 8c4f526a 8ebc22ce 4f54c10e 9b4c294f", + "e7c051fc 7d8f4a1c 7aebabaa 3281d38c -> 160cbfae b3cec701 4635cc17 f2cfb8f3", + "4a3cebe9 7eb548d1 d0fe6efb 10ac2455 -> 6026dd9d 55e66f66 aa2acf35 0ceda93f", + "93c7c1f5 118cf185 9702e790 7f5e647e -> 2fc13667 9a90d096 a0425aa1 8fe7da1c", + "8374b1c2 2c96a87c 5230f4cb 9698fbca -> 36c7e0ab c45e3391 fdb32865 623fd8a1", + "8ad72e26 1d1d1b67 31b92656 d06e4f16 -> 787d3c84 99aeedf7 5c995c41 7ceda439", + "e545fa57 490bc96a 00363b8b fbd175b8 -> e3870e5d b44677e2 541befb5 4cac3427", + "8582bca1 fafe479f 839ab9dc 7b768ce1 -> b5cb86f0 19f97580 894b6aaf 1399a1ed", + "b755cba0 3d4343b9 1a9baa7d 01f49830 -> 30d1aaee 1f6954a7 5f6aa06e add2ffdf", + "a90af28a 91b1bf44 69f0729e b922eed4 -> 2ef656eb 19142fef 6f82fcb6 012a359e", + "7c399b5c 73ea0db4 afa60958 659faf82 -> 8a2631f4 c4d7bcdf 26af8087 68bdd3fb", + "09927ccb adf67c91 cefc669c c6a5d68d -> 03c7dec0 a9d5c34f 13d89981 dedc2dbf", + "8b2787af 404913e1 fc193279 140ca8b5 -> 2852591c ebb9566c 6564b827 9b4b7135", + "8ecd4ebf 7a7b5a79 70259acf d9c429d8 -> 2deea220 13344894 3347001a 0280e7ba", + "bfed0329 2f6fa99f 1dd61b4d d18008b5 -> 22e9df47 ac1d9513 3efac874 fce3db23", + "3219af89 9c67d831 ec0e76aa 9ccbff38 -> d4e6bf82 595b6fa5 ffb01720 629d153c", + "f0645031 49da137f 476fc831 27275f44 -> 743ab7ea 1612c403 5ba7fd22 122c9057", + "b1280a63 fb5ce240 cc8d5de9 d20e281e -> 1f6db4c8 ca36aab2 9c236609 c4d7171a", + "89d1766e 0b2de9f6 f1b1ea68 ba6d7278 -> 82a7d95f 0ac76459 5a812dfa 6dbf8ff2", + "903cc9d0 67e617bd 5ecee47f 20cd6f90 -> ff052882 adb1e6c9 64220554 7a30211f", + "ae5fd183 d85b4d7e 845e150a d4ab60e8 -> 9740c96c c261c51d 486ff70e b74265f4", + "cd33d3af 4aa8b234 00fda026 98b66a46 -> 1f10cb4e c384d793 2c00a26a 44048ffb", + "7139f927 0802c135 2b85c76c f516c756 -> f7b6bd80 979e9e36 cd773471 170b6f3b", + "45530a5e a415f106 44f73221 a4fc5570 -> f129955e ec910ed3 fe1e8755 6e518ebe", + "e1a25abf b61a6716 06ba9ab5 b78b6c9d -> 8efac9a2 66618d32 cfed9ad7 5e055f5d", + "cc0f82f0 2443e17d aacf3094 6e3a1a42 -> 7a39b43f 960e2bad 3d52ff58 bb745e8d", + "c1bcb9a3 73810351 0dd89cb8 f106c790 -> 824b423f c2eb300f e1cacadb 8bf4505a", + "565ad393 1fecf88a 815b7df9 4e3e80d0 -> 0a947096 8de235a6 18f3a79e 2768a62e", + "1a997001 bfb29ec0 b6eb6902 7cffc79c -> 8406a0ec 006fc954 4e97519c 4d1bc88e", + "570d1614 ff440fdd 981fee84 e56ea13c -> 4f1a9378 41855a1d ac00bc33 d855d7ad", + "9397c12d 639fa5c1 4eeb5f75 2b23faf2 -> 02cdef6d 60be8ab8 4362437f 35590005", + "c4d51a8a 842c3dbb d73b2394 e3048972 -> 6eae9ffe 286d78b6 58ce4a7f fe205a23", + "d64649cd 7e178b01 269a25c9 13b46f4c -> 76cb078c 350c30a0 b055c892 d56598bf", + "672bedcb 684024f2 6b65123f 5d9c2a06 -> 88706321 6cb68bb3 bec1c0ff 3e618ffa", + "e2aeda6d cb68acf1 25d20d34 de8b95ef -> e86305c3 2190cf33 813be083 338a5c2d", + "66881f94 8451632f 19473d9b 7fc347c7 -> da4fb4d0 d2e14ba7 bce01702 63eae04c", + "b098ade7 f62c25c5 8bdf4d5f c82ea272 -> 893cdb27 7b1d4d96 c39e5834 1a306784", + "6b6c9960 799f8ee9 cc89b56d b9286f62 -> 4a109aab 1c2a263c b1716b79 5244db64", + "d932cca0 3186f0d0 72ddae73 04acbce0 -> f1cb01e0 9d6c7299 e61a13f6 c22e0bdb", + "126fade8 5cfc954a c44e04cf 0fe108de -> 177bec91 79d4bc37 5e87ad1e 8cffd36e", + "b4ca68a8 adf17e01 5197cdc9 8ffe1cad -> 702b5b8f 9811ad90 83c9454b cd14f477", + "f64fe856 1416dff4 8c2c8ad0 4b6cb5ea -> 9ed01ead ae52ebb5 7ca8f3b0 aaf0f814", + "47392dc3 e221f9c6 7ca0c068 c34599e0 -> f12187b4 849dcdf3 66c91041 1dfe2fe4", + "51906928 218c4b98 7a101493 7955aba1 -> 7d5a5c5f 20ea08d8 a641702b 145a77f1", + "2a965667 c74316fe c8605b1e f1d89058 -> a05d17be f295d20d 7c3ce107 80e712a8", + "d850b6fe 5d934f8c 09611d3f b78cc316 -> b98d8407 2c469e19 429bab1c af03ae27", + "cc382b64 aeafc65a 312b2f7d 3c637c26 -> e55dcd82 611b1c17 f949afb2 9a2698fd", + "7bedaa40 4397830b 0813e4eb b3cb98e3 -> aa71f805 6fa22999 a53dfa88 417d68bc", + "063a0097 40c45784 9b3aff47 dac5ac27 -> 99825b64 63597d19 6e3f82c6 f3323b63", + "0dc7efb8 59e6c848 c5136ef9 d771c85c -> c79fa76a 9033767d 5c89ebee 34c98f22", + "fae614c5 bedbac7f b2084380 6b38342b -> db81ec9f 2316c32d e56902df 7a552400", + "0437d631 7ee08fed 6e182158 8ae6e212 -> 1eacb2dd e4848c71 91e44390 15d21a08", + "e0f1f1f9 92ebfe5d 588db76c 1028c378 -> c1781c74 f9d568c0 da4db30e 4863f832", + "a517b742 11faac16 cb9bd0b3 77c925bc -> 5d2a9dc1 0ef43102 d9d09f5d 10de8873", + "886f0a86 7ef0ba6e c60e9846 1c706505 -> c113e1b7 3f7cd5af 3be23b63 bc9f0f4e", + "f384b7e1 d0ffb35b ae421433 d88e97fa -> 63486e63 e02093ab fabf7741 359d0fd6", + "2b97e571 8dafc2bb a3a79dbc 5fb0a2c7 -> 77fbb227 d54703a7 cd19bd4b 7517aeb1", + "1c75c3ee e0fad0ba 479863ba 67e72f86 -> 703ad6bd b2988cc7 0120d706 a3b4fb2e", + "0e3e0c7e 1fef824b 0b2c0f8c 8d57d9ef -> 6998ff94 409e2508 8088847c 4c48c9f0", + "a94536fc 053258d8 99c5328f ee9492ea -> b8f98a9b 887392e5 e60bcd64 8d355b52", + "14554841 9b1db952 38b4f399 a9d71be4 -> 95d850ff 8bd2ed39 4dc068e2 e0a0569f", + "d45779f1 c100666a ccbe4028 650e8d08 -> da7bdcd7 08b480e2 536f0d25 7cff607c", + "3c91c929 af803e03 9235a639 787f162d -> 1de71482 a93a24b6 acff8728 0b587d7c", + "3aa51470 8ef96605 11ae3dd2 f65bfc48 -> 81caf356 3272e72c a5ca6163 c6b9a903", + "4c8f8d8a 82243c09 75dbc15f 207db1b8 -> 90afa019 5e91b080 58650822 a83dbd27", + "76366575 c8e98d88 5aa426d3 e67aa0ea -> 532d85c6 db7f31ef 6379c163 69f408f6", + "5b5e83d1 887d0a6e 9f14ccfc 5f6412e3 -> 047dfcd1 08004eaa 4db16230 9a1851c3", + "15d0702b 4c71e057 c0fed737 b0fddf05 -> 3b8f0dd3 b837e8d2 fd839da6 3f0b5b6b", + "056de593 f0992071 0c6394d7 c41e8150 -> 21ddee60 093e5822 6de119fc 8c4a3db9", + "354ff595 f0d7c33b 0d9bfd09 c8b001ca -> d8ae99b2 16d78d9d 341a5dd3 2e0ab794", + "0c03bf44 408ccd92 3418ee7b 0a1f9bed -> fdd6c4d1 4a5d1fa5 fce27ae1 d5b20494", + "8d8d504a 23786d33 eba1a599 e0cadf08 -> b229379e 2a39483d 7d4f3056 84753821", + "8fc2fd79 76ac40ad 074ad969 4017db5b -> e361da34 447940e0 b3412315 3e18c699", + "e86c65e3 a4e2cf75 831b71e8 bdf92447 -> d05970c8 dd49c53f 95cdceb2 7eca4bc9", + "e461dc8f f8d7ea02 864f3ade b40c4c7b -> b87309e7 3eb0ac45 767e8ab3 35115f4d", + "49d52eb4 6ef84d86 084d4274 b89ccbf7 -> 395efcb6 0cfbe646 4c10b5d9 74c764b5", + "aceba8b7 3e4e33bf 05b8af3c 1ca8820f -> 1a92e3e2 90f7652b 28c5e666 56d78311", + "9b8cb196 d95a7510 1e19ad0b bc61cb64 -> d5da5cd3 40ba3204 333086c7 e587b0e7", + "93cdf082 f8b083b0 f9d63982 42480da0 -> e40ab36b c1c14f97 c1a9ca00 617d9f2b", + "94e9e30c c325d283 b6ddebaf 274b91b3 -> 6349e2c7 34d6f6c8 beab0aca b27fc31b", + "545e331b e4729c81 728aa8dc 13b2d102 -> cccdefb7 7ef5adb2 42f6dae9 e753fa3e", + "f429fd30 c9fd4f65 6a237100 91e2a50d -> 1f2c3d51 9ef8b01d c06b6843 65c176dd", + "0b45e840 8e0765d8 ee5b9d5b 21d452a1 -> 66e1fe58 c5db0a11 6f23c9c3 65425b45", + "ef18a39f 9483f05e 73c67486 f538b6e0 -> e4a93057 d8f6eaed b7b7591a c6389a96", + "96579849 bc06abc3 800f8253 4f0f2a37 -> 3ee30459 1205ac85 5a642d79 47743cad", + "89a5e40e 6009d2b7 b1438ea4 75509592 -> affd8955 faf477c3 070cffad 14640659", + "7c57ddbd d2df2bb1 6ff49790 6cfb5885 -> af1edfae 2e861d59 f3aa028a a5aa6aef", + "114ac4c8 18cdc7b6 8007607c 88c8f31b -> 9a056093 cc11714f 788bb755 ab3fe67d", + "28776f6f 7f1463ff 6fa2d7ee d199301e -> cd6f077d 3d99ae75 036c7c00 2bb33c9d", + "5e4f5037 f819c66e 84867437 80673c06 -> e9dec034 cec8a966 7b15dfa1 5f2cff58", + "69899795 e1146731 3720f133 ed6e7ae0 -> 648d8be4 e5f39fe4 a79c47cb 0224c067", + "3b0a773c a6502f27 011b48cc 00c4c0d5 -> 674a9196 b1f88c8b 2250768b ca418f2a", + "dae51200 2a739e7c a5892215 47d718d6 -> 06ec973a 9d191258 d55fdb75 ca0da93d", + "9fe3eff0 3d7449a4 212502a2 829eb72b -> 5bd3d6bd 37bbcd46 b139d3c3 23c40c5f", + "b26095ce 2a26e41b 5983c1a8 8f8cb3e7 -> b3902532 0074b0c1 c5efbab7 d0e20781", + "df14f133 f8ecd5fe 2972f478 70418eee -> b591d253 8c940ba5 bda7c20b 39f587e8", + "8f898707 503779c1 2475a636 a31ac374 -> 98a86463 f9c71b4f 19361c17 e876cca2", + "6c2b0600 05278489 ce709a64 1f7828de -> 7d52b01c a4a2fd53 f8c72c62 3e42ec9f", + "4dbd36ca 9ae71aad eec83595 2466ffcf -> 0a8b4859 2bf014fb edba9bde 5691c099", + "b7fdb6aa 7a54cea4 2c1fca55 b03ddc0a -> 952023ef 5eb2e381 bda2b278 f3419f68", + "b47d925e 0e42e4cb d88e88fb e2142621 -> b16f5cd8 ad6b9622 eccad7c3 b27daed1", + "048c70b7 a0348557 0ccbf3c0 07e45a95 -> 97d76341 489991e2 01bfb0f8 b1584b49", + "e100f05f a938de7a 16959b0b 11b8d749 -> af6fe1cf 3825c46c 46c66ddd c347dfcf", + "65947844 84fe52f8 6a0417e0 f5c92714 -> 8c757528 66e8f2bc b44dc8cc 9b6d0f90", + "55f45c69 d02578fb fa6abd70 1bf00f73 -> 346c84d6 c0fc7e0e 147a75f2 215c8e80", + "869d8919 1b1d2ad1 5502c583 f9a47e0c -> ac817ccc 9469732f 6f9c0430 b6a6d103", + "96e47c48 7d0095ca b37460fc b2280b5a -> 7418d18c 4726c8cd 63dd9c1f 7a914238", + "f7352f56 31951246 c0a45a8d 80bd9438 -> 19719c23 647125d6 fdce1303 25d0d1ff", + "699967f0 5dd8e4de 453bd06f 077da4e2 -> 48b4a01a 97a53e36 5a8d3cd1 88b190fe", + "27c19413 18c22ccf ca85376b 66a57345 -> 33e0c86e 2b5aa53b 2bc94cec b89717ee", + "c94b7de1 b5a5bbcb bc1afeab 83b35987 -> 50c03a8a 550bd10d 344d4651 f19a35d1", + "ad1dffca 0e40ecff a94673f4 54043ee0 -> 1b23c381 3fe21451 bb7878dc 703b895b", + "7c8ff5e0 33ce219a ed3f2658 f24fde8e -> 37b50f2f 7e79f66e dafcad5c efbdb9c4", + "9a3bbdad 40ac92b8 24db536d 456fb1a6 -> 827ba5dc d62bb280 9b42f92c 7abde2e4", + "6bf538b8 33acf0d5 dfe4323f 7fc1d843 -> dbd54ac8 a818485e 2bf3b9be 3274bcfb", + "1aa68eb4 e6d0014b 6297afec 3ff6e541 -> 46eea90c 1756eb3a 08cc2d93 92b807f7", + "6f62fe4e 1e334380 40832c20 6239e018 -> e994460f c57f81b2 15c7729b 0856ac3d", + "e59a6648 e90211a3 9ee3e09c 737b88bc -> 9e0fb8df 50e3c6d5 a1b3ed44 3c45c1f9", + "907fa4de 47055dd2 821e5455 6ed09732 -> 57b5efd7 2becb71a 977d9680 994476a2", + "57b478f3 dc96fe5c 01198456 ea54c923 -> 74a181f6 32afe5cf 161b86c7 219cd49d", + "26593f3b 19c16380 14e177bf ac09a935 -> 7fed3db8 704ca09c 052cfac4 23e68077", + "5a60786c 831faf6a 947db340 994b698c -> fee5a8bc 10ef1615 30a63306 c6865aaf", + "52067ff4 df349777 0d7db081 78514be8 -> c8232746 58471f94 7c4cdb54 581447c9", + "1b0530a8 064ffe64 052ce14c e4ae8542 -> 873e226e 86daead9 e31dad7e f13fc486", + "3c6c268e 373b9d97 a6991ed9 0aebcd32 -> e8c3aa26 d8aa9b73 0d9c4f7d 47349a2e", + "25d1134a c04144e9 3fde0400 f17291f5 -> 1b6cd397 f624b69b d020f38e c9ff2fa4", + "0548d552 7b3850fb a3670abe 03c38379 -> 164ca20a 96541a1d 1fb1108f c7eb5df0", + "52284f3a ffffa516 611b3be7 c1cd8b81 -> dcf45def 241cd402 6c6c5d66 399ab4ea" + ] + }, + { + "glsl": "vec2 cultmath_iv_point(float)", + "tolerance": "ulp-bounded", + "cases": [ + "4195d92a -> 4195d92a 4195d92a", + "411f5b66 -> 411f5b66 411f5b66", + "c168068f -> c168068f c168068f", + "413cdbdc -> 413cdbdc 413cdbdc", + "4156b6d8 -> 4156b6d8 4156b6d8", + "40a0b4b4 -> 40a0b4b4 40a0b4b4", + "408cea18 -> 408cea18 408cea18", + "418fe948 -> 418fe948 418fe948", + "416852a0 -> 416852a0 416852a0", + "c1447099 -> c1447099 c1447099", + "3f6fbfc0 -> 3f6fbfc0 3f6fbfc0", + "c18764db -> c18764db c18764db", + "413e7cd0 -> 413e7cd0 413e7cd0", + "c1678826 -> c1678826 c1678826", + "417de13c -> 417de13c 417de13c", + "41918e98 -> 41918e98 41918e98", + "c154117a -> c154117a c154117a", + "40a7d508 -> 40a7d508 40a7d508", + "40986130 -> 40986130 40986130", + "c188da98 -> c188da98 c188da98", + "c13f3249 -> c13f3249 c13f3249", + "c15dfa90 -> c15dfa90 c15dfa90", + "3e025800 -> 3e025800 3e025800", + "c17229f4 -> c17229f4 c17229f4", + "c19b10f7 -> c19b10f7 c19b10f7", + "c03976c0 -> c03976c0 c03976c0", + "3fb31840 -> 3fb31840 3fb31840", + "417b72c4 -> 417b72c4 417b72c4", + "40f49858 -> 40f49858 40f49858", + "c13d1aa9 -> c13d1aa9 c13d1aa9", + "c0fa3d0e -> c0fa3d0e c0fa3d0e", + "c1001d90 -> c1001d90 c1001d90", + "3fda0f10 -> 3fda0f10 3fda0f10", + "4191df4c -> 4191df4c 4191df4c", + "41556c50 -> 41556c50 41556c50", + "411ffaae -> 411ffaae 411ffaae", + "c173fcae -> c173fcae c173fcae", + "c0e8316a -> c0e8316a c0e8316a", + "4053ba78 -> 4053ba78 4053ba78", + "c057b8c0 -> c057b8c0 c057b8c0", + "c0b5beec -> c0b5beec c0b5beec", + "c19bdc7c -> c19bdc7c c19bdc7c", + "c141c0aa -> c141c0aa c141c0aa", + "3f9b6b20 -> 3f9b6b20 3f9b6b20", + "41514ab8 -> 41514ab8 41514ab8", + "4190cda4 -> 4190cda4 4190cda4", + "c13bf50e -> c13bf50e c13bf50e", + "3e146c00 -> 3e146c00 3e146c00", + "4182d732 -> 4182d732 4182d732", + "c1918db5 -> c1918db5 c1918db5", + "4107c726 -> 4107c726 4107c726", + "c16e6259 -> c16e6259 c16e6259", + "c09dfb4c -> c09dfb4c c09dfb4c", + "c05d3a28 -> c05d3a28 c05d3a28", + "c0cba552 -> c0cba552 c0cba552", + "4149ace4 -> 4149ace4 4149ace4", + "c122adfa -> c122adfa c122adfa", + "c19aee4d -> c19aee4d c19aee4d", + "4132fdca -> 4132fdca 4132fdca", + "c06badf0 -> c06badf0 c06badf0", + "c1830457 -> c1830457 c1830457", + "410b0248 -> 410b0248 410b0248", + "c11a799e -> c11a799e c11a799e", + "40cada90 -> 40cada90 40cada90", + "4178adf0 -> 4178adf0 4178adf0", + "c130e673 -> c130e673 c130e673", + "3fafa340 -> 3fafa340 3fafa340", + "415abe38 -> 415abe38 415abe38", + "c0f9e8e8 -> c0f9e8e8 c0f9e8e8", + "c1621970 -> c1621970 c1621970", + "415719e0 -> 415719e0 415719e0", + "4160073c -> 4160073c 4160073c", + "c190820d -> c190820d c190820d", + "c13de139 -> c13de139 c13de139", + "41092a48 -> 41092a48 41092a48", + "c1477950 -> c1477950 c1477950", + "4191e30c -> 4191e30c 4191e30c", + "41974dfe -> 41974dfe 41974dfe", + "c10374ad -> c10374ad c10374ad", + "c18bde9a -> c18bde9a c18bde9a", + "c13268a2 -> c13268a2 c13268a2", + "c195f755 -> c195f755 c195f755", + "419ae230 -> 419ae230 419ae230", + "40bacf28 -> 40bacf28 40bacf28", + "be9c3a00 -> be9c3a00 be9c3a00", + "c14ebc2e -> c14ebc2e c14ebc2e", + "4187700c -> 4187700c 4187700c", + "c16d6f94 -> c16d6f94 c16d6f94", + "40932280 -> 40932280 40932280", + "c19a204a -> c19a204a c19a204a", + "3e2a2a00 -> 3e2a2a00 3e2a2a00", + "c17e2014 -> c17e2014 c17e2014", + "3fc74c00 -> 3fc74c00 3fc74c00", + "c15025e6 -> c15025e6 c15025e6", + "c0dfcb04 -> c0dfcb04 c0dfcb04", + "40b43c80 -> 40b43c80 40b43c80", + "4122c0a4 -> 4122c0a4 4122c0a4", + "3fc69070 -> 3fc69070 3fc69070", + "40b57ef0 -> 40b57ef0 40b57ef0", + "40846258 -> 40846258 40846258", + "c0516488 -> c0516488 c0516488", + "c0ad668c -> c0ad668c c0ad668c", + "c140b9da -> c140b9da c140b9da", + "4127c7d4 -> 4127c7d4 4127c7d4", + "c13a354a -> c13a354a c13a354a", + "4167bfec -> 4167bfec 4167bfec", + "c186af20 -> c186af20 c186af20", + "c1511c6e -> c1511c6e c1511c6e", + "40ff0e5c -> 40ff0e5c 40ff0e5c", + "c15e5958 -> c15e5958 c15e5958", + "4165e6c8 -> 4165e6c8 4165e6c8", + "c11149f8 -> c11149f8 c11149f8", + "410d9810 -> 410d9810 410d9810", + "410abafe -> 410abafe 410abafe", + "c14882da -> c14882da c14882da", + "c18d0d02 -> c18d0d02 c18d0d02", + "41153de6 -> 41153de6 41153de6", + "40903d9c -> 40903d9c 40903d9c", + "c155b0ea -> c155b0ea c155b0ea", + "41076a1c -> 41076a1c 41076a1c", + "c0ff8d16 -> c0ff8d16 c0ff8d16", + "c0727008 -> c0727008 c0727008", + "c12ed309 -> c12ed309 c12ed309", + "c108b3e0 -> c108b3e0 c108b3e0", + "40b67bd0 -> 40b67bd0 40b67bd0", + "411539f4 -> 411539f4 411539f4", + "c0f1c48c -> c0f1c48c c0f1c48c", + "416f21cc -> 416f21cc 416f21cc", + "41720448 -> 41720448 41720448", + "c18879fd -> c18879fd c18879fd", + "c028e7d0 -> c028e7d0 c028e7d0", + "c0542fd0 -> c0542fd0 c0542fd0", + "c0d846f2 -> c0d846f2 c0d846f2", + "40f4b450 -> 40f4b450 40f4b450", + "40b937dc -> 40b937dc 40b937dc", + "41644aa4 -> 41644aa4 41644aa4", + "4154cb30 -> 4154cb30 4154cb30", + "c1320374 -> c1320374 c1320374", + "c0218c80 -> c0218c80 c0218c80", + "40a6bc8c -> 40a6bc8c 40a6bc8c", + "c180aef8 -> c180aef8 c180aef8", + "411ffc86 -> 411ffc86 411ffc86", + "c033db10 -> c033db10 c033db10", + "bfc0ab30 -> bfc0ab30 bfc0ab30", + "c15a275c -> c15a275c c15a275c", + "c12c0d62 -> c12c0d62 c12c0d62", + "c097704a -> c097704a c097704a", + "414e2e84 -> 414e2e84 414e2e84", + "419c2e7a -> 419c2e7a 419c2e7a", + "c115cb7e -> c115cb7e c115cb7e", + "4182702e -> 4182702e 4182702e", + "c1655e28 -> c1655e28 c1655e28", + "c0a2fa12 -> c0a2fa12 c0a2fa12", + "4189aaac -> 4189aaac 4189aaac", + "c0fc1094 -> c0fc1094 c0fc1094", + "c19bde8f -> c19bde8f c19bde8f", + "c167e03c -> c167e03c c167e03c", + "4183fd04 -> 4183fd04 4183fd04", + "c1737614 -> c1737614 c1737614", + "bf76f3c0 -> bf76f3c0 bf76f3c0", + "400288c0 -> 400288c0 400288c0", + "c13c800b -> c13c800b c13c800b", + "c10320b8 -> c10320b8 c10320b8", + "40a0f654 -> 40a0f654 40a0f654", + "410be09c -> 410be09c 410be09c", + "c0143510 -> c0143510 c0143510", + "418d6cc0 -> 418d6cc0 418d6cc0", + "c196610b -> c196610b c196610b", + "c188f078 -> c188f078 c188f078", + "c0d99afc -> c0d99afc c0d99afc", + "c12ee535 -> c12ee535 c12ee535", + "3ee82b40 -> 3ee82b40 3ee82b40", + "c14f7e13 -> c14f7e13 c14f7e13", + "3fb78680 -> 3fb78680 3fb78680", + "40919018 -> 40919018 40919018", + "4000f3b8 -> 4000f3b8 4000f3b8", + "41982d60 -> 41982d60 41982d60", + "4129425c -> 4129425c 4129425c", + "c16e8c84 -> c16e8c84 c16e8c84", + "c062d2d8 -> c062d2d8 c062d2d8", + "c0be1bd0 -> c0be1bd0 c0be1bd0", + "bee21900 -> bee21900 bee21900", + "4176c4d8 -> 4176c4d8 4176c4d8", + "408f9f90 -> 408f9f90 408f9f90", + "c155d455 -> c155d455 c155d455", + "c104dbcc -> c104dbcc c104dbcc", + "c191c776 -> c191c776 c191c776", + "c07de348 -> c07de348 c07de348", + "c08f3b1e -> c08f3b1e c08f3b1e", + "40a8b218 -> 40a8b218 40a8b218", + "410c2ae2 -> 410c2ae2 410c2ae2", + "41866896 -> 41866896 41866896", + "c17e8d60 -> c17e8d60 c17e8d60", + "4193860e -> 4193860e 4193860e", + "c186a1f5 -> c186a1f5 c186a1f5", + "417b221c -> 417b221c 417b221c", + "bfe71610 -> bfe71610 bfe71610", + "41428e14 -> 41428e14 41428e14", + "411c09fc -> 411c09fc 411c09fc", + "410ae5e8 -> 410ae5e8 410ae5e8", + "c106e6e2 -> c106e6e2 c106e6e2", + "c0bdec1e -> c0bdec1e c0bdec1e", + "41200f74 -> 41200f74 41200f74", + "40ca54e4 -> 40ca54e4 40ca54e4", + "c1937324 -> c1937324 c1937324", + "c084c202 -> c084c202 c084c202", + "41950ff4 -> 41950ff4 41950ff4", + "41579228 -> 41579228 41579228", + "c0eae566 -> c0eae566 c0eae566", + "4121bac8 -> 4121bac8 4121bac8", + "c1940bef -> c1940bef c1940bef", + "c0a24534 -> c0a24534 c0a24534", + "4136868c -> 4136868c 4136868c", + "41053ea2 -> 41053ea2 41053ea2", + "c1706155 -> c1706155 c1706155", + "c18c2684 -> c18c2684 c18c2684", + "c0e689c8 -> c0e689c8 c0e689c8", + "40ea1f00 -> 40ea1f00 40ea1f00", + "bfcd8410 -> bfcd8410 bfcd8410", + "c03d0e60 -> c03d0e60 c03d0e60", + "c082fcb2 -> c082fcb2 c082fcb2", + "3fd29290 -> 3fd29290 3fd29290", + "40b5b6f0 -> 40b5b6f0 40b5b6f0", + "c018e7e8 -> c018e7e8 c018e7e8", + "408e0f40 -> 408e0f40 408e0f40", + "c0f76cbe -> c0f76cbe c0f76cbe", + "c068c518 -> c068c518 c068c518", + "c1368a30 -> c1368a30 c1368a30", + "bfde5a30 -> bfde5a30 bfde5a30", + "410da5f2 -> 410da5f2 410da5f2", + "c1817028 -> c1817028 c1817028", + "c1523355 -> c1523355 c1523355", + "c19963d0 -> c19963d0 c19963d0", + "c065c9b0 -> c065c9b0 c065c9b0", + "c171cdd4 -> c171cdd4 c171cdd4", + "419ff414 -> 419ff414 419ff414", + "4118dfc6 -> 4118dfc6 4118dfc6", + "c12e6598 -> c12e6598 c12e6598", + "403ad838 -> 403ad838 403ad838", + "412c8cac -> 412c8cac 412c8cac", + "c0ddf76e -> c0ddf76e c0ddf76e", + "c13b2113 -> c13b2113 c13b2113", + "c185030f -> c185030f c185030f", + "40ad4f54 -> 40ad4f54 40ad4f54", + "4071c3a0 -> 4071c3a0 4071c3a0", + "c0c5650a -> c0c5650a c0c5650a", + "c169b561 -> c169b561 c169b561", + "c0879804 -> c0879804 c0879804", + "41576d70 -> 41576d70 41576d70", + "c19a7b71 -> c19a7b71 c19a7b71", + "40399bf8 -> 40399bf8 40399bf8", + "412e0dbe -> 412e0dbe 412e0dbe", + "c0c782d4 -> c0c782d4 c0c782d4", + "c0e964d6 -> c0e964d6 c0e964d6", + "c0e7377e -> c0e7377e c0e7377e", + "411ec6cc -> 411ec6cc 411ec6cc" + ] + }, + { + "glsl": "vec2 cultmath_iv_add(vec2, vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "41062738 410635b8 c192c576 c18f17b8 -> c11f63b4 c117f9b8", + "4199a15f 419e2ee5 c09ac88d c097c1bb -> 4165de78 41707cec", + "40a715f6 40eb5662 c0bcd4a7 c0bc9741 -> bf2df588 3fbafc84", + "405c2e68 405c3548 c0e25ac8 c0e25868 -> c0688728 c0687b88", + "c17be971 c17763af c18024da c1802306 -> c1fe1992 c1fbd4de", + "bfdd3e44 bfdd3abc 415d50c5 415d5973 -> 4141a8fc 4141b21c", + "c152013c c15200c0 c09c2fad c09baed7 -> c1900c89 c18fec16", + "c160c98d c160b891 414eefb8 41542c70 -> bf8ecea8 bf48c210", + "c182f2f0 c182e3be c10662ed c10629b3 -> c1c62466 c1c5f898", + "c15947be c13fc916 413421da 413556f6 -> c0149790 bf272200", + "41514853 4151baad 419743f5 419ac89f -> 41ffe81e 4201d2fb", + "419b4f11 41a05963 41423f7c 41480f94 -> 41fc6ecf 42023096", + "40f804ca 40f8d2d6 40cc6ef7 40d26249 -> 416239e0 41659a90", + "c1346b72 c13469a2 c10830be c102f288 -> c19e4e18 c19bae15", + "bfec51e5 bf84691b bf9a2ef2 40c1d00c -> c043406c 40a0b5c5", + "c0f3c9ed c0235e56 c009847a c0093826 -> c11c4615 c0964b3e", + "c1946e84 c193041a c10a32b3 c10a2e01 -> c1d987de c1d81b1a", + "413e584b 416da15d 4183d249 4183d6d7 -> 41e2fe6e 41faa786", + "41825883 4182ade5 c10ef8b0 c003136a -> 40eb70ac 416496f0", + "c196ecc6 c196ebfc c11205d4 c111d6ce -> c1dfefb0 c1dfd763", + "c13d4346 c139d656 411b31ff 411eb969 -> c008451c bfd8e768", + "40ceb843 40cebe4d c074420c 4026ecac -> 40292e7a 41111a52", + "c185d9c3 c1852939 4194c6f3 4194db15 -> 3feed300 3ffb1dc0", + "c115ea42 c103ebf8 c153eac5 c128a44f -> c1b4ea84 c1964824", + "c192f5fa c1919fec 40f37ab8 40f3a588 -> c12c2e98 c1296d14", + "bf820f0f bf6ba1e1 4169bb18 4179b918 -> 41597936 416afefa", + "402e2979 402ebfe7 411b1855 411fd263 -> 4146a2b3 414b825d", + "412a97cc 412aa8d0 40df90a0 40dfbd08 -> 418d300e 418d43aa", + "3ecabb36 3ecb03ca 41270674 412c7e3c -> 412d5c4e 4132d65a", + "c148f2fa c13c94ca 40ba98b6 40fe1552 -> c0d74d3e c0762884", + "c156a37e c15692b6 c16d5f74 c16d5866 -> c1e20179 c1e1f58e", + "4189279d 41897337 419caef9 419caf9b -> 4212eb4b 42131169", + "c0e5179f c0e45279 4187e568 4187f668 -> 411d3f00 411dc394", + "c0a3aeeb bf3b9568 418b21b2 418c09aa -> 41446bee 41862cff", + "410dfa35 4163347b c17fa90d c17f9fff -> c0e35db0 bfe35c20", + "c056556e c01cc2e2 c148378a c13e397c -> c17dcce6 c1656a34", + "41837778 41847424 4178b6ff 4178b8d9 -> 41ffd2f8 42006848", + "c191bca4 c1917ed4 40f41e73 40f42fcd -> c1296a0e c128e5c2", + "4191cf05 419c88e3 c14d77de c14d757a -> 40ac4c58 40d73898", + "bfb20328 bf9fd6b8 416d5dda 416d5e9e -> 41571d75 415963c7", + "c07e0cb5 c072e12b c0a2e77e c0a2d052 -> c110f6ec c10e2074", + "c081726b c0815b15 41860bb5 4186b157 -> 414b5e34 414cb524", + "c13808d6 c138066a 4185daa4 4185de4c -> 40a758e4 40a76c5c", + "40e27e0f 40e2d311 c020c433 c0204aed -> 40921bf6 4092ad9a", + "c16e6e22 c16e5122 c0d36a50 c0d34cf8 -> c1ac11a5 c1abfbcf", + "408065bd 40bf2373 c1947de9 c189c711 -> c168c8f4 c133fc68", + "41352754 413854a4 c0661139 c05f8f97 -> 40f7460c 410070be", + "411907c7 41262c7d c163f6e6 c163f460 -> c095de3e c0771f8c", + "c18830f6 c188309e 4163efad 41708563 -> c031c8fc bffedec8", + "c09e4867 bfce2225 c0b4fc84 c0b0e3b8 -> c129a276 c0e46c41", + "40fdd29f 40fdeeb9 41754a04 419153c6 -> 41ba19aa 41d0cf74", + "40463a89 40473f47 405f5994 4063d6cc -> 40d2ca0e 40d58b0a", + "c0a0198c c07c55f0 c197c36c c197c2cc -> c1bfc9cf c1b74d8a", + "c1035730 c1025490 c0352d89 c031cd17 -> c130a292 c12ec7d6", + "40732c14 4076aa2c bd69b8c8 3ee16899 -> 406f8531 40896ba0", + "4172dbb1 4172ebb7 41547c9e 4154b62a -> 41e3ac28 41e3d0f0", + "c19f2302 c19a11c2 c1508458 c14e398e -> c203b297 c2009744", + "3fb2214e 3fcb2172 4191dc55 4191deff -> 419cfe6a 419e9116", + "c19e5620 c19b6250 408fea54 40900a1c -> c174b716 c16ebf92", + "418cb9a8 418cbafc c1217cd1 c1216707 -> 40efecfe 40f01de2", + "c18fa2eb c182a1a5 c161a3cf c10d64b1 -> c2003a69 c1c953fe", + "41249712 412497c6 4167a484 41683d4c -> 41c61dcb 41c66a89", + "40945f1c 4094804c c15c9ee1 c1388861 -> c1126f53 c0dc9076", + "c08238fa c07c4e5b 411ac812 411ae88e -> 40b3572a 40b7a9ee", + "bf82715f bf7dbd41 41696084 417ce6dc -> 41591258 416d0b08", + "c14781b5 c0cc306a c1978f0b c193fbef -> c1fb4fe6 c1c7080a", + "415742b6 4167cb1a c1846db9 c183c6f7 -> c04662f0 bffe16a0", + "418f3977 418f3a35 4085c42e 40863ca2 -> 41b0aa82 41b0c95e", + "c1003a9f c100380d 40d6decb 40d6e00d -> bfa659cc bfa64034", + "c18955bd c166a72a 40665430 41230a74 -> c159166e c087396c", + "417d0c92 418026b7 c19b1f44 c19b1cd0 -> c064c7d8 c057b0c8", + "bf81af9e bf81a6e2 414eada4 414ed1b4 -> 413e77b0 413e9cd8", + "4196dd70 4196e06c 415b4e38 415b9790 -> 42024246 4202561a", + "c10b74af c10b3a87 c18624f6 c1862432 -> c1cbdf4e c1cbc176", + "41465848 4146c310 c1993c27 c153e5b6 -> c0d8400c bf522a60", + "41931382 419318aa 4029d915 402bf69b -> 41a84ea5 41a8977d", + "410645fd 410f44f7 4035b463 4035ce6d -> 4133b316 413cb892", + "418fa0fa 41924c1a c110e90c c10f8880 -> 410e58e8 41150fb4", + "412c4d76 4169364a 4185c87c 41869bd4 -> 41dbef37 41fb36f9", + "41888080 419225dc c121dd00 c117485c -> 40de4800 410d035c", + "41984be6 419ac696 4087a954 4093af14 -> 41ba363b 41bfb25b", + "c113b155 c113aeeb c170f89f c14d7ac9 -> c1c254fa c1b094da", + "c18703cc c1868c28 c12fb479 c12da4dd -> c1dede08 c1dd5e96", + "41385370 413e8d90 c19f29b9 c19e2eb3 -> c1060002 c0fb9fac", + "c181c834 c1817e58 be827102 3e296303 -> c183d1f8 c1802b92", + "3f06bf00 3f1bbf80 c0241af7 c023f799 -> c0026b37 bffa0f72", + "41928a09 41928def 40ab2691 40ab5e0f -> 41bd53ad 41bd6573", + "3edcc476 3ee9588a c18dfde7 c106ae98 -> c18a8ad5 c0fec7a7", + "c12e32bb c12e203b 4197d752 4197db7a -> 41017be9 410196b9", + "40bc0219 40f6194f c12a602b c129556d -> c098be3d c0392316", + "407288cd 40839919 c158c363 c1589a91 -> c11c2130 c116ce04", + "bf7d38e5 bf4e47db 413c385d 413c39a3 -> 412c64cf 412f5525", + "4183d0e3 4183d77d 3e9d256a 3ea46596 -> 41864579 41866913", + "c0ea7d4f c0e90c91 c1202523 c11ffd91 -> c18ab1e5 c18a41ed", + "c11827dc c1181266 41247c45 41247cbf -> 3f454690 3f46a590", + "3ec7fe6b 3f9dc0e5 c0b73a36 c0b40006 -> c0aaba4f c08c8fcd", + "c0991e7d c099127f c087daeb c08733cd -> c1107cb4 c1102326", + "4117b43d 411ffb1b 418f62e9 418f6647 -> 41db3d08 41df63d4", + "c1353033 c0d0f90a c178a464 c166308c -> c1d6ea4c c1a75688", + "c0494af6 c049487a 41391bb0 41392974 -> 4106c8f2 4106d756", + "bfc68445 bfc0757b bfea91b2 bfea6d2e -> c0588afc c0557154", + "41946721 419889eb 40dd2cf6 40e6f97a -> 41cbb25e 41d2484a", + "c1865f32 c185c112 419fb005 419fb8bb -> 404a8698 404fbd48", + "c181acd1 c181aa33 c197193c c18dba82 -> c20c6306 c207b25a", + "c0c91a7a c0c71172 c199d452 c199d0e8 -> c1cc1af0 c1cb9544", + "c11a914f c11a7e8d c0b9436c c0b93dac -> c1773305 c1771d63", + "c0bb727c c0bb6138 c15de2a2 c15dc1a2 -> c19dcdf0 c19db91f", + "c07452a9 c0735657 419831c6 4198348a -> 41734ee2 4173937e", + "400b1f53 400c487d c00a3b8a 40c8f61d -> 3c63c900 41078d2e", + "c0d886b3 c0d88229 40a49766 40a987ca -> bfcfbd34 bfbbe97c", + "4006c642 401a4e6e c0987e01 c0987877 -> c02a35c0 c016a280", + "411aea3d 411cfc2f c1611567 c16114a1 -> c08c5654 c08830e4", + "417bed00 417bfbe8 c010773e be7c4f20 -> 4157cf30 41780aac", + "c19acc0b c19a5f93 c1910ab4 c19109ca -> c215eb60 c215b4ae", + "c14cfb69 c14cf083 41610776 41666aca -> 3fa06068 3fcbd238", + "40647d1f 4064ae41 c10626e1 c10382a7 -> c09a0f32 c094ae2e", + "406d707f 408e2a29 412c3a12 412eda92 -> 41679632 4175efa6", + "40d95079 40d9520f bf2f632d bf2f2553 -> 40c36413 40c36d65", + "41899fe9 4189b07b 40efa308 40f1b1b8 -> 41c588ab 41c61ce9", + "41906958 41906b28 c04d19af c0301cb1 -> 416d8c44 4174cf24", + "c175796a c1757826 beff0787 befee179 -> c17d71a6 c17d6f32", + "419603f6 419604ba c13a20e5 c13a206f -> 40e3ce0e 40e3d20a", + "c073b3b3 c072e0fd 414387e3 41438895 -> 41069af6 4106d056", + "c1264da6 c0c5942d c190848c c1908068 -> c1e3ab5f c1c1e573", + "c08210b8 c06506c1 bf80b472 40c42dbc -> c0a23dd4 402354b7", + "416082c5 41610c5b c0aa9601 c073c19f -> 410b37c4 41241bf3", + "4152bb7f 4152c511 418928b8 418a5c44 -> 41f28678 41f3becc", + "41641f0b 41648c2d c18ac323 c1062fb2 -> c0459cec 40bcb8f6", + "41660998 41660b50 4062f3cf 4064c931 -> 418f6346 418f9ece", + "41450264 4145067c 40df3c4f 40e01b41 -> 419a5046 419a8a0e", + "400ed34e 4037da32 c127a0e9 c12799cd -> c103ec16 c0f34681", + "c11f0d9c c11ecee2 4180a9b4 4180a9ec -> 40c48b98 40c509ec", + "c0d5b954 c0d5499c c15b6b86 c15b66b6 -> c1a32418 c1a305c2", + "40a0009a 40a09aa6 4172489e 41741aa2 -> 41a12476 41a233fa", + "41064ffb 41093151 c119e54c c1151d86 -> bf9caa88 bf3ec350", + "c14a8b9f c1495c77 c17dde53 c13e4883 -> c1e434f9 c1c3d27d", + "c12dac7a c11aa46a c148b1c0 c148aee8 -> c1bb2f1d c1b1a9a9", + "c0d2d6f4 c0d0e3b4 bfef8675 bfef63eb -> c1075c49 c1065e57", + "c18bf94c c18bf8cc c06e605e c06e5bc2 -> c1a9c558 c1a9c444", + "c11508b7 c11506b7 4058d7e5 40596dcb -> c0bda57c c0bd5688", + "c0e80964 c0410491 c0fd841f c0fd10a5 -> c172c6c2 c12ec977", + "c12333d6 c0641a79 c0acb2aa c0ac5c4e -> c1798d2b c10f34c5", + "c161674f c0caf822 4132c095 4132c313 -> c03a9ae8 409a8e04", + "41581eba 41ab5e6b c145a55d c05c8ce4 -> 3f93cae8 418fccce", + "408aa721 408ac717 c19ea55b c19e8625 -> c177f726 c177a8be", + "c12359a0 c11be282 40cc4174 40e496f4 -> c074e398 c0265c20", + "41806a62 41aec3aa c15f8ded c15eac7d -> 40051b5c 40fdb5ae", + "c19438f4 c18d1484 c0c8c8a1 c0c6675f -> c1c66b1c c1beae5c", + "c193dc4b c181be89 c0e2124c c0e20220 -> c1cc60de c1ba3f11", + "c115634f c10ec7c9 406b2f99 406b5857 -> c0b52ed2 c0a7e366", + "c01a52a1 bfcccc3d 41878c9d 41879947 -> 41688492 41759906", + "4131b088 4131bcf8 c1147fb6 c1147ea6 -> 3fe98690 3fe9f290", + "412fa3e6 412fd5ae c061182c 4002373c -> 40eebbb6 4150637d", + "c16a9f63 c16a9d21 c1669004 c1641686 -> c1e897b4 c1e759d4", + "c11c4fd2 c11ba14a bfe13a1e bfe04362 -> c1387716 c137a9b6", + "413e9491 41520e7f c0b7d2e3 c0b73985 -> 40c5563f 40ece379", + "40ab2a51 40ab32ff c1830787 c1830717 -> c13079e6 c13074ae", + "40c80563 40c806bd 40eca209 4120faf3 -> 415a53b6 41827f29", + "410d7b43 41144085 419bab3e 419bd872 -> 41e268e0 41e5f8b4", + "41467232 414680de 419e8eb9 41a08137 -> 4200e3e9 4201e0d3", + "40ec4e05 40ec4fd3 412deccf 41303639 -> 419209e9 41932f11", + "c0f50a26 c0f4bca6 c089f25c bed6afc4 -> c13f7e41 c10113d1", + "41109ef0 4114e770 c1a1416c c19cf79c -> c131e3e8 c12507c8", + "c1151442 c1150f4e bfb6c7ee bfa41cb2 -> c12bed40 c12992e4", + "c040284f c03ebce1 410f1930 41104428 -> 40be1e38 40c129e0", + "c13c38b2 c13c347c c04a4828 c02d5038 -> c16ecabc c167888a", + "40fcdbb9 40ffec97 c131aaf8 c1317e00 -> c04cf46e c0461ed2", + "c15a81bb c156cd69 41271283 417c75bd -> c04dbce0 4016a150", + "3f33eff0 3fbe4ac8 40ebb375 40fc98ab -> 410118ba 411615ae", + "c193c49a c1905efa c162b55e c162aefc -> c2028fa4 c200db3c", + "41290d42 4129103e c121e3dc c03e9b37 -> 3ee52cc0 40f2d2e0", + "c1b015f9 c16bc767 40969ce4 4097beec -> c18a6ec0 c11fe7f1", + "c11a2c81 c11a1465 c1921604 c1920ba4 -> c1df2c44 c1df15d6", + "405c9754 405d740c bf94579e bf910ae2 -> 40126b85 4014ee9b", + "40b58b0d 40b58c63 4188deb0 418bc9b4 -> 41b64173 41b92ccd", + "c1518136 c151809e 4124303c 41243104 -> c03543e8 c0353e68", + "4164f8b7 4164f981 c1346667 c133f547 -> 40424940 404410e8", + "3f544fa0 3f9e0f90 405a6713 406e8d3d -> 4087bd7e 409eca82", + "c0e2764e c0e199f2 41457047 414570e1 -> 40a86a40 40a947d0", + "416a214d 416a6f43 40ecf75f 40faad51 -> 41b04e7e 41b3e2f6", + "41978cfc 419a7ac4 c1696838 c157f5ea -> 408b6380 40b9ff3c", + "40a52a16 40a608ba c0b45577 c0b452d5 -> bef2b610 bee4a1b0", + "c0f66e66 c0f6655e c17e4759 c17e46ef -> c1bcbf46 c1bcbccf", + "413b9bf0 413bd818 c18cb9f3 c1891869 -> c0bbafec c0acb174", + "c05735be c0570ca2 c19cde9c c135a96a -> c1b7c554 c16b6c92", + "41227c94 41227e68 419ab00f 419b13e1 -> 41ebee59 41ec5315", + "41295f75 412974ef c19a6669 c19a65c3 -> c10b6d5d c10b5697", + "409600ae 40967f7a 4094b4f0 4094bbe8 -> 41155acf 41159db1", + "c0bd92ac c0bd89e8 4115bf05 411610af -> 405bd6bc 405d2eec", + "41492a85 419111fd c03b0cce c03a9792 -> 411a6752 41737e16", + "40fdb1d5 40fdb4fb c14c59a6 c14c49d6 -> c09b0177 c09adeb1", + "4096cf14 4099997c 416d7932 418d4a4f -> 419c705e 41b3b0ae", + "c04cb0c6 c04cacca 4094f573 4097b00d -> 3fba7440 3fc566a0", + "c0ce8958 c0c38cbc 419038bb 419e2c39 -> 41392cca 415a9214", + "411176cb 41134999 c1924ffd c1924a83 -> c113292f c1114b6d", + "bf9d1be7 bf9cdb79 bfdfeb7f 3ef48f7c -> c03e83b3 bf3f6f34", + "3fe31c2a 40b3824e 40bda0ad 40c0657b -> 40f667b8 4139f3e4", + "40fd3601 410051c3 415e430d 415e9b93 -> 41ae6f07 41af76ab", + "415dbc3b 4165f1e5 c10abc38 c10849c2 -> 40a60006 40bb5046", + "418edb02 4190945e 4185f86c 4185f9fc -> 420a69b7 420b472d", + "c01fa98e c01fa272 40e6086e 40e7a44a -> 409633a7 4097d311", + "414d1f1a 414d1fae 415a2d54 415cdb1c -> 41d3a637 41d4fd65", + "c1402268 c1151b8e 4113f60c 4113ff7c -> c030b170 bd8e0900", + "4181fd32 4181fe3e 418071fa 4180923e -> 42013796 4201483e", + "40aa0770 40aa24e8 410d6abe 41129a72 -> 41626e76 4167ace6", + "418c6d46 418c7552 c14f40de c13c7078 -> 4093335c 40b8f458", + "c12d1676 c12d1424 41147fcf 41161da5 -> bfc4b538 bfb7b3f8", + "c047d136 c047832a 417f7a4d 417f7b23 -> 414d8600 414d9a58", + "40d459e2 410c76fb 415e8e4b 415ea345 -> 41a45d9e 41b58d20", + "3f043efc 40b82538 c19090e0 c1900c38 -> c18c6ee8 c14405d4", + "c1886524 c18864ec c0cd7c31 c0a837af -> c1bbc430 c1b272d8", + "416f3e3a 417071a6 400fe704 4026f3bc -> 41899bfe 418d174a", + "414c5b1a 41676c56 c19f5489 c19e17a9 -> c0e49bf0 c0a985f8", + "418d54f7 418d5771 c127dd5a c127dbbe -> 40e59928 40e5a648", + "41832352 41944b76 c0f5de55 c0eeb45f -> 410b577a 41313cbc", + "c1021b9f c10214f9 c14a1af3 c118c32d -> c1a61b49 c18d6c13", + "419ade5e 419ca4a6 404c4254 404c44ec -> 41b466a8 41b62d44", + "c1047d71 c1037bcf 4164dd13 416952e5 -> 40c0bf44 40cbae2c", + "c1183847 c118359d 40324161 40ef8780 -> c0d74fde c001c774", + "4194b800 4194c7d4 418bd51b 418d5495 -> 4210468e 42110e34", + "4065dbf2 4065de0e 412612d8 41274ac8 -> 415f89d4 4160c24c", + "c0d7a3c7 c0d79331 c1732c73 c172ca01 -> c1af7f2b c1af49cd", + "409d6693 40ab8965 c07e33d9 c066eef7 -> 3f726534 3fe047a6", + "40aa442a 40aa8486 c12190b9 c10a86e1 -> c098dd48 c0551278", + "41342319 41347153 4150f371 4150f7cf -> 41c28b45 41c2b491", + "419e54ac 419ea6dc c05336b8 c0530d38 -> 4183edd5 41844535", + "419b0d09 419b14bb c0ab996c c0927d20 -> 41604d5c 416ceae6", + "406186a8 4061bc78 c15dfbe8 c15cfc78 -> c1259a3e c1248d5a", + "4187dc4c 41896394 c18657a7 c18652cf -> 3e425280 3ec43140", + "bf51a9d1 bf25fa6f 401c11e0 403733d0 -> 3fcf4ed8 400db534", + "3ffa20f9 3ffa2bc7 c064a1d7 c0605e29 -> bfcf22b5 bfc6908b", + "c15d2302 c15d20bc c19884a5 c183aff3 -> c2038b13 c1f24051", + "41767e7e 4182f33d c15e8a4a c15dfb36 -> 3fbfa1a0 401fad10", + "3fe7ee5a 4011d173 40cbc488 40cbc658 -> 4102e00f 410a5789", + "4085521b 40861f35 406ae6b2 406ae8ae -> 40fac574 40fb938c", + "4176b282 4176c75e 41784e7c 41785fcc -> 41f7807f 41f79395", + "4009c343 4076c75d 40f26585 4173d0e6 -> 411ba393 4198c15f", + "c148b9dc c06313e6 c0bfff28 c0bffb44 -> c1945cb8 c118c29c", + "41798eb4 41799004 409a9bca 40f68a76 -> 41a36e4c 41ba6aa0", + "c18468bf c16b6fd0 c17b4250 c163260c -> c20104f4 c1e74aee", + "c11a70ad c119f9b1 416d13d6 417b92aa -> 40a54652 40c331f2", + "c160fa38 c15e484c c19d7d72 c19d7b8e -> c206fd47 c2064fda", + "419f0d10 419f0d4c 40d9eead 40d9ef83 -> 41d588bb 41d5892d", + "c18ebbb8 c18e48f8 41598c8d 41599103 -> c087d5c6 c08601da", + "c1360650 c1360534 419caae3 419cb201 -> 41034f76 41035ece", + "c0ae581b c0ae5611 3fd5cf8d 40a2558d -> c071c870 bec00840", + "c0086f78 c0086d78 4097a7e1 409839b7 -> 4026e04a 402805f6", + "c18a17c0 c184967c 4190e135 4195775b -> 3f592ea0 400706f8", + "c0c53610 c0b1e5c4 4124be56 4124e416 -> 4084469c 4097e268", + "bfcea6ac bfce9cb4 c173e79e c12c95e2 -> c186de3a c1466978", + "4157d9d6 41594f4a 41998a90 41999030 -> 4202bbbe 42031bea", + "c0e5c4f5 c0e597e7 c1863852 c1862e06 -> c1bfa98f c1bf9400", + "c11908fa c118c0c6 40e15f50 40e16060 -> c0216548 c0204258", + "415e9412 417244b6 bf9054c4 bf903abc -> 414c897a 41603d5e", + "414910d2 41a0cca7 c0c6c56e c0c6c1a2 -> 40cb5c36 415e387d", + "c197bd24 c1973f34 c175b018 c175aa58 -> c2094a98 c2090a30" + ] + }, + { + "glsl": "vec2 cultmath_iv_sub(vec2, vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c19f4813 c17fe5b2 40bdfd30 40be16a8 -> c1cecdbd c1af7225", + "413ad844 413b1ea8 411e992a 411e9ac6 -> 3fe1ebf0 3fe42bf0", + "4183bf2c 4183bf94 bfc8d4d1 bf58969e -> 418a83e1 41904ce1", + "c1804556 c1803f1c 405ba2f3 405ba80d -> c19bba58 c19bb37a", + "418bc4c9 418bc9d7 c1482612 c145f1d6 -> 41eebdb4 41efdce0", + "c1961d7e c15eb3c1 41784541 4179080f -> c20950c3 c1eb7c81", + "c10aa6ae c1096a7c bf215912 bf1a986e -> c100fd27 c0fea9d6", + "412135f3 4121369d 41810639 41810b67 -> c0c1c1b6 c0c1abaa", + "bf9fce69 bf2f136e c128b716 c1288d2e -> 41149361 411dc5df", + "40f27750 41064134 3faaf7d6 4020bdd5 -> 40a21866 40e1c472", + "41006cdc 410166cc c18097f8 c1708ee7 -> 41b87de2 41c14b5e", + "c0c758b9 c0bd3a37 c18698c3 c185ae49 -> 4127b036 412e946a", + "c08d5784 c08d4998 c146bf55 c13df0fd -> 40ee8a76 41001a89", + "c0a869a8 c0a78738 c167a797 c167a611 -> 4113713d 4113e3fb", + "c1966174 c19660b4 c19b767c c19b7410 -> 3f225380 3f22b900", + "4193fa47 4193fe89 c0ce0c33 c086360d -> 41b587ca 41c78196", + "c15bcbd2 c15bc834 c1029eab c10287f1 -> c0b287c2 c0b25312", + "c18cc814 c18cc660 c0813d4e c0813872 -> c158f3ef c158ee19", + "41135f26 41137dd6 418841f9 4188a22b -> c0fbca60 c0fa0c38", + "41509818 41509930 c148d675 c147807f -> 41cc0c4c 41ccb7d2", + "bfa4e38d 3f831f8d c181d924 c18193e4 -> 416e8b56 418a0b1d", + "415ce1bb 415ce42d 41424aef 41a6737c -> c0e00a7a 3fd4c9f0", + "408fbddf 408fc139 c0a55216 c0a2942a -> 41192904 411a89a8", + "412b6dcf 412b80d9 4160e965 416128bb -> c056ebb0 c055a230", + "c1466884 c14661f4 40bbdb06 40bbe022 -> c1922c4a c19227bc", + "c082295b c067142a 4004479f 40045921 -> c0c455ec c0b5ade4", + "415e1a57 415e1b01 c1bf9520 c16a16d4 -> 41e41896 42175150", + "401b2c14 4021d95c c131f872 c0ba423d -> 4103ec24 415a6ec9", + "418831e3 41884ec5 410b7a71 410b7b97 -> 4104e82f 41052319", + "c1641628 c143b13e c197f798 c197f762 -> 4097b138 40d87be4", + "c10e8ed7 c10e8091 40e0af3d 413e6e0e -> c1a67e72 c17ed830", + "413e62c2 4150da86 c0911285 c090c377 -> 4183623f 418cb1e4", + "3f6b05cb 3f721df5 c0c89172 c0c5dfe6 -> 40e3409f 40e6d531", + "c01db4c2 c01db27e c151f017 c147470b -> 411fd9da 412a8378", + "c108baae c0b86fcd 40ba947a 40dbe506 -> c176ad31 c1398224", + "c1839e58 c148fae4 c03e6ce8 c03e6b18 -> c157a1ea c1195faa", + "4155c2d8 4155fac0 40cdbd22 40cde546 -> 40dda06a 40de385e", + "408986de 409e2ef2 c113eac4 c113d8bc -> 41589c2b 4163023d", + "c1373d63 c1348b71 4174511a 41745256 -> c1d5c7dc c1d46e46", + "419e1175 419f020f c087d89e c087d766 -> 41c0074e 41c0f836", + "40c42e39 40c83fc7 bf96bff0 bf96b850 -> 40e9dc4d 40edefc3", + "c11ca89f c1176939 bfa3956e 3fe6238e -> c1396d11 c102f68b", + "c14ef4a0 c0e330fc 412bd224 412bdc70 -> c1bd6888 c18eb551", + "c13e6a9d c13e655d 4169014b 41691aed -> c1d3c2c5 c1d3b354", + "417184e5 41787f23 c17dd077 c17dae0b -> 41f79978 41fb27cd", + "c15eefa6 c15eeeee 412ef8a6 41393882 -> c1cc1414 c1c6f3ca", + "c13374ea c133746c c0b6269c c098979c -> c0ce5238 c0b0c23c", + "c16247bf c16246a9 41299abf 412f1905 -> c1c8b062 c1c5f0b4", + "be88488c be0943e8 c1612cd7 c1609045 -> 415c4e01 415f07c7", + "c006b3cc c0065544 411f8d05 411f8edf -> c1413bd2 c1412256", + "4183f276 41892f22 c18481cc c182de30 -> 42036853 4206d877", + "41757095 41c11b7e c19d02e2 c1246180 -> 41cce90a 422f0f30", + "41339a7b 4134423d c137da5b c137d171 -> 41b5b5f6 41b60e4c", + "3ed672bb 3ed68145 417434e9 4175ec67 -> c16f38d1 c16d80df", + "41567081 415c1137 41626861 41626f27 -> bf3fea60 becae540", + "c0da79b7 c0ceab4d 4120bbfa 4120beb6 -> c186fdc9 c18408d0", + "c14a4cae c14a4bda 4135d020 41370f24 -> c1c0ade9 c1c00dfd", + "c188ac4a c188a114 41839afc 4183f718 -> c20651b1 c2061e08", + "417802da 41b64e6b bfb6fab7 bfb5dbc9 -> 41875f2a 41c1be16", + "4193481d 419348eb 412b6759 412b6d2f -> 40f64616 40f654fa", + "4179238a 41794246 c19cb2d2 c19ba4ec -> 420c1b58 420ca9fa", + "416dcc1d 416e5053 c14258cb c141ea87 -> 41d7db52 41d8548f", + "411a02b5 411ad60b 40dab8d6 40ea6eda -> 40132d20 4035e680", + "bda17630 bd38c39f 413e1ea1 413e2313 -> c13f65ff c13ed765", + "c1acbfd8 c18b8b0a c049c85c 3fb65238 -> c1b824fc c164a3fd", + "c13dfdd9 c13d1cdd 4186bb62 4186d97e -> c1e5d86a c1e549d0", + "40897e94 4091bc44 c1077e61 c106b5df -> 414b7529 41505c83", + "3fe283b9 3fe64fc7 40b44d6b 40c11855 -> c0887767 c07572f2", + "418cba8b 418dc5a1 c10f0e98 c02d9e89 -> 41a26e5c 41d54ced", + "4100e91d 4100eae3 c1069c45 c1027de7 -> 4181b382 4183c394", + "41696064 41696d34 415752ad 41580a93 -> 3f8aae88 3f90d438", + "40da6fca 40da75d6 c195cec1 c1959f4b -> 41cc3b3e 41cc6c36", + "c14fbbab c14fb3c1 c09e2e56 c09e2d16 -> c100a520 c1009c96", + "409bf606 40cc3c92 c1976a03 c1975f95 -> 41be5d16 41ca7928", + "bff15ec0 bfe76080 c19bbc41 c19bba6f -> 418ca483 418d4639", + "c1395457 c1362f17 418d3de6 418d416a -> c1e9eb96 c1e85572", + "414d4c2d 41973775 412ae5ff 4151028d -> be6d9800 410388eb", + "c16b9a19 c152c35d bf8cd9a3 3fc72ea3 -> c1823ff7 c1412829", + "4098043c 40b6abb4 c197c988 c17a1d39 -> 41a30fac 41c57475", + "4106f055 4107152b 41281241 412850fb -> c0058298 c003f458", + "40acd192 40d33e96 c0b00671 c0aff00b -> 412e60ce 4141a284", + "c1755a7f c1739301 c186829f c18681ed -> 3fbd4ad8 3fcb91e8", + "4076303d 40763223 3e4e3b08 3e4ea6f8 -> 406945ce 40694e72", + "c17724aa c1772352 bf9d874d bf9d6433 -> c1637824 c1637268", + "c0b7a61e c0b4ca9e 40a54a37 40b12e39 -> c1346a2c c12d0a6a", + "c09dafc3 c09daac9 c0e44309 c0e41b43 -> 400cd700 400d3080", + "4120c334 412138bc c093236f c03b87e2 -> 414fa52c 416aca74", + "412bb2ee 412bb49a 40a6fcbf 40a6fe71 -> 40b0676b 40b06c75", + "41496fae 414aa78a 3fcb0330 3fcc3fb0 -> 412fe7b8 41314724", + "c103ec39 c100f131 c16d94df c16d89a9 -> 40d33ae0 40d9475c", + "416efdbc 41738f04 c10d4dda c10d4bd6 -> 41be24c9 41c06e6f", + "c0d5af09 c0d56bdb 412d1ac1 412dccd3 -> c18c522c c18be857", + "c0fde022 c0bcf2e6 3ff1571b 3ff16445 -> c11d1c9a c0f948ad", + "41247ac4 41247b7c c18cda1d c18c9e2d -> 41dedb8f 41df17db", + "be6f2109 be6efdf7 3faeb1d4 3fc00dcc -> bfddf1ed bfcc9193", + "c13de1eb c13ddbc7 c0d07e85 c0cfbe5b -> c0ac057b c0ab3909", + "c096b951 c096347b c0f78530 c0f5f628 -> 403e79ae 4042a16a", + "4022181e 40221be2 4181cf61 41847273 -> c1605ede c15b17ca", + "bfc63914 bfc5886c 41558bdf 4159d691 -> c1729db4 c16e3cec", + "41719da7 4171a109 c19eb92a c19eaade -> 420bbcd9 420bc4d7", + "40f2e763 4120d76e bf81ca39 401a0c2c -> 40a5e14d 413110b5", + "403ecb1f 40410e41 c101976e c0ed526d -> 41265bfe 4131dafe", + "3f2502e7 3f250e19 4180e4db 4180e97d -> c17782cc c17778d4", + "c1749928 c1741414 c185bb15 c1846fd3 -> 3fa233f0 3fbb10b0", + "c0cc3cec c0aa4750 410ceea0 413aa420 -> c190614b c1621248", + "c187d5d1 c187d2cf 41949378 41949750 -> c20e3690 c20e3324", + "4189ef0e 419723da 40cbe614 40cc42b4 -> 412dbcc2 414854aa", + "c1388677 c13867ed 409415b9 4094330f -> c1814fff c1813965", + "c199381e c19936b8 4181e0da 4181e97e -> c20d90ce c20d8bc9", + "410b4955 410b8393 416cec59 4188f40f -> c1069ec9 c0c2d18c", + "c16967c5 c16899b3 c1994daf c198ff15 -> 40912cca 40940356", + "c154cf7e c1524ed6 3e97d080 40d11740 -> c19ead8f c1570d5a", + "c1182f2b c1182b4b c0d70b8d c0d709ab -> c032a956 c0329612", + "c039be79 c039b877 c10489be c1041a2a -> 40ab5518 40ac3740", + "418472ef 41847725 418fd50d 41937713 -> bff04240 bfb5de80", + "41482908 417823f0 400d1ef1 400d274f -> 4124df34 4154dc34", + "c0342992 c02e52ee c14dc883 c0e52302 -> 408b0e39 412233c8", + "4062e228 408568f4 416e5074 41982c5e -> c177a032 c12b9bfa", + "416f0dd8 418c5c94 4122f9ef 4123bc31 -> 4096a34e 40eb7e72", + "c138669a c1381fd4 c184b625 c184aea3 -> 40a1ed58 40a298ec", + "c11d52b3 c1183cf1 c160ffbe c160ff40 -> 4087591a 4091859a", + "c1929ba9 c19230f7 4159828e 418896d9 -> c20d9941 c1fef23e", + "416f1f0c 416f51f4 c06411c8 c062dc98 -> 4193eb19 41942b33", + "bf7bbc94 bf7b8f6c c198caf2 c198c7ae -> 4190e9c9 4190ee77", + "41913d71 41a5495b c184c53e c1842756 -> 420ab264 4215074c", + "c09049d4 c08b8b70 c0b06d38 c0af607c -> 3f78b540 3f938720", + "c1127518 c11247ba c155fdc4 c155260a -> 408561e4 40876c14", + "c0c011c5 c0ac53f3 c110333f c10fdb3f -> 403f4972 40682516", + "c14fcfcf c14d3501 bf88db61 bf88c8ff -> c13eb6af c13c1995", + "411da6e6 411e70ee c18b396b c16aaefe -> 41c42af2 41da71e2", + "41058285 41059763 c1873ba2 c1873a0e -> 41c9fb50 41ca0754", + "c0c30d3f c0c25861 c015a197 bfec43d3 -> c087fc4a c06f0f2b", + "41667b6c 416714d4 3fffbcea 4000299b -> 41467105 41471d37", + "c0b1e6e1 c0b0cb23 41870e58 41881c34 -> c1b495ec c1b34121", + "c0d23c8e c0ccd93e 411bc368 411e1eac -> c1839e7a c1811804", + "c09d6f4e c09d46b2 4001a0bd 4001a6f3 -> c0de42c8 c0de1710", + "c1871cca c1398e59 c119e5df c1027a0d -> c10bbf87 bffd43d0", + "40d3d554 410ee28a be87823f be7d8283 -> 40dbc168 41131e9c", + "41339fae 4133a3b6 416bfe71 416bff27 -> c0617de4 c0616aec", + "401158db 401166a5 c164d897 c15460ad -> 4178b6e4 41849920", + "419384dd 4193a117 40d0ea54 4102b1d2 -> 412457e8 413ecd04", + "c16431ca c11183c0 c17e97c9 c17b08e3 -> 3fb6b8c8 40da2812", + "40fb9e13 411a09ab 4147a427 4147a579 -> c093acdf c03669f0", + "413b9995 413bf0a3 3ed1dd01 3ed578ff -> 4134edcd 413561bb", + "4106a5a0 416d8f60 c19547ca c195328c -> 41d8855c 420607bd", + "c146bb63 c144d6c9 c1b4af7b c15e3fe6 -> 3fbc2418 4124882d", + "c1993fb3 c1993f07 400423f2 40042e9e -> c1a9c587 c1a9c385", + "408bc014 40d8829c c18a8198 c18a8068 -> 41ad706d 41c0a23f", + "c03f2c2a 400bc57a 40839bae 411af201 -> c14abd0c bff6e3c4", + "40c14af5 40cc590b 4182757c 41827790 -> c12449a6 c11ebe72", + "41588dc5 415a5103 c182171d c1694d01 -> 41e0ed63 41ef3f9e", + "c18c94bc c18c8214 40c407a3 40c4267d -> c1bd9e5b c1bd83fd", + "40f08c4b 40f18cb5 c11c54e3 c11ad1af -> 41898bea 418a8d9f", + "c163b6f8 c15a7ea0 408eb14c 408edd94 -> c19592e1 c190eba3", + "c099863a c08fe052 414dfc69 414dfdc7 -> c18d6072 c18af649", + "c0ddb6fa bfe4fd48 c19cda29 c18fc865 -> 4130b54d 418e8a54", + "4132fd4f 41362645 4064af62 40abb11f -> 40ba497f 40f9f4d9", + "413b065f 413c0c3d 410926ea 410927fa -> 40477994 404b954c", + "c19488d4 c188ec2c 401fc286 4024feba -> c1a928ab c19ce47d", + "3ba34e68 3bc3b198 41881928 418937c8 -> c1892d93 c1880ced", + "bffef22c bffec054 bf82bae7 bf82aa79 -> bf788f66 bf780ada", + "40980f56 4098cb22 c1a17f5c c19d962a -> 41c39a00 41c7b224", + "c0d82c18 c0d80930 bf056418 40b8015b -> c14816ba c0c75cad", + "416ea3a8 417f3760 412df431 415f258f -> 3f77e190 40a2865e", + "4047ff25 4048249b c18be7f0 c18bd30e -> 41a4d2f3 41a4ec83", + "412b1317 413b8ba5 3f62e455 3f6300ab -> 411ce30c 412d5d60", + "41364560 41364868 3fd2669e 3fd2e7a2 -> 411be86c 411bfb94", + "c1473c9f c1473c0d 415db4f8 415db868 -> c1d27a84 c1d27882", + "412c068e 412c0a52 40c59d9a 40c5a276 -> 40926aa6 4092770a", + "c02d0e48 3df7def0 c130f4dd c130e651 -> 4105a2bf 4132e49b", + "40a45f04 40ef4b9c 3f44faa3 3f4a861d -> 408b0e40 40d6ac48", + "419c457f 41a10711 c141c14c c141b9f0 -> 41fd2277 4200f3dc", + "c199c5dc c19810a6 c19e9927 c19e9651 -> 3f1a0ea0 3f511020", + "c16941fa c1689482 415dfda6 4160c30a -> c1e50282 c1e34914", + "4109178a 41092dde c0b98e19 c0b90423 -> 4165999c 4165f4ea", + "4188dc33 418aed05 3ffb6850 3ffbd290 -> 41723e14 41766d00", + "bf53441a bf513866 c1484f6c c143a22c -> 41366dea 413b3be6", + "c1625c79 c15f5335 c03c68b8 c02acae8 -> c137a9bf c1303907", + "c192df7f c18e398b 4100f7a7 41375b1d -> c1ee8d0e c1ceb55e", + "c10adf99 c10aded3 c16be85b c16be7c7 -> 40c2105c 40c21310", + "41987a53 4198801d c1024ee2 c101a66e -> 41d94d8a 41d9a78e", + "c1989f10 c197a2be c19065c5 c1906265 -> bf83cab0 bf679f20", + "c0c82657 c0c82575 c018cbcf c018c541 -> c077876d c0777f1b", + "3f8126ec 3fe4d3b4 c1098630 bf892700 -> 400526f6 412620a6", + "c0e056a4 c0e04ca4 419b9323 419c8745 -> c1d49cee c1d3a64c", + "402332d1 4025520f c17ea345 c17e876b -> 4193aa10 4193fbe4", + "c128f8d9 c128e931 c14cdac5 c14cb901 -> 400f00a0 400fc650", + "410ab142 415d75be c0b05bae c0aa0762 -> 415fb4f3 419ad1ca", + "c135db6c c135ca18 bfaa3dd1 bf95cc4f -> c12321e2 c120825e", + "c09293f4 c09292d8 c11e9038 c0fc487c -> 40536910 40aa8d98", + "c11743aa c0803594 c0c09bee c0c097ba -> c05bdf34 4000ccb4", + "c13638c9 c1362a59 c15e1ae4 c15e11b8 -> 401f63bc 401fc22c", + "c0acdb7b c096891d 4050b399 4050b717 -> c10a9b83 c0fee2ea", + "c18a97df c18a49e3 bfb08550 bfad9310 -> c17f7d5c c17e831c", + "c16b911b c123c013 c10b3b2d c105ac83 -> c0cbc930 bfc42730", + "c0254074 c017a38c bfc2e535 bfc19a2b -> bf88e6bd bf58c3c6", + "40a8e351 40c29fb7 418170b1 418172fb -> c12e744e c1219186", + "c0fbaf26 c0ebebde 4065c96f 4065fc51 -> c13756a7 c12f684b", + "418cb8b6 418cb996 c10b85b2 c10993fa -> 41d182b3 41d27c6f", + "c187d5d4 c12a7607 c180cf23 c13ce438 -> c0a58ee0 40ae507e", + "c173c5cc c13aff40 c19cf1d3 c19cf197 -> 408c3ac4 40fdc8cc", + "c0b1afd0 c0b19634 406117c2 407546be -> c1162998 c111110a", + "41195c88 41995fa0 bff3b6fb bff14d45 -> 41378631 41a89b10", + "4118bc5c 4119dc6c c04b5f33 c03da8bd -> 4148268b 414cb439", + "c0571afe 400b37fe bbf7c535 3bee4535 -> c0579221 400bb3e1", + "c0cd01ca bf99a958 4192c105 4193f413 -> c1c73486 c19c5b9a", + "c14d83ae c14d7904 c18bff9e c146d3e7 -> bed5f8e0 40950c70", + "c1392aaf c11d13a5 c0e93398 c0e92850 -> c0892d0e c021e764", + "4132ac73 4132c659 3fe2006f 3fe79871 -> 4115b965 4116864b", + "40c76748 40c7f7f8 c19353f3 c1934953 -> 41c52325 41c551f1", + "c146ea2a c146e5d6 c0bfc43c c0bfa614 -> c0ce2e40 c0ce0770", + "c1090d62 c1090b74 40168eb0 40170320 -> c12ece2a c12eaf20", + "4100fee1 4102f2e7 c16bb0dc c16bac7a -> 41b655ae 41b751e2", + "bfe43eb6 bfb3100a 3f5decac 3f5e3f54 -> c029af30 c0110330", + "418fd1b4 418fe0f4 415596fb 415597fd -> 409416d6 409455da", + "c152a78c c14fc84c bfa83e8a bfa83ad6 -> c13da031 c13ac07b", + "40e476dd 40e481c3 40e0e936 40e129ca -> 3dd344c0 3de62340", + "c1a40b45 c18c1f8b c19cbde1 c19cbd91 -> bf69b680 4004f2b0", + "4182def0 4182e030 c1232f6f c1232b55 -> 41d4749a 41d477e8", + "4068bff4 4073c7cc c0c0e0c6 c0c0df6a -> 411a9fb2 411d6256", + "410ab057 411448a1 c128a6c9 c126be51 -> 4198b754 419e77b5", + "410af772 410af8ee 412b416b 412b4241 -> c0012b3c c00121f4", + "41589bd9 4158ad07 40490f48 40493938 -> 41264d8b 41266935", + "3fb5306a 40fad18e c153aa98 c152e112 -> 4169871f 41a889b0", + "411807c9 41181c3b 40ac6704 40ac68ac -> 4083a6e6 4083d172", + "bfd25e53 bfd2446d c0d72b91 c0b41af7 -> 407f06c4 40a29a76", + "4089233b 408925b5 c101f88c c101eb1c -> 41467cba 41468b66", + "bf903642 bf8fb17e 40a29ef5 40a2b98b -> c0c6c71c c0c68b54", + "c19b8768 c1946f7e c0bb2b7c c0bac744 -> c159ab2e c14b493e", + "c08ca035 c024ff66 c104bf47 c103a861 -> 4075611a 40b6fedb", + "bfe27181 bfd37edf 3fbcc784 3fe55afc -> c063e63e c0482332", + "c0f1d2ef c0e3c43d c0bda154 beee9740 -> c0e2e97b bf988ba4", + "419a83f4 419d3f0c bfbfd9fe bfbf9d62 -> 41a67dca 41a93cac", + "c19bfb45 c19bf59d 405893f6 405bf61a -> c1b77a08 c1b7081c", + "c066e1b9 c065fa37 c19de6bf c19ce171 -> 4180053a 41812778", + "41496296 4149b88a 4066540e 4068ca02 -> 410f3016 41102386", + "40fcaecb 40fcc285 c12698be c110fbf0 -> 4187a9ab 41927d00", + "40808014 4092fe6c c1828f6b c15a2c2b -> 418d361a 41a74f06", + "c19135c7 c1913555 4053bf1b 409fdf92 -> c1b92dac c1abad38", + "40aee04a 40b445a6 bfca5194 3f641028 -> 40925e45 40e6da0b", + "40e107b8 40e13588 c0f6235d c0e0b0f3 -> 4160dc56 416bac72", + "4165af30 4165cd70 c10a7c8d c102c26b -> 41b438ce 41b824fe", + "c146281b c134599b c1be695e c1798bdc -> 404d8f04 41487921", + "415a1ff0 415dcd30 40aecd18 416ac334 -> bf851a20 410666a4", + "c198a246 c198a200 c19f1cf7 c19f1ca3 -> 3f4f4ba0 3f4f5ee0", + "bf9577b2 bf89862e c0cd0cfa c0cd00c2 -> 40a7a2d6 40aaab6e", + "404d2349 40520977 c165a12f c11128cd -> 4144719f 418d11c6", + "40e41e5b 40f41f3d 417e74cd 41848cf5 -> c1170abc c104652e", + "418c5dc1 418c5eab 418e6864 418e93e0 -> be8d87c0 be826e40", + "c16bc8a7 c156655b 40ca2d88 40ca4f98 -> c1a8783a c19dbe10", + "419b93ca 419be522 408c3e1a 40aba166 -> 416156e1 4171ab37", + "411cb333 411cb551 c192910c c19281e0 -> 41e0db7a 41e0ebb4", + "c0ecd770 c0e93620 414d6793 414f4dad -> c1a2dcb2 c1a10152", + "40b640af 40b6d449 c06f10da c06f0ca6 -> 4116e381 41172e5b", + "c19ce58f c19ce509 c14a2974 c14a1ee6 -> c0df5870 c0df413c", + "c1557fac c15569e4 c18f5841 c18f2d3b -> 4091b594 40928d3c" + ] + }, + { + "glsl": "vec2 cultmath_iv_neg(vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "418113e2 4181173e -> c181173e c18113e2", + "c1935b26 c1906118 -> 41906118 41935b26", + "41113eca 411149da -> c11149da c1113eca", + "415c8211 415c860f -> c15c860f c15c8211", + "c0afae98 c0a7bc48 -> 40a7bc48 40afae98", + "c1a5ec7c c16f9759 -> 416f9759 41a5ec7c", + "4196e2ff 41974b6d -> c1974b6d c196e2ff", + "bed2c222 becacbde -> 3ecacbde 3ed2c222", + "3f27cd86 4007cb1e -> c007cb1e bf27cd86", + "40a40114 40a402fc -> c0a402fc c0a40114", + "41858d3a 41859312 -> c1859312 c1858d3a", + "c1722476 c171b448 -> 4171b448 41722476", + "40fc2b5f 411f4868 -> c11f4868 c0fc2b5f", + "bfe2d22b bfe2cb15 -> 3fe2cb15 3fe2d22b", + "40b46e02 40b4ac06 -> c0b4ac06 c0b46e02", + "c15c9f83 c15a0ab9 -> 415a0ab9 415c9f83", + "bfa68027 bfa66c19 -> 3fa66c19 3fa68027", + "417c7fd0 417d0440 -> c17d0440 c17c7fd0", + "c1807932 c1807042 -> 41807042 41807932", + "40bc1f64 40bc208c -> c0bc208c c0bc1f64", + "41296ec5 412b8e93 -> c12b8e93 c1296ec5", + "c1553de0 c0d805b8 -> 40d805b8 41553de0", + "c0836715 c082cdc3 -> 4082cdc3 40836715", + "c179f24f c179987d -> 4179987d 4179f24f", + "4058e6fd 407b31e3 -> c07b31e3 c058e6fd", + "411e5819 411e6b17 -> c11e6b17 c11e5819", + "40986c20 41498da8 -> c1498da8 c0986c20", + "3fe9be9b 3ff88065 -> bff88065 bfe9be9b", + "c1731822 c1721f76 -> 41721f76 41731822", + "4194dcee 41a57f36 -> c1a57f36 c194dcee", + "414d64eb 4159c15d -> c159c15d c14d64eb", + "c00c056e 40d74e47 -> c0d74e47 400c056e", + "3f5cde4d 3f5fcef3 -> bf5fcef3 bf5cde4d", + "bf9a4d1c bca02100 -> 3ca02100 3f9a4d1c", + "3fc12e2c 41237502 -> c1237502 bfc12e2c", + "c0cd1af0 c0cd1214 -> 40cd1214 40cd1af0", + "c149917b c148010d -> 4148010d 4149917b", + "c0f6efe9 c0f6d813 -> 40f6d813 40f6efe9", + "c1928f3a c1928df6 -> 41928df6 41928f3a", + "c1833ac1 c183363f -> 4183363f 41833ac1", + "40ba22f4 41679fce -> c1679fce c0ba22f4", + "c01e6b22 3f04cc88 -> bf04cc88 401e6b22", + "408f2d1f 40b96409 -> c0b96409 c08f2d1f", + "4187bdaa 4187f686 -> c187f686 c187bdaa", + "408d14cf 408d2a01 -> c08d2a01 c08d14cf", + "c0992171 c0977daf -> 40977daf 40992171", + "c0de2ba1 c0c3bd5f -> 40c3bd5f 40de2ba1", + "c1835232 c0f3f682 -> 40f3f682 41835232", + "c18a4ada c18a46d0 -> 418a46d0 418a4ada", + "c0d1dc8a 3ff46ac8 -> bff46ac8 40d1dc8a", + "41964f56 41965572 -> c1965572 c1964f56", + "414d037d 414eadb3 -> c14eadb3 c14d037d", + "c0722eb8 c06ef2f8 -> 406ef2f8 40722eb8", + "c161f308 c161f16c -> 4161f16c 4161f308", + "40dbb808 40dbc758 -> c0dbc758 c0dbb808", + "bede54b0 40c1fcbb -> c0c1fcbb 3ede54b0", + "bfc4afd2 bf9020ce -> 3f9020ce 3fc4afd2", + "c1836563 c16c8462 -> 416c8462 41836563", + "c10050d2 c0fa2290 -> 40fa2290 410050d2", + "c0b5f67b c0ac1d15 -> 40ac1d15 40b5f67b", + "c0a8cecd 4088c54d -> c088c54d 40a8cecd", + "c13d2273 c13d0763 -> 413d0763 413d2273", + "40729c9d 40988642 -> c0988642 c0729c9d", + "416cbb00 416ce558 -> c16ce558 c16cbb00", + "c081f4ee c081d4f2 -> 4081d4f2 4081f4ee", + "c136a3ad c1297adb -> 41297adb 4136a3ad", + "410a8e76 410a8fd2 -> c10a8fd2 c10a8e76", + "c100f5f2 c100a564 -> 4100a564 4100f5f2", + "c16830ff c1437fdb -> 41437fdb 416830ff", + "bedccbfa bedca806 -> 3edca806 3edccbfa", + "40d1a21b 40f3c04d -> c0f3c04d c0d1a21b", + "414ad73c 414aefe4 -> c14aefe4 c14ad73c", + "4107ba29 4107ecd3 -> c107ecd3 c107ba29", + "c1886799 c18776cb -> 418776cb 41886799", + "40ddf42a 40de25c6 -> c0de25c6 c0ddf42a", + "40eee37a 40ef3b9e -> c0ef3b9e c0eee37a", + "417a0f54 41813d76 -> c1813d76 c17a0f54", + "c07183f4 40679ed4 -> c0679ed4 407183f4", + "c1832985 c18301bf -> 418301bf 41832985", + "419e6fce 419f50d2 -> c19f50d2 c19e6fce", + "40d20f6d 40e2de93 -> c0e2de93 c0d20f6d", + "410d0aa7 410d2299 -> c10d2299 c10d0aa7", + "c19a0ae5 c19320f9 -> 419320f9 419a0ae5", + "c12296e6 c1227c5a -> 41227c5a 412296e6", + "c04879c3 c03cf0bd -> 403cf0bd 404879c3", + "40e29cf0 40e31098 -> c0e31098 c0e29cf0", + "c151c214 c151b878 -> 4151b878 4151c214", + "c19a73bf c19865d1 -> 419865d1 419a73bf", + "c15b74e8 c13f72b4 -> 413f72b4 415b74e8", + "40c23d7e 40c244aa -> c0c244aa c0c23d7e", + "410e7aa8 410e8274 -> c10e8274 c10e7aa8", + "4112d105 4112d1af -> c112d1af c112d105", + "40948fc8 40bc2e38 -> c0bc2e38 c0948fc8", + "413cbcf8 41987ef8 -> c1987ef8 c13cbcf8", + "4088040b 40882695 -> c0882695 c088040b", + "c0ae07aa c0a2e7f2 -> 40a2e7f2 40ae07aa", + "415c0bf6 41825ca5 -> c1825ca5 c15c0bf6", + "c0b44622 bf81159a -> 3f81159a 40b44622", + "c184d89a c184adfe -> 4184adfe 4184d89a", + "c110bc11 c09aad16 -> 409aad16 4110bc11", + "c15492c0 c14eb49c -> 414eb49c 415492c0", + "c1465239 c14651b1 -> 414651b1 41465239", + "40e55bcf 40e56b91 -> c0e56b91 c0e55bcf", + "c12b3cfd c129259f -> 4129259f 412b3cfd", + "4105879d 4118cc83 -> c118cc83 c105879d", + "413ca588 413cac28 -> c13cac28 c13ca588", + "413afe87 414c8989 -> c14c8989 c13afe87", + "4176a4cd 4176d553 -> c176d553 c176a4cd", + "c19c4a1b c19a514d -> 419a514d 419c4a1b", + "410df6be 410dfb62 -> c10dfb62 c10df6be", + "41808087 41808551 -> c1808551 c1808087", + "4123d9a6 4123daee -> c123daee c123d9a6", + "c14300af c0a610aa -> 40a610aa 414300af", + "400b0ce5 400b3bbb -> c00b3bbb c00b0ce5", + "416484d0 416485f0 -> c16485f0 c16484d0", + "406bbdd6 4081f1d5 -> c081f1d5 c06bbdd6", + "3f2b7407 3f8cdedd -> bf8cdedd bf2b7407", + "c19add0e c19adcd4 -> 419adcd4 419add0e", + "c18c4eae c1898fec -> 41898fec 418c4eae", + "c0afa1af c0af6471 -> 40af6471 40afa1af", + "405831a7 40585349 -> c0585349 c05831a7", + "c1281034 c119c6a2 -> 4119c6a2 41281034", + "3f9a9c95 3f9aaaab -> bf9aaaab bf9a9c95", + "4180bf45 4180bfb7 -> c180bfb7 c180bf45", + "419e90a3 419e90d9 -> c19e90d9 c19e90a3", + "4185d3f6 4185ea1a -> c185ea1a c185d3f6", + "411ac12a 411ac2b6 -> c11ac2b6 c11ac12a", + "c1a4ff72 c18c1630 -> 418c1630 41a4ff72", + "419230e5 4192317b -> c192317b c19230e5", + "411672f1 411c23d7 -> c11c23d7 c11672f1", + "40b04ba2 412b0033 -> c12b0033 c0b04ba2", + "412926a9 412b93d7 -> c12b93d7 c12926a9", + "c1339ef0 c1339dea -> 41339dea 41339ef0", + "410c8a6a 410c8b6e -> c10c8b6e c10c8a6a", + "4127b546 414dfade -> c14dfade c127b546", + "c0c178ce c0c15c8a -> 40c15c8a 40c178ce", + "c0ec4695 c0ec1a07 -> 40ec1a07 40ec4695", + "409f45b5 40a44b1b -> c0a44b1b c09f45b5", + "c1b2edd5 c179de09 -> 4179de09 41b2edd5", + "402ffec6 403008aa -> c03008aa c02ffec6", + "c18ac71a c18a8f80 -> 418a8f80 418ac71a", + "c111c6af c0e767f3 -> 40e767f3 4111c6af", + "c153bc1a c153b872 -> 4153b872 4153bc1a", + "41977c99 419792ab -> c19792ab c1977c99", + "4102452d 410246c3 -> c10246c3 c102452d", + "c1acf166 c1625e2f -> 41625e2f 41acf166", + "4194e3c4 41965b50 -> c1965b50 c194e3c4", + "40d9eb4f 40df1661 -> c0df1661 c0d9eb4f", + "be53a926 bdbb1db4 -> 3dbb1db4 3e53a926", + "4034ba52 4035e03e -> c035e03e c034ba52", + "c08be38d c0441366 -> 40441366 408be38d", + "c10f9471 c10f92d1 -> 410f92d1 410f9471", + "40c27d21 40c61c6f -> c0c61c6f c0c27d21", + "c182d402 c182c0be -> 4182c0be 4182d402", + "bede6cb5 beda284b -> 3eda284b 3ede6cb5", + "4126e1da 419b9083 -> c19b9083 c126e1da", + "3f5ae8e1 3f700e1f -> bf700e1f bf5ae8e1", + "40b7bb3b 40b7c50d -> c0b7c50d c0b7bb3b", + "4082a161 40f5fe0f -> c0f5fe0f c082a161", + "bfa8fddc bfa8f944 -> 3fa8f944 3fa8fddc", + "c17c3f26 c17c3016 -> 417c3016 417c3f26", + "c0a32ae4 c09b9e44 -> 409b9e44 40a32ae4", + "414e8c77 414eaae9 -> c14eaae9 c14e8c77", + "c0d01608 c0c97dc4 -> 40c97dc4 40d01608", + "40331894 4133044b -> c133044b c0331894", + "c164aa46 c1647acc -> 41647acc 4164aa46", + "c0865d70 c0865a40 -> 40865a40 40865d70", + "411f63d0 411f6a90 -> c11f6a90 c11f63d0", + "c138e94b c138e62f -> 4138e62f 4138e94b", + "c13f90f1 c13e9331 -> 413e9331 413f90f1", + "c180b553 c18014d5 -> 418014d5 4180b553", + "418580f4 4185890c -> c185890c c18580f4", + "c123e054 c123df7e -> 4123df7e 4123e054", + "bff5005e bff3ef42 -> 3ff3ef42 3ff5005e", + "c19d292b c19d01e5 -> 419d01e5 419d292b", + "419de90f 419e9529 -> c19e9529 c19de90f", + "c1635ab5 c16289cb -> 416289cb 41635ab5", + "c0c69859 c0c695ef -> 40c695ef 40c69859", + "c008c764 c0024bec -> 40024bec 4008c764", + "c101fa77 c101f047 -> 4101f047 4101fa77", + "c112d38a c1129ab2 -> 41129ab2 4112d38a", + "410c72e5 410cfb4b -> c10cfb4b c10c72e5", + "c125b747 c12564f7 -> 412564f7 4125b747", + "40755567 407601c9 -> c07601c9 c0755567", + "4155e3cd 41560cdb -> c1560cdb c155e3cd", + "c19e9c2e c19e6db6 -> 419e6db6 419e9c2e", + "40d4db7c 41224842 -> c1224842 c0d4db7c", + "41899917 4189f18d -> c189f18d c1899917", + "c0854e48 c0854cb8 -> 40854cb8 40854e48", + "c0460c91 c01d3fcf -> 401d3fcf 40460c91", + "415df45c 419f16ba -> c19f16ba c15df45c", + "40c4b6c2 40c4c0de -> c0c4c0de c0c4b6c2", + "419ca0d5 419d1f0f -> c19d1f0f c19ca0d5", + "c123a90d c10608c1 -> 410608c1 4123a90d", + "412d4d6a 413051f6 -> c13051f6 c12d4d6a", + "413c3aca 413e063e -> c13e063e c13c3aca", + "4151db7a 4189a403 -> c189a403 c151db7a", + "c109b327 c1061b09 -> 41061b09 4109b327", + "4165a424 4165d394 -> c165d394 c165a424", + "c18a52ba c183b884 -> 4183b884 418a52ba", + "bfae45c8 bfae4018 -> 3fae4018 3fae45c8", + "3ff82298 40032894 -> c0032894 bff82298", + "bff8c675 bff37a8b -> 3ff37a8b 3ff8c675", + "416ff67f 416ffcc1 -> c16ffcc1 c16ff67f", + "4074dd59 40a1b213 -> c0a1b213 c074dd59", + "40fd6b22 40fdb59e -> c0fdb59e c0fd6b22", + "c15342b4 c1527e8e -> 41527e8e 415342b4", + "c0b6e842 c0b6c97e -> 40b6c97e 40b6e842", + "412f988d 41301c77 -> c1301c77 c12f988d", + "3ee11edc 3f3365d2 -> bf3365d2 bee11edc", + "c1487a5a c1403aaa -> 41403aaa 41487a5a", + "40a80497 40a80b09 -> c0a80b09 c0a80497", + "4085dc64 4086296c -> c086296c c085dc64", + "4050283f 4083d2d9 -> c083d2d9 c050283f", + "409ac386 409ad3ea -> c09ad3ea c09ac386", + "4026fbec 412d7425 -> c12d7425 c026fbec", + "419848ab 4199a9a5 -> c199a9a5 c19848ab", + "c1160759 c0e0eb46 -> 40e0eb46 41160759", + "c070b067 c070ada9 -> 4070ada9 4070b067", + "412a4afd 412aa373 -> c12aa373 c12a4afd", + "40ea3dd3 40ea3efd -> c0ea3efd c0ea3dd3", + "c154a4ee c0e9d9ec -> 40e9d9ec 4154a4ee", + "41923416 4192497a -> c192497a c1923416", + "c01b1e3c c01ac944 -> 401ac944 401b1e3c", + "bf85d92c 40c84deb -> c0c84deb 3f85d92c", + "417d1667 417d2f79 -> c17d2f79 c17d1667", + "417ef783 417f1e0d -> c17f1e0d c17ef783", + "40597439 4073fbd7 -> c073fbd7 c0597439", + "c055d45b c0555f85 -> 40555f85 4055d45b", + "c19ea771 c19ea70b -> 419ea70b 419ea771", + "4189fc38 4189fcc8 -> c189fcc8 c189fc38", + "40943b04 4094697c -> c094697c c0943b04", + "c1633c45 c15d38dd -> 415d38dd 41633c45", + "c05e41ab c05b9cc5 -> 405b9cc5 405e41ab", + "c125e548 c1257ac4 -> 41257ac4 4125e548", + "4181134a 4184a5de -> c184a5de c181134a", + "41168c5e 41168d12 -> c1168d12 c1168c5e", + "c19fe3be c19fe26a -> 419fe26a 419fe3be", + "bdfb0d90 3defa790 -> bdefa790 3dfb0d90", + "c131cd0c c131c8e8 -> 4131c8e8 4131cd0c", + "4191a682 4191aa1e -> c191aa1e c191a682", + "c1330921 c1303f9f -> 41303f9f 41330921", + "c0ad3a1b c0ad1cc9 -> 40ad1cc9 40ad3a1b", + "c1854283 c1849975 -> 41849975 41854283", + "c18dff36 c18d6bd6 -> 418d6bd6 418dff36", + "bfd932b6 bfd92dca -> 3fd92dca 3fd932b6", + "c1946ac7 c1919bcf -> 41919bcf 41946ac7", + "3fb08ad7 3fbcb789 -> bfbcb789 bfb08ad7", + "c09b282c bffc6f91 -> 3ffc6f91 409b282c", + "4143a7f2 4143ae96 -> c143ae96 c143a7f2", + "418d9279 41ac1353 -> c1ac1353 c18d9279", + "c17ed03f c17ecf31 -> 417ecf31 417ed03f", + "c18b9784 c18b9624 -> 418b9624 418b9784", + "407f074c 40b9292a -> c0b9292a c07f074c", + "c0877482 c0870406 -> 40870406 40877482", + "c134f2eb c12cde51 -> 412cde51 4134f2eb" + ] + }, + { + "glsl": "vec2 cultmath_iv_mul(vec2, vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c1694f46 c158b172 c1805b78 c17c99c3 -> 4355d0d3 4369f5ff", + "413269c5 41905796 41954606 41a1caae -> 435010ba 43b672b9", + "40903929 40bd9c3f bfbc0b38 bf9f7d48 -> c10b470d c0b3b42a", + "c1a13239 c18e87a9 40f26bc6 40f26ce2 -> c318a609 c306f83f", + "3eed17eb 3ef27f95 411dbd6f 411f7f5d -> 4092171d 409715e3", + "412d3a30 41964adc c1390ea7 c1390e03 -> c3594966 c2fa7110", + "c161b7d5 c161b5c5 405817e3 4058281d -> c23e967a c23e866e", + "40f166da 40f172e6 c1482b45 c145eb3f -> c2bcca93 c2baa1fb", + "c0c8e980 c0bc9df0 41779cca 4177a316 -> c2c25948 c2b66fe8", + "405685d4 40a69a4e 41138768 4113cdd4 -> 41f740a1 4240611d", + "414d0e3b 419d243f 408edb0d 408ee033 -> 4264dab5 42af6774", + "bffff3d5 bffe194b c18dd90f c18dd73b -> 420cc990 420dd251", + "bf8032bf bf67f442 c12dc815 bffe2118 -> 3fe64256 412e0cfa", + "40e41b45 40e7eda3 416d1ce8 416d1fc0 -> 42d34701 42d6d3c4", + "406c9fd6 406ca33a 3f96d142 3fcc93de -> 408b6713 40bd1ac1", + "c0a3340f c087b0d9 c15fe66c c15fbee2 -> 426d3074 428ebd3f", + "409c9a51 40cd4917 c0e415ab c0e3f919 -> c236e679 c20b7537", + "419baa29 419bcf77 c05524bd c048a7a3 -> c281b9fa c27405be", + "40dea32f 40debd51 40ce8876 411bd61d -> 42339dfd 428796ec", + "c0a83cb1 c0a83b37 40571eb7 406f3799 -> c19d3533 c18d5dea", + "c1854e8a c1853b60 410eb922 410eba52 -> c314a52d c3148e92", + "417c2fd8 417c33e8 418e22bc 4191cf5c -> 438c04c1 438fa5af", + "415a927e 4160d82a 40b89773 40ba446d -> 429d9a99 42a39928", + "c0e7c3d6 c0e7c2f6 c18b93b0 c18b92e2 -> 42fcb7ab 42fcba14", + "414a97b3 414a9c8d 3f2cf6fe 3f4af442 -> 4108e163 4120a0d9", + "c17dcede c174fe18 c13dc11f c13dc095 -> 433597e5 433c2132", + "c150e380 c14cce88 c0ec1221 c0ebd1db -> 42bca97b 42c0a085", + "41517f09 419f922c 413f6495 414034f7 -> 431ca017 436f9d49", + "bfd3106a becb05d6 3f9e9394 4120cebe -> c18494b6 befb8548", + "c18b902c c18b8fc6 3ddb3ff0 3dfc7810 -> c009a360 bfef0db3", + "4176abb4 41781664 bfc23afa bfc1f346 -> c1bc3a1f c1bae1db", + "41319274 4157ad34 c0d16829 c0ca6a13 -> c2b06c28 c28c6723", + "c12904ba c127b1bc c1843d6a c1843c36 -> 432d3e2c 432e9df8", + "c01c0980 40a1ed30 40862041 40864727 -> c123b0af 41a9de51", + "c1486fbe c1437018 41850fd3 41851231 -> c3506098 c34b2aa2", + "4174fbf8 41762140 413881ca 4160596e -> 4330914f 4357b313", + "418611dc 41861288 c189ecc7 c189ac79 -> c39077d8 c39033c4", + "c0acda4c c0acd85c c190e560 c18be91c -> 42bcedbc 42c3ab56", + "41078d06 41078e02 411118a2 4111bd5a -> 4299a7d7 429a5765", + "c12ef0c9 c0c59dce c1354006 c13532dc -> 428bdfd5 42f7b7fd", + "c0ccbc84 c0c730a8 c16529d5 c16517a7 -> 42b240ee 42b74617", + "41721c77 4174d279 c19d65c3 c19d256b -> c3968666 c3949ed8", + "c1369dd3 c1368ff9 413ed9cb 413ef525 -> c3083802 c3081a2c", + "c1654374 c16537e2 4015338c 40157184 -> c205d5ec c20597ae", + "412c2751 412d7783 c0c67ed7 c0bbf0c9 -> c2868062 c27cc548", + "413731ac 41507a7c c0fc40f4 c0fc3ba8 -> c2cd6d77 c2b47f96", + "3f92095e 3f929822 c014dfc0 c013a600 -> c02a8028 c0287426", + "c1216cc6 c1216bb2 c190459a c19041bc -> 4335ec0e 4335f226", + "bf464f54 bf2817ac 416d19eb 416d201d -> c137b051 c11baeef", + "c036ab99 c034dde7 419f9da3 419fa265 -> c263d0e9 c2618a63", + "c181ded4 c1814df2 c109ce28 c109cd58 -> 430b34dd 430bd1aa", + "c111473d c10cc3eb 4095b255 40961b6b -> c22a5e9a c224a02d", + "3f370113 3f39eead 411dec7b 41232db5 -> 40e1c96b 40ed0855", + "405c1ccb 405e77c5 be4ba366 be2a529a -> bf30f6f8 bf127224", + "c122bfcc c00f7102 4140155c 414102a4 -> c2f5688d c1d74173", + "c13e1548 c13d2954 c11ef090 c11eeeb8 -> 42eadfcc 42ec0783", + "c11c2b33 c11b5691 4174a726 417558ba -> c315ab78 c31473ef", + "c04dbda1 c04d7a8f 41775f07 41776951 -> c246d69a c2468d86", + "40571462 4057184e 408b02e8 408b0f50 -> 41699505 4169ae20", + "400ce9d0 400d04f0 416a51db 41819f8a -> 4200fac7 420ecebe", + "4106dce6 4106dd6a 41863b72 41925b0a -> 430d6de3 431a3479", + "c0d5b574 c0d58984 40505475 4123f893 -> c288e20b c1adc62e", + "c173ea65 c173ce0d 417a25c1 417a6ddf -> c36e9b96 c36e3b2d", + "40f1d152 40f25cd6 c189fb3d c189910d -> c302a189 c301f209", + "c0e89de5 c0e89913 413de44d 41455493 -> c2b34e5b c2ac8871", + "4144a449 4144a56f c19f61b3 c19f5fc1 -> c374db98 c374d72d", + "3f7e58da 3f821113 c173f42e c17361e6 -> c177e489 c171cf9b", + "41817315 41817723 418f2b10 418f2bb8 -> 4390ca1e 4390cf51", + "c19bc3e8 c14fd061 415ac804 415acb64 -> c3852095 c33199d1", + "40914fb2 4091b1ae 4121da09 415b1cef -> 4237bdc4 427966ef", + "4151d8c1 41869ad4 c06a66b4 c06a63bc -> c2767f0c c24021e1", + "c03041e6 c02f45da 4068ad60 4068b560 -> c1203899 c11f4e01", + "c19df23a c19df1ca 4185a63b 4185baf9 -> c3a50468 c3a4ea5a", + "c0166159 c01657e7 c196823a c1957d5a -> 422f958e 4230d313", + "c19c258d c198013b c1095acc c0d12abf -> 42f864c6 43278ef4", + "c12ef81c c12ef594 c19357a0 c1837498 -> 4333aeb4 434968b8", + "c067c05f c02eb281 c0c0a61e c0b2dfc2 -> 4174219f 41ae66a9", + "4034ea46 40b0c8a5 4178a1ae 41966b35 -> 422fb536 42cfbf32", + "c0e5ef97 c089e459 414e7443 417d560d -> c2e38b12 c25e68be", + "408dc086 41212449 41291f0e 4129202e -> 423b4a95 42d4ea6b", + "41328228 4199e7cc bf1dd5ea 3f72b2aa -> c13dc785 4191e888", + "c0cb9dd7 c0c9e475 4074af32 410f5be4 -> c2640c83 c1c0f7ea", + "4189f1d7 4189f471 c168a66a c1447a26 -> c37abe68 c353bdf5", + "c1918a86 c1571193 40e599d0 40f1c598 -> c30973be c2c0e3f1", + "415f3c81 41601fcf 40a52ac3 40aa50fd -> 42900749 42951c07", + "c18df482 c17a7094 3faae136 3faaee4a -> c1bd9101 c1a72b14", + "c168b422 c168b3a6 c191e316 c1917096 -> 43843418 43849c73", + "c1048a12 c1048812 418cb8ba 418cb92e -> c311b6c3 c311b418", + "419922c5 41992573 419a575f 419a5ad1 -> 43b8a65c 43b8adb7", + "40c534aa 40c53fa6 bee9f0ac 3ff2b7cb -> c034405e 413b03c8", + "c16cbe71 c16c8f03 413d2d99 413d4f7f -> c32f121e c32ecfb8", + "410dbaa5 410dbb73 413eb6e8 413eeb0c -> 42d32b93 42d36682", + "c13b1d7a c13b1b58 c191f614 c191f524 -> 43555b51 43555f1e", + "c0e7639a c0e7603a c19e58ab c19e586d -> 430f1d4f 430f1f9e", + "c00515cc c0048da4 41018d2a 41019ebe -> c186c504 c18628ef", + "3d725d59 3d73d2a7 40b03573 40cdce1d -> 3ea6d2c7 3ec403ff", + "c10c1d01 c10c1bc3 4166aad8 4187badc -> c3149322 c2fc7ce4", + "4190e714 4191072c c18cb3e9 c18ba5ed -> c39f6bb0 c39e16c6", + "c1988e3d c193b1f3 3ea9e618 3f0e2174 -> c12965ab c0c40a72", + "c18a1c17 c18a1af1 c08194ad c08192ab -> 428bcd66 428bd0ba", + "c1363aea c1341ff4 c0ca6ea8 c0ca6a10 -> 428e6bd7 42901942", + "c18645fc c17b229c 41102e60 412e8a08 -> c33717ee c30d70f6", + "c16ad0ad c0fc0316 413e1074 413e19a4 -> c32e5e65 c2bb1a7d", + "3f6b9e8d 3f6bd9f3 c0a2c24c c0a2c144 -> c095f2ed c095cc36", + "4128a59e 4128a60a c17f7a9e c17d58c4 -> c3284e2b c326e627", + "c1746457 c136f51b bfd0b6cd bf6f07a6 -> 412ad44c 41c7400a", + "c1860efd c185f53f c17f8619 c17e7c11 -> 43852a40 4385cf27", + "408f16aa 408f3d96 418f2903 418f2f5d -> 42a0092b 42a03bce", + "419ab7ff 419bc785 c186b2b4 c16647f0 -> c3a3ee5c c38b2cc9", + "412b8c3c 412c0d00 40fea06a 40ff5fde -> 42aaa0a2 42aba161", + "c0c33010 c0c32ed0 400fca1a 412ced7a -> c283d95b c15b427a", + "40a735d0 40c452e8 c185fb82 c172c7ac -> c2cd7fe7 c29e934a", + "c09519be c0942fca 4182031c 4182038c -> c2977247 c2968423", + "c193cf36 c18de40e 4183c767 4183cde1 -> c39833cf c3921471", + "c15cd10f c15ba41b c18b03c7 c18922ff -> 436b51b2 436fd18a", + "4103b281 4103b603 c138b7de c10f3d30 -> c2be12d7 c2936061", + "c19a03ac c199c3de c122776c c0e17198 -> 43076961 43437c57", + "c185ef64 c185b21c c11f0e10 c11f0580 -> 432618fd 43266e15", + "c0fe0eea c0f99a56 c10e729e c10e70cc -> 428ae196 428d5e05", + "c11dda37 c11d719d c16efb90 c16ef018 -> 4312f349 43135bfd", + "c0e7d8fb c0e7c839 c14dac20 c14daa7c -> 42ba35b1 42ba44a4", + "c083a998 bfc79d62 c11f668b c11f61e1 -> 41788e24 4223f625", + "40fe52db 411106cf 410de9fc 410deddc -> 428cfc16 42a0cf00", + "c030b678 c030b448 412b7ae1 412b7d7f -> c1ecc106 c1ecba7b", + "41350d35 4141d35b 419591f0 41959300 -> 43538fcc 43627ea1", + "3e8a9896 3e8b1f6a 410ea514 413b0de4 -> 401a7405 404b4efe", + "c127ed94 c1255340 41280425 412836e3 -> c2dcafd4 c2d9029e", + "bf0d6820 3e8723c0 c1921a1b c190377f -> c09a4057 4121679b", + "c021d94f bfdf18c2 c0b9925f c0b90afd -> 41214278 416aa528", + "c19d7dd3 c19d7cfb bfed425d bfed3263 -> 4211ebb4 4211f650", + "c1216fbf c1216ecb c1490e71 c1490507 -> 42fd8652 42fd93b1", + "412f0172 412f023a 4155223f 41552c51 -> 4311b39d 4311bb26", + "4166e8e8 4166ea78 c0d184a9 c0d0c64f -> c2bcfd15 c2bc501c", + "c0643536 4096028b 4134e558 4134e6e8 -> c2214341 42540230", + "3e39ebb6 3e3cce4a 416d002f 417abf21 -> 402c1f5a 4038ee6b", + "c17f94b4 c1685bfc 40cb6ae3 412d67c6 -> c32d1f18 c2b8a1f5", + "41287216 412872ca 411da7a5 41209017 -> 42cf788d 42d34d1c", + "40d95cf9 40d97f3f c15fc02e c15c2d70 -> c2be191e c2baf27a", + "c0f4467c c0c72e38 417d06f5 417d42eb -> c2f1a983 c2c4de17", + "c19acd57 c19a96a5 c17643ab c1764049 -> 4394b394 4394ea3d", + "4145af3f 41461ba1 4013b3a8 401435c8 -> 41e41cb9 41e5632f", + "c00d2f5b c0087cb5 c1597df0 c1592912 -> 41e78f36 41efe531", + "419ed972 419edca6 418af223 418e0dbd -> 43ac6eed 43b04dd5", + "c126d3a2 c1235f40 c19a0669 c199edf5 -> 43447792 4348befa", + "c0b4d50b c0b4c581 3e180454 3f1365ab -> c0503c4c bf56b0a6", + "c0f62ce4 c0f6264c 4089d8af 408b6301 -> c2060994 c2048ad7", + "41935e5d 4195185b c1646060 c1602828 -> c38501d2 c38109af", + "c183edf2 c183e27c c1800b6d c1800b2b -> 4383edfe 4383f9b9", + "c1529fe6 c14db27a 41983cdc 41996cc0 -> c37c7614 c374a5be", + "c11051f1 c1103e93 bf1ebf59 bf1e84e7 -> 40b2a302 40b2fce4", + "41779378 41779e68 40c6c61b 40c73b45 -> 42c03ba5 42c0b577", + "c0931f8b c092a489 c03f5300 c0329100 -> 414c92ed 415be878", + "4146d27e 4147398a c18ac29f c185a7d7 -> c357f8f3 c34f9b6c", + "41985f46 41987156 416f526e 41718832 -> 438e7202 438fd3cc", + "4170c859 4170c8df c06e3241 c03bf83f -> c2600a04 c230cbd6", + "c03c7486 c03aea9a c0a2202a c09ca2fe -> 4164bbf0 416eb2d5", + "c1836ef6 c1474e6b 3fd96d3c 3fe02b84 -> c1e62edd c1a94684", + "40f21dd0 40f26260 c165dc35 c165dbab -> c2d9a27f c2d9646c", + "412d77f7 412d8815 41592330 415923b8 -> 43132288 43133090", + "3f837775 3f8390ab c15f8d78 c15edad8 -> c165c773 c164e3f4", + "c12737c1 c126c8d3 416e02a8 416fc200 -> c31c9bc5 c31b106f", + "c10fe873 c10fd42f c195a3d0 c18edb2c -> 432085ab 43283cc2", + "414e0e63 414e254d 412523b8 41252b48 -> 4304ec06 430500e5", + "4184780b 41872a79 41287758 4128a5a8 -> 432e5911 433216ad", + "418326d3 4183270d c1053184 c104da84 -> c3087950 c3081fef", + "41661822 4187f337 41968eac 4196aa70 -> 43875260 43a0060a", + "c0cdb69a c0cdb522 419bfd0b 419d890d -> c2fd2e3b c2fab001", + "3f88b490 403a9738 c1807e1a c17bfba4 -> c23b4f0b c1868f6a", + "41569685 41818b3e bf6a2030 40836256 -> c16cf321 4284f807", + "40716f1c 408ecfc2 c0b44783 c09443c1 -> c1c923f2 c18bd422", + "416c4670 41761408 410e3b57 410e4fcd -> 430345d7 4308cbd2", + "406c17ca 40cdc42b c17c66cc c17c65ee -> c2cadfba c268c56c", + "400df691 400eda4f c1784e9a c177b0ec -> c20a8f59 c2095b02", + "41744b1a 41789726 40ada49c 40add5c4 -> 42a5b3d6 42a8cdb9", + "3f206575 3f24c90b c114415a c1143bea -> c0bedc97 c0b9c063", + "c0c16854 c0c122d8 c160d730 c0e2759f -> 422ad980 42a9dddc", + "c121cf74 c121cea6 c09582d3 c09581ad -> 423cfe7a 423d00de", + "c1606cc2 c14b853a 4144f1eb 4144f405 -> c32ca931 c31c9254", + "40aed24c 40afbedc 4062ca23 4062d1dd -> 419adfb1 419bb691", + "c15a05f1 c157bd09 413fd159 41401b9f -> c3239bfb c321a676", + "417b4450 419f1d98 c17ef2ef c17ef147 -> c39e765b c37a3a98", + "41197214 411acbd8 4148eaab 4148ee15 -> 42f0db91 42f2fe6e", + "c11e037e c11e0014 c041e4a1 c041dabf -> 41ef4a22 41ef5b81", + "bcb369a8 bcaef658 bffc892c bff8e174 -> 3d2a18bb 3d30fc24", + "3f11d32f 3f93ec48 c182a95b c1821c93 -> c196ffb0 c1143b09", + "3e33d374 3e34128c 417c3df4 4181cb76 -> 40312fab 403698ed", + "3fa34782 41064e78 417337de 41735da2 -> 419b2082 42ff5b37", + "c18104f2 c180c36e c158c7d3 c12e3df3 -> 432f47fb 435a81c3", + "40a8a02d 40cf653b c10d12a8 c10cdc40 -> c26493bd c2399159", + "c10a35a6 c10a341e c12fc5f1 c12c82b7 -> 42ba432b 42bdcb14", + "c1232468 c123205c 40e060e9 41715e8c -> c319d186 c28efa11", + "c0843c4c c07ce04f 40b60808 40b6eec0 -> c1bcfc63 c1b3cf67", + "c192db43 c192daa1 4090ae6f 409107c9 -> c2a66550 c2a5fe16", + "3fc4886f 3fc4b811 418652ce 4197f3ca -> 41ce3df8 41e987d0", + "c1983216 c19823b6 beaf75af 3ebc69af -> c0e00739 40d0a068", + "4103303a 41036462 c1867425 c181d815 -> c30a0450 c3051411", + "419c847e 419cea5a 3e755ab6 3eff7c25 -> 40960242 411c9988", + "416b0c0d 416b0c9b c13b8d11 c13b60bb -> c32c33bb c32c0a9e", + "3f8290f3 3f84634d c0e374fe c0e3596a -> c0eb411b c0e7e844", + "c11f3ce8 c0c15478 c122bea6 c049c367 -> 41985ee3 42ca7643", + "c0dc69ba c0dc208a c12e9370 bf7056b8 -> 40cea913 42964ece", + "4171535f 417f18e1 c0c4a1b2 c0c44106 -> c2c3f02c c2b90121", + "416c4d1a 416c7ba6 c0bbc3d3 c007857a -> c2ad7337 c1fa2fbb", + "409217e0 4092b6d0 418ce11f 41977079 -> 42a0cb0e 42ad9494", + "c178608d c1786003 419563df 41a54855 -> c3a05c69 c390f0c7", + "c18b9c02 c1328759 409d05a8 409d06a0 -> c2ab4494 c25b01e7", + "4179d3f8 4179d860 41746397 41746501 -> 436e7f39 436e84cf", + "41829a3a 4183e5d6 402f7ac9 402f8057 -> 42330c23 4234d87a", + "c194ba0d c1945d73 c013852c c01347a4 -> 422ab65c 422b6867", + "c189e2b7 c189e227 4169224b 41692685 -> c37b2830 c37b229c", + "c1449b34 c14499fc 414870f5 4148bf23 -> c31a2c0b c319ef0c", + "40a178fa 40a190ae 413b31c5 413b32ab -> 426c2586 426c4953", + "bf879713 bf839fcd c1442851 c1441e7f -> 4149ac0e 414fca0a", + "418879a3 4188a98d 41512437 41514099 -> 435efd39 435f69d0", + "412b2e55 412b4233 c17c096d c177f23b -> c3289b78 c325cbad", + "4181a106 4181a43a 3e2c801a 3e2de7e6 -> 402eb21b 403022d6", + "415b3746 415b4362 41729153 41729265 -> 434fb6b2 434fc316", + "c19bccfe c19a8190 41233382 4123340e -> c346a668 c344ff2a", + "c160c1f4 c152acf2 40d584cb 40d58635 -> c2bb7734 c2afb72e", + "c162582d c1625563 c09042dc c08d2174 -> 42798d36 427f196d", + "c08113af c0372d12 40ab2396 40ab8192 -> c1acf2f5 c174e923", + "c0046109 c0043177 c14dcc8c c14cc432 -> 41d37975 41d4d6f4", + "4102ae33 4102af29 3fd57a01 4007f8af -> 4159f270 418ad2a3", + "4198ebc9 4198ed77 c1309f5b c0a4c112 -> c35304e7 c2c4d4c3", + "40654321 406ab46f 409151d2 40917746 -> 4182244c 41855d8d", + "c0694bb5 c052cd3b c194d6b4 c1894350 -> 42620e84 4287a36e", + "411ba844 411bab20 c175aa14 c175a814 -> c3156231 c3155e3c", + "413e2f03 414acbad c132dc3c c1313dde -> c30db015 c303ac77", + "418f6cc7 418fb689 c114a792 c114a666 -> c326e732 c3269039", + "40864f29 40865187 41323946 41331f92 -> 423b022e 423bf724", + "c1767bf8 c1766c34 c0ebb620 c013747f -> 420df045 42e2f328", + "c181ca2d c181c9e9 c1afc24a c164a557 -> 4367d74e 43b2376b", + "bf0877d2 be2ab3b7 bfe0a1d6 bfd8844a -> 3e905fd8 3f6f7e3a", + "40078336 4007865a c14c6080 c1470a64 -> c1d8644c c1d2b8fe", + "411ebd1c 412f10a8 40d7e793 40d7fc05 -> 4285e06a 4293b355", + "c14f1754 c14f16ac 41017cc5 4144d95b -> c31f3db1 c2d17eb6", + "41366e50 41866020 41352180 413579ac -> 430113de 433e83a9", + "4184cd5e 4184cf92 c0c1a77e c0c0a966 -> c2c8eec4 c2c7e3ce", + "4144511b 414451f5 c1350da9 c1350c6b -> c30ad86c c30ad6de", + "c0d98a09 c0d9870f 4114ed38 411b4ed8 -> c283f993 c27d174d", + "c171d3bf c171d1b7 40bba9aa 40bbac16 -> c2b1483c c2b14475", + "c0e68dd9 c0e0113f c19c2cd8 c1850f8e -> 42e8ed26 430ca6d3", + "c0df2b7b c0dd13c9 c0e975b5 c0c84457 -> 422cf279 424b8530", + "c0449cf7 c0429859 c0a1d821 c0a1d637 -> 4176094a 4178996a", + "401e607d 401f9283 c183b899 c183b779 -> c2243613 c222f9c4", + "c1272daa c125e7ba c18c27e4 c18c2272 -> 4335a219 43370e0c", + "c108e844 c01646b8 41222075 41229303 -> c2ade334 c1be579c", + "41593487 415935a9 c0a35943 c09dbe6d -> c28a98e7 c285d6c8", + "c1a19e41 c16ac0de c15b5835 c15b5793 -> 4349234c 438a7a11", + "c089ec3a c0837c16 40831d81 408324e7 -> c18d4f87 c186af4d", + "416816da 418ae2e3 c1665d71 c16645e5 -> c379f513 c350c3e6", + "4170084f 4170e411 c18819d2 c18812cc -> c3801175 c37f2c14", + "40f33ebc 40f34304 3e2c1868 4023e6ea -> 3fa38557 419bbf18", + "c198c381 c1980da9 bf4f787b bf425785 -> 4166dcab 41779bf5", + "c1875f42 c1875216 41137e03 41139905 -> c31c193b c31bed7d", + "4182374b 4182b6a5 c18f1e7f c18f1b55 -> c3922731 c3919594" + ] + }, + { + "glsl": "vec2 cultmath_iv_scale(vec2, float)", + "tolerance": "ulp-bounded", + "cases": [ + "c14964a3 c1454919 3ff4d8d0 -> c1c09e7c c1bcb0c2", + "bf801a8d bf7ee327 bfa7b39e -> 3fa6f905 3fa7d667", + "40b16d65 410c1e96 403421fe -> 4179b0f4 41c53039", + "417e3caf 417e43f1 bf9afb3c -> c199ee67 c199ea02", + "c024e649 c00e2837 bf39e34c -> 3fce728f 3fef79a8", + "41365d3e 416062ea beda6b40 -> c0bf723d c09b97cd", + "413d22b6 4141f516 3edf4070 -> 40a4f0d8 40a92550", + "bdebc5f7 3c94cfdc be51bc50 -> bb73d654 3cc12a0e", + "bfaa9cc3 bf9b59bd 406bab38 -> c09d1003 c08f0347", + "c1a74fcf c1838089 c005d22f -> 42097b7e 422eeba9", + "c10aa88c c10a941e 402d3cec -> c1bba9cc c1bb8e25", + "4180b9f6 4180bb4e c01cc28a -> c21da7ee c21da648", + "41438f62 4145277e 406dd60e -> 4235af42 42372a69", + "c0bb74f5 c0bac83b 3f87eb88 -> c0c70e4a c0c656e0", + "c198555b c198547b bfa3d910 -> 41c2fde7 41c2ff06", + "c16bb226 c16bb0d2 bf884872 -> 417af144 417af2af", + "41821fd6 419f6d76 be244f50 -> c04ca708 c027096b", + "bfefaa1f bf9f6ac1 bf927a70 -> 3fb66e41 400921a6", + "40e62ef8 40ef2d00 c062d988 -> c1d3f0f6 c1cbf90f", + "c11695ff c116958d 3fe8a5b4 -> c188d968 c188d900", + "c0a1818e c09c1796 407140aa -> c19833c2 c19319a2", + "408f01fb 4092c2e5 4051f6ea -> 416a9519 4170bd55", + "3ec659eb 3edf5b15 3ebf7bd0 -> 3e145d05 3e2710fb", + "c1362416 c13623a0 bfdcfdc8 -> 419d3b2d 419d3b93", + "bf38ee46 bf349bfa c009b73e -> 3fc25180 3fc6f7c5", + "4186df32 41870faa bc442f00 -> be4f0194 be4eb74b", + "c16a04e7 c169f133 3dda1480 -> bfc75aea bfc74a21", + "406f0b1d 406f0f43 c0771523 -> c166bb77 c166b776", + "411b3586 412fe96a 3f242568 -> 40c709ef 40e19678", + "bf3e9e00 bf3e4c80 be57f490 -> 3e20880b 3e20cccc", + "c168cc6a c167fa1c 3f3e1190 -> c12cd7af c12c3b8b", + "c1661e9e c0d432c4 402363ce -> c212df36 c1876f0d", + "40ce9662 40cef31e 3dce62c0 -> 3f268cb3 3f26d776", + "c03789b2 c02f58be 3f038540 -> bfbc95fd bfb42b5c", + "41490793 4150c72d 404db8a6 -> 42218c11 4227c616", + "c180b91e c103fced bfbe7fbc -> 41446f27 41bf933d", + "c1748b49 c16a43a7 c011f60e -> 4205917b 420b6df0", + "4015919c 401598f4 3fae8750 -> 404bf00d 404bfa11", + "c13da8a8 c13091d2 3f051ba0 -> c0c53a2d c0b79da0", + "4189b7c7 4198b379 40153c8c -> 42209112 42320926", + "c0d9aeaa c0d9ad86 bfb98890 -> 411dc284 411dc358", + "c1889b08 c1889a86 be7f07a0 -> 408815fd 4088167f", + "40f4f0ef 40f4fea9 be84b1d8 -> bffdfb04 bffdecc9", + "c06197a4 c06176dc c05f348b -> 414494d0 4144b165", + "419a286b 419cd27d 3fdc2a38 -> 42049428 4206dec0", + "418cc54b 4192a5e1 bfa017aa -> c1b76a76 c1b010a4", + "c17686e4 c1757b92 402fdff8 -> c2295de4 c228a63d", + "c115b0be c1159836 beaea588 -> 404c1c5f 404c3dd7", + "c11b0b5d c119cbb7 bf34a690 -> 40d90e9b 40dad1bc", + "41872854 41872898 c01bff8c -> c224b8ff c224b8ac", + "c1202004 c11a97ba 3ee67ae0 -> c090299f c08b2e85", + "410d8386 410d84d2 3f3d84e8 -> 40d18724 40d18910", + "c1274a40 c11e97c6 3fa24f98 -> c15421ff c1491ab5", + "c02cc2ce c02aa1f2 3fefabbc -> c0a1bdc3 c09fbfa8", + "415ab2ce 4160a51a 3c2fba00 -> 3e161f21 3e1a3415", + "c1600727 c15edca1 bf17f324 -> 410447ce 4104f8fe", + "4191baef 4191bf41 c07b379a -> c28f062c c28f01ef", + "c13ec27a c125eeae bfd56ee2 -> 418a5776 419f0a6f", + "418f59a5 418f5a13 3fb19668 -> 41c6e268 41c6e300", + "415de36d 4170c593 39cc8000 -> 3bb1402d 3bc055d4", + "c1908903 c18aef89 c00ea7a6 -> 421ad7b5 4221154e", + "c111bd9d c111bb19 3ed6ef00 -> c074b923 c074b4e9", + "3e9ed994 3e9fedec 3f5614d8 -> 3e84d6d1 3e85bde9", + "c17442df c16efb6d c0729a68 -> 426279d1 42677a8a", + "40e8d9c0 40f12420 c0620460 -> c1d4e603 c1cd9436", + "c17a0d1c c179d9a6 3f90d614 -> c18d787a c18d5b5d", + "4191ece3 4191ed99 c07cf598 -> c29031e2 c290312e", + "41802de9 41b6da07 40046e1e -> 42049d9e 423d2e25", + "c148fa3a c148f9a2 403d3bba -> c2148fa1 c2148f30", + "c11c76dd c110b81f c06d755a -> 42063ccc 421121c4", + "41861541 41862647 405d858e -> 42680c99 42682a0f", + "c15aa5c0 c15a86bc 3ff10278 -> c1cdd826 c1cdbaf2", + "3ef09e19 3f0b4d73 3ee66830 -> 3e588ff8 3e7ac08e", + "418efaff 41904b51 bfc4e088 -> c1ddf071 c1dbeb26", + "4141ec18 41594ee8 3efa4900 -> 40bd97dc 40d47506", + "419a6ca3 419acedd c0306582 -> c2555734 c254cfd7", + "c13756da c11e68d0 3f9362fc -> c1531b86 c13666df", + "c1a33b0f c1884cbd 3fd37f6c -> c206daed c1e1362f", + "be715eb7 be712349 401aa9ce -> bf11d314 bf11af2c", + "bfbede0d bfbed533 c040021d -> 408f217a 408f281d", + "40ea0ea6 40ea1c1a bd88f880 -> befa845c befa75f7", + "402edc4c 402eed54 bfb896e0 -> c07c4359 c07c2ac9", + "c1824002 c181e7f2 bfc5cdbe -> 41c8bfc9 41c947df", + "c0e3d8b2 c0e0c35a 403105d0 -> c19d8dff c19b6c2c", + "c184bd59 c184bd21 be9050e0 -> 4095a8a4 4095a8e3", + "40fdaff6 40fdb56a c03b687d -> c1b9bb12 c1b9b714", + "c14193e1 c1418fa7 bcde1980 -> 3ea7eddb 3ea7f185", + "41090940 410909d8 405e877a -> 41ee3d15 41ee3e1e", + "c0b581f5 c03c8086 be2ffa50 -> 3f01942c 3f798aa0", + "c130f64b c12d9b15 bfc7ec1e -> 418793ad 418a32ac", + "418aa675 418aa6d3 bdc886e0 -> bfd936c3 bfd93630", + "c03005d3 c02fe2cd bf4ccb9c -> 400cb49f 400cd0a4", + "414a499b 414a5125 3f84b9a0 -> 4151c143 4151c914", + "c13bfc6c c10f102a c07b249c -> 420c594f 42386b60", + "4142cf0e 417b745a c0043a19 -> c201e10f c1c93df2", + "41137b39 416a31fb 404beb16 -> 41eaf44a 423a8cb2", + "c12ce57f c11da1f7 405010e0 -> c20c85dd c2001dfd", + "40d7250b 40d73665 40445c02 -> 41a505af 41a512ff", + "3fd29f26 4109fd53 c013c494 -> c19f4cd9 c073263d", + "4011ed90 4011fa00 bfbc3000 -> c0569dee c0568ba5", + "4149003a 416bc24e 4039858c -> 4211aa05 422ada67", + "c19f5fa0 c19f4d64 3ebfca70 -> c0eeccbf c0eeb16d", + "c0b8c0f5 c0b2cce7 3ff6f410 -> c132398f c12c7b5c", + "c19591c0 c180fb42 4052d1b4 -> c2765829 c2546f88", + "c0361295 404c5d95 bfbf5b0a -> c098c27f 4088189d", + "bfc9ee31 3f0c2ce2 c04198ac -> bfd402de 4098b500", + "40f5653c 40f8629c 406173b6 -> 41d81ce5 41dabef0", + "bf773ac8 40ec51a9 403ca41c -> c0362da8 41ae2376", + "c0821a03 c08208a9 4011ce08 -> c11432e1 c1141f1e", + "4069c93d 4095fa42 bfcfa26e -> c0f34908 c0bd9e0e", + "c1474df3 c14745dd c0589df8 -> 42289de9 4228a4c1", + "c0ef0500 c0eeb2f0 c074976b -> 41e40fbc 41e45e24", + "c16f81c4 c15427a0 3e22f940 -> c018794f c0070fa3", + "40f93e6f 40f9c091 bfd41978 -> c14eec51 c14e8080", + "c15b7440 c15b711c 4053de22 -> c2359f3d c2359ca3", + "419e46cf 419e4829 bfc3965a -> c1f1dbda c1f1d9ca", + "40342b76 403433ca c04b1ef6 -> c10efadc c10ef441", + "c18bba13 c175f99e 3f27cfb8 -> c1372f85 c1213d6c", + "c09ee58e c09ed506 40441e28 -> c17374f1 c1735b9d", + "419da210 419e77bc c040222b -> c26ddde7 c26c9d2c", + "412303be 412c6872 4033b9d4 -> 41e4e3e5 41f2145c", + "c05c6d9c bf8543c7 3f7bf1b8 -> c058ef9a bf832749", + "415649c0 41564d70 3ee58090 -> 40c01b96 40c01ee4", + "c105e5e3 c105d15d c076524c -> 4200c234 4200d5f4", + "bf4df8d8 410f6aee c031342e -> c1c68c54 400e9309", + "40bc8ba7 40bcf691 401d5b02 -> 4167c959 41684cc8", + "4191710b 4191866d c04c1276 -> c268033b c267e124", + "bf780cd7 bf780329 3fa586c0 -> bfa062d7 bfa05c95", + "c143df75 c143de2d bf5721c8 -> 41249970 41249a84", + "c028afb8 400efcb8 c038be96 -> c0ce602f 40f377c3", + "c166e429 c166e1c5 c003a3f4 -> 41ed72cb 41ed7541", + "c0d012c2 bff1521a 3fbeeed0 -> c11b3006 c033fc0e", + "c020a7cc c00919d4 bfcbec32 -> 405a6bf3 407ff292", + "c105e729 c105e495 407211b4 -> c1fd3b8f c1fd36ae", + "4121e0d4 4121eb10 401a3f1c -> 41c3124f 41c31ea4", + "c1851bf6 c184e3de 403b7a36 -> c242f5f0 c242a3c8", + "c04640d3 c02a2e0d 402cfaba -> c105f5b9 c0e5fb3b", + "c187c632 c187c5e0 c019a3c5 -> 4222f83d 4222f89f", + "c1988c95 c198870d 3fe12800 -> c2062b65 c2062688", + "c146cf94 c146c84c 400dd98a -> c1dc528b c1dc4a7a", + "c12e1426 c12dffa8 bffc7548 -> 41ab9760 41abab96", + "c054db71 c054d20f c02061d6 -> 4105549f 41055a80", + "4130a3db 4130a849 c05eac5c -> c219a8e0 c219a505", + "bfa6c54b bfa6a255 3fd6fcd0 -> c00c0d9e c00bf042", + "3e1e8f1f 3eba1170 c003159a -> bf3e8d3f bea2613c", + "c170f75c c16a630e 400236a0 -> c1f5220f c1ee70a1", + "4166a49b 4166a60d 3f6484f0 -> 414de25f 414de3a9", + "3f9361d6 3f9368ea c014f350 -> c02b8984 c02b8147", + "c0fe5024 c0fe4e70 c045a710 -> 41c45851 41c459a2", + "c1924785 c19238b5 3f961e88 -> c1ab8eb4 c1ab7d55", + "41954c40 41955000 be96bd90 -> c0afd6e0 c0afd276", + "3f73c0a1 3f73ce1f 4023cdec -> 401bf7b8 401c005b", + "410c55a0 410c6940 c03e7fd8 -> c1d0f878 c1d0db43", + "40928419 4092a09f bfe09356 -> c100a0ef c10087e9", + "410ddcb7 417383b9 3e3acd40 -> 3fcf0834 4031b0f2", + "c16eb44d c16d94e3 bf7f233c -> 416cc801 416de673", + "41860118 419dcd30 3f01f678 -> 41080f22 412038a5", + "4194f5d9 4194fee3 c0381ce8 -> c256500c c256430c", + "c1589be3 c153975d bfe888d4 -> 41c03244 41c4c10c", + "c191ccf8 c191cc32 c052e7d0 -> 42703b0d 42703c54", + "c18a8e77 c186db01 402b8490 -> c239a9d2 c234b43d", + "c051afbb c04fa475 40680406 -> c13e0a8d c13c304d", + "c1639c5e c0c118c5 3f4f1dd0 -> c13825f2 c09c3984", + "c042cccd c0421673 bf6806a4 -> 402fe961 40308ea7", + "40a1c13a 40a1cf1e 401a38ba -> 4142e429 4142f4e6", + "c0df6acd c0d17eab c0498db4 -> 41a4f06a 41afe686", + "40ee6ca4 40ee72ac bd3ab040 -> beade37b beaddf15", + "4118a9a1 4118aabf be3b3020 -> bfdf42d9 bfdf4137", + "c1856514 c18564de 4058d0ce -> c261f42d c261f3d1", + "c0e2ec51 c0e2b99b bf8bd570 -> 40f7af9e 40f7e704", + "3fe18c23 3fffe29d c00f11dd -> c08f0171 c07c1a09", + "c193735d c1930aad 3f1a3f60 -> c131afcd c13131a6", + "c00b4a31 c00ac41f bea4ea98 -> 3f32c99b 3f337658", + "3fc1b053 4081dff3 3f314530 -> 3f861f42 4033dde1", + "412f2e2b 412fe92d bdef60e0 -> bfa47d42 bfa3ce65", + "c14eeb10 c14ed6bc c0557124 -> 422c7414 422c8507", + "c0e5a8bf c0b60371 407170c6 -> c1d89907 c1aba96c", + "c1557108 c15557c0 40625d9c -> c23cbbd5 c23ca57a", + "406fe84a 40703526 3f9587b8 -> 408c2163 408c4e48", + "c0b6088b c0b5e1a1 baa81000 -> 3beecee0 3bef01f8", + "c1a72a9e c185d55c 3f7ea2b8 -> c1a6468a c1851ec2", + "c13b4cbb c11475d9 3feff79c -> c1af91cc c18b299e", + "c1565b24 c154fc5a 3fd10f34 -> c1af0d23 c1adeeac", + "c144c2b7 c11a1711 bf9e96da -> 413eea12 4173c83d", + "40bba57a 40bba89e bfd4b7ba -> c11bee51 c11bebb5", + "414ff321 419cfb60 3ee1c500 -> 40b764b6 410a71bd", + "418fbfa2 41aafa66 3fa5be38 -> 41ba22a6 41dd64de", + "4117958a 418e07ab 3e42aac0 -> 3fe688db 40580116", + "c08a856f c08a4409 bfbb8a44 -> 40ca94c0 40caf492", + "c10dee27 c10da887 c015c7c1 -> 41a5c33f 41a614b8", + "41895f36 41895fc6 c067d08c -> c278caa9 c278c9a4", + "4192f782 41935e1a 406a1556 -> 4286627d 4286c04c", + "4193b808 41941abc 3f9e9670 -> 41b704c7 41b77f11", + "4120ab39 4120abaf 4001586c -> 41a25b8d 41a25c04", + "c09aef5e c09aec5a 40661442 -> c18b3f51 c18b3c9b", + "40a13379 40a2797f c0045e3e -> c12804eb c126b3c5", + "40bb80df 40c41e79 bf851d12 -> c0cbf434 c0c2fe7d", + "c182efea c182e20e bf117e84 -> 4114c571 4114d532", + "41584d0c 415850ac 4061760a -> 423e7f74 423e82a5", + "c1869865 c1721431 bcdf7480 -> 3ed34dc1 3eeaf801", + "c0958723 bff6d094 c0381688 -> 40b17ba3 41570c94", + "be08c21c be05a4e4 40183ef0 -> bea2a9c0 be9ef585", + "c1038553 c0fe5bbf 3f1d05d8 -> c0a15789 c09c0413", + "c114476c c07b4e50 bf142e38 -> 401176a5 40aba81f", + "418012bf 41801605 404aa34a -> 424ac0f7 424ac626", + "4182df6b 418308f1 403d9962 -> 4241dab7 42421839", + "4028f0ea 4053ef36 40388f62 -> 40f3978f 4118caa3", + "c1886ea0 c18751fc 40052608 -> c20deb7c c20cc365", + "414b8669 41646a87 3fe31550 -> 41b48921 41ca9d7a", + "40976405 4097675b bf98f75e -> c0b4ef55 c0b4eb58", + "c1a2bed9 c1927a07 3fc35fd0 -> c1f86891 c1df938b", + "c15abcdf c15aa9cf c041109a -> 4224e833 4224f694", + "404caa52 40b8d58f 40222492 -> 4101a105 416a2318", + "c15ebe59 c15eac5b 402aa1bc -> c2147720 c2146b22", + "40d2e15d 40d30013 3ff64758 -> 414adf54 414afce0", + "418d8d39 418d8f0f c03fcf50 -> c25420be c2541dfe", + "bf5fd134 4061d72d 3fe96d2c -> bfcc14db 40cded27", + "c189c1dd c1896a51 c056daa6 -> 4266a87b 42673b6e", + "40ae2738 40ae5148 bff6aec4 -> c127f91c c127d094", + "c09c4196 c095ed36 beab1ed0 -> 3fc86efd 3fd0e53c", + "c188cf65 c186cf41 3f04b088 -> c10dd28f c10bbfa7", + "c12f5b8d c12f4b93 c0550f48 -> 4211e458 4211f1a4", + "41137bb7 411bafa1 405076a2 -> 41f031ba 41fd8db1", + "412e9a99 412ea71f 3f220b20 -> 40dd0ad7 40dd1ab1", + "c18ee43e c18ec9be bf013b10 -> 41102934 411043f6", + "c1975709 c1973fe7 bfbea73a -> 41e14875 41e16ae9", + "c1a5b2de c18dca2e 3f9745e0 -> c1c3d376 c1a791e9", + "4076bfa9 4076c407 c01d1966 -> c1176eb4 c1176c06", + "400c9529 40f3ba0c bfa879fa -> c1206639 c03909bd", + "408cb339 408e018f 407ba066 -> 418a4be1 418b9481", + "4168d584 4168db6c c00dd0ac -> c200fea9 c200fb64", + "c0b52bf1 c0b529f7 3f988214 -> c0d7dc4b c0d7d9f0", + "c1144d00 c1140d04 407e3b2c -> c21346ad c2130722", + "40c87b03 40c883bd bed22bb8 -> c0249e4f c0249725", + "c1396876 c12f4666 3f86dae8 -> c1435671 c138a974", + "c160bf7d c160beff c04ad97e -> 423215a6 4232160a", + "40b5dc69 40b9682f 405cef02 -> 419cf334 41a002a2", + "418e771e 418e842a 40073ed0 -> 4216878b 42169554", + "4146848b 4146ea7d 3f419028 -> 411619b6 411666cb", + "c0a5fc12 c0a2a846 bf83a64a -> 40a74b88 40aab79d", + "411ef843 411efa05 c00f7524 -> c1b22ccf c1b22ad6", + "416df976 41930f11 c05e93c4 -> c27fb7e6 c24ee7b1", + "c0bcf878 c0b36640 bf9dbfe4 -> 40dd185d 40e8e40f", + "413352d2 413d45aa 407195ac -> 422939cf 42329d3e", + "c0e9ffb0 c0e9ca3c 3fc22290 -> c131735b c1314ad2", + "c140ad6c c1408d90 bfb36e64 -> 4186f604 41870c58", + "401c9e16 401e1d6a 405c5ace -> 4106cf69 4108195d", + "c1626dbc c0ea1605 4053945e -> c23b23ad c1c177d1", + "c19c79af c17a5129 403dea6e -> c2682a41 c239b325", + "bfd61ee8 bfcf16d8 3f471ae8 -> bfa68888 bfa11086", + "c19ac8c2 c1826300 402bb3b8 -> c24fa186 c22ee754", + "4051034e 40d7c5f1 c0578182 -> c1b5a466 c12ff383", + "c12d8b14 c12d7dbe 4033dc18 -> c1f3dae6 c1f3c828", + "400c9815 4047741b bfb70918 -> c08e9b15 c0490b6b", + "4115e023 41342ffd 40334c00 -> 41d1f06e 41fc6618", + "41928a76 4193a536 407ef1aa -> 4291efb7 4293094c" + ] + }, + { + "glsl": "vec2 cultmath_iv_abs(vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c1889861 c187aeb5 -> 4187aeb5 41889861", + "c17f5b90 c17f526c -> 417f526c 417f5b90", + "41467e93 41468065 -> 41467e93 41468065", + "c0181fcf c015aba1 -> 4015aba1 40181fcf", + "c159fa8b c159ec93 -> 4159ec93 4159fa8b", + "411bf84c 4195b1ea -> 411bf84c 4195b1ea", + "c15c1f7c c12b1c04 -> 412b1c04 415c1f7c", + "c1663a76 c15d5c96 -> 415d5c96 41663a76", + "4105286c 4125c794 -> 4105286c 4125c794", + "c16af54d c16655d1 -> 416655d1 416af54d", + "bfef5312 bfe0e16e -> 3fe0e16e 3fef5312", + "41967337 419673b5 -> 41967337 419673b5", + "c0b915b4 406a6a88 -> 00000000 40b915b4", + "40e608f2 40e996e6 -> 40e608f2 40e996e6", + "bf86296a bf861d96 -> 3f861d96 3f86296a", + "c18bd319 c18bd273 -> 418bd273 418bd319", + "c1189a26 c0e70e05 -> 40e70e05 41189a26", + "c0e120f5 c00e203e -> 400e203e 40e120f5", + "bf125782 3e888883 -> 00000000 3f125782", + "c1859bde c182e788 -> 4182e788 41859bde", + "c14a473e c14a2218 -> 414a2218 414a473e", + "416bdc98 4196a364 -> 416bdc98 4196a364", + "c048b3d2 bf8fad1c -> 3f8fad1c 4048b3d2", + "c0d3ca7a c06770d4 -> 406770d4 40d3ca7a", + "c1509a64 c15099f0 -> 415099f0 41509a64", + "c19bf04c c12c059c -> 412c059c 419bf04c", + "41289b7a 41750efe -> 41289b7a 41750efe", + "3fdc3459 3fdee187 -> 3fdc3459 3fdee187", + "40b4dba0 40b4dcb8 -> 40b4dba0 40b4dcb8", + "4134155f 41471ef1 -> 4134155f 41471ef1", + "c0322bd1 bfab79be -> 3fab79be 40322bd1", + "c1924336 c19242da -> 419242da 41924336", + "c128f0da c11f5bd2 -> 411f5bd2 4128f0da", + "40ffe6f4 4100040a -> 40ffe6f4 4100040a", + "3f0459f1 3f04a40f -> 3f0459f1 3f04a40f", + "c14ac6ca c0e3f15c -> 40e3f15c 414ac6ca", + "4130003b 41303a8d -> 4130003b 41303a8d", + "3ea5fbb1 3ea616cf -> 3ea5fbb1 3ea616cf", + "40f44ae6 40f44c52 -> 40f44ae6 40f44c52", + "40a31ec4 40a6d2e4 -> 40a31ec4 40a6d2e4", + "408fde6a 40aafc1e -> 408fde6a 40aafc1e", + "c026e712 c0258e1e -> 40258e1e 4026e712", + "419ca4e0 419ca55c -> 419ca4e0 419ca55c", + "c10eb34f c10e9b01 -> 410e9b01 410eb34f", + "c10ce927 c09a1752 -> 409a1752 410ce927", + "c1033e5a c102e1cc -> 4102e1cc 41033e5a", + "419c49ae 419c4e5a -> 419c49ae 419c4e5a", + "c11b58ef c11b4155 -> 411b4155 411b58ef", + "c0e65441 c09d4f4f -> 409d4f4f 40e65441", + "40e047cc 40e96f74 -> 40e047cc 40e96f74", + "c1591434 c1591378 -> 41591378 41591434", + "c0ff4a58 bfb58992 -> 3fb58992 40ff4a58", + "412436a3 412439a5 -> 412436a3 412439a5", + "c137ab29 c1378599 -> 41378599 4137ab29", + "c039c69b c0382a85 -> 40382a85 4039c69b", + "412e1db4 412f998c -> 412e1db4 412f998c", + "c0848076 c08479ae -> 408479ae 40848076", + "c146b348 c14366dc -> 414366dc 4146b348", + "c08542dd c082c507 -> 4082c507 408542dd", + "c18d4b2f c18d49c1 -> 418d49c1 418d4b2f", + "bf5e3c32 bf5cdf0e -> 3f5cdf0e 3f5e3c32", + "419cf4b2 419db102 -> 419cf4b2 419db102", + "4181b581 41883107 -> 4181b581 41883107", + "41933524 419378a0 -> 41933524 419378a0", + "c1510f70 c1510cf8 -> 41510cf8 41510f70", + "40feb3ee 41134f25 -> 40feb3ee 41134f25", + "c0f59a20 c0333ea0 -> 40333ea0 40f59a20", + "bffb0866 bff1bada -> 3ff1bada 3ffb0866", + "c078e179 c0776b77 -> 40776b77 4078e179", + "40f70161 410ed558 -> 40f70161 410ed558", + "41523c62 417c9f3e -> 41523c62 417c9f3e", + "418188f1 418fb27b -> 418188f1 418fb27b", + "c1647e42 c15f5464 -> 415f5464 41647e42", + "c18c7307 c183fced -> 4183fced 418c7307", + "c186f011 c1862fd5 -> 41862fd5 4186f011", + "418ed765 41948687 -> 418ed765 41948687", + "414828a1 4148b9ff -> 414828a1 4148b9ff", + "c14148ea c12e27f6 -> 412e27f6 414148ea", + "c190a7cf c18989e9 -> 418989e9 4190a7cf", + "c1ae9e50 c16571b8 -> 416571b8 41ae9e50", + "c13ab99b c13513bd -> 413513bd 413ab99b", + "c133c5ea c133bc8e -> 4133bc8e 4133c5ea", + "40f5a678 41590f10 -> 40f5a678 41590f10", + "c1308b5b c1303aa7 -> 41303aa7 41308b5b", + "41134516 411547b6 -> 41134516 411547b6", + "c13b8c0e c0efe294 -> 40efe294 413b8c0e", + "416ce86d 416cef13 -> 416ce86d 416cef13", + "c0f85056 c0f55612 -> 40f55612 40f85056", + "c050f7fc c050ef94 -> 4050ef94 4050f7fc", + "c00b0db0 c00afa80 -> 400afa80 400b0db0", + "4104bd78 4104bfec -> 4104bd78 4104bfec", + "c044d926 c03fd4da -> 403fd4da 4044d926", + "c169a65d c1156ccf -> 41156ccf 4169a65d", + "c1a5f87c c1962f66 -> 41962f66 41a5f87c", + "410e8edb 4110fd6d -> 410e8edb 4110fd6d", + "3ef0bc5c 3f162dd2 -> 3ef0bc5c 3f162dd2", + "c051f089 c0344647 -> 40344647 4051f089", + "4084d144 4084d5fc -> 4084d144 4084d5fc", + "40d0ce0e 40d6d80a -> 40d0ce0e 40d6d80a", + "c1851993 c18517af -> 418517af 41851993", + "bf770427 bf587299 -> 3f587299 3f770427", + "c188a8a1 c1887fed -> 41887fed 4188a8a1", + "c0d38cea c0d38bc2 -> 40d38bc2 40d38cea", + "417f81a8 418053c0 -> 417f81a8 418053c0", + "c13f2c42 c13d2d5e -> 413d2d5e 413f2c42", + "c0c13b93 c00c33ca -> 400c33ca 40c13b93", + "c0df381c c0afc71c -> 40afc71c 40df381c", + "c114d5b4 c114d4ea -> 4114d4ea 4114d5b4", + "c10a92a2 c1080756 -> 41080756 410a92a2", + "c18e6095 c1842851 -> 41842851 418e6095", + "418f562b 418f63e9 -> 418f562b 418f63e9", + "4115ed03 4115ee3d -> 4115ed03 4115ee3d", + "c17d2216 c17a661a -> 417a661a 417d2216", + "3d61e63a 3d63e1c6 -> 3d61e63a 3d63e1c6", + "40b0f9c3 40b0fea5 -> 40b0f9c3 40b0fea5", + "41866c35 418ba923 -> 41866c35 418ba923", + "c18d7657 c18d7295 -> 418d7295 418d7657", + "4117405d 4117418b -> 4117405d 4117418b", + "c1a031fe c1562b10 -> 41562b10 41a031fe", + "c123c4a7 c123c1bb -> 4123c1bb 4123c4a7", + "c191ef78 c191d0e0 -> 4191d0e0 4191ef78", + "40c7e85f 40c7eb21 -> 40c7e85f 40c7eb21", + "c127a87a c1262090 -> 41262090 4127a87a", + "c1147ea4 c1131354 -> 41131354 41147ea4", + "bfb2bf5f bfabd1c1 -> 3fabd1c1 3fb2bf5f", + "416a9d42 416a9dce -> 416a9d42 416a9dce", + "40574a5e 40576c22 -> 40574a5e 40576c22", + "c1233658 c12334dc -> 412334dc 41233658", + "4135ebd8 4198f8c0 -> 4135ebd8 4198f8c0", + "c0c082ab c0b7adad -> 40b7adad 40c082ab", + "3f5230f0 3fbcd728 -> 3f5230f0 3fbcd728", + "418a8579 418a85d3 -> 418a8579 418a85d3", + "40f20973 40f6c405 -> 40f20973 40f6c405", + "4165d0ce 4165d1fa -> 4165d0ce 4165d1fa", + "c180af77 c180adeb -> 4180adeb 4180af77", + "4197e456 4197ec96 -> 4197e456 4197ec96", + "c0b7beca c02427ec -> 402427ec 40b7beca", + "413111e9 4131a89f -> 413111e9 4131a89f", + "4104c2b8 4106fd6c -> 4104c2b8 4106fd6c", + "41639bc1 41642dd7 -> 41639bc1 41642dd7", + "c0d6cf50 c045c8a9 -> 4045c8a9 40d6cf50", + "40db253b 40db2795 -> 40db253b 40db2795", + "c1218b99 c0da4795 -> 40da4795 41218b99", + "c154f26d c145d0e7 -> 4145d0e7 4154f26d", + "c19e0f73 c19d0075 -> 419d0075 419e0f73", + "c1390cf0 c1390b92 -> 41390b92 41390cf0", + "408d9665 408f83ab -> 408d9665 408f83ab", + "40b5a0b8 40b5b588 -> 40b5a0b8 40b5b588", + "3cc3702a 3e0948fb -> 3cc3702a 3e0948fb", + "c05e3e90 c05770e0 -> 405770e0 405e3e90", + "4117b8ed 4117bc17 -> 4117b8ed 4117bc17", + "beaa5ae5 bea8e81b -> 3ea8e81b 3eaa5ae5", + "40368856 4039f38a -> 40368856 4039f38a", + "40a0fa4c 40a95e04 -> 40a0fa4c 40a95e04", + "bf4d1b98 beb0a4d0 -> 3eb0a4d0 3f4d1b98", + "c078d1cf c078b3e1 -> 4078b3e1 4078d1cf", + "c17f1e34 c164fd12 -> 4164fd12 417f1e34", + "c0f43858 c0f05524 -> 40f05524 40f43858", + "c18903ac c1784a31 -> 41784a31 418903ac", + "411eef9d 412cda73 -> 411eef9d 412cda73", + "bfe74a3c bfe74364 -> 3fe74364 3fe74a3c", + "c1854d13 c1851d51 -> 41851d51 41854d13", + "418bb033 419da455 -> 418bb033 419da455", + "40f2f7b5 4112e84d -> 40f2f7b5 4112e84d", + "c11ad0f5 c11a550f -> 411a550f 411ad0f5", + "c19c6c5d c19c6bb5 -> 419c6bb5 419c6c5d", + "c136dd90 c136d636 -> 4136d636 4136dd90", + "412ef373 412ef789 -> 412ef373 412ef789", + "c04cd83d c04c54c3 -> 404c54c3 404cd83d", + "3f067d70 3f85a4a8 -> 3f067d70 3f85a4a8", + "c110df8b c11064bb -> 411064bb 4110df8b", + "c0f3e86e c0f3d4ce -> 40f3d4ce 40f3e86e", + "c163de94 c1009cca -> 41009cca 4163de94", + "4197acc2 419d422e -> 4197acc2 419d422e", + "c1230fd0 c1230f44 -> 41230f44 41230fd0", + "c1489ddb c145662b -> 4145662b 41489ddb", + "415e6c3b 416098c5 -> 415e6c3b 416098c5", + "c1618c7f c15dd5d1 -> 415dd5d1 41618c7f", + "c181f245 c181f205 -> 4181f205 4181f245", + "c0e43580 c0d9e208 -> 40d9e208 40e43580", + "414fea42 415dfb76 -> 414fea42 415dfb76", + "c0ed85f5 3fb88bf4 -> 00000000 40ed85f5", + "410d307a 410d3dbe -> 410d307a 410d3dbe", + "c19ce34a c18ac458 -> 418ac458 419ce34a", + "c189d927 c189d86b -> 4189d86b 4189d927", + "c144e83b c13f2937 -> 413f2937 4144e83b", + "c0e441ba c0e440be -> 40e440be 40e441ba", + "c0251e50 406c2ad0 -> 00000000 406c2ad0", + "411a19fc 412b9ce8 -> 411a19fc 412b9ce8", + "c11eb186 c11eb116 -> 411eb116 411eb186", + "414f7bae 419042d5 -> 414f7bae 419042d5", + "40732b0e 40734322 -> 40732b0e 40734322", + "c0f70315 c0f6d4bf -> 40f6d4bf 40f70315", + "c11fbba7 c11e5845 -> 411e5845 411fbba7", + "c17fd0b0 c17fcf64 -> 417fcf64 417fd0b0", + "c17c4edf c17c2501 -> 417c2501 417c4edf", + "c1934491 c1897101 -> 41897101 41934491", + "41822cf2 4182638e -> 41822cf2 4182638e", + "c18992aa c1898a84 -> 41898a84 418992aa", + "3e6e0e38 4085f74e -> 3e6e0e38 4085f74e", + "41868e13 41868ed1 -> 41868e13 41868ed1", + "40ff666c 40ff6a44 -> 40ff666c 40ff6a44", + "4151da5e 41523eea -> 4151da5e 41523eea", + "c0e5790b c0b6ad21 -> 40b6ad21 40e5790b", + "c177d8c2 c177d510 -> 4177d510 4177d8c2", + "4185f6b4 4185fc38 -> 4185f6b4 4185fc38", + "412a4b1e 412a5b5e -> 412a4b1e 412a5b5e", + "4131412c 4160fd34 -> 4131412c 4160fd34", + "c143f7c7 c143f40d -> 4143f40d 4143f7c7", + "40e967e8 40e9a200 -> 40e967e8 40e9a200", + "c18fe1ef c18fbd5b -> 418fbd5b 418fe1ef", + "40ea90fa 41653eb3 -> 40ea90fa 41653eb3", + "c1a22b60 c19a9fd6 -> 419a9fd6 41a22b60", + "40c70930 40c817e0 -> 40c70930 40c817e0", + "c17a2f19 c17a2e87 -> 417a2e87 417a2f19", + "41790bc7 417948b9 -> 41790bc7 417948b9", + "c11e5ed2 c11e4bf6 -> 411e4bf6 411e5ed2", + "c187a5ee c18197b2 -> 418197b2 4187a5ee", + "c125ade1 c1255b7f -> 41255b7f 4125ade1", + "c08fa4d3 c045d2cb -> 4045d2cb 408fa4d3", + "c19c5eda c19c4584 -> 419c4584 419c5eda", + "c030cc51 3f417d44 -> 00000000 4030cc51", + "c155d8ae c141bef2 -> 4141bef2 4155d8ae", + "40a62e5f 40b56669 -> 40a62e5f 40b56669", + "c19ed88a c19ed84e -> 419ed84e 419ed88a", + "c1193b8a c0e3993b -> 40e3993b 41193b8a", + "40afffe9 40b006cf -> 40afffe9 40b006cf", + "416bdcf3 416c38c5 -> 416bdcf3 416c38c5", + "c0d2c198 c0c45f3c -> 40c45f3c 40d2c198", + "c16d3f7b c16d3ee1 -> 416d3ee1 416d3f7b", + "4142240e 415a2202 -> 4142240e 415a2202", + "410f4f16 410f502a -> 410f4f16 410f502a", + "c0fe3cdf c0fd6505 -> 40fd6505 40fe3cdf", + "c19558c8 c1953aaa -> 41953aaa 419558c8", + "c12a27db c12a2737 -> 412a2737 412a27db", + "40bd27ac 40cbf89c -> 40bd27ac 40cbf89c", + "412898ea 41462a8e -> 412898ea 41462a8e", + "c0b73df6 c0b29c7a -> 40b29c7a 40b73df6", + "41900783 41a04305 -> 41900783 41a04305", + "4137f166 4137f4da -> 4137f166 4137f4da", + "c17a2b30 c13a2188 -> 413a2188 417a2b30", + "3c050013 3c09ffed -> 3c050013 3c09ffed", + "4117df65 4117dfdb -> 4117df65 4117dfdb", + "413e1528 413e160c -> 413e1528 413e160c", + "bfc0e30a bfb19896 -> 3fb19896 3fc0e30a", + "c027ef85 c025a49b -> 4025a49b 4027ef85", + "c0d7eefd c0d7b3ab -> 40d7b3ab 40d7eefd", + "c19dc2ed c19dc15d -> 419dc15d 419dc2ed", + "40f8e653 40f9300d -> 40f8e653 40f9300d", + "4084c409 408e969f -> 4084c409 408e969f", + "4137403e 41374472 -> 4137403e 41374472", + "c052ecbf 4059a5af -> 00000000 4059a5af", + "c0b5f342 c0b3f89a -> 40b3f89a 40b5f342", + "c185f3ea c17e925c -> 417e925c 4185f3ea", + "4150e868 4150eea8 -> 4150e868 4150eea8", + "be676cbd be4dd943 -> 3e4dd943 3e676cbd" + ] + }, + { + "glsl": "vec2 cultmath_iv_min(vec2, vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "41719018 41a2d1b0 4155ad74 41849d6e -> 4155ad74 41849d6e", + "c0d567fe c0d109d2 c0c42fd2 c0c4188a -> c0d567fe c0d109d2", + "40836c8e 412dd5cd 4195ccf0 4196cae8 -> 40836c8e 412dd5cd", + "408496ba 40849af6 c07bf68a c07b34c6 -> c07bf68a c07b34c6", + "415da65c 415da9b4 418bad2d 418c58b7 -> 415da65c 415da9b4", + "c11d81d5 c11d80ad c0e2d86e bf8065a8 -> c11d81d5 c11d80ad", + "c0507d7e c04d75f2 41187d70 411880a8 -> c0507d7e c04d75f2", + "4186213c 41862178 c125b89f c125b307 -> c125b89f c125b307", + "c191451e c142dbe0 402d0c25 402d99ab -> c191451e c142dbe0", + "bdb31932 bdb268ce 415a723a 415a731e -> bdb31932 bdb268ce", + "c191e878 c191e09c c1a1c595 c197a7eb -> c1a1c595 c197a7eb", + "c13fd8d9 c1166ca7 c0b13345 c0b1296f -> c13fd8d9 c1166ca7", + "c15dc2f8 c159de38 418b70d6 418cc516 -> c15dc2f8 c159de38", + "c11cede1 c0c83e57 c13e5b76 c120dd42 -> c13e5b76 c120dd42", + "bdf35bb0 406f560e bf99af4d be4e2196 -> bf99af4d be4e2196", + "4178cb1a 4178cdee c0a82525 c0a09df7 -> c0a82525 c0a09df7", + "410bcb68 41140df4 be2ef368 3b60da20 -> be2ef368 3b60da20", + "40401290 40401480 41835563 41876335 -> 40401290 40401480", + "c0ef5026 c0a7adc6 bf4d5638 408165e7 -> c0ef5026 c0a7adc6", + "c186cbe1 c1862c0b 410f24b1 410fe9ef -> c186cbe1 c1862c0b", + "c1514fff c150a865 c198ce8c c198cb3a -> c198ce8c c198cb3a", + "c188620a c1879c3a 4188ee8d 4188f0df -> c188620a c1879c3a", + "4110096b 41160581 415a4155 415b88b3 -> 4110096b 41160581", + "409d507f 409d51d1 c160d79d c13a4d4f -> c160d79d c13a4d4f", + "418e75dc 418e7fa8 c1818d77 c18153b9 -> c1818d77 c18153b9", + "c099763a c08daa1a 40b44afe 40b44f32 -> c099763a c08daa1a", + "4126b53e 4126b932 c0fc49af c0fbd70d -> c0fc49af c0fbd70d", + "c0a7096a c0a6f2b6 40f0c3d4 41658c3e -> c0a7096a c0a6f2b6", + "c16f67a4 c11987c8 40a1ca69 40a20207 -> c16f67a4 c11987c8", + "c1630edb c1630d09 407e2f0e 407e3632 -> c1630edb c1630d09", + "414959ea 41496516 417bce94 418df292 -> 414959ea 41496516", + "c151b0a6 c1519cfe c174785f c1746b79 -> c174785f c1746b79", + "40f16343 40f815fd 419b4a3c 419f7a40 -> 40f16343 40f815fd", + "bf2e9cf9 bf2e3bc7 c15f0050 c15eae76 -> c15f0050 c15eae76", + "415ffce5 41842ea2 bffc7d7c 3ef8e0f0 -> bffc7d7c 3ef8e0f0", + "c10425d0 c103a626 415a3b53 415a7d25 -> c10425d0 c103a626", + "4183ac88 4196b1f8 c093dc37 c08c195d -> c093dc37 c08c195d", + "c07ec9dd c034f103 410a5a23 411d7f0d -> c07ec9dd c034f103", + "40c0befa 414e8f73 40e07c5e 40e07ee2 -> 40c0befa 40e07ee2", + "41364b12 4143103a 41963e7b 41965991 -> 41364b12 4143103a", + "c186c784 c186c74e 41159e55 411b004f -> c186c784 c186c74e", + "c1021b24 c1021a90 c0708167 401db267 -> c1021b24 c1021a90", + "413c3e40 413c4108 bf1b881e bf1afde2 -> bf1b881e bf1afde2", + "40b74cda 40c435d6 4155b909 4155c897 -> 40b74cda 40c435d6", + "c00b08bd c00979b3 41862543 41862b89 -> c00b08bd c00979b3", + "418f851e 418fa5fe 41626c1e 41850611 -> 41626c1e 41850611", + "418a90fd 418a928b c19de067 c19d931b -> c19de067 c19d931b", + "4016a730 4016aa40 40d39bf8 40d39e98 -> 4016a730 4016aa40", + "41836e47 41836ead 413f8b7c 413f9718 -> 413f8b7c 413f9718", + "4126e182 4126e376 c1803834 c1469e3d -> c1803834 c1469e3d", + "c08b39f5 c08ac7eb 4174fd1b 41750445 -> c08b39f5 c08ac7eb", + "c0dd0639 c0dc5677 c154e7bb c154e73d -> c154e7bb c154e73d", + "c16a89b2 c16a7002 40c1e8c0 40c20870 -> c16a89b2 c16a7002", + "41654e9f 4168fe41 bf86ee0e bf6656e3 -> bf86ee0e bf6656e3", + "c181ed4b c1643797 412e4c7a 412e4e1e -> c181ed4b c1643797", + "c1b49eda c179f50f c0881760 c0702851 -> c1b49eda c179f50f", + "3d1730cd 3d392733 c0bc318a c0b94e16 -> c0bc318a c0b94e16", + "4186c701 418731e3 400d0fbf 400d4a01 -> 400d0fbf 400d4a01", + "c0d5f9c3 c0d5f8dd 4181b140 418202c0 -> c0d5f9c3 c0d5f8dd", + "40105983 401a0eed 400252bd 4003b3f3 -> 400252bd 4003b3f3", + "c1c17656 c171adc1 c0975fd9 c09757b7 -> c1c17656 c171adc1", + "c0792ba7 c078d1c9 c12673c7 c1266d6b -> c12673c7 c1266d6b", + "4050c9c4 4050d44c c16bd061 c1384f83 -> c16bd061 c1384f83", + "c0aec45a c0aec346 4178ea1c 41791f74 -> c0aec45a c0aec346", + "c196c970 c196c860 40e8fc94 41485506 -> c196c970 c196c860", + "c178cc54 c17794c8 c182612a c181aa70 -> c182612a c181aa70", + "4142bb77 4142d051 4193aed4 41a27f74 -> 4142bb77 4142d051", + "40f567b2 415aad33 c186af49 c1867a57 -> c186af49 c1867a57", + "c0f5c432 c0f5a88e c178993c c17898a6 -> c178993c c17898a6", + "405df2d1 405e034f c0d07d00 c0d07838 -> c0d07d00 c0d07838", + "c163fa34 c163f8a6 c19f7a64 c19a6adc -> c19f7a64 c19a6adc", + "c0a723a9 c0a1352f 418eef84 418ef6b0 -> c0a723a9 c0a1352f", + "c1745488 c173ea38 beb7da58 beb1bea8 -> c1745488 c173ea38", + "4177e1df 41799f71 c0ba7290 c0b9fb3c -> c0ba7290 c0b9fb3c", + "41776669 4182f79b c0865a79 c08658cf -> c0865a79 c08658cf", + "c0af4594 c0aeff84 bf9a61da bf891fa6 -> c0af4594 c0aeff84", + "c186d27a c184960c 406f5e78 406f61a8 -> c186d27a c184960c", + "417855e4 418bccd6 414c1d2e 4162429a -> 414c1d2e 4162429a", + "4142fb1e 41447ad2 40e6b435 41865f3b -> 40e6b435 41447ad2", + "402a96f4 402ae31c c13441a7 c1343f55 -> c13441a7 c1343f55", + "c08ab12e c08307a6 41165b07 411665c9 -> c08ab12e c08307a6", + "bfc37b41 bfa8b4bf 4065fb96 407a641a -> bfc37b41 bfa8b4bf", + "418f5c68 41915858 c1727212 c16354b6 -> c1727212 c16354b6", + "414383f6 41438dc2 4134b6b7 413e8229 -> 4134b6b7 413e8229", + "40b89d94 40b8e164 40dfc4ad 40e8098b -> 40b89d94 40b8e164", + "c197e5bb c181a3e7 c084aebd c0849e53 -> c197e5bb c181a3e7", + "40b85d88 40bef840 408c1ca9 408c34ef -> 408c1ca9 408c34ef", + "41449510 4144ae60 4169b180 416ac190 -> 41449510 4144ae60", + "403b978b 403bb2d5 40d10d85 40d9cc93 -> 403b978b 403bb2d5", + "40c1d862 40c1df7e c158b911 c15886a3 -> c158b911 c15886a3", + "c18d182b c16ba0b1 c17bb2fb c17bacf3 -> c18d182b c17bacf3", + "4110206c 41102114 c198e926 c1988d94 -> c198e926 c1988d94", + "4142c1ba 4142c266 c0bd734b c0bd6c8d -> c0bd734b c0bd6c8d", + "40c627cc 40c7af6c c1832209 c182dcd5 -> c1832209 c182dcd5", + "c10d534b c10cf29d 409f6434 40bff2c4 -> c10d534b c10cf29d", + "c18e89ec c18e837c 417b1857 417c91e1 -> c18e89ec c18e837c", + "4147b634 4148d34c c1329661 c131904d -> c1329661 c131904d", + "408b865e 408b890a c17c5d17 c17c0e73 -> c17c5d17 c17c0e73", + "c131e6a2 c131de76 405eb5d0 405ec110 -> c131e6a2 c131de76", + "4134900c 413492b8 3fad43be 3fbae462 -> 3fad43be 3fbae462", + "40b37b5a 40b37d66 bf3b1616 bd873554 -> bf3b1616 bd873554", + "c19f0f78 c19cfbd0 4182e5a8 4182e5f8 -> c19f0f78 c19cfbd0", + "c15da6c3 c15da425 c06be6af c06bda21 -> c15da6c3 c15da425", + "4000e834 40014f9c c0be0b12 c09f7d66 -> c0be0b12 c09f7d66", + "419fa013 419fec01 c04b31f2 c04b27fe -> c04b31f2 c04b27fe", + "414c43b1 414c96d7 4185746d 4188084f -> 414c43b1 414c96d7", + "417f8f95 4197c20e 41938061 419393cf -> 417f8f95 419393cf", + "417e33dd 41a0305e 410f1e33 410f1fc5 -> 410f1e33 410f1fc5", + "418c9d2a 418c9d76 c18a73e0 c11ca994 -> c18a73e0 c11ca994", + "414608cd 41460a9b 405e0967 405e10b9 -> 405e0967 405e10b9", + "40cc1ba8 40cc2280 c06d43da c06c2706 -> c06d43da c06c2706", + "40b2abb0 41200958 4173a52c 418a2976 -> 40b2abb0 41200958", + "41768e49 41827e0b c1547b69 c154726b -> c1547b69 c154726b", + "411aee7d 411b0e77 41370ca2 41370fd6 -> 411aee7d 411b0e77", + "c161a928 c153a8b4 4151c310 4151c488 -> c161a928 c153a8b4", + "410da7ec 410e3f74 c183ae88 c183aba0 -> c183ae88 c183aba0", + "c0207ab9 c0204be7 c1285a0e c127b98a -> c1285a0e c127b98a", + "c140de9d c140bad3 4192b487 41a4af71 -> c140de9d c140bad3", + "4188a77c 4188ad4c be3f26ba bd174d16 -> be3f26ba bd174d16", + "c18ed305 c18ea389 c19dd2a0 c19dd266 -> c19dd2a0 c19dd266", + "419c842c 419c84d0 bd33b8c8 bd313338 -> bd33b8c8 bd313338", + "41233c29 41238997 c0a1ae84 c09fa41c -> c0a1ae84 c09fa41c", + "c16424ce c0c2866b 414ac775 414ac7fb -> c16424ce c0c2866b", + "c0fedac5 c0fe167b c06adfb4 c06ad6ec -> c0fedac5 c0fe167b", + "c1815573 c18153df c19c9f69 c19c8a0f -> c19c9f69 c19c8a0f", + "40f522e2 40f569e6 40d070b1 40d18d87 -> 40d070b1 40d18d87", + "4142d6e2 4142e37e c0cb810e c0caecaa -> c0cb810e c0caecaa", + "417405b6 4174080a c1724a29 c16e0485 -> c1724a29 c16e0485", + "412a2717 413e4e05 c1732375 c1710f1b -> c1732375 c1710f1b", + "c1ad4a67 c1894a3d c0a205a5 404468fa -> c1ad4a67 c1894a3d", + "41846243 41865079 c11161b5 c1115cc5 -> c11161b5 c1115cc5", + "bf0137b4 40c70476 40307005 4031975b -> bf0137b4 4031975b", + "4174a305 4174ba6b 3eb78ae8 4031df43 -> 3eb78ae8 4031df43", + "bfc75f7d bfba1863 c0ed0658 c0e9c4a4 -> c0ed0658 c0e9c4a4", + "c0e1f0e5 3ff5e054 c0bbf7a5 c0bb58a3 -> c0e1f0e5 c0bb58a3", + "c18bf58c c15612c2 40e5ec6c 40e5eedc -> c18bf58c c15612c2", + "4164fba6 4164fd82 c126fa83 c126923f -> c126fa83 c126923f", + "c0c8302c c0ad1c64 c16c1619 c16c135b -> c16c1619 c16c135b", + "41015811 410158a3 bf061786 bf060fba -> bf061786 bf060fba", + "c176b4b0 c1766e42 418583f3 41920ac5 -> c176b4b0 c1766e42", + "40f76711 4128d390 402ff1d1 4032cd0f -> 402ff1d1 4032cd0f", + "408effb6 408f0df2 c1315213 c1314ee1 -> c1315213 c1314ee1", + "3e0d181a 3e35f3e6 c1484fbb c1484f31 -> c1484fbb c1484f31", + "4045c228 4045c428 4120fb9f 419b02a4 -> 4045c228 4045c428", + "419f000c 419f01a4 c0b57de2 c0b4fc36 -> c0b57de2 c0b4fc36", + "4110b59e 4110b6be c180f624 c180f584 -> c180f624 c180f584", + "c1331b0c c132fcac c1505127 c15014c5 -> c1505127 c15014c5", + "c1759bdb c1758ec1 c09d5a13 40770d76 -> c1759bdb c1758ec1", + "c18ee9e2 c18e9d66 41129827 41129d8d -> c18ee9e2 c18e9d66", + "c0bb687c c0bb63e4 bf3ba39e bf1ef962 -> c0bb687c c0bb63e4", + "4182bfdf 4182c049 4192cacf 419e9f71 -> 4182bfdf 4182c049", + "407c1661 407c1bff 4058aa20 40699f50 -> 4058aa20 40699f50", + "c159673c c158efa4 c1ad781a c186dee6 -> c1ad781a c186dee6", + "c183bf3c c18380ba c1790f6d c176822b -> c183bf3c c18380ba", + "413b5fdd 413bbe33 c0f39faf c0f39309 -> c0f39faf c0f39309", + "c18c1582 c1850442 c18c1ddd c18c1bbf -> c18c1ddd c18c1bbf", + "c1955013 c1954e11 41967562 419675ce -> c1955013 c1954e11", + "c108c145 c10619cd 4097f6d0 40cf0d78 -> c108c145 c10619cd", + "40f0b432 4101343b 3f92b0a0 3fadc7e0 -> 3f92b0a0 3fadc7e0", + "c1791de3 c179156d bd879576 bd86d48a -> c1791de3 c179156d", + "4136dd2d 413750af c1124c95 c110358b -> c1124c95 c110358b", + "c10b79b9 c10a9325 417f837f 41803e80 -> c10b79b9 c10a9325", + "c07be4e5 c07be05b c0811a82 bfbeab38 -> c0811a82 c07be05b", + "41599898 41599f80 3fbb1206 3fbb1efa -> 3fbb1206 3fbb1efa", + "419ca7b2 41a29a72 41404975 4140727b -> 41404975 4140727b", + "c168ba59 c1680d57 c0856bdd c08431db -> c168ba59 c1680d57", + "4161ce44 4161d134 c1255529 c125409d -> c1255529 c125409d", + "4194ee03 4195117d 3f9588c7 3f9b4139 -> 3f9588c7 3f9b4139", + "4197b636 4197b82e bffce3b8 bff25648 -> bffce3b8 bff25648", + "3f23d051 3f27d26f 41865a43 41868fb5 -> 3f23d051 3f27d26f", + "c10127db c100f827 40ce51b9 40ce59e7 -> c10127db c100f827", + "c13caaea c132acf0 c19dc6fd c19da2bb -> c19dc6fd c19da2bb", + "c1386264 c1383366 40d4c34b 40d4eabd -> c1386264 c1383366", + "bfc050b3 bfc0468d 4198663f 41986a61 -> bfc050b3 bfc0468d", + "c18466a8 c17f1fd4 412d096c 412d0ae8 -> c18466a8 c17f1fd4", + "c0f64ea0 c0f44a40 3f3658b4 40d2fdaa -> c0f64ea0 c0f44a40", + "3f40b250 407cad8c 41819651 4182e837 -> 3f40b250 407cad8c", + "410d3ee4 416ab7f4 40830bf5 4085103b -> 40830bf5 4085103b", + "416294de 4162a4aa c1811621 c17b87a5 -> c1811621 c17b87a5", + "4168ea11 4168edff c0fb45ba c0fb4352 -> c0fb45ba c0fb4352", + "c15e6e18 c14fd120 c16e8567 c16d9515 -> c16e8567 c16d9515", + "41341c27 41341ff1 c193f37e c180c88a -> c193f37e c180c88a", + "c1330bf0 c1330842 bf3cf5c6 bddd83d4 -> c1330bf0 c1330842", + "40c62294 40e966b4 c153f6ce c14c16d2 -> c153f6ce c14c16d2", + "414b46db 4150c7cd 40b48fb8 40b4ad80 -> 40b48fb8 40b4ad80", + "4161481d 41616313 40c77fda 40c78ff6 -> 40c77fda 40c78ff6", + "41459ba6 41459d0a bf33e3af bf33c0d1 -> bf33e3af bf33c0d1", + "419ed8de 419edc9e c0b4f793 c0257122 -> c0b4f793 c0257122", + "c000fe63 bfe30d1a 418f2a36 418f784a -> c000fe63 bfe30d1a", + "c02e6abb c02e6835 c151ae07 c151927d -> c151ae07 c151927d", + "41554fe5 4155507b c047d1c3 c041315d -> c047d1c3 c041315d", + "c0111ee2 bf1f03ba 417a72fb 417a73ad -> c0111ee2 bf1f03ba", + "c164fba0 c164e0c2 41808d09 41808e47 -> c164fba0 c164e0c2", + "c014fbd0 40d7f8a8 c12d5e8f c11d5573 -> c12d5e8f c11d5573", + "c17a9310 c157095c 411ad9d4 411ea5b4 -> c17a9310 c157095c", + "40cc5622 4127a933 413bc17a 4194fca3 -> 40cc5622 4127a933", + "413b3dab 413cb32d c14443a8 c049ecc2 -> c14443a8 c049ecc2", + "416531ea 4168573e c1027b14 c0ea41f4 -> c1027b14 c0ea41f4", + "3fb243e2 3fb2921e bfbdf96a be5857b0 -> bfbdf96a be5857b0", + "418cf066 418cf0c6 4106f198 417272e8 -> 4106f198 417272e8", + "c1367cc5 c1363e33 c19fa8f1 c19e7d4f -> c19fa8f1 c19e7d4f", + "c0bee12f c0bed425 c0ca5939 c0c9b3cb -> c0ca5939 c0c9b3cb", + "c0266234 c026593c c09aa5a8 c0989158 -> c09aa5a8 c0989158", + "c104e88c c1046ad4 408cade5 40ff62ab -> c104e88c c1046ad4", + "c15f188c c15ecad8 4133a822 41584516 -> c15f188c c15ecad8", + "be0286b0 4040dc7b c149c47b c1495945 -> c149c47b c1495945", + "c18dd229 c18dd15f 409bd8d8 409bed58 -> c18dd229 c18dd15f", + "3f01417d 3f048103 41663deb 41663efd -> 3f01417d 3f048103", + "c18b533a c185028c bfccf8e9 bfccac17 -> c18b533a c185028c", + "41863d97 41864115 40947b1e 409659da -> 40947b1e 409659da", + "c12dbacf c1127ff1 4005ef57 401d6a09 -> c12dbacf c1127ff1", + "c111cfe5 c1096a4f beacabd6 beac97aa -> c111cfe5 c1096a4f", + "40999eab 409bd4e5 40d84a75 40d923fb -> 40999eab 409bd4e5", + "c1451319 c1033049 c034e3f4 c034a5ec -> c1451319 c1033049", + "c11f34d9 c11e930f 40431e36 4043364a -> c11f34d9 c11e930f", + "4097c62d 4097c7db 418f719f 418f71dd -> 4097c62d 4097c7db", + "c107c1cd c107b557 befd905e beeab422 -> c107c1cd c107b557", + "c1940f45 c193fedf 418fcda4 41aaab7c -> c1940f45 c193fedf", + "4158de89 4158e657 4097c31f 40a0c501 -> 4097c31f 40a0c501", + "c0c9f535 c0c9392f c13cedbe c13cdeba -> c13cedbe c13cdeba", + "409fc830 40a27450 406ce640 411007f8 -> 406ce640 40a27450", + "4120d11d 4120efcf 41597d64 41597fbc -> 4120d11d 4120efcf", + "c0bfeaaf c0bfe65d c198e9cf c198d547 -> c198e9cf c198d547", + "40d9b5be 40d9f952 418b1f0b 418b20d1 -> 40d9b5be 40d9f952", + "417e41ce 417f1542 c0e23ea6 3f88ceb8 -> c0e23ea6 3f88ceb8", + "c15a896c c0bbc598 c19fffa5 c19ffc65 -> c19fffa5 c19ffc65", + "402ed1b0 40592510 3fc09254 4122bbc6 -> 3fc09254 40592510", + "c10370ef c0f6efd3 41943de6 419a90a2 -> c10370ef c0f6efd3", + "c0ed81dc c0ed70dc 4089b258 4089b390 -> c0ed81dc c0ed70dc", + "c076878a c07685d6 c135149b c0f4a6aa -> c135149b c0f4a6aa", + "bfdd9858 bfdcfa88 c16eeb06 c14034d6 -> c16eeb06 c14034d6", + "c0b6a56e c0b3c182 c129baa5 c1296cf5 -> c129baa5 c1296cf5", + "c0e51657 c0e49c1d 4132dd72 4142da7e -> c0e51657 c0e49c1d", + "c190e83e c190e594 c18e7c2b c18d1a13 -> c190e83e c190e594", + "4057797e 40584482 c11963dd bf72d8f0 -> c11963dd bf72d8f0", + "4103f3b2 4121282e 415f89bc 4161585c -> 4103f3b2 4121282e", + "c1526f22 c1526870 c1849bf1 c18485cd -> c1849bf1 c18485cd", + "4116fe9e 4149e7b6 411dc4d4 414d4594 -> 4116fe9e 4149e7b6", + "c10d57b5 c10cc2ff bf768c0c 403f5893 -> c10d57b5 c10cc2ff", + "4149ae5c 4149afc4 4130b0e6 419bf701 -> 4130b0e6 4149afc4", + "3f94ace7 3f94ca39 40b2b0a0 40f72e10 -> 3f94ace7 3f94ca39", + "418f34e5 418f3667 4114b9d9 4114bb07 -> 4114b9d9 4114bb07", + "c16e4faa c1095606 c0c6dead 400d3daa -> c16e4faa c1095606", + "40ace256 40acf5ea c14b1635 c14966c3 -> c14b1635 c14966c3", + "bf1856c3 bf0980fd 410dfa21 410dfbaf -> bf1856c3 bf0980fd", + "bef34ee0 3f68d070 40e61150 40e67940 -> bef34ee0 3f68d070", + "409050fd 40f2942b 3f4a1f8f 3f5642f1 -> 3f4a1f8f 3f5642f1", + "40fca91d 40fcad1b 41548f05 4154f2d3 -> 40fca91d 40fcad1b", + "3fbc564c 3fbd6374 bfd8fd7f bfd2ac81 -> bfd8fd7f bfd2ac81", + "c18601d8 c10604a4 3fd1381c 41368b54 -> c18601d8 c10604a4", + "c088199e 40a2810e c1496d98 c1364302 -> c1496d98 c1364302", + "c01dd802 bfbdcf9d c119f819 c119f7ab -> c119f819 c119f7ab", + "c10e3a6c c09bda09 c02a3784 c02a15dc -> c10e3a6c c09bda09", + "c09ddd5a c0883ade bf75f758 bf2447a8 -> c09ddd5a c0883ade", + "3ed5641d 3ed641e3 c1366c93 c1366bd9 -> c1366c93 c1366bd9", + "40c3a781 40c3af6f c0873ddc c0873c0c -> c0873ddc c0873c0c" + ] + }, + { + "glsl": "vec2 cultmath_iv_max(vec2, vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c194544c c1340640 c004b050 c0049270 -> c004b050 c0049270", + "4149d0a7 414c8301 c05168e1 c04f5b3f -> 4149d0a7 414c8301", + "4175fe64 417ca674 40865c72 408783f6 -> 4175fe64 417ca674", + "40825c59 40c56247 418f15b4 419dbd98 -> 418f15b4 419dbd98", + "40b00ee8 40b147d0 c14183cf c1354c03 -> 40b00ee8 40b147d0", + "4101fb03 41031cad c18557e6 c17f3e49 -> 4101fb03 41031cad", + "417cfb14 4183646a c1ab12c8 c182df1c -> 417cfb14 4183646a", + "412ba26b 412d7df1 c0c643b8 c0c62598 -> 412ba26b 412d7df1", + "407f12f2 407f1a5e 40f05d89 40f126d7 -> 40f05d89 40f126d7", + "c0bf8be8 c0bf8b04 c14ab8d9 c14693f3 -> c0bf8be8 c0bf8b04", + "c00d0eb4 40186de4 c0a5db6b c09f605d -> c00d0eb4 40186de4", + "c1887502 c1218b38 c1896620 c188096c -> c1887502 c1218b38", + "c10fa43c c10f89ac c06124a1 c0611cbf -> c06124a1 c0611cbf", + "419c5157 419d4ca1 c0adbd61 c0abc617 -> 419c5157 419d4ca1", + "41717175 417556e3 c0c0f88d c0c0f6eb -> 41717175 417556e3", + "4095886f 40965261 4114382a 4114420e -> 4114382a 4114420e", + "c09b5837 c09b4081 4183a701 4183e56b -> 4183a701 4183e56b", + "c14f8322 c14f0d14 3c9259c4 3e243fc8 -> 3c9259c4 3e243fc8", + "c0da5fb0 c0d90828 c1163034 c10aa340 -> c0da5fb0 c0d90828", + "c14210d9 c141d65b 40040015 40d862f6 -> 40040015 40d862f6", + "40ec485e 40ec8af2 40d2805e 40d2d96a -> 40ec485e 40ec8af2", + "c13f6e6a c13f69e4 c13228e5 c0412dc4 -> c13228e5 c0412dc4", + "412a5cab 412a5e81 4072ef47 4080e32c -> 412a5cab 412a5e81", + "40ca3a0e 40ca3d92 c18b07c0 c18b077c -> 40ca3a0e 40ca3d92", + "c13f94b3 c13f9375 c11cadc9 c0f321f6 -> c11cadc9 c0f321f6", + "c18e25e3 c18d8a99 bfce1e12 bf480c9c -> bfce1e12 bf480c9c", + "41600c7e 416cf232 41440482 41445b96 -> 41600c7e 416cf232", + "c0c9e935 c0c6f27f c0b28ad4 c0b1fa3c -> c0b28ad4 c0b1fa3c", + "c18a9bc3 c18a8377 c09fa6ae c09f9a66 -> c09fa6ae c09f9a66", + "4148c8f9 4148da1f c187c747 c187c5d3 -> 4148c8f9 4148da1f", + "41844d64 41a80110 41139503 411395b5 -> 41844d64 41a80110", + "41711020 4183b9a8 419749cd 41974bef -> 419749cd 41974bef", + "bfd21e7e bfd1e3e2 4035d8f4 4035de2c -> 4035d8f4 4035de2c", + "c1652cea c15cf74a 4171b5c9 4171b737 -> 4171b5c9 4171b737", + "41734d2a 418df433 3ff055df 3ff1f0a1 -> 41734d2a 418df433", + "c09c4c2e c03c6b63 40b1377d 40b13d7b -> 40b1377d 40b13d7b", + "412c9616 412c985a 4087b934 4087c6ac -> 412c9616 412c985a", + "41156b87 412c1f19 c14cce9a c1264cac -> 41156b87 412c1f19", + "c19964ac c19963ec 417f61be 417f6382 -> 417f61be 417f6382", + "415ced0a 415d2346 41794e9d 41794f33 -> 41794e9d 41794f33", + "41449a26 414642ba c19de98c c19de8f4 -> 41449a26 414642ba", + "c198df54 c198db3c c0fec1be c0fe9f36 -> c0fec1be c0fe9f36", + "3fbe19bf 3fbe6041 c1160d7e c0985745 -> 3fbe19bf 3fbe6041", + "412fee65 4132fb8b 412b69fa 412b6b76 -> 412fee65 4132fb8b", + "c105f509 c104f93b c1139d6d c10b0d25 -> c105f509 c104f93b", + "c134c281 c12da4bf bffd87d7 bfebbd69 -> bffd87d7 bfebbd69", + "c19440d6 c191df2a c1866ad1 c1866a81 -> c1866ad1 c1866a81", + "4156f9e6 41601032 c117a8ed c11738c5 -> 4156f9e6 41601032", + "419d1478 419d6270 407ce03a 409e14cb -> 419d1478 419d6270", + "41603d92 41611866 c15fec77 c15f5be7 -> 41603d92 41611866", + "415e5412 415e5e7e 4103a1e2 41040e6e -> 415e5412 415e5e7e", + "3e914460 3e928320 c1805803 c1804a65 -> 3e914460 3e928320", + "c0d47ed4 c0b8d27c 41569aea 4156a626 -> 41569aea 4156a626", + "c1611000 c1610dda 4145061e 41450722 -> 4145061e 41450722", + "c15f7c80 c15f5cba c18f3918 c18f3034 -> c15f7c80 c15f5cba", + "c14cb260 c14ca9b0 bf9307e2 be96dbf6 -> bf9307e2 be96dbf6", + "c1a50526 c198f198 418d4856 418d4c7a -> 418d4856 418d4c7a", + "c1ad8dee c16b6020 c11d7fbe c114ea46 -> c11d7fbe c114ea46", + "c081b0d0 c057dc20 4155dcd9 4193f8f4 -> 4155dcd9 4193f8f4", + "c1b3fa84 c179cf61 c1777f27 c16d0481 -> c1777f27 c16d0481", + "406906e0 40809780 40f456ed 40f4587b -> 40f456ed 40f4587b", + "414d6950 41a337e8 c0e98a78 c0b23de0 -> 414d6950 41a337e8", + "4104ecde 4105a8b2 40bd3b1d 40bdf933 -> 4104ecde 4105a8b2", + "bf6dd812 3ebfa524 c0dbbc0c c0d92184 -> bf6dd812 3ebfa524", + "411fb488 415f3108 bf5ae0dc bf20aaa4 -> 411fb488 415f3108", + "c0eb19ac c0b99f08 c0e6fab7 c0e6bc95 -> c0e6fab7 c0b99f08", + "3f8908a9 3f8911d7 41736b2a 41738c66 -> 41736b2a 41738c66", + "c133eaf5 c111c74b c18e5381 c18e51d1 -> c133eaf5 c111c74b", + "c11be3b2 c11bd840 41142f2d 4114858f -> 41142f2d 4114858f", + "403e22a7 403f0089 416d4db0 416d4e40 -> 416d4db0 416d4e40", + "be0a84b1 be0a374f 40063761 40088ebf -> 40063761 40088ebf", + "c0f360b7 c0d7aaa1 c11ed82b c11d82d5 -> c0f360b7 c0d7aaa1", + "c0210118 c020c2a8 c1648df1 c1648c97 -> c0210118 c020c2a8", + "bf109561 bf0c065f c04d1699 c025ad17 -> bf109561 bf0c065f", + "c08586b9 c08567f7 3ef5407e 3fea1ba0 -> 3ef5407e 3fea1ba0", + "c199f806 c152115c 4050dd84 409c9866 -> 4050dd84 409c9866", + "bf6dd1f0 bf686c10 c1355964 c135551c -> bf6dd1f0 bf686c10", + "c18b3873 c174ce6e c19d9529 c19d862f -> c18b3873 c174ce6e", + "c1906b3f c1904519 c1502f2c c150288e -> c1502f2c c150288e", + "c1124a4d c100f327 c1904ac6 c18c50f8 -> c1124a4d c100f327", + "41576580 415771e8 417921a1 41a00897 -> 417921a1 41a00897", + "40c1fed4 413c5d52 40eb3ce1 4106d488 -> 40eb3ce1 413c5d52", + "412c373a 41915a33 c189e676 c189e266 -> 412c373a 41915a33", + "417e649c 417e654c 418a1485 418a7a5b -> 418a1485 418a7a5b", + "befe005c be0ed049 c19c3714 c18cfdba -> befe005c be0ed049", + "40355c67 40355f49 bea30649 be7b556e -> 40355c67 40355f49", + "c10031b6 c0e9b5e1 c18e67e4 c18e6798 -> c10031b6 c0e9b5e1", + "c10fc260 c10fbee4 bf9043d9 bf850567 -> bf9043d9 bf850567", + "c120f261 c112c14b 4198acb3 41a095f5 -> 4198acb3 41a095f5", + "c19ce277 c19b09f7 c173dbc1 c1732d9f -> c173dbc1 c1732d9f", + "412b27ec 412b560c c0ca0837 c0ca050d -> 412b27ec 412b560c", + "4138af18 41417cec bf7ce0f0 bf7cda10 -> 4138af18 41417cec", + "3f4d2b17 3f73a7e9 411f228e 4120540a -> 411f228e 4120540a", + "412dabaf 412dafc1 c15b24fb c14d4713 -> 412dabaf 412dafc1", + "41421223 41422fd5 3ff6911c 40f79731 -> 41421223 41422fd5", + "417bf85c 417f5ba4 3f8f2c46 3fadc65a -> 417bf85c 417f5ba4", + "3cdd3822 3d55e7ef 419ff98b 419ffa41 -> 419ff98b 419ffa41", + "c18e51fd c18e510b 3ee2885a 3fd8bdaa -> 3ee2885a 3fd8bdaa", + "4067acbb 4069f175 c183bdcb c183bc7f -> 4067acbb 4069f175", + "410453db 410472cd 4130e281 4131e643 -> 4130e281 4131e643", + "c10356e3 c1035627 3ea752c3 3ef8713d -> 3ea752c3 3ef8713d", + "c0831e9c bf7e3920 414b1d47 414b1e19 -> 414b1d47 414b1e19", + "409b1278 409b1ad8 419dfcb7 419f4361 -> 419dfcb7 419f4361", + "c18f6b83 c18f6a1d 40a591c7 40a59471 -> 40a591c7 40a59471", + "417112e3 4174833d 4094d166 4094f03a -> 417112e3 4174833d", + "411ec8d2 411ee4f6 418fa089 418fb28b -> 418fa089 418fb28b", + "c18f1b22 c156a088 419abd20 419ac148 -> 419abd20 419ac148", + "c178e65e c178e5ec c18639e7 c1861dbd -> c178e65e c178e5ec", + "4072e8ec 4072ec34 40af492e 40e55bda -> 40af492e 40e55bda", + "c17398e1 c145fd9f c127a5a4 c125ffa0 -> c127a5a4 c125ffa0", + "4080ab66 4110465d bfba28e6 3ec9b798 -> 4080ab66 4110465d", + "c17da38e c152810c 412b2baa 412b61d6 -> 412b2baa 412b61d6", + "412f8a00 419bc918 c10c0e25 c10c0d7f -> 412f8a00 419bc918", + "4125d050 41262404 41252b31 416a84ff -> 4125d050 416a84ff", + "c17ed370 c17ed1c8 3f9dd4c1 3fa22dff -> 3f9dd4c1 3fa22dff", + "41847fc7 4184fb0d 418f3f12 41902dae -> 418f3f12 41902dae", + "c172ff20 c171e3a8 c1b5a540 c15a41ad -> c172ff20 c15a41ad", + "bd92015c 3f422a2c 41585a3a 41b2294b -> 41585a3a 41b2294b", + "c03a9376 c03a918a 40b1159a 40d45b66 -> 40b1159a 40d45b66", + "41739d92 41739ece c11f178f c11f123f -> 41739d92 41739ece", + "c1587cc0 c1577c64 c09871c7 c0986e51 -> c09871c7 c0986e51", + "41111a3b 41111ae1 40d77698 40d77a60 -> 41111a3b 41111ae1", + "c124d230 c11d9e3c 411bfbd7 411bfc71 -> 411bfbd7 411bfc71", + "c0baf3f0 c0ac2340 40f05af8 40f05dc8 -> 40f05af8 40f05dc8", + "4193ae46 41a6522e 41140778 41152750 -> 4193ae46 41a6522e", + "4153d348 415ffbc0 418505a2 41850642 -> 418505a2 41850642", + "c193b0ea c193aaf4 40887048 40998c90 -> 40887048 40998c90", + "41465da5 41465e13 c1910bb9 c1910b81 -> 41465da5 41465e13", + "416cb404 416cc254 c0c826a3 c0c7f58d -> 416cb404 416cc254", + "c15a895a c145775a 41776387 41776491 -> 41776387 41776491", + "41627875 418e9135 41158e91 4121f6d7 -> 41627875 418e9135", + "c1a1fe58 c1845dc4 409ff404 40a965e4 -> 409ff404 40a965e4", + "c0dfa72f c0ddf401 414b6907 414b6979 -> 414b6907 414b6979", + "c0b2f25f c0aab6e5 c0970bb3 c096c5ad -> c0970bb3 c096c5ad", + "40b7c3dd 40b7d973 c184518d c1843347 -> 40b7c3dd 40b7d973", + "c09f1ae9 bf5d56b8 c0e2c176 c0e2b3d2 -> c09f1ae9 bf5d56b8", + "40e3a8fc 40f33d0c c1572d11 c1572c55 -> 40e3a8fc 40f33d0c", + "c08da2b8 c08d7d28 418a42ad 418a4413 -> 418a42ad 418a4413", + "419b17f7 419c89b1 4093a26b 410f5bf2 -> 419b17f7 419c89b1", + "c19583b9 c19582b9 c18ddb58 c18dda7c -> c18ddb58 c18dda7c", + "4092ec80 41089fd0 c04daafb c04d8865 -> 4092ec80 41089fd0", + "c148fb2a c148fa84 40b6d1b9 40b6d8d7 -> 40b6d1b9 40b6d8d7", + "41600dcb 41a0fa77 40e1b643 411e657a -> 41600dcb 41a0fa77", + "4117acbd 4117f7cb 40144b2a 411fd1c2 -> 4117acbd 411fd1c2", + "40655a75 40675b1b c181f194 c181eae8 -> 40655a75 40675b1b", + "411f5665 412092df c1476dde c04ab59a -> 411f5665 412092df", + "408dbc6b 40937ff5 c19af8d4 c198105a -> 408dbc6b 40937ff5", + "c19c1aeb c19bf493 c0bbef42 c0bada46 -> c0bbef42 c0bada46", + "c162093b c0f5ae9a 412c6730 412cf4d8 -> 412c6730 412cf4d8", + "3df7bce7 3df82319 c18e0099 c18cab2d -> 3df7bce7 3df82319", + "c1a00cb6 c146c434 c17071c9 c1703689 -> c17071c9 c146c434", + "409a0be3 409a0d35 c035fd9b c032fc75 -> 409a0be3 409a0d35", + "419e0874 41a05bd4 c0d09008 c0cf1238 -> 419e0874 41a05bd4", + "c1945619 c18f9e8f c0a031fc c0a02fc4 -> c0a031fc c0a02fc4", + "40928da0 4092fc28 40c1b054 40c3334c -> 40c1b054 40c3334c", + "c1abd822 c187ce64 c14feb63 c14f8d73 -> c14feb63 c14f8d73", + "4084c3ef 4084ccb9 40c52157 40dd36a9 -> 40c52157 40dd36a9", + "40e9f7c9 40e9fc2f bf884c24 bf82723c -> 40e9f7c9 40e9fc2f", + "c0183c9f c0171ab1 c140d698 c134fba0 -> c0183c9f c0171ab1", + "c041ccfa bf391e1a c0a34f32 c0a0ff56 -> c041ccfa bf391e1a", + "c132619a c131f370 410952b8 410962f8 -> 410952b8 410962f8", + "c17f4968 c16b2a70 bfc4143b bfc11a05 -> bfc4143b bfc11a05", + "405684bf 40673681 417b96cd 417b97cb -> 417b96cd 417b97cb", + "c071cc64 c06f258c 40a01cc8 40a02230 -> 40a01cc8 40a02230", + "413ee543 4141d1fd 415209f3 41523a35 -> 415209f3 41523a35", + "c09f6653 c0996dad 415282e8 416f7068 -> 415282e8 416f7068", + "c13c8ad0 c12b783a c182a242 c181e296 -> c13c8ad0 c12b783a", + "3fe5e260 3ff2d100 40a290d6 40b3006a -> 40a290d6 40b3006a", + "c18f22f8 c18f2274 c0efcb46 c0ee4eee -> c0efcb46 c0ee4eee", + "c144e034 c1267e78 c0c68cbd c0abfc37 -> c0c68cbd c0abfc37", + "411c38e6 411c3c8e c18b8931 c0efebb1 -> 411c38e6 411c3c8e", + "c11e328a c11e0afe c18721fa c1508785 -> c11e328a c11e0afe", + "414faa39 414faae7 4193746c 419b8564 -> 4193746c 419b8564", + "c1aad322 c171c5a8 c14469ac c1435026 -> c14469ac c1435026", + "408aefdc 40cd2a2c c17f67ec c17f5930 -> 408aefdc 40cd2a2c", + "40ff9d2e 4122b5d9 414d29fb 41aacd6e -> 414d29fb 41aacd6e", + "c1900c9c c1900b72 c1983d30 c1983476 -> c1900c9c c1900b72", + "c13974bf c1397391 41742dee 41a47e0d -> 41742dee 41a47e0d", + "c101d61a c101d56a 40d9c3d6 40d9caf2 -> 40d9c3d6 40d9caf2", + "c0117606 bee7ebce 4053094a 4092a56b -> 4053094a 4092a56b", + "40e5ff38 40e60568 412c6425 412ce8db -> 412c6425 412ce8db", + "408bdfae 40ba81a2 40fd5760 40fd59c8 -> 40fd5760 40fd59c8", + "4172de4e 417b712a 417f46e2 417f5eb6 -> 417f46e2 417f5eb6", + "412305df 4123068d c197704d c1842b23 -> 412305df 4123068d", + "c117bc26 c117b7f4 418fe411 418fe4bb -> 418fe411 418fe4bb", + "c0b30753 c0930569 4100d3d2 41083412 -> 4100d3d2 41083412", + "c181320a c18131c2 c09adc1a 40a408e2 -> c09adc1a 40a408e2", + "c10715fb c107158b c182c905 c178810a -> c10715fb c107158b", + "c116a085 c1169653 40a7692d 40a93cdb -> 40a7692d 40a93cdb", + "c180b2e2 c180978e c0b4eb1b c0b4e121 -> c0b4eb1b c0b4e121", + "c0841d6c 3ebf0248 c01aef24 c019972c -> c01aef24 3ebf0248", + "c1455d5a c143db5a c1465405 c1464c79 -> c1455d5a c143db5a", + "41985220 419fc49c 4187ec35 4187f07b -> 41985220 419fc49c", + "4180a0f1 4180df2f c0523a60 bf4846c0 -> 4180a0f1 4180df2f", + "bfa0c722 bfa0c21e c0743233 c06ddf6d -> bfa0c722 bfa0c21e", + "c0dfadbe c0d5c38a 412eee5f 41571671 -> 412eee5f 41571671", + "40b8b45b 40b8b77d c183d9f1 c183a911 -> 40b8b45b 40b8b77d", + "c060edcf c05ec581 4125c9ac 413e8888 -> 4125c9ac 413e8888", + "41581bf5 415f7763 40be54c9 40bed997 -> 41581bf5 415f7763", + "c0b2de79 c0b2d117 3fca7519 3fce9267 -> 3fca7519 3fce9267", + "4158906a 415897be c19c429f c19c0561 -> 4158906a 415897be", + "c18c1a0c c17f8458 416db280 4178c878 -> 416db280 4178c878", + "414e9d75 4157cdd3 c185887e c1858814 -> 414e9d75 4157cdd3", + "c19c5eb5 c19756ab 417393e1 417d16e7 -> 417393e1 417d16e7", + "c16fe1a6 c16edfc2 414cdefa 414cdff6 -> 414cdefa 414cdff6", + "3d9c32a4 3ee68fd7 4159b8de 415a2242 -> 4159b8de 415a2242", + "c19b1251 c19b11c3 c04bc0aa c04bb516 -> c04bc0aa c04bb516", + "415e7e6f 415e7ee1 3f466f71 3f46c7cf -> 415e7e6f 415e7ee1", + "bfe3e788 3fc60608 4126bfe6 4126c0ea -> 4126bfe6 4126c0ea", + "40ee3ca3 40ee598d 413660dc 4147a620 -> 413660dc 4147a620", + "c128b075 c128a021 40b710bd 40bd810b -> 40b710bd 40bd810b", + "c051e4bf c0392921 414bf25f 414bf371 -> 414bf25f 414bf371", + "4144d961 41741b4f c0fb9e58 c0db7260 -> 4144d961 41741b4f", + "c0470249 c045ad37 419e58bb 419e5995 -> 419e58bb 419e5995", + "c067d3e0 c064f840 c0b0368d 4078b75a -> c067d3e0 4078b75a", + "c05f399c c0487484 41815a37 418bc179 -> 41815a37 418bc179", + "c13a9e2a c11bddee 4023821e 40238842 -> 4023821e 40238842", + "419b46d8 41a43130 c18edc48 c1853222 -> 419b46d8 41a43130", + "41274433 412744ad 415974ff 41597881 -> 415974ff 41597881", + "c189e832 c189e692 c18d0dc7 c18d0773 -> c189e832 c189e692", + "c1145d9e c11449da c11eaaff c081d1d2 -> c1145d9e c081d1d2", + "40ee7470 40fb09d0 4142338b 41423425 -> 4142338b 41423425", + "41827512 4183adaa 40d7cfd3 40d7d4c5 -> 41827512 4183adaa", + "414ab5e3 415b71f5 c08e44c2 c08ce65a -> 414ab5e3 415b71f5", + "c0953a8b c057531a c039baa1 c03565bf -> c039baa1 c03565bf", + "c16060ad c15b1615 c184f38f c184f341 -> c16060ad c15b1615", + "4150026e 41508352 c1938780 c19370c6 -> 4150026e 41508352", + "408cf72e 40b035e2 c18e7adc c18e77f6 -> 408cf72e 40b035e2", + "bf95ebc8 bf95d138 4110d7d5 4110d8df -> 4110d7d5 4110d8df", + "c1004fed bf980fd8 c16c10f3 c16b79a3 -> c1004fed bf980fd8", + "c18f1f27 c18ec32b c13cba6d c13c9fd9 -> c13cba6d c13c9fd9", + "c1818bc4 c148af40 41833498 41b43998 -> 41833498 41b43998", + "409ec670 409ee4b8 41378954 41379050 -> 41378954 41379050", + "4120b7d5 41212f8b c1641677 c16306c1 -> 4120b7d5 41212f8b", + "c11e9eeb c11e9357 c16dfa8a c16df6d2 -> c11e9eeb c11e9357", + "40e60541 40e6520f c067b028 c067aae8 -> 40e60541 40e6520f", + "405153dc 405252c4 40ea9c94 40f02d04 -> 40ea9c94 40f02d04", + "c1873053 c1872927 c165aa4b c1656e93 -> c165aa4b c1656e93", + "40b8a16e 41184e39 3ee47f06 3f13a27d -> 40b8a16e 41184e39", + "be83179c 3e1b6737 415efb5a 418cda4f -> 415efb5a 418cda4f", + "3f04b07c 3f04c144 413657f6 4136668e -> 413657f6 4136668e", + "c19d7f98 c194aeb6 c096d234 4040bd88 -> c096d234 4040bd88", + "c1940fb9 c1940e67 415222b0 415223e8 -> 415222b0 415223e8", + "4130b540 41806f88 4153fb0b 4157221d -> 4153fb0b 41806f88", + "c17293e6 c172928a 4130e762 41361b0a -> 4130e762 41361b0a", + "c12ec17b c12ead4b 41731754 417326c4 -> 41731754 417326c4", + "c151d381 c151bb5f 3fb9173a 403e3113 -> 3fb9173a 403e3113", + "41998e11 4199e0e7 c18b2b89 c18acff3 -> 41998e11 4199e0e7", + "c08531ee c085282a 40e32384 40e6459c -> 40e32384 40e6459c", + "408c13cc 408c165c c18979b9 c18393c3 -> 408c13cc 408c165c", + "4191b4fb 41947a2d 40225e5a 40ca4be3 -> 4191b4fb 41947a2d", + "bf4789bc bf477e84 405e71c0 40817460 -> 405e71c0 40817460", + "c18d7b96 c17d36e0 3da194b5 3db4d94b -> 3da194b5 3db4d94b", + "418d5009 418d51e7 40edfb7b 40ee0195 -> 418d5009 418d51e7", + "c13f0a98 c13eaf30 c1695723 c165dbb9 -> c13f0a98 c13eaf30", + "c11f3dc0 c11ca530 419ef4b0 419f4280 -> 419ef4b0 419f4280" + ] + }, + { + "glsl": "vec2 cultmath_iv_sqr(vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c18130bc c1812a64 -> 43825780 4382644d", + "40fc3f58 4100388c -> 42788cc5 42807131", + "c118c87a c118c250 -> 42b64ea5 42b65d5c", + "c1902b76 c1902b32 -> 43a2613f 43a261d8", + "c198320b c19831d3 -> 43b4f669 43b4f6ee", + "411b0a6e 411babda -> 42bbcb43 42bd531b", + "40b9936b 4146d3d2 -> 42068666 431a6c58", + "41563721 415638df -> 43334037 43334321", + "411e0973 412ece99 -> 42c31f55 42eebafd", + "41239249 4123940b -> 42d10739 42d10bb7", + "c19abbe7 c198ec5d -> 43b6b311 43bb0d38", + "40627e8a 40628fb6 -> 414863aa 4148820e", + "3f93e153 3f9821cd -> 3faad917 3fb4d050", + "c084a0f0 c0849cd8 -> 4189643e 41896cb9", + "41937bb0 41939338 -> 43a9ee90 43aa24ce", + "3f4f83d0 3f5081b0 -> 3f28366e 3f29d300", + "4106d46e 4106d5a6 -> 428e0627 428e08b8", + "414c5694 414c59ec -> 43231a19 43231f70", + "c11a4682 c0215717 -> 40cb5d51 42b9f1d0", + "bfa02e48 3ee0b822 -> 00000000 3fc873c5", + "41429e3a 4143056e -> 4313f432 43149146", + "c0f16a42 c0352e3c -> 41003a69 4263a93c", + "c0023b6f c0023041 -> 40846a16 408480d5", + "c008cf9e c008b662 -> 40920494 40923a81", + "40acce8f 40accf81 -> 41e94c6e 41e94efb", + "41825525 41827933 -> 4384b52c 4384fea2", + "41654494 4184b18e -> 434d53c3 43898f2b", + "be0fdd46 be0226ba -> 3c8456b6 3ca1b1e7", + "410600ea 41067aae -> 428c49ea 428d4952", + "c1844b0f c17ed4d9 -> 437dab10 4388bafb", + "413cbc39 4175587f -> 430b24fe 436b2282", + "c18d01d2 c18c15ca -> 43994fae 439b5603", + "bf0a902d bf072513 -> 3e8eb03f 3e95ff83", + "41443bc9 414692e7 -> 43166b9a 431a0792", + "c164acea c161bfc6 -> 434712aa 434c4476", + "412a9174 4138c004 -> 42e34b01 43055496", + "c11344e5 c0b50226 -> 41fff814 42a97063", + "c0e4870a c0e2f116 -> 42492e8e 424c00d1", + "c1011382 c0fc34b4 -> 427877cd 42822955", + "41231bf6 4123368e -> 42cfd93d 42d01d09", + "c18d8a23 c18d88dd -> 439c8019 439c82ea", + "c024b8fe 403cd51e -> 00000000 410b49b5", + "3e3a5741 3e3a92bf -> 3d07a2e8 3d07f992", + "c062dee8 bffafd11 -> 4076133f 41490e54", + "407aeffe 407b88c2 -> 4175f99d 41772575", + "c001777e be33591c -> 3cfb4b78 4082f34a", + "416d250e 4174871a -> 435bada1 436991d1", + "c1a9d2e4 c1920966 -> 43a69d71 43e1503e", + "c061df18 c03a6af8 -> 4107bf9d 414749eb", + "c0050cbd c0050a93 -> 408a47fa 408a4c7a", + "c0c7fc46 c0a29592 -> 41ce8348 421c3a2d", + "c1a31e10 c14354cb -> 43150a49 43cfde98", + "c1299d8b c1299bf3 -> 42e0be8c 42e0c2c5", + "c1935692 c12ca9d0 -> 42e8e940 43a99912", + "bf8fef0a 40a08172 -> 00000000 41c94420", + "c1702d51 c1702c89 -> 43615389 43615500", + "4115c1f2 411d0c2e -> 42af36ad 42c0afe2", + "40fb1af0 41019538 -> 42764dd5 42832f73", + "c07317c4 c07311cc -> 4166cacb 4166d620", + "c17b1e52 c17aed62 -> 4375f480 43765478", + "41823ac2 41b9e3e6 -> 43847f75 4406fb2d", + "c1971c98 c1928eca -> 43a7ce5c 43b2657d", + "c16e4ddd c12b6731 -> 42e5860a 435dd4df", + "4183e7ff 41848d59 -> 4387ee82 43894424", + "418112a5 41812ebb -> 43822797 43826042", + "c173e7fa c173144e -> 4366cf8e 43686237", + "c13fe745 c138ae33 -> 43053ae0 430fdaea", + "c19eb0d0 c19ead68 -> 43c4b504 43c4bd76", + "c18aede0 c18a9a4e -> 43961572 4396caa5", + "41088e20 4108b138 -> 4291aea2 4291f98c", + "418b89d4 418bb048 -> 43981ded 439871cf", + "c106d63d c104494f -> 4288b75d 428e09f6", + "c113cfc1 c1139e2b -> 42aa3e0e 42aab080", + "c177469b c1774471 -> 436ed524 436ed953", + "c1954c3c c195437a -> 43ae0f3c 43ae23a9", + "bed5ca7d bed40883 -> 3e2f9e19 3e328a94", + "40c04277 40c043a9 -> 421063c4 4210658f", + "c19668aa c1965670 -> 43b092d1 43b0bda4", + "41324c7e 4132615e -> 42f85cec 42f89718", + "4141aae0 4141b988 -> 43128318 43129946", + "c13d6a4c c13c7a90 -> 430ac43e 430c2620", + "c188a9bc c188a8e8 -> 4391e7cc 4391e991", + "4157bae8 41590818 -> 4335cb7a 4337feb9", + "416015f6 4160166a -> 43442670 4344273b", + "411184c2 4111d212 -> 42a56f51 42a61f4a", + "40506fc6 40bb54d5 -> 4129b5d3 4209150b", + "c087e9f9 c075fdc6 -> 416c5fb9 41905135", + "bf5bc206 bf4f0afa -> 3f2772c1 3f3ca589", + "40e2a486 40e2f152 -> 4248a6e6 42492ef8", + "bf86d07a becb9d9a -> 3e21f353 3f8dfdd3", + "41413982 414c5fe6 -> 4311d7c3 432328fa", + "3ff06b2b 3ffa4655 -> 4061c91d 4074ad71", + "41877dab 4190b819 -> 438f6b90 43a39f41", + "417b2a5b 417b2d5d -> 43766c15 437671fc", + "40ff2f14 41017a12 -> 427e5ed3 4282f881", + "bfcba001 bf95b77f -> 3faf1e3b 4021f726", + "410c6482 410c8eca -> 4299fc2b 429a58f9", + "c14bb775 c14b95d9 -> 4321e6fe 43221c77", + "c0975277 c0974ca9 -> 41b2d70d 41b2e4c6", + "413f5bc6 4143b8aa -> 430f0a12 4315a2d8", + "402a2043 402a25bd -> 40e21dba 40e22c49", + "c0570865 c0520bdb -> 412c5774 41349f1a", + "41070851 4108c2c3 -> 428e738b 42921f07", + "4161f8d2 41944f17 -> 43477753 43abd716", + "4007d5fd 4009a863 -> 409026c7 40940b51", + "41080f4a 41083176 -> 4290a07f 4290e92e", + "4166252a 416625ce -> 434ee6cd 434ee7f4", + "bb7b22ec 3c3998bb -> 00000000 39068e19", + "c19e57c4 c19e1a2e -> 43c348a7 43c3e0e8", + "c14aa316 c14aa28a -> 432064e9 432065c7", + "40eed2a3 40f694a5 -> 425ecc54 426d8203", + "c0f5d865 c0f5d55f -> 426c121a 426c17e8", + "41918dc6 41a7d796 -> 43a583d2 43dc15f7", + "c191f485 c10aec54 -> 4296c749 43a66dd0", + "3fc9ca28 3fc9d418 -> 401f0f12 401f1ebd", + "c15b8567 c15af8df -> 433b4cce 433c3d84", + "404d5c98 4084cc5c -> 4124bd6d 4189c6c4", + "c144b63a c13f4e2a -> 430ef5bb 4317278b", + "c1175088 c01a45e6 -> 40b9f058 42b2e034", + "416989db 41699c65 -> 43550c3b 43552e0f", + "414e1dad 419b963d -> 4325f3c6 43bd1e8c", + "40995394 40995cc4 -> 41b7aa04 41b7c008", + "41807d85 41807e0b -> 4380fb85 4380fc92", + "4167c4ed 416bcbbb -> 4351d4fb 43592fab", + "417d6cc2 4182fddf -> 437ae026 43860da4", + "c0c83e4c c063ec18 -> 414aec8c 421ca166", + "4198b0d3 419ecf45 -> 43b624e9 43c50902", + "4193fdf1 41aa6b97 -> 43ab1b3d 43e2e624", + "413e01ce 413e0f4e -> 430d06ae 430d1ab9", + "40390ea7 408664dc -> 4105c62e 418d1b7c", + "c082cb56 bee62fa0 -> 3e4ef99c 4185a64a", + "c08da637 c08d082d -> 419b6404 419cc109", + "c0d53675 c0d52db7 -> 4231851b 423193aa", + "413b0ef1 413b0fcf -> 4308aed5 4308b019", + "4153af2a 4162ac86 -> 432f0a37 4348b511", + "c184f719 c184f6c9 -> 438a1eda 438a1f81", + "408a0fe0 40c47660 -> 4194ea3d 4216c57a", + "c1759f4a c16ec906 -> 435eba65 436baa47", + "c18db936 c18db894 -> 439ce9b0 439ceb17", + "c1544e59 c11c89d3 -> 42bf7087 433011db", + "c1988431 c1984ec9 -> 43b53b4e 43b5ba7d", + "c185d20f c17cc00d -> 43798aaa 438be7e0", + "410c310f 410c3a5d -> 42998b64 42999fc6", + "3e5fa364 3fb48d34 -> 3d435e11 3ffeadbe", + "413e3090 413e3ea8 -> 430d4c1f 430d6111", + "4182d356 4182d3b2 -> 4385b6a4 4385b760", + "c0986161 c098600f -> 41b5646c 41b56790", + "412f48e2 41a0932b -> 42f00973 43c97095", + "403d1f53 403d29fd -> 410bb744 410bc706", + "416e901f 417363f1 -> 435e504b 436766e3", + "c10f1cb1 c0fe1227 -> 427c2807 42a00222", + "41581f72 415820de -> 43367514 4336777b", + "40ce3769 40ce6117 -> 42261d39 42266066", + "c11c7f01 c11c7d13 -> 42bf5159 42bf5610", + "40c69197 40c6a439 -> 421a0588 421a2272", + "41524056 41574022 -> 432cad9d 4334fcc9", + "c183a4bd c181a12f -> 438347ae 43876407", + "410d4310 41724344 -> 429be5e2 4365433e", + "414b383c 414cbe94 -> 4321523c 4323c04a", + "41185109 411851df -> 42b540a9 42b542a6", + "4064a7be 4133f638 -> 414c3b38 42fd047e", + "c1151455 c1145233 -> 42abde4b 42ada159", + "4176b86c 4176b90c -> 436dc6f4 436dc829", + "40c4fe5e 40c7d092 -> 4217967d 421bf5ed", + "41949c53 41949d3d -> 43ac8a3f 43ac8c5e", + "c1764460 c146d574 -> 431a6ee1 436ce77b", + "c132943f c131f8a9 -> 42f77396 42f924fb", + "4098f225 4098fcdb -> 41b6c0e2 41b6da7c", + "3fce02b0 41208dfa -> 4025c853 42c9638e", + "c16b3452 c16b149c -> 4357ded8 43581919", + "c19afb05 c19ae99b -> 43bb7bc7 43bba5f0", + "c159df4e c15930e4 -> 433843ec 43396c55", + "bf80995b bf8074a5 -> 3f80e9b4 3f81336e", + "4190bcc7 41934a25 -> 43a3a9d6 43a97c78", + "c147f756 c1024916 -> 42849c9e 431c3277", + "c187a2b2 c112f9f0 -> 42a8c414 438fb9fe", + "c06672a2 c01af19e -> 40bb8f2c 414f722e", + "c19c9a12 c19c92a4 -> 43bf8618 43bf9845", + "3fa784b5 3fa7ef6b -> 3fdb3cd2 3fdc547b", + "c1327486 c13053f6 -> 42f2e71c 42f8cc7f", + "40eb079f 40f1e7a9 -> 4257c6fe 426495fe", + "c1538191 c152d3b3 -> 432da001 432ebed7", + "c18d7c00 c14c9397 -> 43237b8e 439c63a8", + "bf6ffa1e bf5c97e2 -> 3f3e1567 3f60f4f8", + "c18ce2c2 c18c46ce -> 4399bb0a 439b119a", + "c102818c c0d5e518 -> 4232b707 42850fa7", + "bfbcade5 bfbbde9b -> 4009def8 400b0fde", + "c1912c19 c19125ab -> 43a49763 43a4a5f8", + "4146ba0b 414eea2d -> 431a4450 43273db7", + "c18dace8 c18bc3bc -> 43989c48 439ccfd9", + "c19df92e c15d7944 -> 433f9a99 43c2f72a", + "c0c3c2f8 c0c3c1b8 -> 4215b0b1 4215b29a", + "4192071d 419208a3 -> 43a6983b 43a69bb4", + "bf9c0325 bf9a9f9b -> 3fbac8d4 3fbe27aa", + "3e558bc2 3e59143e -> 3d3221dd 3d381353", + "40f3ce4c 40f3f8cc -> 4268314b 42688245", + "412796c8 41282490 -> 42db6c23 42dce004", + "40f4fdd6 40f52b92 -> 426a74dc 426acc6d", + "c1370cfd c134ab63 -> 42ff02ec 4302e392", + "c0704b86 c06d337a -> 415bc85a 41618db2", + "4114a642 4114c6f6 -> 42aca151 42aced4e", + "40afe5c0 40b6b650 -> 41f1b7d5 420267bc", + "4090f4a3 40911d85 -> 41a42842 41a484e8", + "3f17ec5d 3f17fa23 -> 3eb45160 3eb47213", + "4128a083 412e63d9 -> 42de2621 42ed97c4", + "bf2644f8 3e80c970 -> 00000000 3ed7fb08", + "c1255d32 c1247e2c -> 42d363cd 42d5a289", + "3fc70ff4 4000ce86 -> 401ac9ce 40819e59", + "c0e738db c0e7350d -> 4250d0c8 4250d7a8", + "3df062a0 40ad74f6 -> 3c61b912 41eb0e94", + "bfa1fac0 bfa1f360 -> 3fcce80c 3fccfab6", + "c18bbeb1 c1871503 -> 438e8e56 43989145", + "413d4b3d 419842be -> 430bf82e 43b51ea6", + "c1a11bd5 c1627fb2 -> 434865b6 43cac80a", + "40d31e6e 40dce552 -> 422e1b2d 423e9af2", + "c185474a c185459e -> 438ac2d2 438ac64d", + "c0d3c4f7 c0d271e1 -> 422cff08 422f2e47", + "418c9562 418f1ab2 -> 439a6775 439ffdab", + "c0f1f71d c0e9cbdb -> 425584b7 4264b333", + "c04836dc c04074f4 -> 4110afa3 411c95c4", + "40cbcf78 40cc2668 -> 422242b0 4222cd3c", + "40a32179 40c0fa57 -> 41cfe749 42117877", + "412ed9c4 4161358c -> 42eed97f 43461f2b", + "c17f8f45 c17f8a65 -> 437f1500 437f1ebc", + "41765a05 41ad4eb5 -> 436d1121 43eaa6f2", + "c1966683 c19665fb -> 43b0b756 43b0b895", + "c18b2e69 c18b04ad -> 4396fc28 439756dd", + "c18ae566 c189438a -> 439332b7 4396b83f", + "c10f751a c0c7d174 -> 421bf74e 42a0c811", + "4131d1d3 413468c1 -> 42f707a4 42fe46f5", + "c114c666 c113c58c -> 42aa98ee 42acebff", + "c0857273 c0857099 -> 418b1c61 418b203d", + "40a38394 40a3a18c -> 41d0e1a4 41d12e3c", + "bffb1539 bfc8c1e7 -> 401d6f8c 407642a0", + "40546974 409fdf36 -> 41303ed4 41c7ae0f", + "c0571b14 c04d32ac -> 41247a31 4134be7e", + "40b05918 4134cb00 -> 41f2f540 42ff5c32", + "c109405e c1093f84 -> 42932a16 42932bea", + "c02fe663 c02fbecd -> 40f14cd5 40f1b995", + "4155b620 41af1b14 -> 43326893 43ef8c10", + "415e04d8 417c95c0 -> 43408c67 4379372a", + "419c11dc 419ee31c -> 43be4b8b 43c53a40", + "40d5c4fa 40d5c5ce -> 42328160 423282c2", + "c183d642 c1627e29 -> 434862ff 4387c9f6", + "bfe728d9 bfe6d547 -> 405023ed 4050babe", + "c08d4095 c08cd08f -> 419ae98d 419be069", + "417a850c 4183b95a -> 43752821 43878e71", + "c0c2128b c0c20ff5 -> 42131c30 4213201c", + "c19d43bf c19cb5d7 -> 43bfdc3e 43c13854", + "c155e91b c15567bd -> 4331e5cb 4332bdbb", + "c01058ed c00fd413 -> 40a19d3a 40a2c853", + "408e459e 408e48d2 -> 419e229c 419e29bb", + "3fd3deb1 3fd509af -> 402f58d9 4031491e", + "c0a37e08 c0a37b08 -> 41d0cbcf 41d0d378", + "c14f2db0 c14f2d40 -> 4327aa35 4327aaeb", + "c12c675a c12c66c0 -> 42e83476 42e83615" + ] + }, + { + "glsl": "vec2 cultmath_iv_sqrt(vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "418b2194 41929180 -> 40857317 4088f84b", + "412d5f3e 412d8e52 -> 4052ac5e 4052c8f6", + "4023bf3d 40350d33 -> 3fccbdec 3fd749e4", + "c07a34ab c0718115 -> 00000000 00000000", + "c14378f0 c1422990 -> 00000000 00000000", + "c1170d65 c116fc97 -> 00000000 00000000", + "c0c946b2 402c9fb4 -> 00000000 3fd237de", + "40e841d5 413a7e0a -> 402c6bb6 405a7fe0", + "40854637 40854d29 -> 40029c4b 40029fb2", + "c19710f5 c18681ff -> 00000000 00000000", + "c1796cdb c1792b6f -> 00000000 00000000", + "3fd7bffa 3fdb50e6 -> 3fa62e3b 3fa78c61", + "c135dc70 c110735a -> 00000000 00000000", + "c1549741 c1548d8b -> 00000000 00000000", + "40a4e746 40a4e822 -> 401148e0 40114941", + "40fbd1da 40fc62d6 -> 4033890a 4033bcb1", + "c18fcccc c18fc060 -> 00000000 00000000", + "bf44dc18 bf44c568 -> 00000000 00000000", + "c1afdd7d c18972d7 -> 00000000 00000000", + "3fa667a8 3fa6eeb8 -> 3f91f1d2 3f922d00", + "c1575453 c1568845 -> 00000000 00000000", + "c10d69fd c0da2e12 -> 00000000 00000000", + "c174a8a7 c1749d4d -> 00000000 00000000", + "40d00e75 40d1df3b -> 402330d7 4023e6b7", + "40c6edac 40c7750c -> 401f921f 401fc862", + "c0848d47 409abcaf -> 00000000 400cbc29", + "4190743c 41908250 -> 4087fa76 40880117", + "4187264f 41876b7d -> 408386b8 4083a85e", + "c11f4475 c11f39ed -> 00000000 00000000", + "c1577336 c152c062 -> 00000000 00000000", + "3f3dc9a8 3f3de698 -> 3f5c6bea 3f5c7cb7", + "419f4eff 419f50d9 -> 408ecc7e 408ecd53", + "416d6327 41802418 -> 4076849f 4080120b", + "c111fa40 c111f8fa -> 00000000 00000000", + "3ea819aa 3eef3956 -> 3f12afa9 3f2efcd5", + "4184f333 4186b275 -> 40827397 40834e4d", + "40bcc173 40cb2d5d -> 401b6fed 40214410", + "40fd9806 40ffe2aa -> 40342aa8 4034fa94", + "c16ac26a c166acc2 -> 00000000 00000000", + "c102e78f c0079fd5 -> 00000000 00000000", + "c13a3d7c c1384ad8 -> 00000000 00000000", + "4098c044 4098c72c -> 400bd435 400bd75f", + "beb14d62 bbcae7a0 -> 00000000 00000000", + "be540ab8 3d5c1ee0 -> 00000000 3e6d6226", + "c0ccc3ea 3f8d53ca -> 00000000 3f867fa9", + "4160c70a 4167cb66 -> 406fe19d 407398c8", + "411fcac1 4138daf7 -> 404a4112 405989d6", + "4142dd7d 4142de1b -> 405f59c1 405f5a1b", + "3fd51a1c 3fd52624 -> 3fa5285d 3fa52d06", + "41981d91 4198244b -> 408b89aa 408b8cc0", + "c19af23a c19a69c2 -> 00000000 00000000", + "c192efa7 c192ef5f -> 00000000 00000000", + "3e5e848c 3fe89b6e -> 3eeeac27 3fac8cf5", + "c0cff9bf c0cfef59 -> 00000000 00000000", + "40d77c4e 40d7ab52 -> 40261429 40262646", + "c0a85bac c0a61940 -> 00000000 00000000", + "4183737a 418375ca -> 4081b6cd 4081b7f1", + "c0124cc5 3f6e01d4 -> 00000000 3f76d6f5", + "be450b64 3f76ded9 -> 00000000 3f7b64d1", + "40fa8a1d 40fa9093 -> 4033140f 4033165e", + "c0ec7667 c0e9a791 -> 00000000 00000000", + "40d20e61 40d39187 -> 4023f91f 40248ff5", + "412dfa6e 412dfe12 -> 40530a93 40530cc8", + "4175af88 41844124 -> 407aca31 40821c1e", + "4187946d 41893f87 -> 4083bc42 40848b1f", + "c1969a28 c19699e4 -> 00000000 00000000", + "4103d739 4103d81f -> 4037b70e 4037b7ae", + "418c1762 418d724e -> 4085e8c6 40868e2e", + "40404bef 404626f1 -> 3fdddfaa 3fe139f7", + "40c97fd8 40cf82e8 -> 40209940 4022fa13", + "c0a7fdf5 c0a7e9ff -> 00000000 00000000", + "c19b4016 c19b3f90 -> 00000000 00000000", + "40873edb 40875525 -> 400392aa 40039d81", + "414ac583 414bc445 -> 4063d62b 4064651e", + "c0ecca74 c08402f8 -> 00000000 00000000", + "3f4cdfed 3f9ef18a -> 3f6503df 3f8ea295", + "c072832d c0355c93 -> 00000000 00000000", + "419bc4e0 419be124 -> 408d341b 408d40ea", + "417fc1e1 41802647 -> 407fe0ef 40801322", + "c11cb2cb c11c9f45 -> 00000000 00000000", + "418d592f 418dadfd -> 4086823b 4086aa8e", + "c1038f5f c1038ef1 -> 00000000 00000000", + "c0e36a3f c0e33e49 -> 00000000 00000000", + "415bb4c4 4175ea74 -> 406d28e8 407ae842", + "c11f1a83 c10687e1 -> 00000000 00000000", + "c10ec66d c0a1f3db -> 00000000 00000000", + "c15e289d c15e27f5 -> 00000000 00000000", + "4146c39a 4146c43e -> 406192ee 4061934b", + "403a5047 403f8e09 -> 3fda6510 3fdd7201", + "41893d0b 4189737d -> 408489ec 4084a434", + "c0a3af4d c0a38653 -> 00000000 00000000", + "bfd62284 bfd61e3c -> 00000000 00000000", + "c16780e4 c16773e2 -> 00000000 00000000", + "401e69f4 40c0b1b6 -> 3fc96150 401d0ced", + "c1863b4f c185f103 -> 00000000 00000000", + "411d44f6 411d45e2 -> 4048a6be 4048a755", + "c0d0a1c4 c0d07f90 -> 00000000 00000000", + "40f51440 41158398 -> 40311dbb 4043a439", + "419a880c 419a8848 -> 408ca437 408ca453", + "41262881 412630a7 -> 404e3e69 404e4378", + "c0d9fb20 3f2a22c4 -> 00000000 3f50b2a2", + "c107e4ba c1074424 -> 00000000 00000000", + "4043bb55 404ac2fb -> 3fdfd8bf 3fe3d4bf", + "40429147 40430de9 -> 3fdf2e0f 3fdf757f", + "41856280 41b1517c -> 4082aa26 4096a785", + "4162a432 4162b406 -> 4070dfb2 4070e81b", + "402db0ab 405b26b5 -> 3fd2ddd1 3fecdc30", + "4193e512 4194b79a -> 4089969a 4089f865", + "c18b21bb c18b1d15 -> 00000000 00000000", + "416a6850 416a68d8 -> 4074f748 4074f78f", + "40d4d513 41486c3e -> 40250d9a 40628363", + "4122a346 412c947e -> 404c0c17 4052310a", + "c182b7bb c182b3e1 -> 00000000 00000000", + "40210c3c 407a2864 -> 3fcb0c20 3ffd0fe1", + "c123661b c060d94b -> 00000000 00000000", + "c18e4fcb c18dc935 -> 00000000 00000000", + "414cf16d 4150807b -> 40650da7 40670894", + "c18c45ef c18c320d -> 00000000 00000000", + "c1a365bc c1770e99 -> 00000000 00000000", + "c00d1c6b c00a3f35 -> 00000000 00000000", + "410f898c 410f8f54 -> 403fb0f8 403fb4d4", + "4187d56b 4187d65d -> 4083dbd2 4083dc47", + "40c9b2a0 40ca2428 -> 4020ad7c 4020daae", + "be94768d be6314e6 -> 00000000 00000000", + "c0b257ed c0b25503 -> 00000000 00000000", + "41306251 41362d13 -> 40547ed6 4057f4c9", + "c167bd5d c15fef83 -> 00000000 00000000", + "3f4a7081 3f5020bf -> 3f63a664 3f66d383", + "c138217b c1376b9b -> 00000000 00000000", + "c03aa7ff c03a6481 -> 00000000 00000000", + "c19945e3 c194e8d5 -> 00000000 00000000", + "c190b354 c190b312 -> 00000000 00000000", + "417ac1e3 417acd85 -> 407d5d79 407d6359", + "bff8d4e1 3fbf6061 -> 00000000 3f9c8339", + "4104ea23 4105ff19 -> 40387635 40393601", + "4001d324 4001da1c -> 3fb64e19 3fb652fe", + "41506e24 415081c4 -> 4066fe6a 4067094a", + "c101bf5f c1012e75 -> 00000000 00000000", + "c1972cb3 c1960f37 -> 00000000 00000000", + "c180884d c17dc0cb -> 00000000 00000000", + "412734b3 4127352d -> 404ee499 404ee4e5", + "bfa38809 bfa35f97 -> 00000000 00000000", + "c149976f c14981d9 -> 00000000 00000000", + "c04e01e0 c04dfd80 -> 00000000 00000000", + "c1611fa1 c15fa845 -> 00000000 00000000", + "c14a2fd2 c1498896 -> 00000000 00000000", + "3efd3ae8 3efd7098 -> 3f340991 3f341ca6", + "c06f7542 407b5912 -> 00000000 3ffda9ce", + "c165f9ce c130dcd0 -> 00000000 00000000", + "c125b0ba c12594ae -> 00000000 00000000", + "418a860b 418b34fd -> 4085286b 40857c66", + "415dc07d 416ccc53 -> 406e42ea 40763642", + "401225f4 401e1e9c -> 3fc16d47 3fc93166", + "416e48cf 417fcef1 -> 4076fbc1 407fe777", + "c019c914 c019c73c -> 00000000 00000000", + "c01c2fea c016dd26 -> 00000000 00000000", + "c04c0458 c021c198 -> 00000000 00000000", + "401df6c1 401df8af -> 3fc91809 3fc91944", + "c1188124 c10206ac -> 00000000 00000000", + "415615b1 4156f577 -> 406a1b2d 406a9567", + "416d6bab 416d991d -> 4076890b 4076a0a2", + "41250d80 41250f10 -> 404d8e7b 404d8f74", + "c097c956 c097c832 -> 00000000 00000000", + "408bd9ee 40965b92 -> 4005cb64 400abaab", + "4155961e 4155a692 -> 4069d562 4069de63", + "c0dcb0e7 c0dcad71 -> 00000000 00000000", + "c097448e c0885512 -> 00000000 00000000", + "4112b415 4112b727 -> 4041cb3e 4041cd45", + "c15e77bc c15abdfe -> 00000000 00000000", + "40ca9d92 40cc0e66 -> 40210af5 40219d46", + "bfdc96bf bfcdf481 -> 00000000 00000000", + "40ba25e0 40ba29f0 -> 401a5c1a 401a5dc9", + "c15f4700 c15daa98 -> 00000000 00000000", + "c1843ee0 c17fa7f7 -> 00000000 00000000", + "401aad4c 401c70b4 -> 3fc6fd9e 3fc81f29", + "40fcedb6 40fd1d32 -> 4033ee1e 4033ff01", + "c18b168e c188bc30 -> 00000000 00000000", + "be395d2f be0e37d1 -> 00000000 00000000", + "414e1368 41564b58 -> 4065af7a 406a3881", + "c05f8ad8 c05ca758 -> 00000000 00000000", + "c192dfb6 c192de08 -> 00000000 00000000", + "4197b7cb 4197b899 -> 408b5af4 408b5b53", + "40e9ceaf 40e9ed71 -> 402cfec6 402d0a27", + "c144b8a7 c13ff569 -> 00000000 00000000", + "c194ecb4 c194db1e -> 00000000 00000000", + "4164e581 41669baf -> 407211b8 4072f8fc", + "c152cbc5 c152be21 -> 00000000 00000000", + "c1837b6b c183775b -> 00000000 00000000", + "4127b48f 4129b131 -> 404f33a5 40506cee", + "41912ec4 41979914 -> 40885225 408b4cd8", + "4182b73a 41939ce2 -> 408159ca 40897501", + "c164d871 c164c283 -> 00000000 00000000", + "3f968376 410abea5 -> 3f8acd11 403c76c3", + "c18f3c08 c18cdff8 -> 00000000 00000000", + "c127ceea c127ca9c -> 00000000 00000000", + "c0c49fdb c0c44085 -> 00000000 00000000", + "c1197e73 c1197ca9 -> 00000000 00000000", + "bed46d7b bed33485 -> 00000000 00000000", + "40af529e 40b0b12a -> 4015cde2 4016635b", + "c020eb88 bf799f60 -> 00000000 00000000", + "c0756fd9 c074ce17 -> 00000000 00000000", + "4108c32f 4108c639 -> 403b1cde 403b1ef2", + "40a52b1a 40a52d76 -> 401166be 401167c8", + "c150ddab c1463b21 -> 00000000 00000000", + "4085d0db 4085dd55 -> 4002e029 4002e642", + "41273f0c 412743a0 -> 404eeb00 404eedd5", + "41310608 413358f0 -> 4054e15d 405645e6", + "4075c698 4075d308 -> 3ffad5f6 3ffadc4f", + "c193ac6d c1929081 -> 00000000 00000000", + "bea8fcaa 3c806a98 -> 00000000 3e003541", + "c11a9978 c11a1452 -> 00000000 00000000", + "c01baacc bf81ab48 -> 00000000 00000000", + "c19331fd c1930f47 -> 00000000 00000000", + "c0c585b7 c0c58461 -> 00000000 00000000", + "414026b4 4152da0c -> 405dca2f 406854ee", + "409c19ed 409c2683 -> 400d5aa2 400d6055", + "c1580cc7 c1580b07 -> 00000000 00000000", + "c09ebfcc c09d37b4 -> 00000000 00000000", + "c18b6e89 c1278b5a -> 00000000 00000000", + "410a54a2 410b0e4e -> 403c2eb5 403cacd5", + "413b804a 413b8c0a -> 405b16f5 405b1dd3", + "c1836577 c1836541 -> 00000000 00000000", + "c012039f c011fbb1 -> 00000000 00000000", + "40aa48cb 40aeb065 -> 4013a2d3 40158884", + "3fa3474d 3fa3c073 -> 3f90912e 3f90c6c6", + "c1296198 c1296124 -> 00000000 00000000", + "c1988cd0 c1941f1a -> 00000000 00000000", + "3fc3c5f9 40985272 -> 3f9e4ce1 400ba1e9", + "4182fd98 4197dc6c -> 40817c96 408b6bc6", + "c16a634f c16a5fef -> 00000000 00000000", + "411d8450 411d8658 -> 4048cf24 4048d070", + "418c4a24 419380e4 -> 40860106 408967f8", + "4091f48c 40934a1c -> 4008aee1 40094e72", + "c191a1e0 c1902c84 -> 00000000 00000000", + "c11c4331 c11c425f -> 00000000 00000000", + "c1980d40 c1980cc8 -> 00000000 00000000", + "41522076 419e6715 -> 4067ee99 408e6468", + "41528a08 41a02a18 -> 406828d5 408f2e8f", + "c05f4ffc c05e1914 -> 00000000 00000000", + "c0c4a0c6 c0370905 -> 00000000 00000000", + "4143f85a 414a30ae -> 405ffba1 4063827e", + "3ed4a575 3ee5138b -> 3f24fb22 3f2b3c6b", + "40447dd7 404be949 -> 3fe047dd 3fe479dc", + "c13b8977 c13b5975 -> 00000000 00000000", + "3ff262ea 3ff56976 -> 3fb023f4 3fb13c83", + "4070aea6 4070d27a -> 3ff83915 3ff84b8e", + "4155d7ce 41569642 -> 4069f954 406a616e", + "4135030d 4137fbc3 -> 405743dc 40590659", + "c0ca7196 c0ca582a -> 00000000 00000000", + "c0cfe7a5 c0241266 -> 00000000 00000000", + "c1a4046a c14515f8 -> 00000000 00000000", + "c0a451f9 c0a3967b -> 00000000 00000000", + "c107379c c10734ea -> 00000000 00000000", + "c180cfcc c180cf5c -> 00000000 00000000", + "4154c7da 41569a86 -> 4069645e 406a63c2", + "beeb428b bedd6df5 -> 00000000 00000000" + ] + }, + { + "glsl": "vec2 cultmath_iv_clamp(vec2, float, float)", + "tolerance": "ulp-bounded", + "cases": [ + "be2ae9ac be297554 c17b22bf 3f346da0 -> be2ae9ac be297554", + "40a42325 40a4b22b c19d7006 3d2ed2b6 -> 3d2ed2b6 3d2ed2b6", + "c0ecb93a c0e80616 c1b31873 419c3981 -> c0ecb93a c0e80616", + "bfd52e3e bf874342 c19896ee 411745bb -> bfd52e3e bf874342", + "c14d0c1d c14d03d9 c115d628 40376a0a -> c115d628 c115d628", + "c18a0a2e c189dd20 c0952918 41a5b17d -> c0952918 c0952918", + "c0c517ae c0c51666 c19d7dd6 4125d972 -> c0c517ae c0c51666", + "3f1d6100 3f1d8280 c1280a61 41bb42d9 -> 3f1d6100 3f1d8280", + "419b7a07 419b7abd c0b64fc4 4171b13e -> 4171b13e 4171b13e", + "c15da06c c153e0e4 c1c2ef8f 41b2b201 -> c15da06c c153e0e4", + "c184a78f c1849651 c11f2d40 41368bbe -> c11f2d40 c11f2d40", + "41713f6b 4172afcd c1c6cf76 4154bd03 -> 4154bd03 4154bd03", + "4186e8dc 418a1180 c036c460 41652b83 -> 41652b83 41652b83", + "419b7728 419b8660 c16908fc 3f2f137d -> 3f2f137d 3f2f137d", + "c05654b9 c052fbe7 c0fe43e4 416bd5aa -> c05654b9 c052fbe7", + "c130e24e c12136d8 c14d779f 408c25df -> c130e24e c12136d8", + "c18ee31a c18ee1ae c0a3cbf4 410f4bef -> c0a3cbf4 c0a3cbf4", + "419a8b59 419bb62f c19ca0ee 4129123c -> 4129123c 4129123c", + "c12cd6d2 c125880e c1c22f69 4188c5f2 -> c12cd6d2 c125880e", + "416a7799 416a909f bf9ebe40 41970c10 -> 416a7799 416a909f", + "c1967ad2 c194743e c14cc307 419f37d3 -> c14cc307 c14cc307", + "c11c32ff c11c328d bf9ec620 4174a937 -> bf9ec620 bf9ec620", + "40eb2334 40fc13f4 c1a28a3b 41770d4e -> 40eb2334 40fc13f4", + "c1882079 c1880191 c108f424 40e5e5a3 -> c108f424 c108f424", + "417f0f90 417f4760 c16ed945 418df8ac -> 417f0f90 417f4760", + "413bc18b 413e86f1 c1352bf2 40eaf727 -> 40eaf727 40eaf727", + "3db1c0f7 3ddc1909 c1848b6c 40cb313b -> 3db1c0f7 3ddc1909", + "c0cda994 c0bec5dc c1a7d0ac 3fbf2fe7 -> c0cda994 c0bec5dc", + "3fc9be82 40bc6a60 c13154ec 415e10d2 -> 3fc9be82 40bc6a60", + "c0f79a4e c0ee8f0e c0013558 3f94d730 -> c0013558 c0013558", + "c13497d1 c134946d c104d4b0 40c0041a -> c104d4b0 c104d4b0", + "c00ea341 c0084b5f c1826c3e 419ffb92 -> c00ea341 c0084b5f", + "c18a4366 c1862ca6 c0abde8c 412fd2c0 -> c0abde8c c0abde8c", + "41915f28 4191626c bf80f430 411a1572 -> 411a1572 411a1572", + "c16a7cb3 c16a78dd c18d4481 419e91cd -> c16a7cb3 c16a78dd", + "40d45ba8 40de10d0 c192b2b0 41bf5abf -> 40d45ba8 40de10d0", + "405697a9 40569ec7 c1c32261 406c9334 -> 405697a9 40569ec7", + "41729925 41729a7b bf116b80 40a6c4dd -> 40a6c4dd 40a6c4dd", + "3e9aae31 3e9dc74f c14b30d5 4174c5d9 -> 3e9aae31 3e9dc74f", + "4199845b 41998b61 c072e720 41b4a3e9 -> 4199845b 41998b61", + "c176a81f c175e0f9 c1a410ae 41716039 -> c176a81f c175e0f9", + "418ddd66 419119a6 c1b2e97f 410d1b2f -> 410d1b2f 410d1b2f", + "419582d3 4195844d c1676270 40392092 -> 40392092 40392092", + "c0846295 c0845f13 c179460d 4150938d -> c0846295 c0845f13", + "418407f7 4186e851 c1098634 40fe5f9c -> 40fe5f9c 40fe5f9c", + "403fb52e 403fc592 bffd4810 41c25f77 -> 403fb52e 403fc592", + "41289eb6 4129d7f2 bfd9d330 416f2d26 -> 41289eb6 4129d7f2", + "411f011c 411f1790 c16dd464 41a550a0 -> 411f011c 411f1790", + "c0c500f1 c0c4b78b c100f18e 4053bbb4 -> c0c500f1 c0c4b78b", + "3f10bd6d 3f45a813 c1c65274 41ac7e2d -> 3f10bd6d 3f45a813", + "c199d5c5 c19802f5 c1a3dfd4 418d8541 -> c199d5c5 c19802f5", + "40c70f8b 410409c7 c0967e9c 41187e15 -> 40c70f8b 410409c7", + "4179e52f 41b5f6d0 c0f420ac 40d6e807 -> 40d6e807 40d6e807", + "40c062d4 40c1d1ac c18656e2 41b70939 -> 40c062d4 40c1d1ac", + "40951ecd 409527c3 c080c9b8 4114ac1c -> 40951ecd 409527c3", + "4138f6aa 413983de c11e4c88 4177c8d3 -> 4138f6aa 413983de", + "412981f9 412b047f c0b86610 3e1ca474 -> 3e1ca474 3e1ca474", + "c0033ce4 c003218c c1c70e36 40cb378e -> c0033ce4 c003218c", + "40f4a639 410935a4 c18cd45f 41b4aac4 -> 40f4a639 410935a4", + "c199cc1a c199c9b8 c18dcf47 41b491f9 -> c18dcf47 c18dcf47", + "4129080f 4129f041 c118a4bc 419b960d -> 4129080f 4129f041", + "40c3bde6 40c3c1da c1a4db7a 41a33262 -> 40c3bde6 40c3c1da", + "c18eb4b7 c1898361 c141ac1a 40f72088 -> c141ac1a c141ac1a", + "414e2cb4 41509dbc c1b964f9 414dd8b1 -> 414dd8b1 414dd8b1", + "c18ab76a c18a3472 bfbafc30 400984b4 -> bfbafc30 bfbafc30", + "c186cfb6 c17c8670 bfd81450 4193036e -> bfd81450 bfd81450", + "419502d8 4195239c c12da6b8 41ab6d61 -> 419502d8 4195239c", + "c12a1ca9 c129e60f c026bfa8 41214e89 -> c026bfa8 c026bfa8", + "41646d2a 41989373 c11d417d 40befd8d -> 40befd8d 40befd8d", + "416e3268 4181ee24 bf563220 417bb26e -> 416e3268 417bb26e", + "c0c50d72 be9aa858 bfb35300 41894251 -> bfb35300 be9aa858", + "410fef0b 4114c15d c164037e 3fd35dff -> 3fd35dff 3fd35dff", + "4106ccec 4113b120 c0832e1c 41374ad7 -> 4106ccec 4113b120", + "c1122227 c1121dd1 c0976074 41bfcfbd -> c0976074 c0976074", + "405b229c 40c1157a c09657e0 40a9b027 -> 405b229c 40a9b027", + "40356ebb 4035aee5 c1275a64 417ee03e -> 40356ebb 4035aee5", + "416aabe8 416aad68 c1732e00 41b19409 -> 416aabe8 416aad68", + "c19c627e c1908328 c115cbe6 40c0ca70 -> c115cbe6 c115cbe6", + "40722665 4072621b c1055216 405dafde -> 405dafde 405dafde", + "41678a1c 41679114 c1c6b822 40d80975 -> 40d80975 40d80975", + "c19ca737 c19c6695 c1acb651 41354095 -> c19ca737 c19c6695", + "4063336e 40642fe2 c1adaebd 418e5eff -> 4063336e 40642fe2", + "c1712405 c16e5dd5 c117cb49 3e140be4 -> c117cb49 c117cb49", + "c19dce77 c19912a5 c1bc55f1 402113dd -> c19dce77 c19912a5", + "c0a405b5 c0a3e9b3 c0904e90 417671c4 -> c0904e90 c0904e90", + "c0fc0142 c0fa5cc2 c1c0c25c 41b1480f -> c0fc0142 c0fa5cc2", + "c15d1713 c15b9439 c05a3f48 41bfdefb -> c05a3f48 c05a3f48", + "3fb56b0b 3fd2d135 c1b48c82 4114d13b -> 3fb56b0b 3fd2d135", + "4170d19c 4171a3bc c19fbfa7 3fe3863f -> 3fe3863f 3fe3863f", + "c14b6f6b c14b6d9f c1be59c2 412ba6a9 -> c14b6f6b c14b6d9f", + "4198e6e0 419aea78 c0bdfeb4 4118d16f -> 4118d16f 4118d16f", + "c138301c c1362e14 c19aa70c 41a80af0 -> c138301c c1362e14", + "c11dfa99 c11ce599 c0baad40 415e031c -> c0baad40 c0baad40", + "c03c4882 c03bb5fe bf57c940 413b82f0 -> bf57c940 bf57c940", + "bfba66b5 bfba2c6b c18c84f2 41c6c805 -> bfba66b5 bfba2c6b", + "403d4db5 403d599b c1a54a2e 4135439d -> 403d4db5 403d599b", + "40015870 40017510 c1ae3a3e 413ce3f9 -> 40015870 40017510", + "c00c1d54 40ce28d2 c00257d8 40c2bb20 -> c00257d8 40c2bb20", + "c11a9db5 c11a78ff c111f114 41796d4d -> c111f114 c111f114", + "41316e69 41346a83 c102f274 4156668e -> 41316e69 41346a83", + "c0a89455 c0a89343 c0ebb7f8 41c274b3 -> c0a89455 c0a89343", + "418193b1 4181fcff bfae7710 4142a6b2 -> 4142a6b2 4142a6b2", + "403330bd 40509b03 c11d0178 41ba6bd6 -> 403330bd 40509b03", + "4153e44a 4153e50e c067b9a0 41a1bf23 -> 4153e44a 4153e50e", + "3e872c37 3e88f9c9 c086cd3c 41c10f8a -> 3e872c37 3e88f9c9", + "bf29607b bd8df228 c18e971b 40d56d37 -> bf29607b bd8df228", + "40bc200d 40bd7293 c18cb2e6 3f66e0e0 -> 3f66e0e0 3f66e0e0", + "412340b1 412355df c0f8a1b4 41a1e434 -> 412340b1 412355df", + "40319fa0 405aa970 c115c1c8 415c3ac4 -> 40319fa0 405aa970", + "bfa9a330 bfa981f0 c134f6d2 3e550b4b -> bfa9a330 bfa981f0", + "c0fec5b5 c0f99187 c0259fc8 41a42329 -> c0259fc8 c0259fc8", + "c1116602 bf08a9e0 c16b115a 40a358ea -> c1116602 bf08a9e0", + "3f3c2838 4005c8b2 c1b09d88 413c16c1 -> 3f3c2838 4005c8b2", + "414bc019 41514167 c1bef8ec 417583e0 -> 414bc019 41514167", + "411720e4 411760c0 c1870ac2 4118ee9f -> 411720e4 411760c0", + "c13eee46 c1068c5c c0d6d0b8 40ba6b9d -> c0d6d0b8 c0d6d0b8", + "c1961087 c18e3e7d c1810f04 3fdefade -> c1810f04 c1810f04", + "c0368d10 c0365670 c183a124 40f44c44 -> c0368d10 c0365670", + "411d13e1 4131f877 c107134a 41a9b9c9 -> 411d13e1 4131f877", + "4164f70c 41654efc c034b8c8 41843645 -> 4164f70c 41654efc", + "c1790521 c17903f1 c147b26a 41b9bf33 -> c147b26a c147b26a", + "c12f80a9 c12f7b91 bea90200 41ae039f -> bea90200 bea90200", + "410a686a 410a68e2 c0949b80 3f353239 -> 3f353239 3f353239", + "4170f16d 4170f42b c0bdeb00 411d6f50 -> 411d6f50 411d6f50", + "41829c54 41844590 c0b21090 4168aeae -> 4168aeae 4168aeae", + "40a885ba 40a8b00e c0b3a388 40b8934c -> 40a885ba 40a8b00e", + "bf9827f1 bd3e69e0 c0e93a34 41c7e5a2 -> bf9827f1 bd3e69e0", + "c191992d c1919735 c0c36404 40d7fa1b -> c0c36404 c0c36404", + "3ffa7356 400a8e25 c191b746 40756fbf -> 3ffa7356 400a8e25", + "c0857213 c048d5ca c1c68db0 41a4db1c -> c0857213 c048d5ca", + "4146fa0c 41476694 c1815106 4126c3e1 -> 4126c3e1 4126c3e1", + "bec66eb5 bec48a4b c164719e 416e994b -> bec66eb5 bec48a4b", + "c18ca018 c18c9b94 bfc6cce0 409ba747 -> bfc6cce0 bfc6cce0", + "40f1cb06 40f1e692 c1c221ee 4199a6f1 -> 40f1cb06 40f1e692", + "c0ea7125 c0ea5ecb c15e548a 4125b260 -> c0ea7125 c0ea5ecb", + "c07991da 4097b8e5 c08bf50c 414fe6d1 -> c07991da 4097b8e5", + "c11c8b3f c11bb39d c1514879 40aa339c -> c11c8b3f c11bb39d", + "417b2ae2 417cf246 bec0c540 402ccfbd -> 402ccfbd 402ccfbd", + "40555e28 4112a0d6 c0b79f04 406b56b3 -> 40555e28 406b56b3", + "419c8784 419c9438 c0cfb5d8 4088d0b6 -> 4088d0b6 4088d0b6", + "c0963357 c096305d bfc37b80 419b422f -> bfc37b80 bfc37b80", + "c11afc4d c119f647 c12796b3 40c4f0f9 -> c11afc4d c119f647", + "40ab7f75 40ac8c1b c082c728 405dc627 -> 405dc627 405dc627", + "c0b680ee c0b38d3e c1893fa4 41a4c8c2 -> c0b680ee c0b38d3e", + "40b4b104 40e3d704 c1a7d43d 41bd37af -> 40b4b104 40e3d704", + "41578269 41578757 c0eddfa0 41348c24 -> 41348c24 41348c24", + "c115a92e c0fe3075 c138a9fb 41932920 -> c115a92e c0fe3075", + "3dd8d0a0 402bc19b c0b0c6e8 41bfaa95 -> 3dd8d0a0 402bc19b", + "3f97cb57 3f981769 c1c1af06 411f6be5 -> 3f97cb57 3f981769", + "c190834b c19082ef c193c6b1 418af900 -> c190834b c19082ef", + "41943b43 41943e2d c128a800 411c4587 -> 411c4587 411c4587", + "4120e024 413c26b4 c0c873b4 3fca5af4 -> 3fca5af4 3fca5af4", + "4037df54 41047103 c14cff93 4078e8c4 -> 4037df54 4078e8c4", + "c148f8d5 c139fe1f c1852559 408537b0 -> c148f8d5 c139fe1f", + "c0690a91 c06749af c14aff32 412b81be -> c0690a91 c06749af", + "c19f6b4b c191f42d c0e6f44c 41966dab -> c0e6f44c c0e6f44c", + "40f7861a 4123203f c11c6d52 4008aabb -> 4008aabb 4008aabb", + "3f12a142 408ae0f8 c0b39530 41745423 -> 3f12a142 408ae0f8", + "40390768 403a65a8 bedb9100 41727401 -> 40390768 403a65a8", + "40b04c92 40b06a4e c10085fe 412efb43 -> 40b04c92 40b06a4e", + "c1865b44 c1862aa4 c1b4b742 416b53aa -> c1865b44 c1862aa4", + "c088d213 c084a0d9 c0bf7b58 41931492 -> c088d213 c084a0d9", + "4183fbbd 4194e723 be89b0c0 416057b0 -> 416057b0 416057b0", + "3fc32196 403e7325 c1033254 403cd363 -> 3fc32196 403cd363", + "3dc4f408 3fb968e0 c1056182 41b2e56f -> 3dc4f408 3fb968e0", + "c129bc97 c12664a3 c14744ed 4190d5f8 -> c129bc97 c12664a3", + "c165e1de c13f32be c126ca54 419256a7 -> c126ca54 c126ca54", + "4143d101 414acfcf c13c80bb 401bbb03 -> 401bbb03 401bbb03", + "4145a9e1 4145aaa7 c1825548 415b19af -> 4145a9e1 4145aaa7", + "411f3b42 411f3cf2 c180855a 402112b8 -> 402112b8 402112b8", + "c183b601 c1621dca c1aab18f 418b4517 -> c183b601 c1621dca", + "41884d78 41884fe4 c1bd1616 419409d2 -> 41884d78 41884fe4", + "412b462f 414d0621 c1b6a298 41a24ff5 -> 412b462f 414d0621", + "40accfc6 40c77e1a c19ffd2e 412690d7 -> 40accfc6 40c77e1a", + "41976b6c 41977a4c c16915e6 414f39c2 -> 414f39c2 414f39c2", + "c1930f99 c1930f4f bff348f0 40a89900 -> bff348f0 bff348f0", + "c0ff9ca6 c0a36abe c0c66570 41487ac4 -> c0c66570 c0a36abe", + "bf23b573 bf239a0d c17c50b8 411e8701 -> bf23b573 bf239a0d", + "bfa3f3d1 bf9b4f8f c0b27424 41118c12 -> bfa3f3d1 bf9b4f8f", + "3e2ae7e8 3f9db1e3 c0a16cd4 41bf45ec -> 3e2ae7e8 3f9db1e3", + "41410dad 415b4093 bfc75450 41bd51d0 -> 41410dad 415b4093", + "40aeb6f8 40bb0c20 c15b3d6a 3f1db462 -> 3f1db462 3f1db462", + "413eaa80 4183ddc8 c12a35e5 4116a004 -> 4116a004 4116a004", + "40ee2322 41103b83 c1bbf400 400dbfab -> 400dbfab 400dbfab", + "41798558 41a2f4c8 c17ffca9 3f59ea16 -> 3f59ea16 3f59ea16", + "bfc2eb5a bfbb6fc6 c194c3e7 4185f1ef -> bfc2eb5a bfbb6fc6", + "bea24df7 bd094848 c18373ba 3ffe92d3 -> bea24df7 bd094848", + "c1a3bd10 c1979a9a c021b6f0 40863d62 -> c021b6f0 c021b6f0", + "403cda9e 403e2502 c0f33d64 409e154f -> 403cda9e 403e2502", + "c1a1a0fc c147f2a1 c12c39fc 4177a77d -> c12c39fc c12c39fc", + "c0277023 c00bb47d c10d8522 415cd6da -> c0277023 c00bb47d", + "c02695ec 40d2bd5e c0f78228 417bcbd5 -> c02695ec 40d2bd5e", + "3db31e6a 3eba5966 c16a4697 4168ae33 -> 3db31e6a 3eba5966", + "c020d848 bfecf4af c14a8498 40d6fec5 -> c020d848 bfecf4af", + "405dc69d 405dea73 c15b9bb6 41be2956 -> 405dc69d 405dea73", + "c0a0d4cd c0a09937 c1c486f8 3ef0ca72 -> c0a0d4cd c0a09937", + "c1957c64 c1956646 c09df7e4 40c3d3a6 -> c09df7e4 c09df7e4", + "c174b05c c153c880 bd87d200 41c26fb4 -> bd87d200 bd87d200", + "c0b32c32 c0a2f7da c1226282 41930f38 -> c0b32c32 c0a2f7da", + "4180f7fc 41839ebc c1b00302 41493014 -> 41493014 41493014", + "419e7def 41a17049 c12a6f77 40ff2667 -> 40ff2667 40ff2667", + "c0481e97 c047df69 c0de1db4 41a1f881 -> c0481e97 c047df69", + "41957446 4195904a c11b9f2e 41a4a6fc -> 41957446 4195904a", + "3f7e6f7a 3f8f1443 c1970fa9 3fd8873e -> 3f7e6f7a 3f8f1443", + "41054d98 41077f08 c1405b7b 4064f9d9 -> 4064f9d9 4064f9d9", + "c146772c c14631c0 c14d8e67 41809a3d -> c146772c c14631c0", + "40f435f9 40f4bb07 c19cee16 418ce8d8 -> 40f435f9 40f4bb07", + "c1581265 c14e28ef c17f5ed1 41b0843f -> c1581265 c14e28ef", + "c1869c3f c13548bd bf9d11b0 41843d0c -> bf9d11b0 bf9d11b0", + "413c8382 41417b86 c12139d6 418f2722 -> 413c8382 41417b86", + "4031b314 413f80e3 c1907c84 418f3c28 -> 4031b314 413f80e3", + "c11eed7c c11eea72 c15daf91 41958b84 -> c11eed7c c11eea72", + "be317752 be0598ae c1c2f0c1 40dfd353 -> be317752 be0598ae", + "c18371df c10c599f c1896d92 415d9fca -> c18371df c10c599f", + "c152bcad c10a8627 c114d275 41c3f313 -> c114d275 c10a8627", + "c17eccad c17ecc2d c1101c73 40a70bc5 -> c1101c73 c1101c73", + "c18cc046 c1893e8c c101e9a8 41675ac0 -> c101e9a8 c101e9a8", + "40d558a6 40d7fe22 c1922766 3e9422a3 -> 3e9422a3 3e9422a3", + "c19a6979 c1921921 c1587bcf 409df059 -> c1587bcf c1587bcf", + "c159f893 c14ea705 c173780c 414ec343 -> c159f893 c14ea705", + "419ebe28 419eeac4 c19e54bd 4180c070 -> 4180c070 4180c070", + "4115303e 4115314a c0f1e8ac 4088f831 -> 4088f831 4088f831", + "40acd66b 40ad256d c1626105 41ad81d2 -> 40acd66b 40ad256d", + "c189eef5 c188f557 c11a71f7 41854d69 -> c11a71f7 c11a71f7", + "c0bc35c1 c0bc33f3 c10bc86c 41515431 -> c0bc35c1 c0bc33f3", + "bf90d977 3f8540f7 c1b7ff44 41b68a4b -> bf90d977 3f8540f7", + "c11b6e09 c11b6d8f c196225b 4118a693 -> c11b6e09 c11b6d8f", + "3f38af1f 3f38c7e1 c175ae55 4136e1d5 -> 3f38af1f 3f38c7e1", + "3fca950e 3fcaa0d2 bed46dc0 417db36e -> 3fca950e 3fcaa0d2", + "40f36075 4189362f c151b898 41c4c49c -> 40f36075 4189362f", + "c1964afb c1960729 bfb5a4c0 40d8af23 -> bfb5a4c0 bfb5a4c0", + "c1606f1d c1604559 bfbc81e0 41254e5a -> bfbc81e0 bfbc81e0", + "c14e1177 c13f6dd9 c078dd40 401f342a -> c078dd40 c078dd40", + "c1828bd7 c1621609 c1c46464 404e4f94 -> c1828bd7 c1621609", + "c08fe80c c08fcf68 c1755a81 418fe089 -> c08fe80c c08fcf68", + "4154befb 4154ce8d c10abb3c 414fe2a9 -> 414fe2a9 414fe2a9", + "c1bb1a1c c17ba458 c186683c 41bfe384 -> c186683c c17ba458", + "3fb2bc18 4114e6b5 c064b878 410ecccf -> 3fb2bc18 410ecccf", + "4067584b 40752395 c14af879 41c6f8e5 -> 4067584b 40752395", + "4183498b 418c2d4d c0bd6608 41ab16e8 -> 4183498b 418c2d4d", + "c18ed0ea c182b2dc c1a190d2 419126fa -> c18ed0ea c182b2dc", + "c11298bb c1128dab c1846ff1 4186502c -> c11298bb c1128dab", + "c189ba73 c175814f c196abf4 414d86ff -> c189ba73 c175814f", + "40824a0a 4095a3f6 c1a9b982 418ef3c9 -> 40824a0a 4095a3f6", + "41606dee 4160a3a2 c1940a61 408a14eb -> 408a14eb 408a14eb", + "c1a8c9ac c1500c8c c0b06a30 40a7db37 -> c0b06a30 c0b06a30", + "418b29f7 418b6205 c1456ca3 4135135b -> 4135135b 4135135b", + "c09f72fb c09f71e9 c19f0b31 4167616f -> c09f72fb c09f71e9", + "3fa2f33d 3fa8bec3 c10d4c94 41c747a5 -> 3fa2f33d 3fa8bec3", + "c189b8b2 c14e12ac c19640ac 4190f3d9 -> c189b8b2 c14e12ac", + "40aee670 40b50690 c055b018 419bdd63 -> 40aee670 40b50690", + "411512f5 41152843 c0c9e0c0 41a759ab -> 411512f5 41152843", + "3e672aa8 3f800a6b c1ab31d9 41484189 -> 3e672aa8 3f800a6b", + "3ff6fc70 40013d68 c0aea074 4011939f -> 3ff6fc70 40013d68", + "c1ae89df c15a7f5a c0a79314 419cb40f -> c0a79314 c0a79314", + "411dcaa3 41486c9d c18cc5f2 3fdf6d06 -> 3fdf6d06 3fdf6d06" + ] + }, + { + "glsl": "vec2 cultmath_iv_saturate(vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "40bc1486 40c318aa -> 3f800000 3f800000", + "419a0e2e 419a0eae -> 3f800000 3f800000", + "c179e2f4 c179e084 -> 00000000 00000000", + "3fc89b82 40b6ab50 -> 3f800000 3f800000", + "c1508402 c14fc220 -> 00000000 00000000", + "3fab170a 3faca716 -> 3f800000 3f800000", + "c1764563 c17644f9 -> 00000000 00000000", + "bf78f6c9 bf619df7 -> 00000000 00000000", + "4117b12a 411b42da -> 3f800000 3f800000", + "418b912a 418c586e -> 3f800000 3f800000", + "417000f1 41754f77 -> 3f800000 3f800000", + "c1ab2523 c1823cd3 -> 00000000 00000000", + "411f2b2d 41202153 -> 3f800000 3f800000", + "418cbd4a 418cbe56 -> 3f800000 3f800000", + "c1689139 c1683a6f -> 00000000 00000000", + "418c0468 4190b918 -> 3f800000 3f800000", + "c0c2406c c0a378ac -> 00000000 00000000", + "c16d074e c16d0670 -> 00000000 00000000", + "c0b47325 c0ad5443 -> 00000000 00000000", + "41115a1b 4111740d -> 3f800000 3f800000", + "c1486a6c c148653a -> 00000000 00000000", + "c0dee8a4 c0dee7ac -> 00000000 00000000", + "c18dc2b9 c18db521 -> 00000000 00000000", + "41983fea 4198404e -> 3f800000 3f800000", + "3e61c21f 3e62c3e1 -> 3e61c21f 3e62c3e1", + "c19203ad c19202f3 -> 00000000 00000000", + "418e0a4b 419086f1 -> 3f800000 3f800000", + "c170b4bc c11b3ce0 -> 00000000 00000000", + "40b20bca 40b20d16 -> 3f800000 3f800000", + "c0dc2b86 c0da4a4a -> 00000000 00000000", + "c1367050 c13627e8 -> 00000000 00000000", + "413490ab 413a36bd -> 3f800000 3f800000", + "404d6895 408005fe -> 3f800000 3f800000", + "c18dc100 c18db8fa -> 00000000 00000000", + "416d092b 416d3835 -> 3f800000 3f800000", + "c12cada4 c12cacb8 -> 00000000 00000000", + "418d4ab1 418de7df -> 3f800000 3f800000", + "c06abff5 c05e310b -> 00000000 00000000", + "c09bcb44 c09bca4c -> 00000000 00000000", + "41761db1 4176402f -> 3f800000 3f800000", + "3ff25b0c 40902bad -> 3f800000 3f800000", + "403ea7c7 40fcae24 -> 3f800000 3f800000", + "c078ab20 c0193290 -> 00000000 00000000", + "41424e3d 41459023 -> 3f800000 3f800000", + "40879c1b 4087a2ed -> 3f800000 3f800000", + "c03e54db c03e1205 -> 00000000 00000000", + "c0cbdae8 c0cbd4e0 -> 00000000 00000000", + "c166f869 c15f306d -> 00000000 00000000", + "c02cad63 c024f50d -> 00000000 00000000", + "c04220ca c041f8d6 -> 00000000 00000000", + "c0f9ba0e c0f38b4e -> 00000000 00000000", + "c14904aa c1490376 -> 00000000 00000000", + "4170db8d 41b34f2e -> 3f800000 3f800000", + "c154bf36 c154a1f6 -> 00000000 00000000", + "c1083315 c107779b -> 00000000 00000000", + "4027ec87 403064c9 -> 3f800000 3f800000", + "c1834d83 c132f752 -> 00000000 00000000", + "419799bf 4197a315 -> 3f800000 3f800000", + "413abb35 415699c3 -> 3f800000 3f800000", + "c10c6e6c c102db9e -> 00000000 00000000", + "41977c6e 41978fd6 -> 3f800000 3f800000", + "4105ea55 410a3deb -> 3f800000 3f800000", + "418dbde8 41a980f0 -> 3f800000 3f800000", + "410d5477 41188a3d -> 3f800000 3f800000", + "c035f85b c0271365 -> 00000000 00000000", + "c1357d30 c12b289c -> 00000000 00000000", + "40645d06 406b51da -> 3f800000 3f800000", + "c1978fbe c16d5ab4 -> 00000000 00000000", + "40fbf2f5 40fd993b -> 3f800000 3f800000", + "419654e7 4196788d -> 3f800000 3f800000", + "40d59aa6 40d615ca -> 3f800000 3f800000", + "c0a14be1 c0a149f7 -> 00000000 00000000", + "4085538b 40a5d545 -> 3f800000 3f800000", + "c1552243 c154faa7 -> 00000000 00000000", + "c1499959 c136ed03 -> 00000000 00000000", + "41874a57 4187f85d -> 3f800000 3f800000", + "c0df6525 c0d85427 -> 00000000 00000000", + "c11a8b4a c0c0e7b8 -> 00000000 00000000", + "418e23eb 418e6451 -> 3f800000 3f800000", + "c17b6835 c17b6763 -> 00000000 00000000", + "c1240d89 c123e53d -> 00000000 00000000", + "418bfb71 418ced27 -> 3f800000 3f800000", + "c1039e51 c0e53e31 -> 00000000 00000000", + "c1956949 c194f905 -> 00000000 00000000", + "416a2db2 416a2e6e -> 3f800000 3f800000", + "40abda67 40abecf9 -> 3f800000 3f800000", + "416560ef 417eb6c1 -> 3f800000 3f800000", + "c183eebe c1838a4e -> 00000000 00000000", + "c199cce7 c1988cd1 -> 00000000 00000000", + "c189bfca c189be12 -> 00000000 00000000", + "411a2f7c 411a4250 -> 3f800000 3f800000", + "402dfbdd 4035e503 -> 3f800000 3f800000", + "411e726d 4120f183 -> 3f800000 3f800000", + "c095c680 bf1e4344 -> 00000000 00000000", + "c0fbbf1b c0fbb995 -> 00000000 00000000", + "41990502 41990702 -> 3f800000 3f800000", + "c08b765b bf52252a -> 00000000 00000000", + "c13d3ccd c13d33c9 -> 00000000 00000000", + "bee8d895 3e316d2a -> 00000000 3e316d2a", + "41213b36 413384ea -> 3f800000 3f800000", + "412a4215 412c41b3 -> 3f800000 3f800000", + "3f9f9f10 3f9fb130 -> 3f800000 3f800000", + "c14ed30e c14be34a -> 00000000 00000000", + "4104adf0 41051f28 -> 3f800000 3f800000", + "40387599 4063a0b7 -> 3f800000 3f800000", + "417a00a4 417a0e7c -> 3f800000 3f800000", + "c09afe2e bf425fd4 -> 00000000 00000000", + "c1107602 c0adad94 -> 00000000 00000000", + "41529230 4152a298 -> 3f800000 3f800000", + "4167bed6 416b492a -> 3f800000 3f800000", + "c0a4819d c0a47ea3 -> 00000000 00000000", + "c1261606 c121047a -> 00000000 00000000", + "c188c147 c188a22b -> 00000000 00000000", + "411f4b71 41874a0f -> 3f800000 3f800000", + "40996f4a 40c1a486 -> 3f800000 3f800000", + "c192afb8 c192ab8c -> 00000000 00000000", + "416e6eb2 416e76ae -> 3f800000 3f800000", + "c0538dd3 c053872d -> 00000000 00000000", + "4140bd2f 4140f151 -> 3f800000 3f800000", + "c01b766f c01b7171 -> 00000000 00000000", + "4169229a 419f42db -> 3f800000 3f800000", + "c0cbf4e4 c0ca65d0 -> 00000000 00000000", + "c111c9d6 c10e1b22 -> 00000000 00000000", + "412b3abd 412bd13f -> 3f800000 3f800000", + "40676d7e 40679d52 -> 3f800000 3f800000", + "c01b194e c01b0ce2 -> 00000000 00000000", + "417c9fef 417ca131 -> 3f800000 3f800000", + "c01f58ff c0133691 -> 00000000 00000000", + "c0b70a60 c0894cc8 -> 00000000 00000000", + "c189d643 c185b20d -> 00000000 00000000", + "4146d8f2 414ecade -> 3f800000 3f800000", + "415caa1b 4166d605 -> 3f800000 3f800000", + "410e59b5 41109547 -> 3f800000 3f800000", + "c02afad0 c02aeef0 -> 00000000 00000000", + "3e466470 3e476390 -> 3e466470 3e476390", + "c179b369 c179866f -> 00000000 00000000", + "416e7369 4179880f -> 3f800000 3f800000", + "411836c9 41186e0f -> 3f800000 3f800000", + "412a8af4 41300594 -> 3f800000 3f800000", + "c0402463 c03f7fbd -> 00000000 00000000", + "40d75ffd 40d781ab -> 3f800000 3f800000", + "c09c3612 c09c0bce -> 00000000 00000000", + "c0bb26d8 c06e0170 -> 00000000 00000000", + "c0b649a7 c09e31c5 -> 00000000 00000000", + "41463edc 41508d54 -> 3f800000 3f800000", + "40ca3f2d 4156c3da -> 3f800000 3f800000", + "c0cafb3d c0c1440f -> 00000000 00000000", + "c10ce379 c10cdfbf -> 00000000 00000000", + "c182a652 c182027c -> 00000000 00000000", + "414731bf 4149ea79 -> 3f800000 3f800000", + "c127afc3 c12628b5 -> 00000000 00000000", + "c19d6b0f c19d5835 -> 00000000 00000000", + "c14ad600 c14ad56a -> 00000000 00000000", + "c1035fea c1035e28 -> 00000000 00000000", + "c0b4325f c0b43169 -> 00000000 00000000", + "4174883f 417807d9 -> 3f800000 3f800000", + "c0785b4c c0692074 -> 00000000 00000000", + "c188473f c1880abb -> 00000000 00000000", + "c0b2456a c0b1220e -> 00000000 00000000", + "c0b8aa75 c073d05d -> 00000000 00000000", + "c119ea0a c116cc92 -> 00000000 00000000", + "c0c2e7fa c0b24b2a -> 00000000 00000000", + "bffba88f bffb9831 -> 00000000 00000000", + "c18bdfaf c18bddf7 -> 00000000 00000000", + "beff1dbb bee38d45 -> 00000000 00000000", + "c0d560b0 c0d55960 -> 00000000 00000000", + "41759830 418112f4 -> 3f800000 3f800000", + "c158ce39 c158cd47 -> 00000000 00000000", + "c13a2270 c04ca060 -> 00000000 00000000", + "c159fe1c c159e750 -> 00000000 00000000", + "40358737 4035a149 -> 3f800000 3f800000", + "c0781d5a c0355156 -> 00000000 00000000", + "41714482 41714586 -> 3f800000 3f800000", + "401d82b9 402bd2f7 -> 3f800000 3f800000", + "408e883a 40a9b206 -> 3f800000 3f800000", + "4152f0e8 41543fd0 -> 3f800000 3f800000", + "c16f5753 c1102f9f -> 00000000 00000000", + "c095845b c092efbd -> 00000000 00000000", + "c1254ae1 c1254235 -> 00000000 00000000", + "418d6bb3 418d6c09 -> 3f800000 3f800000", + "4195e2d1 4195e38b -> 3f800000 3f800000", + "409e995e 40c3c4c2 -> 3f800000 3f800000", + "40e2a587 40ec2a09 -> 3f800000 3f800000", + "412e8677 4130b599 -> 3f800000 3f800000", + "3f0ff364 3f0ffa1c -> 3f0ff364 3f0ffa1c", + "c14d2fd4 c14d10c8 -> 00000000 00000000", + "c0bf0a34 c0bf0908 -> 00000000 00000000", + "c107f3db c107f355 -> 00000000 00000000", + "c125bc71 c124d4c5 -> 00000000 00000000", + "416a3aa5 416a5853 -> 3f800000 3f800000", + "4040a8ee 40414012 -> 3f800000 3f800000", + "401661bc 402b3304 -> 3f800000 3f800000", + "41057145 410e85e3 -> 3f800000 3f800000", + "4188facd 41b0790f -> 3f800000 3f800000", + "c0880370 c085793c -> 00000000 00000000", + "415391eb 415392a5 -> 3f800000 3f800000", + "c1922656 c192258e -> 00000000 00000000", + "c0990487 c0985f3d -> 00000000 00000000", + "4080d0f4 4084221c -> 3f800000 3f800000", + "c17154da c1715182 -> 00000000 00000000", + "c12406ac c0ac9828 -> 00000000 00000000", + "c15d4227 c15b3fad -> 00000000 00000000", + "4087bbaa 40885566 -> 3f800000 3f800000", + "c12badec c12bab0c -> 00000000 00000000", + "40d605da 40d63b1e -> 3f800000 3f800000", + "c0d1ed92 c0c8c732 -> 00000000 00000000", + "c082583f c08014cd -> 00000000 00000000", + "bfa8a7a2 bf9f02de -> 00000000 00000000", + "bf01a570 4088e97e -> 00000000 3f800000", + "c192b198 c15dedb3 -> 00000000 00000000", + "40ee2452 410f356f -> 3f800000 3f800000", + "c150cd5a c105dae0 -> 00000000 00000000", + "c15230ec c1522f18 -> 00000000 00000000", + "c0d639c3 c0d62d8d -> 00000000 00000000", + "40aad1b4 40d649cc -> 3f800000 3f800000", + "c052af6d c048b383 -> 00000000 00000000", + "c041ce38 c0310468 -> 00000000 00000000", + "c18afe69 c189c0eb -> 00000000 00000000", + "c151bd27 c0fd72a6 -> 00000000 00000000", + "c1813b85 c1813763 -> 00000000 00000000", + "3e0339a8 3fb28ceb -> 3e0339a8 3f800000", + "c1124e24 c1124d8c -> 00000000 00000000", + "c1262bc9 c12629bf -> 00000000 00000000", + "40c03037 40c0eed9 -> 3f800000 3f800000", + "40ac8935 40ce8cc3 -> 3f800000 3f800000", + "41839134 418546d8 -> 3f800000 3f800000", + "3e696628 3e6a57d8 -> 3e696628 3e6a57d8", + "bf6a39f9 bf649447 -> 00000000 00000000", + "41032f7b 410334bd -> 3f800000 3f800000", + "c0055403 c003c9bd -> 00000000 00000000", + "c19fa29e c1248af6 -> 00000000 00000000", + "bd3fac20 3fc678e1 -> 00000000 3f800000", + "418c781e 418f06d2 -> 3f800000 3f800000", + "c11a42fa c1143a74 -> 00000000 00000000", + "bf1ca7b4 3f4c9ff4 -> 00000000 3f4c9ff4", + "c0d0b223 c0cd56e9 -> 00000000 00000000", + "414d4bda 4165a646 -> 3f800000 3f800000", + "c09c3f5b c00f726a -> 00000000 00000000", + "40249dba 4024ae26 -> 3f800000 3f800000", + "40f803b0 40f804e0 -> 3f800000 3f800000", + "bfe74dd8 3e3024c4 -> 00000000 3e3024c4", + "4027ddef 4089bc89 -> 3f800000 3f800000", + "4181beb5 41867067 -> 3f800000 3f800000", + "c16af231 c16aec17 -> 00000000 00000000", + "c13cb78d c13b2347 -> 00000000 00000000", + "418a9661 418a969f -> 3f800000 3f800000", + "be8aefc6 be151c74 -> 00000000 00000000", + "c1676dcb c166c707 -> 00000000 00000000", + "c0fdff3b c0fd8a8d -> 00000000 00000000", + "c183ab53 c183455d -> 00000000 00000000", + "414a7f03 418b2a87 -> 3f800000 3f800000", + "4191cbd9 419ba813 -> 3f800000 3f800000", + "bfa9036a bfa88f96 -> 00000000 00000000", + "414ef720 415283f0 -> 3f800000 3f800000", + "4133bcd3 413536dd -> 3f800000 3f800000", + "41814688 41818afc -> 3f800000 3f800000" + ] + }, + { + "glsl": "vec2 cultmath_iv_smoothstep(float, float, vec2)", + "tolerance": "ulp-bounded", + "cases": [ + "c13cd084 412662c3 419ef0b8 419ef4f0 -> 3f7fffff 3f800000", + "c16bccd3 4186bbaf 4188ec18 4188ede8 -> 3f7fffff 3f800000", + "c12cc9ff 3f39e923 bfa4f840 40002c40 -> 3f6b42d5 3f800000", + "c02510f8 4101246e c17a05b7 c17a0091 -> 00000000 00000001", + "c0f1ee68 41b1cccc 40538010 405387b0 -> 3e9aae73 3e9ab14d", + "c1b1cb87 4076f26a c15c315b c15b5961 -> 3e7d6bb8 3e8012e2", + "c032c390 4199afa1 c09db187 c09a6071 -> 00000000 00000001", + "bfe7e270 41397a24 bff9f51b bfeb08e5 -> 00000000 00000001", + "c0f46ecc 412b4f53 bf00907f bf008041 -> 3eac26a6 3eac292f", + "c116ba06 41af3c0e c179c720 c1779138 -> 00000000 00000001", + "c146de94 41b3fa31 4190018e 419daf9e -> 3f745d21 3f7b5f33", + "c1658247 3fd82143 4186d27c 4186d390 -> 3f7fffff 3f800000", + "c19fefa8 4172804e 418b4141 41a297b7 -> 3f7fffff 3f800000", + "c1c5eadc 419a2958 c08811e3 c087d56d -> 3ee58fca 3ee5b09e", + "c19420f1 4134ebde c0a34b23 c09e197d -> 3ed9897e 3eddadd5", + "c18ce2e9 4101e988 c1187e47 c1187ceb -> 3e6f8416 3e6f8876", + "c1296f83 41b31e84 c13a6730 c13a0d00 -> 00000000 00000001", + "c083ac7c 3f436876 404ea87a 4090467b -> 3f7fffff 3f800000", + "c0b1f598 41bee8c1 40a75e08 40a76758 -> 3e9c1578 3e9c1c8a", + "c1a36911 40f801e1 c17e84fd c16a34cb -> 3d8d2163 3ddfc899", + "c074a218 40bb22bb c078fa89 c078b857 -> 00000000 00000001", + "c14b2d77 415fdb87 400298dd 40c629a2 -> 3f13fcf0 3f4b3421", + "c1c11a44 40361f2d 414c73f5 414c76e3 -> 3f7fffff 3f800000", + "c147502a 413bc079 c0d6669e c0d66042 -> 3e126022 3e12694a", + "c110bd1e 41ad6970 c113709b c112b84f -> 00000000 00000001", + "c0625e28 41351b58 c0f4c913 c0f4c349 -> 00000000 00000001", + "c1c617f0 40705bb5 c1761e38 c1761d70 -> 3e81b94a 3e81ba76", + "c1abfe13 40921e95 c1729e88 c1195170 -> 3e181398 3edf32f0", + "c1852d09 415d7d55 413cc6b3 413cc789 -> 3f7cb36d 3f7cb39b", + "bff9a3f0 41bc170e 408fb6f1 408fb7ef -> 3e2373d1 3e23753c", + "c18d76b5 40e44b8e c035bfda c01bcd66 -> 3f252fc4 3f2b2d04", + "c19dc96e 412a5611 c0e6d857 c0e6bbe1 -> 3ebd0bfd 3ebd21cc", + "c1172f6b 413516f3 403ab87d 403af6b3 -> 3f2438a4 3f2449f8", + "c1c00923 416b0541 4193deca 4193f1fa -> 3f7fffff 3f800000", + "bfef85a0 40ba67bc c0f10a85 c0f0e097 -> 00000000 00000001", + "c15e51d5 415ad1ab 4126fb82 41440b16 -> 3f7639f3 3f7e05f7", + "bff5e9b0 41ae061c 412b90f9 4181be33 -> 3f0d11c3 3f5c8fc5", + "c1023bfa 40d8b03b c11e961f c119a8a9 -> 00000000 00000001", + "c1950b3a 40cabc7f c1284c94 c1271fe4 -> 3e7e0f2d 3e810400", + "c1c442d0 416ae01b 4192758d 41931f4b -> 3f7fffff 3f800000", + "c08793d4 41a17451 c03223a0 c020a6a0 -> 3c273673 3c6a2abd", + "c11c2264 41aef502 4180e2d3 418535e5 -> 3f69a0f4 3f6d64ac", + "c1236526 41204053 c16ade73 c1666981 -> 00000000 00000001", + "c1148528 40d85b70 4028a843 404ae1fd -> 3f55eaa3 3f5f4385", + "c1474c48 4168e4ca 413ef450 413f0910 -> 3f793c66 3f7942de", + "c1245e1d 4114ae56 40ab1e1b 40ab4ccd -> 3f64f8f1 3f650b61", + "c1a0aab7 41af0e75 c18fdda4 c1890670 -> 3bedfb96 3c684d52", + "c182146d 411b9fcc c09f41a9 c09f198f -> 3ecdc0f4 3ecde558", + "c1912494 41919c9a 3ec0570e 3f075579 -> 3f03a8b8 3f05464a", + "c1b15b44 401a14a2 c12502a5 c12501ef -> 3ef280a0 3ef28205", + "bf7c33c0 40104e04 c0b7bdde c0b7aab6 -> 00000000 00000001", + "c1ad20b3 4162d4bd c1ab515d c1510a52 -> 38f9f2c5 3e13ffdc", + "c0ff511c 4144ed2f c18936ce c18917a4 -> 00000000 00000001", + "c0a8fe24 41771c1a 419e3262 419e5ab2 -> 3f7fffff 3f800000", + "c1a54c0a 40043eee bf1be6a0 be0e887f -> 3f7631b5 3f793c6c", + "c0950ee0 4044ffe2 c083e5bb c083dd4d -> 3c614600 3c621e26", + "c1c300b7 419fb52a c0a02948 bfe8e001 -> 3ecfc629 3f035913", + "c0c0af9c 41bb20a1 40a9529f 40a9a9d9 -> 3ea8f735 3ea93a9b", + "c183fce4 41960334 c099a5ce c098a60a -> 3e83b70c 3e845198", + "c1c4f4aa 410ffd00 c1365cef c1341d19 -> 3eaf49bd 3eb25be8", + "c09afa04 3ff5acf8 c185f5d7 c16cfa9e -> 00000000 00000001", + "c1887797 41bbd615 3fefa56b 4004170a -> 3ee6ae8a 3eea4ca5", + "c0d53df0 3fa7ee2c bfbb5414 bfbb4f6c -> 3f38931b 3f3894b5", + "c11dbd2c 414b1de0 c1361d1a c11d7bd6 -> 00000000 35c95189", + "c0f56c0c 4076726b c120ce60 c120bad0 -> 00000000 00000001", + "c1a98608 4086b08f c134228d c12b9e9f -> 3eada327 3ebd1a57", + "c0602910 41853035 c1812711 c18126bf -> 00000000 00000001", + "c1988406 414649cb c035c5e2 bfd5f23c -> 3f060bfa 3f143d66", + "c056a888 41ac3640 41870eec 418aed68 -> 3f689238 3f6ceb1f", + "c1c47c08 4157df90 41764307 41764421 -> 3f7fffff 3f800000", + "c19621f8 4197a307 c157ba4c c15243bc -> 3d5a92a3 3d76162f", + "c1531c5b 4170bdb6 41344621 414b7903 -> 3f737941 3f7b100f", + "c141d9cb 4159275c 413371df 4153cf69 -> 3f79ee3a 3f7fdf0f", + "c1b1c410 41b032cc bf7d3772 bf559ace -> 3ef08a33 3ef338db", + "c06d7808 411021d8 419e700a 419fe386 -> 3f7fffff 3f800000", + "c07b8cd0 414c33c0 c04f2dfe c04f14b2 -> 3ba4dd88 3ba5970c", + "c11c734e 4181f959 c15acd93 c152593d -> 00000000 00000001", + "c1281fd3 41471d43 414cb9c5 414cbc2b -> 3f7fffff 3f800000", + "c19226d0 4082656e c1845c9c c1844974 -> 3c8abda8 3c8c359e", + "c1c7c42b 414f6936 c1114cbb c11144bd -> 3ec23dee 3ec247c8", + "c0562d48 40d34e0b 3f48d21e 3f8a6b91 -> 3ebf7bf9 3ed5f356", + "c0f7f538 4168f700 40794e38 4144b636 -> 3f086bf9 3f789d37", + "c1767566 40e825f9 41750f3e 41782702 -> 3f7fffff 3f800000", + "c13714aa 40ba73a6 c1286bb8 c120824c -> 3c05784e 3c9b12ed", + "c1842e5e 41b9e4b1 c185e18e c17710f3 -> 00000000 3b0eb3ee", + "c161262a 3fb0ab36 c11e5994 c11e5914 -> 3e37dd73 3e37dfe8", + "c0dd9b00 41826cff 3f6cbc74 40cdccea -> 3e87e65b 3f1c95f5", + "c0a4653c 4004d00c 40aef6d1 40af1cb7 -> 3f7fffff 3f800000", + "c1b68859 4193de1a 413625cb 41376621 -> 3f6be86f 3f6c51fa", + "bea411c0 4190e919 3ff41567 3ff419d9 -> 3d24f176 3d24f662", + "bfa802e0 408fe734 c0b24c5a c0b23566 -> 00000000 00000001", + "c11b03b1 40821d86 408e62d1 408e640f -> 3f7fffff 3f800000", + "c0000ba0 410b0fe8 c18e5e24 c18e5dac -> 00000000 00000001", + "c167b485 41344196 414450dc 41567624 -> 3f7fffff 3f800000", + "c1c5b093 414a4b5e 4196e4b7 4196e509 -> 3f7fffff 3f800000", + "be742c80 4196d6f3 c146351c c1462808 -> 00000000 00000001", + "c10aa010 415ce82c 4011dc46 4054144a -> 3ef603ae 3f0cab3f", + "c15d01e7 4184dfed 41201c0c 4122004c -> 3f610f64 3f62115f", + "c1774879 3fe4404a 416fe48b 416fec75 -> 3f7fffff 3f800000", + "c0f46ca8 41c09d7d c074e956 c070db6a -> 3d234223 3d287c72", + "c1bfd28b 415e4f27 c1970b1d c196e7fd -> 3d4aa188 3d4beddf", + "c1c26b4d 416204c4 418354cd 41848d47 -> 3f7fffff 3f800000", + "c00287f0 41c2ee39 402af4a6 402c971a -> 3dac47d4 3dae06bf", + "c0c597d0 414be675 c1947bd7 c19479f1 -> 00000000 00000001", + "be85e940 3fbfa917 40ae2996 40ae2b3a -> 3f7fffff 3f800000", + "c122e809 41a1a7fa 40630026 40631f3a -> 3edb1202 3edb1e2d", + "c12198f5 4130398a 40f2febb 40f32c7d -> 3f6e0576 3f6e1396", + "c129afbc 416177f4 c1757763 c17576ab -> 00000000 00000001", + "c1b3e0a2 41247a5d 419efdec 419f1c74 -> 3f7fffff 3f800000", + "c0db3454 4194b2b5 c11151db c11150b9 -> 00000000 00000001", + "c1100521 41baa489 4175ec06 41764ac2 -> 3f591655 3f594a7e", + "c1b48b89 40d82990 41550b9c 4179b784 -> 3f7fffff 3f800000", + "c1c0ef2d 41884fca c115db4b c113796d -> 3e962ae4 3e98ba99", + "c1869924 4109f87f 4195a186 4195a482 -> 3f7fffff 3f800000", + "bf52b4e0 419a8569 415fd941 41613b4f -> 3f53c619 3f550ca9", + "c047c7f0 416129dc c18c881f c18c7bf5 -> 00000000 00000001", + "c062e4a8 414f730b c0989d72 c0987386 -> 00000000 00000001", + "c142ea07 4170863b bfa78367 bfa74bb9 -> 3eb3e27e 3eb3ee4a", + "c0aa701c 415b1214 c05284a5 c045d19b -> 3d02e281 3d1c729b", + "bff40950 40396331 c15ab503 c15aa395 -> 00000000 00000001", + "c1286371 41a392d7 c10ea8eb c0bea2ae -> 3bffd503 3d70ec31", + "c18ccec9 4140c112 4108ef74 41128aa0 -> 3f76334b 3f792f48", + "c15e9168 4198e2c2 c08702e4 3fd063ee -> 3e54d64d 3ee96b0d", + "c02bc408 41891eac c137850a c137840c -> 00000000 00000001", + "c04c5188 4153eb10 40917bdc 4093fc8c -> 3ee99b2d 3eed3ff2", + "c0310240 414fe340 c0b44c45 c0b3d313 -> 00000000 00000001", + "c19d262b 3f0aa3ca 41582c38 4164c8e0 -> 3f7fffff 3f800000", + "bff10620 40f679bf c108bffe c0d7cbf5 -> 00000000 00000001", + "c11a497f 4152042b c19d572a c19d56c4 -> 00000000 00000001", + "c1963bf8 40855985 c18d3818 c18d2880 -> 3be552b8 3be86122", + "c0a24638 417a0f1b 417a7575 4181a3e6 -> 3f7fffff 3f800000", + "c1ad429c 414d90e4 c0bba6c1 c0bba41f -> 3edf9903 3edf9ad3", + "c1851d8a 4109483f 4137bef0 4137e524 -> 3f7fffff 3f800000", + "c1478204 4167de6c c022bc4f c022b911 -> 3e9d1b76 3e9d1cd0", + "c158956d 41b00330 40e65341 40e66687 -> 3f1fbde3 3f1fc438", + "c1124b87 41bc6d41 4153d707 4153d8f9 -> 3f43a85a 3f43a998", + "c159c69e 41768f8d c0ce0dc4 c0cdd558 -> 3e1cb33f 3e1cf8ba", + "c10115f2 4079934f 414f5b74 4154c134 -> 3f7fffff 3f800000", + "c1539892 40beaa17 413423b4 41342c48 -> 3f7fffff 3f800000", + "c11767e3 41746aa6 c10255f4 c0fa8338 -> 3c065500 3c4d1276", + "c104b210 41954100 c00f9e0b c00a7255 -> 3e039f45 3e06d7ff", + "c13fa665 41b6fc2f c0c00746 c0c0060e -> 3da00f5f 3da01149", + "c1b64755 41bdccfd 407c854b 407cf7a5 -> 3f1c7b2e 3f1c899c", + "c14d5044 419ce5b8 410bd5bb 4129fb39 -> 3f3d057c 3f4ff12d", + "c0a4afcc 41988cb6 c104f6eb c10458d9 -> 00000000 00000001", + "c1a509d0 41c528bd c0426944 c0425c7c -> 3eabd593 3eabd8cb", + "c14200b7 400291a0 4187548f 418758c9 -> 3f7fffff 3f800000", + "c0a17524 4089c502 c05675bc bfcfc289 -> 3db16815 3e9b8d90", + "c1281a42 41c3ed20 40375400 40b3cad0 -> 3ea7197e 3ee1eac7", + "c1491c36 40c7a007 4091e4c5 4093825b -> 3f7a3e32 3f7a92dc", + "c192b72f 40f398df c110f1b6 c109efee -> 3e959851 3ea19f9a", + "c13118ef 4137c746 c1361259 c131bd3b -> 00000000 00000001", + "c1497c41 41b94b4e c00b8575 be5aaeb0 -> 3e51f6ec 3e8da089", + "c1885636 419c9ab4 3f645cb2 3f934247 -> 3ef82487 3efd8fc6", + "c1878f46 40d52d3e c18ac9ee c18aa9be -> 00000000 00000001", + "be4cfe80 400b53ec c1473cb6 c10a2136 -> 00000000 00000001", + "c143873a 41963eea 4138b33e 41393fc6 -> 3f5ca94e 3f5cf70f", + "c1a44f68 41aacf69 c0b6dcf6 c0b52c02 -> 3e92fa8d 3e93dd9c", + "c1aa5f59 41966b07 c1316a09 c10d773f -> 3e254d7f 3e6b0123", + "c0ea9004 418b283d 409b1c1d 409b1dab -> 3efa4033 3efa41b9", + "c05baae0 40bd20b3 41185dff 413ce5d1 -> 3f7fffff 3f800000", + "c0ee4b70 4167a284 3f2f937b 3fd30c22 -> 3e9f1631 3ebf4019", + "c15a5c26 41b8b6e6 40286144 4028789c -> 3ed47f30 3ed486b6", + "c1a363d8 408c45d5 3ff8ffd5 3ff919ab -> 3f79112c 3f79124a", + "c1ba631b 41110aa8 c13da118 c12c7ac0 -> 3e92d6db 3eaa8d86", + "c103d4ac 418e5cd3 3e7775dc 3ecefe12 -> 3e7f337e 3e83d5fc", + "c12c87fd 41b91810 41063dca 4107536e -> 3f18ea06 3f19ab05", + "c13b2431 41830b3b 4197abfc 4198c194 -> 3f7fffff 3f800000", + "c10de268 3e8bf609 4030cefc 40573004 -> 3f7fffff 3f800000", + "c187e81b 4111e3d5 c15b7a40 c11243fe -> 3d30ca9e 3e5dea68", + "c19b9743 41c675cf c18f0d6d c18f0993 -> 3b70c1c2 3b7153f9", + "c18e591a 404b45ba c1131722 bff0e62e -> 3ebbb9db 3f5a8028", + "c19f4f78 3fe4e796 4141657a 41417b06 -> 3f7fffff 3f800000", + "c15086d2 41a307e5 c0930cf0 c0930848 -> 3e22eda0 3e22f2b0", + "c0d954e8 4047010e c1042c27 c0efe285 -> 00000000 00000001", + "c0526b78 41c0976b c11e91c0 c10ec630 -> 00000000 00000001", + "bfa6b570 41bbe007 405ac41f 405ad001 -> 3dc28dfd 3dc29c2f", + "c1207d01 419e9ca8 41630d2b 41684f35 -> 3f681463 3f6a9c20", + "c1aa54f2 40e40215 404f20bd 405edc33 -> 3f72edc8 3f7474cf", + "c10877fa 40ca8ed6 c0bb2b53 c0baa709 -> 3dafdc5c 3db1d6f8", + "c12e6fa7 41938f7f c0aff742 c0af52a6 -> 3db6b5cd 3db7f9d2", + "c06b3ed0 417c9724 c16cc4e4 c1562228 -> 00000000 00000001", + "c115ad00 412a444d c19748e0 c19746ea -> 00000000 00000001", + "c1bba97d 412f0a64 c18ba786 c18ba37a -> 3da53f3d 3da55946", + "c0d9d1d0 40cb4874 c0f729b9 c0f6fc3f -> 00000000 00000001", + "c1375e24 40978e51 c0a1701a c0a113c6 -> 3eb15b4e 3eb1de42", + "c19d77f5 401e40c9 c142a98c c142a5be -> 3e88d173 3e88d8d7", + "c199c3fc 418d667c bea88f93 be9c666d -> 3f049db5 3f04dcf4", + "c0b7adbc 41ac481d c137d7a1 c137d5c9 -> 00000000 00000001", + "c11fed9f 41a0cad4 418eacf6 418eb4ca -> 3f7bde92 3f7be20d", + "c0a6af80 419710e2 3fed08ba 3fed20c6 -> 3e544e37 3e545826", + "c0bb59a4 41848eab 40af960e 40bb098a -> 3f023809 3f085775", + "c19bb80b 4101f51f 419015b0 41902b50 -> 3f7fffff 3f800000", + "bfac1540 3e0258a5 417ff84d 41800b6a -> 3f7fffff 3f800000", + "c17e7c67 41be7a5a c1260598 c11c97ec -> 3d580db6 3d82d699", + "c161c014 41becfd5 3fff5ecf 40bd807c -> 3ec642ba 3f0a9e9f", + "bfd47a60 415cd801 c03e45b8 c03e3548 -> 00000000 00000001", + "c19b07b5 41ba957e 4088e296 4106f5f1 -> 3f14a6f9 3f3857ef", + "c18a5c6f 41c61bf2 3fee71be 402dda41 -> 3eddeb01 3eed6de0", + "c10ebe76 40a0b967 40b8289e 40b9f49a -> 3f7fffff 3f800000", + "c15918bd 41420b81 41898747 41a4b915 -> 3f7fffff 3f800000", + "c0c2b750 400bbf35 3f523964 3fbef74e -> 3f6d70ca 3f7aed1b", + "bf7747e0 41a7a84f 41296dd5 412c33eb -> 3f0a6389 3f0d69e4", + "c131991e 409979fb 416761ff 418005d1 -> 3f7fffff 3f800000", + "c1a8ba02 417aff96 c126b8ce c126b402 -> 3e50944b 3e509e9d", + "c1989487 41308c25 bf10d762 bf1021de -> 3f2b4610 3f2b4ea2", + "c1059b24 3f2a7314 c1991fad c15231bb -> 00000000 00000001", + "c15cdc1b 40361284 41140ae8 41140d94 -> 3f7fffff 3f800000", + "c18a6fef 418b9e03 c12f4c43 c0a99542 -> 3db405bc 3e8d0dff", + "bee91200 418a8970 c165d0df c14a901d -> 00000000 00000001", + "c1c35c63 41841352 c1272916 c1270600 -> 3e8a4475 3e8a697b", + "c1a6cbc8 3e8e5283 c0a94636 c0a94316 -> 3f540888 3f5409ea", + "c1b20d2f 418fee73 40a63fd6 40a640d2 -> 3f42d2d6 3f42d31a", + "bf7714a0 412c5964 c0efa784 c0efa688 -> 00000000 00000001", + "bc9f4000 4188c1a6 c129c8d6 c122a3ce -> 00000000 00000001", + "be6b3700 41654b51 c102a8c1 c0cdfc35 -> 00000000 00000001", + "c1b29b84 41719ba7 c0ebffba c0ada992 -> 3eb3d67c 3edae35e", + "c027ef70 41ba0eec 41638a6e 4163dfb2 -> 3f382ccf 3f3874a4", + "c155e21c 411d4d19 c146afef c14576a1 -> 3ba0433e 3bbab194", + "c19f8292 401eecab c1732063 c1701e09 -> 3dec2f2c 3dfd9f85", + "c108735a 41c40943 4159e626 4160e61a -> 3f3eeb0f 3f435da5", + "c14e6f7a 418f22d9 c15272d1 c12ba631 -> 00000000 3c69798f", + "c175dfc7 40e0bb77 4190667a 41906cce -> 3f7fffff 3f800000", + "c15b0b2d 412ce48b 41635805 4163a0d3 -> 3f7fffff 3f800000", + "c1836a9b 411c8a68 c10d92a3 c10c8a2d -> 3e4f53a8 3e527206", + "c1038af8 414befb1 c1325e6c c1325b30 -> 00000000 00000001", + "c059d110 4084f5fb 3ffd5e4a 40031e7b -> 3f4c94bf 3f4f70a1", + "c197ed48 419335c0 412f5582 4161de7e -> 3f659bf6 3f76aff3", + "c12f7933 416a2bc4 c1893fb6 c1893f7a -> 00000000 00000001", + "c0da2908 416bb4db c0aeaa50 c0ae6038 -> 3c3b53dd 3c3dc606", + "c16efc88 413936ce bf93cc6a bf84bcf6 -> 3f079c39 3f094fa2", + "bf066360 415f1d06 c19c631d c19c62d1 -> 00000000 00000001", + "c138e0aa 41941c05 c13374b6 c1214672 -> 39c640f3 3be4dd45", + "c09037ac 41602fb5 419aca08 419acb2c -> 3f7fffff 3f800000", + "c0c0e6f4 41854c05 416923af 41693391 -> 3f79e10c 3f79e6ac", + "c1a6ef30 417d5694 40abfeb9 40b1a337 -> 3f4d7a86 3f4ef987", + "c1550285 3fa476ba 4106305d 4128c723 -> 3f7fffff 3f800000", + "c17f8bf7 41a8f692 4109cf8c 411331cc -> 3f3c4edb 3f41abe5", + "c1c275f9 41b1a9dc c159f357 c159eed7 -> 3e094a24 3e0950b9", + "c1c08d79 4172df96 c13fbd5a c13faf76 -> 3e6779b7 3e6796af", + "c1a904a6 414eeab9 c1966b4b c1962aab -> 3c5a97ee 3c606c1d", + "c1471a03 3d6fcdb6 c18658e0 c18658ac -> 00000000 00000001", + "c11f517b 41b869c7 c11ee045 c11edf71 -> 360d132b 360f2551", + "c0dc0cd4 3f930697 c1350026 c129c75e -> 00000000 00000001", + "c08ad500 41a4aaf5 c1827431 c13f616c -> 00000000 00000001", + "c08f20a4 4066ecf2 40d76628 40e0bbd8 -> 3f7fffff 3f800000", + "c1c46c31 41400f95 41110ec8 4159b280 -> 3f7b4e5e 3f800000", + "c16f999d 419b1f83 c178748c c1787232 -> 00000000 00000001", + "c15595f4 415f4c8d c15932b9 c1566a9f -> 00000000 00000001", + "c11ecbb2 405acf9d c16213c6 c161bd12 -> 00000000 00000001", + "bf382300 41932b1f c1165c0d c1161bd3 -> 00000000 00000001", + "c122c6f2 41845e7d c1b73b38 c16cc878 -> 00000000 00000001", + "c1070dee 411c1c6d c097827b c09778dd -> 3ddc3e19 3ddc5f05", + "c157c95a 40da4615 bf19b614 bf19aeac -> 3f326b5e 3f326be2", + "c0776a58 4106f015 bf3909ba bf390146 -> 3e266f10 3e267232", + "c19c364c 406e0257 4054681e 40956a11 -> 3f7fc670 3f800000" + ] + }, + { + "glsl": "vec2 cultmath_iv_lerp(vec2, vec2, float)", + "tolerance": "ulp-bounded", + "cases": [ + "41469202 4146934e 40729cfb 4072a825 3f6215c1 -> 409987c9 40999198", + "4047727b 40477d95 40eef7b8 40f6ac18 3f2e77d9 -> 40c29b1c 40c7e4a6", + "41920a3e 41920aca 417297b7 41729db1 3dcca9a7 -> 418f912c 418f9213", + "c0b88e68 c0b7fa4c 41410a23 41411335 3c2fac75 -> c0b271a8 c0b1dbc4", + "c0b91ba7 c02cab62 40f4a9f2 40f4b186 3d9607c4 -> c0a0dc2c bfdb6524", + "c166d429 c1565443 c1177a3f c1147841 3dffd8bc -> c15efa1d c14c0a5a", + "c12ccc50 c11812d6 c169174c c168d700 3f20f8d8 -> c15fbdda c13dd3e1", + "be8facaf be8f9051 4167b171 4167b2b7 3dacf23e -> 3f774662 3f77577a", + "c132e1bd c12e4531 3f8e222d 3ff2a9f3 3ea2078b -> c0ec37d4 c0d81f6d", + "c080565b c08052a1 408ffb93 4090082d 3e00e955 -> c03c1d10 c03c1180", + "40347d1a 40354506 41724ed3 4173b83d 3edd3efc -> 41023ef6 410322b6", + "4183ea2f 418400e1 c07bf317 c07bee49 3f3b1dd7 -> 3fc69298 3fc90e30", + "4116b5d8 41499b08 c1951155 c1949c4d 3edee28d -> c085ad12 3ed38e20", + "c18b73c8 c13db247 c01d363d c0168163 3f1b60c9 -> c13b9fb8 c02d03c4", + "c107c39a c1065900 4101f15d 4101f4cb 3f496015 -> 409043f4 40955902", + "41013e7c 4101586c 41746a68 418d8f74 3f2c6b78 -> 414ebee0 4168fbce", + "c199606f c1995e9b c1972292 c196c834 3f0de496 -> c198235f c197ee71", + "41291bd9 417be437 3fefeea9 3feff237 3f37679e -> 3f222580 411839c5", + "c185f261 c1843f23 412bd7ee 412bf42a 3e9e4f6a -> c104fa7a c1007e1c", + "c0e4e4a5 c0deb867 419b8ebf 419b9975 3e3af08f -> c01547e0 c0069ec8", + "c007f20c bfeb23c7 c19dddc2 c19cbaea 3f56400e -> c188d076 c183a4e7", + "419881df 419b7ce5 40e94552 41051a8f 3f3ae7b6 -> 41232089 413976c4", + "40044742 40063a7e 3f7ceb1d 3f8011b1 3f35d0a8 -> 3fa3b52e 3fab857c", + "401048da 4091aacb c0932f99 40a26601 3f1b3e10 -> c052e59a 40c86661", + "c145c067 c145964d c081d625 bfa845ab 3f05daff -> c10061f4 c0d25f62", + "4089bd37 40b26861 c0f8d9dc c0ac9dc0 3eed12c5 -> bff0626c 3f8acf94", + "c191a4cc c1919598 4025c018 4038ace8 3e6461de -> c1591b3f c157e7ed", + "c0dac4f8 c0dabe54 c087723a c07c6e25 3f12b1e0 -> c0ab09b1 c0a5b518", + "c176a0d0 c17699ba 411c5e7e 411c686e 3e285151 -> c1346417 c1345a34", + "405f761d 405f7e63 c0c4cc67 c0be98dd 3f395fc9 -> c05f6289 c0565925", + "bff93805 bff9255b 419a8e2a 419e70f2 3f7dcd7b -> 4199172c 419cf3bc", + "c1909e5c c1909a54 c172aff3 c172ae89 3e5a8ac7 -> c18ba795 c18ba28a", + "c15964bd c159449f 414c92c4 414ca72c 3f2f6578 -> 408f416a 408fc99a", + "c17130be c12b141a 4153a16e 4153a562 3ec321f9 -> c0beaa6c 3dc0bf80", + "c078271c c076a4f4 4148cdf5 41490403 3efbc6bd -> 40860f12 40876442", + "418d22aa 418eb22a c15f881b c158eaff 3f6f81f8 -> c141ddc8 c135a33a", + "bf325714 bf2c772c 40e3b32e 40e3b7da 3c3fbad2 -> bf1b014e bf150f5c", + "417bfc1d 417c1e9b 4151553f 41568e41 3e3322f8 -> 41747ff4 41759260", + "c1897e75 c1897e0b c1067901 c10613c3 3ed34118 -> c1590308 c158d816", + "4116cb45 411703c7 c0766832 c070953e 3f7c887f -> c06bc5d4 c064460c", + "40cb69fe 40cb870a c15ee071 c15ed693 3ea43a60 -> be1b2240 be158c20", + "419893ac 41989d9c 40263d0a 402658b6 3d445253 -> 41924208 41924c9d", + "c08cbc33 c08cb985 c08328f4 c0832304 3f3b0546 -> c085bf67 c085b66d", + "40ebdf2b 40f61b15 40d783bb 40d7a765 3f4a9353 -> 40d3aa23 40e61b70", + "413b696e 413b6aae c16e202e c16e1fa6 3e9f1f2c -> 405ca398 405caad0", + "c0c9af89 c0c9a8b3 c0d2ca48 c0d2c958 3f4186c3 -> c0d096a9 c0d089f2", + "3f1ee353 3f1f5c2d 40149c4b 40338765 3e8da089 -> 3f8b9e83 3f9d0688", + "c1515b10 c1514ab0 c094c115 c04e8ed6 3d0eb358 -> c14ca7ca c14bcc0d", + "3fd1419e 40395011 40553527 40613d19 3f48ee1d -> 3ffd0b75 408bfd2d", + "4194c2ba 41966b8e c178c3a5 c16ff767 3f396dec -> c0c926bc c0b0f5d0", + "c1975f06 c19259ea c18b58a7 c1834cdd 3e46451a -> c19603cf c18e770c", + "401e2817 401e3569 c1915c4e c1371719 3f7a72d0 -> c18dc936 c1323fd7", + "413b41ca 413b4236 4007f8fd 4009c473 3f084ac0 -> 40d351dc 40d3cd76", + "c168c70c c167fca4 409dc051 40fdb9af 3f0ec006 -> c06dbd98 bffb8fc0", + "c0a92046 c0a9068a 41583b9c 4158478c 3e705052 -> bf5fbcf8 bf5e91f0", + "41971fa3 41976999 bf89cc2b bf8999f5 3eafc6f4 -> 41405e90 4141276c", + "40e533ec 40e535ac 405f5338 405f7fe8 3f389d89 -> 40906eea 4090820b", + "4123d860 4123db7c 4128484e 41291d42 3f36feca -> 41270225 41279fb3", + "419d1779 419d194f c05e3f56 bfd301f4 3e78100a -> 41609c10 4167b29b", + "400c161a 400c3966 c181428d c18141b7 3f25e20d -> c11b35be c11b261e", + "c0368ad0 c0368920 c1316dd4 c1316a28 3eb67d35 -> c0b93893 c0b934d0", + "40ec6335 4137175e 41355680 41366ad8 3e623653 -> 40eb9ce3 41454768", + "c191520f c18e8485 417a5681 417c67af 3e9936e6 -> c1026ea9 c0f50f92", + "4110dcf9 41110d6f c11b202a c11000ee 3f46c061 -> c0b05fbc c09e6e8c", + "41907899 41967b9f c174c672 c174c32c 3f1112e9 -> bfa29c70 bdbdac00", + "c15f1563 c13dde43 419b6b83 419b6be1 3f2e101a -> 40eabaa6 412d2a81", + "4103c7a3 4103f895 c0c08d31 c0bdbab7 3f6a247a -> c099f546 c096a50c", + "40c77a6d 40fc2b03 c0cc204a bfefe30a 3f7c5bbe -> c0fa5337 bde5d6c0", + "4155f0cb 41561615 c1417513 c1416455 3f2a216c -> c0639b4c c0627684", + "c10b8842 c10b7ba2 41485396 414941ea 3f040855 -> 400ee698 40111ed0", + "c166500b c1664fa1 c0dcaffd c0dc83f7 3f2fe6c2 -> c113e1a0 c113d1cd", + "4099e0e2 40ef1d36 c1930554 c191f828 3e3756ef -> 3e38cc00 40560c7e", + "4147c730 418a2644 40ffdff3 412af1c6 3f03cd8a -> 40f6c96a 4182ba16", + "40ac6c71 40ac9f17 c10067f0 c0f5c37f 3f1f714e -> c03e1316 c02fab8a", + "41753c28 41753ca8 c0df9267 c0c55ea1 3f712568 -> c0b6250c c09d7488", + "402e3441 4033236f 413cabf6 413d47b2 3e91c0fa -> 40a90639 40ac8a48", + "4172f4cb 4172f585 c02dbbfb c02ab565 3f0a300a -> 40b0b9bc 40b18d08", + "4103a5de 4103a6fe c1ab76d4 c19195ca 3e85afbc -> 3ef76ba0 3faa03b0", + "4132591f 41428ded 412a3206 41335eb6 3de924c3 -> 412f933a 4142abb4", + "417d7365 41804aa6 c1011a89 c0df5a9d 3cf408af -> 4171f620 4175b4d0", + "41447ef6 41acf9dd c18ff11d c1584c5a 3f21f02b -> c14c733c 40a9a930", + "c1735fa2 c170001e 3fe5d166 3fe728da 3df1dfc9 -> c153a2d9 c14fd847", + "c187a5e0 c187a54c 3f85d364 3f8675dc 3e994dbf -> c1390e84 c13906ee", + "414df6c9 414e7d2f c140f518 c140df14 3f4f2491 -> c0ea7f5a c0e8756a", + "3ff01ab2 3ff0dace c07c2b7e c07b1392 3f54dcb2 -> c03dc27b c03c29cf", + "c185bea5 c185bb39 404fa8a6 405dca2a 3d323aa3 -> c17d97a5 c17d6926", + "4183671d 41836b77 419c0187 419c38c9 3eb8c64c -> 418c4690 418c606e", + "414cf4cc 419044e2 bfc2b919 3fdd3199 3ed5b993 -> 4094b3a8 4156864e", + "c1931cc1 c192b2c1 4066c575 408df645 3e3d7157 -> c16545ad c161d51e", + "4100f2a8 4100fc5c c02974a9 c0284997 3e954e00 -> 409df600 409e3aac", + "c0866355 c085c04b 415bb171 41bc4438 3ef73444 -> 408e55a5 41135d6e", + "4030b1d3 40368e6d 40cc436a 40cc45f6 3f0cedb7 -> 40968bc0 409b187f", + "4171b7ef 4171b8f9 4170bac2 4170d4c6 3e546bc3 -> 41718333 417189da", + "4146c58e 4146c6e2 c1b25131 c1682efa 3ed3e7eb -> bff8cf40 3fa34f38", + "4172529f 41725309 c1259c5a c0be79d4 3f44aac5 -> c08e2192 bf880048", + "c1a0feff c19c558b 4096cdb7 4096de59 3e0519f7 -> c187c669 c182814a", + "413b8985 414d9f5b c16bd598 c16bb618 3f25f407 -> c0c54756 c0898032", + "bffbb2b4 bffb4b6c 419cab01 419cab37 3f4a6cbc -> 41712326 41713a98", + "c10463da c1045914 c0761b30 c075bd10 3f0a2c9b -> c0bc5450 c0bc19bc", + "41925812 419410da c12709d5 c125d197 3ebfb3b2 -> 40ee89b0 40f8eac6", + "407ecaf9 407ee377 bfe202fd bfe1fde3 3ed37225 -> 3fcdb832 3fcdff86", + "c086dff7 c086da95 c1941e8d c1941ba9 3ef5117f -> c130f53e c130ee7e", + "410f424b 41834bd2 c0f2061a bf177534 3f3e4bf1 -> c10de44f 41151092", + "c1a0dbb2 c1687698 be6239f8 3e12ebf8 3f41ae18 -> c1148483 3f4ac130", + "3ede79da 3edea9a6 c1944b31 c194496b 3df7345c -> bfed7f66 bfed6e92", + "406f2374 40754c7c 418e288b 418e3a91 3f4ee734 -> 4170029e 4172e8a8", + "c0d077fe c0cf4aa2 c19da6b7 c187d807 3f07ca91 -> c1588121 c1407806", + "4038b793 403918ed c19ca9ba c14f5cd4 3e81da2a -> c0341639 bf903a0a", + "c1082334 c1081ac8 4125c6ee 41267326 3f794126 -> 411dca2a 411e8276", + "c1099647 c0bd183e c0293cf8 c0222de8 3ef20534 -> c0e1c9f2 c042b41f", + "c19c92f5 c19c918d 3ef444a8 3fddf516 3f5d11a0 -> c0109630 bf9612a0", + "bf037ae5 bf033a9b c1333b89 c0ea6aea 3f518046 -> c1142ece c0c2caea", + "413eae0e 413eb32a 40bd87a0 40bdf0f0 3e1070d8 -> 413125d3 41313315", + "c12285dc c0b0e388 3edc8341 3ee476bf 3e2f3942 -> c112359b c06da632", + "40f12e44 41171bde 3fb10b85 3fb38f9b 3ef041c8 -> 407044b3 40d21ba8", + "c1212338 c1210b6c 3ef25ded 3ef2f793 3f4d53d3 -> bfcf2998 bfcdb3b0", + "41058aac 41058d4c c1078d25 c09522f2 3f4c2902 -> c0a22302 c001a9e0", + "c18b6f5c c10f780c c1323587 c13234fd 3d3133cf -> c18c2fbc c10b1d30", + "c0a16af1 c0a168bb c14fab2d c14fa8fb 3ee94ce0 -> c10a8fda c10a8d3e", + "c18aae47 c189bcb5 c0cfd62e c0cf924a 3f2b72ac -> c12277a4 c11f3a32", + "c092a412 c09266a6 419efd9c 419f1d1c 3f42ab9a -> 41602575 41608b6b", + "c15e3491 c15bdf93 c189f633 c189ea99 3f1d815b -> c1805860 c17cde2f", + "c16c2e6e c167d9d0 c18e876c c18e86a6 3de0a8a4 -> c172049c c16d3636", + "4084fd4e 40d88cb2 41136e06 41158bfa 3f7893f7 -> 40d10770 413ceb42", + "c0ee3021 c0e2a0ab bf02243e beff7384 3f4c16af -> c00cf822 bfc5de84", + "409d176d 40a52e93 c08e1b11 c08e1a37 3ecd642c -> 3f874948 3fb4a2a6", + "40ab7567 40ab7661 c16e65c6 c16d8e9a 3ed54365 -> c0451eb6 c043b572", + "c0d4e6f4 c0d4e184 417f00d5 417f034b 3f24936f -> 40fbd2e8 40fbdefe", + "bed721f8 405a00df 416d4fec 416d7cfc 3f68ae7c -> 411f6fc5 418a3bd3", + "40efe249 40efe377 c18cd562 c18cd512 3f51b23d -> c1510740 c15105a8", + "c15e6a6d c135222b 41087d89 4108acef 3eb3dbe7 -> c0ddad59 c05bf518", + "40b2d254 41054402 40801b55 40853043 3e09c59a -> 40a03293 41023223", + "bf84e8cc bf84b294 c1a14374 c1691ce1 3f7b3694 -> c19e6a9b c16509c4", + "c1742b6e c1732dee 3e874328 3f13bfac 3f46a921 -> c050b614 c03a2224", + "c0aa2179 4045bbc2 bf7d4038 40e2cb77 3ede0b78 -> c0e2bc75 410780c0", + "c097257f c0482011 c186cac6 c186939e 3de0e40e -> c0c75d5a c08e93a0", + "406cde6d 4074fcf3 c0bc62ad c0bc5bdf 3e5d9f38 -> 3fcc9b22 3fe061c4", + "4121039c 412110d0 4109e651 4109ea17 3f3e18aa -> 410fcfd6 410fe9a6", + "c00c0f6c c007e9d4 c11ab41f c11ab399 3e2cdd47 -> c05d9484 c058bb5c", + "c1127035 c0eb8aba 4186d1b7 4186eda9 3f4a26c2 -> 411f7b23 4152f543", + "c16db51d c16d0fab c0b2355f c0b22501 3eb1a532 -> c13a5f2f c1397d7f", + "c140267c c1401896 40ab474d 415346ba 3f730ce8 -> 408f1264 413eec6a", + "414c8493 415e2805 c1761c91 c17564d7 3f0a59a1 -> c0423160 bfa7ea98", + "414b63a2 4178f4be 4170c751 41782ddf 3e6b3060 -> 414982d2 41819f23", + "413e2616 415859ea c1252970 c0885100 3ea8eb2d -> 40808f7e 4103217b", + "41816f3f 4184df5d 3fcf7ccd 4031c34a 3e0f74fd -> 416145ec 416bb46a", + "3d9f06a0 4080a206 40bdda7e 40c78ff2 3f7b10aa -> 3ffa19d1 4120f4a8", + "c188b1d8 c188adc4 c1887466 c1786d77 3c882703 -> c188b0e4 c18878aa", + "c00db8bd c00934a3 4117558a 41175c4a 3f68c2f2 -> 41055aa0 41078893", + "40afe50c 40b070a4 4111a990 4112116c 3ea17e7d -> 40d421a6 40d51aca", + "c0ec1986 bed09998 c1476629 c1476231 3f78d9f6 -> c198c5a6 c0ab299e", + "c108d029 c108cbe5 c0c22e7e bfcb9728 3edfccb5 -> c0eeea35 c0b03c7e", + "bfadda24 bf49dff8 417fda3b 418c724e 3ecbe096 -> 40aa5853 40d7c645", + "41848a13 41848b51 c04f986c c04c02e4 3eef6626 -> 40e9b9dc 40ea97a8", + "405015ff 40876300 c1931c5a c1900e0c 3f48be5c -> c167c696 c14705aa", + "c1215ed9 c1215d75 c1883689 c188362f 3f3139d1 -> c16e41ba c16e3ee2", + "c0cc51b0 405e0ec0 c1886389 c18824d1 3f3cc729 -> c1ac1f92 c08be17e", + "4044f39f 4061c4e1 c0011c94 bfcca999 3f31c979 -> bf460634 3e8f6228", + "415d2fdb 417b88e5 c1581519 c157ec37 3f0b1fdf -> c003c494 3f5fc3c0", + "40f5f9ba 40fbb0ee 4170fd40 4185f420 3f7eba62 -> 416d8f31 418705c3", + "bf3fbab5 bf3fb1cb c14de7be c14de744 3f38cdd8 -> c117f9ad c117f860", + "4006aebe 40c82101 bf8fe427 bf8e66d9 3f396606 -> c04f4b16 407b2785", + "c14ce1a8 c14cdfd8 c0b71eb3 c0b71205 3f793a96 -> c0bd20dd c0bd0d5d", + "bf92677e bf66b884 c047638b c0475e45 3f50cd78 -> c03cc8e2 c02095f1", + "c14d2305 c147fc55 40dbc3f7 410c1394 3f1927b9 -> bf9e0890 3ed15ba0", + "411710d0 41197aa8 40b9ddf8 40b9e3f8 3db7d0c0 -> 4111a1a9 4114433a", + "40798378 40799598 c12d581d c12d575d 3e58131a -> 3f4a27e8 3f4a8240", + "c04a1bdc bff23b48 c18f835f c1897ddb 3e081fb0 -> c0a950a4 c0707772", + "40cb7054 40cb806c c192ada0 c192ad6c 3f03bcf9 -> c0cb3518 c0cb1c4c", + "41196be5 4119eb6b 4187cf52 4187eb0a 3d8d5956 -> 41218b7e 412217a5", + "c19a6c17 c19a6941 413d7e30 413d7ec4 3f4fc0a7 -> 40bf1c28 40bf31a4", + "4132fc52 41330eea c0e29a4d c0e238f7 3f7be526 -> c0d95f48 c0d8b5bc", + "4195ffa2 419604ae c1009dff c1008d09 3e01c649 -> 4175ac2e 4175b9b4", + "418a178a 41a367be c0fa033f c0fa0221 3f0963dc -> 4006cfb8 40df0074", + "40c32cbc 40c705e4 4018fb36 4115a6ae 3e206f2d -> 40affa23 40d7564b", + "41872725 4188bf6b 40f9bb6f 40f9e4c1 3f5bafdc -> 410ec25c 4114c15a", + "c129bc5e c123fc08 c133e2d8 c133e17e 3d941510 -> c12ae2b6 c124b7d2", + "c0a79709 c0a73837 c140445b c1403dcf 3edcd1da -> c102a859 c10261aa", + "c17cbfcf c17c4231 40ac564c 40c94e84 3e2818ca -> c14531ad c1423eba", + "c0fd4f96 bfd1a4e8 40f214d2 411e483b 3f0b23a9 -> c03a8040 4100a967", + "4159a147 4159a519 41680f68 418a799c 3ed47f69 -> 415f9ce2 417243ca", + "c07ef034 c079c48c 413f1acf 41642139 3f62fe07 -> 41211516 414459d3", + "c1748b3f c1721d91 419a2cde 419aa972 3f3ea3a0 -> 41256121 412a5751", + "c11b1b83 c11b1ab3 c1431e1e c14316be 3f41ecb2 -> c1396b16 c1396412", + "400b4b32 401fa31e c18bebcd c18b2911 3edcc885 -> c0ce1e2f c0be3f75", + "c18a36bc c1231115 415b1022 416be4fe 3f46ae46 -> 3fa122e0 416a8b77", + "418071d4 41a95574 414635c1 4155acb7 3c943922 -> 417e590f 41a8f15e", + "c1962b72 c18cd408 c0deea3d c0d6026f 3f2bbede -> c13a27f7 c117f3b1", + "41377b50 4138d4a8 c0dde206 c0ddb1c2 3e9f7bc8 -> 40b6b3d7 40ba4cb6", + "bf9ffc57 bf9b2fe9 c1837a89 c1837a2f 3f68110a -> c170c96c c16fa408", + "c0ef94a9 c0da565b bfa86428 bfa857b8 3f7c3158 -> c003ecaa bf3e3c50", + "c166a746 c166a572 c0fdb305 c0fd1293 3e844ba1 -> c14bd55d c14bbe56", + "c03d627e c0221292 c19899ca c198992a 3f6be184 -> c1919d30 c18b0d51", + "c15777fd c1449241 c149aa91 c148e043 3f3309d1 -> c15b082f c13a5d9b", + "c01d354c c0009444 3e573434 3e946066 3f78431a -> be9bc638 3f277470", + "41976599 419774bb 41064d49 41065813 3f76455d -> 410c976f 410cdd32", + "408cf5ec 40de368c 412cea85 415e4c6b 3ee8f1f3 -> 40c53428 41342ded", + "c13fa2c2 c13f4216 40f53a02 410cf74f 3f60e454 -> 40a830c8 40c9dabc", + "4184bf41 4185091f 416d495e 416d8392 3e754617 -> 41814cbd 4181af45", + "c18c82fa c18bfeac c12cf2f3 c12cb74d 3e08995a -> c1855f45 c184c557", + "40c60744 40c62b8c 4000da9f 400133f1 3eecb63c -> 408831fa 40887bae", + "4068e617 40690619 41779b46 41779d7a 3c434dc0 -> 4071ed65 40720de4", + "412a1150 412a44f8 c19a63c3 c19a25a3 3f1dd492 -> c0fa8e40 c0f94e0c", + "3db3a340 407c87c6 c17124bd c16e8deb 3f3875af -> c159d766 c0db8933", + "41023db7 41023f25 c0a4ff23 c09e97fd 3f48b9ab -> c012464c c00831a8", + "41829389 419263c7 c187c8c5 c187be6d 3f6876f6 -> c17b4fea c13ee484", + "c06374b2 c0636c1e c10e9326 c10e90d4 3e9d4d5f -> c0a6662c c0a65f24", + "c0eff23d c0efcd6b bfc64f8d bfc46213 3f5d2d2b -> c0173206 c015d396", + "418d5104 418e02c4 3ff25766 40392aed 3de6988e -> 417e106d 4180b490", + "be564c82 be383f7e c0b3609e c08dc942 3f306948 -> c07cadb5 c045b286", + "c163af1e c163708a 405602c5 406d464b 3edc1abb -> c0d5d197 c0d01e85", + "bf937944 409b37a1 41792d15 417a394b 3f0791cb -> 4090d84f 415be1a6", + "41145a98 41145df0 3fec68fe 3fec9bc2 3f19cba8 -> 4099f28c 409a04e0", + "409c4cf1 409c512f 416afca5 416b0043 3e9b9c45 -> 40fba111 40fba8cc", + "c1336d46 c1331f64 40e662a4 40ff2dbc 3f4720f8 -> 4046057c 406ec178", + "c176531a c175702e 403aab38 403e2bf8 3e93f102 -> c121ebdb c1208696", + "c01c5f62 c01aad3e c119edd0 c11707f4 3f437d4b -> c0fe37d3 c0f84bfb", + "41978ca3 41980785 4019e129 40339b47 3f42d0f5 -> 40c9f880 40d7241c", + "c0b762a6 c0b6e03e 4163c36d 418cfcca 3e07543f -> c0460812 c0283864", + "4126927b 41269325 c0e41a3b c0e4121d 3efb201d -> 3fe77288 3fe78a58", + "c0bf53bd c0bafe6b c149a369 c14911fb 3ef03e08 -> c11267f1 c10ef4c8", + "40e8b900 40fa2290 41211121 416c1f7f 3ea0cf3f -> 40ff560c 4122aeb2", + "419f2d10 419f3db8 c0c9a12c c0c98de8 3db8f9ca -> 418c3d94 418c502c", + "c141e893 c101b655 417c5b32 417cbba6 3f205d32 -> 4035b5e4 411612e7", + "c18b08c3 c18a6a2f c162749f c1623bf9 3f726e6c -> c1665d49 c163be23", + "4132643d 41335f97 41343377 4136e881 3c8ffafa -> 413267f6 413373e9", + "c1883a1a c1883750 c0a0cf63 c0a0cdcd 3f6fcd85 -> c0b92724 c0b9100c", + "41483d8c 41484a64 41211316 4121166e 3d99a116 -> 41454c75 41455a84", + "c132dad7 c12a542b 40a75abd 40a7b34b 3f43730c -> 3f7127c0 3ff1eaf8", + "4197f45f 4197f501 408b80b5 40b1d4c3 3f628e71 -> 40c15b5a 40e34baa", + "415955d4 4159580c 415dc277 415eedf9 3ed915ab -> 415b351e 415bb744", + "412f701f 412fd701 4124199c 41252554 3f309172 -> 4127573e 4128bdbc", + "c19055b1 c1379c66 c1754b19 c137fc9b 3e758727 -> c197bac9 c11e82c4", + "412d33ed 412d345f c1096c91 c109589d 3e8e0812 -> 40ae10ca 40ae1cff", + "418f5459 418f55c7 4107bfc2 4107e86e 3ecc66cb -> 41626872 41627caf", + "c11dde4f c08e17d6 4117a4be 411b034e 3f78dde1 -> 406a775c 41691dd1", + "409df883 4119808e 419337b2 41984e42 3e36410f -> 40d02352 4141a8e0", + "4188bd08 4188cd34 413fd36f 41422b91 3e263061 -> 41821a39 41825db8", + "c0d6afb3 c0d50b65 c147830d c1470c09 3f71a8e4 -> c1431fb5 c14116d3", + "c117d92b c116912d 410915ab 41091879 3f7e2afc -> 4105beab 41084f17", + "4190df11 419a1d13 c1091698 c1084d5c 3f6fe3fe -> c0ff19b0 c0b60408", + "40da22a2 40da9cbe c0050e93 c005027d 3dd29a3c -> 40bcd037 40bd5781", + "414d97ba 4155a696 c182bfa0 c1820722 3c04856b -> 4149bfdd 4151e265", + "c186cadd c0eb79c5 c082de10 c0662321 3e9fee96 -> c17d3f2d c04e0034", + "c08b58eb c08b5021 40c2c047 40c2c671 3f71c9f2 -> 40b02c0d 40b042f7", + "c0f81982 3e64c730 c1339e63 c13350e1 3e0abc42 -> c114de9b be7a6ea8", + "4119e1e4 4119e7dc 403281ee 40412482 3ba2e88f -> 411956cf 41196177", + "416ad79f 416d9901 c05de02f c009dfe1 3f01e387 -> 40ac4b1e 40c9e914", + "c023efd3 3ffd7f46 40a315e4 40a48544 3eab65a8 -> bfc25b39 4091e391", + "406c3922 406d5ace 40794292 407af44e 3f3f1fd0 -> 40751c88 40785a48", + "c1144e74 c1144b52 4190a935 419faa17 3f1a08b1 -> 40e60294 41051464", + "41270d24 41270fbc c17999b9 c1781c6d 3f07fc52 -> c0591b90 c055e184", + "40f37d89 40f38747 419da4b5 419da507 3eb9890f -> 413fdf68 413fe647", + "4072c1b8 4072cd08 c04dbef7 c0484d29 3e0e54a8 -> 40346939 403537d7", + "3ffcaa3c 4002a542 404d8c48 404da3c8 3f51d34e -> 403bb98d 4043a5f1", + "bfd350c2 bfc95c3e c17eca1e c165499a 3eb4384c -> c0d67a30 c0c128d4" + ] + }, + { + "glsl": "vec2 cultmath_iv_snoise_ball(vec3, float)", + "tolerance": "ulp-bounded", + "cases": [ + "42368d6a c13bbc84 41bc0454 3fb57e94 -> bf800000 3f800000", + "4212e198 40cbcec0 c1c23f76 3fb7d5f8 -> bf800000 3f800000", + "c22bf0db c1ccd7de 41a6f8d8 3f8949ca -> bf800000 3f800000", + "420661d0 c1a60ee7 41fdb588 3f0e5767 -> bf800000 3f800000", + "422f8640 410fc954 c204cfde 3fbd7437 -> bf800000 3f800000", + "c0f11528 c23c7a7c c2434da2 3f3118f7 -> bf800000 3f800000", + "c1f2e3b6 41a20c3c 411a55cc 3fbe8bb8 -> bf800000 3f800000", + "c23a010c c20f33aa c1fdb69e 3d9fed1b -> bf26ddd9 3f6ceae1", + "c1b77660 c1ce9199 40ef66a0 3f1da819 -> bf800000 3f800000", + "bfff2740 c1acf18f c203a3af 3fcc7d26 -> bf800000 3f800000", + "c181e23e c0a06d78 c16f2060 3f2f4717 -> bf800000 3f800000", + "c0df1ad0 c24257f9 41b7d004 3f13940e -> bf800000 3f800000", + "c1094fac 408656e8 4005afd0 3ffd01aa -> bf800000 3f800000", + "423589b4 c21fc601 422aeea0 3fed7813 -> bf800000 3f800000", + "c14e85fc c130df5c 3f9f1720 3ea905bd -> bf800000 3f800000", + "423ae466 3fa66200 419261dc 3fed9dc0 -> bf800000 3f800000", + "c22f90a0 41881efc c1bbb28b 3f982893 -> bf800000 3f800000", + "41ae1770 3f74b8c0 41ee110c 3fa7b8c4 -> bf800000 3f800000", + "c101a7f0 c1512468 c11c5a6c 3ff98d02 -> bf800000 3f800000", + "418e9b38 4187c908 42261d5a 3ebb0a34 -> bf800000 3f800000", + "423d1e1a c1992387 c187fdbe 3f7c8cdc -> bf800000 3f800000", + "4141c564 c1f45a9e c2261cc7 3eae9cf0 -> bf800000 3f800000", + "c1946eda 416b93b8 422ea960 3e3a80e3 -> bf800000 3f800000", + "41d91d00 c2457f28 420494d6 3fd321ca -> bf800000 3f800000", + "41d582c4 c0f85730 c1af430e 3fc29fa4 -> bf800000 3f800000", + "41c70298 c211c29a 40e0dbe8 3fe7985e -> bf800000 3f800000", + "41c384ac 42125bf4 40dddfd8 3f95b340 -> bf800000 3f800000", + "419ea138 42350398 c1c88b68 3fb38b11 -> bf800000 3f800000", + "c0255310 c187dac8 c1f68545 3fa8a8bb -> bf800000 3f800000", + "c1fd9c23 c1f80651 c19a5d15 3fddd94b -> bf800000 3f800000", + "4108b110 c221e416 c1b03beb 3e111679 -> bf800000 3f800000", + "40e94c20 41a593d4 4219708a 3f5374ca -> bf800000 3f800000", + "40722110 40f86c98 c1e9acb2 3f03316a -> bf800000 3f800000", + "c131e7d4 c209efce c0d4d978 3fd657b6 -> bf800000 3f800000", + "41bea580 c0eec080 41c6e380 3fc15d65 -> bf800000 3f800000", + "41485ad0 3c835000 c0345ca0 3f3977e0 -> bf800000 3f800000", + "c123557c c1d3a13b 413a4f38 3f620ae0 -> bf800000 3f800000", + "41fb86f4 c202e154 4162a790 3f93beda -> bf800000 3f800000", + "c219dc5c c108f8d4 c2021f1d 3fa7567c -> bf800000 3f800000", + "420e5b5c bc34e000 c186a0a6 3d9b44b3 -> bf4053d2 3f47b24e", + "4240eb6a c2095930 c2354f42 3e780049 -> bf800000 3f800000", + "41c3b3e0 424561ca c196181c 3f2381e6 -> bf800000 3f800000", + "421eadca c1688d60 4228236a 3fc1f9dd -> bf800000 3f800000", + "c0bba748 40a5e090 c1cef40c 3e2f92e3 -> bf73d2a4 3f800000", + "414586d4 42271d0e 4189f854 3f2cf0b5 -> bf800000 3f800000", + "c223c9e4 c0b85ad0 411d46c4 3f3b0f3c -> bf800000 3f800000", + "422e63ae 41519470 c20fcb23 3ff97433 -> bf800000 3f800000", + "42402f4e 41dffedc 4240855a 3ef487cc -> bf800000 3f800000", + "c22287bd 41a8f2a8 41da53f4 3f700e36 -> bf800000 3f800000", + "c09502a0 c16e2350 413bac30 3f4f3c94 -> bf800000 3f800000", + "42293b70 c1a20da0 408e70c8 3f6b884b -> bf800000 3f800000", + "c1c6097c 42199fe4 c211c68c 3f905098 -> bf800000 3f800000", + "c202c42f c2243af8 c23bfc52 3ff029e6 -> bf800000 3f800000", + "4202f888 4245b58c 4232c252 3f8a469c -> bf800000 3f800000", + "40baa8e8 41915ab0 c1fc414e 3e69a4ea -> bf800000 3f800000", + "420d2cee c181a09c c1812962 3e6fe965 -> bf800000 3f800000", + "c14aa2c8 41918ab8 41832378 3fbaf57d -> bf800000 3f800000", + "41df2430 41da2c28 4152f0bc 3f0b9955 -> bf800000 3f800000", + "c19f9bf9 c1b99959 c1090538 3fcb0f0e -> bf800000 3f800000", + "421f268e c2109520 c21af7dd 3dd692ca -> bf800000 3f68f2ec", + "beea2c00 40f66a50 41f110dc 3fe41ea0 -> bf800000 3f800000", + "41c7f780 c236b8f3 c10e69e8 3e4c7f23 -> bf800000 3f800000", + "41d36e08 c1d59995 42241ac8 3fc59853 -> bf800000 3f800000", + "c205682c 3ebb1c00 40a4df48 3f95d7ac -> bf800000 3f800000", + "42378de0 c0e70220 c225707c 3f921c17 -> bf800000 3f800000", + "c1dfe3af c1176138 41e3aaf8 3f4d2466 -> bf800000 3f800000", + "c087b938 41ce324c 415c312c 3f8f44f8 -> bf800000 3f800000", + "40ffb6c8 c20a7a9c 416340d8 3f57146a -> bf800000 3f800000", + "40dd29b8 c212e472 413d24ac 3f0d76ab -> bf800000 3f800000", + "406a7420 c0a7f7b8 c1553590 3f293677 -> bf800000 3f800000", + "c1b74053 40ce7818 423a5abe 3f8bd0ba -> bf800000 3f800000", + "4210fb4e 421009de c21dad4c 3fcc03f7 -> bf800000 3f800000", + "41ad2ed8 4203b2f2 4205af0c 3f70cf4a -> bf800000 3f800000", + "c23324a4 408691e8 4204b5a2 3e3954bf -> bf800000 3f7bc08c", + "41e9ef9c c11e7534 c0d4f498 3ffe01eb -> bf800000 3f800000", + "c11714f4 420ca052 3ff97c00 3f9c557c -> bf800000 3f800000", + "41118bf8 bf73ddc0 c1ede5c9 3d8c11e0 -> be531518 3f800000", + "421a2d0c c1b38777 c2349b83 3f82f982 -> bf800000 3f800000", + "c22f92e0 41ccfe84 c1a053e2 3fa7e1c7 -> bf800000 3f800000", + "c0c19868 c1d112ce 4072a6f0 3f99024d -> bf800000 3f800000", + "417319c8 4208507e 42092dca 3fc033a1 -> bf800000 3f800000", + "c1905352 c203369a c153c478 3d61a9c0 -> beaebde6 3f458207", + "c19f3429 40345360 bfd30540 3e8b5e3b -> bf800000 3f800000", + "c2426064 c148bff4 4229d57e 3f56ddc2 -> bf800000 3f800000", + "c235fcdc c1675b88 4235fbe4 3f3e9d56 -> bf800000 3f800000", + "417bf308 c22b2991 42248ec0 3f61e0ff -> bf800000 3f800000", + "41e09cec c18dbb94 c1119940 3f17ae44 -> bf800000 3f800000", + "c1ce07a4 c2018983 4170dc08 3f8dd1f4 -> bf800000 3f800000", + "42113844 42066270 c17f8f64 3f90a432 -> bf800000 3f800000", + "c2448d78 41d70ff0 c1a7496d 3f56ad3b -> bf800000 3f800000", + "c216de59 c201c5de 41ba2cb4 3f37156e -> bf800000 3f800000", + "41e9a8e0 42251fee be896280 3fafcafd -> bf800000 3f800000", + "4204a9c4 4218168a 4130f004 3e2d2cae -> bf800000 3f800000", + "c1ad0a96 c205a055 4230023a 3f947e6b -> bf800000 3f800000", + "422bc1be c11cb574 423bf572 3fff2bb6 -> bf800000 3f800000", + "41d25f6c c22b4d37 41e3ad94 3e80484c -> bf800000 3f800000", + "42170e32 422be6a0 c1b5e76b 3eb6cae1 -> bf800000 3f800000", + "c23a4c24 c1605318 c10ecc08 3f0d99e4 -> bf800000 3f800000", + "c22e322b 406624d0 c1c8adc6 3f76dda1 -> bf800000 3f800000", + "c1807fd6 40ad3750 416e1ae0 3fde3696 -> bf800000 3f800000", + "420234fa 41b1f924 c064dac0 3f39a1a8 -> bf800000 3f800000", + "40d1d3e0 40d49970 c1b7f2ff 3fb28011 -> bf800000 3f800000", + "421e6036 41d05848 4158a21c 3f9b5482 -> bf800000 3f800000", + "41ef2510 c1a4b1b2 4179a788 3dd32d91 -> bf4c5a8d 3f800000", + "c12e72a4 412c9bac c00265d0 3fdcc5ab -> bf800000 3f800000", + "41604e90 c1909fe0 4173a508 3f71ba59 -> bf800000 3f800000", + "c0436750 c1847e52 c2402a00 3fbf740c -> bf800000 3f800000", + "4226b68e c0860320 c1cfa023 3f404b47 -> bf800000 3f800000", + "41ca97d4 c21f3915 c20380d8 3da7d9c1 -> bf39b54f 3f6e1563", + "412c01d8 c0f876c8 40bda7a0 3f1f82ed -> bf800000 3f800000", + "417f8088 40f19d90 c1ae4615 3f0c626f -> bf800000 3f800000", + "41b38564 41f35a30 c01175c0 3fc53f00 -> bf800000 3f800000", + "4217f86c c1f18b81 c223a0b8 3fbb4c1a -> bf800000 3f800000", + "c22a32b8 41e531d4 c1d9ca3b 3f81aced -> bf800000 3f800000", + "c22becae 4244f3ca 421d1c1a 3eed214c -> bf800000 3f800000", + "4095e970 400ee170 41e04414 3f604e92 -> bf800000 3f800000", + "3fff86a0 c1bfe497 420d53fc 3fb277c2 -> bf800000 3f800000", + "c216d800 4138daf8 c0b48cb8 3ff7f830 -> bf800000 3f800000", + "c2348e08 c204a162 c1ede4a6 3e056fca -> bf5cc87b 3f800000", + "c2392ce5 c14279dc 41c5f7b4 3faa5a9d -> bf800000 3f800000", + "420ed832 c1c8a15d 42131ffe 3fb806db -> bf800000 3f800000", + "c1547eb0 3f65b140 c19f64e8 3ff77de4 -> bf800000 3f800000", + "4215ac08 4183f47c 423c1fd2 3f9d855d -> bf800000 3f800000", + "403d50e0 c1898964 41d37bb0 3e8d1a1e -> bf800000 3f800000", + "41ec2350 4209bc5c 41cb1708 3f6dd794 -> bf800000 3f800000", + "42345920 41e03a10 416bfab8 3f078e84 -> bf800000 3f800000", + "41cb97ac c21712e8 41924e64 3fe7f7fb -> bf800000 3f800000", + "41062cf4 c206c510 c044e300 3fb11fb9 -> bf800000 3f800000", + "c1cc1020 c1da00b2 c1497a34 3f1891b0 -> bf800000 3f800000", + "41773870 c22f5a45 c22bbfba 3cbc2c13 -> bec0752c 3db45e80", + "4237c028 421aa0fa 42011f92 3f6a9b89 -> bf800000 3f800000", + "41685bb0 420361bc c0c316e8 3fb87e0f -> bf800000 3f800000", + "c1197ce4 c22de45c c1b8636b 3ec5c2c3 -> bf800000 3f800000", + "41475814 c1ad724a 41ab86a4 3e1e49e4 -> bf800000 3f800000", + "4122c28c 4125793c 4239b078 3efb2394 -> bf800000 3f800000", + "42026f92 c1288478 c13b60f0 3fb61469 -> bf800000 3f800000", + "c1f36f24 c1b123ee c14fad10 3f1ad87d -> bf800000 3f800000", + "423599dc c0550050 bfdb8240 3fbbd2ec -> bf800000 3f800000", + "41daf82c 41c24c28 3efa6b00 3e04a41c -> bf800000 3f1dcb25", + "4236fd76 c1f85e26 413eab08 3fed1321 -> bf800000 3f800000", + "41929fe8 4238f08a 3e4de200 3f84d214 -> bf800000 3f800000", + "421d6ca6 c1b2c9e0 c22d243b 3ff63525 -> bf800000 3f800000", + "3fa78a60 c1a2336e 419cba74 3dd3371d -> bf1c5866 3f800000", + "c2210abd 42024d0a c1fc1443 3f909e71 -> bf800000 3f800000", + "3ebc9b80 c21b5185 c1be3559 3f3be2f6 -> bf800000 3f800000", + "c08597f8 c2113843 41d5399c 3feff853 -> bf800000 3f800000", + "4103dedc 406625e0 c101955c 3fe1bc28 -> bf800000 3f800000", + "41dea40c 41702cb8 c218424a 3f533064 -> bf800000 3f800000", + "4241b38c c238b9a2 40c51a40 3fdd2291 -> bf800000 3f800000", + "421d1100 4211b82a 41fe08e4 3feb52e2 -> bf800000 3f800000", + "c1e6db78 c1127164 41e73224 3fa82c41 -> bf800000 3f800000", + "41d8a584 c0da5ef8 4159daa0 3ff2af2e -> bf800000 3f800000", + "40b981a8 42301390 40c1f778 3fd88985 -> bf800000 3f800000", + "422aeb98 c1c5fc42 c04e2e70 3f8beb2a -> bf800000 3f800000", + "c1f35889 40cee8b0 422e77e2 3f37417f -> bf800000 3f800000", + "420f0066 c1fba859 c1fd41e1 3fdcf0be -> bf800000 3f800000", + "c200d76d c1ad04fa c22d43c0 3df4714d -> bf800000 3f1bcf42", + "c1bcac7f c18f1254 4189a08c 3fa3ba91 -> bf800000 3f800000", + "c1a4abed c17b2028 c209e961 3dcdd711 -> bf151c77 3f800000", + "c1734554 c21c16c5 c20561f5 3e9ab5ee -> bf800000 3f800000", + "421febb6 c0394630 c18d0088 3fd693ae -> bf800000 3f800000", + "c22433c0 c1b52288 bfc17c60 3fbb5bc9 -> bf800000 3f800000", + "40e14a20 c241e4ef 41865698 3f281c92 -> bf800000 3f800000", + "422b4048 c0802eb0 c22f5309 3d58fc10 -> bf259e44 3ed89c0f", + "c1dbf6d2 422a67ec c0075000 3f79847c -> bf800000 3f800000", + "c1582078 40f63e18 41930a98 3ef2e26a -> bf800000 3f800000", + "c1b9796d 42287de2 40a52780 3f959f50 -> bf800000 3f800000", + "c22114c0 c1033104 c1f14ce7 3e31255d -> bf800000 3f800000", + "c12303d4 41e4689c c0870b70 3f460560 -> bf800000 3f800000", + "4210ac18 c1777d98 41dac9cc 3fe78450 -> bf800000 3f800000", + "41ef12cc c183eadc bf8f4be0 3eff405e -> bf800000 3f800000", + "41752e28 c1798e90 41a9018c 3fd594b6 -> bf800000 3f800000", + "c1aeea02 c2144fd1 4201e4c2 3f582e85 -> bf800000 3f800000", + "415178ec 418f9198 41e49764 3f25791b -> bf800000 3f800000", + "41e5cca4 c22539a2 40dfd960 3eacbac0 -> bf800000 3f800000", + "41b19398 4220407c 415719b8 3e9c7d39 -> bf800000 3f800000", + "41fd8308 41030330 422bf4e0 3e927a8f -> bf800000 3f800000", + "c2472468 418c305c c20645a7 3fe139b2 -> bf800000 3f800000", + "c20afcfa 40ee8948 419697b4 3d783d2a -> bed6e6cd 3f4ded8e", + "c224bdde c0d04b28 4105b754 3fec9647 -> bf800000 3f800000", + "c1e805c5 41adea20 c19daeb9 3ff7d4ee -> bf800000 3f800000", + "41153bf4 41dd2598 c08f9dd0 3fb802f9 -> bf800000 3f800000", + "4247e89a c2120560 411eb9e4 3fc65cf8 -> bf800000 3f800000", + "41dc4adc 41285a24 c1fe1feb 3fe5f490 -> bf800000 3f800000", + "41a08848 c182dfc8 c0d996a0 3e1315f4 -> bf800000 3f800000", + "c109620c 40dba650 4204d448 3f9b37ac -> bf800000 3f800000", + "4239f5d6 423200c4 c1b8788c 3de8daf1 -> bf800000 3f0224eb", + "42447cf4 41ccbcc4 c1d43c62 3f349079 -> bf800000 3f800000", + "3eac4500 416950f8 42375140 3c264d95 -> be372f97 3cd60d00", + "411c5f60 418516bc 40bd3448 3da7ac80 -> bf7bbb30 3f2b9d40", + "c2154b7a c1e702be c20edca0 3fde04f9 -> bf800000 3f800000", + "c229964b c130ad84 c21e4170 3f8c2b4f -> bf800000 3f800000", + "c12c7b84 41e805dc c188ada6 3fc07a13 -> bf800000 3f800000", + "c246d690 3f9c62c0 3f7fdc00 3fa43a0b -> bf800000 3f800000", + "421a20ca 419d6ba4 c246bac5 3fa60025 -> bf800000 3f800000", + "3f33c4c0 c1220330 41b5f294 3efa16db -> bf800000 3f800000", + "422018d0 c1ca827d c1b6e59e 3e8518f4 -> bf800000 3f800000", + "416b1520 c200e4b0 c19f9dd9 3d8e7d1b -> bedbc41a 3f79dfe7", + "41ddd324 c12d8630 4231d636 3ed02d3e -> bf800000 3f800000", + "c0ed74b0 4239f34e 404091c0 3f935660 -> bf800000 3f800000", + "42084236 41b1ae78 418357e4 3ece6de1 -> bf800000 3f800000", + "c0ea5650 bfda0700 c170e6e8 3ffdbc18 -> bf800000 3f800000", + "c211ab30 c1926e27 c2184c0f 3fe6a861 -> bf800000 3f800000", + "41828c44 42245850 4055fa40 3fba687a -> bf800000 3f800000", + "bfcf5520 421f9928 423ac826 3fd44a0c -> bf800000 3f800000", + "c218b892 423ded62 42202734 3edbfaf6 -> bf800000 3f800000", + "bf85c4a0 c1a41f33 423dc872 3f9c8ea5 -> bf800000 3f800000", + "40d866f8 c19a52d9 c1e3922d 3feba4d5 -> bf800000 3f800000", + "c205534a c0e6dfe0 41f61804 3fc8f795 -> bf800000 3f800000", + "41bba684 4027f450 41fdaa04 3f55cb5a -> bf800000 3f800000", + "421ef87c c1afd084 42457c60 3f291d02 -> bf800000 3f800000", + "c23098a2 c120c3c8 c14e3570 3fddd1fc -> bf800000 3f800000", + "420f3ed0 c1e2be34 41af470c 3f86ebd4 -> bf800000 3f800000", + "42472b28 41a0bc50 c08931b8 3fddab54 -> bf800000 3f800000", + "4200b00a c0a0cee8 41a95058 3e878855 -> bf800000 3f800000", + "3f59d540 41be7694 c0f4bb68 3fd42d72 -> bf800000 3f800000", + "c21f6dfc c1f0f313 41bb6aa0 3ef15f68 -> bf800000 3f800000", + "c21eb3b1 41c6cf9c 42456210 3ff523ff -> bf800000 3f800000", + "c2273bd8 409ef8f0 422cb278 3fd68a3a -> bf800000 3f800000", + "42407102 40e156c8 c209a18e 3e394ece -> bf800000 3f800000", + "42297dc4 c21cc8cf 41ca9858 3f33e7ef -> bf800000 3f800000", + "410ccc38 4196fd50 42290252 3f6e9c08 -> bf800000 3f800000", + "423c4a3a 4230b72e 423947ce 3f12023a -> bf800000 3f800000", + "41fbae34 41942064 422381b4 3ea39a32 -> bf800000 3f800000", + "420eaf2a c20601de c1d92b4f 3fdc19a8 -> bf800000 3f800000", + "4184337c c211af7b 41d289e8 3e615f38 -> bf800000 3f800000", + "c1dd8253 41d13ae8 c0b05f40 3f65a435 -> bf800000 3f800000", + "41d75760 413ea868 4219e3d2 3f00db8d -> bf800000 3f800000", + "c1a4f09f 41429578 c1e971e8 3f4d31b5 -> bf800000 3f800000", + "4241ef1e c22b0366 c1cf69a3 3f537276 -> bf800000 3f800000", + "c1b2f7b7 c1b93279 c1bc5039 3ea5c2bb -> bf800000 3f800000", + "41e44000 41a6e9e0 c20ed107 3f4b4b53 -> bf800000 3f800000", + "416175a8 41d9ea8c 42408084 3fd0f363 -> bf800000 3f800000", + "c17cfe00 c1a304eb c0f0b788 3fc9bd81 -> bf800000 3f800000", + "c1783708 4165d4a8 c214d2de 3fd398a2 -> bf800000 3f800000", + "c1cceae0 c0249b70 419d45b8 3f342aa8 -> bf800000 3f800000", + "c2312ca5 41a9853c 42446570 3ec607cf -> bf800000 3f800000", + "c0136da0 3f546400 c20231ed 3fc8cb46 -> bf800000 3f800000", + "4229b2f4 41fcadfc 41057310 3f4b4a10 -> bf800000 3f800000", + "421478a2 4122bf40 c18c91fa 3f83c454 -> bf800000 3f800000", + "413db9e4 c234bfde 41f5dd40 3fff2d2c -> bf800000 3f800000", + "415ca654 c22c8f0e 4223c4b0 3fff62bc -> bf800000 3f800000", + "c1f28763 c0ff3190 c231c21a 3f2edbc1 -> bf800000 3f800000", + "4231cf76 c10929b0 c2047736 3fcd5709 -> bf800000 3f800000", + "40e61f48 422537c2 c21e3e39 3e174beb -> bf800000 3f800000", + "41ae1f00 4233fd3e 4227ead0 3e883e1c -> bf800000 3f800000", + "411c9cd4 c1f2641a 421cbfec 3f86b975 -> bf800000 3f800000", + "41aa4190 c23cc9eb 4226b49c 3fbe4769 -> bf800000 3f800000", + "c19083b1 41358cec c1e9b1be 3ec8d60a -> bf800000 3f800000", + "41858f54 419fd8e4 41aaed18 3ffd0c29 -> bf800000 3f800000", + "41f1fbd8 42455b48 4246756e 3dea39ba -> bf604cd3 3f800000", + "c09762b0 42055420 4207e318 3f829dbd -> bf800000 3f800000", + "416b38d0 41e11dd0 4201ef12 3ff5499c -> bf800000 3f800000", + "be88fb00 c1c74cc0 41ed74cc 3fab349c -> bf800000 3f800000", + "c214aab0 418bc58c c121c324 3f61e19d -> bf800000 3f800000", + "c2014efa c13a9344 c1ac2d42 3ead49ae -> bf800000 3f800000" + ] + }, + { + "glsl": "vec2 cultmath_iv_fbm_ball(vec3, float, int, float, float)", + "tolerance": "ulp-bounded", + "cases": [ + "3eb29880 c196090f c23f4433 3f29ac23 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1eae31a 423d3e5c c211f9ce 3fdf4669 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1f07d92 c219a0a2 c1b74111 3fb97222 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423587d0 42113b7a 418ff060 3fc3c202 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1645498 c13cf5d0 42179b50 3fee7415 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1ed71fb 423773be c1cb5739 3e0d345b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41fd51ac 407b5e50 c22d0ae2 3ffe0362 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c19f458b c1b5ca2d 41f962c8 3f56b8f0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41a6e3d4 4202ef34 40aa5130 3e900ac9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41f930a4 3f5db780 c19d2226 3fac8fb5 00000004 40000000 3f000000 -> bff00000 3ff00000", + "416a22d8 4235179c 41ceff50 3f436e84 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423ffa28 c22af9d1 41abd2d4 3f07ff4d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4245ea96 4156f084 c2268f37 3fcb80a1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "3edff000 c16aa200 423a3f38 3f8b8ab9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22d58eb 42355744 3fb86cc0 3faad2f2 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4222493e c20edeb1 40e3d1f0 3fed39a4 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c19ca40b 420cbcba c241bdb3 3e81f930 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1981d58 407dfff0 42353ac4 3fd944f3 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c228ac61 c1ebe910 c1abedac 3f006dcd 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1f017d4 4211c5b8 c22495a0 3fbe84f7 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4201cc7a 41f1b690 4246fa4e 3faaaf78 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1f8abbf c2413d16 4225e2de 3f360e9f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4210affc c244a74d c22a8ee3 3fdbb367 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4245b378 415a597c 41d68d34 3f80f649 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c13d8a88 4204d95a c2291f4f 3e839ee7 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2313c1e 410d4334 42362882 3f692705 00000004 40000000 3f000000 -> bff00000 3ff00000", + "419102bc c1d40666 41ad35b8 3f1966c3 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22cb1aa 41ac1fa0 c1780a90 3ecf764b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4211ece4 41d84180 42090c14 3e55097b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c20dd900 4221d922 41bdf858 3f13471d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "422ed9dc 41804fc8 c1bc2ebb 3f1a8abe 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c05911e0 c222064a 420dc084 3f625e7e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c0c9d910 41e14384 4213920a 3f3c749d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41e5ca10 42382cf2 4195bd8c 3ef24492 00000004 40000000 3f000000 -> bff00000 3ff00000", + "420ab2c8 40877dc0 42421fbc 3ff44778 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c19fafe2 4138b9d8 c1aa67d9 3e9684c9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4182b6b0 42148fc0 4245542a 3ee5b45c 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41eb149c 4183b14c c162fe68 3f7450a6 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22222d3 41e7eb3c c1f738db 3f4b2ca8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c18d2fac 41763f88 42439bb6 3f9626f0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c13f0edc c1b444c9 4210ef8a 3f12f72a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "420a7dc6 423ee2a0 c1080eac 3fe78839 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c226be06 412a4194 c1c289a6 3f9a6dd4 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4227b968 41e29db4 4242c302 3f24dee2 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c14a90c4 c218b78a 415cf528 3f984a2a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c21f5a74 4150b72c 416ccbc8 3fc5bd5d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c0f4f520 c12cc8c4 c1b584e2 3fff51a1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41d792c0 c1a77a72 42251384 3ec5e1db 00000004 40000000 3f000000 -> bff00000 3ff00000", + "40aaa020 c1219fb4 40eb8848 3d56bf1e 00000004 40000000 3f000000 -> bfe4adcf 3f80fe4d", + "41ca7dd8 c247e07f c19fbb31 3fafb3b3 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c08b64a8 c2246bca c20faf42 3ec05ae7 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1138a20 41cc123c 40b85690 3f1f9ba0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41f26538 4213b82c c23ebfd1 3ed2a4d9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c241ad69 c1290db4 bfc3bc80 3fc01176 00000004 40000000 3f000000 -> bff00000 3ff00000", + "414aaaa4 c223fcaf 42114b38 3f68b313 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41a34a24 c103cc50 c212096b 3fcae792 00000004 40000000 3f000000 -> bff00000 3ff00000", + "419af9c0 c22e67b9 c2341cbc 3f8543c6 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1e84460 42387890 40db63c8 3f3f2e98 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41fe4c1c 4234c494 c210b44a 3cd7a996 00000004 40000000 3f000000 -> beee164a 3fa85c9e", + "bf845e40 c07c6f60 c158c500 3fab249f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4205c2fc 4238af3a c1f48667 3fe674ac 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1b9facf 41a5e7a0 c2012fb1 3ea33998 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4225b5f8 4201628c c12180d8 3fa9caca 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2112bb6 420a7272 4240d3a4 3da0f2ce 00000004 40000000 3f000000 -> bf9974ce 3ff00000", + "42359da0 c172b9d4 bf20be40 3f3031a6 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41a44bb4 c2391683 c21f4f7c 3fd7867f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c19f6898 41700f80 c1341964 3e03cc83 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1c31e46 c032f3b0 c1bf9d22 3eaa85ee 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41b46920 c1f41a0c 413fb3e0 3fbe166b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1dd5fc1 c1d43539 401fc9b0 3ffc8122 00000004 40000000 3f000000 -> bff00000 3ff00000", + "421ac7f8 421c4bd4 4129ad78 3f45e4b8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "40c6c630 422230de c1d32ff5 3ff8c5cc 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423bf0ee c2203aca c2308c4a 3e9131da 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423abc02 c23fb670 42393264 3fcc16f8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "420ffeb6 c16bf500 411f15f4 3f9e2032 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1900baf c21abdb5 42212692 3f629199 00000004 40000000 3f000000 -> bff00000 3ff00000", + "40c988e8 c1d5a3ab 422f070c 3ff135ef 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1daf50f c1d04466 41fc6cc0 3fb82d31 00000004 40000000 3f000000 -> bff00000 3ff00000", + "420154f0 3f3cfd40 c08a1638 3fd0919c 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c0dc0f08 41ac6a80 c1b03d73 3f4a876b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1099094 c106e7dc c22262ec 3ea0de49 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c10a8bc4 c2185a14 c1f094c7 3fb4771d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1d67ed2 4201137a 4218f720 3fdeee13 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41587f94 4222fde4 41851dd0 3fc61f87 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42432542 c20679d3 42014a26 3f28b46c 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423b29d4 c1a4f295 41c45c48 3fbaf65e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1ace253 c1808910 c19192d8 3f6b60ee 00000004 40000000 3f000000 -> bff00000 3ff00000", + "40cc62b8 c20ca7a3 c1569280 3e945f66 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22ade87 c1ecaab0 c1ed3a47 3fe780a8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2405aca 41c4f5d8 c23c77de 3f6365f8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c23a8772 c1d5c7ed 41a84174 3f4ecd7a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c164654c 4231e900 c22667a8 3fea77e8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4208650c 41926f14 4202b4c4 3f091b75 00000004 40000000 3f000000 -> bff00000 3ff00000", + "421ceb1c 423436ac c0e877e8 3e771578 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41882fcc c159d838 42151cd0 3e18a8f1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41f0deb0 41bfdb20 c20fa156 3e2bfba5 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c08a3f40 41be5b54 41ee57cc 3f5ce44f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41a33610 41d1b594 41cbc0ec 3ef7da01 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c21201f5 c141042c c1a39be5 3fbc3a77 00000004 40000000 3f000000 -> bff00000 3ff00000", + "410597f4 c17d0f6c c14b4e28 3f2dcc60 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1c3b9be c11c81e0 413d8c08 3fe181db 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c18eb8d0 c2209c91 c1c64348 3e7b5adc 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41dd734c c226b249 c1d4c78d 3fa7cad4 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42155e1c 4235e68a 41646f68 3f16a2c0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22342a1 414ae1fc 4232b9e6 3f9e975d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c20d42e6 41748c68 c1e687f7 3e226daf 00000004 40000000 3f000000 -> bff00000 3ff00000", + "422b5714 410829bc c213061a 3f835f6a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41781270 4199c670 406af290 3f284f89 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42445d7c 40576fb0 41fefcec 3f4c6497 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2177571 c1bfec43 41d18944 3f37a0a9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "bfb61640 418c8230 4176ee60 3f9ef63a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4033e900 c2203acd c152cf1c 3eb8f987 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41bd4638 c24758f0 416541b0 3ff4eb55 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c127f708 41cae6e4 c1f62e89 3f9a4a7c 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1f7b8f8 407d8bf0 4234fdb8 3fbc939e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423a6988 41bf646c c0519ce0 3e2e2f95 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4094f470 4222407a 41837b90 3f2e1fe9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c21197eb c1cce7ed c202ff90 3fd4f346 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4211f3de 410d94f4 c212964b 3f716539 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42476780 4111bad0 40a25d90 3fd43a02 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1e28394 4234e266 41dd1210 3fa75179 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2346d32 410006b0 422d5982 3ef35ef0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c17dc704 c1e30321 c1e92769 3f94fa63 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c199e7b3 c23dd487 c12c537c 3fbf2529 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1e94a34 40df2968 c22a513d 3f9f674f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c0cfc4b0 c23c9ae7 c2365094 3f7c67bd 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4203a6a0 41f939d4 c2234660 3fce7f4e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "414026f8 41b0d974 41266218 3f99769d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42438d0c c2169429 3ffb5e60 3cea8023 00000004 40000000 3f000000 -> bf45c5d0 3f865d64", + "4239292e 41fb114c c239bc61 3ff76fbe 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423ce6f8 c0e96200 424758e2 3feb7971 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c239e042 41113a7c 401a75a0 3fd6ebea 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1f30bc9 c134cd84 c1bdbdc8 3f5bad8a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "3fd7fe20 422b4d9c c129d628 3ec14e82 00000004 40000000 3f000000 -> bff00000 3ff00000", + "422332fa c1ad1c15 4201b6ee 3ef37d45 00000004 40000000 3f000000 -> bff00000 3ff00000", + "bf96fe60 c2154380 413b812c 3f9eda37 00000004 40000000 3f000000 -> bff00000 3ff00000", + "413397a8 412eddf0 41149310 3ebce69e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "3f142180 c1427008 41e2e7d0 3f4a2a8f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "405a18d0 c21cee1e 41705c80 3c8b45e2 00000004 40000000 3f000000 -> be608532 3f7e183a", + "c23bf3c8 c2163a39 c0884550 3ef4784f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1aa14e0 c1c61d8c 41308b9c 3eef1579 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c085a310 c201e9d0 c2270b21 3dfa38b6 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41b7c2c0 c186fc56 c21dabd7 3fadf069 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4243d1b8 41ee9b74 c00ab2b0 3fd8722b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41f7e6ec c1432290 c199f88a 3f5a44a9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "424729dc c17fe3d8 c1851042 3fd15bce 00000004 40000000 3f000000 -> bff00000 3ff00000", + "412562d8 42134edc 421de0c8 3f51a95b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1b1930a c136a4d0 c208b31b 3fc89ee7 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42027aa0 41097bb4 42340052 3ef1e643 00000004 40000000 3f000000 -> bff00000 3ff00000", + "3fd33340 c1397354 c2072a18 3f5fe71a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "402c29d0 404e5530 c0920888 3eb3212a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1b5e055 c21e4350 c117fddc 3fbc6743 00000004 40000000 3f000000 -> bff00000 3ff00000", + "414ef434 41f3d950 c1f17f95 3fa6fa09 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41fd8418 c23b70ec c1cfa3b6 3ff285e7 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4227795c 41ea1990 414f91ac 3f97159b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1af9530 418a8d9c 41e211ec 3f30388a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c202cb10 c18e3214 420d3c9a 3f4ece7f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "420b4d68 c1ce03fb c188de44 3f5a25ff 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1e33d18 42143400 421fa5a4 3f6e8f38 00000004 40000000 3f000000 -> bff00000 3ff00000", + "421a481c c20856d2 40903240 3f7fa0db 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c06b1ae0 c2087309 41dfe208 3f726c89 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1f9d2d2 3f1e0200 423aab26 3fcb7ec1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1773cdc c246ee33 c1924512 3fb958ee 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41cb7d80 40e6c928 c20965ae 3fda9178 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41c7b8b8 c21bcba4 c2476640 3ff34efc 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1c6ffd1 c2477242 421b066a 3f463b6e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c01a4360 41d9dfd8 c0cc64b8 3ff2482f 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2131691 41dbd338 c22f5995 3fc278a1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1c9f2fe c213b79b c2155190 3e7a073e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "421d55cc c19881bb c2098c03 3faac142 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c16710c8 c230aef3 c230bdfe 3fd87d20 00000004 40000000 3f000000 -> bff00000 3ff00000", + "422a208c 41281038 41892310 3fa4ddca 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41ab3360 c235d62a 41acd058 3fc67a67 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c208f092 411775a0 c1c9c824 3f6c9ee3 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1b6f2e5 c12b381c 4246ee0a 3f54d2b0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22bfb60 c23fe2e3 4182043c 3f922723 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42306b62 40b86a58 c0179b10 3f9fb43e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c0aeaa58 c23a0e20 42382602 3f6191c5 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4235c05e c184464e 4117b44c 3ec600ec 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42314bbc c2373532 c0761810 3fdef4b3 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c21fa19d 41e9d630 c1d6174b 3e32d8d7 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2307e8f c1aadaa7 412302fc 3fa72feb 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42192c76 4183dbb8 420c21e4 3f80274d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1965dce 41c09aa4 411ae120 3f2bd7f6 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c126c440 bfa0a540 4221d038 3f3c6b09 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2148241 c234e4d3 c1f144cc 3fade68e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c225fc2e c1b36a1d 42005360 3fd2b589 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4247f056 c232131d 3fee9b00 3eeb3b67 00000004 40000000 3f000000 -> bff00000 3ff00000", + "422c937a c21569b1 c1946f70 3f0e647d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41e65188 40f21420 3f98b780 3fa7a040 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42364c8c 42015d36 41c093cc 3fc7dc37 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1fc6007 c07fdce0 c214b3de 3edb2734 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41be4924 c1c0633c 41edc034 3f6980fa 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c211056a c22274c1 41c1b3f8 3ddbaaea 00000004 40000000 3f000000 -> bfd69c86 3ff00000", + "41163600 40aa6450 c2474439 3fc87be8 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c05c0b30 41df1c54 4174e310 3fd4055d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c20d86fc 41419894 40dc82b8 3ebe71e2 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c0ebd7b0 c190c27f 4097af70 3fd1f95e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423e351a c1c810fb c10ce530 3f1c8020 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c19a5d72 c1037d00 bf0a0b00 3fa00d55 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c20d0130 412b814c c225f1fc 3fbd8ee0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1c1e66e c22edc0f c2233ed6 3fd670fe 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1390eb0 c1bef5dd 41931810 3ef0ac8d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "40ec35e0 41b71e78 c1f8cd2d 3eb58679 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c203db8d 42250a52 41570f58 3f90520b 00000004 40000000 3f000000 -> bff00000 3ff00000", + "421c71da 42311158 41e5dc08 3f5693ee 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41a9b0e8 423ed3ac bffc8660 3fe338db 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41918918 c0ca3460 41c4e3e0 3eb4b596 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2308b49 c1451768 4158dec0 3fdbc68c 00000004 40000000 3f000000 -> bff00000 3ff00000", + "419b004c 422516d2 40e19658 3e2b99a2 00000004 40000000 3f000000 -> bff00000 3ff00000", + "403a4fb0 41b91038 41f0fcec 3ea96320 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41584ae8 c195cc94 c1caf49e 3efceca3 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c22fa1e7 c1d3ef5d c21203ea 3f4a1c1d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41e2b9d4 422c6dfc 41bb1f8c 3ed2244e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41ffe4a0 41851064 c23cb681 3f0fd469 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41042090 c1ec83d4 c209bc50 3ff292eb 00000004 40000000 3f000000 -> bff00000 3ff00000", + "3fc26440 3f47d200 c201987f 3eca2312 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c222a873 c1878b20 bfd83880 3f041923 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c17ca1e0 40a37618 c23a3b23 3ea40c32 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c20f6d1e 4143b82c 41e2e630 3f4ca0a2 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41b89bf8 c1d51421 4202a4fa 3f64ec38 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c19e8543 c16d541c c12bc0ac 3e8312f1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4164a980 c0ddae48 c2389355 3d649ea0 00000004 40000000 3f000000 -> bfb71df2 3faf4eeb", + "4219cd52 c1a80ca4 3d99dc00 3f267284 00000004 40000000 3f000000 -> bff00000 3ff00000", + "40f22358 420d7b98 416fb358 3e82e195 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2114dcb c23446e5 c20ab1af 3fbb00f0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41c99428 4216ee74 c2331092 3eee4b69 00000004 40000000 3f000000 -> bff00000 3ff00000", + "421ea91e 40ed3038 c22ea569 3ecab18a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4219151a 414e2b00 409f5908 3f32d155 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1439b94 41a70eec 41691608 3ea7deb0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c219f08c c2349f3b 40ad11b8 3fa9ad30 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1a66476 c08dcdb8 c14afec4 3dd79d7e 00000004 40000000 3f000000 -> bfb491b8 3ff00000", + "c233de2b 41a7bbf0 4106954c 3f137fb1 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423d0136 4179fe98 c1bde6ee 3fae7e33 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c227d862 c2217eae 419be448 3f59807d 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1a088e9 c207de52 c1d744c7 3e0dd72b 00000004 40000000 3f000000 -> bfdceef0 3ff00000", + "c154417c 42086866 c20e1d28 3f03155a 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41c01d1c c20b4546 4232cdca 3fddedf0 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1e993d3 bfaf6a80 c2431c03 3e35c328 00000004 40000000 3f000000 -> bff00000 3ff00000", + "bef48d80 bf6fc140 c0c550e0 3f17e10e 00000004 40000000 3f000000 -> bff00000 3ff00000", + "3ed71200 c247ee6c c1fe675b 3ebfe346 00000004 40000000 3f000000 -> bff00000 3ff00000", + "424400b4 41dc8698 c1dbf9e3 3ee84a63 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c1560724 42135640 c1b92ad3 3f104d89 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c2426aaf c1df12d5 4211ac9e 3ff470b2 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41fe0654 bfbc4440 c1a3c497 3f670c21 00000004 40000000 3f000000 -> bff00000 3ff00000", + "c197391e c2190243 c1966166 3fe607df 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41d2205c 41add0bc c2281ecc 3f7912fe 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41666ea8 c20244e7 c1fb0408 3f970774 00000004 40000000 3f000000 -> bff00000 3ff00000", + "417cadb8 c122469c 422820c8 3f195968 00000004 40000000 3f000000 -> bff00000 3ff00000", + "423f555a c2366d8b c2287c5a 3f9785e9 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41399560 42274d64 421bc45a 3fdf3279 00000004 40000000 3f000000 -> bff00000 3ff00000", + "42195024 41846bfc 420d27a4 3ffca3f4 00000004 40000000 3f000000 -> bff00000 3ff00000", + "4143603c c23109c9 c1b76371 3caad5d3 00000004 40000000 3f000000 -> bf8ea1e0 3ecc763e", + "c1f3b972 4242f084 4242205a 3f4628b4 00000004 40000000 3f000000 -> bff00000 3ff00000", + "41968490 c1ad3591 c0f22840 3f0bd3ed 00000004 40000000 3f000000 -> bff00000 3ff00000", + "419cc42c 41bf0d0c 4103e728 3ec4ecc5 00000004 40000000 3f000000 -> bff00000 3ff00000" + ] + } + ] +} From 34a9329db51aa7cece9a2623ba5cd08c4dd68628 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 2 Oct 2026 20:09:45 +0200 Subject: [PATCH 03/13] CultMath tools: get-glslang.ps1 (pinned 16.6.0) and compile-glsl.ps1 compile-glsl.ps1 writes the wrapper a WebGL2 consumer writes (#version 300 es, highp precision, the library by concatenation, one call of every public function) and compiles it with glslang; -Body replaces the calls, for the negative control. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/tools/compile-glsl.ps1 | 46 +++++++++++++++++++ packages/cultmath/tools/compile-glsl.ps1.meta | 7 +++ packages/cultmath/tools/get-glslang.ps1 | 42 +++++++++++++++++ packages/cultmath/tools/get-glslang.ps1.meta | 7 +++ 4 files changed, 102 insertions(+) create mode 100644 packages/cultmath/tools/compile-glsl.ps1 create mode 100644 packages/cultmath/tools/compile-glsl.ps1.meta create mode 100644 packages/cultmath/tools/get-glslang.ps1 create mode 100644 packages/cultmath/tools/get-glslang.ps1.meta diff --git a/packages/cultmath/tools/compile-glsl.ps1 b/packages/cultmath/tools/compile-glsl.ps1 new file mode 100644 index 00000000..eba1c6cb --- /dev/null +++ b/packages/cultmath/tools/compile-glsl.ps1 @@ -0,0 +1,46 @@ +param( + # A GLSL source to append after the generated wrapper's library instead of the call-every-function + # body; tools\compile-glsl.ps1 -Body 'float x = lerp(0.0, 1.0, 0.5);' is the negative control. + [string]$Body = "", + [string]$GlslangPath = "" +) + +$ErrorActionPreference = "Stop" + +$repoRoot = Resolve-Path (Join-Path $PSScriptRoot "..") +if (-not $GlslangPath) { + $found = Get-ChildItem -LiteralPath (Join-Path $repoRoot ".tools\glslang\current") -Recurse -File -Include "glslang.exe", "glslangValidator.exe" -ErrorAction SilentlyContinue | Select-Object -First 1 + if ($found) { $GlslangPath = $found.FullName } +} + +# The wrapper is what a WebGL2 consumer writes: its own #version line and precision, then the library +# by string concatenation (GLSL has no #include), then a fragment shader that calls every public +# function once with zero arguments of its declared types. +$library = Get-Content -LiteralPath (Join-Path $repoRoot "shaders\CultMath.glsl") -Raw +$calls = foreach ($match in [regex]::Matches($library, '(?m)^\w+\s+(cultmath_\w+)\s*\(([^)]*)\)')) { + $arguments = foreach ($parameter in ($match.Groups[2].Value -split ',')) { + $type = ($parameter.Trim() -split '\s+')[0] + if ($type -eq 'int' -or $type -like 'ivec*') { "$type(0)" } + elseif ($type -eq 'uint' -or $type -like 'uvec*') { "$type(0u)" } + else { "$type(0.0)" } + } + " $($match.Groups[1].Value)($($arguments -join ', '));" +} +if (-not $Body) { + $Body = $calls -join "`n" +} + +$wrapper = "#version 300 es`nprecision highp float;`nprecision highp int;`n$library`nout vec4 cultmathColor;`nvoid main()`n{`n$Body`n cultmathColor = vec4(0.0);`n}`n" +$wrapperPath = Join-Path $repoRoot ".tools\glsl\cultmath-wrapper.frag" +New-Item -ItemType Directory -Force -Path (Split-Path -Parent $wrapperPath) | Out-Null +[System.IO.File]::WriteAllText($wrapperPath, $wrapper) +Write-Host "wrapper: $wrapperPath ($(@($calls).Count) functions)" + +if (-not $GlslangPath -or -not (Test-Path $GlslangPath)) { + throw "glslang not found. Run tools\get-glslang.ps1 first or pass -GlslangPath." +} + +& $GlslangPath -S frag $wrapperPath +if ($LASTEXITCODE -ne 0) { + throw "glslang failed with exit code $LASTEXITCODE." +} diff --git a/packages/cultmath/tools/compile-glsl.ps1.meta b/packages/cultmath/tools/compile-glsl.ps1.meta new file mode 100644 index 00000000..f8a18295 --- /dev/null +++ b/packages/cultmath/tools/compile-glsl.ps1.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 81a35b09c28246fe8d52cf8996540a46 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/packages/cultmath/tools/get-glslang.ps1 b/packages/cultmath/tools/get-glslang.ps1 new file mode 100644 index 00000000..e22e1095 --- /dev/null +++ b/packages/cultmath/tools/get-glslang.ps1 @@ -0,0 +1,42 @@ +param( + [string]$InstallRoot = ".tools\glslang" +) + +$ErrorActionPreference = "Stop" + +$repoRoot = Resolve-Path (Join-Path $PSScriptRoot "..") +$installPath = Join-Path $repoRoot $InstallRoot +New-Item -ItemType Directory -Force -Path $installPath | Out-Null + +# Pinned: the GLSL compile check means this front end (Khronos glslang 16.6.0). The hash is the +# SHA256 digest GitHub publishes for this asset of KhronosGroup/glslang release 16.6.0. +$zipName = "glslang-16.6.0-windows-x86_64-release.zip" +$zipUrl = "https://github.com/KhronosGroup/glslang/releases/download/16.6.0/$zipName" +$zipSha256 = "82BF434E69B9BB4829DE7E2B4BC2C5E7A7861E53D66CF75E5CC70F5F694A8D9B" + +$zipPath = Join-Path $installPath $zipName +Remove-Item -LiteralPath $zipPath -Force -ErrorAction SilentlyContinue + +& curl.exe -L --retry 5 --retry-delay 2 --fail -o $zipPath $zipUrl +if ($LASTEXITCODE -ne 0) { + throw "curl.exe failed with exit code $LASTEXITCODE." +} + +$actualSha256 = (Get-FileHash -LiteralPath $zipPath -Algorithm SHA256).Hash +if ($actualSha256 -ne $zipSha256) { + Remove-Item -LiteralPath $zipPath -Force + throw "$zipName SHA256 is $actualSha256, expected $zipSha256." +} + +$currentPath = Join-Path $installPath "current" +Remove-Item -LiteralPath $currentPath -Recurse -Force -ErrorAction SilentlyContinue +New-Item -ItemType Directory -Force -Path $currentPath | Out-Null +Expand-Archive -LiteralPath $zipPath -DestinationPath $currentPath -Force + +$glslangPath = Get-ChildItem -LiteralPath $currentPath -Recurse -File -Include "glslang.exe", "glslangValidator.exe" | Select-Object -First 1 +if (-not $glslangPath) { + throw "glslang executable was not found after extraction." +} + +& $glslangPath.FullName --version +Write-Host "glslang installed at $($glslangPath.FullName)" diff --git a/packages/cultmath/tools/get-glslang.ps1.meta b/packages/cultmath/tools/get-glslang.ps1.meta new file mode 100644 index 00000000..e254d120 --- /dev/null +++ b/packages/cultmath/tools/get-glslang.ps1.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 37d057d5ae6847b7b4689d36514b3dc9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 5ae207e82b25ad19ca1cadad1a556c1f80c2891c Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 2 Oct 2026 20:09:45 +0200 Subject: [PATCH 04/13] CultMath design.md, README, notices: the GLSL target design.md gains "GLSL Target: Source Transformations" (the list, the common-subset rule, the regeneration command, the derived-file rule, the two parity legs). README says how a WebGL consumer includes CultMath.glsl. THIRD-PARTY-NOTICES lists CultMath.glsl as MPL-2.0, because it inlines the Phacelle include. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/README.md | 6 +++ packages/cultmath/THIRD-PARTY-NOTICES.md | 6 ++- packages/cultmath/docs/design.md | 58 ++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/packages/cultmath/README.md b/packages/cultmath/README.md index 6b493a31..129e531e 100644 --- a/packages/cultmath/README.md +++ b/packages/cultmath/README.md @@ -41,6 +41,12 @@ shader semantics. ball. Every one returns an interval containing the function's value at every point of its input, so a raymarch can skip a segment whose `hi` is below its cutoff; `cultmath_iv_*` in HLSL. See `docs/design.md`, "Intervals". +- `shaders/CultMath.glsl`, the same `cultmath_*` library in GLSL ES 3.00 for + WebGL2, generated from `CultMath.hlsl` (never edited by hand). GLSL has no + `#include`: a WebGL consumer concatenates the file's text after its own + `#version 300 es` line and `precision highp float; precision highp int;` + (the library declares no precision, and its hashes need 32-bit integers), + then appends its own shader source. - `Voronoi.SampleTones`, a C# batch surface that calls the Rust `cultmath-core` native kernel when `cultmath_core` is available and falls back to the managed parity path otherwise. diff --git a/packages/cultmath/THIRD-PARTY-NOTICES.md b/packages/cultmath/THIRD-PARTY-NOTICES.md index 72efd7c1..f96efa7f 100644 --- a/packages/cultmath/THIRD-PARTY-NOTICES.md +++ b/packages/cultmath/THIRD-PARTY-NOTICES.md @@ -35,7 +35,9 @@ gradient and the exact pruning are new here. - License: MPL-2.0 (). MPL-2.0 is file-level, so it covers exactly the files that carry the port and nothing else: `src/CultMath/math.Phacelle.cs`, `src/CultMath/CultPhasor.cs`, - `shaders/CultMath.Phacelle.hlsl` and the Unity copy of that include. Each - carries the MPL-2.0 header and this attribution. The rest of CultMath is MIT, + `shaders/CultMath.Phacelle.hlsl` and the Unity copy of that include, and + `shaders/CultMath.glsl`, which is generated from the HLSL with that include + inlined, so the generated file as a whole is MPL-2.0. Each carries the + MPL-2.0 header and this attribution. The rest of CultMath is MIT, so the `GameCult.Math` NuGet package and the `org.gamecult.cultmath` Unity package both declare `MIT AND MPL-2.0` and ship this file. diff --git a/packages/cultmath/docs/design.md b/packages/cultmath/docs/design.md index 4b139234..849cfa3c 100644 --- a/packages/cultmath/docs/design.md +++ b/packages/cultmath/docs/design.md @@ -133,6 +133,64 @@ as its value. `CultCellular` (`math.cs`, `cellular`) and `CultPhasor` retyped field does not get a second comparison path or a shape of its own; it fails the same walk that already handles a bare vector return. +### GLSL Target: Source Transformations + +`shaders/CultMath.glsl` is a GLSL ES 3.00 (WebGL2) library generated from +`shaders/CultMath.hlsl` by `GlslLowering` (in the test project). It is a derived +file: never edit it by hand. Regenerate it, and the golden fixture +`tests/CultMath.Tests/fixtures/glsl-parity.json`, with: + +```powershell +$env:CULTMATH_WRITE_GLSL = "1"; dotnet test packages/cultmath/tests/CultMath.Tests --filter GlslMirrorTests +``` + +`GlslMirrorTests.CommittedGlslEqualsLowering` fails on any difference between the +committed file and the lowering of the committed HLSL. These transformations, +in order, are the complete list: + +1. Each `#include "name"` is replaced in place by the included file, by the + same resolver the C# mirror uses; GLSL has no `#include`. +2. Include guards are dropped, and so are the functions taking + `Texture2D`/`SamplerState`; the host shader samples its own textures. +3. Type names: `floatN`, `intN`, `uintN` and `boolN` become `vecN`, `ivecN`, + `uvecN` and `bvecN`. +4. File-scope `static const` becomes `const`. +5. C-style casts `(float)x`, `(int)x` and `(uint)x` become `float(x)`, `int(x)` + and `uint(x)`. The operand is found by a balanced-bracket scanner: + `(int)((state >> 28) + 4u)` nests parentheses. +6. Intrinsics are renamed: `lerp` to `mix`, `frac` to `fract`, `rsqrt` to + `inversesqrt`, `asuint` to `floatBitsToUint`, `asfloat` to + `uintBitsToFloat`, and `saturate(x)` becomes `clamp(x, 0.0, 1.0)`. +7. Float literals pass through unchanged. +8. The library is wrapped in a `CULTMATH_GLSL` guard. +9. The first line names the file as generated and says how to regenerate it. + +GLSL ES 3.00 is stricter than HLSL: no implicit conversions between int, uint +and float, no C-style casts, and no `step(genType, float)` overload. Those gaps +are closed in the HLSL, never in the lowering: the HLSL is written in the subset +both languages share, with edits that are legal HLSL and compute the same bits +(`step(h, float4(0.0, 0.0, 0.0, 0.0))` rather than `step(h, 0.0)`, `+ 4u` where +a uint is added, `(float)((uint)hash.x >> 8)` before a float multiply). The C# +mirror and the FXC and dxc compiles keep those edits honest. A body that needs a +transformation outside the list fails `GlslMirrorTests.NoHlslOnlyTokensSurvive` +rather than gaining a special case. + +The library declares no precision. The host shader does, and it must be +`precision highp float; precision highp int;`: the PCG hashes need 32-bit +integers. `tools/compile-glsl.ps1` writes such a wrapper (its own `#version +300 es` line, the precision, the library by string concatenation, and one call +of every public function) and compiles it with glslang, which +`tools/get-glslang.ps1` fetches pinned. The Unity package does not ship the +GLSL file. + +Parity runs in two legs, each with one owner: HLSL against C# by the mirror +test, bit for bit; GLSL against C# by the golden fixture, which records 256 +seeded cases per function family as float32 bit patterns, evaluated by the +consumer on WebGL2 and read back. Integer-only families (`pcg3d`, `pcg4d`) must +match exactly; float families are ulp-bounded, the bound measured on the device. +`iv_exp` is not in the fixture, because its C# bits come from the platform's +`exp`. + ## Invariant 8: Value-and-Gradient Primitives A primitive tagged invariant 8 returns its value and analytic gradient From 7fc91d60aaf70e983e7c3d5ae980379d29449596 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 13:36:09 +0200 Subject: [PATCH 05/13] CultMath GLSL: regenerate on the merge (cultmath_iv_frustum_ball) Regeneration alone (CULTMATH_WRITE_GLSL=1) on Yggdrasil at 8be32a2e: the lowering of r3's widened iv_frustum_ball, 15 lines. The fixture does not change. Full suite 286/286 green. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/shaders/CultMath.glsl | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/cultmath/shaders/CultMath.glsl b/packages/cultmath/shaders/CultMath.glsl index ad58fe35..6adf439b 100644 --- a/packages/cultmath/shaders/CultMath.glsl +++ b/packages/cultmath/shaders/CultMath.glsl @@ -712,6 +712,21 @@ vec2 cultmath_iv_fbm_ball(vec3 centre, float radius, int octaves, float lacunari return sum; } +// A ball (xyz centre, w radius) enclosing every point of every ray of a screen tile over the depth segment +// [z0, z1], warped by at most warp. Camera frame: pinhole at the origin looking down +z, ray (m z, z). +// footprintPerDepth = N / (sqrt(2) f) for an N x N tile at focal length f. The radius is widened by +// (|c|_1 + radius) 2^-20, which covers the ball's own float32 rounding. Derivation in math.Interval.cs. +vec4 cultmath_iv_frustum_ball(vec2 centreSlope, float z0, float z1, float footprintPerDepth, float warp) +{ + float zm = (z0 + z1) * 0.5; + float axis = sqrt(centreSlope.x * centreSlope.x + centreSlope.y * centreSlope.y + 1.0); + float cx = centreSlope.x * zm; + float cy = centreSlope.y * zm; + float radius = (z1 - z0) * 0.5 * axis + z1 * footprintPerDepth + warp; + radius += (abs(cx) + abs(cy) + abs(zm) + radius) * 9.5367431640625e-7; + return vec4(cx, cy, zm, radius); +} + From 2ba0dc17f4ab8018f597047e87df6d80e3ea9ded Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 13:40:16 +0200 Subject: [PATCH 06/13] CultMath GLSL: Phacelle lowered into its own MPL-2.0 file; iv_frustum_ball and iv_exp in the fixture GlslLowering.SeparateFiles is the one name-keyed rule: CultMath.Phacelle.hlsl lowers into shaders/CultMath.Phacelle.glsl (MPL-2.0, guard CULTMATH_PHACELLE_GLSL) and its include line leaves CultMath.glsl, which is now MIT and says so in its provenance line. ReadShaderSource takes an include predicate (one resolver); the C# mirror still inlines everything. GlslMirrorTests pins both files, checks tokens in each, takes the union of definitions and asserts cultmath_phacelle( and CultPhasor live only in the Phacelle file. The fixture appends cultmath_iv_frustum_ball (exact) and cultmath_iv_exp ("ulp-bounded, platform exp", platform named); the comparison is per family, the platform family within 1 ulp with the maximum printed. THIRD-PARTY-NOTICES lists CultMath.Phacelle.glsl, not CultMath.glsl, as MPL-2.0. Regenerated on Yggdrasil (Ubuntu 24.04.5, .NET 10.0.12); 286/286 green, iv_exp within 0 ulp. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/THIRD-PARTY-NOTICES.md | 10 +- .../cultmath/shaders/CultMath.Phacelle.glsl | 99 ++++ packages/cultmath/shaders/CultMath.glsl | 102 +--- .../tests/CultMath.Tests/GlslLowering.cs | 69 ++- .../tests/CultMath.Tests/GlslMirrorTests.cs | 126 ++++- .../HlslSourceCompatibilityTests.cs | 12 +- .../CultMath.Tests/fixtures/glsl-parity.json | 525 ++++++++++++++++++ 7 files changed, 799 insertions(+), 144 deletions(-) create mode 100644 packages/cultmath/shaders/CultMath.Phacelle.glsl diff --git a/packages/cultmath/THIRD-PARTY-NOTICES.md b/packages/cultmath/THIRD-PARTY-NOTICES.md index f96efa7f..d6da41ea 100644 --- a/packages/cultmath/THIRD-PARTY-NOTICES.md +++ b/packages/cultmath/THIRD-PARTY-NOTICES.md @@ -36,8 +36,8 @@ gradient and the exact pruning are new here. covers exactly the files that carry the port and nothing else: `src/CultMath/math.Phacelle.cs`, `src/CultMath/CultPhasor.cs`, `shaders/CultMath.Phacelle.hlsl` and the Unity copy of that include, and - `shaders/CultMath.glsl`, which is generated from the HLSL with that include - inlined, so the generated file as a whole is MPL-2.0. Each carries the - MPL-2.0 header and this attribution. The rest of CultMath is MIT, - so the `GameCult.Math` NuGet package and the `org.gamecult.cultmath` Unity - package both declare `MIT AND MPL-2.0` and ship this file. + `shaders/CultMath.Phacelle.glsl`, which is generated from that include. Each + carries the MPL-2.0 header and this attribution. The rest of CultMath, the + generated GLSL library included, is MIT, so the `GameCult.Math` NuGet + package and the `org.gamecult.cultmath` Unity package both declare + `MIT AND MPL-2.0` and ship this file. diff --git a/packages/cultmath/shaders/CultMath.Phacelle.glsl b/packages/cultmath/shaders/CultMath.Phacelle.glsl new file mode 100644 index 00000000..11405fa2 --- /dev/null +++ b/packages/cultmath/shaders/CultMath.Phacelle.glsl @@ -0,0 +1,99 @@ +// Generated from shaders/CultMath.Phacelle.hlsl by GlslLowering (packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with CULTMATH_WRITE_GLSL=1 dotnet test --filter GlslMirrorTests. MPL-2.0; requires CultMath.glsl before it. +#ifndef CULTMATH_PHACELLE_GLSL +#define CULTMATH_PHACELLE_GLSL +// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of +// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. +// +// Phacelle noise. Copyright (c) 2025 Rune Skovbo Johansen (Shadertoy t3dyWl; MPL-2.0), read from the +// C# port PhacelleNoise in lpmitchell/AdvancedTerrainErosion, converted to burstable C# by Luke +// Mitchell (2026). Modified by GameCult: 3D cells, a caller-supplied stripe wave vector, an exact +// gradient and exact pruning. This file is an MPL-2.0 file; CultMath.hlsl, which includes it after +// its own definitions of CULTMATH_TAU and cultmath_pcg3d, is MIT (see THIRD-PARTY-NOTICES.md). + +// Invariant 8's struct return shape for cultmath_phacelle, compared field by field and bit for bit +// against CultMath.CultPhasor, same field order. +struct CultPhasor +{ + vec4 cos; + vec4 sin; +}; + +// Johansen's Phacelle noise on 3D cells. See math.phacelle's comment (math.Phacelle.cs) for the stripe wave +// vector, the weight, the normalization, the exact gradient and why the prune is exact. Mirrors +// the C# body operation for operation; the C#-only internal overload that switches the prune off +// has no shader twin. +CultPhasor cultmath_phacelle(vec3 p, vec3 side, float offset, float normalization) +{ + vec3 cell = floor(p); + vec3 local = p - cell; + float phaseOffset = offset * CULTMATH_TAU; + float sumW = 0.0; + float sumCos = 0.0; + float sumSin = 0.0; + vec3 gradW = vec3(0.0, 0.0, 0.0); + vec3 gradCos = vec3(0.0, 0.0, 0.0); + vec3 gradSin = vec3(0.0, 0.0, 0.0); + + for (int dz = -1; dz <= 2; dz++) + { + float gz = max(0.0, abs(local.z - float(dz)) - 0.5); + for (int dy = -1; dy <= 2; dy++) + { + float gy = max(0.0, abs(local.y - float(dy)) - 0.5); + for (int dx = -1; dx <= 2; dx++) + { + float gx = max(0.0, abs(local.x - float(dx)) - 0.5); + if (gx * gx + gy * gy + gz * gz >= 2.25) + continue; + + vec3 gridStep = vec3(dx, dy, dz); + ivec3 hash = cultmath_pcg3d(ivec3(cell + gridStep)); + vec3 jitter = vec3( + float(uint(hash.x) >> 8) * (1.0 / 16777216.0) - 0.5, + float(uint(hash.y) >> 8) * (1.0 / 16777216.0) - 0.5, + float(uint(hash.z) >> 8) * (1.0 / 16777216.0) - 0.5); + vec3 v = local - gridStep - jitter; + float falloff = exp(-2.0 * dot(v, v)); + float w = max(0.0, falloff - 0.01111); + vec3 dw = w > 0.0 ? (-4.0 * falloff) * v : vec3(0.0, 0.0, 0.0); + float phase = dot(v, side) + phaseOffset; + float c = cos(phase); + float s = sin(phase); + + sumW += w; + sumCos += w * c; + sumSin += w * s; + gradW += dw; + gradCos += dw * c - (w * s) * side; + gradSin += dw * s + (w * c) * side; + } + } + } + + float invW = 1.0 / sumW; + float rawCos = sumCos * invW; + float rawSin = sumSin * invW; + vec3 gradRawCos = (gradCos - rawCos * gradW) * invW; + vec3 gradRawSin = (gradSin - rawSin * gradW) * invW; + float rawLength = sqrt(rawCos * rawCos + rawSin * rawSin); + float floorLength = 1.0 - normalization; + + CultPhasor result; + if (rawLength > floorLength) + { + float outCos = rawCos / rawLength; + float outSin = rawSin / rawLength; + vec3 gradLength = (rawCos * gradRawCos + rawSin * gradRawSin) / rawLength; + result.cos = vec4((gradRawCos - outCos * gradLength) / rawLength, outCos); + result.sin = vec4((gradRawSin - outSin * gradLength) / rawLength, outSin); + } + else + { + result.cos = vec4(gradRawCos / floorLength, rawCos / floorLength); + result.sin = vec4(gradRawSin / floorLength, rawSin / floorLength); + } + + return result; +} + +#endif diff --git a/packages/cultmath/shaders/CultMath.glsl b/packages/cultmath/shaders/CultMath.glsl index 6adf439b..61b6ebdf 100644 --- a/packages/cultmath/shaders/CultMath.glsl +++ b/packages/cultmath/shaders/CultMath.glsl @@ -1,4 +1,4 @@ -// Generated from shaders/CultMath.hlsl and its includes by GlslLowering (packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with CULTMATH_WRITE_GLSL=1 dotnet test --filter GlslMirrorTests. +// Generated from shaders/CultMath.hlsl and CultMath.Interval.hlsl by GlslLowering (packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with CULTMATH_WRITE_GLSL=1 dotnet test --filter GlslMirrorTests. MIT. cultmath_phacelle is in CultMath.Phacelle.glsl, to be concatenated after this file by consumers that call it. #ifndef CULTMATH_GLSL #define CULTMATH_GLSL // CultMath HLSL mirror. @@ -509,106 +509,6 @@ CultCellular cultmath_cellular(vec3 p) -// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of -// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. -// -// Phacelle noise. Copyright (c) 2025 Rune Skovbo Johansen (Shadertoy t3dyWl; MPL-2.0), read from the -// C# port PhacelleNoise in lpmitchell/AdvancedTerrainErosion, converted to burstable C# by Luke -// Mitchell (2026). Modified by GameCult: 3D cells, a caller-supplied stripe wave vector, an exact -// gradient and exact pruning. This file is an MPL-2.0 file; CultMath.hlsl, which includes it after -// its own definitions of CULTMATH_TAU and cultmath_pcg3d, is MIT (see THIRD-PARTY-NOTICES.md). - -// Invariant 8's struct return shape for cultmath_phacelle, compared field by field and bit for bit -// against CultMath.CultPhasor, same field order. -struct CultPhasor -{ - vec4 cos; - vec4 sin; -}; - -// Johansen's Phacelle noise on 3D cells. See math.phacelle's comment (math.Phacelle.cs) for the stripe wave -// vector, the weight, the normalization, the exact gradient and why the prune is exact. Mirrors -// the C# body operation for operation; the C#-only internal overload that switches the prune off -// has no shader twin. -CultPhasor cultmath_phacelle(vec3 p, vec3 side, float offset, float normalization) -{ - vec3 cell = floor(p); - vec3 local = p - cell; - float phaseOffset = offset * CULTMATH_TAU; - float sumW = 0.0; - float sumCos = 0.0; - float sumSin = 0.0; - vec3 gradW = vec3(0.0, 0.0, 0.0); - vec3 gradCos = vec3(0.0, 0.0, 0.0); - vec3 gradSin = vec3(0.0, 0.0, 0.0); - - for (int dz = -1; dz <= 2; dz++) - { - float gz = max(0.0, abs(local.z - float(dz)) - 0.5); - for (int dy = -1; dy <= 2; dy++) - { - float gy = max(0.0, abs(local.y - float(dy)) - 0.5); - for (int dx = -1; dx <= 2; dx++) - { - float gx = max(0.0, abs(local.x - float(dx)) - 0.5); - if (gx * gx + gy * gy + gz * gz >= 2.25) - continue; - - vec3 gridStep = vec3(dx, dy, dz); - ivec3 hash = cultmath_pcg3d(ivec3(cell + gridStep)); - vec3 jitter = vec3( - float(uint(hash.x) >> 8) * (1.0 / 16777216.0) - 0.5, - float(uint(hash.y) >> 8) * (1.0 / 16777216.0) - 0.5, - float(uint(hash.z) >> 8) * (1.0 / 16777216.0) - 0.5); - vec3 v = local - gridStep - jitter; - float falloff = exp(-2.0 * dot(v, v)); - float w = max(0.0, falloff - 0.01111); - vec3 dw = w > 0.0 ? (-4.0 * falloff) * v : vec3(0.0, 0.0, 0.0); - float phase = dot(v, side) + phaseOffset; - float c = cos(phase); - float s = sin(phase); - - sumW += w; - sumCos += w * c; - sumSin += w * s; - gradW += dw; - gradCos += dw * c - (w * s) * side; - gradSin += dw * s + (w * c) * side; - } - } - } - - float invW = 1.0 / sumW; - float rawCos = sumCos * invW; - float rawSin = sumSin * invW; - vec3 gradRawCos = (gradCos - rawCos * gradW) * invW; - vec3 gradRawSin = (gradSin - rawSin * gradW) * invW; - float rawLength = sqrt(rawCos * rawCos + rawSin * rawSin); - float floorLength = 1.0 - normalization; - - CultPhasor result; - if (rawLength > floorLength) - { - float outCos = rawCos / rawLength; - float outSin = rawSin / rawLength; - vec3 gradLength = (rawCos * gradRawCos + rawSin * gradRawSin) / rawLength; - result.cos = vec4((gradRawCos - outCos * gradLength) / rawLength, outCos); - result.sin = vec4((gradRawSin - outSin * gradLength) / rawLength, outSin); - } - else - { - result.cos = vec4(gradRawCos / floorLength, rawCos / floorLength); - result.sin = vec4(gradRawSin / floorLength, rawSin / floorLength); - } - - return result; -} - - - - - - // Interval arithmetic over vec2(lo, hi), lo <= hi, both finite. Every cultmath_iv_* function returns // an interval containing f(x) for every x in its input intervals, mirroring math.Interval.cs bit for // bit; see that file and docs/design.md ("Intervals") for each op's enclosure and its ulp widening. diff --git a/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs b/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs index 950fb270..e5ccb88f 100644 --- a/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs +++ b/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs @@ -4,24 +4,66 @@ using System.Text.RegularExpressions; namespace CultMath.Tests; /// -/// The HLSL to GLSL ES 3.00 transformation that produces shaders/CultMath.glsl from -/// shaders/CultMath.hlsl. The steps below, in order, are the complete list documented in -/// docs/design.md (GLSL Target: Source Transformations). A dialect gap outside the list is fixed in the -/// HLSL, in the subset both languages share, never by a special case here; GlslMirrorTests fails on any -/// HLSL-only token that survives. +/// The HLSL to GLSL ES 3.00 transformation that produces shaders/CultMath.glsl, and one file per +/// entry, from shaders/CultMath.hlsl and its includes. The steps below, +/// in order, are the complete list documented in docs/design.md (GLSL Target: Source Transformations). +/// A dialect gap outside the list is fixed in the HLSL, in the subset both languages share, never by a +/// special case here; GlslMirrorTests fails on any HLSL-only token that survives. /// internal static class GlslLowering { - internal const string ProvenanceLine = - "// Generated from shaders/CultMath.hlsl and its includes by GlslLowering " + - "(packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with " + + /// + /// Includes under a file-level licence of their own: each is lowered into its own output file instead + /// of being inlined, so CultMath.glsl stays MIT. This table is the lowering's only rule keyed by name. + /// + internal static readonly IReadOnlyDictionary SeparateFiles = + new Dictionary + { + // Phacelle is a port of MPL-2.0 code, and MPL-2.0 covers the files that carry it. + ["CultMath.Phacelle.hlsl"] = ("CultMath.Phacelle.glsl", "MPL-2.0"), + }; + + private const string Regenerate = + "by GlslLowering (packages/cultmath/tests/CultMath.Tests/GlslLowering.cs). Do not edit; regenerate with " + "CULTMATH_WRITE_GLSL=1 dotnet test --filter GlslMirrorTests."; /// - /// Lowers the HLSL text whose includes are already inlined in place (step 1: - /// , the C# mirror's own resolver). + /// The lowered files as (name under shaders/, text): CultMath.glsl first, then one per + /// entry, which requires CultMath.glsl before it. /// - internal static string Lower(string hlsl) + internal static IReadOnlyList<(string File, string Text)> Lower(string cultMathRoot) + { + // 1. Each #include is inlined in place by the C# mirror's own resolver, except a SeparateFiles + // include, which leaves nothing behind and is lowered into its own file. + var inlined = new List(); + var library = HlslSourceCompatibilityTests.ReadShaderSource(cultMathRoot, name => + { + if (SeparateFiles.ContainsKey(name)) + return false; + inlined.Add(name); + return true; + }); + + var outputs = new List<(string File, string Text)>(); + var pointers = new List(); + foreach (var (hlsl, (glsl, licence)) in SeparateFiles) + { + var text = LowerText( + File.ReadAllText(Path.Combine(cultMathRoot, "shaders", hlsl)), + $"// Generated from shaders/{hlsl} {Regenerate} {licence}; requires CultMath.glsl before it.", + glsl); + var functions = Regex.Matches(text, @"(?m)^\w+\s+(cultmath_\w+)\s*\(").Select(m => m.Groups[1].Value); + pointers.Add($" {string.Join(", ", functions)} is in {glsl}, to be concatenated after this file by consumers that call it."); + outputs.Add((glsl, text)); + } + + var includes = string.Concat(inlined.Select(name => " and " + name)); + outputs.Insert(0, ("CultMath.glsl", LowerText( + library, $"// Generated from shaders/CultMath.hlsl{includes} {Regenerate} MIT.{string.Concat(pointers)}", "CultMath.glsl"))); + return outputs; + } + + private static string LowerText(string hlsl, string provenance, string file) { var source = hlsl.ReplaceLineEndings("\n"); @@ -56,8 +98,9 @@ internal static class GlslLowering // 7. Float literals pass through: HLSL's unsuffixed 0.5 and 1.0e30 are GLSL literals already. - // 8. The CULTMATH_GLSL guard, and 9. the provenance line. - return ProvenanceLine + "\n#ifndef CULTMATH_GLSL\n#define CULTMATH_GLSL\n" + source.Trim('\n') + "\n\n#endif\n"; + // 8. The guard named for the file (CultMath.glsl -> CULTMATH_GLSL), and 9. the provenance line. + var guard = file.ToUpperInvariant().Replace('.', '_'); + return provenance + "\n#ifndef " + guard + "\n#define " + guard + "\n" + source.Trim('\n') + "\n\n#endif\n"; } private static readonly Regex Cast = new(@"\((float|int|uint)\)"); diff --git a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs index e31b69da..129fa7de 100644 --- a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs @@ -1,5 +1,7 @@ using System.Reflection; +using System.Runtime.InteropServices; using System.Text; +using System.Text.Json.Nodes; using System.Text.RegularExpressions; using CultMath; using Xunit; @@ -7,34 +9,40 @@ using Xunit; namespace CultMath.Tests; /// -/// shaders/CultMath.glsl is derived: it is exactly of the committed HLSL, -/// no HLSL-only token survives the lowering, no public function is dropped except the texture samplers, -/// and the golden fixture a WebGL2 consumer evaluates is C#'s current output. With CULTMATH_WRITE_GLSL=1 -/// set, the first and last tests write the committed files before comparing, which is the one -/// regeneration path. +/// shaders/CultMath.glsl and shaders/CultMath.Phacelle.glsl are derived: each is exactly its +/// output from the committed HLSL, no HLSL-only token survives the +/// lowering, no public function is dropped except the texture samplers, the MPL-2.0 Phacelle code lives +/// only in its own file, and the golden fixture a WebGL2 consumer evaluates is C#'s current output. With +/// CULTMATH_WRITE_GLSL=1 set, the first and last tests write the committed files before comparing, which +/// is the one regeneration path. /// public sealed class GlslMirrorTests { + private readonly ITestOutputHelper output; + + public GlslMirrorTests(ITestOutputHelper output) => this.output = output; + private static bool Write => Environment.GetEnvironmentVariable("CULTMATH_WRITE_GLSL") == "1"; private static string Root => HlslSourceCompatibilityTests.FindCultMathRoot(); - private static string GlslPath => Path.Combine(Root, "shaders", "CultMath.glsl"); - private static string FixturePath => Path.Combine(Root, "tests", "CultMath.Tests", "fixtures", "glsl-parity.json"); private static string Hlsl => HlslSourceCompatibilityTests.ReadShaderSource(Root).ReplaceLineEndings("\n"); - private static string Lowered => GlslLowering.Lower(HlslSourceCompatibilityTests.ReadShaderSource(Root)); + private static IReadOnlyList<(string File, string Text)> Lowered => GlslLowering.Lower(Root); [Fact] public void CommittedGlslEqualsLowering() { - var expected = Lowered; - if (Write) - File.WriteAllText(GlslPath, expected); - var committed = File.ReadAllText(GlslPath).ReplaceLineEndings("\n"); - Assert.True(committed == expected, "shaders/CultMath.glsl is not the lowering of the committed HLSL (regenerate with CULTMATH_WRITE_GLSL=1):\n" + UnifiedDiff(committed, expected)); + foreach (var (file, expected) in Lowered) + { + var path = Path.Combine(Root, "shaders", file); + if (Write) + File.WriteAllText(path, expected); + var committed = File.ReadAllText(path).ReplaceLineEndings("\n"); + Assert.True(committed == expected, $"shaders/{file} is not the lowering of the committed HLSL (regenerate with CULTMATH_WRITE_GLSL=1):\n" + UnifiedDiff(committed, expected)); + } } // Identifier boundaries: cultmath_lerp is a CultMath function, lerp( is HLSL. @@ -44,8 +52,11 @@ public sealed class GlslMirrorTests [Fact] public void NoHlslOnlyTokensSurvive() { - var survivors = HlslOnly.Matches(Lowered).Select(m => m.Value).Distinct().ToArray(); - Assert.True(survivors.Length == 0, "HLSL-only tokens in the lowering: " + string.Join(", ", survivors)); + foreach (var (file, text) in Lowered) + { + var survivors = HlslOnly.Matches(text).Select(m => m.Value).Distinct().ToArray(); + Assert.True(survivors.Length == 0, $"HLSL-only tokens in {file}: " + string.Join(", ", survivors)); + } } private static readonly Regex Definition = new(@"(?m)^\w+\s+(cultmath_\w+)\s*\(([^)]*)\)"); @@ -53,11 +64,21 @@ public sealed class GlslMirrorTests [Fact] public void EveryPublicFunctionIsLowered() { + var lowered = Lowered; var hlsl = Definition.Matches(Hlsl).Where(m => !Regex.IsMatch(m.Groups[2].Value, @"\b(Texture2D|SamplerState)\b")) .Select(m => m.Groups[1].Value).ToHashSet(); - var glsl = Definition.Matches(Lowered).Select(m => m.Groups[1].Value).ToHashSet(); + var glsl = lowered.SelectMany(output => Definition.Matches(output.Text)).Select(m => m.Groups[1].Value).ToHashSet(); Assert.Contains("cultmath_snoise", glsl); Assert.True(hlsl.SetEquals(glsl), "HLSL only: " + string.Join(", ", hlsl.Except(glsl)) + "; GLSL only: " + string.Join(", ", glsl.Except(hlsl))); + + // The MPL-2.0 code is in its own file and nowhere in the MIT library. + var library = lowered.Single(output => output.File == "CultMath.glsl").Text; + var phacelle = lowered.Single(output => output.File == "CultMath.Phacelle.glsl").Text; + foreach (var token in new[] { "cultmath_phacelle(", "CultPhasor" }) + { + Assert.DoesNotContain(token, library); + Assert.Contains(token, phacelle); + } } [Fact] @@ -70,10 +91,59 @@ public sealed class GlslMirrorTests File.WriteAllText(FixturePath, expected); } - var committed = File.ReadAllText(FixturePath).ReplaceLineEndings("\n"); - Assert.True(committed == expected, "fixtures/glsl-parity.json is not C#'s current output (regenerate with CULTMATH_WRITE_GLSL=1):\n" + UnifiedDiff(committed, expected)); + // Family by family: every family is compared as text, except one whose tolerance names the + // platform, whose results are compared case by case within one ulp. + var committed = JsonNode.Parse(File.ReadAllText(FixturePath))!.AsObject(); + var current = JsonNode.Parse(expected)!.AsObject(); + var committedFamilies = committed["functions"]!.AsArray(); + var currentFamilies = current["functions"]!.AsArray(); + Assert.Equal(currentFamilies.Count, committedFamilies.Count); + for (var f = 0; f < currentFamilies.Count; f++) + { + var want = currentFamilies[f]!.AsObject(); + var have = committedFamilies[f]!.AsObject(); + var name = (string)want["glsl"]!; + Assert.Equal(name, (string?)have["glsl"]); + Assert.Equal((string)want["tolerance"]!, (string?)have["tolerance"]); + if (((string)want["tolerance"]!).Contains(PlatformTolerance)) + { + var ulps = MaxUlps(have["cases"]!.AsArray(), want["cases"]!.AsArray(), name); + output.WriteLine($"{name}: within {ulps} ulp of this platform's exp ({RuntimeInformation.OSDescription}); fixture generated on {have["platform"]}"); + Assert.True(ulps <= 1, $"{name}: {ulps} ulp from this platform's result, more than 1"); + } + else + { + Assert.True(JsonNode.DeepEquals(want, have), $"fixtures/glsl-parity.json family {name} is not C#'s current output (regenerate with CULTMATH_WRITE_GLSL=1)"); + } + } + + committed.Remove("functions"); + current.Remove("functions"); + Assert.True(JsonNode.DeepEquals(current, committed), "fixtures/glsl-parity.json header is not the generator's (regenerate with CULTMATH_WRITE_GLSL=1)"); } + // The largest distance in float32 ulps between two families' results; arguments must be identical. + private static long MaxUlps(JsonArray committed, JsonArray current, string name) + { + Assert.Equal(current.Count, committed.Count); + long max = 0; + for (var c = 0; c < current.Count; c++) + { + var have = ((string)committed[c]!).Split(" -> "); + var want = ((string)current[c]!).Split(" -> "); + Assert.True(have[0] == want[0], $"{name} case {c}: arguments differ"); + var haveBits = have[1].Split(' ').Select(h => (int)Convert.ToUInt32(h, 16)).ToArray(); + var wantBits = want[1].Split(' ').Select(h => (int)Convert.ToUInt32(h, 16)).ToArray(); + Assert.Equal(wantBits.Length, haveBits.Length); + max = Math.Max(max, haveBits.Zip(wantBits, (x, y) => Math.Abs((long)Ordered(x) - Ordered(y))).Max()); + } + + return max; + } + + // A float32 bit pattern as an integer whose order and differences are the floats' order and ulps. + private static int Ordered(int bits) => bits < 0 ? int.MinValue - bits : bits; + // ---- The golden fixture ---- private const int Seed = 20261002; @@ -92,9 +162,14 @@ public sealed class GlslMirrorTests return new float2(centre - width * 0.5f, centre + width * 0.5f); } - // Every family the site's WebGL2 readback evaluates. pcg3d and pcg4d are integer-only and must match - // exactly; the float families are ulp-bounded, with the bound measured on the device by the consumer. - // iv_exp is left out: it calls the platform's exp, so its C# bits are not the same on every OS. + // A tolerance containing this names a family whose C# bits come from the platform's exp and so differ + // by OS: GoldenFixtureMatchesCSharp compares it within one ulp, and its entry records the platform. + private const string PlatformTolerance = "platform exp"; + + // Every family the site's WebGL2 readback evaluates, in a fixed order. A new family is appended, so the + // seeded stream and every earlier family's cases stay as they were. pcg3d, pcg4d and iv_frustum_ball + // are "exact"; the other float families are ulp-bounded, with the bound measured on the device by the + // consumer. private static readonly Family[] Families = { new("float cultmath_snoise(vec3)", "ulp-bounded", r => new object[] { Point3(r) }), @@ -122,6 +197,13 @@ public sealed class GlslMirrorTests new("vec2 cultmath_iv_lerp(vec2, vec2, float)", "ulp-bounded", r => new object[] { Interval(r), Interval(r), Uniform(r, 0.0f, 1.0f) }), new("vec2 cultmath_iv_snoise_ball(vec3, float)", "ulp-bounded", r => new object[] { Point3(r), Uniform(r, 0.001f, 2.0f) }), new("vec2 cultmath_iv_fbm_ball(vec3, float, int, float, float)", "ulp-bounded", r => new object[] { Point3(r), Uniform(r, 0.001f, 2.0f), 4, 2.0f, 0.5f }), + new("vec4 cultmath_iv_frustum_ball(vec2, float, float, float, float)", "exact", r => + { + var slope = new float2(Uniform(r, -1.0f, 1.0f), Uniform(r, -1.0f, 1.0f)); + var z0 = Uniform(r, 0.1f, 100.0f); + return new object[] { slope, z0, z0 + Uniform(r, 0.01f, 50.0f), Uniform(r, 0.0001f, 0.05f), Uniform(r, 0.0f, 2.0f) }; + }), + new("vec2 cultmath_iv_exp(vec2)", "ulp-bounded, " + PlatformTolerance, r => new object[] { Interval(r) }), }; private static string GoldenFixture() @@ -141,6 +223,8 @@ public sealed class GlslMirrorTests json.Append(" {\n"); json.Append($" \"glsl\": \"{family.Glsl}\",\n"); json.Append($" \"tolerance\": \"{family.Tolerance}\",\n"); + if (family.Tolerance.Contains(PlatformTolerance)) + json.Append($" \"platform\": \"{RuntimeInformation.OSDescription}; {RuntimeInformation.FrameworkDescription}\",\n"); json.Append(" \"cases\": [\n"); for (var p = 0; p < Points; p++) { diff --git a/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs b/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs index 5ebf9525..ce38dea4 100644 --- a/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/HlslSourceCompatibilityTests.cs @@ -315,13 +315,17 @@ public sealed class HlslSourceCompatibilityTests /// /// The text of CultMath.hlsl with each #include "name" replaced in place by the /// included file from the same directory, as the shader compiler would resolve it. Only the - /// package's own includes exist, so a missing file is an error rather than a skip. + /// package's own includes exist, so a missing file is an error rather than a skip. An include for + /// which returns false is dropped with its line instead (the GLSL + /// lowering's separately licensed files); the C# mirror inlines every one. /// - internal static string ReadShaderSource(string cultMathRoot) + internal static string ReadShaderSource(string cultMathRoot, Func? inline = null) { var shaders = Path.Combine(cultMathRoot, "shaders"); - return Regex.Replace(File.ReadAllText(Path.Combine(shaders, "CultMath.hlsl")), @"(?m)^#include ""([^""]+)""[ \t]*\r?$", - match => File.ReadAllText(Path.Combine(shaders, match.Groups[1].Value))); + return Regex.Replace(File.ReadAllText(Path.Combine(shaders, "CultMath.hlsl")), @"(?m)^#include ""([^""]+)""[ \t]*\r?$(\n?)", + match => inline is null || inline(match.Groups[1].Value) + ? File.ReadAllText(Path.Combine(shaders, match.Groups[1].Value)) + match.Groups[2].Value + : string.Empty); } /// The documented HLSL-to-C# transformations, and nothing else. diff --git a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json index 433a41b6..ddafeb62 100644 --- a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json +++ b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json @@ -6553,6 +6553,531 @@ "41968490 c1ad3591 c0f22840 3f0bd3ed 00000004 40000000 3f000000 -> bff00000 3ff00000", "419cc42c 41bf0d0c 4103e728 3ec4ecc5 00000004 40000000 3f000000 -> bff00000 3ff00000" ] + }, + { + "glsl": "vec4 cultmath_iv_frustum_ball(vec2, float, float, float, float)", + "tolerance": "exact", + "cases": [ + "3eba7b90 3eb7145c 427992e9 42ba552a 3c779789 3f90a589 -> 41e2a26a 41de7fa1 429b8f4f 419e80d6", + "3f73f64c 3f0c1560 4222d6fe 4297c95b 3d2b135d 3f4911fc -> 425e3d89 41ff38c0 426934da 41f0be8c", + "bf0b3bac bdf4d708 3fcf79e5 40cf912e 3d3114bd 3e3e1d32 -> c00d1a19 bef82057 4081b7d4 40500a91", + "3f3a6c22 3e316390 42b4bb59 42c660ce 3ca20ba7 3fabaad2 -> 428a094c 418358f4 42bd8e14 410d060f", + "be31a3d8 3d899d70 42748f85 42bfc55b 3cfe1a00 3fce5929 -> c159ec11 40a8d228 429d068f 41b20e9c", + "3f4a9c78 3f411d36 4206979d 42890daa 3c1cb84a 3ed166e1 -> 4221bb7f 421a26c5 424c5978 41d73c63", + "bf6a8307 bf066589 428944ec 428eff1a 3b87959a 3f7e8c43 -> c2805ed0 c21322c4 428c2203 4057d762", + "3e53d0f0 bc876000 41751d2c 4233d09e 3c035ac7 3efddf6e -> 40c77b7a befefc0a 41f117e9 417fd2f9", + "beed4c2a beb0f3c0 42239431 428e1c3a 3d333100 3ffeee4d -> c1cf8ad7 c19ac388 425fe652 41b427bb", + "bed8bcb0 3c3e8000 41e413bf 4298518b 3c26e20b 3fc469e0 -> c1b13b43 3f1bc6db 4251567b 41e1777c", + "3f687470 bedf98e0 4177bf60 42360b63 3d258870 3ff533f9 -> 41dd8aa6 c155198b 41f3fb3b 41c88b16", + "bf62de25 3d7a4040 41c9076e 42835586 3b3af21b 3fa07ae9 -> c220ed38 40318369 42359762 41e46bc0", + "be3ee140 3f1d3204 424a7a45 428de3fc 3ceaff9c 3fe71569 -> c1354881 42154ad0 4273211e 417ea87a", + "3d155040 3f242db2 4216395d 425ede18 3caf3282 3f15b6a9 -> 3fd99b9b 41ef459f 423a8bba 41491a58", + "be5186a0 bed461aa 3eb176b7 418ad2a2 3ca8146d 3faf1262 -> bfe7c7e9 c06af099 410d987d 41317a97", + "3f571914 bf527068 4068a7bb 42464d73 3babcf63 3fcc9d21 -> 41b2d633 c1aef697 41d4d7ef 42153b67", + "bea098aa bf7e7b00 4288d592 429c4d84 3cdbcdc2 3fa0cc15 -> c1b7e4bd c291b2d4 4292918b 41262439", + "3f7ea95c bdadf0f8 41da358f 4284b466 3c2226dc 3e0a9e8e -> 423a4728 c07e7771 423b41ca 41e3353b", + "bca1cf40 3f438e26 42ba9a04 42e0c8f8 3cb28a08 3f434e6d -> c0020326 429d206a 42cdb17e 41739f77", + "be5c8f00 3e3a3608 42ab0a9e 430099fa 3c27696a 3f83e9c8 -> c1b87a7e 419bbfec 42d61f49 41c5cbfd", + "3f692462 3ede1ca8 41439ca8 422240ba 3d367174 3ff75747 -> 41c04d51 4137343b 41d327e4 41beeaf2", + "3e3b5de8 bcc485a0 428cd979 42d37f82 3b5555d3 3f91e546 -> 4180f120 c0073e06 42b02c7e 419b8e6a", + "bf0ff773 beb4875a 41e48a22 4283d273 3c964fe0 3ff81378 -> c1d486fc c1854029 423cf4fc 41cc7754", + "bf759152 3e6e00c0 411b7809 4261d395 3d2e1d59 3f86f841 -> c1fde838 40f615e2 420458cc 4211296a", + "3f007a50 3d9d4c50 4282ea47 42c450a8 3cd80964 3f831c17 -> 422439d0 40c910b1 42a39d78 41af98b7", + "3f636f84 bd16e440 42a01495 42b0f436 3c452c66 3fd19c95 -> 4295b6cf c046a7a8 42a88466 41058ed4", + "3c5cb300 be0de0f4 4262f0a1 429011d6 3c1cf805 3fb554e5 -> 3f5e06cc c10ebb65 4280c513 411d49fc", + "be8b8962 3f1140b4 42a3c75f 42c8185d 3c06d0b1 3e63702a -> c1c655c1 424e75b1 42b5efde 413c603a", + "bf4e97c7 3e94f9d8 41b4cb94 4285cd78 3d2c585b 3f96285a -> c210746b 415055d0 4233005d 4204b12a", + "be25d7fc bf757789 42ad6f1f 42e8db86 3d272309 3f34556b -> c1839a72 c2c2c993 42cb2552 41d16b3d", + "bec0915a 3f600790 42c04fbd 42d38210 3d1c330e 3f94e70e -> c217e150 42b0b1c0 42c9e8e6 413d3025", + "3f0a1670 bf664628 4108b80d 41fede26 3c45ec62 3fef5ae7 -> 412e59b0 c1915f6c 41a19d16 41992df4", + "be486fe8 3edbaa80 422ab7b0 4278545e 3cea40d8 3e078533 -> c1240c4c 41b3c934 42518607 414a2433", + "3ed58464 be65965c 421673f1 42818d9f 3ce4afc5 3fe18959 -> 41aacbf8 c137a6d2 424cc798 4194c7c0", + "beda2f86 bf623449 42802552 429586c3 3d199c25 3edfd7ad -> c1eca815 c2755aa0 428ad60a 412ba98b", + "3f674cd8 3f533df0 427626cd 42908fcf 3d4b8e48 3f013f1d -> 4271d09c 425cd846 4285d19b 41495e4f", + "3efcbb28 bf27f8d8 400fbbc4 4161b481 3cf35cdc 3e66b496 -> 40812616 c0ababf2 4102d1b9 41051545", + "bf726bfc 3e85765c 422265b0 425c792a 3cc69f42 3e81bc02 -> c2354815 41479acc 423f6f6d 413c3ed0", + "bf2de8d0 bf7015c3 42340781 42aa1aec 3d356d0f 3f5b0cde -> c230b549 c273f2de 42820f56 420d08c3", + "3f7412de 3f099c24 42184c5f 42287042 3d395b8a 3fb43acb -> 4218e5b6 41ac6892 42205e50 40c9c110", + "3f61efa0 3de59850 41f11e40 4292e041 3cd31933 3f27ae99 -> 4236d3e6 40b9c9de 424f27d1 41fc315b", + "beb8555c bf20097a 42902d49 42a1926c 3d03734f 3f4c5975 -> c1dc27bc c23f2322 4298dfda 410c0d6b", + "bf691e1b bd69e000 429ef423 42b94118 3cd404b3 3fed5642 -> c29cb877 c09d3ad1 42ac1a9e 41527036", + "bd47db10 3f7e4e1c 4265e4eb 42a6530b 3b34e8d7 3fb7ed3c -> c05b95b7 428bb463 428ca2c0 419e41b1", + "3f09c3fc bf32be2e 4032a729 414285bd 3c443705 3ee68bed -> 4080b78c c0a700bc 40ef2f87 40dad7f2", + "3f3e9f40 3eaa481c 41d63aab 422aa228 3c737515 3d98b369 -> 41ced0e7 4138bf66 420adfbf 412f4330", + "3f1fb802 bf2dc82b 413ae66e 41795cfe 3d46b83f 3f17c941 -> 410817ba c1141357 415a21b6 4080218a", + "be405494 3f791cc8 421c39c0 42265819 3d1af6d1 3f5410aa -> c0f257f4 421cf210 422148ec 4085d752", + "3e8877d8 3edafaec 41ca49f0 423fc5a2 3cf8189f 3fe87ee7 -> 411c25c2 417a8ee2 4212754d 417f43ec", + "bf3d965a be144368 42494b41 429ee0fa 3ba1a96f 3f3a1e60 -> c24032cc c1164e27 4281c34d 419adaa1", + "becc395a bf3bfe4c 42bde57c 42ef73e5 3c781d3b 3ff98f12 -> c22b41b4 c29da564 42d6acb0 419f44e5", + "bf3c61c8 3ee8b028 418d320e 425e105f 3cb92445 3f364f56 -> c1d75c30 41850173 421254b3 41d7fe89", + "3f1f518a be517dec 402f6f49 418520cc 3bb331ca 3e08bdb7 -> 40c0ff0b bffdc68e 411b0eb5 4108873c", + "beaf9b28 3edfeb30 421e2147 428c5912 3ce33d4f 3f862e96 -> c196823f 41bfeaa9 425b69b6 41a42f23", + "3f7230fe be255068 40c7692d 41c1736c 3c1b21c0 3fde40b6 -> 41662e07 c01d1d82 41734db7 41667a4c", + "3d8d7cd0 bf0a62ac 40cee4ba 42305acc 3d1f49ef 3fd6618e -> 3fdf8631 c15a9f99 41ca3763 41c68156", + "be9ca544 3f523dac 428913c2 42b299b0 3d3c1bd5 3d6d10c0 -> c1c1297c 4281a02a 429dd6b9 418fb2e1", + "bf05e0c4 3f408168 41d2f10d 428e5765 3d03997b 3ed42d63 -> c1cc08fa 4212b15a 424313a8 4204514f", + "3f437482 3f3426f8 42004794 42577efe 3c511304 3f41a29a -> 42033c5b 41f1ebf3 422be349 41894800", + "3f7005ae 3ec05170 4267bdef 429e6929 3cd6611c 3fe1d7a1 -> 428094da 41ce0d59 42892410 41979fcc", + "3f53b14c 3f0be0ca 4257fad5 428ac0d7 3c37bddf 3ee28024 -> 424c09b3 4206d1f7 4276be42 4140c8a2", + "bed4a09a bf61eb11 42784d7c 428f119a 3d3ea961 3ec9afe4 -> c1ddf24d c26bd1e4 42859c2c 41254876", + "be7248cc 3f53a884 42a01b57 42c4b295 3c99cc55 3fad8b25 -> c1a8d810 4293804c 42b266f6 417447e1", + "bef485c8 bf5894a5 429b8756 42f0f2e8 3cc3db31 3f2bf933 -> c23d59da c2a7b6ad 42c63d1f 42054dae", + "3dc53f20 bf4d87cc 42c333f6 4303e17f 3d20930f 3e3756fa -> 4130d09b c2b83d9c 42e57b7a 41db217d", + "bef74dce 3f57eea6 421b85ce 429e0d80 3ccde299 3e949ec7 -> c1e3cdbf 4246e7db 426bd067 41f22740", + "bcacdba0 3f5caf3a 4282b80a 4286e9b2 3cf797dd 3f954671 -> bfb35c8e 4264fccf 4284d0de 4092de01", + "3e31d288 3ec55ca4 42b838f1 42c48bbe 3b3809b0 3f2e3fbd -> 41843e91 4212c693 42be6258 4089a73e", + "3e1f74b8 3e52f818 41fb696e 4298f538 3c07c796 3f6410d6 -> 41066c52 4131d96d 4257cf94 41c65214", + "bf4a5ad3 bf61a4da 41ed6d75 421f7761 3d1b9c7c 3e7e4ada -> c1dbe314 c1f531a9 420b170e 411a852d", + "bf027502 3e5acab0 41dcaf58 4258884a 3d3e9953 3c94d55b -> c1a69322 410baec2 42236ffb 418d9f16", + "3f1e1676 3e216db8 4224eeaa 4293fe26 3d3385fa 3f62ec26 -> 420e50ba 411152a8 4266757b 41bc71dd", + "bf736034 bf0fa2e2 423d88ab 42646dd4 3c5c35b7 3fc8cd4c -> c246ad06 c1ea82a0 4250fb40 41194085", + "be2e61d0 be1966c8 4090d234 42113fd8 3bb35275 3eb8f1cc -> c05e8b55 c043c4e3 41a35a1e 4186db1f", + "3f0d4866 be91f542 42979500 42f5dbcc 3d0f1823 3f627d75 -> 425b5786 c1e299a7 42c6b866 4203b3be", + "3f32b786 bedb4b24 418a02c0 422ed72c 3d233756 3fff31a2 -> 41aa3b61 c150e1d2 41f3d88c 41a6afc1", + "bec4a242 bf6357ae 42987da8 42f3b000 3c814be6 3f736e2b -> c2182708 c2afea16 42c616d4 420a648b", + "3f5b6fd6 3f586726 4291640e 42e86e34 3d338823 3ff1d23f -> 42a1edf6 429fb0d2 42bce921 42242731", + "3f71bb6a 3f5227fa 429e6e2b 42d19c23 3d219f6b 3f2b21d0 -> 42adc392 429710f6 42b80527 41ca62c6", + "bf571be5 3e6056a0 4247ddfd 425acec2 3d1ab4de 3f92b3dc -> c22fe65a 4137726a 42515660 40cb2247", + "befe8cbe 3f3b65d2 42b02b2b 43088db7 3d252d55 3f972a0b -> c25f5d85 42a470a1 42e0a34c 421c31af", + "bee9f5ee bc10fec0 4229656f 42845ab2 3d3591a6 3ed87261 -> c1c65db9 bef5df13 42590d6a 4183a56d", + "bf74a6a3 3bbe4800 4132b52b 421e76e1 3d10edb7 3ebd7165 -> c1c222b5 3e16fdfb 41cb242c 41ab91ae", + "bdbcb4e8 3f4fa734 4240a4c3 42b1a182 3d46cb93 3fc9a29c -> c0c9f0b3 425e3723 4288f9f2 420081b3", + "3e9a07a4 bea68b80 42470a0d 42b74464 3cb8733e 3ebf7eae -> 41aa259a c1b7f8b3 428d64b5 41cab2ce", + "bb97c700 bf12b63d 41f16809 421e914a 3d076a8a 3f65854d -> be2592f8 c1a00c54 420ba2a7 40f532d3", + "3e41ffb8 3f6b1d62 413bd8e1 4194788f 3cf59dda 3f42f7ea -> 4037b046 415e9e89 41726500 40bfbca1", + "3d31c600 bc0daf80 40209f69 41fc56df 3cc8ee2d 3f125a99 -> 3f3d2c8a be16c594 41883566 417e03d9", + "bf0d995f 3cb47540 42b4834e 42d3f16b 3d03572d 3fd96e5a -> c2591369 400a52e8 42c43a5c 41613f5a", + "bf50e9b9 bdfc7750 42b31956 42bc6cfe 3c833420 3f700442 -> c295f658 c13539c2 42b7c32a 40af09a3", + "bf502f2f be070110 40976663 4184461b 3d48761c 3fac4249 -> c10a591d bfb36ed9 412a1fb4 411cd1fc", + "3f5214c8 3f2a7fda 42a88172 42eac3b2 3d4782eb 3fbf740f -> 42a577ba 42864aa8 42c9a292 41fa8548", + "bf5ceff2 bebaa414 41f5ef3f 420f0fcf 3c6fd64a 3f732bfa -> c1e597bb c141f3e7 420503b7 409d4b51", + "3f06eb94 bf5c3ca2 42a99885 42bebc80 3cfbcfe3 3ff02e01 -> 423de816 c29aff34 42b42a82 41450d63", + "bedca1a2 bf2209ae 426550b5 429fd72a 3ba232e4 3ee3808a -> c1ec92e5 c22dbf13 42893fc2 4171126d", + "3dd8a5c0 3b56ea00 42801f2f 42c0e718 3b1289d0 3ea8b8d9 -> 4107d693 3e86c058 42a08324 4186a5d7", + "bea988de bedb58cc 424ef45d 428a9d1f 3d09673f 3fa81207 -> c1a052d1 c1cf6de9 4272174e 415a092f", + "bde784e0 3df98600 4256f0e3 4275e52f 3c4a7fb0 3f254dc3 -> c0d0622e 40e096b8 42666b09 40aa7e82", + "3dae8d40 3f7bbcc0 416c94c3 420f41ee 3c878a8c 3eff1685 -> 400a01c4 41c70857 41ca671f 417dd268", + "3e77b7a8 3f43a826 42a40d21 42aee283 3d42dc23 3fcb95b2 -> 41a3fc2f 42818595 42a977d2 41138c90", + "bf4cc979 bda99760 42933734 42d13e49 3bb68839 3f71e998 -> c28e9314 c0ec2456 42b23abe 41ab6b73", + "bf48e6a4 be22514c 41dc85bc 420aafde 3d1cf156 3c36242d -> c1c35dec c09dd8aa 41f8f2bc 40bc8638", + "3f6a846e be33a5fc 422013ff 42465eec 3d1d55a9 3dd96f64 -> 42242f3c c0fb8ac4 42333976 4108e86c", + "be4a1c98 bf3d78dc 42bb9479 42d4985e 3d3a38c0 3e5819f8 -> c19df80a c2941704 42c8166c 414ebf0b", + "bf5984a7 bf3c2fe6 418a515e 4213694a 3abc478f 3ea484ed -> c1b803f5 c19f33b8 41d891f9 417163ad", + "be9f0948 bf0c24c6 42060978 428b3068 3c4f048a 3ed8bd2e -> c1801a7b c1e1c55d 424e3524 41b4f9ac", + "3f576772 3f258474 4234bc5c 4241a76d 3b203676 3fd32f32 -> 421d828b 41f21005 423b31e4 4083ee46", + "bf677596 be4b73e0 41b546a7 41edece4 3cbdd74a 3fead377 -> c1bd8208 c0a693cf 41d199c6 40eb27a4", + "3f32f38e be101180 4138693a 424782ac 3d10e1bc 3fd2493a -> 41abb0d2 c08a3917 41f59cfa 41d7ab9c", + "3f36ff22 3f333640 425bfa20 42ad0686 3cdf9f14 3ffa2888 -> 424a4e9b 42461f7b 428d81cb 41d4df09", + "becc5fc4 3eddabb8 421dd3a0 4234b70b 3d235cf7 3f8a215e -> c1872293 41929266 42294556 40c671b7", + "3eaf3d20 bf06f7bb 41818740 41ccc480 3c5edce2 3ff1ca69 -> 40e4d59a c1303f26 41a725e0 40f953ce", + "3e507960 bea7016a 4106300f 4160a610 3c26d80f 3f822982 -> 40121c0e c06a17aa 41336b10 408608bb", + "3f4267b6 3f5e0efe 4286131d 429f914d 3cde39ad 3f98dd6c -> 425efd8e 427eb5c6 4292d235 41515ce0", + "bf684c68 3e1f20e0 424ff7a2 429b4b09 3d310d0c 3f4d684b -> c26b4598 41212a4d 4281a36d 41acc146", + "3ea60f1c bed69d58 41df2a6d 424e6d06 3d1c8fba 3f2938d3 -> 414e4838 c1854ca9 421f011e 418068cf", + "be0d5b44 3f5e0986 427183ee 42bd638c 3cc113b8 3ee76fd4 -> c12b413b 42868009 429b12c2 41cc2802", + "3f032efa 3ea574e4 417fd8e6 41c3f0ce 3c08b29f 3f3d6832 -> 4125f5a6 40d1517b 41a1eea0 40bd4456", + "3ef433fc 3efa6288 4281a92d 4285c8df 3d19d31d 3f9c804c -> 41fb4e32 4200d563 4283b906 409f7882", + "bec57db6 bf68a26d 418c8a3d 4265a500 3b64d728 3ee0d619 -> c1675e70 c208453b 4215f50f 41e511e4", + "bf75b100 bf2f08fe 42151d13 42968cd4 3cd7be4c 3ffaecc2 -> c2580ad5 c219e99d 42611b5e 42053838", + "3eaa3fe8 bf3ea02e 426556ce 42bdeb19 3d0bc9a0 3f096c57 -> 41ca8ffa c262ce48 42984b40 41e06b41", + "3f4f633e bf1cf456 423991e3 428932fa 3ccc9f37 3fe14abf -> 423a4fdc c20d0105 4265fbec 419a6b26", + "bdfdaf88 3f40b98c 42253c54 42432b8c 3d1eb6ab 3e752f0c -> c0b292e3 4207a990 423433f0 40dac5e6", + "3f01a7e8 3e780e20 42581c66 42aec09d 3c0a2600 3fb7e5ef -> 420f3bb4 418903fa 428d6768 41aa5dff", + "bf304d18 3e895da4 42ad2a68 42d38f7c 3d088ea1 3f1fd6ca -> c28479d4 41ce7035 42c05cf2 4180b244", + "3f352cac 3f7e1f50 415aadc0 41b4f5df 3cceb02c 3d99a7d4 -> 414d72ec 419015d4 41912660 40f686f2", + "3f18125a 3f78da5c 40cb4e94 41cab204 3be1a410 3f8ea160 -> 41169989 417671bb 417d85a9 417ad4f9", + "bf34409a 3f39e924 425b02b3 428affeb 3c9379eb 3ec4277f -> c22ef99a 423477bb 42788144 4141f5b3", + "3f1d37a2 3f3dc374 4219b180 424c35f4 39e26e74 3fe79703 -> 41dbccb9 4204a691 4232f3ba 41298ae9", + "bdf44b38 3f7fabae 42c02677 430ace14 3cf4c524 3dc3aee5 -> c16023c4 42ea93f3 42eae150 420a2ecb", + "be473f94 3d2de880 42531f52 42716594 3cf21237 3f809221 -> c13019d9 4019b465 42624273 40d4afc9", + "3efa1934 bef69a6c 42155ecc 42606496 3c90e8c0 3fc9d999 -> 41b692cd c1b4059b 423ae1b1 415f1119", + "bf62c0d3 be815848 424241e0 42c36550 3cd4f595 3f1b943d -> c2818d6d c193cc87 42924320 4212309d", + "bf284e22 3f38c27c 41dce214 42754831 3cec966d 3fcba4cc -> c1e9de21 42005db1 4231dc9e 41d7573b", + "3f5b6d56 3e4fb4c0 42c5f03b 42dd11ea 3d175bb0 3f811735 -> 42b392e5 41a9fb49 42d18112 414ccb26", + "bf58ad78 3f62885e 421bf330 421ef427 3d4810ce 3f9d6120 -> c205444a 420b53fd 421d73ac 4070e914", + "bf70bbde 3f7e54fc 41daed7a 41ecf107 3ce1e14f 3e4bf610 -> c1d65791 41e2730c 41e3ef40 403b1dc1", + "3f23344c be0b1b3c 424f735c 42a33f5a 3c2151ff 3fa209f3 -> 422a331a c111119e 42857c84 419ea8c5", + "be24d2f0 bdad4c98 42405e06 42a1e00b 3d0c1142 3fbc6520 -> c1262647 c0aeb162 42810787 41a77489", + "3f0b775a 3eea0f40 42bce7a8 43030c31 3c37a7c5 3ffd1f13 -> 4275b349 424e2c73 42e18005 41cf32a4", + "3ccd9680 3cd63780 4250733d 42bf14de 3c756c9c 3f51f0d3 -> 3fed2775 3ff71ba1 4293a73e 41bfd66d", + "be4e69c0 bf6a578c 421efb33 42a6879d 3d4329c3 3f85aff2 -> c1465dd2 c26134e6 42760536 420b584a", + "bf702991 bf3f43e2 41f8c92b 421f956a 3d2f3da4 3e9427ca -> c205343e c1d42ad3 420dfd00 410dd7b6", + "bee40158 beaa91d8 4222ade1 426a0c65 3d264d31 3f0fca3f -> c1b0abfe c1842adb 42465d23 41525397", + "bf73c865 be23eeb4 41cfeb1f 426aa46e 3c47d659 3efe38a3 -> c221389d c0d8d3c6 42294cff 41bf5d06", + "3eae619c becee1c8 429adde8 42b74c81 3cda6951 3d9990a6 -> 41e659c3 c208a430 42a91534 4128ee29", + "3e21ad98 3f668342 41579c48 41971e48 3c21d25c 3e9cafb4 -> 40238643 4169252b 41817636 4085220b", + "bf071c06 3dc95610 424a2252 42c4e2da 3d005723 3f8e8dff -> c21d404c 40ea54c2 4294fa02 41fb184b", + "be1851a8 3e45d968 42aeaa15 42fea5a0 3cba9d5a 3fe3a2ff -> c17f7043 41a5e576 42d6a7da 41ca158d", + "3e294510 bf3036f4 428c589f 42a4578d 3d2d0da9 3fe0d3ca -> 41497680 c251ba86 42985816 41494082", + "bf32bf6e 3efbc45c 42a003cb 42aee3fb 3c253572 3fa7a677 -> c269d797 4224af10 42a773e3 40e2a1d4", + "3efe0ff4 3efcad90 426dd177 4292342a 3cf4cc3a 3fe7b877 -> 42038d99 4202d618 42848e73 41452db9", + "bf7a7965 bf295a1c 415d613e 41d3fc5a 3bc87a44 3f0664d9 -> c19ddaf7 c15575c4 41a1567c 4127c14f", + "3f0d4fda bf5e5f50 429ed973 42e515ee 3c3bd066 3fa55483 -> 425623d9 c2a87d02 42c1f7b0 41de6b15", + "be7fdc74 3f3db342 42a8b8f1 43009b84 3d0fcb74 3f40bffd -> c1d4da6a 429dd035 42d4f7fc 4205690d", + "bea7e01c bea4b8f4 412a4d12 41bb793d 3d440e6f 3f666e84 -> c0b2c6e4 c0af6b52 41884fe3 4110f3b4", + "be966274 bf532fa0 420be4c9 429af20a 3c2d6339 3fe1107f -> c1841c56 c239861d 4260e46e 41f696d2", + "3f6ce8ea bf31c0ff 42c7f3ce 431460da 3d21ac1b 3f120fce -> 42e5d59f c2ac71fb 42f85ac1 422dbef9", + "3f00df9c beae8788 4067a1c9 41cc9399 3cbe6a10 3fc76c5f -> 40eb1fc9 c09f35f3 416987d2 416ff8af", + "bf54e4f9 bdd29d80 424f7372 426e4ba1 3d1e826f 3f28bc74 -> c2395876 c0b75c7e 425edf8a 40ffd630", + "3f1f7382 3f39f60e 4093ca91 4178292a 3d3fdee4 3f03f214 -> 40c89849 40e9f1fc 41210739 410c77f1", + "3f19671c 3f02a0e6 41aa3dbc 425e9ee4 3d3859cc 3d877a71 -> 41b8685c 419d07c8 4219dee1 41c38c6a", + "3f53a9cc 3f5a2264 42ab2654 430351e3 3d17930b 3e196331 -> 42b354a6 42b8d030 42d8e50d 42220f3e", + "3e95908c be3e6674 4103e4b1 4210a074 3bdd11b8 3f3e7228 -> 40cf8563 c0841718 41b199a0 417c1f53", + "bea292c2 3f4b52a8 42af1761 42cfc26a 3c0dd300 3f823647 -> c1f3214d 42980929 42bf6ce6 414a9edb", + "3f5d2424 bf1a1148 41fbc156 4201d229 3b048cc6 3f3198e2 -> 41dce17a c199e2d6 41ffb2d4 3fbcd2fc", + "3f2af89c 3efaeba4 41ad7e3e 426b2afe 3c0b556a 3d8ab058 -> 41d6fe16 419dc378 4220f50e 41c54612", + "bf5a7d38 bf5f1844 422c1293 422c8af9 3cd7a64a 3f89aad0 -> c2130f5d c21628f4 422c4ec6 401372e8", + "3f58c6fe bf295088 428ddb47 42ba3150 3cd07a34 3f3ba454 -> 428ae4d0 c258f783 42a4064c 419af92c", + "bf00ffdc befcac32 42920e49 42d5638c 3d338b8b 3da24fd9 -> c2352029 c23162ea 42b3b8ea 41cad7b7", + "be70e5b4 bd5c9f80 4269a1fe 42bb28dc 3d1ad4bb 3fb36bc5 -> c18f057f c082fc0f 4297fcee 41b83d3c", + "3ee05348 3f49ab34 42b1868e 42e468ae 3b87a5ff 3ffe9ac3 -> 4231dab2 429fe428 42caf79e 419cb4b3", + "3f37b66e 3f4ed99c 41bf7f1e 41d2a285 3cc70b15 3e0d2a4d -> 41904a4e 41a27673 41c910d2 40227bec", + "3f627c2e bea4c6e2 4214e1b3 42586c08 3ca59ed6 3b8d9b84 -> 422197ea c16b2199 4236a6de 414b1864", + "3f196b94 bcb9ae00 428a47c7 42e9088e 3d1e1759 3fc90806 -> 425e870b c006a8b7 42b9a82a 4206c21a", + "3e6f5490 bf2dbda0 42adbf21 42bf689c 3c93d98f 3fb202ae -> 41aab05b c277d255 42b693de 4108dac1", + "bdcc0168 be853b62 41f78cd5 4286c48b 3c6913c3 3fa1b424 -> c09cb6c2 c14cb189 4244a7c0 41a916b9", + "3e99da60 be2ec77c 410ed285 42329b06 3cefb9ab 3f9a9f16 -> 4100cc6b c0925123 41d64fa7 41ab4f60", + "bf3e86ac bf196622 4299b68f 42dbd3f6 3d15cd09 3f898ff5 -> c28b00a8 c25fd4d0 42bac542 41dfa502", + "3eac15a0 bf690f4e 40e2b494 4210a7e8 3d391f41 3f08a12b -> 40e8932e c19d7df5 41acfe7a 41b36e8a", + "bf7aff66 3f0b0850 4145434b 418b9917 3d36b33b 3feb984a -> c1699307 410161a0 416e3abc 40cee096", + "bf3f83d5 3ebabc18 4259e958 42a34a5c 3cf50cc6 3e6b9217 -> c24bab3a 41c695d4 42881f84 41a2c319", + "3f053692 bf12a241 40b63931 422ac5c0 3d0ce444 3ffd0dfa -> 41496eeb c15dba0f 41c18ce6 41d6b2c2", + "3f53deb4 bf545fde 42b4dd8d 42bd9810 3d27efb7 3f92324b -> 42994c9b c299aa10 42b93ace 41064047", + "bf775306 3f695bf8 422c20e6 426e67b0 3cd0a526 3f213766 -> c2464f76 423b1ce6 424d444b 417ec08e", + "3e8072d4 3f3cc4d2 423aae25 424318d0 3d135c9a 3f82f40e -> 413f8eb9 420cc1d0 423ee37a 4083913c", + "3c977140 3dc4a660 42514dff 4272f32e 3cf16286 3fe6ee8d -> 3f85c541 40adb3e9 42622096 40fa3a5b", + "bf617357 3e2d4ec8 427154d5 42ba00e8 3d388b6f 3f846e27 -> c287095f 414f9c26 429955a9 41d9532a", + "bd18c3a0 3f5b33ee 420f400c 421f9233 3d08e15e 3fd18a61 -> bfb4b43d 4201a5a5 42176920 40b50751", + "be8cac80 3f5867d6 42be6415 42f58879 3b8ebd6f 3fefa3e1 -> c1ef8b1b 42b84034 42d9f647 41a6cfb2", + "bc9af820 3f16e2ba 418bd2eb 41e7aa1a 3d3c00b5 3fba90d0 -> bee0e144 415af443 41b9be82 41173533", + "3e986e38 3edf8778 42460dae 42997b76 3c3e3b3b 3e8ea7cb -> 41965a15 41dc7b20 427c824d 41848a50", + "bd8c7390 3efba588 4246e2b4 42475b34 3ac08d91 3ef0a89e -> c05a7da1 41c3bc1a 42471ef4 3f1be83c", + "3f6fb12a be8ba324 40b2a4c5 424cd2b1 3d2e1ecf 3f948cd2 -> 41d4aee2 c0f7ce2e 41e3274a 420ccd43", + "3f6a2f64 3db44b70 41a16ef4 425242b7 3d0b3ede 3fcbdb00 -> 42051747 404ceda8 42117d18 41cafa67", + "3df43e70 3f6a7362 42394d59 4297540e 3d0ae34a 3fcb3647 -> 40e8c67b 425f7125 4273faba 41c0f94b", + "3ee99940 3f29128c 42856d7b 42dcd89a 39a8e24c 3ebafdbe -> 4221a2ee 4269f9ee 42b1230a 41e36792", + "bf74639c 3f5fafbe 428b8d18 42a16246 3cfc828a 3fec04c5 -> c28fa49f 4283798d 429677af 41542173", + "beb67832 be8ee122 42b31132 42fac2fd 3cef369b 3fb8be7e -> c2192f55 c1efe5b3 42d6ea18 41c63b6b", + "3f432e66 3e1ff0e0 42bcf8ad 42f858f8 3c600f47 3f3f62cb -> 42a6b639 41889c98 42daa8d2 41aa0bb1", + "3d6391a0 bf7f618e 407fe383 421bab2d 3d49b348 3f0ba7f7 -> 3f9898db c1ab3f26 41aba965 41d92420", + "3eb4d508 3f420ee8 40dd5182 42284269 3c61acce 3ec9f321 -> 410a6566 419484b4 41c3ec99 41bf11f1", + "3e0bb358 bf4fe0a3 420fee13 429f31de 3d364503 3fe9baf7 -> 40fc4a4e c23bb4eb 426728e8 420677c9", + "3f44010e 3ef4f694 42b9acf7 42d59835 3c860463 3f2339a8 -> 4298d94d 423f0741 42c7a296 413c9db0", + "3f4d5a46 3f2f7bce 42162435 42952e9a 3d109a2f 3e4b9de0 -> 4233e2e4 4219b8af 426040b4 41ee228d", + "3f32af80 bf3b2a36 425f715a 428d0936 3c8e69a3 3bd47f6c -> 42306c17 c238cb4e 427cc1e3 413a7274", + "bf367bc6 beb3db08 42be6b94 42e8e685 3cde349d 3fbc97c3 -> c296e084 c214b44c 42d3a90c 4191943f", + "3f351a78 3e737e68 410bc39f 422e8e58 3bf66112 3f7a77a1 -> 419434a1 40c7433b 41d17f40 41b8aa11", + "be8cd402 bf7b6c19 4289ba60 428ced3a 3d11b3d4 3f8867b8 -> c1994a6d c288d5ff 428b53cd 4096dd79", + "bddf41a0 bf00a5e2 42872368 42cf2a88 3d235b84 3e9180d9 -> c11542d2 c22c04c6 42ab26f8 41c54f29", + "3f4bcb94 3f5efe1e 418b7eeb 4283c160 3d2ef13e 3e8eefd0 -> 4204a642 4211251d 4226a11b 4222399a", + "3e8e637c bee62fb4 42959286 42b92dee 3d15588f 3f90be93 -> 41ba30d7 c2167fa4 42a7603a 41693759", + "3f6c026a bdab7c80 419ec1f8 41eb77fc 3caeaf54 3fb4fa94 -> 41b5b892 c0040a38 41c51cfa 410932f0", + "bf090815 bf1807e2 428adfda 42e36e1e 3c9b943d 3fb2502c -> c244134a c2598993 42b726fc 41ff2e89", + "be36147c 3f22685e 4229aa09 422ec50b 3d2da1f2 3e47fa55 -> c0f4fa88 41da82b6 422c378a 4033f41c", + "beb04164 be1cf30c 425309a6 42ba84c6 3cd81a81 3f9b25bd -> c1c91131 c1330b1b 429204cc 41ca7fb9", + "3e015378 3f4512dc 42990ac0 42f7ba71 3b4760af 3fdf9b82 -> 414a7609 429a42a2 42c86298 42009606", + "3ef761f0 bf7ca7fe 41e0c7b6 4209025e 3b6e3514 3f016556 -> 4171010b c1f62449 41f96639 40a6796c", + "bea8c484 befc0758 42a4b77b 4302c794 3cc83f75 3f981bc2 -> c20c82cb c251d4e2 42d52352 42021a28", + "bdd4e1b0 bf799930 425ef466 429f3044 3ce4cd55 3d966382 -> c0e113c9 c283f2e3 4287553c 41980349", + "3edd2fc8 3e68e568 422b4ee7 4296a852 3ac4ac73 3f1c5306 -> 41cc2cf9 4156fc0f 426c4fc6 419676b7", + "bf6c65b3 bf32b0ae 42ba4f75 42f57a84 3d00dcce 3f8a58d3 -> c2c75cdd c296b237 42d7e4fc 41dc8ed4", + "3f624a5c bedba3d2 4167eea2 425e1c30 3beea70e 3f3e7e65 -> 41f79668 c1704fa3 420c0bec 41ef485f", + "be2b7528 bed8e920 429552e9 42a66d1e 3d0d77f3 3f97f848 -> c15379c5 c205c4c8 429de004 410c27f2", + "bee72e0a be8fea76 42bb1d07 430c346b 3c94c541 3f839f1e -> c25318ef c20369fb 42e9c2ee 41eff0b0", + "bf66dc3d bf53e573 420325b0 428a67aa 3c3e5f4e 3f63f710 -> c237f28d c228d64c 424bfa82 41f3cb95", + "bdde21f8 bf51171d 42c3b27e 43129879 3b8da9ea 3feb7ab3 -> c1541b0d c2c7a6e9 42f471b8 420837f2", + "beb70c1c 3ef96f0c 427a5053 4299785b 3aba11cd 3ecf35f6 -> c1c739ec 4207bd7f 428b5042 410c8b89", + "bdcc8170 3e827c54 42adbca8 42c03de6 3b4d254d 3f0a0149 -> c1122e5a 41ba8afa 42b6fd47 40b45e04", + "bed6ae6c 3db8e9c0 42b8bae9 430611ed 3c9a6899 3fab29f6 -> c23de363 41238ed0 42e26f62 41d46eb9", + "be854e4a bf4a1108 429ddace 42c7999c 3cde951d 3f8ad607 -> c1ba22cc c28d12d2 42b2ba35 418aef9e", + "bf12d47c bf129400 40b1ee60 42220661 3c9a0b00 3dd65745 -> c1535fa7 c15302d2 41b8442d 41badb30", + "be59ebb4 bdf03f38 41a377f5 42770bd2 3d2e1010 3ff2518f -> c10bf009 c09a4640 422463e6 41ce43e0", + "3f6fbad6 3f7b8508 420578c2 428c0e56 3cc635a8 3fbc0891 -> 4241a62d 424b2c37 424ecab7 4208439a", + "3e951670 3f3a7a70 4028e196 40b0fd27 3cb3d3ef 3faf8a5c -> 3f983fe8 403e6eeb 4082b6f9 40552b32", + "3d3185a0 3e64c430 428f3c5f 42ae3c36 3cf82dd1 3ffab316 -> 405c2614 418dd958 429ebc4a 4148bc27", + "bf3d0a9f 3f4eccc8 41a18289 41c2d0de 3b6ab514 3fd00f17 -> c183902e 418fec13 41b229b4 40998f95", + "bf34612c 3f009f30 41caacca 42844b79 3d222462 3f9e8fc1 -> c200eae4 41b7da37 4236f6ac 41f6c0f6", + "bf5e3503 bd942bb0 428b2ab7 42ecde78 3d316137 3f44da12 -> c2a332eb c0d9a57c 42bc0498 421928b9", + "bea85958 3e8bf354 427922db 42820aed 3d1e2583 3fada402 -> c1a76f77 418b30e7 427e9c5a 40ab6191", + "3d0a91c0 bf305956 429b34bd 42c01d2c 3c127ff5 3fc35c69 -> 403bffe5 c26f4184 42ada8f4 41598122", + "bea77dc2 bf552054 42a7475d 42bdb7fc 3d0e9d0e 3ff219f9 -> c1e991f2 c2949ac5 42b27fac 414b8a1a", + "3efb5c1c 3f45312c 42b84ff0 42ec599d 3cf02406 3fbb4e29 -> 424e84cc 42a203a3 42d254c6 41b4615b", + "bd1432a0 3f28a31c 40ec522d 41dd8a66 3d4b1806 3ff95d84 -> bf227362 4138db1b 418c4f79 4177c56f", + "3f7af83c 3db6e620 429538fa 42b660b8 3d4789ee 3ff7ec0c -> 42a28ad1 40ece95a 42a5ccd9 4190158b", + "be929a90 bf58f981 4154d95b 421dcad3 3ce841d3 3fea08e3 -> c0f1ac1f c1b2d6a2 41d3012a 41a3e5b0", + "bf6d1840 3f0eb766 4265c805 42a3d8fe 3cc4f2af 3fb52249 -> c28113b0 421b6486 428b5e80 41ab4450", + "3f10f92a 3f2efadc 4299a986 42e4a639 3c3ef190 3ffb0f59 -> 425880f6 4282a86b 42bf27e0 41e2e2bb", + "bd979428 3f2170ec 40a6ef64 42470814 3ceae80f 3ff13f6a -> c00233ed 418aaca5 41dbe600 41ed89fb", + "3e57c750 bf473a54 4183cd3a 426240d9 3c9ba809 3fa1edc2 -> 40f6409a c1e35d3e 421213bb 41e0b2f6", + "bf77285e bf7d6e99 41309743 4259b5bd 3d31b344 3f9e9930 -> c1fcd020 c2019d8e 4202edc7 42227e76", + "3f20891a bf0dfefe 41ffb971 42015bdc 3cc66812 3fce847b -> 41a14d1e c18eac5f 42009c4a 402901ac", + "bf2f4a96 3f7c215a 420c1793 425530f5 3cff70e8 3e997e01 -> c1f1e783 422df8b6 4230a444 4181da37", + "bf1686a4 bf04f04c 41fb087a 428b474f 3d31e84b 3ea2c24d -> c1ed9792 c1d1d503 424a096e 41dd4108", + "3f559eca bd8b2348 4249a0d0 426f9e4e 3d3bed26 3f691ae3 -> 4238199b c06fd215 425c9f8f 411da3b1" + ] + }, + { + "glsl": "vec2 cultmath_iv_exp(vec2)", + "tolerance": "ulp-bounded, platform exp", + "platform": "Ubuntu 24.04.5 LTS; .NET 10.0.12", + "cases": [ + "41202b2a 4120314e -> 46ade79e 46ae2a6b", + "c0d1a016 bfb9db96 -> 3abb4cbc 3e6fb77f", + "bf8fdd04 bf8cd5fc -> 3ea6664d 3eaa61db", + "40024c0a 40b9ecd3 -> 40f51721 43a6d60d", + "4197c9d9 4197cafb -> 4d25c5b1 4d25dd2e", + "418b9b87 418b9bc1 -> 4c10a577 4c10a991", + "40ceb567 40cf50f9 -> 441fb557 4422c533", + "c0d71f2c c0d71180 -> 3a9dbd63 3a9e00d8", + "41149716 4115dd36 -> 4628ae10 4636a8d3", + "406d8085 406d9a7b -> 422392dc 4223d546", + "bef5bff4 bef5b08c -> 3f1e6964 3f1e6e2a", + "40750628 40750e38 -> 4237f95f 42381090", + "c0e728c3 c0e719d5 -> 3a3f1fca 3a3f790c", + "c18aec70 c13b5136 -> 32f6c219 370a21a5", + "41902341 4190380f -> 4c7ed262 4c80b63b", + "c176d7d2 c174bd5e -> 3456290a 34743f6f", + "c10d5076 c0d80228 -> 39190e2c 3a996ddd", + "c11b8847 c11b8125 -> 387bc1f8 387c324f", + "c06ec60d c06eb253 -> 3cc46278 3cc49f0b", + "bebf1b28 3fff14ca -> 3f3040e5 40eac236", + "41284f27 412dd379 -> 4710a018 474c2b74", + "c14fa678 c14fa5ac -> 361b0a4e 361b1209", + "c0fad4ed c0fab9bb -> 39ceb51b 39cf6513", + "c17de632 c17db6c8 -> 3409c9b1 340b6464", + "414f6c8c 41531eac -> 48d06242 490343fa", + "40e7d966 413623fd -> 44af2f87 47aba695", + "4070804e 40800e69 -> 422b6be7 425ac6f1", + "41939c17 41977345 -> 4cc4a616 4d1ee90f", + "40b28176 40b2921a -> 43844fa5 43849487", + "409c38a3 409c42f5 -> 4303e1fe 43040c90", + "c0d1e402 c0cc5be6 -> 3ab9c0d3 3adcce50", + "41947227 4195082d -> 4cda50ce 4ceae88e", + "c19594e2 c1958d68 -> 32023b0e 3202b4fe", + "40f50c60 410a2aac -> 4504502d 45afdbe3", + "c140d47e c140d36a -> 36c3be27 36c3cb5a", + "4157dcae 41587a42 -> 49308d18 493779c5", + "c18e5e55 c18b41ad -> 32a06b8f 32ecb2ea", + "bfbee7f0 bf3151e0 -> 3e66724b 3f00101e", + "41583ab2 415903ee -> 4934a680 493dbf51", + "4155faca 4155fb46 -> 491cf494 491cf956", + "c1642b98 c15d8292 -> 352bff46 3582660f", + "c170f311 c170e907 -> 349ac48d 349b25c9", + "40d7b019 40d7b79f -> 44537137 4453a2f5", + "c197fc9c c196e2aa -> 31c0d460 31dd4a53", + "417d6191 417e0607 -> 4ae63cd8 4aefab93", + "408b17d2 408b1c2e -> 429a709b 429a85a9", + "4070bc94 4070f07c -> 422c0da3 422c9969", + "3fbb7abf 3fbb87c1 -> 408a7002 408a7e16", + "411a81e4 411c27dc -> 46742941 468753f5", + "c1bc5882 c167813d -> 2e8314cf 350ba3e2", + "4080a820 4080c3b0 -> 425eebc5 425fac1c", + "c13b3160 c132dfce -> 370b358e 376a223e", + "41565c23 4156610d -> 4920baf8 4920ec5f", + "4154b6dc 417c728c -> 49110553 4ad92fd3", + "c13cf6ed c13cf369 -> 36f93c12 36f972de", + "417e9504 417e9654 -> 4af82f45 4af843a3", + "c03dd70d c036ea23 -> 3d52ed7e 3d6b086f", + "c189a001 c188ae87 -> 33111f87 332348b9", + "3f52dca6 3f8c44ed -> 4011d8fd 403f7897", + "417629fd 4187c3a2 -> 4a92a631 4bb2ef53", + "c1091e4a c1091d4e -> 3946f2f5 3946ff35", + "417f141f 41818095 -> 4b0000e3 4b2399cf", + "bf91ec53 bf59891a -> 3ea3be49 3edae43d", + "4184d364 4189dc9c -> 4b77dc1a 4be8937a", + "c14bf8de c14be10a -> 36431c63 36443fd0", + "c193ea76 c193e75e -> 32206043 32209e56", + "be900eda 3fad7536 -> 3f41378f 407825b7", + "c08794db c025ce1a -> 3c6cc82d 3d99886a", + "3ec7f803 3ecc0d7d -> 3fbd2902 3fbeacd1", + "c012cb8e c0119f12 -> 3dcea215 3dd27533", + "c0daaa3f c0daa5c1 -> 3a8d34be 3a8d4894", + "c050634f c039c7b1 -> 3d1ddc02 3d60bdf3", + "409cd424 409dee6c -> 43066900 430b1f58", + "408cef3e 415094cd -> 42a3968b 48e003a2", + "c14e4c28 c10ce1c8 -> 3628b807 391d3f60", + "40752252 4075256e -> 42384a67 4238535d", + "40fd9a10 40fda0f0 -> 452cdb86 452d00af", + "41036130 41040d3c -> 456620f1 45700037", + "c077e68c c074d5f4 -> 3caa48ab 3cb2a306", + "c1147257 c114703b -> 38c40310 38c41ceb", + "c1048df6 c1048c9c -> 39844f07 39845a37", + "40dfedd6 410d03dd -> 4488c689 45d22042", + "c1624386 c15f0030 -> 3541c354 356d98cb", + "405e12af 40636bf1 -> 4200886a 420bbc84", + "c14500ef c144fb45 -> 3696ccaf 3697021d", + "c17d28a2 c17d267e -> 34105085 341063d7", + "c123eec5 c123a46f -> 3814ecdd 3817a718", + "3eddffe7 3ede4019 -> 3fc57a2b 3fc592f1", + "40c3acf4 40c3b46c -> 43e24452 43e2792a", + "c1a9f6d8 c165a819 -> 30230d14 351cbd2c", + "4184c5e2 41aaf14e -> 4b763af9 4ee31c73", + "3f9ec35a 3f9f0406 -> 405d3bd5 405dabba", + "40c71490 4165a95c -> 43fbab24 49d1201c", + "3fc1015d 3fc19163 -> 40908b7c 40912e7d", + "c17ee168 c151c9c2 -> 34019755 3607a61b", + "c0c3c1df 3fa3ddfc -> 3b107367 40663bd7", + "c17826ef c17819e9 -> 34455621 3445f704", + "c159be3f c159b8bf -> 35a50371 35a53c36", + "c0020079 bffad0ae -> 3e0650d0 3e104fe8", + "bf44e41c 40b3c1d4 -> 3eed4658 43899686", + "41864aa6 41864b9a -> 4b94d9e9 4b94eba8", + "413cd099 413cd103 -> 48023ffc 4802435d", + "414b49e2 414b9486 -> 48a0ebfd 48a3e196", + "414771e6 414778e2 -> 487d1ce3 487d8b7a", + "40dd96fa 40dfcc76 -> 447e4461 4488382e", + "416ded4c 416df1fc -> 4a2f472a 4a2f7a8d", + "bf429f16 bf41ceea -> 3eef6343 3ef0263e", + "c154a284 c1548980 -> 35e3142d 35e4784d", + "40394b3b 403a4ab5 -> 4190b309 4192f92f", + "c181b997 c181b831 -> 33c2cb42 33c2ed54", + "c1708f7c c1708764 -> 349e939c 349ee3ea", + "c006ab5a c0067636 -> 3df9bcce 3dfa8c83", + "4138ad4a 4138af22 -> 47c922dd 47c93a0e", + "c1aaddba c18114f2 -> 3011aaed 33d319ca", + "c1052891 c1051da3 -> 397ed0c3 397f7f11", + "40f07cfb 40f07f15 -> 44e57ad1 44e589e6", + "40a83277 40a834e1 -> 433fbe6b 433fcce4", + "c1970cb1 c18a3aaf -> 31d8cba2 330690ee", + "c1664f64 c16597a8 -> 35167759 351d5e8f", + "c016aa8e c01673a2 -> 3dc28157 3dc3288b", + "c152f8e3 c152ed29 -> 35fbf1e6 35fcaad3", + "40c4c97f 40c707f1 -> 43ea43a1 43fb47f7", + "c19a2cb6 c19a29e4 -> 3192b092 3192e454", + "bf5cb30b 3e91dd16 -> 3ed833f5 3faa30d9", + "c173577e c162d986 -> 3485462a 353acbab", + "40c3d3a0 40c3d490 -> 43e35669 43e35d14", + "bf70eaa9 bf6e8997 -> 3ec7c912 3ec9a69e", + "4156037d 41593933 -> 491d4a01 49403b2d", + "40edd117 40eebf99 -> 44d3199b 44d95626", + "c13a6ff3 c13611a9 -> 3711f0d7 373fc165", + "c0886ac7 c004b4a2 -> 3c66adc4 3e00c274", + "41915f3c 41917138 -> 4c94aa97 4c95fa47", + "416c02e9 417a49a7 -> 4a1b802a 4abdc33b", + "404d6730 404df460 -> 41c61e4c 41c7d540", + "c11e8199 c11e6ff3 -> 38510e1b 3851f534", + "c1357761 c13576b7 -> 37471dab 374725f1", + "419b9eea 41a2b6d6 -> 4d85d234 4e22655d", + "4199121e 41a4bcae -> 4d42976e 4e511dca", + "403ceedf 40ad4180 -> 41992a72 43609544", + "c10ac2eb c109be27 -> 39338851 393f5577", + "40b06b2d 40b0756b -> 4377ea0c 43783974", + "4146c423 414736b5 -> 4872998b 48797b3f", + "40a579c5 40ad2ef3 -> 43301c69 43601338", + "40867c7c 40868924 -> 4285bb91 4285f082", + "c11b8dde c11b6a62 -> 387b6a13 387d9a15", + "c15e5062 c15b8992 -> 3578044a 3593823d", + "c0f20ac4 c0df35c8 -> 3a080645 3a7504c4", + "4175e861 4175f5af -> 4a9051a2 4a90c9d8", + "c0d0b202 c0d0a082 -> 3ac0d2ae 3ac13c40", + "40f23807 40f24359 -> 44f23b80 44f29142", + "40bcb7fe 40bcbac2 -> 43b60e43 43b61e01", + "3fec5a99 403a96c4 -> 40cace61 4193a841", + "4058f90a 406037f6 -> 41ed6007 4204ea3f", + "c19c9154 c19a637e -> 315987b7 318ed16a", + "c083c2e8 c083c20c -> 3c85670b 3c856aa2", + "c1927ebc c189bbdc -> 323f8b7c 330f29a6", + "c13bc94e c138e5ba -> 370623e5 3720af66", + "c1903287 c1903073 -> 327f45d2 327f882c", + "c18dcc20 c18da0d0 -> 32ac4a91 32aff94d", + "41241856 41241c9a -> 46de4628 46de8174", + "c149a219 c1498cf3 -> 3661d2b7 3662fdfc", + "c17daadb c15be833 -> 340bcc6f 359023d4", + "c1526edf c1515197 -> 36024a19 360baffd", + "410f5073 410f5735 -> 45f2990a 45f2ff98", + "418081a1 4182dfcb -> 4b107375 4b4234b8", + "be2f2f61 be2a219f -> 3f57bec7 3f58d00a", + "c147088e c14707c6 -> 3684d52f 3684dbae", + "418415d1 41847393 -> 4b61f244 4b6c87da", + "40cca9b9 40ccaa97 -> 4415d180 4415d592", + "418103b8 418103fc -> 4b19ec9e 4b19f1bc", + "40915d28 4106f73c -> 42bbdf9c 458ff907", + "415a09c0 415a1148 -> 494a45ac 494aa4fb", + "c0d79718 c0d76aa4 -> 3a9b728e 3a9c4b17", + "c022fa3b c0152575 -> 3da077df 3dc72e06", + "4100d622 4104fde6 -> 45444f18 457e8659", + "c1356667 c110c6bd -> 3747f160 38f68d2d", + "3ebbca75 3ec9858b -> 3fb8b6cf 3fbdbc1c", + "c19237e7 c192310d -> 32464918 3246f335", + "419707fd 4199690f -> 4d16cce4 4d4b07b9", + "40ab2960 40ab2a60 -> 43525b19 435261ad", + "4171dd3d 417d47d3 -> 4a602e46 4ae4cb97", + "4131b591 4136ef6f -> 47822040 47b4644a", + "3e10a062 3f06df68 -> 3f936ad1 3fd8c755", + "409828ee 40982db2 -> 42e85391 42e8762f", + "411800b7 41189eb9 -> 4650c83b 4658fe59", + "3fd45d75 3fd4636b -> 40a8259a 40a82d71", + "400f4bec 402d8b74 -> 411624f8 4170dcbf", + "3fd386e5 3fd3cdbb -> 40a70caa 40a76938", + "bf91ee69 3fa50909 -> 3ea3bb9e 40685834", + "3f29298b 3fff963a -> 3ff7d963 40ebb013", + "c16d1803 c16d1739 -> 34c4f0fc 34c4fab4", + "3fc7105d 3fc73ac3 -> 40978d13 4097bf50", + "c00692a2 bffc4cbd -> 3dfa1d56 3e0ea5e3", + "41500857 41554a31 -> 48d87662 49165507", + "c19c5c71 c19b7aa9 -> 315f3881 31793cc7", + "bf8bdf6c 40b3764b -> 3eabab4a 4388533e", + "c0cf7436 c0737944 -> 3ac87344 3cb67ab6", + "c180611b c152db2e -> 33e679ea 35fdc764", + "c168c603 c168c403 -> 3500fedf 35010f02", + "411b944b 411d77cd -> 46828a0c 4692e51f", + "4111ea58 4111f560 -> 460eb64f 460f18d8", + "418942a2 41894466 -> 4bd7bb33 4bd7ead7", + "c165800d c1657c43 -> 351e4765 351e6ce7", + "c0ff15d8 c0e732e0 -> 39b4fa92 3a3ee36f", + "418b2695 41913acb -> 4c089e3d 4c920b63", + "4141eb39 4141ec7f -> 4833310b 48333f51", + "c1618094 c14fd848 -> 354b353c 36192a8e", + "416d127a 4181d013 -> 4a2628ec 4b2a1365", + "c12c2882 c12b27f0 -> 37b22074 37bda432", + "c132c5f9 c10872dd -> 376b9d70 394f73c3", + "415a1b25 418b5009 -> 494b220b 4c0b695d", + "c1664144 c1663f72 -> 3516fc69 35170d99", + "4193287c 4193c44c -> 4cb9db17 4cc88c31", + "40e35323 40eb070d -> 4498166f 44c17aa3", + "407ae7f7 4083215c -> 4249af1d 4270d60b", + "c16c6d87 c16c5279 -> 34cd4fbb 34ceac0d", + "c1854c1f c14bc377 -> 33794569 3645abde", + "c1878438 c174a2d0 -> 333ce31c 3475d61f", + "c16e15b2 c16dfe3c -> 34b91d2a 34ba2d63", + "c186191d c1861537 -> 33618758 3361f55c", + "c0ee532b c0ee51a1 -> 3a18c798 3a18cef4", + "4125bcb1 4125c2ef -> 46f64bf5 46f6ac20", + "41435826 4143a7e2 -> 4843e39d 4847bd60", + "4141e5b9 4142f0c7 -> 4832f37d 483f01e0", + "419f32eb 419f39c5 -> 4dd14cf3 4dd20083", + "40cb4342 40cdb75e -> 440f676c 441ad4f1", + "4165e3b7 4182eb9d -> 49d4204a 4b43547f", + "41079ed6 411a174a -> 4595fc6e 466de380", + "c16a9ed5 c15ab975 -> 34e5dd5c 359b327a", + "c12f9849 c12e8603 -> 378fb266 3799a604", + "3edb505a 3f136953 -> 3fc471ac 3fe3a921", + "c1506cd1 c15060a7 -> 3613b61c 36142695", + "40b9f7e9 40ba784f -> 43a70fe1 43a9b37f", + "419521ae 41952506 -> 4cedda1d 4cee3d9e", + "41074ff8 410750a8 -> 45932031 45932685", + "40d9f8c3 4115426e -> 4463159f 462fe2c7", + "c0b7ab40 40806080 -> 3b52c17e 425cfafe", + "4005e1fc 40640484 -> 41019b63 420d0b33", + "c1762c19 c1416a91 -> 345f546a 36bcb364", + "c0e1be65 c0e0b257 -> 3a625df5 3a69e58a", + "412e612d 412e62c3 -> 47535b4e 47537044", + "40e4c428 40e4dcb8 -> 449f1864 449f92b3", + "419c93fb 419d0c35 -> 4d96d4f0 4d9ff38c", + "bf4f1957 bf4e8269 -> 3ee3ffea 3ee48680", + "c144d67d c144cba1 -> 36985ed0 3698c65f", + "40fcf00d 40fd1413 -> 45294e9f 452a0da4", + "c170377a c16f9c1a -> 34a2054c 34a848e7", + "4119be6c 411dc410 -> 4668c871 4695a7d5", + "41732663 41737c65 -> 4a72f06f 4a78182a", + "40690b7e 40697ad2 -> 421891cf 42199c1e", + "beb85bd2 be97a02e -> 3f329775 3f3e61d7", + "41325a08 4187bbc4 -> 4787750a 4bb23fb3", + "406ea634 40909ea6 -> 4226883c 42b78e0b", + "c18b47ee c16b52c0 -> 32ebfa26 34dbfc84", + "c11e1519 c0deff46 -> 3856aab4 3a76a784", + "40c786cc 40c7941c -> 43ff33d9 43ff9e1c" + ] } ] } From 8b970cbebf03d952da363805de0f661e5197045f Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 13:40:16 +0200 Subject: [PATCH 07/13] CultMath tools: compile-glsl.ps1 -Phacelle concatenates CultMath.Phacelle.glsl after the library Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/tools/compile-glsl.ps1 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/cultmath/tools/compile-glsl.ps1 b/packages/cultmath/tools/compile-glsl.ps1 index eba1c6cb..f43a7e8c 100644 --- a/packages/cultmath/tools/compile-glsl.ps1 +++ b/packages/cultmath/tools/compile-glsl.ps1 @@ -2,6 +2,9 @@ param( # A GLSL source to append after the generated wrapper's library instead of the call-every-function # body; tools\compile-glsl.ps1 -Body 'float x = lerp(0.0, 1.0, 0.5);' is the negative control. [string]$Body = "", + # Also concatenate shaders\CultMath.Phacelle.glsl (MPL-2.0) after CultMath.glsl, as a consumer that + # calls cultmath_phacelle does. Without it the wrapper is the MIT library alone. + [switch]$Phacelle, [string]$GlslangPath = "" ) @@ -17,6 +20,9 @@ if (-not $GlslangPath) { # by string concatenation (GLSL has no #include), then a fragment shader that calls every public # function once with zero arguments of its declared types. $library = Get-Content -LiteralPath (Join-Path $repoRoot "shaders\CultMath.glsl") -Raw +if ($Phacelle) { + $library += Get-Content -LiteralPath (Join-Path $repoRoot "shaders\CultMath.Phacelle.glsl") -Raw +} $calls = foreach ($match in [regex]::Matches($library, '(?m)^\w+\s+(cultmath_\w+)\s*\(([^)]*)\)')) { $arguments = foreach ($parameter in ($match.Groups[2].Value -split ',')) { $type = ($parameter.Trim() -split '\s+')[0] From 6d0a0c147d09b198ae948cd2817962cbfff16b41 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 13:40:16 +0200 Subject: [PATCH 08/13] CultMath design.md and README: the two GLSL files, the concatenation order, the fixture's platform tolerance Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/README.md | 11 ++++--- packages/cultmath/docs/design.md | 49 +++++++++++++++++++++++--------- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/packages/cultmath/README.md b/packages/cultmath/README.md index b9ca6e0b..0b12819e 100644 --- a/packages/cultmath/README.md +++ b/packages/cultmath/README.md @@ -47,12 +47,15 @@ shader semantics. carved sphere): its interval over the segment proves empty space in one probe, and the noise ball is consulted only near the surface. See `docs/design.md`, "Intervals". -- `shaders/CultMath.glsl`, the same `cultmath_*` library in GLSL ES 3.00 for - WebGL2, generated from `CultMath.hlsl` (never edited by hand). GLSL has no - `#include`: a WebGL consumer concatenates the file's text after its own +- `shaders/CultMath.glsl` (MIT), the same `cultmath_*` library in GLSL ES 3.00 + for WebGL2, generated from `CultMath.hlsl` (never edited by hand), and + `shaders/CultMath.Phacelle.glsl` (MPL-2.0), generated from + `CultMath.Phacelle.hlsl`, which holds `cultmath_phacelle` alone. GLSL has no + `#include`: a WebGL consumer concatenates `CultMath.glsl` after its own `#version 300 es` line and `precision highp float; precision highp int;` (the library declares no precision, and its hashes need 32-bit integers), - then appends its own shader source. + then `CultMath.Phacelle.glsl` only if it calls `cultmath_phacelle`, then its + own shader source. - `Voronoi.SampleTones`, a C# batch surface that calls the Rust `cultmath-core` native kernel when `cultmath_core` is available and falls back to the managed parity path otherwise. diff --git a/packages/cultmath/docs/design.md b/packages/cultmath/docs/design.md index 73793212..4d9558d7 100644 --- a/packages/cultmath/docs/design.md +++ b/packages/cultmath/docs/design.md @@ -136,20 +136,28 @@ it fails the same walk that already handles a bare vector return. ### GLSL Target: Source Transformations `shaders/CultMath.glsl` is a GLSL ES 3.00 (WebGL2) library generated from -`shaders/CultMath.hlsl` by `GlslLowering` (in the test project). It is a derived -file: never edit it by hand. Regenerate it, and the golden fixture +`shaders/CultMath.hlsl` by `GlslLowering` (in the test project), and +`shaders/CultMath.Phacelle.glsl` is generated beside it from +`shaders/CultMath.Phacelle.hlsl`. Both are derived files: never edit them by +hand. Regenerate them, and the golden fixture `tests/CultMath.Tests/fixtures/glsl-parity.json`, with: ```powershell $env:CULTMATH_WRITE_GLSL = "1"; dotnet test packages/cultmath/tests/CultMath.Tests --filter GlslMirrorTests ``` -`GlslMirrorTests.CommittedGlslEqualsLowering` fails on any difference between the -committed file and the lowering of the committed HLSL. These transformations, -in order, are the complete list: +`GlslMirrorTests.CommittedGlslEqualsLowering` fails on any difference between +either committed file and the lowering of the committed HLSL. These +transformations, in order, are the complete list: 1. Each `#include "name"` is replaced in place by the included file, by the - same resolver the C# mirror uses; GLSL has no `#include`. + same resolver the C# mirror uses; GLSL has no `#include`. The exception is + an include under a file-level licence of its own, listed in one table, + `GlslLowering.SeparateFiles`: its line is dropped and the file is lowered on + its own, by the same steps, into its own output. The table has one entry, + `CultMath.Phacelle.hlsl` to `CultMath.Phacelle.glsl`, because Phacelle is + MPL-2.0 and MPL-2.0 is file-level: kept separate, it leaves + `CultMath.glsl` MIT. Nothing else in the lowering is keyed by name. 2. Include guards are dropped, and so are the functions taking `Texture2D`/`SamplerState`; the host shader samples its own textures. 3. Type names: `floatN`, `intN`, `uintN` and `boolN` become `vecN`, `ivecN`, @@ -162,8 +170,11 @@ in order, are the complete list: `inversesqrt`, `asuint` to `floatBitsToUint`, `asfloat` to `uintBitsToFloat`, and `saturate(x)` becomes `clamp(x, 0.0, 1.0)`. 7. Float literals pass through unchanged. -8. The library is wrapped in a `CULTMATH_GLSL` guard. -9. The first line names the file as generated and says how to regenerate it. +8. Each output is wrapped in a guard named for its file: `CULTMATH_GLSL`, + `CULTMATH_PHACELLE_GLSL`. +9. The first line names the file as generated, its sources and its licence, + and says how to regenerate it; `CultMath.glsl`'s also says which + functions live in the separate file. GLSL ES 3.00 is stricter than HLSL: no implicit conversions between int, uint and float, no C-style casts, and no `step(genType, float)` overload. Those gaps @@ -180,16 +191,26 @@ The library declares no precision. The host shader does, and it must be integers. `tools/compile-glsl.ps1` writes such a wrapper (its own `#version 300 es` line, the precision, the library by string concatenation, and one call of every public function) and compiles it with glslang, which -`tools/get-glslang.ps1` fetches pinned. The Unity package does not ship the -GLSL file. +`tools/get-glslang.ps1` fetches pinned. It runs twice: over `CultMath.glsl` +alone, and with `-Phacelle` over `CultMath.glsl` followed by +`CultMath.Phacelle.glsl`, the order a consumer that calls `cultmath_phacelle` +concatenates them in. Two negative controls must fail: `-Body` with an HLSL +token (`float x = lerp(0.0, 1.0, 0.5);`), and `-Body` calling +`cultmath_phacelle` without `-Phacelle`, which proves the MIT file does not +carry it. The Unity package ships neither GLSL file. Parity runs in two legs, each with one owner: HLSL against C# by the mirror test, bit for bit; GLSL against C# by the golden fixture, which records 256 seeded cases per function family as float32 bit patterns, evaluated by the -consumer on WebGL2 and read back. Integer-only families (`pcg3d`, `pcg4d`) must -match exactly; float families are ulp-bounded, the bound measured on the device. -`iv_exp` is not in the fixture, because its C# bits come from the platform's -`exp`. +consumer on WebGL2 and read back. The families `pcg3d`, `pcg4d` and +`iv_frustum_ball` are marked exact; the other float families are ulp-bounded, +the bound measured on the device. `iv_exp` is in the fixture so the site can +measure WebGL2's `exp`, but its C# bits come from the platform's `exp` and +differ by OS: its tolerance is "ulp-bounded, platform exp", its entry names the +platform that generated it, and `GoldenFixtureMatchesCSharp` compares it case +by case within one ulp of the running platform, printing the largest distance. +Every other family is compared as text. Every fixture family is in +`CultMath.glsl`, so the parity run needs no `CultMath.Phacelle.glsl`. ## Invariant 8: Value-and-Gradient Primitives From e877b708bea829422d99ccfb8041161e075ca501 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 14:15:32 +0200 Subject: [PATCH 09/13] CultMath GLSL tests: overloads compared by signature; the two-file header contract pinned EveryPublicFunctionIsLowered compares (name, parameter types) after the lowering's own step 3, so a dropped overload such as cultmath_pcg3d(vec2) fails. TwoFileHeaderContract pins distinct guards, the MIT and MPL-2.0 provenance labels, and the MIT file's pointer to CultMath.Phacelle.glsl. GlslLowering exposes step 3 as LowerTypeNames; output unchanged. Co-Authored-By: Claude Opus 5.5 --- .../tests/CultMath.Tests/GlslLowering.cs | 14 +++++--- .../tests/CultMath.Tests/GlslMirrorTests.cs | 33 +++++++++++++++++-- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs b/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs index e5ccb88f..eff40196 100644 --- a/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs +++ b/packages/cultmath/tests/CultMath.Tests/GlslLowering.cs @@ -73,10 +73,7 @@ internal static class GlslLowering source = Regex.Replace(source, @"(?ms)^\w+ \w+\([^)]*\b(Texture2D|SamplerState)\b[^)]*\)\s*\{.*?^\}[ \t]*$", string.Empty); // 3. Type names: floatN, intN, uintN and boolN become vecN, ivecN, uvecN and bvecN. - source = Regex.Replace(source, @"\bfloat([234])\b", "vec$1"); - source = Regex.Replace(source, @"\bint([234])\b", "ivec$1"); - source = Regex.Replace(source, @"\buint([234])\b", "uvec$1"); - source = Regex.Replace(source, @"\bbool([234])\b", "bvec$1"); + source = LowerTypeNames(source); // 4. File-scope `static const` becomes `const`. source = Regex.Replace(source, @"(?m)^static const ", "const "); @@ -103,6 +100,15 @@ internal static class GlslLowering return provenance + "\n#ifndef " + guard + "\n#define " + guard + "\n" + source.Trim('\n') + "\n\n#endif\n"; } + /// Step 3 alone; GlslMirrorTests maps the HLSL signatures with it to compare overloads. + internal static string LowerTypeNames(string source) + { + source = Regex.Replace(source, @"\bfloat([234])\b", "vec$1"); + source = Regex.Replace(source, @"\bint([234])\b", "ivec$1"); + source = Regex.Replace(source, @"\buint([234])\b", "uvec$1"); + return Regex.Replace(source, @"\bbool([234])\b", "bvec$1"); + } + private static readonly Regex Cast = new(@"\((float|int|uint)\)"); private static string LowerCasts(string source) diff --git a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs index 129fa7de..945c2cd2 100644 --- a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs @@ -61,14 +61,21 @@ public sealed class GlslMirrorTests private static readonly Regex Definition = new(@"(?m)^\w+\s+(cultmath_\w+)\s*\(([^)]*)\)"); + // A definition's signature, its name and parameter types, so an overload counts on its own: + // "cultmath_pcg3d(vec2)". HLSL type names are mapped by the lowering's own step 3. + private static string Signature(Match definition) => + definition.Groups[1].Value + "(" + string.Join(", ", definition.Groups[2].Value + .Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) + .Select(parameter => GlslLowering.LowerTypeNames(string.Join(' ', Regex.Split(parameter, @"\s+")[..^1])))) + ")"; + [Fact] public void EveryPublicFunctionIsLowered() { var lowered = Lowered; var hlsl = Definition.Matches(Hlsl).Where(m => !Regex.IsMatch(m.Groups[2].Value, @"\b(Texture2D|SamplerState)\b")) - .Select(m => m.Groups[1].Value).ToHashSet(); - var glsl = lowered.SelectMany(output => Definition.Matches(output.Text)).Select(m => m.Groups[1].Value).ToHashSet(); - Assert.Contains("cultmath_snoise", glsl); + .Select(Signature).ToHashSet(); + var glsl = lowered.SelectMany(output => Definition.Matches(output.Text)).Select(Signature).ToHashSet(); + Assert.Contains("cultmath_pcg3d(vec2)", glsl); Assert.True(hlsl.SetEquals(glsl), "HLSL only: " + string.Join(", ", hlsl.Except(glsl)) + "; GLSL only: " + string.Join(", ", glsl.Except(hlsl))); // The MPL-2.0 code is in its own file and nowhere in the MIT library. @@ -81,6 +88,26 @@ public sealed class GlslMirrorTests } } + // The two-file contract a consumer relies on when it concatenates CultMath.Phacelle.glsl after + // CultMath.glsl: distinct guards (a shared one would hide the second file's body), each provenance + // line naming its file's licence, and the MIT file pointing at the one that holds cultmath_phacelle. + [Fact] + public void TwoFileHeaderContract() + { + var lowered = Lowered; + var guards = lowered.Select(output => Regex.Match(output.Text, @"^[^\n]*\n#ifndef (\w+)\n#define \1\n").Groups[1].Value).ToArray(); + Assert.All(guards, guard => Assert.NotEqual(string.Empty, guard)); + Assert.Equal(guards.Length, guards.Distinct().Count()); + + var library = lowered.Single(output => output.File == "CultMath.glsl").Text.Split('\n')[0]; + var phacelle = lowered.Single(output => output.File == "CultMath.Phacelle.glsl").Text.Split('\n')[0]; + Assert.Contains(" MIT.", library); + Assert.DoesNotContain("MPL", library); + Assert.Contains("cultmath_phacelle is in CultMath.Phacelle.glsl", library); + Assert.Contains(" MPL-2.0;", phacelle); + Assert.DoesNotContain("MIT", phacelle); + } + [Fact] public void GoldenFixtureMatchesCSharp() { From 56fe88365794532ba3031a60661bab274d158328 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 14:15:33 +0200 Subject: [PATCH 10/13] CultMath GLSL fixture: iv_frustum_ball ulp-bounded with an enclosure check; phacelle family appended iv_frustum_ball's sqrt is not correctly rounded on WebGL2, so its family is ulp-bounded and its entry carries the enclosure rule the consumer applies in double; GoldenFixtureMatchesCSharp applies it to C#'s results too. A phacelle family (normalization 0.5, platform exp, sin, cos) is appended after iv_exp; every earlier family's cases are byte-identical. Co-Authored-By: Claude Opus 5.5 --- .../tests/CultMath.Tests/GlslMirrorTests.cs | 69 ++++- .../CultMath.Tests/fixtures/glsl-parity.json | 266 +++++++++++++++++- 2 files changed, 321 insertions(+), 14 deletions(-) diff --git a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs index 945c2cd2..96d74f7c 100644 --- a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs @@ -118,8 +118,10 @@ public sealed class GlslMirrorTests File.WriteAllText(FixturePath, expected); } - // Family by family: every family is compared as text, except one whose tolerance names the - // platform, whose results are compared case by case within one ulp. + // Family by family: every family is compared as text, except those whose tolerance names the + // platform, whose results are compared case by case within one ulp. A family with an enclosure + // check must also pass it on C#'s own results, so the rule the WebGL2 consumer applies holds for + // the reference. var committed = JsonNode.Parse(File.ReadAllText(FixturePath))!.AsObject(); var current = JsonNode.Parse(expected)!.AsObject(); var committedFamilies = committed["functions"]!.AsArray(); @@ -135,13 +137,16 @@ public sealed class GlslMirrorTests if (((string)want["tolerance"]!).Contains(PlatformTolerance)) { var ulps = MaxUlps(have["cases"]!.AsArray(), want["cases"]!.AsArray(), name); - output.WriteLine($"{name}: within {ulps} ulp of this platform's exp ({RuntimeInformation.OSDescription}); fixture generated on {have["platform"]}"); + output.WriteLine($"{name}: within {ulps} ulp of this platform's libm ({RuntimeInformation.OSDescription}); fixture generated on {have["platform"]}"); Assert.True(ulps <= 1, $"{name}: {ulps} ulp from this platform's result, more than 1"); } else { Assert.True(JsonNode.DeepEquals(want, have), $"fixtures/glsl-parity.json family {name} is not C#'s current output (regenerate with CULTMATH_WRITE_GLSL=1)"); } + + if (want["check"] is not null) + AssertFrustumEnclosure(have["cases"]!.AsArray()); } committed.Remove("functions"); @@ -168,6 +173,26 @@ public sealed class GlslMirrorTests return max; } + // FrustumEnclosure applied to C#'s own results: every case's ball encloses the exact one. + private static void AssertFrustumEnclosure(JsonArray cases) + { + foreach (var entry in cases) + { + var sides = ((string)entry!).Split(" -> "); + var a = Floats(sides[0]); + var b = Floats(sides[1]); + double mx = a[0], my = a[1], z0 = a[2], z1 = a[3], footprint = a[4], warp = a[5]; + var zm = (z0 + z1) / 2.0; + var radius = (z1 - z0) / 2.0 * Math.Sqrt(mx * mx + my * my + 1.0) + z1 * footprint + warp; + double dx = b[0] - mx * zm, dy = b[1] - my * zm, dz = b[2] - zm; + var gap = b[3] - (radius + Math.Sqrt(dx * dx + dy * dy + dz * dz)); + Assert.True(gap >= 0.0, $"iv_frustum_ball case {entry}: radius short of the exact ball by {-gap}"); + } + } + + private static double[] Floats(string hex) => + hex.Split(' ').Select(h => (double)BitConverter.Int32BitsToSingle((int)Convert.ToUInt32(h, 16))).ToArray(); + // A float32 bit pattern as an integer whose order and differences are the floats' order and ulps. private static int Ordered(int bits) => bits < 0 ? int.MinValue - bits : bits; @@ -176,7 +201,7 @@ public sealed class GlslMirrorTests private const int Seed = 20261002; private const int Points = 256; - private sealed record Family(string Glsl, string Tolerance, Func Arguments); + private sealed record Family(string Glsl, string Tolerance, Func Arguments, string? Check = null); private static float Uniform(System.Random r, float lo, float hi) => lo + (hi - lo) * r.NextSingle(); private static float3 Point3(System.Random r) => new(Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f)); @@ -189,14 +214,28 @@ public sealed class GlslMirrorTests return new float2(centre - width * 0.5f, centre + width * 0.5f); } - // A tolerance containing this names a family whose C# bits come from the platform's exp and so differ - // by OS: GoldenFixtureMatchesCSharp compares it within one ulp, and its entry records the platform. - private const string PlatformTolerance = "platform exp"; + // A tolerance containing this names a family whose C# bits come from the platform's libm (exp, sin, + // cos) and so differ by OS: GoldenFixtureMatchesCSharp compares it within one ulp, and its entry + // records the platform. + private const string PlatformTolerance = "platform "; + + // iv_frustum_ball's sqrt is not correctly rounded on WebGL2 and its compilers may reassociate, so its + // bits are not portable; what the march needs is enclosure. The consumer checks that in double from + // each case's arguments. It is written into the family's fixture entry, where the consumer reads it. + private const string FrustumEnclosure = + "enclosure: from the arguments (mx, my, z0, z1, fp, warp) compute in double zm = (z0 + z1) / 2, " + + "c = (mx zm, my zm, zm), r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp; every case must have " + + "GPU radius >= r + |GPU centre - c| (Euclidean). Report the largest ulp distance per component as for " + + "any ulp-bounded family; only enclosure fails the check."; + + // A Phacelle stripe wave vector: each component in [-6, 6], about one stripe per cell. + private static float3 Side(System.Random r) => new(Uniform(r, -6.0f, 6.0f), Uniform(r, -6.0f, 6.0f), Uniform(r, -6.0f, 6.0f)); // Every family the site's WebGL2 readback evaluates, in a fixed order. A new family is appended, so the - // seeded stream and every earlier family's cases stay as they were. pcg3d, pcg4d and iv_frustum_ball - // are "exact"; the other float families are ulp-bounded, with the bound measured on the device by the - // consumer. + // seeded stream and every earlier family's cases stay as they were. pcg3d and pcg4d are "exact"; the + // float families are ulp-bounded, with the bound measured on the device by the consumer, and + // iv_frustum_ball also carries an enclosure check. phacelle is in CultMath.Phacelle.glsl, so its + // evaluator concatenates that file after CultMath.glsl; the site, which does not vendor it, skips it. private static readonly Family[] Families = { new("float cultmath_snoise(vec3)", "ulp-bounded", r => new object[] { Point3(r) }), @@ -224,13 +263,15 @@ public sealed class GlslMirrorTests new("vec2 cultmath_iv_lerp(vec2, vec2, float)", "ulp-bounded", r => new object[] { Interval(r), Interval(r), Uniform(r, 0.0f, 1.0f) }), new("vec2 cultmath_iv_snoise_ball(vec3, float)", "ulp-bounded", r => new object[] { Point3(r), Uniform(r, 0.001f, 2.0f) }), new("vec2 cultmath_iv_fbm_ball(vec3, float, int, float, float)", "ulp-bounded", r => new object[] { Point3(r), Uniform(r, 0.001f, 2.0f), 4, 2.0f, 0.5f }), - new("vec4 cultmath_iv_frustum_ball(vec2, float, float, float, float)", "exact", r => + new("vec4 cultmath_iv_frustum_ball(vec2, float, float, float, float)", "ulp-bounded", r => { var slope = new float2(Uniform(r, -1.0f, 1.0f), Uniform(r, -1.0f, 1.0f)); var z0 = Uniform(r, 0.1f, 100.0f); return new object[] { slope, z0, z0 + Uniform(r, 0.01f, 50.0f), Uniform(r, 0.0001f, 0.05f), Uniform(r, 0.0f, 2.0f) }; - }), - new("vec2 cultmath_iv_exp(vec2)", "ulp-bounded, " + PlatformTolerance, r => new object[] { Interval(r) }), + }, FrustumEnclosure), + new("vec2 cultmath_iv_exp(vec2)", "ulp-bounded, " + PlatformTolerance + "exp", r => new object[] { Interval(r) }), + new("CultPhasor cultmath_phacelle(vec3, vec3, float, float)", "ulp-bounded, " + PlatformTolerance + "exp, sin, cos", + r => new object[] { Point3(r), Side(r), Uniform(r, 0.0f, 1.0f), 0.5f }), }; private static string GoldenFixture() @@ -250,6 +291,8 @@ public sealed class GlslMirrorTests json.Append(" {\n"); json.Append($" \"glsl\": \"{family.Glsl}\",\n"); json.Append($" \"tolerance\": \"{family.Tolerance}\",\n"); + if (family.Check is not null) + json.Append($" \"check\": \"{family.Check}\",\n"); if (family.Tolerance.Contains(PlatformTolerance)) json.Append($" \"platform\": \"{RuntimeInformation.OSDescription}; {RuntimeInformation.FrameworkDescription}\",\n"); json.Append(" \"cases\": [\n"); diff --git a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json index ddafeb62..c99a4600 100644 --- a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json +++ b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json @@ -6556,7 +6556,8 @@ }, { "glsl": "vec4 cultmath_iv_frustum_ball(vec2, float, float, float, float)", - "tolerance": "exact", + "tolerance": "ulp-bounded", + "check": "enclosure: from the arguments (mx, my, z0, z1, fp, warp) compute in double zm = (z0 + z1) / 2, c = (mx zm, my zm, zm), r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp; every case must have GPU radius >= r + |GPU centre - c| (Euclidean). Report the largest ulp distance per component as for any ulp-bounded family; only enclosure fails the check.", "cases": [ "3eba7b90 3eb7145c 427992e9 42ba552a 3c779789 3f90a589 -> 41e2a26a 41de7fa1 429b8f4f 419e80d6", "3f73f64c 3f0c1560 4222d6fe 4297c95b 3d2b135d 3f4911fc -> 425e3d89 41ff38c0 426934da 41f0be8c", @@ -7078,6 +7079,269 @@ "c11e1519 c0deff46 -> 3856aab4 3a76a784", "40c786cc 40c7941c -> 43ff33d9 43ff9e1c" ] + }, + { + "glsl": "CultPhasor cultmath_phacelle(vec3, vec3, float, float)", + "tolerance": "ulp-bounded, platform exp, sin, cos", + "platform": "Ubuntu 24.04.5 LTS; .NET 10.0.12", + "cases": [ + "c01d8630 41b2cd8c 41ea274c bfa19894 40aeb6ce 40918978 3e9be843 3f000000 -> bf74d9fb 3fb71956 bf35fe4e 3f21280a c01277e2 403b5fe4 40464bbd bd5b4455", + "c2234cf7 4237b112 419ae0c0 c0acbcd4 bf60f9a0 bfeb2b08 3ebf0a10 3f000000 -> c0d0048f 3f228da3 bfc85f60 3edaf41b c0171c80 be137f8c be1c92a3 bf5747bf", + "41cc0920 42390a28 c1c4714d 4095ff5a 40ae1422 40138f40 3ea0019d 3f000000 -> c0626854 c06c83d4 bfb294eb be676f09 bfcf7e6e 3d2e218b c0200a4a 3f167e2f", + "42370b68 c2438846 c1e6efa5 c03373ff 402d665c 4013a940 3e578396 3f000000 -> 3d678d11 3e4c172f beeb5835 be30e395 3f0a6332 3ede254b bee8e250 3eae4126", + "c08f5578 411586a8 42413a4c c019de34 3fc5c70c bf08ccf0 3f5a6e2e 3f000000 -> 401e1cfd bfc4bac6 bf58739f 3f279e2b bcc6aac3 3f322772 3edf42e6 3df7608b", + "c11d6390 41b27d04 c17248a0 402cdca8 c0bf8bd5 c0829639 3effad62 3f000000 -> bf03c0db 3ff17078 3f87ac38 3f75d4e0 3fe2b4b6 c0cfb86d c0697330 3e8ede55", + "c114785c 41ee8f54 3f8c8d40 bf6775d0 3fa2f210 c04f602b 3cc8f8e9 3f000000 -> 3fca86f2 3f6577fa c01a4f40 bec279f7 3f5a1dbd bf3c2a09 4028e32f bf207dbd", + "c211a0fa 41530bc8 c121f734 40a8c3f0 40b21602 40a4ff6c 3f048cf0 3f000000 -> 40c38039 40992e68 408dfc05 3a08c9d8 3b50ece4 3b23b31a 3b17bbad bf7ffffe", + "41a9de18 41022de0 c2149dfc c04ff8bc c0709652 c09be326 3f22f44d 3f000000 -> 403bf7c9 40419292 408b5124 3e679c10 bf2e9566 bf33ca05 bf816597 3f795da6", + "c156c260 41a86c28 41c868c0 4064de10 40964edc 3e7448e0 3eb4f280 3f000000 -> bf8c32e0 bffb8ca7 3d8b13de 3e438cc7 3f323542 3f99dc06 40017862 3e874112", + "c1d068b3 42225982 c205c8f0 40ad9ff8 3ec5dd80 40707e58 3f0ce75b 3f000000 -> c0349e81 3f3fc530 bfaf1dbc bf18915a c08caaaa 3eac5ccd c005c769 3e9225e7", + "c1e59fe1 41a04784 4208ac42 c0920956 bee7b4a0 c07134a5 3ea378b1 3f000000 -> bf3feef3 bdb8ba0b bfa29638 be587b15 3f3930d2 3ef203a1 3fff1a53 bdbfd9a5", + "42389eb6 4106e060 c15fbf54 3ffd6f00 3e9e6f60 bffcb888 3f3075cd 3f000000 -> 3f332fdc 3c8560b8 bfe1216d 3c2f34ca 3bf5488d 393690af bc9a1676 bf7ffc41", + "c20f4cf6 c1dfe857 bed31800 40717ea8 c0a6b312 408b5396 3d29b33a 3f000000 -> bfdb8d4f 403490e4 3fb46b68 3e471378 bd600a14 bfbec46f 3fc2be3f 3eaf81a2", + "c224ee6a 41d06018 414aa3f8 4024db50 40215b48 40036b94 3f657d0a 3f000000 -> bff064ec 3f7da25d 3e056ae2 be8ac707 bf782c47 bed3745c c00c9402 bcacdb39", + "41b4d2e4 c1d569b9 4242f024 bf523eb0 c0933fbf 40b37860 3effacc8 3f000000 -> be71736c bd8a544e 3c17c22f 3f7aa6b3 bf04a68a c05faf26 40b9af6e bd872883", + "421867b6 c1aa947d c21c327e 402c6040 409cb72c c00c5822 3ecef6a5 3f000000 -> 402c1659 40ac0e18 c01c7aba 3e2e0e0e 3eed75dd 3f6d6a7b bed7ec61 bf7c4657", + "c2158204 c12f6f30 c212cbea bfce6068 c0725f30 3ffc14b0 3dc82c17 3f000000 -> bf1395df bf305c8f bd010deb 3c80722f 3faded2e bcab6bdf 3e04aa20 3d81745f", + "41949b58 4187ba84 c210eb56 becef150 40aceb96 3ddc8e80 3e004e03 3f000000 -> 3f1c001d bfbfd00c 3f9c703f bf46ef9f 3ee14306 c015c255 3facb8b2 3e843e47", + "422ff3b8 c1e3f97a c117efcc 4041ae24 3e35fc40 bf6d0858 3e712c37 3f000000 -> bfdb3c1a bdd2c0db 3f47d294 bf103816 bf957c53 bd8fb3dc 3f083fd8 3f5382c9", + "c16e4c30 c14b7fe0 c1d54085 bf8b652c bfca9a04 c06e21c5 3e857f24 3f000000 -> bfff4d45 3eda6caf c0881cdc 3e7adfa2 3e134e36 bfc64ff6 bec024d1 bf36ee7d", + "422d5612 c135cecc c224002b c0836a40 3f0bfd30 3fd2bf48 3f762107 3f000000 -> 4058e898 bf411a76 bfb68041 3eaab85a bf996e7b 3e8897c4 3f0117dc 3f715983", + "c14fd0a4 bf22c600 c17192b0 3e9dd3c0 c0bd4f62 40656694 3d24f368 3f000000 -> beff75fe c0d75ce4 4082d09b bcb4fe19 3c34a7be 3e184c99 bdb90498 bf7ff000", + "40cb6f18 420bdb7a 423a18e2 c0802b55 beff9dc0 bfc16eb0 3f70ee13 3f000000 -> c05a7f35 3bd810da bfa0cad2 bf57161c 40a94183 bc275f6f 3ff91c8a bf0ad490", + "c22b4d81 41a392ec 423ce770 bfa3e2d8 409774fa c07e6f32 3f46714c 3f000000 -> bfdd6fa6 c021e2ac 3f2cb532 bdb4ffec 3f462d16 3f9d4611 bd304b02 3e837570", + "c240fbd4 421fd45a 42368e94 4072edd4 be9e9f10 408168ea 3f409e77 3f000000 -> be0c201f 3e503fdd 3f593961 beb7f078 bfceca04 3fd3e1ed c01a947b be971b5a", + "c1ad5e19 c234eb2b c1992a12 bf925044 408ec268 c0811449 3f11dc15 3f000000 -> 3ce1b4ed bf8e626e bf3702ca 3e813a39 bfef3d1c 3ee5ef0e bf8e2b47 3ea3bffa", + "41b11cb4 c2319747 c1daccd8 3dbfd100 3fbeaea8 c06a0c7a 3f499901 3f000000 -> bd08f86d be126b45 3f3e0a22 3f7b45e0 3e2fb5ee 3f3bd519 c073ca22 3e43df83", + "401448f0 c1b97248 c1cd9516 409d535c 40729590 c00a8b84 3f5c91a7 3f000000 -> c02190d3 c0074540 3fcc5f79 bf5d6668 c08b293c c0690647 4030083b 3f0085c2", + "419185b0 c218e79b 41d39378 3fe82ab8 bec18960 c070f0d1 3eb484b2 3f000000 -> bff7009f bf8500a5 bee6158c be3828fa bf6a662c 3eccb98c bf6cdf5c 3dbafc39", + "41168240 c12bcd00 41a77fd8 3ec9a8f0 40b14a60 c022edc0 3e8f8133 3f000000 -> bf4d6951 bfced089 3fd09f28 3e4b56a7 bf235d91 3faeeb49 3f05c7de 3ed2998b", + "41f18d48 417ab7a8 41d12f88 3f850ee8 c05e8ec5 bfc59408 3eb36176 3f000000 -> bfd29c74 3fd88088 3fe1c9a7 bed46ebc bf931609 3f5efd4d 3fb82d63 3f5cc8b1", + "416d82f0 41c49bb8 421a3306 c0306d62 40b5cea4 40bb4472 3efd1e3a 3f000000 -> 3f8d136e c0ac0e05 c0871c46 bf11f6d0 3f43d331 c06ed382 c03b8b60 3f524f79", + "415235f8 41aab240 4222a50a 3ff32d18 3e55d580 40961338 3f19f48d 3f000000 -> bf5d50c2 beaba634 c00d26d8 bf5a88cc bfb55d2e bf0ca9d7 c06757b1 3f055641", + "422bfc72 408d09e0 41cadff4 bf949404 40b76420 c05932ce 3e0260c0 3f000000 -> 3e1ad712 c0700bfc 4035036a 3e345710 3f873541 3ed84397 bf4514a3 3f2c6e39", + "4182b7f0 3fdb3500 423dfe3e 3ff98528 409c70a4 3db12680 3f38a282 3f000000 -> 3ef90c71 3fbabdde 3cffa967 3f70ef28 3fad5f13 4081ff52 3db1f9b3 bead0d2a", + "413263c8 bfec49e0 c18d8a1c 3fa248b0 40ac1f40 3e0a2c00 3d090b54 3f000000 -> bca80779 3e97874d be698984 3ed80cf6 400f1075 3fccdce2 c02c14f7 be947a34", + "c14cd5dc 421796b6 c13e9a50 bd739d00 c06779b4 40898cda 3f76729b 3f000000 -> 3dc4e9ea 401d4ac1 c064800e 3d4e6b1f 3f0e7a24 bd288139 bf8f7aa8 3f1baa65", + "418f6740 41f235c8 4215cd42 bf2b2258 bf9e2864 40096424 3f5f39ba 3f000000 -> be5562ac bf1d54e0 3f6bf72d 3f43aa38 be7cebc0 bf3a7b3d 3f8bd79c bf25145c", + "c21af350 c244d836 c1fd5079 c04d5704 c084cb9b c054b65e 3f7c2c02 3f000000 -> c02a3303 c06ce177 c052a8f5 bf0fe3fb 3fe753f7 4020fab9 400f290a bf53bc0b", + "c1d91797 422434ca 412c86c4 c0a6a1ff be700520 4051c5d0 3ca2ec6d 3f000000 -> bf1cff92 bda671ee 3ec4b46b 3f7e5aae c0ac3c44 bf369954 4057cba2 bde7da35", + "c1d68924 4105a85c c232ef2e 3f547b60 bfb8f8a0 3f50ae20 3f0ed843 3f000000 -> bd6ae04d 3e01e51e 3e889d50 bf7356a6 3e33b352 bec6c2fc bf510b30 be9f06e2", + "41841508 c14ba5c8 42234a50 405641f4 bfd89908 c080c7a1 3f7bf0dc 3f000000 -> bf3b659f 3ec0b685 3f5fef14 bca2d5fe beed41b9 3fcc95eb bf9ffd2c 3e6bca16", + "41ab7d88 c21fcf04 c1e179b7 3dfeaf00 407c2510 40861d2c 3eff6bda 3f000000 -> bdcb6bb1 c05d2a17 c0889194 3f1af01f 3d9aa858 402825d1 404fa971 3f4bca27", + "c028a180 c2101cd1 c14b29b0 4061d5b4 c022a6e0 c0ad68f3 3e12c886 3f000000 -> 40663b25 bf6aa5f7 c09d9806 3eca8ae2 3f001429 bfbc0b57 c013a1d4 bf1b5a3b", + "423b61ee 41da6f74 c0e340e8 402786a0 c09f560e 40aa08d4 3ee514bd 3f000000 -> bfb36e85 3f46f4b1 bf106e8a 3f005d21 3fa2e925 bff0bd92 4082f0a6 3ea0c372", + "c1e09e66 4200bc6e 42160ccc c0b94bf0 c09563b1 c00edb9a 3ee5217f 3f000000 -> 3f5e70d3 be3daa49 bf60e2d7 bf7f2f3e 40a22522 4058004b 407f97ff 3d6acf26", + "415844f0 c1b3e51b c09452b0 4062b54c c0a9938e c0bfa747 3f03a752 3f000000 -> c07e79d5 3f9abc5e 40b3b865 bec9329d bf4d4643 3fcc1b8d 4055427f 3f135eda", + "41f8079c c13085d0 40b23b40 3fe9b53c 40a2c5bc 3e812310 3f421804 3f000000 -> 3f9a888b 4048fc90 3f2853bf bea6db97 bf8b3b40 c06871cf 3f4b592b bf27064d", + "c0b3c8c0 418fb67c 41dc16dc c09ceab9 3e6fd6c0 bf831b38 3f32576b 3f000000 -> 4041fbf6 3f30df22 3fa02073 bf35b78a 40437cf4 3f323e29 3fa15e3f 3f3451ab", + "411f7b4c c004d920 c22fa918 c02da068 c055a0e8 3ee19bd0 3efd8284 3f000000 -> 3f9817c5 bf273561 3feaa15a beceee3b 3f36eacf 3f6dbac9 3fb6cd63 bd3d9141", + "c1b116e6 c17b269c bf359880 4026ec70 3ed8af80 c0ac483c 3f56a6d4 3f000000 -> bfc59e8c bf8b6c76 406a4bac beedc8bf 3d8c6f6d 3f194605 401f620f 3f57d242", + "4211d5bc 4227bfec 42478b8c c04f7fc3 c0adc1ad 3fc640d8 3e2238a6 3f000000 -> c0065870 4085e896 bddecf21 3ef51ec6 c001e4e3 c0942e30 3f93742c 3ecffd80", + "c13a9b48 4215507c c22d9bc0 c0821bca bf704af0 40115710 3f468136 3f000000 -> c0918384 bf52e975 4012a5ad 3c75cf34 bd8bbcac bc4a8a30 3d0cd357 bf7ff8a0", + "c20f1ece c21ffea2 422a7012 3f8c7660 40995902 4040ac00 3d116056 3f000000 -> 3dd24475 3f0257e2 3e94b0e7 3f7ee7e0 3f8dad6c 40afa654 40486001 bdbd2806", + "41ecb608 c12b84f8 40081f90 40813ce6 bedc1030 c0b8a6e8 3f0809c3 3f000000 -> c02fa8c1 beab3a7f 40960677 3eae650f 401e01bb 3f4be807 c061dff9 3f3e784e", + "c23557cd c22ee236 422dec0c bfab14f0 beba5920 40a129c8 3f14486e 3f000000 -> 3edf63e2 3f89ad66 3f62bc48 be82f506 3ecb6c7d 3fb2124c bf4d3800 3dd416de", + "41d036a8 41dcffc4 42109e0a beabf9d0 405b51f8 3eeade20 3e5d7f17 3f000000 -> 3f07ea04 bfa56fed 3ea81b0a 3f2ee322 3ece768c 3faf645c 3f384e15 3e505428", + "412987c8 4245f2a6 c21ae699 406671d4 40856e34 4028c024 3e0bb6ab 3f000000 -> 3f36a476 3feda490 4014acd0 becb2833 bf62aeef c0067f23 bff1138a bf226e54", + "c1cd9608 40d5cc60 c215a3ae 3fd0c7dc c0193c75 4068b26c 3d8cb1c1 3f000000 -> 3d10422e 3e40f172 bfb70337 3dd36d87 3e9b9b68 bf061072 3ed68cdd 3dae5656", + "402a1290 c00f66d0 c12ac7e8 3f7ffab0 3fa8dc78 3fc31a68 3eac67a8 3f000000 -> 3e849364 beeb2a60 beb11aa9 bf096646 3e28a9a7 be9596b3 be614fcc 3f5800d1", + "41f86560 c21387cc 41da0bb0 40ad9c34 404f0380 c06955a6 3ec38ca3 3f000000 -> 4051060c 4049a136 c06c3932 3d6e93ca 3ec49aee 3eeeeaf1 be2756e4 bf199aea", + "c18cfd0a c22e2df9 c2183993 c0944ff9 c05cafc6 407522c0 3e427d9e 3f000000 -> bed10aec bf8a4c66 be3b9a2f 3f4c99f9 c05992f6 bfe5ef19 40b04277 3b9e4922", + "c1234f94 c1125db8 c2396684 3fb34320 c01a0df2 bfa15770 3f4dba61 3f000000 -> bf06b0b0 3f9ab722 4015f0a2 bef806f6 bf0ed8df 401d45a2 4033805d bd94d008", + "becde100 41f71f74 41ca27ac c07e0eb0 c0932f6e 3e016a20 3e6f4d36 3f000000 -> bfd75631 c004ac1e beb4ac39 3f5e9e60 c03da0d3 c069aa76 bf1f1a4c befcccbd", + "c1a11363 c04affc0 421b7918 c0791c48 409de748 4091c1ec 3f4ba35d 3f000000 -> c082f030 bf2e5549 3fc22296 bea4b41a 4020d624 3f92c389 bef4f62e bf176b8b", + "42117a74 c17fb1c4 420b2de8 c0a2138a 3e90ae40 4043760c 3f6b5429 3f000000 -> 3f357a64 3fe93e1a 3f995c83 bf49b691 405b25af 3f11d84b bfe6e01a be9351e1", + "3e678500 c2456a1b 400dcaf0 c09e4658 40b9c7d6 4091723a 3e03bb08 3f000000 -> bfce6c50 3fd00387 3f9bfd05 3f75addb c0b03212 40b18dab 40852572 be8fe9d9", + "c22c5efe c1652dd8 423aa5d4 c01183cf c04dc713 3ecb62c0 3ea10842 3f000000 -> 3dea2095 3e3771af bd19b328 bf7fba6c 401ea6d5 40789d53 bf504d96 3d3cb169", + "c18e2f0a c2400dfe 41e254b8 3feac4b8 400e93b8 c087137a 3ccdb1ae 3f000000 -> bfee5ffa 3f0532af 40811089 be0c8abf 3ce87098 3f4b5598 3f7990fc 3f5a06b9", + "411a0808 c1d76557 422f40c2 c0187e55 40a8cf74 bfa217c0 3f08c39f 3f000000 -> 3fa8459b bf44e415 3fac528a 3e6f3f61 be2930ac 401bd788 bf1e6729 3e589a03", + "c22caafd c1f928d8 407832b0 4053dc44 3fd7bc78 40939954 3f7e644d 3f000000 -> 3e1e1f8e bfbbd6ee bf3cd4af be587210 bfc0cf54 beac3507 bf05c38c bd7a7df4", + "41f1f3ac c1d791b3 c22773b6 c08cf745 3fca6460 c097a92e 3e6b17cf 3f000000 -> 3fb2c595 bf287dd8 3ea01096 3e248278 bffb4423 be4af11d bf458e45 3e88ae50", + "c21b6485 4228d344 42120b42 400995a0 bfebd108 be6a24e0 3f0a9adc 3f000000 -> 3f0a5e61 bf117da5 be163445 bf6a971a bf9e5cce 3fa68385 3eabe881 beccf8ee", + "c18fbce6 c22dfc75 c0efbca8 4081c10a 3fa33a00 409759ea 3f67ef0c 3f000000 -> bf3f410e bf22565c 3f2ec5e2 bed5b35d c03d3bcc bf0b39ee c00f3505 be7c1db3", + "41dc9120 41066fb4 41e51bb4 c0af079e be40fae0 3f9102d0 3a428d58 3f000000 -> 40858dd5 3fa1c560 bfc5d334 bf01413a 40289b75 3f7b7b03 c01d7e4a 3f0b485f", + "c204b70a c0e6eab0 405ddf70 3f8cb560 3fe47360 c009a082 3f05139d 3f000000 -> 3e0506c1 3fb50296 3ddaf7a8 3da04aa2 be4289ee 402cda41 c04a45dd befee595", + "41e775b8 41a13c24 3fff4440 c0ab4f3c c0af6a4b 4062f6d0 3ef83151 3f000000 -> c0938b46 c0791d1e 402f4bb1 3ddd00cd bf001f3a bed8524c 3e983873 bf7e814d", + "c1990bdd c22aca80 4143abc0 3f8f0ed4 409ecb36 40bd3d24 3f3f7d18 3f000000 -> 3e7c42ad c02acd31 c02ad591 3f5df0f6 bedb68e4 40948f0c 40949653 3eff2bcd", + "c21697f6 c21a8540 422f2efa c0b2df61 40bc3f6a c09e501f 3cdafb54 3f000000 -> 404b0750 bff7ce6c 3f54574b 3e692377 bf9b078c 3f74d3af 3f4e90a2 3e170af8", + "416a6ce0 c1a40321 c224844e c0875f12 3e02c380 c050400e 3f717c7e 3f000000 -> 3f5bfafd bf578513 3e09b82a bf210791 40546be4 bf3e6ade 3fbb2d42 3ea4603f", + "bf13d980 c187a568 c224fbf8 4017ddcc c08280e5 c0b7b521 3f07efce 3f000000 -> c035c7e9 4046f7b2 408de22d 3eda80e7 3f27ddb6 c0458a5f c0085163 3f5ebdad", + "c15a6a20 42220e4a 41e33738 3f41c650 c09a217d bf71f350 3eef1ccb 3f000000 -> bf9232a6 bfd661c0 bf881c2f 3dd9ae5b bf511ebb bf7d8751 be02f9d2 be208642", + "3f8ccd80 c2065d14 c09c9e60 3f596790 3f9c0e48 c03de55e 3d3713ad 3f000000 -> 3d8701f5 bf856906 3ee69b79 3f589fb3 bd5be9b1 3f9dc717 bed7dece 3ecce28f", + "c194b02e 411abbf0 40b7bf58 3ff375b4 c04d0045 bda99740 3e123c80 3f000000 -> 3fe78ed8 c042110d 3ef8a224 bf318c2d c036b693 4081fc19 3f83136c beb7e53b", + "c1158174 c0dc0c78 42229080 3ec7f980 3f4cdb70 3efea3f0 3f5080f0 3f000000 -> 3e73860e bd68f779 be9c8d3b 3e9f1250 3d9f3286 bc984bc7 bdccaeef bf7354c9", + "41c2106c 405e6e80 421e2858 40429838 40b4f244 c0595821 3f429101 3f000000 -> bf08a4d0 3f0467fe bf3d3d16 3e670e91 3d3e3def 3ed61720 4047141f 3cdd6ce6", + "c1e92711 c20a6ca2 c038e830 409660e8 3fffb930 3f377180 3e0ac49b 3f000000 -> 3f558c3c 3f2b69c1 bf308c3f 3f2c6b1f 4072bb10 3fa110d8 3e8db4f1 bb866fe9", + "c213a47c 415c3df4 40f57130 409d128a 40b6d2a8 409910e6 3e38682c 3f000000 -> c0609695 c0375c02 c08b0570 bf2306eb c0194810 c0870187 c045b923 3f3d16a2", + "41bafc9c 4040c1d0 c2384dcc 40a3ff3e 3eaf13d0 bfabbbf0 3f74f97e 3f000000 -> c09ae81a 3fbb6006 3f9d6de1 be502d30 bf6b220d 3db0f756 bed9d3fa 3f554e4a", + "c0270280 42170b1e c23bc9c1 3ec43160 4091d758 3fea50c4 3f44b72e 3f000000 -> bdf61ce9 406c7377 3fccac48 baeddb4e 3fab5485 3db1b1bb bfd68e22 bf307c0c", + "414ef014 40b21ee0 41fde9c0 3fc84534 c0b2469e c0255f52 3dd83a99 3f000000 -> 3d054e09 bd9dbe7f 3e93b33e beed3ddb 3f6c8450 407824b2 3d04c278 3e29c43d", + "c0b72308 c2257991 41d5836c 3f4c8c90 40a66b74 c0bd330a 3e8d23ff 3f000000 -> be960ca6 c0053936 3e27d95c be06b313 3fb1cec1 bfbd90a3 bf792711 3e1a0b33", + "41eadde8 c1883b50 41459bb8 3f8b2318 3fdb6564 3fce6960 3c10f1a3 3f000000 -> 3e2a07ce 3e976bc2 3e862015 3f7ac176 3f4ec396 3fb8224e 3fa31a12 be4e34e9", + "c2462536 420e7624 42028568 bf2ff7c0 407c85d8 4068c688 3f3c1252 3f000000 -> bf98ace4 bffc1d44 c0491ccb 3e8a3a95 bd352040 3f921df4 3ef19767 3f2e5386", + "c1b2ef80 c0be2610 c16083bc 405c2de8 409c59fe bfcc2428 3f006614 3f000000 -> 4005d507 404199d8 be0bb2fe be922beb c0366336 bf9059ee 3d024f4a bf452778", + "c2273460 41cf728c c1b112be 40a91946 3faf023c c0a363ec 3e94f933 3f000000 -> 4085d5e3 3f12b892 c073a0f3 3f26a5f3 40658a97 3efba42a c050ec85 bf42549f", + "c0b3d290 c1b61f04 c15f370c 3f921720 bfb6efc4 400b367c 3f2e2988 3f000000 -> bfa65b5f 3fa0ff42 bf233ab0 3e6e63eb 3f0c7d89 bf44156f 3fcdcd5c bf00936d", + "40994630 c114c2bc 42308a12 c04a0406 c0b90626 40475a34 3f1fec4e 3f000000 -> bf19ea83 bf56db87 3ef47061 3f7cc248 c06f8376 c0a72c5c 403e3083 be226d82", + "419f9b74 42446f7a c1f9de1a c0611312 be625da0 bfc641f8 3e2a6f08 3f000000 -> 400ee70d be6ba7b2 3f33d83e bf22f77c 3febeadc be42856c 3f1473dc 3f456d95", + "41692cc8 c114756c 41dfea20 c0b5ee8a 3fd75800 405283c0 3f362b17 3f000000 -> c05275e1 3edb82ec bf503b09 bf580669 40930788 bfe983dd c0866d83 be87e41f", + "40e14890 c1783ecc 41705b40 c0b4e735 3f37f220 40275588 3f0f92a2 3f000000 -> c098015d 3f9e4ea3 403885e9 3ed705d2 c00cae84 3f12839b 3faac6ed bf685485", + "41061698 c05acd50 420b0b0c bf200920 c09137fb c0ab22d1 3f3a7a8c 3f000000 -> 3fac4705 405d74ef 3fc6b2e6 3f1823a6 bf7c495e c01de987 c09a3534 3efb88e0", + "c23a9414 c102ac08 409f2568 40956024 3fa5276c 4090b6aa 3ec3d45c 3f000000 -> c03644f7 bfc427a8 c068d345 bf289191 c033cf05 bf5aef0d c070d206 3ef8745d", + "41d6939c c2239a52 41babdd8 c08d2c84 401c5920 c0902ebd 3f4c4e64 3f000000 -> 3f6d1340 bfbaa59f 3ebe7a7e 3d867d94 be1b76eb bf281843 be7ba74c 3df2a956", + "42120dd8 4100f4b8 40dc7408 4038dc1c 409c595e 40b3fdaa 3f7a3d3f 3f000000 -> bfc33673 bffef515 c03c889a 3f270b90 4074c748 408c812d 4083588d 3e5d753d", + "c22f20fc c1a7197a c1e98d2e bf002348 c0affda8 c0a7797e 3decf621 3f000000 -> 3eec79c4 4099377f 406dddce 3f115d84 bea3210e c0536376 c02416ab 3f52b98c", + "4021c4e0 c17fe868 41cf392c bfd76bc8 c00cdb5a bf3e7170 3f1cb7da 3f000000 -> 3f2dcc2a 3f315cd7 3f09d94c bf19b99a bf9c3b88 3f07253b be70219d be6aa357", + "42438da6 c1d7df3c c2111ca0 c0b373da 40988b36 c0033d45 3f4d5bb2 3f000000 -> 4012b7e4 3f5c743d 3c8db636 bd901a7a 3f8ab549 3eb60a09 3fc49512 3dcd570a", + "c1c4eac1 4226b7e4 421e9d8a 4088d1b2 3f8f6600 4049ccb8 3f37fac1 3f000000 -> 3f3d1fc2 3ea8dcef 3f66ca8d 3f7646e5 40269fb6 3f94c5f7 404b5579 be8bc43e", + "421a15fe c1b106e9 41a5c304 c05b22b2 c09f207a 4040b7e4 3f78ac19 3f000000 -> 401a7e7d 406f51b9 bfdd05ac 3e8588b6 bef1ea6b 3e268e1e 3fbae05e 3f581092", + "c2151e44 c17d52f0 c0ddba10 3f4a3c20 40706050 c0331dc2 3e78c661 3f000000 -> bf1b45e1 bf02a724 3e3068a7 3f672b51 40029c9f 4055188c bfdd893a 3e2cd55a", + "41c8bf8c 423dc256 41da160c bfad9708 400f3ee4 c0713c62 3f60520b 3f000000 -> 3ff3a6ef c01c8623 bf00ae11 bf0f27cf 400efeae c01a4744 3ffdc24a bd54a470", + "c16f4cd0 c0daa6f0 41a66bfc c0bc31d8 3fd67130 c0795b57 3f4eee55 3f000000 -> 409b4569 bf558889 4035a6c3 3f3c6aff c0a8cfb3 3f68277a c0457df7 3f2d4e1e", + "c1491284 c196c840 41232e90 bf1eb940 c018bfb3 bf9e27f0 3f23db16 3f000000 -> 3f7f5350 3f838185 3fa294d9 bf1ee30d 3e5c5e79 bfa98a5b 3de4aca0 3d74a95a", + "c22f76a5 c23344eb c20df755 c04e9a64 400fabc0 3fd84688 3f5c96fd 3f000000 -> 40692189 bfd19f2f bf6b430d 3e8f7457 bf7755c8 bfdd4632 3f8d9965 3f6983dc", + "421b651e 41a53544 c05432c0 c09fa4f1 c0a80fc1 3f35f930 3f00bf43 3f000000 -> beea3767 3fefb99c 3f8ccf09 be2a0d41 3e1760b8 3f94851b 3ecd7130 bdd8dab9", + "4230f58c c2166d7f c04463c0 409c3a0e 3f6c2460 40837d10 3f08e72a 3f000000 -> c01c16d9 bf07400b bfedb2cf bf27bdda c07c9495 3f425d8b c0178264 3ee3df2e", + "420ad16a 4247ab84 c1ec31a2 bf25e630 3f684cf0 c081635a 3f40bc64 3f000000 -> bf6bb447 bf53d21f 3e84eba6 3e5d36f7 3f1bfc0a 3fd5cb13 bf978f7d be81d8e3", + "c23bf09c 42037d1a c219000d 3e120000 408dfb1a 3f9e0710 3f30893b 3f000000 -> bfcc7bb5 bec50c07 3eaf8922 be220b89 3e3c8770 bf9a0da0 bfc9e61d bd94d272", + "42290740 414c0974 c2099996 40bfc992 3f0a8170 c0ba676a 3eec84b5 3f000000 -> 40441441 bfd4da9c c018e65b 3f6ae859 408ffe01 3ff9e5cd c08eb6a7 bec5f101", + "41b42100 c1cf0dad 422a4290 3f6d6070 3fb24cb8 c01572c8 3edd262d 3f000000 -> beef1c7a bdcfe77d 3f564c05 bf2dbd7f bedcf473 bdc01e16 3f46065a 3f3c0450", + "c1f9ed42 c212ee20 4084c5e8 402c3734 3f27c7a0 c097921e 3e5b707e 3f000000 -> bf819ee5 bea0058d 3fde8951 3ec594a4 3fd7a293 3e0c6676 c0415a62 3ead3500", + "c232f06f 4230217c 41e3fdc8 c09533bf be88b040 c096381b 3f5bbbfd 3f000000 -> c06f242b bf14e793 bfc4ff22 3ee388d2 c0392aab bf64486a c039cbce bf168559", + "42171d88 c1710c80 40e79c20 c06c15b7 40af3d62 4070a218 3ca26c6a 3f000000 -> be6a59e7 3f6608c5 3ffb9f73 3dc14ee9 bf84c37f 3efa15df 400c80ba bd8df087", + "beb7ed80 c195594f 4222f52c c0b3cba0 407bc8f4 c0a408c9 3df99e44 3f000000 -> c0a288e1 40708608 c09d54d0 3ed96bd0 c01878a2 3fe1a1a0 c013970b bf67c57f", + "41ce64b4 c1b0b6c0 42137d78 40b07670 4089560c c0098416 3f57b1ee 3f000000 -> 409cba32 4044130f bfbef7a6 3efc4b56 40318153 3fde1194 bf5848d9 bf5ec312", + "419cd674 40f339b8 41e61d2c c00dfbb4 bcec1e00 be97c570 3f5eb300 3f000000 -> bfa4ebea 3e859d5c 3e755616 3f1e14e6 bf817970 3e51caf5 3e409af2 bf495c61", + "4195c1c0 c14e61e8 421b328a c0a624ce 409bd0b0 3f9f2634 3f58ed6d 3f000000 -> 3f937937 bf6a804a 3b690f70 3f7a8584 c0af5603 408b6729 bc8a8bf6 3e52b61d", + "421cbc4a c16ac3d4 c13885e0 3ff55734 bdc29c00 bf8701d0 3f30f16d 3f000000 -> bff16ed0 3f48f783 401d00b8 be5a52d8 3fdb6fb6 3b230683 3f603255 bf0297ea", + "41ff7d0c 41568e44 4199f70c 402e28f4 c0b38955 c09c837e 3e96ddb7 3f000000 -> 3ff7467f c08bec22 c06b205c bf1a5df9 bfbae8e8 4053873e 4031ba08 bf4c38f2", + "4180f9b8 4226816c c20b3bf0 3fb87bc0 405d13e0 c0b9f0eb 3e3a1a5e 3f000000 -> 3ee60b4f bf9b697a bf6b936c bda6b11c 3fa4d0d8 c028f33d 3fc6aa15 bda01ac2", + "41daab54 41e3c9dc 4216fd1e befd6810 bff8ca78 c0866f6b 3f4f287e 3f000000 -> bf78e253 bfe0c602 bee3de0b beccb74e 3fb6d047 bf19d2b0 4008c649 be462eb9", + "4230ebd4 c2403d60 4239c78e 40a213ca bebd2560 c02d2cec 3f5dbc34 3f000000 -> c0bf4bfc bf8ed97d 401ee005 3f1971b3 408f3ecd 3f55ef55 bfedef63 3f4ceab3", + "422a5594 bfcc21e0 c1a026ad bfce7e18 409cfe68 c085df3e 3f606e87 3f000000 -> c02d78d1 40a81587 c0586130 3de16393 bfbc01ea 401f46e5 3f9472c3 bf79e8d7", + "4230c3a6 c221ecf1 410d5e50 bed62c80 bfb3e364 3f6731b0 3cd4cd10 3f000000 -> bbdd1df0 3cc38920 bd02a4ba 3f7fa877 3e058efd beec36ce 3f1dd271 3d53a192", + "c090cf30 41bcdcf8 c0a8df38 c092b93f 3f86e9d8 3ffe6900 3df2b147 3f000000 -> c0a8149d bf85af97 4003f5b3 bc90ae16 3f003f8f be7cff91 3f8d1c80 bf64ce2e", + "40db50f0 3f385a80 c1ef3909 c084d7d2 c036a212 4092ad64 3f6086da 3f000000 -> bef5fbc3 bf9d8919 4003dcd1 3f1ce771 c06da7a2 c0146115 40588b76 be543cc8", + "413783c4 41b667f0 41f3c170 3f424800 407425f0 bf5ba028 3f3c421a 3f000000 -> c015292a c0219f94 3f821a9d 3ebf7882 bf47c247 3fbbab23 bf04da17 3e1452c5", + "c0d8ec28 420cd766 c1c45dde 40918b88 408bee54 c015b7ce 3f54d854 3f000000 -> bfb50e58 bedc5db0 bf3c38a8 bef299df bfb7a02f c0241e8f 406e8512 3dbd8bc1", + "4197a3bc c1a8b4e9 42457220 40aec63a 3f6552f0 40598640 3ef9a0ed 3f000000 -> bfaf855b bf010a7a bf633e16 3f765eb0 409b6d80 3fe48991 40493a79 3e8b1c20", + "c1ad57b7 3fdc6ee0 41f355d0 40927334 3fa73d28 403e3220 3eb6eff5 3f000000 -> bf6d0f7f 3e4f7034 c0833b58 be18dcc9 bfb9ada4 3eb4ace0 bf8ea70f 3f198fad", + "423ebd88 c22076d2 c1e6cab8 3fe13dc0 c0311946 40bfdb84 3ea78895 3f000000 -> 3f0821df c0431559 40e07c7b 3e483e55 3dd92881 bf1b9935 3fb30cd9 bf7b0ebe", + "c15483a4 41e2edb8 4220c264 3f47a178 c087a5c5 c020d313 3cb89c14 3f000000 -> c000b46a 3ed9bd91 3f8b13c6 bef25c20 bfa8218e 4034d6d6 40147392 3e9c6f34", + "42199716 c1f5d9f0 c1d0e49e 402b9848 bfd62764 c0238681 3f610546 3f000000 -> c02dcfc8 3fabac9b 3ef7a840 3d98d223 bfa0e9c0 be35a763 bf35cc8c 3d489da4", + "c1e18843 c1ea1d4a c1f0de9a 40100934 c09a15bb bfa9b9b0 3ea9a9fc 3f000000 -> bfedbc48 4041fa37 3fa3c95f bf2ce41f bfd9b49b 4031a25a 3f95fcaf 3f3ccc46", + "c1e75efe c247ca30 41917d6c c05f78a5 400ae5d8 bfbb4348 3ee9250f 3f000000 -> 3fbbc938 bf63c8c9 3f5c342f bf6d0d7f 406647ec c00baa52 40070473 3ec14ee3", + "41ca9c70 c236c993 c1d61825 3f91ebd8 c0156ed7 3d4f0700 3ea50dcd 3f000000 -> be2ded4d 3f293293 be97a457 bedbf082 bda57901 3ea0f91e be104557 3f672d3b", + "3f0bac40 c2235044 c12fbf78 bf5d7ee8 bdb4d580 bed6e9f0 3ecc771d 3f000000 -> bcc0b1ef 3b6388a9 3e1d37ca bf60c54b bd30bcf4 3bd0b11f 3e9032e0 3ef5107f", + "c18c5f22 40d0e9c0 c208d1fb c0414db8 bef23af0 be853f10 3f423e80 3f000000 -> 3f9f5cd2 bf89a54c 3fb99ee5 3de3410e 3e101ef2 bcacae0e bf22ac7d beed1c82", + "421c97d2 c242f60f 4237a34a c07cedd0 3fa927c0 40be66f4 3e202557 3f000000 -> bf7861a7 3e63b5ad 3fc16f81 3f7971d1 c0868b6f 3f76b1b3 40d19003 be663f9c", + "41e28214 c1dff8a2 c16675e8 bed18b00 409e6748 3f4e5c30 3e05d941 3f000000 -> bf52ff06 40809974 3f97be2e bebe104e 3ea8b4bd bfcda5f1 bef2a865 bf6db52c", + "c20c2366 c245663c c214a0c5 c0aad26e 40593d60 3f2dec80 3f366ed6 3f000000 -> c0a9bbed 4081e8c9 3f70011d bd97cbb8 3fa470e3 bf618115 be2e2972 bf7e74d7", + "c219be60 41f70120 c1c0480b 3fa2f66c 40a30034 40a5e626 3f62e153 3f000000 -> bf2663c1 401936d2 402ec5b1 be1913e6 3f3aa917 bfd2c7bf bf59a145 bf07d43a", + "c0cf3b38 40190b00 423849a4 c056d2cc 40998320 4016fc14 3f5c9db1 3f000000 -> 3f8dc83a c00b68e5 bf262904 bc704ba6 be832c7d 3f8554e7 bebbab2c 3ed4df04", + "c23bd384 c1b55ebb c0f22070 4015fd48 3dcdc700 c08043a7 3f38ea04 3f000000 -> c018c7ad bf2c4c08 407497f6 beaa6cba bf57b810 be7346b7 3facad94 3f7166e0", + "4214ac0e c23a5265 4238cd32 3f762b10 4098c5dc c031b044 3e33140b 3f000000 -> 3f186dcc 3fceda1b bf6f0696 bf6efc3a bfc678e3 c086aad3 401b9d09 beb78b1c", + "40bc1ba0 c23c3137 c1f57a92 40087b40 40a1ee80 c0ae4880 3f469d92 3f000000 -> bf044bd6 c00a237b 3fbe7e23 bd559266 3df17c0d 3ebf6267 beab2ba6 3e1930e7", + "c1eced40 419f8ea0 40ce9fc0 400e9378 c0a77f34 c03087fa 3eb21f49 3f000000 -> 3e805e09 c006be5f c018befd bee68d6d bea44c27 3f51fce7 3f0d08c5 beed7183", + "419ce5fc c1279c7c c1cb8284 c0bb1bd8 408e4d7c c0317624 3df42990 3f000000 -> 40d473a6 c081f15d 4030a9a7 be3a28c4 3f9d1c13 bf402ff7 3f02a4b5 3f7bbbed", + "41ba9240 41a34694 c1603c74 c02d30d4 bfa7fb28 40bc473c 3e79d0d3 3f000000 -> bee94a00 be985718 bf196cf0 bf16564e 402c7e7f 4007a505 c03c6075 bdedd750", + "41dba5ec c1a1e26b c23d9d70 c0b5c5a8 3ffaf928 402254f4 3f605f74 3f000000 -> 4084be0b bfd1174d bfcbd2f7 bf1263c7 40390e1e bf91bf04 bf8e1329 3f5203ae", + "bf0f8640 41d60ddc 40883ad0 40b794a0 3fe71a28 c09effd0 3f539b97 3f000000 -> bfaffc52 bf5a47b6 400b5847 bf5a7b6e c09c0249 c006d443 40b5fcb9 3ecc4088", + "40ec4a90 420fe7f8 c244238f bf2a4d88 40980056 bfc0e1c4 3e33c544 3f000000 -> bf78cc22 3fb49484 3ee7cec5 3da1eb09 3fad4658 bfa8db20 bfa7d7cd be97247f", + "415e52ec 41ad1ce4 40d7aa40 c0b5879f 40bfe2f0 c0aaa047 3f535887 3f000000 -> bfee62ad 3ff4ec56 3fa1a4bc bf0ce290 401452d1 c09c6b79 403f20cd be2b6ddc", + "c18ba900 420551d4 c11ad980 3ebed490 c0aa8fba 3ec3e0c0 3edbcac5 3f000000 -> 3f97c9c0 4046a558 3f7d2b66 3d81e967 bd866e58 be7c9574 be25dd5b 3f239634", + "c11d1de8 40771690 417e6ad0 bf98f5f8 3f348c58 beaf7b70 3e4e9226 3f000000 -> bed036bc 3e08ad66 be6dbc71 3dafba24 3d0f7434 bc3c556a 3ca3cb5c 3f7f0e4f", + "414c47cc 41a26ec8 c23a227d c056f220 c0737683 c01f432f 3e2332b7 3f000000 -> bfdc38b8 bfb54418 bf5928c8 bf3104a3 3fe251c0 403e2bdc 40401d65 be090696", + "4209bb50 c16fae3c 4203f8aa bd7f9000 3fb1feac c0a5bbaa 3e0adcc1 3f000000 -> 3eb143f3 3ffac051 c014a408 bdd44645 bf05c2ca bf2d7f49 3f86124f bedb4630", + "41020160 c08495c0 4247bf62 3ffb6d68 3fef2b00 c0ac759c 3e2d0629 3f000000 -> 3f9dc932 3fbc95ef c0a53cd9 bf137fd0 bf5e758f bf84f10b 4068f71e bf513c94", + "422db51a c2104247 c0a98d80 3f915910 3f261120 bf9dbac4 3e302b00 3f000000 -> bf0924bb bd9c4a69 3f16e273 3d8961a2 3d1386ed 3ba81f49 bd224eee 3f7f6c61", + "c18f12e0 c16ef90c c2365760 bffa44d0 409abf46 40b5f32c 3c38c3ab 3f000000 -> be853e27 3f811c8a 3ee21cfd bece44f5 3f41eef9 bfafe117 c0893e6d 3c98ccc6", + "c242a8f3 40517c50 41f5b700 40733c64 404a02a0 3fff4718 3ef65227 3f000000 -> c02dda72 bfd30ff8 bf89d51b bf0a1a18 c03d3488 bfd45a81 c02d2396 3f448659", + "bfd853a0 40ea87b0 c2397f13 bf387b28 bee064a0 c01e7568 3f520f7a 3f000000 -> bc240b38 be52e55c bf0fd68e 3f725341 bcf0c64e bf1ac56a bfd31e3a bea51997", + "c227fbe0 417f6d50 41bd6194 409ac6cc bf7410e0 c0b36b81 3f31831b 3f000000 -> 40a2c131 bfc09ff1 c0babbbf 3e2e85ed 3f613468 be8544a2 bf81312d bf7c412a", + "40cbcd60 410c3cd0 4148cac8 3fc60a68 4097cd18 40bb22e4 3f05ee90 3f000000 -> 40085878 40936972 40bb20cd 3e32fc7e 3ec1a31c 3f515a7c 3f84e10d bf7c0f1b", + "4247d2b4 41e4a010 c208e7d5 402380c8 c09baed6 c09041ce 3f11621b 3f000000 -> 3f8e75e3 bfa2086a bfa3c375 3f1f1939 3fae7dd8 c03ec76d bfc1c893 bd28b1a1", + "422a5582 c1f6383c 420aca60 4096c970 bfb11d80 40104964 3ee6ffa1 3f000000 -> 4067264f 3c19936e 3fa74666 bf0672a5 c045dd09 3f849cef bf094798 bec147d2", + "40d36610 c10eca74 c20a20c4 c09d3791 c09833fd bfe41c58 3e76e785 3f000000 -> bf353260 bf08f646 be182f0f 3f7e9763 c0d7036f c0a285ef bfb495f7 bdd68ccf", + "4198ccd4 c19a1053 c0d332a8 be57d3a0 40a95eac c00be024 3ee63a16 3f000000 -> 3f2205eb 403ebadc bf487752 bf4465e8 bf41c95b c0641f00 3f6fc41a bf2434e3", + "42320892 c1feae66 c1f9c684 408d3438 40095dc0 40afd7c6 3ef792cb 3f000000 -> bfe8ace2 bf5b35a5 c0044a07 bef8ad56 c0153a3e c010d751 c016a53b 3e35bfd1", + "41e601dc 421768c2 41b5a474 bfc95dd0 c07df1ce c03df7e4 3e1de7f8 3f000000 -> bfd25bca 3ca5561d 3f9306d7 3eb216af bef1b3a8 bfc39485 be42ec99 3c62a2db", + "c05088f0 421be66c c243d816 c0b23abb bfee40cc c045f621 3f7f646d 3f000000 -> bf705371 bec54772 bf292b6f 3f7af7f9 c0954746 bff5146a c05228ce be4a04f7", + "c2013e30 c03ac890 40757420 4060022c 3fd0a7e8 c02761f4 3e9dfb41 3f000000 -> 3f229860 3fbbb9cd be2e986f be09eb42 3f0cab3b 3f16b897 3f5d86d8 bd017017", + "c00a7cd0 41b2fd00 c1d7a213 c0850d82 406b5c88 c0929868 3f7b1287 3f000000 -> 3fbebf76 c057717e 4013c62d 3f2454b6 c036cf71 3fea6b3e c068b1c1 3f2ba4d3", + "c243c4eb 417eb688 c23e0491 401e1380 403099d8 40b391a0 3f474f40 3f000000 -> 400bfacf 4083cbf9 40a2e376 bf0e5734 bfbb47fb c0305543 c059ee64 bf54c792", + "404e4a10 c0e797e8 41b157c4 40a6c4ea c09a0b24 c09ea02b 3e64f321 3f000000 -> 4093444d c09ab7f9 c0659141 be4d1fc6 bfbabc58 bed4cacb 3fb73ce6 bf4a6663", + "c103ba54 c0f471f8 c0aaf5b0 3f93bb80 c0a2f502 bf135898 3f44a829 3f000000 -> be060f36 bfb4cb50 be42d2df bc376352 bb8d8407 3cdebcc3 3f15e1a3 bec043f4", + "41a8aaac 416f15f0 c2299568 c0af7b1a 40071180 c0799cb0 3e9e489d 3f000000 -> 3fb918ac bfc7c10e 401fcde3 3e2906a8 bfdf07fa 40083c98 bf5fde91 3e25d9fc", + "c20a15bd beae5e80 c1e3af64 bfd29cb0 c08c638b c07ac99a 3ee9e6dd 3f000000 -> 3f4391ef 3fb0e78f 3fec0d2d bf4b4b1f 3f5775ae 40749efa 4042f9ef 3e8dabfc", + "c1d78e6e 42422c7c c187f954 3fb08b84 c02d1963 c057c07a 3f250871 3f000000 -> 3f6c5286 bfd5ad0c bff00194 3f5cc47a 3fc945d4 c035fc30 c04c6901 bf019b21", + "c236b98b 41fd56c0 420ef404 3ee35200 c06a219e c09f5ebc 3d789758 3f000000 -> be13c42d c0408230 c03d0f4a be571e81 3ec66089 bf45a439 3efd7cbb bf3b845d", + "c19fe682 41e31b58 40b77378 4031468c 3fff4aac c05cc0e8 3e9977ff 3f000000 -> 3f9c3314 4011b56f c01e2cc7 3f19ad40 40204e76 40868514 c018c422 bed35d1c", + "c24417da 423390d8 41823f70 c0ab3bd4 4060bff0 bebbf960 3ec14078 3f000000 -> 409a37d3 c042455e 3f2cd0ce 3ed1ab70 c05074fc 3fa60dd1 bea3210b 3f2dd460", + "422c69c0 3f20e500 40e484b8 40b25868 409ec4a2 404cdc10 3e3f9b39 3f000000 -> 40a1be65 40973bd8 4064ae91 bcf040e4 be17dc3a be0dfe13 bdd6b547 bf7fe3cf", + "c0c5d5d0 c219620c 42407f2a 40672f60 c04d15ab c090906b 3f2aeacd 3f000000 -> 3ee65e0c 404a626b be98913b 3ebc7b04 3fbd4895 bf49ff12 bf401597 3eb5dc34", + "42051a1c c1e112d7 3f1a1b80 be6cce20 c09d6f9c c0412f74 3f5acb36 3f000000 -> bf8205c5 bfdb21ff bfd37e40 3ed876b8 bf58e3a4 c01c8d91 bff37350 becc745c", + "41aa2b2c 417ce778 415349cc bec36360 40b0fba8 c083acda 3e62161c 3f000000 -> 3f360908 c0a390e1 40295271 3edb639f beaca7e2 401b235b bfa098fb 3f674eb1", + "c239645c 4185c73c 40c2bfe0 be5d9540 403fbeb0 c032c761 3de5b1b4 3f000000 -> bc78e501 c0333266 3f388fc4 3dc4e1d2 3fcc0c35 bf8872bc 3e297f0a 3f3ccabe", + "c197b069 c1ab3928 40e82f58 c027aae2 c00b9984 408f73fa 3f5ca89f 3f000000 -> bf12a568 c0016e70 40308da9 bf1e4ef9 3fe10fff 3fe796db c043ee39 bf080e8f", + "4185df70 40f37a38 422bec12 bf4d13f8 c09dd009 3fcae72c 3e3542a9 3f000000 -> 3fd461d9 3ed7c63c 3f59fdc4 bd28239d 3f63ee2f 3f59ad7c 3e9780e8 3e804315", + "41b83484 c20948b7 40eab878 401b9f2c c0564fb7 3e8bf890 3e5f8fc5 3f000000 -> 3dff97ed bfeb584a be2988c0 3ee1ef26 4009072c bfc1d168 bfd795dc 3dc08d3a", + "420b49b6 422fbe24 bec06380 40adc8fc 3fa86b80 40b311ea 3ecda5ee 3f000000 -> c07e66b9 c0059c3f bfd74385 3f16a1f1 402bfc8a 3daf08b7 40a89a12 3f104404", + "c0a22d58 c0fec698 c190c199 be4d45c0 4088d346 3f2a7710 3f05b9cd 3f000000 -> bfa7a613 408ae9e2 3e373e20 be1b2bac 3e4d9c2b bf2a5e44 bce0bc21 bf7d0b32", + "422d1328 422d6282 c1f0c36c 4050ba4c bfc02ed4 40bd33e2 3d39d5b1 3f000000 -> 409edc90 bed8a956 40a231dc 3e2c166a bf68567d bfc54d4c 4007a02f bf76f711", + "c2273568 41a1ccc4 c23a0489 408ecbb0 3e9995c0 c0af30b5 3e9cce91 3f000000 -> 3e873f98 bd71677a 3de51ebb be84e2bd bfffcb88 3f9cbd06 3f4ca756 be08b640", + "3f858ac0 424300ee 41df77d0 3eb07340 403bb98c 40973b68 3eeca164 3f000000 -> 3dfaa501 be582042 3f13be1b bf6061ff bf1cffc1 bff35d69 c0750801 be4dc4d3", + "c1756ae0 c229794e c188b4b4 402030bc 409c6210 bef3f840 3e5f40ff 3f000000 -> c040e02e c07f14e7 3f1d72ed bf111cf4 c004b64c c02f83a2 3ed8ac06 3f52e607", + "c209b7e6 41313378 4233faaa c04d469d c0a29518 3fed8930 3f4c2d81 3f000000 -> beaab748 bed3efd7 bf545af8 bf04ebdb 3f9c37e7 401c85c7 3fb13d8d bcbd0dfc", + "c1dd5675 c1491cec 422c5734 4084e3d8 3eb8ba60 c07b2c3d 3f442865 3f000000 -> c04595bb 3ee6196a 40292293 bf381f14 bfc6c159 bfc82800 4019a52f 3f20c6a6", + "c1d2507c c077c3e0 c227b828 c09f7e7c 40a242a0 c09b5e7a 3f705ae0 3f000000 -> c090b276 40a29943 c06f2e4e bf0625d5 40320ccf c04813f3 401327fe bf5a099d", + "c0d6ce00 407e34b0 4235d490 c0950981 3ff84dec c0a8e257 3f1608e1 3f000000 -> c03c00ac 3ea1ef7f c041bc69 beead960 40181511 c00c665c 40940081 bec47b0e", + "420edbd2 4213f8a4 c22eb859 bec6dc50 3ec73660 407b6750 3f6d2051 3f000000 -> 3e9509a0 3f0e98a2 c0241151 3f36d780 be9815b3 bf1182fe 40276c11 3f332da9", + "c223667d c225ff34 415ea3d4 bf1e8c60 bfaa4c04 3dd5aa80 3e92ff72 3f000000 -> 3f1d6979 bee9bdd3 beff057f be95961a 3e4059d5 be0ecfab be1bd013 3f74d49c", + "413520a0 420b64b4 41921efc c05b5dc1 4029a30c 401678e8 3de04541 3f000000 -> 3e519ec4 bee0a927 be91cfb8 3f7e59b3 bfe5b178 40762c98 401fc637 3de81f56", + "41380bc4 c1c94463 414649dc 40ba1f70 bfcf8424 c0299fe2 3f390b6d 3f000000 -> 3fb61a66 c027a579 c02e92f1 3d09ecb9 40109a20 3f875e20 bc81bf2b be8cb958", + "c22b966d 4246261a c217aae1 bf82a248 3f91128c c05d921e 3ebb7c1a 3f000000 -> bffbe4d3 403cca92 c0712475 3ef2cfa3 bf87afe1 3fcb6439 c001e544 bf616197", + "3ee01000 42130f8e c1428140 40bf1842 bfed2720 40828c1e 3e151a3c 3f000000 -> c000583a 3f59d55a bfed76d7 bf6cca17 c09c2c92 40048896 c0907a2e 3ec2983d", + "c145f42c c0bb08e8 415a04c4 3ecd5a00 3f852b68 3fe922e8 3f51d5d1 3f000000 -> bed83b5f bd89baca 3f6bba4c 3e9cbc6e be0b107a bcb127b4 3e979a44 bf73b5b3", + "4198fd2c c1b675db 421f0198 40a941f4 bfd07b28 be8ffaa0 3e77edc4 3f000000 -> c0828a2f 3f794475 3f83f80e 3ef09e78 400b00df bf04b6e7 bf0c8677 3f61f7dc", + "41426b58 c0c25688 bfda62e0 c07f5722 3f141cd0 c063c153 3ca7acc0 3f000000 -> 404111db 3f26356e 40827751 3e7d6520 bf453d4a be29cc5e bf8548a2 3f7809c6", + "c224254f 3fea7a80 c23aa004 406250b8 c01bc08c 40a1a282 3ddee173 3f000000 -> 3ea5b584 bff2a66e 405fb6c2 bf4065cc c038a012 40003379 bfd5b921 beb0bfe7", + "42405528 c19ca065 c1e29eda bfbf92c8 4088b056 40b22326 3e747ad6 3f000000 -> bf3d1192 bebb7f44 3f3f7d5d bf02f6bb 3fc3405a c05302c0 c0862d00 becac4b3", + "41f57dd8 42431146 c09bee40 4055a838 3fc39d50 409ad06a 3ec27477 3f000000 -> 4079617d 3fabe365 40a8fdd2 3ea3ab10 3fa843df 3ee7f4f5 3fe40c3c bf729161", + "41b2c214 c1dd58f3 c02544c0 c04f3926 40346d38 c0905c16 3f620363 3f000000 -> bfb7152d be4a31d4 c013843e bf4f2173 40582ab5 c02ff1ec 408cf24e bdfe21e6", + "c0e52d10 421e32c8 42040bfa 4064653c 3fd1b318 c08ff242 3e92c2e6 3f000000 -> 3fd3177a 3f94dcc5 c00c76c3 bed9a5fd bf6d6b6c 3fc3313d 3fdd4b2e befb2843", + "42294b0e 412484d4 41befe50 c021a9be 40314c70 4021ece8 3f35dd14 3f000000 -> c00d6ea3 4004b53a 400ba01d bd23a6f2 bf9460ec 3ed131ba 3d70ceb0 bf4c2887", + "423b1544 4190a20c 40d19768 3dcc3800 3e1ba600 c0beb4e7 3f508cbf 3f000000 -> bfc9acf4 3fdd15a5 be9e6d06 3f11bc01 3fb9246c 3f8f3841 c06379c9 3d2e42ec", + "c09ae0b8 c23b5550 c13113fc 40a19c44 c0196226 3fd81300 3ebb7d00 3f000000 -> 3f49278a bada5100 bfca8df6 be8e0490 c00bdedd bfb048b4 be6778bd 3e8e0a9c", + "c1a3ff64 40bda240 40ce6920 3f3f48f0 4063fd30 c052759e 3f0d6d4e 3f000000 -> 3fae6fa2 403c9b58 3dc42885 3f31d2b1 3c8aeb7f 3f7dcaa7 bfe535aa be1c1843", + "c1120be8 c1356da0 40f93db8 c05778e2 40821568 40ad9be4 3f6235ac 3f000000 -> 4048150c c001d8cb c0a22786 3ee7fc7e bfcaf663 3e8548d7 4031cd73 3f259945", + "c1383fb8 41aa0624 bf90aa00 4098411c c06c4c15 40021778 3f41782c 3f000000 -> c0acf6e7 406374a9 bfdcf47c bd15df43 bea0354c bbffb3e8 bea19208 3f58dcb2", + "40881408 422378c8 41b17ea8 c0554d28 c091a72f c0a5ce0a 3f7a0e60 3f000000 -> c0101919 bf9ae321 c03ce2bd 3e380a5c bf844d98 bf53e851 bf477512 bf1b3db8", + "42118818 c0bd7838 42169c9e bffb8898 be3ee040 40a1746c 3f20d3ae 3f000000 -> 3f2bc9d9 bf70eead c034deee 3c6efce6 3efc10da 3f136b94 3f1ef384 3e963716", + "c2369313 c2024dfc 41b5c988 40a6a7a0 be39d7a0 c0835858 3f0f19c1 3f000000 -> 40b6284d bf17c534 c0863005 be5ff5ca bfa35031 3e0811d7 3f709c9c bf79cd59", + "c1a4a724 42430b36 c1a8e6ee 40058f8c c0ac50ca 40a5829c 3d88b77f 3f000000 -> bed25962 bff6fcd2 3ff7c99a 3e0ff477 bf297e8c bea6924a 3f10e1d0 becfae02", + "c190b0c1 42204050 c23e410a c0968b08 40b4f904 3fa9a5f8 3f40a26f 3f000000 -> 40857c43 c0aa193a bf4d8505 bf02d7d7 401ec093 c04a4bb6 bef46bea 3f5c0959", + "4170ee00 42090dd0 c17ffe98 40074b8c c0836cc5 3f687328 3f0b7e09 3f000000 -> c0046046 402f536a bfc50270 3e9bd151 3fc00ae8 c000ac49 3f9ca688 3f04ec25", + "4232539e 41a11634 42194746 bfdfce54 c0b3d889 c03bda06 3eaebc57 3f000000 -> bef834a3 3d55f4e9 bf4a62e4 3f4ef17c bfb30196 c081e6eb bf9c933c be837555", + "407510d0 41d12bd8 4238ffde 401f5168 3e0c8260 c068e4c0 3e7e4cff 3f000000 -> 3fd784a2 bfd9df18 bfe8fe65 3ece32b4 3f159759 bfe183d1 bfbcece7 bf435b24", + "42286d90 c0d669b0 409abdb8 c0a55665 c08b50a6 409d7328 3f0b70f0 3f000000 -> 409f4eb2 3fd59c64 c0a1cfd2 3ebdbccc bf6a8504 c0345791 3fb43350 3f67637d", + "40808538 420cdda6 c1d96028 3e21ff00 c011ea23 409049de 3ec93506 3f000000 -> bea31741 bf95c98c 3fb2f070 3f5fbbe7 3f7413b0 bf87054b 408474c4 bda142aa", + "c186b798 c1346e60 c1c1bc24 c004c3f0 3f7cca10 c0ba966c 3eb25d32 3f000000 -> bf5ea3d1 bf17a595 bf07cc86 bf175dba 3f97106c bce874fc 40284694 be111a86", + "c1aaffc6 c116eaf8 c1904f01 c0b87841 4006df40 402d2a4c 3f47e57d 3f000000 -> 3fe2a698 bf7fd8cc bf80fca3 bf1c08c1 4085b579 c004ce71 c032ce1f 3f213d89", + "c210559c c22f40e9 c11f2ce0 bef6b0e0 bf849088 3d4b6300 3f3ac13d 3f000000 -> beaf70e5 bf105e10 be064829 bda9fd9a 3ce9cd31 3d40642e 3c32f36a bf7f1ddb", + "c11093ec 41e95144 412ac560 c0b81c1f 3ffe6cf8 c0bfec5a 3ecfb1e0 3f000000 -> 3fd42658 bf560945 40677723 be22be66 3f1f2328 3f0f1db6 401a756e 3ee47007", + "420bad72 4177dd68 420871a2 402a3910 bfb8db88 40ac257e 3e53a602 3f000000 -> 3da61c89 3f646b2a 403a8407 bd32a950 3e4a2167 bec97eba bf606b13 bf3749a3", + "c14939ec 41a3bbe0 c13f7e3c 40a4cad0 c073b7e8 409996fa 3f22837d 3f000000 -> 406fb95c c04ba0bd 40908492 bf0ed481 c0212a5a 4008e5eb c0425142 bf54738a", + "c23d1277 c1d90192 c2341210 beec0460 c07243fe 404aa258 3ecd4fb2 3f000000 -> 3ee93428 407a3e36 c04b7377 3e609676 bdd1b1b5 bf61040b 3f36f0e4 3f79c456", + "41e83d20 42031b24 c232aa82 40982f10 bfc5339c 3ffb17a4 3f6c05e1 3f000000 -> 40812bdf bfe484b2 3fac3cf5 bd1971e8 bf9264b0 beba5e27 bffaa777 bf3604c8", + "4118ef14 4171c258 c19abc2f 409ffe06 c0baaa12 40aa007e 3edfc5fa 3f000000 -> 3fa27adf bfc62049 3f5ad200 bf31592f c0664301 4085500c c05eefc1 be76e087", + "41c89bcc c0099220 c1a1a0a1 c01cb2fe 4054df54 3f63cfd0 3f43d27a 3f000000 -> bfbfd9c0 c00802d4 c00278c7 3e7948b7 bf86d4f0 bd7c57da 3f28b741 bd40d775", + "c1647b68 c23feba9 40447e20 c04e905c 3f9fff30 c09ba360 3ec3bf57 3f000000 -> be753bd3 3d9e4c0a bef57eb2 bf7eb18d 40172199 bf431be4 40974ace bdcea3c6", + "40c94b68 40b61b48 40bcad48 be685880 c04a7b0f c0be365d 3d713c40 3f000000 -> bf180eb6 3fef3945 4050470c bf5059aa bf156518 4077e618 40ad4a5a 3eefc5c3", + "4202dc38 41e63848 42022206 c0bce9fa c02540d7 c0255520 3f47559a 3f000000 -> c084d4fc bfadaba0 bf72e71b bddc8f95 3dda9c31 3fbc9547 3f9a20cf bf31ddcc", + "c23292a4 c22a8178 c2430002 c07e63c5 40af967c c0681e7e 3e8d9922 3f000000 -> c075f932 4021c599 bff901fa bf2674b0 40528333 c00a732d 3fd51bfd bf427ed1" + ] } ] } From 84ccf1f37a7c0d90fb2e8fa38dc1a99cec7a6f7c Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 14:15:33 +0200 Subject: [PATCH 11/13] CultMath design.md: the frustum enclosure check, the phacelle family's evaluator, sqrt on GLSL The parity section states the enclosure rule, restores that the evaluator concatenates CultMath.Phacelle.glsl for the phacelle family, and names CultLib's browser-pane run (follow-up gpu-snoise-parity) as that evaluator. The frustum-ball bound no longer assumes a correctly rounded GLSL sqrt: proven for C# and HLSL, measured on GLSL. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/docs/design.md | 46 +++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/cultmath/docs/design.md b/packages/cultmath/docs/design.md index 4d9558d7..607d9ce4 100644 --- a/packages/cultmath/docs/design.md +++ b/packages/cultmath/docs/design.md @@ -202,15 +202,32 @@ carry it. The Unity package ships neither GLSL file. Parity runs in two legs, each with one owner: HLSL against C# by the mirror test, bit for bit; GLSL against C# by the golden fixture, which records 256 seeded cases per function family as float32 bit patterns, evaluated by the -consumer on WebGL2 and read back. The families `pcg3d`, `pcg4d` and -`iv_frustum_ball` are marked exact; the other float families are ulp-bounded, -the bound measured on the device. `iv_exp` is in the fixture so the site can -measure WebGL2's `exp`, but its C# bits come from the platform's `exp` and -differ by OS: its tolerance is "ulp-bounded, platform exp", its entry names the -platform that generated it, and `GoldenFixtureMatchesCSharp` compares it case -by case within one ulp of the running platform, printing the largest distance. -Every other family is compared as text. Every fixture family is in -`CultMath.glsl`, so the parity run needs no `CultMath.Phacelle.glsl`. +consumer on WebGL2 and read back. The families `pcg3d` and `pcg4d` are marked +exact; the float families are ulp-bounded, the bound measured on the device. + +`iv_frustum_ball` is ulp-bounded, not exact: it calls `sqrt`, which GLSL ES +3.00 does not require to be correctly rounded, and WebGL2 compilers may +reassociate. On a GTX 1070 under ANGLE's D3D11 backend its radius differs from +C# by up to 2 ulp in 43 of 256 cases, sometimes smaller. What the march needs +is enclosure, so the family's fixture entry carries a `check` the consumer +applies to every case: from the case's arguments `(mx, my, z0, z1, fp, warp)`, +compute in double `zm = (z0 + z1) / 2`, the centre `c = (mx zm, my zm, zm)` +and the radius `r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp`, and +require GPU radius >= `r + |GPU centre - c|`. Only that fails the check; the +largest ulp distance is reported as for any ulp-bounded family. +`GoldenFixtureMatchesCSharp` applies the same check to C#'s own results. + +`iv_exp` and `phacelle` take their C# bits from the platform's `exp`, `sin` +and `cos`, which differ by OS: their tolerances name the platform functions +("ulp-bounded, platform exp" and "ulp-bounded, platform exp, sin, cos"), their +entries name the platform that generated them, and `GoldenFixtureMatchesCSharp` +compares them case by case within one ulp of the running platform, printing the +largest distance. Every other +family is compared as text. `phacelle` is in `CultMath.Phacelle.glsl`, so the +evaluator concatenates `CultMath.Phacelle.glsl` after `CultMath.glsl` for that +family, with normalization 0.5. The site does not vendor the MPL file and +skips the family; CultLib's own browser-pane WebGL2 run, under the follow-up +`gpu-snoise-parity`, evaluates it. ## Invariant 8: Value-and-Gradient Primitives @@ -497,9 +514,14 @@ two roundings (`z_m`, then the product), so the float centre is within axis length at `3u`, the product, `z1 footprintPerDepth`, the sum, `+ warp`), so the exact radius is at most `(1 + 7u)` times the float one; the widening rounds once more. `2^-20 = 16u` covers `8u (|c|_1 + radius)` twice over, and fma -contraction only removes roundings, so HLSL and GLSL compilers are covered by -the same bound. At the shipped scales (`|c|_1` near 600, `r` near 5) it adds -`6e-4`. The caller rotates and translates the centre into world space and scales +contraction only removes roundings. The axis count assumes a correctly rounded +`sqrt`, which IEEE gives C#. GLSL ES 3.00 does not: it inherits `sqrt`'s +precision from `inversesqrt`, and D3D-backed compilers may reassociate. So the +bound is proven for C# and HLSL on IEEE hardware, and on GLSL it is measured: +on a GTX 1070 under ANGLE's D3D11 backend the fixture's 256 cases keep a +minimum relative slack of `1.98e-6` (about `33u`), the same as C#'s. The +fixture's enclosure check is what measures it on each device. At the shipped +scales (`|c|_1` near 600, `r` near 5) the widening adds `6e-4`. The caller rotates and translates the centre into world space and scales centre and radius by its noise frequency; the rounding of that transform is the caller's. `NoiseBoundTests.TileBallEnclosesEveryRaySegment` checks 2,000 seeded tiles x 64 points of the r2 domain and 2,000 tiles x 8 corner points of each of From faff7998c3f8ef3cb59c9c2437fb8215f36c2575 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 14:35:48 +0200 Subject: [PATCH 12/13] CultMath GLSL fixture: C# evaluated on the committed arguments; phacelle's platform bound scaled; frustum check two-sided GoldenFixtureMatchesCSharp draws arguments only under CULTMATH_WRITE_GLSL=1: the draw calls MathF.Pow, whose bits differ by OS. Checking decodes each committed case's arguments and evaluates C# on them. phacelle is compared across platforms within 2^-20 max(|v|, 1) per component; iv_exp keeps one ulp. The iv_frustum_ball check gains the upper side r + d + 2^-19 (r + |c|_1) that NoiseBoundTests pins. Co-Authored-By: Claude Opus 5.5 --- .../tests/CultMath.Tests/GlslMirrorTests.cs | 154 +++++++++++------- .../CultMath.Tests/fixtures/glsl-parity.json | 4 +- 2 files changed, 101 insertions(+), 57 deletions(-) diff --git a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs index 96d74f7c..d920bdda 100644 --- a/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/GlslMirrorTests.cs @@ -111,42 +111,59 @@ public sealed class GlslMirrorTests [Fact] public void GoldenFixtureMatchesCSharp() { - var expected = GoldenFixture(); + // Arguments are drawn only here, when regenerating: Interval draws widths through MathF.Pow, whose + // bits differ by OS. Checking evaluates C# on the committed fixture's own arguments. if (Write) { + var random = new System.Random(Seed); Directory.CreateDirectory(Path.GetDirectoryName(FixturePath)!); - File.WriteAllText(FixturePath, expected); + File.WriteAllText(FixturePath, GoldenFixture((f, _) => Families[f].Arguments(random))); } - // Family by family: every family is compared as text, except those whose tolerance names the - // platform, whose results are compared case by case within one ulp. A family with an enclosure - // check must also pass it on C#'s own results, so the rule the WebGL2 consumer applies holds for - // the reference. var committed = JsonNode.Parse(File.ReadAllText(FixturePath))!.AsObject(); - var current = JsonNode.Parse(expected)!.AsObject(); var committedFamilies = committed["functions"]!.AsArray(); + Assert.Equal(Families.Length, committedFamilies.Count); + for (var f = 0; f < Families.Length; f++) + Assert.True(committedFamilies[f]!["cases"]!.AsArray().Count == Points, $"{Families[f].Glsl}: the fixture does not hold {Points} cases"); + var current = JsonNode.Parse(GoldenFixture((f, p) => + Arguments(Resolve(Families[f].Glsl), ((string)committedFamilies[f]!["cases"]![p]!).Split(" -> ")[0])))!.AsObject(); var currentFamilies = current["functions"]!.AsArray(); - Assert.Equal(currentFamilies.Count, committedFamilies.Count); - for (var f = 0; f < currentFamilies.Count; f++) + + // Family by family: every family is compared as text, except those whose C# bits come from the + // platform's libm, which are compared case by case within their family's platform bound. A family + // with a check must also pass it on C#'s own results, so the rule the WebGL2 consumer applies holds + // for the reference. + for (var f = 0; f < Families.Length; f++) { var want = currentFamilies[f]!.AsObject(); var have = committedFamilies[f]!.AsObject(); var name = (string)want["glsl"]!; Assert.Equal(name, (string?)have["glsl"]); Assert.Equal((string)want["tolerance"]!, (string?)have["tolerance"]); - if (((string)want["tolerance"]!).Contains(PlatformTolerance)) + Assert.Equal((string?)want["check"], (string?)have["check"]); + switch (Families[f].Platform) { - var ulps = MaxUlps(have["cases"]!.AsArray(), want["cases"]!.AsArray(), name); - output.WriteLine($"{name}: within {ulps} ulp of this platform's libm ({RuntimeInformation.OSDescription}); fixture generated on {have["platform"]}"); - Assert.True(ulps <= 1, $"{name}: {ulps} ulp from this platform's result, more than 1"); - } - else - { - Assert.True(JsonNode.DeepEquals(want, have), $"fixtures/glsl-parity.json family {name} is not C#'s current output (regenerate with CULTMATH_WRITE_GLSL=1)"); + case Platform.Ulp: + var ulps = MaxDistance(have["cases"]!.AsArray(), want["cases"]!.AsArray(), (x, y) => Math.Abs((long)Ordered(x) - Ordered(y))); + output.WriteLine($"{name}: within {ulps} ulp of this platform's libm ({RuntimeInformation.OSDescription}); fixture generated on {have["platform"]}"); + Assert.True(ulps <= 1, $"{name}: {ulps} ulp from this platform's result, more than 1"); + break; + case Platform.Scaled: + var scaled = MaxDistance(have["cases"]!.AsArray(), want["cases"]!.AsArray(), (x, y) => + { + double v = BitConverter.Int32BitsToSingle(x), w = BitConverter.Int32BitsToSingle(y); + return x == y ? 0.0 : Math.Abs(v - w) / Math.Max(Math.Abs(v), 1.0); + }); + output.WriteLine($"{name}: |diff| / max(|v|, 1) at most {scaled:R} from this platform's libm ({RuntimeInformation.OSDescription}); fixture generated on {have["platform"]}"); + Assert.True(scaled <= ScaledPlatformBound, $"{name}: {scaled:R} max(|v|, 1) from this platform's result, more than 2^-20"); + break; + default: + Assert.True(JsonNode.DeepEquals(want, have), $"fixtures/glsl-parity.json family {name} is not C#'s current output (regenerate with CULTMATH_WRITE_GLSL=1)"); + break; } if (want["check"] is not null) - AssertFrustumEnclosure(have["cases"]!.AsArray()); + AssertFrustumBall(want["cases"]!.AsArray()); } committed.Remove("functions"); @@ -154,27 +171,24 @@ public sealed class GlslMirrorTests Assert.True(JsonNode.DeepEquals(current, committed), "fixtures/glsl-parity.json header is not the generator's (regenerate with CULTMATH_WRITE_GLSL=1)"); } - // The largest distance in float32 ulps between two families' results; arguments must be identical. - private static long MaxUlps(JsonArray committed, JsonArray current, string name) + // The largest distance, component by component, between two families' results (committed first). + private static double MaxDistance(JsonArray committed, JsonArray current, Func distance) { - Assert.Equal(current.Count, committed.Count); - long max = 0; + var max = 0.0; for (var c = 0; c < current.Count; c++) { - var have = ((string)committed[c]!).Split(" -> "); - var want = ((string)current[c]!).Split(" -> "); - Assert.True(have[0] == want[0], $"{name} case {c}: arguments differ"); - var haveBits = have[1].Split(' ').Select(h => (int)Convert.ToUInt32(h, 16)).ToArray(); - var wantBits = want[1].Split(' ').Select(h => (int)Convert.ToUInt32(h, 16)).ToArray(); + var haveBits = ((string)committed[c]!).Split(" -> ")[1].Split(' ').Select(h => (int)Convert.ToUInt32(h, 16)).ToArray(); + var wantBits = ((string)current[c]!).Split(" -> ")[1].Split(' ').Select(h => (int)Convert.ToUInt32(h, 16)).ToArray(); Assert.Equal(wantBits.Length, haveBits.Length); - max = Math.Max(max, haveBits.Zip(wantBits, (x, y) => Math.Abs((long)Ordered(x) - Ordered(y))).Max()); + max = Math.Max(max, haveBits.Zip(wantBits, distance).Max()); } return max; } - // FrustumEnclosure applied to C#'s own results: every case's ball encloses the exact one. - private static void AssertFrustumEnclosure(JsonArray cases) + // FrustumBall applied to C#'s own results: every case's ball encloses the exact one and is no wider + // than its rounding widening allows. + private static void AssertFrustumBall(JsonArray cases) { foreach (var entry in cases) { @@ -185,11 +199,36 @@ public sealed class GlslMirrorTests var zm = (z0 + z1) / 2.0; var radius = (z1 - z0) / 2.0 * Math.Sqrt(mx * mx + my * my + 1.0) + z1 * footprint + warp; double dx = b[0] - mx * zm, dy = b[1] - my * zm, dz = b[2] - zm; - var gap = b[3] - (radius + Math.Sqrt(dx * dx + dy * dy + dz * dz)); - Assert.True(gap >= 0.0, $"iv_frustum_ball case {entry}: radius short of the exact ball by {-gap}"); + var reach = radius + Math.Sqrt(dx * dx + dy * dy + dz * dz); + var c1 = Math.Abs(mx * zm) + Math.Abs(my * zm) + Math.Abs(zm); + Assert.True(b[3] >= reach, $"iv_frustum_ball case {entry}: radius short of the exact ball by {reach - b[3]}"); + Assert.True(b[3] <= reach + Math.ScaleB(radius + c1, -19), $"iv_frustum_ball case {entry}: radius past the exact ball by {b[3] - reach}, more than 2^-19 (r + |c|_1)"); } } + // A committed case's arguments, decoded into the C# method's parameter types in Hex's field order. + private static object[] Arguments(MethodInfo method, string hex) + { + var scalars = new Queue(hex.Split(' ').Select(h => Convert.ToUInt32(h, 16))); + var arguments = method.GetParameters().Select(parameter => FromScalars(parameter.ParameterType, scalars)).ToArray(); + Assert.Empty(scalars); + return arguments; + } + + private static object FromScalars(Type type, Queue scalars) + { + if (type == typeof(float)) + return BitConverter.Int32BitsToSingle((int)scalars.Dequeue()); + if (type == typeof(int)) + return (int)scalars.Dequeue(); + if (type == typeof(uint)) + return scalars.Dequeue(); + var value = Activator.CreateInstance(type)!; + foreach (var field in type.GetFields().Where(f => !f.IsStatic)) + field.SetValue(value, FromScalars(field.FieldType, scalars)); + return value; + } + private static double[] Floats(string hex) => hex.Split(' ').Select(h => (double)BitConverter.Int32BitsToSingle((int)Convert.ToUInt32(h, 16))).ToArray(); @@ -201,7 +240,16 @@ public sealed class GlslMirrorTests private const int Seed = 20261002; private const int Points = 256; - private sealed record Family(string Glsl, string Tolerance, Func Arguments, string? Check = null); + // How GoldenFixtureMatchesCSharp compares a family whose C# bits come from the platform's libm (exp, + // sin, cos) and so differ by OS; such an entry records the platform that generated it. Every other + // family is compared as text. + private enum Platform { None, Ulp, Scaled } + + // Platform.Scaled: |diff| <= 2^-20 max(|v|, 1) per component. Ulps mean nothing near zero, where + // phacelle's sums of exp, sin and cos cancel; Windows differs from Linux by up to 3.6e-7 of it. + private const double ScaledPlatformBound = 9.5367431640625e-7; + + private sealed record Family(string Glsl, string Tolerance, Func Arguments, string? Check = null, Platform Platform = Platform.None); private static float Uniform(System.Random r, float lo, float hi) => lo + (hi - lo) * r.NextSingle(); private static float3 Point3(System.Random r) => new(Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f), Uniform(r, -50.0f, 50.0f)); @@ -214,19 +262,15 @@ public sealed class GlslMirrorTests return new float2(centre - width * 0.5f, centre + width * 0.5f); } - // A tolerance containing this names a family whose C# bits come from the platform's libm (exp, sin, - // cos) and so differ by OS: GoldenFixtureMatchesCSharp compares it within one ulp, and its entry - // records the platform. - private const string PlatformTolerance = "platform "; - // iv_frustum_ball's sqrt is not correctly rounded on WebGL2 and its compilers may reassociate, so its - // bits are not portable; what the march needs is enclosure. The consumer checks that in double from - // each case's arguments. It is written into the family's fixture entry, where the consumer reads it. - private const string FrustumEnclosure = - "enclosure: from the arguments (mx, my, z0, z1, fp, warp) compute in double zm = (z0 + z1) / 2, " + - "c = (mx zm, my zm, zm), r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp; every case must have " + - "GPU radius >= r + |GPU centre - c| (Euclidean). Report the largest ulp distance per component as for " + - "any ulp-bounded family; only enclosure fails the check."; + // bits are not portable; what the march needs is enclosure, and what culling needs is a ball no wider + // than its rounding widening. The consumer checks both in double from each case's arguments. It is + // written into the family's fixture entry, where the consumer reads it. + private const string FrustumBall = + "enclosure and tightness: from the arguments (mx, my, z0, z1, fp, warp) compute in double zm = (z0 + z1) / 2, " + + "c = (mx zm, my zm, zm), |c|_1 = |mx zm| + |my zm| + |zm|, r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp " + + "and d = |GPU centre - c| (Euclidean); every case must have r + d <= GPU radius <= r + d + 2^-19 (r + |c|_1). " + + "Report the largest ulp distance per component as for any ulp-bounded family; only the two bounds fail the check."; // A Phacelle stripe wave vector: each component in [-6, 6], about one stripe per cell. private static float3 Side(System.Random r) => new(Uniform(r, -6.0f, 6.0f), Uniform(r, -6.0f, 6.0f), Uniform(r, -6.0f, 6.0f)); @@ -268,15 +312,15 @@ public sealed class GlslMirrorTests var slope = new float2(Uniform(r, -1.0f, 1.0f), Uniform(r, -1.0f, 1.0f)); var z0 = Uniform(r, 0.1f, 100.0f); return new object[] { slope, z0, z0 + Uniform(r, 0.01f, 50.0f), Uniform(r, 0.0001f, 0.05f), Uniform(r, 0.0f, 2.0f) }; - }, FrustumEnclosure), - new("vec2 cultmath_iv_exp(vec2)", "ulp-bounded, " + PlatformTolerance + "exp", r => new object[] { Interval(r) }), - new("CultPhasor cultmath_phacelle(vec3, vec3, float, float)", "ulp-bounded, " + PlatformTolerance + "exp, sin, cos", - r => new object[] { Point3(r), Side(r), Uniform(r, 0.0f, 1.0f), 0.5f }), + }, FrustumBall), + new("vec2 cultmath_iv_exp(vec2)", "ulp-bounded, platform exp", r => new object[] { Interval(r) }, Platform: Platform.Ulp), + new("CultPhasor cultmath_phacelle(vec3, vec3, float, float)", "ulp-bounded, platform exp, sin, cos; across platforms |diff| <= 2^-20 max(|v|, 1)", + r => new object[] { Point3(r), Side(r), Uniform(r, 0.0f, 1.0f), 0.5f }, Platform: Platform.Scaled), }; - private static string GoldenFixture() + // The fixture text, each case's arguments given by family and point index. + private static string GoldenFixture(Func arguments) { - var random = new System.Random(Seed); var json = new StringBuilder(); json.Append("{\n"); json.Append(" \"generator\": \"GlslMirrorTests.GoldenFixtureMatchesCSharp (packages/cultmath/tests/CultMath.Tests); regenerate with CULTMATH_WRITE_GLSL=1\",\n"); @@ -293,14 +337,14 @@ public sealed class GlslMirrorTests json.Append($" \"tolerance\": \"{family.Tolerance}\",\n"); if (family.Check is not null) json.Append($" \"check\": \"{family.Check}\",\n"); - if (family.Tolerance.Contains(PlatformTolerance)) + if (family.Platform != Platform.None) json.Append($" \"platform\": \"{RuntimeInformation.OSDescription}; {RuntimeInformation.FrameworkDescription}\",\n"); json.Append(" \"cases\": [\n"); for (var p = 0; p < Points; p++) { - var arguments = family.Arguments(random); - var result = method.Invoke(null, arguments)!; - json.Append(" \"").Append(Hex(arguments)).Append(" -> ").Append(Hex(new[] { result })).Append('"'); + var values = arguments(f, p); + var result = method.Invoke(null, values)!; + json.Append(" \"").Append(Hex(values)).Append(" -> ").Append(Hex(new[] { result })).Append('"'); json.Append(p + 1 < Points ? ",\n" : "\n"); } diff --git a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json index c99a4600..3a945d94 100644 --- a/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json +++ b/packages/cultmath/tests/CultMath.Tests/fixtures/glsl-parity.json @@ -6557,7 +6557,7 @@ { "glsl": "vec4 cultmath_iv_frustum_ball(vec2, float, float, float, float)", "tolerance": "ulp-bounded", - "check": "enclosure: from the arguments (mx, my, z0, z1, fp, warp) compute in double zm = (z0 + z1) / 2, c = (mx zm, my zm, zm), r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp; every case must have GPU radius >= r + |GPU centre - c| (Euclidean). Report the largest ulp distance per component as for any ulp-bounded family; only enclosure fails the check.", + "check": "enclosure and tightness: from the arguments (mx, my, z0, z1, fp, warp) compute in double zm = (z0 + z1) / 2, c = (mx zm, my zm, zm), |c|_1 = |mx zm| + |my zm| + |zm|, r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp and d = |GPU centre - c| (Euclidean); every case must have r + d <= GPU radius <= r + d + 2^-19 (r + |c|_1). Report the largest ulp distance per component as for any ulp-bounded family; only the two bounds fail the check.", "cases": [ "3eba7b90 3eb7145c 427992e9 42ba552a 3c779789 3f90a589 -> 41e2a26a 41de7fa1 429b8f4f 419e80d6", "3f73f64c 3f0c1560 4222d6fe 4297c95b 3d2b135d 3f4911fc -> 425e3d89 41ff38c0 426934da 41f0be8c", @@ -7082,7 +7082,7 @@ }, { "glsl": "CultPhasor cultmath_phacelle(vec3, vec3, float, float)", - "tolerance": "ulp-bounded, platform exp, sin, cos", + "tolerance": "ulp-bounded, platform exp, sin, cos; across platforms |diff| <= 2^-20 max(|v|, 1)", "platform": "Ubuntu 24.04.5 LTS; .NET 10.0.12", "cases": [ "c01d8630 41b2cd8c 41ea274c bfa19894 40aeb6ce 40918978 3e9be843 3f000000 -> bf74d9fb 3fb71956 bf35fe4e 3f21280a c01277e2 403b5fe4 40464bbd bd5b4455", From 20fafeb2f796607210f74af367ccf7c86eec367c Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 3 Oct 2026 14:35:48 +0200 Subject: [PATCH 13/13] CultMath design.md: the fixture's argument rule, phacelle's scaled bound, the two-sided frustum check, phacelle's evaluator gpu-snoise-parity is Asura's FXC and Unity readback of snoise, not a GLSL run; phacelle's GLSL evaluator is the cultmath-tapes follow-up glsl-browser-parity-run. Co-Authored-By: Claude Opus 5.5 --- packages/cultmath/docs/design.md | 50 +++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/packages/cultmath/docs/design.md b/packages/cultmath/docs/design.md index 607d9ce4..652d3604 100644 --- a/packages/cultmath/docs/design.md +++ b/packages/cultmath/docs/design.md @@ -209,25 +209,41 @@ exact; the float families are ulp-bounded, the bound measured on the device. 3.00 does not require to be correctly rounded, and WebGL2 compilers may reassociate. On a GTX 1070 under ANGLE's D3D11 backend its radius differs from C# by up to 2 ulp in 43 of 256 cases, sometimes smaller. What the march needs -is enclosure, so the family's fixture entry carries a `check` the consumer -applies to every case: from the case's arguments `(mx, my, z0, z1, fp, warp)`, -compute in double `zm = (z0 + z1) / 2`, the centre `c = (mx zm, my zm, zm)` -and the radius `r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp`, and -require GPU radius >= `r + |GPU centre - c|`. Only that fails the check; the -largest ulp distance is reported as for any ulp-bounded family. +is enclosure, and what culling needs is a ball no wider than its rounding +widening, so the family's fixture entry carries a `check` the consumer applies +to every case: from the case's arguments `(mx, my, z0, z1, fp, warp)`, compute +in double `zm = (z0 + z1) / 2`, the centre `c = (mx zm, my zm, zm)`, its +`|c|_1 = |mx zm| + |my zm| + |zm|`, the radius +`r = (z1 - z0) / 2 sqrt(mx^2 + my^2 + 1) + z1 fp + warp` and +`d = |GPU centre - c|`, and require +`r + d <= GPU radius <= r + d + 2^-19 (r + |c|_1)`. The lower side is +enclosure; the upper side is the bound `NoiseBoundTests` pins in C#, so a +lowering that inflates the ball fails too. Only those two bounds fail the +check; the largest ulp distance is reported as for any ulp-bounded family. `GoldenFixtureMatchesCSharp` applies the same check to C#'s own results. -`iv_exp` and `phacelle` take their C# bits from the platform's `exp`, `sin` -and `cos`, which differ by OS: their tolerances name the platform functions -("ulp-bounded, platform exp" and "ulp-bounded, platform exp, sin, cos"), their -entries name the platform that generated them, and `GoldenFixtureMatchesCSharp` -compares them case by case within one ulp of the running platform, printing the -largest distance. Every other -family is compared as text. `phacelle` is in `CultMath.Phacelle.glsl`, so the -evaluator concatenates `CultMath.Phacelle.glsl` after `CultMath.glsl` for that -family, with normalization 0.5. The site does not vendor the MPL file and -skips the family; CultLib's own browser-pane WebGL2 run, under the follow-up -`gpu-snoise-parity`, evaluates it. +`GoldenFixtureMatchesCSharp` evaluates C# on the committed fixture's own +arguments. Arguments are drawn only when the fixture is regenerated +(`CULTMATH_WRITE_GLSL=1`), because the draw itself calls `MathF.Pow`, whose +bits differ by OS. `iv_exp` and `phacelle` take their C# results from the +platform's `exp`, `sin` and `cos`, which also differ by OS, so their entries +name the platform that generated them and the test compares them case by case +against the running platform, printing the largest distance. `iv_exp` +("ulp-bounded, platform exp") must agree within one ulp. `phacelle` +("ulp-bounded, platform exp, sin, cos; across platforms |diff| <= 2^-20 +max(|v|, 1)") must agree within `2^-20 max(|v|, 1)` per component, `v` being +the fixture's value: its sums of `exp`, `sin` and `cos` cancel near zero, where +ulps mean nothing, and Windows differs from the Linux fixture by up to +`3.6e-7 max(|v|, 1)`. Every other family is compared as text. `phacelle` is in +`CultMath.Phacelle.glsl`, so the evaluator concatenates +`CultMath.Phacelle.glsl` after `CultMath.glsl` for that family, with +normalization 0.5. The site does not vendor the MPL file and skips the family. +Its evaluator is the cultmath-tapes follow-up `glsl-browser-parity-run`, owned +by the next CultMath parity cut: a repeatable CultLib WebGL2 run of every +fixture family, `phacelle` included. Until it lands, the one GLSL evaluation of +`phacelle` is a single probe (GTX 1070, ANGLE D3D11: within `3.1e-6 max(|v|, 1)` +of C#). Asura's `gpu-snoise-parity` is a different check, an FXC and Unity +readback of `snoise`, and evaluates no GLSL. ## Invariant 8: Value-and-Gradient Primitives