struct Inner {
  int x;
};
struct tint_padded_array_element {
  Inner el;
};

float2x3 tint_symbol_7(uint4 buffer[13], uint offset) {
  const uint scalar_offset = ((offset + 0u)) / 4;
  const uint scalar_offset_1 = ((offset + 16u)) / 4;
  return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
}

float3x2 tint_symbol_9(uint4 buffer[13], uint offset) {
  const uint scalar_offset_2 = ((offset + 0u)) / 4;
  uint4 ubo_load = buffer[scalar_offset_2 / 4];
  const uint scalar_offset_3 = ((offset + 8u)) / 4;
  uint4 ubo_load_1 = buffer[scalar_offset_3 / 4];
  const uint scalar_offset_4 = ((offset + 16u)) / 4;
  uint4 ubo_load_2 = buffer[scalar_offset_4 / 4];
  return float3x2(asfloat(((scalar_offset_2 & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy)), asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy)));
}

Inner tint_symbol_10(uint4 buffer[13], uint offset) {
  const uint scalar_offset_5 = ((offset + 0u)) / 4;
  const Inner tint_symbol_12 = {asint(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4])};
  return tint_symbol_12;
}

typedef tint_padded_array_element tint_symbol_11_ret[4];
tint_symbol_11_ret tint_symbol_11(uint4 buffer[13], uint offset) {
  const tint_padded_array_element tint_symbol_13[4] = {{tint_symbol_10(buffer, (offset + 0u))}, {tint_symbol_10(buffer, (offset + 16u))}, {tint_symbol_10(buffer, (offset + 32u))}, {tint_symbol_10(buffer, (offset + 48u))}};
  return tint_symbol_13;
}

cbuffer cbuffer_s : register(b0, space0) {
  uint4 s[13];
};

[numthreads(1, 1, 1)]
void main() {
  const int3 a = asint(s[0].xyz);
  const int b = asint(s[0].w);
  const uint3 c = s[1].xyz;
  const uint d = s[1].w;
  const float3 e = asfloat(s[2].xyz);
  const float f = asfloat(s[2].w);
  const int2 g = asint(s[3].xy);
  const int2 h = asint(s[3].zw);
  const float2x3 i = tint_symbol_7(s, 64u);
  const float3x2 j = tint_symbol_9(s, 96u);
  const Inner k = tint_symbol_10(s, 128u);
  const tint_padded_array_element l[4] = tint_symbol_11(s, 144u);
  return;
}
