//Shadows
// ---- Created with 3Dmigoto v1.2.56 on Wed May 24 18:33:02 2017

cbuffer _Globals : register(b0)
{
  float4 VPtoRTScaleBias : packoffset(c0);
  float4 ShadowProperties : packoffset(c1);
  float4 LightProperties : packoffset(c2);
  float4 ShadowFarPlanes : packoffset(c3);
  float4 ShadowFrustumWidths : packoffset(c4);
  row_major float4x4 ViewMatrix[5] : packoffset(c5);
  row_major float4x4 ProjectionMatrix[4] : packoffset(c25);
}

cbuffer PerView : register(b12)
{
  row_major float4x4 global_View : packoffset(c0);
  row_major float4x4 global_Projection : packoffset(c4);
  row_major float4x4 global_ViewProjection : packoffset(c8);
  float4 global_ViewPos : packoffset(c12);
  float4 global_ViewInfo : packoffset(c13);
  float4 global_ScaleAndBias : packoffset(c14);
}

SamplerState PointSampler_s : register(s0);
SamplerComparisonState ShadowSampler_s : register(s1);
Texture2D<float4> LinearDepth : register(t0);
Texture2D<float4> Shadow : register(t1);


// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);

#include <ShaderFixes/matrix.hlsl>

void main( 
  float4 v0 : SV_Position0,
  float3 v1 : TexCoord0,
  float3 v2 : TexCoord1,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xy = (int2)v0.xy;
  r0.zw = float2(0,0);
  r0.x = LinearDepth.Load(r0.xyz).x;
  r0.xyz = r0.xxx * v1.xyz + global_ViewPos.xyz;
  r1.x = ShadowProperties.x * ShadowProperties.y;
  r1.x = (int)r1.x;
  r1.y = cmp(0 < (int)r1.x);
  
//CORRECT WORLD COORD
float4 s = StereoParams.Load(0);
float4 r20, r21;
r0.w = 1;
r21 = mul(global_ViewProjection, r0);  
r21.x -= s.x * (r21.w - s.y); 
r0 = mul(inverse(global_ViewProjection), r21);
  
  if (r1.y != 0) {
    r0.w = 1;
    r2.x = dot(ProjectionMatrix[0]._m00_m01_m02_m03, r0.xyzw);
    r2.y = dot(ProjectionMatrix[0]._m10_m11_m12_m13, r0.xyzw);
    r2.z = dot(ProjectionMatrix[0]._m20_m21_m22_m23, r0.xyzw);
    r1.z = dot(ProjectionMatrix[0]._m30_m31_m32_m33, r0.xyzw);
    r2.xyz = r2.xyz / r1.zzz;
    r3.xyzw = float4(2,2,2,2) / ShadowProperties.xyxy;
    r1.zw = float2(0.5,0.5) * r3.zw;
    r2.w = ShadowFrustumWidths.x * LightProperties.z;
    r2.w = 0.5 * r2.w;
    r4.xy = saturate(r2.xy / r1.zw);
    r4.xy = r4.xy * float2(2,2) + float2(-1,-1);
    r4.xy = float2(1,1) + -abs(r4.xy);
    r4.xy = saturate(r4.xy / LightProperties.zz);
    r4.z = saturate(1 + -r2.z);
    r4.z = ShadowFarPlanes.x * r4.z;
    r2.w = saturate(r4.z / r2.w);
    r4.x = r4.x * r4.y;
    r4.y = r4.x * r2.w;
    r4.z = cmp(0 < r4.y);
    if (r4.z != 0) {
      sincos(LightProperties.x, r5.x, r6.x);
      r4.w = r5.x / r6.x;
      r5.x = LightProperties.y * r4.w;
      r5.y = r5.x / ShadowFrustumWidths.x;
      r6.xyzw = r5.yyyy / ShadowProperties.xyxy;
      r7.xyzw = ShadowProperties.xyxy * ShadowProperties.zzzz;
      r8.xyzw = float4(1,1,1,1) / r7.zwzw;
      r7.xyzw = float4(10,10,0.5,0.5) / r7.xyzw;
      r6.xyzw = max(r8.xyzw, r6.xyzw);
      r6.xyzw = min(r6.xyzw, r7.xyxy);
      r9.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r2.xyxy;
      r10.xyzw = r3.zwzw * float4(0.5,0.5,0.5,0.5) + -r7.zwzw;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r5.z = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r5.w = LightProperties.w / ShadowFarPlanes.x;
      r5.w = -r5.w + r2.z;
      r9.x = cmp(r5.z < r5.w);
      r5.y = 1;
      r5.yz = r9.xx ? r5.yz : 0;
      r9.y = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.z = cmp(r9.y < r5.w);
      r11.y = r9.y + r5.z;
      r11.x = r9.x ? 2 : 1;
      r5.yz = r9.zz ? r11.xy : r5.yz;
      r9.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r2.xyxy;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r2.xyxy;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r2.xyxy;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r2.xyxy;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r2.xyxy;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r2.xyxy;
      r9.xyzw = max(r9.xyzw, r7.zwzw);
      r9.xyzw = min(r9.xyzw, r10.xyzw);
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.xy, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r9.x = Shadow.SampleLevel(PointSampler_s, r9.zw, 0).x;
      r9.y = cmp(r9.x < r5.w);
      r11.y = r9.x + r5.z;
      r11.x = 1 + r5.y;
      r5.yz = r9.yy ? r11.xy : r5.yz;
      r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r2.xyxy;
      r6.xyzw = max(r6.xyzw, r7.zwzw);
      r6.xyzw = min(r6.xyzw, r10.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r5.w);
      r9.y = r6.x + r5.z;
      r9.x = 1 + r5.y;
      r5.yz = r6.yy ? r9.xy : r5.yz;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r5.w);
      r9.y = r6.x + r5.z;
      r9.x = 1 + r5.y;
      r5.yz = r6.yy ? r9.xy : r5.yz;
      r6.x = max(1, r5.y);
      r5.z = r5.z / r6.x;
      r5.y = cmp(r5.y != 0.000000);
      if (r5.y != 0) {
        r2.z = -r5.z + r2.z;
        r2.z = ShadowFarPlanes.x * r2.z;
        r2.z = dot(r4.ww, r2.zz);
        r2.z = r2.z / ShadowFrustumWidths.x;
        r6.xyzw = r2.zzzz / ShadowProperties.xyxy;
        r6.xyzw = max(r6.xyzw, r8.xyzw);
        r6.xyzw = min(r6.xyzw, r7.xyxy);
        r9.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r2.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r9.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r2.z = r5.y + r2.z;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r9.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r2.z = r5.y + r2.z;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r9.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r2.z = r5.y + r2.z;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r9.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r2.z = r5.y + r2.z;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r9.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r2.z = r5.y + r2.z;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r9.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r2.xyxy;
        r9.xyzw = max(r9.xyzw, r7.zwzw);
        r9.xyzw = min(r9.xyzw, r10.xyzw);
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.w).x;
        r2.z = r5.y + r2.z;
        r5.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.w).x;
        r2.z = r5.y + r2.z;
        r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r2.xyxy;
        r6.xyzw = max(r6.xyzw, r7.zwzw);
        r6.xyzw = min(r6.xyzw, r10.xyzw);
        r2.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r5.w).x;
        r2.x = r2.z + r2.x;
        r2.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r5.w).x;
        r2.x = r2.x + r2.y;
        r2.x = 0.0625 * r2.x;
      } else {
        r2.x = 1;
      }
      r2.y = r2.x * r4.y;
      r2.z = cmp(r4.y < 1);
      r5.y = (int)r1.x + -1;
      r5.y = cmp(0 < (int)r5.y);
      r2.z = r2.z ? r5.y : 0;
      if (r2.z != 0) {
        r6.x = dot(ProjectionMatrix[1]._m00_m01_m02_m03, r0.xyzw);
        r6.y = dot(ProjectionMatrix[1]._m10_m11_m12_m13, r0.xyzw);
        r6.z = dot(ProjectionMatrix[1]._m20_m21_m22_m23, r0.xyzw);
        r2.z = dot(ProjectionMatrix[1]._m30_m31_m32_m33, r0.xyzw);
        r5.yzw = r6.xyz / r2.zzz;
        r2.z = ShadowFrustumWidths.y * LightProperties.z;
        r2.z = 0.5 * r2.z;
        r6.xy = -r3.xy * float2(0,0.5) + r5.yz;
        r1.zw = saturate(r6.xy / r1.zw);
        r1.zw = r1.zw * float2(2,2) + float2(-1,-1);
        r1.zw = float2(1,1) + -abs(r1.zw);
        r1.zw = saturate(r1.zw / LightProperties.zz);
        r6.x = saturate(1 + -r5.w);
        r6.x = ShadowFarPlanes.y * r6.x;
        r2.z = saturate(r6.x / r2.z);
        r1.z = r1.z * r1.w;
        r1.z = r1.z * r2.z;
        r1.z = cmp(0 < r1.z);
        if (r1.z != 0) {
          r1.z = -r4.x * r2.w + 1;
          r1.w = ShadowFrustumWidths.y / ShadowFrustumWidths.x;
          r2.z = r5.x / ShadowFrustumWidths.y;
          r6.xyzw = r2.zzzz / ShadowProperties.xyxy;
          r8.xyzw = r8.xyzw / r1.wwww;
          r9.xyzw = r7.xyxy / r1.wwww;
          r6.xyzw = max(r8.xyzw, r6.xyzw);
          r6.xyzw = min(r6.xyzw, r9.xyzw);
          r10.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r5.yzyz;
          r11.xyzw = r3.xyxy * float4(0,0.5,0,0.5) + r7.zwzw;
          r3.xyzw = r3.zwzw * float4(0.5,1,0.5,1) + -r7.zwzw;
          r7.xyzw = max(r11.xyzw, r10.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.x = LightProperties.w / ShadowFarPlanes.y;
          r1.w = -r4.x * r1.w + r5.w;
          r4.x = cmp(r2.w < r1.w);
          r2.z = 1;
          r2.zw = r4.xx ? r2.zw : 0;
          r5.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r7.x = cmp(r5.x < r1.w);
          r10.y = r5.x + r2.w;
          r10.x = r4.x ? 2 : 1;
          r2.zw = r7.xx ? r10.xy : r2.zw;
          r7.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r5.yzyz;
          r7.xyzw = max(r7.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r7.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r5.yzyz;
          r7.xyzw = max(r7.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r7.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r5.yzyz;
          r7.xyzw = max(r7.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r7.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r5.yzyz;
          r7.xyzw = max(r7.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r7.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r5.yzyz;
          r7.xyzw = max(r7.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r7.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r5.yzyz;
          r7.xyzw = max(r7.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r7.y = r4.x + r2.w;
          r7.x = 1 + r2.z;
          r2.zw = r5.xx ? r7.xy : r2.zw;
          r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r5.yzyz;
          r6.xyzw = max(r6.xyzw, r11.xyzw);
          r6.xyzw = min(r6.xyzw, r3.xyzw);
          r4.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r6.y = r4.x + r2.w;
          r6.x = 1 + r2.z;
          r2.zw = r5.xx ? r6.xy : r2.zw;
          r4.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
          r5.x = cmp(r4.x < r1.w);
          r6.y = r4.x + r2.w;
          r6.x = 1 + r2.z;
          r2.zw = r5.xx ? r6.xy : r2.zw;
          r4.x = max(1, r2.z);
          r2.w = r2.w / r4.x;
          r2.z = cmp(r2.z != 0.000000);
          if (r2.z != 0) {
            r2.z = r5.w + -r2.w;
            r2.z = ShadowFarPlanes.y * r2.z;
            r2.z = dot(r4.ww, r2.zz);
            r2.z = r2.z / ShadowFrustumWidths.y;
            r6.xyzw = r2.zzzz / ShadowProperties.xyxy;
            r6.xyzw = max(r6.xyzw, r8.xyzw);
            r6.xyzw = min(r6.xyzw, r9.xyzw);
            r7.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r7.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r7.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r7.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r7.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r7.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r7.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r5.yzyz;
            r7.xyzw = max(r7.xyzw, r11.xyzw);
            r7.xyzw = min(r7.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r7.zw, r1.w).x;
            r2.z = r2.z + r2.w;
            r5.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r5.yzyz;
            r5.xyzw = max(r5.xyzw, r11.xyzw);
            r3.xyzw = min(r5.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.xy, r1.w).x;
            r2.z = r2.z + r2.w;
            r1.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.zw, r1.w).x;
            r1.w = r2.z + r1.w;
            r1.w = 0.0625 * r1.w;
          } else {
            r1.w = 1;
          }
          r2.y = r1.z * r1.w + r2.y;
        }
      } else {
        r1.z = r2.x * r4.y + -r4.y;
        r2.y = 1 + r1.z;
      }
    } else {
      r2.y = 1;
    }
    r1.z = r4.z ? 0 : 1;
  } else {
    r2.y = 1;
    r1.z = 0;
    r4.z = -1;
  }
  r1.w = ~(int)r4.z;
  r1.y = r1.y ? r1.w : 0;
  r1.w = cmp((int)r1.z < (int)r1.x);
  r1.y = r1.w ? r1.y : 0;
  if (r1.y != 0) {
    r0.w = 1;
    r3.x = dot(ProjectionMatrix[1]._m00_m01_m02_m03, r0.xyzw);
    r3.y = dot(ProjectionMatrix[1]._m10_m11_m12_m13, r0.xyzw);
    r3.z = dot(ProjectionMatrix[1]._m20_m21_m22_m23, r0.xyzw);
    r1.w = dot(ProjectionMatrix[1]._m30_m31_m32_m33, r0.xyzw);
    r2.xzw = r3.xyz / r1.www;
    r3.xyzw = float4(2,2,2,2) / ShadowProperties.xyxy;
    r4.xy = float2(0.5,0.5) * r3.wz;
    r1.w = ShadowFrustumWidths.y * LightProperties.z;
    r1.w = 0.5 * r1.w;
    r4.zw = -r3.zw * float2(0,0.5) + r2.xz;
    r4.zw = saturate(r4.zw / r4.yx);
    r4.zw = r4.zw * float2(2,2) + float2(-1,-1);
    r4.zw = float2(1,1) + -abs(r4.zw);
    r4.zw = saturate(r4.zw / LightProperties.zz);
    r5.x = saturate(1 + -r2.w);
    r5.x = ShadowFarPlanes.y * r5.x;
    r1.w = saturate(r5.x / r1.w);
    r4.z = r4.z * r4.w;
    r4.w = r4.z * r1.w;
    r5.x = cmp(0 < r4.w);
    if (r5.x != 0) {
      r5.y = ShadowFrustumWidths.y / ShadowFrustumWidths.x;
      sincos(LightProperties.x, r6.x, r7.x);
      r5.z = r6.x / r7.x;
      r5.w = LightProperties.y * r5.z;
      r6.x = r5.w / ShadowFrustumWidths.y;
      r6.xyzw = r6.xxxx / ShadowProperties.xyxy;
      r7.xyzw = ShadowProperties.xyxy * ShadowProperties.zzzz;
      r8.xyzw = float4(1,1,1,1) / r7.zwzw;
      r9.xyzw = r8.zwzw / r5.yyyy;
      r7.xyzw = float4(10,10,0.5,0.5) / r7.xyzw;
      r10.xyzw = r7.xyxy / r5.yyyy;
      r6.xyzw = max(r9.xyzw, r6.xyzw);
      r6.xyzw = min(r6.xyzw, r10.xyzw);
      r11.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r2.xzxz;
      r12.xyzw = r3.zwzw * float4(0,0.5,0,0.5) + r7.zwzw;
      r13.xyzw = r3.zwzw * float4(0.5,1,0.5,1) + -r7.zwzw;
      r11.xyzw = max(r12.xyzw, r11.xyzw);
      r11.xyzw = min(r11.xyzw, r13.xyzw);
      r11.y = Shadow.SampleLevel(PointSampler_s, r11.xy, 0).x;
      r14.x = LightProperties.w / ShadowFarPlanes.y;
      r5.y = -r14.x * r5.y + r2.w;
      r14.x = cmp(r11.y < r5.y);
      r11.x = 1;
      r11.xy = r14.xx ? r11.xy : 0;
      r11.z = Shadow.SampleLevel(PointSampler_s, r11.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r15.y = r11.y + r11.z;
      r15.x = r14.x ? 2 : 1;
      r11.xy = r11.ww ? r15.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r2.xzxz;
      r6.xyzw = max(r6.xyzw, r12.xyzw);
      r6.xyzw = min(r6.xyzw, r13.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r5.y);
      r14.y = r11.y + r6.x;
      r14.x = 1 + r11.x;
      r6.xy = r6.yy ? r14.xy : r11.xy;
      r6.z = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.w = cmp(r6.z < r5.y);
      r11.y = r6.y + r6.z;
      r11.x = 1 + r6.x;
      r6.xy = r6.ww ? r11.xy : r6.xy;
      r6.z = max(1, r6.x);
      r6.y = r6.y / r6.z;
      r6.x = cmp(r6.x != 0.000000);
      if (r6.x != 0) {
        r2.w = -r6.y + r2.w;
        r2.w = ShadowFarPlanes.y * r2.w;
        r2.w = dot(r5.zz, r2.ww);
        r2.w = r2.w / ShadowFrustumWidths.y;
        r6.xyzw = r2.wwww / ShadowProperties.xyxy;
        r6.xyzw = max(r6.xyzw, r9.xyzw);
        r6.xyzw = min(r6.xyzw, r10.xyzw);
        r9.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r2.xzxz;
        r6.xyzw = max(r6.xyzw, r12.xyzw);
        r6.xyzw = min(r6.xyzw, r13.xyzw);
        r2.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r5.y).x;
        r2.x = r2.w + r2.x;
        r2.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r5.y).x;
        r2.x = r2.x + r2.z;
        r2.x = 0.0625 * r2.x;
      } else {
        r2.x = 1;
      }
      r2.y = r2.x * r4.w;
      r2.z = cmp(r4.w < 1);
      r2.w = (int)r1.x + -1;
      r2.w = cmp(1 < (int)r2.w);
      r2.z = r2.w ? r2.z : 0;
      if (r2.z != 0) {
        r6.x = dot(ProjectionMatrix[2]._m00_m01_m02_m03, r0.xyzw);
        r6.y = dot(ProjectionMatrix[2]._m10_m11_m12_m13, r0.xyzw);
        r6.z = dot(ProjectionMatrix[2]._m20_m21_m22_m23, r0.xyzw);
        r2.z = dot(ProjectionMatrix[2]._m30_m31_m32_m33, r0.xyzw);
        r6.xyz = r6.xyz / r2.zzz;
        r2.z = ShadowFrustumWidths.z * LightProperties.z;
        r2.z = 0.5 * r2.z;
        r9.xy = -r3.xy * float2(0.5,0) + r6.xy;
        r4.xy = saturate(r9.xy / r4.yx);
        r4.xy = r4.xy * float2(2,2) + float2(-1,-1);
        r4.xy = float2(1,1) + -abs(r4.xy);
        r4.xy = saturate(r4.xy / LightProperties.zz);
        r2.w = saturate(1 + -r6.z);
        r2.w = ShadowFarPlanes.z * r2.w;
        r2.z = saturate(r2.w / r2.z);
        r2.w = r4.x * r4.y;
        r2.z = r2.w * r2.z;
        r2.z = cmp(0 < r2.z);
        if (r2.z != 0) {
          r1.w = -r4.z * r1.w + 1;
          r2.z = ShadowFrustumWidths.z / ShadowFrustumWidths.x;
          r2.w = r5.w / ShadowFrustumWidths.z;
          r9.xyzw = r2.wwww / ShadowProperties.xyxy;
          r8.xyzw = r8.xyzw / r2.zzzz;
          r10.xyzw = r7.xyxy / r2.zzzz;
          r9.xyzw = max(r9.xyzw, r8.xyzw);
          r9.xyzw = min(r9.xyzw, r10.xyzw);
          r11.xyzw = r9.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r6.xyxy;
          r12.xyzw = r3.xyxy * float4(0.5,0,0.5,0) + r7.zwzw;
          r3.xyzw = r3.zwzw * float4(1,0.5,1,0.5) + -r7.zwzw;
          r7.xyzw = max(r12.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.y = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r2.w = LightProperties.w / ShadowFarPlanes.z;
          r2.z = -r2.w * r2.z + r6.z;
          r2.w = cmp(r4.y < r2.z);
          r4.x = 1;
          r4.xy = r2.ww ? r4.xy : 0;
          r4.z = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.y = cmp(r4.z < r2.z);
          r7.y = r4.y + r4.z;
          r7.x = r2.w ? 2 : 1;
          r4.xy = r5.yy ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = max(1, r4.x);
          r2.w = r4.y / r2.w;
          r4.x = cmp(r4.x != 0.000000);
          if (r4.x != 0) {
            r2.w = r6.z + -r2.w;
            r2.w = ShadowFarPlanes.z * r2.w;
            r2.w = dot(r5.zz, r2.ww);
            r2.w = r2.w / ShadowFrustumWidths.z;
            r7.xyzw = r2.wwww / ShadowProperties.xyxy;
            r7.xyzw = max(r7.xyzw, r8.xyzw);
            r7.xyzw = min(r7.xyzw, r10.xyzw);
            r8.xyzw = r7.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r6.xyzw = r7.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r6.xyxy;
            r6.xyzw = max(r6.xyzw, r12.xyzw);
            r3.xyzw = min(r6.xyzw, r3.xyzw);
            r3.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.xy, r2.z).x;
            r2.w = r3.x + r2.w;
            r2.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.zw, r2.z).x;
            r2.z = r2.w + r2.z;
            r2.z = 0.0625 * r2.z;
          } else {
            r2.z = 1;
          }
          r2.y = r1.w * r2.z + r2.y;
        }
      } else {
        r1.w = r2.x * r4.w + -r4.w;
        r2.y = 1 + r1.w;
      }
    }
    r1.z = r5.x ? 1 : 2;
  } else {
    r5.x = -1;
  }
  r1.w = ~(int)r5.x;
  r1.y = r1.y ? r1.w : 0;
  r1.w = cmp((int)r1.z < (int)r1.x);
  r1.y = r1.w ? r1.y : 0;
  if (r1.y != 0) {
    r0.w = 1;
    r3.x = dot(ProjectionMatrix[2]._m00_m01_m02_m03, r0.xyzw);
    r3.y = dot(ProjectionMatrix[2]._m10_m11_m12_m13, r0.xyzw);
    r3.z = dot(ProjectionMatrix[2]._m20_m21_m22_m23, r0.xyzw);
    r1.w = dot(ProjectionMatrix[2]._m30_m31_m32_m33, r0.xyzw);
    r2.xzw = r3.xyz / r1.www;
    r3.xyzw = float4(2,2,2,2) / ShadowProperties.xyxy;
    r4.xy = float2(0.5,0.5) * r3.zw;
    r1.w = ShadowFrustumWidths.z * LightProperties.z;
    r1.w = 0.5 * r1.w;
    r4.zw = -r3.zw * float2(0.5,0) + r2.xz;
    r4.zw = saturate(r4.zw / r4.xy);
    r4.zw = r4.zw * float2(2,2) + float2(-1,-1);
    r4.zw = float2(1,1) + -abs(r4.zw);
    r4.zw = saturate(r4.zw / LightProperties.zz);
    r5.x = saturate(1 + -r2.w);
    r5.x = ShadowFarPlanes.z * r5.x;
    r1.w = saturate(r5.x / r1.w);
    r4.z = r4.z * r4.w;
    r4.w = r4.z * r1.w;
    r5.x = cmp(0 < r4.w);
    if (r5.x != 0) {
      r5.y = ShadowFrustumWidths.z / ShadowFrustumWidths.x;
      sincos(LightProperties.x, r6.x, r7.x);
      r5.z = r6.x / r7.x;
      r5.w = LightProperties.y * r5.z;
      r6.x = r5.w / ShadowFrustumWidths.z;
      r6.xyzw = r6.xxxx / ShadowProperties.xyxy;
      r7.xyzw = ShadowProperties.xyxy * ShadowProperties.zzzz;
      r8.xyzw = float4(1,1,1,1) / r7.zwzw;
      r9.xyzw = r8.zwzw / r5.yyyy;
      r7.xyzw = float4(10,10,0.5,0.5) / r7.xyzw;
      r10.xyzw = r7.xyxy / r5.yyyy;
      r6.xyzw = max(r9.xyzw, r6.xyzw);
      r6.xyzw = min(r6.xyzw, r10.xyzw);
      r11.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r2.xzxz;
      r12.xyzw = r3.zwzw * float4(0.5,0,0.5,0) + r7.zwzw;
      r13.xyzw = r3.zwzw * float4(1,0.5,1,0.5) + -r7.zwzw;
      r11.xyzw = max(r12.xyzw, r11.xyzw);
      r11.xyzw = min(r11.xyzw, r13.xyzw);
      r11.y = Shadow.SampleLevel(PointSampler_s, r11.xy, 0).x;
      r14.x = LightProperties.w / ShadowFarPlanes.z;
      r5.y = -r14.x * r5.y + r2.w;
      r14.x = cmp(r11.y < r5.y);
      r11.x = 1;
      r11.xy = r14.xx ? r11.xy : 0;
      r11.z = Shadow.SampleLevel(PointSampler_s, r11.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r15.y = r11.y + r11.z;
      r15.x = r14.x ? 2 : 1;
      r11.xy = r11.ww ? r15.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r14.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r2.xzxz;
      r14.xyzw = max(r14.xyzw, r12.xyzw);
      r14.xyzw = min(r14.xyzw, r13.xyzw);
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.xy, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r11.z = Shadow.SampleLevel(PointSampler_s, r14.zw, 0).x;
      r11.w = cmp(r11.z < r5.y);
      r14.y = r11.y + r11.z;
      r14.x = 1 + r11.x;
      r11.xy = r11.ww ? r14.xy : r11.xy;
      r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r2.xzxz;
      r6.xyzw = max(r6.xyzw, r12.xyzw);
      r6.xyzw = min(r6.xyzw, r13.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r5.y);
      r14.y = r11.y + r6.x;
      r14.x = 1 + r11.x;
      r6.xy = r6.yy ? r14.xy : r11.xy;
      r6.z = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.w = cmp(r6.z < r5.y);
      r11.y = r6.y + r6.z;
      r11.x = 1 + r6.x;
      r6.xy = r6.ww ? r11.xy : r6.xy;
      r6.z = max(1, r6.x);
      r6.y = r6.y / r6.z;
      r6.x = cmp(r6.x != 0.000000);
      if (r6.x != 0) {
        r2.w = -r6.y + r2.w;
        r2.w = ShadowFarPlanes.z * r2.w;
        r2.w = dot(r5.zz, r2.ww);
        r2.w = r2.w / ShadowFrustumWidths.z;
        r6.xyzw = r2.wwww / ShadowProperties.xyxy;
        r6.xyzw = max(r6.xyzw, r9.xyzw);
        r6.xyzw = min(r6.xyzw, r10.xyzw);
        r9.xyzw = r6.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.xyzw = r6.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r2.xzxz;
        r9.xyzw = max(r9.xyzw, r12.xyzw);
        r9.xyzw = min(r9.xyzw, r13.xyzw);
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.xy, r5.y).x;
        r2.w = r9.x + r2.w;
        r9.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r9.zw, r5.y).x;
        r2.w = r9.x + r2.w;
        r6.xyzw = r6.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r2.xzxz;
        r6.xyzw = max(r6.xyzw, r12.xyzw);
        r6.xyzw = min(r6.xyzw, r13.xyzw);
        r2.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r5.y).x;
        r2.x = r2.w + r2.x;
        r2.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r5.y).x;
        r2.x = r2.x + r2.z;
        r2.x = 0.0625 * r2.x;
      } else {
        r2.x = 1;
      }
      r2.y = r2.x * r4.w;
      r2.z = cmp(r4.w < 1);
      r2.w = (int)r1.x + -1;
      r2.w = cmp(2 < (int)r2.w);
      r2.z = r2.w ? r2.z : 0;
      if (r2.z != 0) {
        r6.x = dot(ProjectionMatrix[3]._m00_m01_m02_m03, r0.xyzw);
        r6.y = dot(ProjectionMatrix[3]._m10_m11_m12_m13, r0.xyzw);
        r6.z = dot(ProjectionMatrix[3]._m20_m21_m22_m23, r0.xyzw);
        r2.z = dot(ProjectionMatrix[3]._m30_m31_m32_m33, r0.xyzw);
        r6.xyz = r6.xyz / r2.zzz;
        r2.z = ShadowFrustumWidths.w * LightProperties.z;
        r2.z = 0.5 * r2.z;
        r9.xy = -r3.xy * float2(0.5,0.5) + r6.xy;
        r4.xy = saturate(r9.xy / r4.xy);
        r4.xy = r4.xy * float2(2,2) + float2(-1,-1);
        r4.xy = float2(1,1) + -abs(r4.xy);
        r4.xy = saturate(r4.xy / LightProperties.zz);
        r2.w = saturate(1 + -r6.z);
        r2.w = ShadowFarPlanes.w * r2.w;
        r2.z = saturate(r2.w / r2.z);
        r2.w = r4.x * r4.y;
        r2.z = r2.w * r2.z;
        r2.z = cmp(0 < r2.z);
        if (r2.z != 0) {
          r1.w = -r4.z * r1.w + 1;
          r2.z = ShadowFrustumWidths.w / ShadowFrustumWidths.x;
          r2.w = r5.w / ShadowFrustumWidths.w;
          r9.xyzw = r2.wwww / ShadowProperties.xyxy;
          r8.xyzw = r8.xyzw / r2.zzzz;
          r10.xyzw = r7.xyxy / r2.zzzz;
          r9.xyzw = max(r9.xyzw, r8.xyzw);
          r9.xyzw = min(r9.xyzw, r10.xyzw);
          r11.xyzw = r9.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r6.xyxy;
          r12.xyzw = r3.xyxy * float4(0.5,0.5,0.5,0.5) + r7.zwzw;
          r3.xyzw = r3.zwzw * float4(1,1,1,1) + -r7.zwzw;
          r7.xyzw = max(r12.xyzw, r11.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r4.y = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r2.w = LightProperties.w / ShadowFarPlanes.w;
          r2.z = -r2.w * r2.z + r6.z;
          r2.w = cmp(r4.y < r2.z);
          r4.x = 1;
          r4.xy = r2.ww ? r4.xy : 0;
          r4.z = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r5.y = cmp(r4.z < r2.z);
          r7.y = r4.y + r4.z;
          r7.x = r2.w ? 2 : 1;
          r4.xy = r5.yy ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r7.xyzw = r9.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r6.xyxy;
          r7.xyzw = max(r7.xyzw, r12.xyzw);
          r7.xyzw = min(r7.xyzw, r3.xyzw);
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.xy, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = Shadow.SampleLevel(PointSampler_s, r7.zw, 0).x;
          r4.z = cmp(r2.w < r2.z);
          r7.y = r4.y + r2.w;
          r7.x = 1 + r4.x;
          r4.xy = r4.zz ? r7.xy : r4.xy;
          r2.w = max(1, r4.x);
          r2.w = r4.y / r2.w;
          r4.x = cmp(r4.x != 0.000000);
          if (r4.x != 0) {
            r2.w = r6.z + -r2.w;
            r2.w = ShadowFarPlanes.w * r2.w;
            r2.w = dot(r5.zz, r2.ww);
            r2.w = r2.w / ShadowFrustumWidths.w;
            r7.xyzw = r2.wwww / ShadowProperties.xyxy;
            r7.xyzw = max(r7.xyzw, r8.xyzw);
            r7.xyzw = min(r7.xyzw, r10.xyzw);
            r8.xyzw = r7.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r2.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r8.xyzw = r7.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r6.xyxy;
            r8.xyzw = max(r8.xyzw, r12.xyzw);
            r8.xyzw = min(r8.xyzw, r3.xyzw);
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.xy, r2.z).x;
            r2.w = r4.x + r2.w;
            r4.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r8.zw, r2.z).x;
            r2.w = r4.x + r2.w;
            r6.xyzw = r7.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r6.xyxy;
            r6.xyzw = max(r6.xyzw, r12.xyzw);
            r3.xyzw = min(r6.xyzw, r3.xyzw);
            r3.x = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.xy, r2.z).x;
            r2.w = r3.x + r2.w;
            r2.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.zw, r2.z).x;
            r2.z = r2.w + r2.z;
            r2.z = 0.0625 * r2.z;
          } else {
            r2.z = 1;
          }
          r2.y = r1.w * r2.z + r2.y;
        }
      } else {
        r1.w = r2.x * r4.w + -r4.w;
        r2.y = 1 + r1.w;
      }
    }
    r1.z = r5.x ? 2 : 3;
  } else {
    r5.x = -1;
  }
  r1.w = ~(int)r5.x;
  r1.y = r1.y ? r1.w : 0;
  r1.z = cmp((int)r1.z < (int)r1.x);
  r1.y = r1.z ? r1.y : 0;
  if (r1.y != 0) {
    r0.w = 1;
    r3.x = dot(ProjectionMatrix[3]._m00_m01_m02_m03, r0.xyzw);
    r3.y = dot(ProjectionMatrix[3]._m10_m11_m12_m13, r0.xyzw);
    r3.z = dot(ProjectionMatrix[3]._m20_m21_m22_m23, r0.xyzw);
    r1.y = dot(ProjectionMatrix[3]._m30_m31_m32_m33, r0.xyzw);
    r1.yzw = r3.xyz / r1.yyy;
    r3.xyzw = float4(2,2,2,2) / ShadowProperties.xyxy;
    r2.xz = float2(0.5,0.5) * r3.xy;
    r2.w = ShadowFrustumWidths.w * LightProperties.z;
    r2.w = 0.5 * r2.w;
    r4.xy = -r3.xy * float2(0.5,0.5) + r1.yz;
    r4.xy = saturate(r4.xy / r2.xz);
    r4.xy = r4.xy * float2(2,2) + float2(-1,-1);
    r4.xy = float2(1,1) + -abs(r4.xy);
    r4.xy = saturate(r4.xy / LightProperties.zz);
    r4.z = saturate(1 + -r1.w);
    r4.z = ShadowFarPlanes.w * r4.z;
    r2.w = saturate(r4.z / r2.w);
    r4.x = r4.x * r4.y;
    r2.w = r4.x * r2.w;
    r4.x = cmp(0 < r2.w);
    if (r4.x != 0) {
      r4.x = ShadowFrustumWidths.w / ShadowFrustumWidths.x;
      sincos(LightProperties.x, r5.x, r6.x);
      r4.y = r5.x / r6.x;
      r4.z = LightProperties.y * r4.y;
      r4.z = r4.z / ShadowFrustumWidths.w;
      r5.xyzw = r4.zzzz / ShadowProperties.xyxy;
      r6.xyzw = ShadowProperties.xyxy * ShadowProperties.zzzz;
      r7.xyzw = float4(1,1,1,1) / r6.zwzw;
      r7.xyzw = r7.xyzw / r4.xxxx;
      r6.xyzw = float4(10,10,0.5,0.5) / r6.xyzw;
      r8.xyzw = r6.xyxy / r4.xxxx;
      r5.xyzw = max(r7.xyzw, r5.xyzw);
      r5.xyzw = min(r5.xyzw, r8.xyzw);
      r9.xyzw = r5.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r1.yzyz;
      r10.xyzw = r3.xyxy * float4(0.5,0.5,0.5,0.5) + r6.zwzw;
      r3.xyzw = r3.zwzw * float4(1,1,1,1) + -r6.zwzw;
      r6.xyzw = max(r10.xyzw, r9.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r4.w = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.x = LightProperties.w / ShadowFarPlanes.w;
      r4.x = -r6.x * r4.x + r1.w;
      r6.x = cmp(r4.w < r4.x);
      r4.z = 1;
      r4.zw = r6.xx ? r4.zw : 0;
      r6.y = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.z = cmp(r6.y < r4.x);
      r9.y = r6.y + r4.w;
      r9.x = r6.x ? 2 : 1;
      r4.zw = r6.zz ? r9.xy : r4.zw;
      r6.xyzw = r5.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r1.yzyz;
      r6.xyzw = max(r6.xyzw, r10.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.xyzw = r5.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r1.yzyz;
      r6.xyzw = max(r6.xyzw, r10.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.xyzw = r5.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r1.yzyz;
      r6.xyzw = max(r6.xyzw, r10.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.xyzw = r5.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r1.yzyz;
      r6.xyzw = max(r6.xyzw, r10.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.xyzw = r5.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r1.yzyz;
      r6.xyzw = max(r6.xyzw, r10.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.xyzw = r5.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r1.yzyz;
      r6.xyzw = max(r6.xyzw, r10.xyzw);
      r6.xyzw = min(r6.xyzw, r3.xyzw);
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.xy, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r6.x = Shadow.SampleLevel(PointSampler_s, r6.zw, 0).x;
      r6.y = cmp(r6.x < r4.x);
      r9.y = r6.x + r4.w;
      r9.x = 1 + r4.z;
      r4.zw = r6.yy ? r9.xy : r4.zw;
      r5.xyzw = r5.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r1.yzyz;
      r5.xyzw = max(r5.xyzw, r10.xyzw);
      r5.xyzw = min(r5.xyzw, r3.xyzw);
      r5.x = Shadow.SampleLevel(PointSampler_s, r5.xy, 0).x;
      r5.y = cmp(r5.x < r4.x);
      r6.y = r5.x + r4.w;
      r6.x = 1 + r4.z;
      r4.zw = r5.yy ? r6.xy : r4.zw;
      r5.x = Shadow.SampleLevel(PointSampler_s, r5.zw, 0).x;
      r5.y = cmp(r5.x < r4.x);
      r6.y = r5.x + r4.w;
      r6.x = 1 + r4.z;
      r4.zw = r5.yy ? r6.xy : r4.zw;
      r5.x = max(1, r4.z);
      r4.w = r4.w / r5.x;
      r4.z = cmp(r4.z != 0.000000);
      if (r4.z != 0) {
        r1.w = -r4.w + r1.w;
        r1.w = ShadowFarPlanes.w * r1.w;
        r1.w = dot(r4.yy, r1.ww);
        r1.w = r1.w / ShadowFrustumWidths.w;
        r5.xyzw = r1.wwww / ShadowProperties.xyxy;
        r5.xyzw = max(r5.xyzw, r7.xyzw);
        r5.xyzw = min(r5.xyzw, r8.xyzw);
        r6.xyzw = r5.zwzw * float4(-0.641573071,-0.170358405,-0.220173702,0.0666730404) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r1.w = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r6.xyzw = r5.zwzw * float4(-0.56526792,0.40981409,-0.372753888,-0.69012928) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r1.w = r4.y + r1.w;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r6.xyzw = r5.zwzw * float4(-0.963876784,0.0795568228,0.0895406604,-0.433672994) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r1.w = r4.y + r1.w;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r6.xyzw = r5.zwzw * float4(-0.815210223,-0.533595324,-0.0262216199,0.725986183) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r1.w = r4.y + r1.w;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r6.xyzw = r5.zwzw * float4(0.152993307,0.216891706,-0.394465297,0.896840572) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r1.w = r4.y + r1.w;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r6.xyzw = r5.zwzw * float4(0.566493392,0.677397907,0.65583998,-0.0949900225) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r1.w = r4.y + r1.w;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r6.xyzw = r5.zwzw * float4(0.0658113286,-0.885984778,0.465619504,-0.59089911) + r1.yzyz;
        r6.xyzw = max(r6.xyzw, r10.xyzw);
        r6.xyzw = min(r6.xyzw, r3.xyzw);
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.xy, r4.x).x;
        r1.w = r4.y + r1.w;
        r4.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r6.zw, r4.x).x;
        r1.w = r4.y + r1.w;
        r5.xyzw = r5.xyzw * float4(0.771781623,0.291234612,0.862963498,-0.501030385) + r1.yzyz;
        r5.xyzw = max(r5.xyzw, r10.xyzw);
        r3.xyzw = min(r5.xyzw, r3.xyzw);
        r1.y = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.xy, r4.x).x;
        r1.y = r1.w + r1.y;
        r1.z = Shadow.SampleCmpLevelZero(ShadowSampler_s, r3.zw, r4.x).x;
        r1.y = r1.y + r1.z;
        r1.y = 0.0625 * r1.y;
      } else {
        r1.y = 1;
      }
      r2.y = r1.y * r2.w;
      r1.z = cmp(r2.w < 1);
      r1.x = (int)r1.x + -1;
      r1.x = cmp(3 < (int)r1.x);
      r1.x = r1.x ? r1.z : 0;
      if (r1.x != 0) {
        r3.x = dot(ProjectionMatrix[0]._m00_m01_m02_m03, r0.xyzw);
        r3.y = dot(ProjectionMatrix[0]._m10_m11_m12_m13, r0.xyzw);
        r3.z = dot(ProjectionMatrix[0]._m20_m21_m22_m23, r0.xyzw);
        r0.x = dot(ProjectionMatrix[0]._m30_m31_m32_m33, r0.xyzw);
        r0.xyz = r3.xyz / r0.xxx;
        r0.w = ShadowFrustumWidths.x * LightProperties.z;
        r0.w = 0.5 * r0.w;
        r0.xy = saturate(r0.xy / r2.xz);
        r0.xy = r0.xy * float2(2,2) + float2(-1,-1);
        r0.xy = float2(1,1) + -abs(r0.xy);
        r0.xy = saturate(r0.xy / LightProperties.zz);
        r0.z = saturate(1 + -r0.z);
        r0.z = ShadowFarPlanes.x * r0.z;
        r0.z = saturate(r0.z / r0.w);
        r0.x = r0.x * r0.y;
        r0.x = r0.x * r0.z;
        r0.x = cmp(0 < r0.x);
        if (r0.x != 0) {
          r0.x = r1.y * r2.w + -r2.w;
          r2.y = 1 + r0.x;
        }
      } else {
        r0.x = r1.y * r2.w + -r2.w;
        r2.y = 1 + r0.x;
      }
    }
  }
  o0.xyzw = r2.yyyy;
  return;
}