#version 100

#extension GL_OES_standard_derivatives : require
precision mediump float;
precision mediump sampler2D;
uniform sampler2D uTextureSampler_0_Stage0;
varying highp vec2 vTextureCoords_Stage0;
varying highp float vTexIndex_Stage0;
varying highp vec2 vIntTextureCoords_Stage0;
varying mediump vec4 vinColor_Stage0;
void main() {
    mediump vec4 outputColor_Stage0;
    mediump vec4 outputCoverage_Stage0;
    {
        outputColor_Stage0 = vinColor_Stage0;
        highp vec2 uv = vTextureCoords_Stage0;
        mediump vec4 texColor;
        {
            texColor = texture2D(uTextureSampler_0_Stage0, uv).wwww;
        }
        mediump float distance = 7.96875 * (texColor.x - 0.50196081399917603);
        mediump float afwidth;
        mediump vec2 dist_grad = vec2(dFdx(distance), -dFdy(distance));
        mediump float dg_len2 = dot(dist_grad, dist_grad);
        if (dg_len2 < 9.9999997473787516e-05) {
            dist_grad = vec2(0.70709997415542603, 0.70709997415542603);
        } else {
            dist_grad = dist_grad * inversesqrt(dg_len2);
        }
        mediump vec2 Jdx = dFdx(vIntTextureCoords_Stage0);
        mediump vec2 Jdy = -dFdy(vIntTextureCoords_Stage0);
        mediump vec2 grad = vec2(dist_grad.x * Jdx.x + dist_grad.y * Jdy.x, dist_grad.x * Jdx.y + dist_grad.y * Jdy.y);
        afwidth = 0.64999997615814209 * length(grad);
        mediump float val = smoothstep(-afwidth, afwidth, distance);
        outputCoverage_Stage0 = vec4(val);
    }
    {
        gl_FragColor = outputColor_Stage0 * outputCoverage_Stage0;
    }
}
