#define iChannel0 inputImageTexture
#define texture(a,b) texture2D(a,fract(b))
#define fragColor gl_FragColor

precision highp float;

varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;

 const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);

void main()
{
    highp vec2 uv = textureCoordinate;

    highp vec2 center = vec2(0.5, 0.4);

    float l = length(uv - center);

    float c = (l - 0.3) * 120.0;
    c = max(c, 0.0);

    fragColor = vec4(vec3(0.0), 1.0);
    int samples = 20;
    for (int i = 0; i < samples; i++)
    {
        float q = float(i)/float(samples) * c;
        highp vec2 offset = (center - uv) * q * 0.0025;
        fragColor.r += texture2D(iChannel0, uv - offset * 0.5).r / float(samples);
        fragColor.g += texture2D(iChannel0, uv + offset * 0.5).g / float(samples);
        fragColor.b += texture2D(iChannel0, uv + offset * 1.2).b / float(samples);
    }
}