#version 450 core

#extension GL_EXT_shader_8bit_storage : enable

struct S
{
    int8_t  x;
    i8vec2    y;
    i8vec3    z;
};

layout(column_major, std140) uniform B1
{
    int8_t  a;
    i8vec2    b;
    i8vec3    c;
    int8_t  d[2];
    S          g;
    S          h[2];
    int        j;
} b1;

layout(row_major, std430) buffer B2
{
    int8_t  o;
    i8vec2    p;
    i8vec3    q;
    int8_t  r[2];
    S          u;
    S          v[2];
    i8vec2    x[100];
    int8_t  w[];
} b2;

layout(row_major, std140) uniform B5
{
    int8_t  o;
    i8vec2    p;
    i8vec3    q;
    int8_t  r[2];
    S          u;
    S          v[2];
    i8vec2    x[100];
    int8_t  w[100];
} b5;

struct S2 {
    mat4x4 x;
    int8_t y;
    int z;
};

struct S3 {
    S2 x;
};

layout(row_major, std430) buffer B3
{
    S2 x;
} b3;

layout(column_major, std430) buffer B4
{
    S2 x;
    S3 y;
} b4;

void main()
{
    b2.o = b1.a;
    b2.p = i8vec2(ivec3(b2.q).xy);
    b2.p = i8vec2(ivec3(b5.q).xy);
    b2.r[0] = b2.r[0];
    b2.r[1] = b5.r[1];
    b2.p = b2.p;
    int x0 = int(b1.a);
    ivec4 x1 = ivec4(b1.a, b2.p, 1);
    b4.x.x = b3.x.x;
    b2.o = int8_t(ivec2(b2.p).x);
    b2.p = b2.v[1].y;
    ivec3 v3 = ivec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);
    ivec3 u3 = ivec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);
    b2.x[0] = b2.x[0];
    b2.x[1] = b5.x[1];
    b2.p.x = b1.a;
    b2.o = b2.p.x;
    b2.p = i8vec2(ivec2(1, 2));
    b2.o = int8_t(3);
}

