#version 400

uniform bl {
    uniform mat4 m4;
    uniform mat3 m3;
} bName;

in vec3 v3;

vec3 xf(mat3 m, vec3 v)
{
    return v * m;
}

mat3 Mat3(mat4 m)
{
	return mat3(m[0].xyz, m[1].xyz, m[2].xyz);
}

vec3 mxv(mat4 m4, vec3 v)
{
	return v * Mat3(m4);
}

void main()
{
    gl_Position = vec4(mxv(bName.m4, v3) + xf(bName.m3, v3), 1.0);
}