GLSL fixes:
authorMichal Krol <mjkrol@gmail.org>
Tue, 21 Mar 2006 10:37:40 +0000 (10:37 +0000)
committerMichal Krol <mjkrol@gmail.org>
Tue, 21 Mar 2006 10:37:40 +0000 (10:37 +0000)
- generate error on NULL pointers in glShaderSourceARB;
- reinstall program object, if current, in glLinkProgramARB;
- vertex and fragment shaders are optional in program object;
- floor asm was wrongly computed for x86 back-end;
- allow for (void) idiom in function prototypes;
- all fixed-state uniforms are updated;
- local variable initializers are working;
- implement texture* and shadow* functions for vertex processor;
- generate error if too many arguments in general constructor;
- trim unused data in general constructor;
- struct r-value field select was badly relocated;

Changes:
- add derived state gl_fog_attrib::_Scale;
- add derived state gl_light::_CosCutoffNeg;

34 files changed:
src/mesa/main/fog.c
src/mesa/main/light.c
src/mesa/main/mtypes.h
src/mesa/main/texstate.c
src/mesa/shader/shaderobjects.c
src/mesa/shader/shaderobjects.h
src/mesa/shader/shaderobjects_3dlabs.c
src/mesa/shader/slang/library/slang_common_builtin.gc
src/mesa/shader/slang/library/slang_common_builtin_gc.h
src/mesa/shader/slang/library/slang_core.gc
src/mesa/shader/slang/library/slang_core_gc.h
src/mesa/shader/slang/library/slang_fragment_builtin.gc
src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
src/mesa/shader/slang/library/slang_shader.syn
src/mesa/shader/slang/library/slang_shader_syn.h
src/mesa/shader/slang/library/slang_vertex_builtin.gc
src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
src/mesa/shader/slang/slang_assemble.c
src/mesa/shader/slang/slang_assemble_constructor.c
src/mesa/shader/slang/slang_execute_x86.c
src/mesa/swrast/s_arbshader.c
src/mesa/swrast/s_context.c
src/mesa/swrast/s_span.c
src/mesa/tnl/t_vb_arbprogram.c
src/mesa/tnl/t_vb_arbshader.c
src/mesa/tnl/t_vb_cull.c
src/mesa/tnl/t_vb_fog.c
src/mesa/tnl/t_vb_light.c
src/mesa/tnl/t_vb_normals.c
src/mesa/tnl/t_vb_points.c
src/mesa/tnl/t_vb_program.c
src/mesa/tnl/t_vb_texgen.c
src/mesa/tnl/t_vb_texmat.c
src/mesa/tnl/t_vb_vertex.c

index d3b8a923aae6e15ede9d4f9143c205836e0565c8..df99c6519f6b846ad97f37e8800da41b9e72b2c6 100644 (file)
@@ -70,7 +70,15 @@ _mesa_Fogiv(GLenum pname, const GLint *params )
          ;
    }
    _mesa_Fogfv(pname, p);
-}
+}\r
+\r
+\r
+#define UPDATE_FOG_SCALE(ctx) do {\\r
+      if (ctx->Fog.End == ctx->Fog.Start)\\r
+         ctx->Fog._Scale = 1.0f;\\r
+      else\\r
+         ctx->Fog._Scale = 1.0f / (ctx->Fog.End - ctx->Fog.Start);\\r
+   } while(0)
 
 
 void GLAPIENTRY
@@ -108,17 +116,19 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
         ctx->Fog.Density = *params;
         break;
       case GL_FOG_START:
-        if (ctx->Fog.Start == *params)
-           return;
-        FLUSH_VERTICES(ctx, _NEW_FOG);
-        ctx->Fog.Start = *params;
-        break;
+         if (ctx->Fog.Start == *params)
+            return;
+         FLUSH_VERTICES(ctx, _NEW_FOG);
+         ctx->Fog.Start = *params;\r
+         UPDATE_FOG_SCALE(ctx);
+         break;
       case GL_FOG_END:
-        if (ctx->Fog.End == *params)
-           return;
-        FLUSH_VERTICES(ctx, _NEW_FOG);
-        ctx->Fog.End = *params;
-        break;
+         if (ctx->Fog.End == *params)
+            return;
+         FLUSH_VERTICES(ctx, _NEW_FOG);\r
+         ctx->Fog.End = *params;\r
+         UPDATE_FOG_SCALE(ctx);
+         break;
       case GL_FOG_INDEX:
         if (ctx->Fog.Index == *params)
            return;
@@ -173,5 +183,6 @@ void _mesa_init_fog( GLcontext * ctx )
    ctx->Fog.Start = 0.0;
    ctx->Fog.End = 1.0;
    ctx->Fog.ColorSumEnabled = GL_FALSE;
-   ctx->Fog.FogCoordinateSource = GL_FRAGMENT_DEPTH_EXT;
+   ctx->Fog.FogCoordinateSource = GL_FRAGMENT_DEPTH_EXT;\r
+   ctx->Fog._Scale = 1.0f;
 }
index 8fa62eb873434a25b919f6463ba75fcfd58245f0..35ec1547e98741abf68b5fe281f41cfc28341536 100644 (file)
@@ -123,16 +123,18 @@ _mesa_light(GLcontext *ctx, GLuint lnum, GLenum pname, const GLfloat *params)
    case GL_SPOT_CUTOFF:
       ASSERT(params[0] == 180.0 || (params[0] >= 0.0 && params[0] <= 90.0));
       if (light->SpotCutoff == params[0])
-        return;
+         return;
       FLUSH_VERTICES(ctx, _NEW_LIGHT);
-      light->SpotCutoff = params[0];
-      light->_CosCutoff = (GLfloat) _mesa_cos(params[0]*DEG2RAD);
-      if (light->_CosCutoff < 0)
-        light->_CosCutoff = 0;
+      light->SpotCutoff = params[0];\r
+      light->_CosCutoffNeg = (GLfloat) (_mesa_cos(light->SpotCutoff * DEG2RAD));
+      if (light->_CosCutoffNeg < 0)
+         light->_CosCutoff = 0;\r
+      else\r
+         light->_CosCutoff = light->_CosCutoffNeg;
       if (light->SpotCutoff != 180.0F)
-        light->_Flags |= LIGHT_SPOT;
+         light->_Flags |= LIGHT_SPOT;
       else
-        light->_Flags &= ~LIGHT_SPOT;
+         light->_Flags &= ~LIGHT_SPOT;
       break;
    case GL_CONSTANT_ATTENUATION:
       ASSERT(params[0] >= 0.0);
@@ -1263,7 +1265,8 @@ init_light( struct gl_light *l, GLuint n )
    ASSIGN_3V( l->EyeDirection, 0.0, 0.0, -1.0 );
    l->SpotExponent = 0.0;
    _mesa_invalidate_spot_exp_table( l );
-   l->SpotCutoff = 180.0;
+   l->SpotCutoff = 180.0;\r
+   l->_CosCutoffNeg = -1.0f;
    l->_CosCutoff = 0.0;                /* KW: -ve values not admitted */
    l->ConstantAttenuation = 1.0;
    l->LinearAttenuation = 0.0;
index 82d45f35920e0f913b5e4916c80c74b198801450..c69b4a48b5036eedf8c95a9415711be8c49c436a 100644 (file)
@@ -429,7 +429,8 @@ struct gl_light
    GLfloat EyePosition[4];     /**< position in eye coordinates */
    GLfloat EyeDirection[4];    /**< spotlight dir in eye coordinates */
    GLfloat SpotExponent;
-   GLfloat SpotCutoff;         /**< in degrees */
+   GLfloat SpotCutoff;         /**< in degrees */\r
+   GLfloat _CosCutoffNeg;      /**< = cos(SpotCutoff) */
    GLfloat _CosCutoff;         /**< = MAX(0, cos(SpotCutoff)) */
    GLfloat ConstantAttenuation;
    GLfloat LinearAttenuation;
@@ -727,7 +728,8 @@ struct gl_fog_attrib
    GLfloat Index;              /**< Fog index */
    GLenum Mode;                        /**< Fog mode */
    GLboolean ColorSumEnabled;
-   GLenum FogCoordinateSource;  /**< GL_EXT_fog_coord */
+   GLenum FogCoordinateSource;  /**< GL_EXT_fog_coord */\r
+   GLfloat _Scale;             /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */
 };
 
 
@@ -1949,7 +1951,9 @@ struct gl_query_state
  */
 struct gl_shader_objects_state
 {
-   struct gl2_program_intf **CurrentProgram;
+   struct gl2_program_intf **CurrentProgram;\r
+   GLboolean _VertexShaderPresent;\r
+   GLboolean _FragmentShaderPresent;
 };
 
 
index a8cb8a7bcfa57dcf9900b98ddc10e7bab60e9739..5de5f6815ab6b92e98bbe6d85ff8c1c488bd0ac2 100644 (file)
@@ -2812,7 +2812,7 @@ update_texture_state( GLcontext *ctx )
     * uniform sampler changes, so maybe there is a better place to perform these rather\r
     * expensive computations.\r
     */\r
-   if (prog != NULL) {\r
+   if (ctx->ShaderObjects._FragmentShaderPresent) {\r
       (**prog).GetTextureImageUsage (prog, progteximageusage);\r
    }
 
@@ -2829,7 +2829,7 @@ update_texture_state( GLcontext *ctx )
       texUnit->_GenFlags = 0;
 
       /* Get the bitmask of texture enables */\r
-      if (prog != NULL) {\r
+      if (ctx->ShaderObjects._FragmentShaderPresent) {\r
          enableBits = progteximageusage[unit];
       }\r
       else if (ctx->FragmentProgram._Enabled) {
@@ -2948,7 +2948,7 @@ update_texture_state( GLcontext *ctx )
    /* Fragment programs may need texture coordinates but not the
     * corresponding texture images.
     */\r
-   if (prog != NULL) {\r
+   if (ctx->ShaderObjects.CurrentProgram != NULL) {\r
       ctx->Texture._EnabledCoordUnits |= (1 << ctx->Const.MaxTextureCoordUnits) - 1;\r
    }
    else if (ctx->FragmentProgram._Enabled) {
index ad55b7448c54e55167fdcb72129ee7b310a5c3ed..998d4e455e11256f254f042fee19ce42496b527d 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.3
+ * Version:  6.5
  *
- * Copyright (C) 2004-2005  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2004-2006  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -200,7 +200,14 @@ _mesa_ShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **s
        GET_SHADER(sha, shaderObj, "glShaderSourceARB");
 
        if (sha == NULL)
-               return;
+               return;\r
+\r
+       if (string == NULL)\r
+       {\r
+               RELEASE_SHADER(sha);\r
+               _mesa_error (ctx, GL_INVALID_VALUE, "glShaderSourceARB");\r
+               return;\r
+       }
 
        /*
         * This array holds offsets of where the appropriate string ends, thus the last
@@ -215,7 +222,14 @@ _mesa_ShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **s
        }
 
        for (i = 0; i < count; i++)
-       {
+       {\r
+               if (string[i] == NULL)\r
+               {\r
+                       _mesa_free ((GLvoid *) offsets);\r
+                       RELEASE_SHADER(sha);\r
+                       _mesa_error (ctx, GL_INVALID_VALUE, "glShaderSourceARB");\r
+                       return;\r
+               }
                if (length == NULL || length[i] < 0)
                        offsets[i] = _mesa_strlen (string[i]);
                else
@@ -291,11 +305,14 @@ _mesa_LinkProgramARB (GLhandleARB programObj)
 
        if (pro != NULL)
        {
-               if (pro == ctx->ShaderObjects.CurrentProgram)
-               {
-                       /* TODO re-install executable program */
+               (**pro).Link (pro);\r
+               if (pro == ctx->ShaderObjects.CurrentProgram)\r
+               {\r
+                       if ((**pro).GetLinkStatus (pro))\r
+                               _mesa_UseProgramObjectARB (programObj);\r
+                       else\r
+                               _mesa_UseProgramObjectARB (0);\r
                }
-               (**pro).Link (pro);
                RELEASE_PROGRAM(pro);
        }
 }
@@ -309,7 +326,7 @@ _mesa_UseProgramObjectARB (GLhandleARB programObj)
        FLUSH_VERTICES(ctx, _NEW_PROGRAM);
 
        if (programObj != 0)
-       {
+       {\r
                GET_PROGRAM(pro, programObj, "glUseProgramObjectARB");
 
                if (pro == NULL)
@@ -322,7 +339,16 @@ _mesa_UseProgramObjectARB (GLhandleARB programObj)
                        return;
                }
 
-               program = pro;
+               program = pro;\r
+\r
+               ctx->ShaderObjects._VertexShaderPresent = (**pro).IsShaderPresent (pro, GL_VERTEX_SHADER_ARB);\r
+               ctx->ShaderObjects._FragmentShaderPresent = (**pro).IsShaderPresent (pro,\r
+                       GL_FRAGMENT_SHADER_ARB);
+       }\r
+       else\r
+       {\r
+               ctx->ShaderObjects._VertexShaderPresent = GL_FALSE;\r
+               ctx->ShaderObjects._FragmentShaderPresent = GL_FALSE;\r
        }
 
        if (ctx->ShaderObjects.CurrentProgram != NULL)
@@ -1060,7 +1086,9 @@ _mesa_GetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name)
 GLvoid
 _mesa_init_shaderobjects (GLcontext *ctx)
 {
-       ctx->ShaderObjects.CurrentProgram = NULL;
+       ctx->ShaderObjects.CurrentProgram = NULL;\r
+       ctx->ShaderObjects._FragmentShaderPresent = GL_FALSE;\r
+       ctx->ShaderObjects._VertexShaderPresent = GL_FALSE;
 
        _mesa_init_shaderobjects_3dlabs (ctx);
 }
index 830adddec94066a8fbce2296ab07bf217e7e2720..060328163bc3d2ce32c3dc1ba3f1276dddc0b806 100644 (file)
@@ -91,7 +91,8 @@ struct gl2_program_intf
       GLboolean);\r
    GLvoid (* UpdateFixedVarying) (struct gl2_program_intf **, GLuint, GLvoid *, GLuint, GLuint,\r
       GLboolean);\r
-   GLvoid (* GetTextureImageUsage) (struct gl2_program_intf **, GLbitfield *);
+   GLvoid (* GetTextureImageUsage) (struct gl2_program_intf **, GLbitfield *);\r
+   GLboolean (* IsShaderPresent) (struct gl2_program_intf **, GLenum);
 };
 
 struct gl2_fragment_shader_intf
index 6d03f426487b320c0e882a417acc7d891b8cc9f6..a0645c126f2af3bfbec5a68db03da18d65755236 100755 (executable)
@@ -33,8 +33,8 @@
 \r
 #include "imports.h"\r
 #include "hash.h"\r
+#include "macros.h"\r
 #include "shaderobjects.h"\r
-#include "shaderobjects_3dlabs.h"\r
 \r
 #if USE_3DLABS_FRONTEND\r
 #include "slang_mesa.h"\r
@@ -858,7 +858,7 @@ write_common_fixed (slang_program *pro, GLuint index, const GLvoid *src, GLuint
 \r
 static GLvoid\r
 write_common_fixed_mat4 (slang_program *pro, GLmatrix *matrix, GLuint off, GLuint i, GLuint ii,\r
-                                                GLuint it, GLuint iit)\r
+                         GLuint it, GLuint iit)\r
 {\r
        GLfloat mat[16];\r
 \r
@@ -885,6 +885,43 @@ write_common_fixed_mat4 (slang_program *pro, GLmatrix *matrix, GLuint off, GLuin
        write_common_fixed (pro, iit, mat, off, 16 * sizeof (GLfloat));\r
 }\r
 \r
+static GLvoid\r
+write_common_fixed_material (GLcontext *ctx, slang_program *pro, GLuint i, GLuint e, GLuint a,\r
+                             GLuint d, GLuint sp, GLuint sh)\r
+{\r
+       GLfloat v[17];\r
+\r
+       COPY_4FV(v, ctx->Light.Material.Attrib[e]);\r
+       COPY_4FV((v + 4), ctx->Light.Material.Attrib[a]);\r
+       COPY_4FV((v + 8), ctx->Light.Material.Attrib[d]);\r
+       COPY_4FV((v + 12), ctx->Light.Material.Attrib[sp]);\r
+       v[16] = ctx->Light.Material.Attrib[sh][0];\r
+       write_common_fixed (pro, i, v, 0, 17 * sizeof (GLfloat));\r
+}\r
+\r
+static GLvoid\r
+write_common_fixed_light_model_product (GLcontext *ctx, slang_program *pro, GLuint i, GLuint e,\r
+                                        GLuint a)\r
+{\r
+       GLfloat v[4];\r
+\r
+       SCALE_4V(v,     ctx->Light.Material.Attrib[a], ctx->Light.Model.Ambient);\r
+       ACC_4V(v, ctx->Light.Material.Attrib[e]);\r
+       write_common_fixed (pro, i, v, 0, 4 * sizeof (GLfloat));\r
+}\r
+\r
+static GLvoid\r
+write_common_fixed_light_product (GLcontext *ctx, slang_program *pro, GLuint off, GLuint i, GLuint a,\r
+                                  GLuint d, GLuint s)\r
+{\r
+       GLfloat v[12];\r
+\r
+       SCALE_4V(v, ctx->Light.Light[off].Ambient, ctx->Light.Material.Attrib[a]);\r
+       SCALE_4V((v + 4), ctx->Light.Light[off].Diffuse, ctx->Light.Material.Attrib[d]);\r
+       SCALE_4V((v + 8), ctx->Light.Light[off].Specular, ctx->Light.Material.Attrib[s]);\r
+       write_common_fixed (pro, i, v, off, 12 * sizeof (GLfloat));\r
+}\r
+\r
 static GLvoid\r
 _program_UpdateFixedUniforms (struct gl2_program_intf **intf)\r
 {\r
@@ -892,7 +929,7 @@ _program_UpdateFixedUniforms (struct gl2_program_intf **intf)
        struct gl2_program_impl *impl = (struct gl2_program_impl *) intf;\r
        slang_program *pro = &impl->_obj.prog;\r
        GLuint i;\r
-       GLfloat v[9];\r
+       GLfloat v[29];\r
        GLfloat *p;\r
 \r
        /* MODELVIEW matrix */\r
@@ -916,14 +953,34 @@ _program_UpdateFixedUniforms (struct gl2_program_intf **intf)
                SLANG_COMMON_FIXED_MODELVIEWPROJECTIONMATRIXTRANSPOSE,\r
                SLANG_COMMON_FIXED_MODELVIEWPROJECTIONMATRIXINVERSETRANSPOSE);\r
 \r
-       /* TEXTURE matrix */\r
-       for (i = 0; i < 8; i++)\r
+       for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++)\r
        {\r
+               /* TEXTURE matrix */\r
                write_common_fixed_mat4 (pro, ctx->TextureMatrixStack[i].Top, i,\r
                        SLANG_COMMON_FIXED_TEXTUREMATRIX,\r
                        SLANG_COMMON_FIXED_TEXTUREMATRIXINVERSE,\r
                        SLANG_COMMON_FIXED_TEXTUREMATRIXTRANSPOSE,\r
                        SLANG_COMMON_FIXED_TEXTUREMATRIXINVERSETRANSPOSE);\r
+\r
+               /* EYE_PLANE texture-coordinate generation */\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_EYEPLANES, ctx->Texture.Unit[i].EyePlaneS,\r
+                       i, 4 * sizeof (GLfloat));\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_EYEPLANET, ctx->Texture.Unit[i].EyePlaneT,\r
+                       i, 4 * sizeof (GLfloat));\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_EYEPLANER, ctx->Texture.Unit[i].EyePlaneR,\r
+                       i, 4 * sizeof (GLfloat));\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_EYEPLANEQ, ctx->Texture.Unit[i].EyePlaneQ,\r
+                       i, 4 * sizeof (GLfloat));\r
+\r
+               /* OBJECT_PLANE texture-coordinate generation */\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_OBJECTPLANES, ctx->Texture.Unit[i].ObjectPlaneS,\r
+                       i, 4 * sizeof (GLfloat));\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_OBJECTPLANET, ctx->Texture.Unit[i].ObjectPlaneT,\r
+                       i, 4 * sizeof (GLfloat));\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_OBJECTPLANER, ctx->Texture.Unit[i].ObjectPlaneR,\r
+                       i, 4 * sizeof (GLfloat));\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_OBJECTPLANEQ, ctx->Texture.Unit[i].ObjectPlaneQ,\r
+                       i, 4 * sizeof (GLfloat));\r
        }\r
 \r
        /* NORMAL matrix - upper 3x3 inverse transpose of MODELVIEW matrix */\r
@@ -939,17 +996,100 @@ _program_UpdateFixedUniforms (struct gl2_program_intf **intf)
        v[8] = p[10];\r
        write_common_fixed (pro, SLANG_COMMON_FIXED_NORMALMATRIX, v, 0, 9 * sizeof (GLfloat));\r
 \r
-       /* XXX: fetch uniform float gl_NormalScale */\r
-       /* XXX: fetch uniform mat4 gl_ClipPlane */\r
-       /* XXX: fetch uniform mat4 gl_TextureEnvColor */\r
-       /* XXX: fetch uniform mat4 gl_EyePlaneS */\r
-       /* XXX: fetch uniform mat4 gl_EyePlaneT */\r
-       /* XXX: fetch uniform mat4 gl_EyePlaneR */\r
-       /* XXX: fetch uniform mat4 gl_EyePlaneQ */\r
-       /* XXX: fetch uniform mat4 gl_ObjectPlaneS */\r
-       /* XXX: fetch uniform mat4 gl_ObjectPlaneT */\r
-       /* XXX: fetch uniform mat4 gl_ObjectPlaneR */\r
-       /* XXX: fetch uniform mat4 gl_ObjectPlaneQ */\r
+       /* normal scale */\r
+       write_common_fixed (pro, SLANG_COMMON_FIXED_NORMALSCALE, &ctx->_ModelViewInvScale, 0, sizeof (GLfloat));\r
+\r
+       /* depth range parameters */\r
+       v[0] = ctx->Viewport.Near;\r
+       v[1] = ctx->Viewport.Far;\r
+       v[2] = ctx->Viewport.Far - ctx->Viewport.Near;\r
+       write_common_fixed (pro, SLANG_COMMON_FIXED_DEPTHRANGE, v, 0, 3 * sizeof (GLfloat));\r
+\r
+       /* CLIP_PLANEi */\r
+       for (i = 0; i < ctx->Const.MaxClipPlanes; i++)\r
+       {\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_CLIPPLANE, ctx->Transform.EyeUserPlane[i], i,\r
+                       4 * sizeof (GLfloat));\r
+       }\r
+\r
+       /* point parameters */\r
+       v[0] = ctx->Point.Size;\r
+       v[1] = ctx->Point.MinSize;\r
+       v[2] = ctx->Point.MaxSize;\r
+       v[3] = ctx->Point.Threshold;\r
+       COPY_3FV((v + 4), ctx->Point.Params);\r
+       write_common_fixed (pro, SLANG_COMMON_FIXED_POINT, v, 0, 7 * sizeof (GLfloat));\r
+\r
+       /* material parameters */\r
+       write_common_fixed_material (ctx, pro, SLANG_COMMON_FIXED_FRONTMATERIAL,\r
+               MAT_ATTRIB_FRONT_EMISSION,\r
+               MAT_ATTRIB_FRONT_AMBIENT,\r
+               MAT_ATTRIB_FRONT_DIFFUSE,\r
+               MAT_ATTRIB_FRONT_SPECULAR,\r
+               MAT_ATTRIB_FRONT_SHININESS);\r
+       write_common_fixed_material (ctx, pro, SLANG_COMMON_FIXED_BACKMATERIAL,\r
+               MAT_ATTRIB_BACK_EMISSION,\r
+               MAT_ATTRIB_BACK_AMBIENT,\r
+               MAT_ATTRIB_BACK_DIFFUSE,\r
+               MAT_ATTRIB_BACK_SPECULAR,\r
+               MAT_ATTRIB_BACK_SHININESS);\r
+\r
+       for (i = 0; i < ctx->Const.MaxLights; i++)\r
+       {\r
+               /* light source parameters */\r
+               COPY_4FV(v, ctx->Light.Light[i].Ambient);\r
+               COPY_4FV((v + 4), ctx->Light.Light[i].Diffuse);\r
+               COPY_4FV((v + 8), ctx->Light.Light[i].Specular);\r
+               COPY_4FV((v + 12), ctx->Light.Light[i].EyePosition);\r
+               COPY_2FV((v + 16), ctx->Light.Light[i].EyePosition);\r
+               v[18] = ctx->Light.Light[i].EyePosition[2] + 1.0f;\r
+               NORMALIZE_3FV((v + 16));\r
+               v[19] = 0.0f;\r
+               COPY_3V((v + 20), ctx->Light.Light[i].EyeDirection);\r
+               v[23] = ctx->Light.Light[i].SpotExponent;\r
+               v[24] = ctx->Light.Light[i].SpotCutoff;\r
+               v[25] = ctx->Light.Light[i]._CosCutoffNeg;\r
+               v[26] = ctx->Light.Light[i].ConstantAttenuation;\r
+               v[27] = ctx->Light.Light[i].LinearAttenuation;\r
+               v[28] = ctx->Light.Light[i].QuadraticAttenuation;\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_LIGHTSOURCE, v, i, 29 * sizeof (GLfloat));\r
+\r
+               /* light product */\r
+               write_common_fixed_light_product (ctx, pro, i, SLANG_COMMON_FIXED_FRONTLIGHTPRODUCT,\r
+                       MAT_ATTRIB_FRONT_AMBIENT,\r
+                       MAT_ATTRIB_FRONT_DIFFUSE,\r
+                       MAT_ATTRIB_FRONT_SPECULAR);\r
+               write_common_fixed_light_product (ctx, pro, i, SLANG_COMMON_FIXED_BACKLIGHTPRODUCT,\r
+                       MAT_ATTRIB_BACK_AMBIENT,\r
+                       MAT_ATTRIB_BACK_DIFFUSE,\r
+                       MAT_ATTRIB_BACK_SPECULAR);\r
+       }\r
+\r
+       /* light model parameters */\r
+       write_common_fixed (pro, SLANG_COMMON_FIXED_LIGHTMODEL, ctx->Light.Model.Ambient, 0, 4 * sizeof (GLfloat));\r
+\r
+       /* light model product */\r
+       write_common_fixed_light_model_product (ctx, pro, SLANG_COMMON_FIXED_FRONTLIGHTMODELPRODUCT,\r
+               MAT_ATTRIB_FRONT_EMISSION,\r
+               MAT_ATTRIB_FRONT_AMBIENT);\r
+       write_common_fixed_light_model_product (ctx, pro, SLANG_COMMON_FIXED_BACKLIGHTMODELPRODUCT,\r
+               MAT_ATTRIB_BACK_EMISSION,\r
+               MAT_ATTRIB_BACK_AMBIENT);\r
+\r
+       /* TEXTURE_ENV_COLOR */\r
+       for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++)\r
+       {\r
+               write_common_fixed (pro, SLANG_COMMON_FIXED_TEXTUREENVCOLOR, ctx->Texture.Unit[i].EnvColor,\r
+                       i, 4 * sizeof (GLfloat));\r
+       }\r
+\r
+       /* fog parameters */\r
+       COPY_4FV(v, ctx->Fog.Color);\r
+       v[4] = ctx->Fog.Density;\r
+       v[5] = ctx->Fog.Start;\r
+       v[6] = ctx->Fog.End;\r
+       v[7] = ctx->Fog._Scale;\r
+       write_common_fixed (pro, SLANG_COMMON_FIXED_FOG, v, 0, 8 * sizeof (GLfloat));\r
 }\r
 \r
 static GLvoid\r
@@ -1046,6 +1186,24 @@ _program_GetTextureImageUsage (struct gl2_program_intf **intf, GLbitfield *texim
        /* TODO: make sure that for 0<=i<=MaxTextureImageUint bitcount(teximageuint[i])<=0 */\r
 }\r
 \r
+static GLboolean\r
+_program_IsShaderPresent (struct gl2_program_intf **intf, GLenum subtype)\r
+{\r
+       GET_CURRENT_CONTEXT(ctx);\r
+       struct gl2_program_impl *impl = (struct gl2_program_impl *) intf;\r
+       slang_program *pro = &impl->_obj.prog;\r
+\r
+       switch (subtype)\r
+       {\r
+       case GL_VERTEX_SHADER_ARB:\r
+               return pro->machines[SLANG_SHADER_VERTEX] != NULL;\r
+       case GL_FRAGMENT_SHADER_ARB:\r
+               return pro->machines[SLANG_SHADER_FRAGMENT] != NULL;\r
+       default:\r
+               return GL_FALSE;\r
+       }\r
+}\r
+\r
 static struct gl2_program_intf _program_vftbl = {\r
        {\r
                {\r
@@ -1072,7 +1230,8 @@ static struct gl2_program_intf _program_vftbl = {
        _program_UpdateFixedUniforms,\r
        _program_UpdateFixedAttribute,\r
        _program_UpdateFixedVarying,\r
-       _program_GetTextureImageUsage\r
+       _program_GetTextureImageUsage,\r
+       _program_IsShaderPresent\r
 };\r
 \r
 static void\r
index 9486f4c83049a0f3cabca41a126e3c3be14b6f44..58728377a33b11ec243d2c448ef2342c23757b7d 100755 (executable)
@@ -233,7 +233,7 @@ vec2 cos (vec2 angle) {
 }\r
 
 vec3 cos (vec3 angle) {
-    return vec2 (\r
+    return vec3 (\r
         cos (angle.x),\r
         cos (angle.y),\r
         cos (angle.z)\r
@@ -366,8 +366,7 @@ vec4 atan (vec4 y_over_x) {
 }\r
 \r
 float atan (float y, float x) {\r
-    float z;\r
-    z = atan (y / x);
+    float z = atan (y / x);
     if (x < 0.0)\r
     {\r
         if (y < 0.0)\r
@@ -721,7 +720,7 @@ vec2 min (vec2 v, vec2 u) {
 }\r
 \r
 vec3 min (vec3 v, vec3 u) {\r
-    return vec2 (\r
+    return vec3 (\r
         min (v.x, u.x),\r
         min (v.y, u.y),\r
         min (v.z, u.z)\r
@@ -886,8 +885,7 @@ vec4 step (float edge, vec4 v) {
 }\r
 
 float smoothstep (float edge0, float edge1, float x) {
-    float t;\r
-    t = clamp ((x - edge0) / (edge1 - edge0), 0.0, 1.0);
+    float t = clamp ((x - edge0) / (edge1 - edge0), 0.0, 1.0);
     return t * t * (3.0 - 2.0 * t);
 }\r
 
@@ -1048,32 +1046,28 @@ vec4 reflect (vec4 I, vec4 N) {
 }
 
 float refract (float I, float N, float eta) {
-    float k;\r
-    k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));
+    float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));
     if (k < 0.0)
         return 0.0;
     return eta * I - (eta * dot (N, I) + sqrt (k)) * N;
 }\r
 
 vec2 refract (vec2 I, vec2 N, float eta) {
-    float k;\r
-    k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\r
+    float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\r
     if (k < 0.0)\r
         return 0.0;\r
     return eta * I - (eta * dot (N, I) + sqrt (k)) * N;
 }\r
 
 vec3 refract (vec3 I, vec3 N, float eta) {
-    float k;\r
-    k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\r
+    float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\r
     if (k < 0.0)\r
         return 0.0;\r
     return eta * I - (eta * dot (N, I) + sqrt (k)) * N;
 }\r
 
 vec4 refract (vec4 I, vec4 N, float eta) {
-    float k;\r
-    k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\r
+    float k = 1.0 - eta * eta * (1.0 - dot (N, I) * dot (N, I));\r
     if (k < 0.0)\r
         return 0.0;\r
     return eta * I - (eta * dot (N, I) + sqrt (k)) * N;
index ad4f78eebf4f7d8b07a23eae45958279dc4c3d4a..836b8d4c2fed9eb735ce2b7018fa2fd4965ffab5 100644 (file)
 49,0,53,55,48,56,0,0,46,0,0,0,0,1,0,10,0,99,111,115,0,1,0,0,10,97,110,103,108,101,0,0,0,1,8,58,118,\r
 101,99,50,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,\r
 108,101,0,59,121,0,0,0,0,0,0,0,1,0,11,0,99,111,115,0,1,0,0,11,97,110,103,108,101,0,0,0,1,8,58,118,\r
-101,99,50,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,\r
+101,99,51,0,58,99,111,115,0,18,97,110,103,108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,\r
 108,101,0,59,121,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,122,0,0,0,0,0,0,0,1,0,12,0,99,\r
 111,115,0,1,0,0,12,97,110,103,108,101,0,0,0,1,8,58,118,101,99,52,0,58,99,111,115,0,18,97,110,103,\r
 108,101,0,59,120,0,0,0,0,58,99,111,115,0,18,97,110,103,108,101,0,59,121,0,0,0,0,58,99,111,115,0,18,\r
 58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,120,0,0,0,0,58,97,116,97,110,0,18,121,95,\r
 111,118,101,114,95,120,0,59,121,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,\r
 122,0,0,0,0,58,97,116,97,110,0,18,121,95,111,118,101,114,95,120,0,59,119,0,0,0,0,0,0,0,1,0,9,0,97,\r
-116,97,110,0,1,0,0,9,121,0,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,122,0,0,0,9,18,122,0,58,97,116,97,110,0,\r
-18,121,0,18,120,0,49,0,0,20,0,10,18,120,0,17,48,0,48,0,0,40,0,2,10,18,121,0,17,48,0,48,0,0,40,0,8,\r
-18,122,0,17,51,0,49,52,49,53,57,51,0,0,47,0,9,14,0,8,18,122,0,17,51,0,49,52,49,53,57,51,0,0,46,0,0,\r
-9,14,0,8,18,122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,117,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,\r
-99,50,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,117,0,\r
-59,121,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,117,0,0,1,0,0,11,118,0,\r
-0,0,1,8,58,118,101,99,51,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,\r
-116,97,110,0,18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,\r
-118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,117,0,0,1,0,0,12,118,0,0,0,1,8,58,118,\r
-101,99,52,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,\r
-117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,0,\r
-0,0,0,58,97,116,97,110,0,18,117,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,112,111,119,0,1,\r
-0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,3,2,0,9,1,112,0,0,0,4,102,108,111,97,116,95,112,111,119,101,114,\r
-0,18,112,0,0,18,120,0,0,18,121,0,0,0,8,18,112,0,0,0,1,0,10,0,112,111,119,0,1,0,0,10,118,0,0,1,0,0,\r
-10,117,0,0,0,1,8,58,118,101,99,50,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,\r
-58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,1,0,11,0,112,111,119,0,1,0,0,11,\r
-118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,51,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,\r
-120,0,0,0,0,58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,\r
-59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,112,111,119,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,\r
-0,1,8,58,118,101,99,52,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,112,111,\r
-119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,59,122,0,0,18,117,0,59,\r
-122,0,0,0,0,58,112,111,119,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,0,0,0,0,1,0,9,0,101,120,112,\r
-0,1,0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,18,120,0,0,0,0,0,1,\r
-0,10,0,101,120,112,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,55,49,56,\r
-50,56,49,56,51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,101,120,112,0,1,0,0,11,118,0,0,0,1,8,58,112,111,\r
-119,0,58,118,101,99,51,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,12,0,101,\r
-120,112,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,\r
-51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,108,111,103,50,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,\r
-102,108,111,97,116,95,108,111,103,50,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,108,111,103,\r
-50,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,\r
-111,103,50,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,108,111,103,50,0,1,0,0,11,118,0,0,0,1,8,58,118,\r
-101,99,51,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,\r
-0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,108,111,103,50,0,1,0,0,12,118,0,0,0,1,\r
-8,58,118,101,99,52,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,\r
-121,0,0,0,0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,58,108,111,103,50,0,18,118,0,59,119,0,0,0,\r
-0,0,0,0,1,0,9,0,108,111,103,0,1,0,0,9,120,0,0,0,1,8,58,108,111,103,50,0,18,120,0,0,0,58,108,111,\r
-103,50,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,49,0,0,1,0,10,0,108,111,103,0,1,0,0,10,118,0,0,0,\r
-1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,50,0,17,50,0,55,49,56,50,56,\r
-49,56,51,0,0,0,0,0,0,49,0,0,1,0,11,0,108,111,103,0,1,0,0,11,118,0,0,0,1,8,58,108,111,103,50,0,18,\r
-118,0,0,0,58,108,111,103,50,0,58,118,101,99,51,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,\r
-0,1,0,12,0,108,111,103,0,1,0,0,12,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,\r
-0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,9,0,101,120,112,50,0,1,\r
-0,0,9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,48,0,0,0,18,120,0,0,0,0,0,1,0,10,0,101,120,112,50,0,1,\r
-0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,\r
-11,0,101,120,112,50,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,51,0,17,50,0,48,0,0,0,\r
-0,0,18,118,0,0,0,0,0,1,0,12,0,101,120,112,50,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,\r
-99,52,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,58,\r
-112,111,119,0,18,120,0,0,17,48,0,53,0,0,0,0,0,0,1,0,10,0,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,\r
-58,112,111,119,0,18,118,0,0,58,118,101,99,50,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,11,0,115,113,114,116,\r
-0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,51,0,17,48,0,53,0,0,0,0,0,0,0,0,\r
-1,0,12,0,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,52,0,\r
-17,48,0,53,0,0,0,0,0,0,0,0,1,0,9,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,9,120,0,0,0,\r
-1,8,17,49,0,48,0,0,58,115,113,114,116,0,18,120,0,0,0,49,0,0,1,0,10,0,105,110,118,101,114,115,101,\r
-115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,17,49,0,48,0,0,0,0,58,115,113,114,116,\r
-0,18,118,0,0,0,49,0,0,1,0,11,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,11,118,0,0,0,1,\r
-8,58,118,101,99,51,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,12,0,105,110,\r
-118,101,114,115,101,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,17,49,0,48,0,0,0,0,\r
-58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,9,0,97,98,115,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,\r
-0,48,0,0,43,18,120,0,18,120,0,54,31,0,0,1,0,10,0,97,98,115,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,\r
-50,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,\r
-97,98,115,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,\r
-98,115,0,18,118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,98,115,0,\r
-1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,\r
+116,97,110,0,1,0,0,9,121,0,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,122,0,2,58,97,116,97,110,0,18,121,0,18,\r
+120,0,49,0,0,0,0,10,18,120,0,17,48,0,48,0,0,40,0,2,10,18,121,0,17,48,0,48,0,0,40,0,8,18,122,0,17,\r
+51,0,49,52,49,53,57,51,0,0,47,0,9,14,0,8,18,122,0,17,51,0,49,52,49,53,57,51,0,0,46,0,0,9,14,0,8,18,\r
+122,0,0,0,1,0,10,0,97,116,97,110,0,1,0,0,10,117,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,\r
+97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,117,0,59,121,0,0,\r
+18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,116,97,110,0,1,0,0,11,117,0,0,1,0,0,11,118,0,0,0,1,8,58,\r
+118,101,99,51,0,58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,\r
+18,117,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,\r
+0,0,0,0,0,0,0,1,0,12,0,97,116,97,110,0,1,0,0,12,117,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,\r
+58,97,116,97,110,0,18,117,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,97,116,97,110,0,18,117,0,59,121,\r
+0,0,18,118,0,59,121,0,0,0,0,58,97,116,97,110,0,18,117,0,59,122,0,0,18,118,0,59,122,0,0,0,0,58,97,\r
+116,97,110,0,18,117,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,112,111,119,0,1,0,0,9,120,0,\r
+0,1,0,0,9,121,0,0,0,1,3,2,0,9,1,112,0,0,0,4,102,108,111,97,116,95,112,111,119,101,114,0,18,112,0,0,\r
+18,120,0,0,18,121,0,0,0,8,18,112,0,0,0,1,0,10,0,112,111,119,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,\r
+1,8,58,118,101,99,50,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,112,111,119,\r
+0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,1,0,11,0,112,111,119,0,1,0,0,11,118,0,0,1,0,0,\r
+11,117,0,0,0,1,8,58,118,101,99,51,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,\r
+58,112,111,119,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,59,122,0,0,\r
+18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,112,111,119,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,\r
+118,101,99,52,0,58,112,111,119,0,18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,112,111,119,0,18,\r
+118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,58,112,111,119,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,\r
+0,0,58,112,111,119,0,18,118,0,59,119,0,0,18,117,0,59,119,0,0,0,0,0,0,0,1,0,9,0,101,120,112,0,1,0,0,\r
+9,120,0,0,0,1,8,58,112,111,119,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,18,120,0,0,0,0,0,1,0,10,0,\r
+101,120,112,0,1,0,0,10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,55,49,56,50,56,49,\r
+56,51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,0,101,120,112,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,58,\r
+118,101,99,51,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,18,118,0,0,0,0,0,1,0,12,0,101,120,112,0,\r
+1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,\r
+0,18,118,0,0,0,0,0,1,0,9,0,108,111,103,50,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,121,0,0,0,4,102,108,111,\r
+97,116,95,108,111,103,50,0,18,121,0,0,18,120,0,0,0,8,18,121,0,0,0,1,0,10,0,108,111,103,50,0,1,0,0,\r
+10,118,0,0,0,1,8,58,118,101,99,50,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,\r
+0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,108,111,103,50,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,\r
+0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,0,58,108,\r
+111,103,50,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,108,111,103,50,0,1,0,0,12,118,0,0,0,1,8,58,118,\r
+101,99,52,0,58,108,111,103,50,0,18,118,0,59,120,0,0,0,0,58,108,111,103,50,0,18,118,0,59,121,0,0,0,\r
+0,58,108,111,103,50,0,18,118,0,59,122,0,0,0,0,58,108,111,103,50,0,18,118,0,59,119,0,0,0,0,0,0,0,1,\r
+0,9,0,108,111,103,0,1,0,0,9,120,0,0,0,1,8,58,108,111,103,50,0,18,120,0,0,0,58,108,111,103,50,0,17,\r
+50,0,55,49,56,50,56,49,56,51,0,0,0,0,49,0,0,1,0,10,0,108,111,103,0,1,0,0,10,118,0,0,0,1,8,58,108,\r
+111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,101,99,50,0,17,50,0,55,49,56,50,56,49,56,51,0,\r
+0,0,0,0,0,49,0,0,1,0,11,0,108,111,103,0,1,0,0,11,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,\r
+108,111,103,50,0,58,118,101,99,51,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,12,0,\r
+108,111,103,0,1,0,0,12,118,0,0,0,1,8,58,108,111,103,50,0,18,118,0,0,0,58,108,111,103,50,0,58,118,\r
+101,99,52,0,17,50,0,55,49,56,50,56,49,56,51,0,0,0,0,0,0,49,0,0,1,0,9,0,101,120,112,50,0,1,0,0,9,\r
+120,0,0,0,1,8,58,112,111,119,0,17,50,0,48,0,0,0,18,120,0,0,0,0,0,1,0,10,0,101,120,112,50,0,1,0,0,\r
+10,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,50,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,11,\r
+0,101,120,112,50,0,1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,51,0,17,50,0,48,0,0,0,0,0,\r
+18,118,0,0,0,0,0,1,0,12,0,101,120,112,50,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,58,118,101,99,\r
+52,0,17,50,0,48,0,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,115,113,114,116,0,1,0,0,9,120,0,0,0,1,8,58,112,\r
+111,119,0,18,120,0,0,17,48,0,53,0,0,0,0,0,0,1,0,10,0,115,113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,\r
+112,111,119,0,18,118,0,0,58,118,101,99,50,0,17,48,0,53,0,0,0,0,0,0,0,0,1,0,11,0,115,113,114,116,0,\r
+1,0,0,11,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,51,0,17,48,0,53,0,0,0,0,0,0,0,0,1,\r
+0,12,0,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,112,111,119,0,18,118,0,0,58,118,101,99,52,0,17,\r
+48,0,53,0,0,0,0,0,0,0,0,1,0,9,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,9,120,0,0,0,1,\r
+8,17,49,0,48,0,0,58,115,113,114,116,0,18,120,0,0,0,49,0,0,1,0,10,0,105,110,118,101,114,115,101,115,\r
+113,114,116,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,\r
+118,0,0,0,49,0,0,1,0,11,0,105,110,118,101,114,115,101,115,113,114,116,0,1,0,0,11,118,0,0,0,1,8,58,\r
+118,101,99,51,0,17,49,0,48,0,0,0,0,58,115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,12,0,105,110,118,\r
+101,114,115,101,115,113,114,116,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,17,49,0,48,0,0,0,0,58,\r
+115,113,114,116,0,18,118,0,0,0,49,0,0,1,0,9,0,97,98,115,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,\r
+48,0,0,43,18,120,0,18,120,0,54,31,0,0,1,0,10,0,97,98,115,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,\r
+0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,97,\r
+98,115,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,\r
+115,0,18,118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,97,98,115,0,1,\r
+0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,97,98,115,0,18,118,0,59,120,0,0,0,0,58,97,98,115,0,18,\r
 118,0,59,121,0,0,0,0,58,97,98,115,0,18,118,0,59,122,0,0,0,0,58,97,98,115,0,18,118,0,59,119,0,0,0,0,\r
 0,0,0,1,0,9,0,115,105,103,110,0,1,0,0,9,120,0,0,0,1,8,18,120,0,17,48,0,48,0,0,41,17,49,0,48,0,0,18,\r
 120,0,17,48,0,48,0,0,40,17,49,0,48,0,0,54,17,48,0,48,0,0,31,31,0,0,1,0,10,0,115,105,103,110,0,1,0,\r
 0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,40,18,120,0,18,121,0,31,0,0,1,0,10,0,109,\r
 105,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,118,101,99,50,0,58,109,105,110,0,18,118,0,59,\r
 120,0,0,18,117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,0,0,0,0,0,0,\r
-1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,50,0,58,109,105,110,0,\r
+1,0,11,0,109,105,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,51,0,58,109,105,110,0,\r
 18,118,0,59,120,0,0,18,117,0,59,120,0,0,0,0,58,109,105,110,0,18,118,0,59,121,0,0,18,117,0,59,121,0,\r
 0,0,0,58,109,105,110,0,18,118,0,59,122,0,0,18,117,0,59,122,0,0,0,0,0,0,0,1,0,12,0,109,105,110,0,1,\r
 0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,118,101,99,52,0,58,109,105,110,0,18,118,0,59,120,0,0,18,\r
 18,118,0,0,0,0,0,1,0,12,0,115,116,101,112,0,1,0,0,9,101,100,103,101,0,0,1,0,0,12,118,0,0,0,1,8,58,\r
 115,116,101,112,0,58,118,101,99,52,0,18,101,100,103,101,0,0,0,0,18,118,0,0,0,0,0,1,0,9,0,115,109,\r
 111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,\r
-0,0,9,120,0,0,0,1,3,2,0,9,1,116,0,0,0,9,18,116,0,58,99,108,97,109,112,0,18,120,0,18,101,100,103,\r
-101,48,0,47,18,101,100,103,101,49,0,18,101,100,103,101,48,0,47,49,0,17,48,0,48,0,0,0,17,49,0,48,0,\r
-0,0,0,20,0,8,18,116,0,18,116,0,48,17,51,0,48,0,0,17,50,0,48,0,0,18,116,0,48,47,48,0,0,1,0,10,0,115,\r
-109,111,111,116,104,115,116,101,112,0,1,0,0,10,101,100,103,101,48,0,0,1,0,0,10,101,100,103,101,49,\r
-0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,\r
-100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,\r
-111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,\r
-121,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,11,\r
-101,100,103,101,48,0,0,1,0,0,11,101,100,103,101,49,0,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,\r
-58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,\r
-49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,\r
-103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,\r
-111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,\r
-0,18,118,0,59,122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,12,101,\r
-100,103,101,48,0,0,1,0,0,12,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,\r
-115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,\r
-0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,\r
-101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,\r
-116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,0,18,\r
-118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,119,0,\r
-0,18,101,100,103,101,49,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,10,0,115,109,111,111,116,\r
-104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,10,118,0,\r
-0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,\r
-18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,\r
-101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,\r
-111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,\r
-0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,\r
-103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,\r
-116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,58,115,\r
-109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,\r
-59,122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,\r
-0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,109,111,111,\r
-116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,\r
-0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,\r
-0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,\r
-18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,\r
-101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,100,111,116,\r
-0,1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,48,0,0,1,0,9,0,100,111,116,0,1,0,0,10,\r
-118,0,0,1,0,0,10,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,\r
-59,121,0,48,46,0,0,1,0,9,0,100,111,116,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,59,120,0,\r
-18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,\r
-48,46,0,0,1,0,9,0,100,111,116,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,\r
-59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,18,\r
-118,0,59,119,0,18,117,0,59,119,0,48,46,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,9,120,0,0,0,1,8,\r
-58,115,113,114,116,0,58,100,111,116,0,18,120,0,0,18,120,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,\r
-104,0,1,0,0,10,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,\r
-1,0,9,0,108,101,110,103,116,104,0,1,0,0,11,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,\r
-118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,12,118,0,0,0,1,8,58,115,113,\r
-114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,\r
-1,0,0,9,120,0,0,1,0,0,9,121,0,0,0,1,8,58,108,101,110,103,116,104,0,18,120,0,18,121,0,47,0,0,0,0,1,\r
-0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,108,101,110,103,\r
-116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,11,118,0,0,1,\r
-0,0,11,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,\r
-116,97,110,99,101,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,\r
-18,117,0,47,0,0,0,0,1,0,11,0,99,114,111,115,115,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,\r
-101,99,51,0,18,118,0,59,121,0,18,117,0,59,122,0,48,18,117,0,59,121,0,18,118,0,59,122,0,48,47,0,18,\r
-118,0,59,122,0,18,117,0,59,120,0,48,18,117,0,59,122,0,18,118,0,59,120,0,48,47,0,18,118,0,59,120,0,\r
-18,117,0,59,121,0,48,18,117,0,59,120,0,18,118,0,59,121,0,48,47,0,0,0,0,1,0,9,0,110,111,114,109,97,\r
-108,105,122,101,0,1,0,0,9,120,0,0,0,1,8,17,49,0,48,0,0,0,0,1,0,10,0,110,111,114,109,97,108,105,122,\r
-101,0,1,0,0,10,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,11,0,\r
-110,111,114,109,97,108,105,122,101,0,1,0,0,11,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,\r
-18,118,0,0,0,49,0,0,1,0,12,0,110,111,114,109,97,108,105,122,101,0,1,0,0,12,118,0,0,0,1,8,18,118,0,\r
-58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,9,0,102,97,99,101,102,111,114,119,97,114,100,\r
-0,1,0,0,9,78,0,0,1,0,0,9,73,0,0,1,0,0,9,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,\r
-102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,10,0,102,97,99,101,102,111,114,\r
-119,97,114,100,0,1,0,0,10,78,0,0,1,0,0,10,73,0,0,1,0,0,10,78,114,101,102,0,0,0,1,8,58,100,111,116,\r
-0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,11,0,102,97,99,\r
-101,102,111,114,119,97,114,100,0,1,0,0,11,78,0,0,1,0,0,11,73,0,0,1,0,0,11,78,114,101,102,0,0,0,1,8,\r
-58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,\r
-12,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,12,78,0,0,1,0,0,12,73,0,0,1,0,0,12,78,114,\r
-101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,\r
-78,0,54,31,0,0,1,0,9,0,114,101,102,108,101,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,0,1,8,18,73,0,17,\r
-50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,10,0,114,101,102,108,\r
-101,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,\r
-0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,11,0,114,101,102,108,101,99,116,0,1,0,0,11,73,0,0,1,0,0,11,\r
-78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,\r
-0,12,0,114,101,102,108,101,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,\r
-58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,9,0,114,101,102,114,97,99,116,0,1,\r
-0,0,9,73,0,0,1,0,0,9,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,\r
-0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,\r
-111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,\r
-0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,\r
-115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,10,0,114,101,102,114,97,99,116,0,1,0,0,10,\r
-73,0,0,1,0,0,10,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,\r
-101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,\r
-116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,\r
-14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,\r
-113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,11,0,114,101,102,114,97,99,116,0,1,0,0,11,73,0,\r
-0,1,0,0,11,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,\r
-116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,\r
-18,78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,\r
-18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,\r
-114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,12,0,114,101,102,114,97,99,116,0,1,0,0,12,73,0,0,1,\r
-0,0,12,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,0,0,9,18,107,0,17,49,0,48,0,0,18,101,116,\r
-97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,\r
-78,0,0,18,73,0,0,0,48,47,48,47,20,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,\r
-101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,\r
-116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,13,0,109,97,116,114,105,120,67,111,109,112,77,117,108,\r
-116,0,1,0,0,13,109,0,0,1,0,0,13,110,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,18,110,0,16,\r
-8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,0,0,0,1,0,14,0,109,97,116,114,\r
-105,120,67,111,109,112,77,117,108,116,0,1,0,0,14,109,0,0,1,0,0,14,110,0,0,0,1,8,58,109,97,116,51,0,\r
-18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,\r
-0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,0,0,0,0,1,0,15,0,109,97,116,114,105,120,67,111,\r
-109,112,77,117,108,116,0,1,0,0,15,109,0,0,1,0,0,15,110,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,\r
-48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,18,109,0,16,\r
-10,50,0,57,18,110,0,16,10,50,0,57,48,0,18,109,0,16,10,51,0,57,18,110,0,16,10,51,0,57,48,0,0,0,0,1,\r
-0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,\r
-0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,0,0,0,1,0,3,0,\r
-108,101,115,115,84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,\r
-118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,0,\r
-18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,\r
-0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,118,0,59,119,0,18,117,0,59,119,0,40,0,\r
-0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,\r
-99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,0,0,0,1,\r
-0,3,0,108,101,115,115,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,\r
-18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,\r
-0,18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,\r
-0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,118,0,59,119,0,18,117,0,59,119,0,40,0,\r
-0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,\r
-0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,\r
-121,0,42,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,\r
-11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,\r
+0,0,9,120,0,0,0,1,3,2,0,9,1,116,0,2,58,99,108,97,109,112,0,18,120,0,18,101,100,103,101,48,0,47,18,\r
+101,100,103,101,49,0,18,101,100,103,101,48,0,47,49,0,17,48,0,48,0,0,0,17,49,0,48,0,0,0,0,0,0,8,18,\r
+116,0,18,116,0,48,17,51,0,48,0,0,17,50,0,48,0,0,18,116,0,48,47,48,0,0,1,0,10,0,115,109,111,111,116,\r
+104,115,116,101,112,0,1,0,0,10,101,100,103,101,48,0,0,1,0,0,10,101,100,103,101,49,0,0,1,0,0,10,118,\r
+0,0,0,1,8,58,118,101,99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,\r
+59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,\r
+115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,\r
+59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,11,101,100,103,101,\r
+48,0,0,1,0,0,11,101,100,103,101,49,0,0,1,0,0,11,118,0,0,0,1,8,58,118,101,99,51,0,58,115,109,111,\r
+111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,\r
+0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,\r
+121,0,0,18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,116,104,115,\r
+116,101,112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,0,18,118,0,59,\r
+122,0,0,0,0,0,0,0,1,0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,12,101,100,103,101,48,0,\r
+0,1,0,0,12,101,100,103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,109,111,111,116,\r
+104,115,116,101,112,0,18,101,100,103,101,48,0,59,120,0,0,18,101,100,103,101,49,0,59,120,0,0,18,118,\r
+0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,121,0,0,\r
+18,101,100,103,101,49,0,59,121,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,116,104,115,116,101,\r
+112,0,18,101,100,103,101,48,0,59,122,0,0,18,101,100,103,101,49,0,59,122,0,0,18,118,0,59,122,0,0,0,\r
+0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,59,119,0,0,18,101,100,103,\r
+101,49,0,59,119,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,10,0,115,109,111,111,116,104,115,116,101,112,\r
+0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,10,118,0,0,0,1,8,58,118,101,\r
+99,50,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,\r
+49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,\r
+0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,0,0,0,1,0,11,0,115,109,111,111,116,104,115,\r
+116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,103,101,49,0,0,1,0,0,11,118,0,0,0,1,8,\r
+58,118,101,99,51,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,\r
+100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,\r
+103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,0,0,0,0,58,115,109,111,111,116,104,115,\r
+116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,122,0,0,0,0,0,0,0,1,\r
+0,12,0,115,109,111,111,116,104,115,116,101,112,0,1,0,0,9,101,100,103,101,48,0,0,1,0,0,9,101,100,\r
+103,101,49,0,0,1,0,0,12,118,0,0,0,1,8,58,118,101,99,52,0,58,115,109,111,111,116,104,115,116,101,\r
+112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,120,0,0,0,0,58,115,109,111,\r
+111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,49,0,0,18,118,0,59,121,\r
+0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,0,0,18,101,100,103,101,\r
+49,0,0,18,118,0,59,122,0,0,0,0,58,115,109,111,111,116,104,115,116,101,112,0,18,101,100,103,101,48,\r
+0,0,18,101,100,103,101,49,0,0,18,118,0,59,119,0,0,0,0,0,0,0,1,0,9,0,100,111,116,0,1,0,0,9,120,0,0,\r
+1,0,0,9,121,0,0,0,1,8,18,120,0,18,121,0,48,0,0,1,0,9,0,100,111,116,0,1,0,0,10,118,0,0,1,0,0,10,117,\r
+0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,118,0,59,121,0,18,117,0,59,121,0,48,46,0,0,1,0,\r
+9,0,100,111,116,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,\r
+18,118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,0,0,1,0,9,0,\r
+100,111,116,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,18,118,0,59,120,0,18,117,0,59,120,0,48,18,\r
+118,0,59,121,0,18,117,0,59,121,0,48,46,18,118,0,59,122,0,18,117,0,59,122,0,48,46,18,118,0,59,119,0,\r
+18,117,0,59,119,0,48,46,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,9,120,0,0,0,1,8,58,115,113,114,\r
+116,0,58,100,111,116,0,18,120,0,0,18,120,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,10,\r
+118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,108,\r
+101,110,103,116,104,0,1,0,0,11,118,0,0,0,1,8,58,115,113,114,116,0,58,100,111,116,0,18,118,0,0,18,\r
+118,0,0,0,0,0,0,0,1,0,9,0,108,101,110,103,116,104,0,1,0,0,12,118,0,0,0,1,8,58,115,113,114,116,0,58,\r
+100,111,116,0,18,118,0,0,18,118,0,0,0,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,9,120,\r
+0,0,1,0,0,9,121,0,0,0,1,8,58,108,101,110,103,116,104,0,18,120,0,18,121,0,47,0,0,0,0,1,0,9,0,100,\r
+105,115,116,97,110,99,101,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,108,101,110,103,116,104,0,\r
+18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,99,101,0,1,0,0,11,118,0,0,1,0,0,11,117,\r
+0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,0,0,0,0,1,0,9,0,100,105,115,116,97,110,\r
+99,101,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,108,101,110,103,116,104,0,18,118,0,18,117,0,47,\r
+0,0,0,0,1,0,11,0,99,114,111,115,115,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,118,101,99,51,0,\r
+18,118,0,59,121,0,18,117,0,59,122,0,48,18,117,0,59,121,0,18,118,0,59,122,0,48,47,0,18,118,0,59,122,\r
+0,18,117,0,59,120,0,48,18,117,0,59,122,0,18,118,0,59,120,0,48,47,0,18,118,0,59,120,0,18,117,0,59,\r
+121,0,48,18,117,0,59,120,0,18,118,0,59,121,0,48,47,0,0,0,0,1,0,9,0,110,111,114,109,97,108,105,122,\r
+101,0,1,0,0,9,120,0,0,0,1,8,17,49,0,48,0,0,0,0,1,0,10,0,110,111,114,109,97,108,105,122,101,0,1,0,0,\r
+10,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,11,0,110,111,114,\r
+109,97,108,105,122,101,0,1,0,0,11,118,0,0,0,1,8,18,118,0,58,108,101,110,103,116,104,0,18,118,0,0,0,\r
+49,0,0,1,0,12,0,110,111,114,109,97,108,105,122,101,0,1,0,0,12,118,0,0,0,1,8,18,118,0,58,108,101,\r
+110,103,116,104,0,18,118,0,0,0,49,0,0,1,0,9,0,102,97,99,101,102,111,114,119,97,114,100,0,1,0,0,9,\r
+78,0,0,1,0,0,9,73,0,0,1,0,0,9,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,\r
+73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,10,0,102,97,99,101,102,111,114,119,97,114,\r
+100,0,1,0,0,10,78,0,0,1,0,0,10,73,0,0,1,0,0,10,78,114,101,102,0,0,0,1,8,58,100,111,116,0,18,78,114,\r
+101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,11,0,102,97,99,101,102,111,\r
+114,119,97,114,100,0,1,0,0,11,78,0,0,1,0,0,11,73,0,0,1,0,0,11,78,114,101,102,0,0,0,1,8,58,100,111,\r
+116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,0,1,0,12,0,102,\r
+97,99,101,102,111,114,119,97,114,100,0,1,0,0,12,78,0,0,1,0,0,12,73,0,0,1,0,0,12,78,114,101,102,0,0,\r
+0,1,8,58,100,111,116,0,18,78,114,101,102,0,0,18,73,0,0,0,17,48,0,48,0,0,40,18,78,0,18,78,0,54,31,0,\r
+0,1,0,9,0,114,101,102,108,101,99,116,0,1,0,0,9,73,0,0,1,0,0,9,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,\r
+58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,10,0,114,101,102,108,101,99,116,0,\r
+1,0,0,10,73,0,0,1,0,0,10,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,\r
+0,48,18,78,0,48,47,0,0,1,0,11,0,114,101,102,108,101,99,116,0,1,0,0,11,73,0,0,1,0,0,11,78,0,0,0,1,8,\r
+18,73,0,17,50,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,12,0,114,\r
+101,102,108,101,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,0,1,8,18,73,0,17,50,0,48,0,0,58,100,111,\r
+116,0,18,78,0,0,18,73,0,0,0,48,18,78,0,48,47,0,0,1,0,9,0,114,101,102,114,97,99,116,0,1,0,0,9,73,0,\r
+0,1,0,0,9,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,2,17,49,0,48,0,0,18,101,116,97,0,18,\r
+101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,\r
+18,73,0,0,0,48,47,48,47,0,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,\r
+97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,\r
+107,0,0,0,46,18,78,0,48,47,0,0,1,0,10,0,114,101,102,114,97,99,116,0,1,0,0,10,73,0,0,1,0,0,10,78,0,\r
+0,1,0,0,9,101,116,97,0,0,0,1,3,2,0,9,1,107,0,2,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,\r
+17,49,0,48,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,\r
+48,47,0,0,10,18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,\r
+18,101,116,97,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,\r
+78,0,48,47,0,0,1,0,11,0,114,101,102,114,97,99,116,0,1,0,0,11,73,0,0,1,0,0,11,78,0,0,1,0,0,9,101,\r
+116,97,0,0,0,1,3,2,0,9,1,107,0,2,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,\r
+58,100,111,116,0,18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,0,0,10,\r
+18,107,0,17,48,0,48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,\r
+0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,\r
+1,0,12,0,114,101,102,114,97,99,116,0,1,0,0,12,73,0,0,1,0,0,12,78,0,0,1,0,0,9,101,116,97,0,0,0,1,3,\r
+2,0,9,1,107,0,2,17,49,0,48,0,0,18,101,116,97,0,18,101,116,97,0,48,17,49,0,48,0,0,58,100,111,116,0,\r
+18,78,0,0,18,73,0,0,0,58,100,111,116,0,18,78,0,0,18,73,0,0,0,48,47,48,47,0,0,10,18,107,0,17,48,0,\r
+48,0,0,40,0,8,17,48,0,48,0,0,0,9,14,0,8,18,101,116,97,0,18,73,0,48,18,101,116,97,0,58,100,111,116,\r
+0,18,78,0,0,18,73,0,0,0,48,58,115,113,114,116,0,18,107,0,0,0,46,18,78,0,48,47,0,0,1,0,13,0,109,97,\r
+116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,13,109,0,0,1,0,0,13,110,0,0,0,1,8,58,109,97,\r
+116,50,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,18,110,0,16,10,49,\r
+0,57,48,0,0,0,0,1,0,14,0,109,97,116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,14,109,0,0,1,\r
+0,0,14,110,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,\r
+16,10,49,0,57,18,110,0,16,10,49,0,57,48,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,0,0,0,0,\r
+1,0,15,0,109,97,116,114,105,120,67,111,109,112,77,117,108,116,0,1,0,0,15,109,0,0,1,0,0,15,110,0,0,\r
+0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,18,110,0,16,8,48,0,57,48,0,18,109,0,16,10,49,0,57,\r
+18,110,0,16,10,49,0,57,48,0,18,109,0,16,10,50,0,57,18,110,0,16,10,50,0,57,48,0,18,109,0,16,10,51,0,\r
+57,18,110,0,16,10,51,0,57,48,0,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,10,118,0,0,1,0,\r
+0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,\r
+0,18,117,0,59,121,0,40,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,\r
+117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,\r
+97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,\r
+59,120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,\r
+118,0,59,119,0,18,117,0,59,119,0,40,0,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,0,1,0,0,6,118,0,\r
+0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,\r
+121,0,18,117,0,59,121,0,40,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,\r
+117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,40,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,0,0,0,1,0,4,0,108,101,115,115,84,104,\r
+97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,40,0,18,118,0,59,121,0,18,117,0,59,121,0,40,0,18,118,0,59,122,0,18,117,0,59,122,0,40,0,18,\r
+118,0,59,119,0,18,117,0,59,119,0,40,0,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,\r
+108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,\r
+120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,\r
+113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,\r
+18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,\r
+0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,\r
+117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,18,118,0,59,119,0,18,117,0,59,119,0,\r
+42,0,0,0,0,1,0,2,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,\r
+0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,\r
+59,121,0,42,0,0,0,0,1,0,3,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,\r
+0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,\r
 18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,\r
-104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,\r
-118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,\r
-18,117,0,59,122,0,42,0,18,118,0,59,119,0,18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,108,101,115,115,84,\r
-104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,0,0,0,1,0,3,0,108,101,\r
-115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,\r
-51,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,\r
-122,0,18,117,0,59,122,0,42,0,0,0,0,1,0,4,0,108,101,115,115,84,104,97,110,69,113,117,97,108,0,1,0,0,\r
-8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,42,0,18,\r
-118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,117,0,59,122,0,42,0,18,118,0,59,119,0,\r
-18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,10,118,0,0,1,\r
-0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,\r
-121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,11,118,\r
-0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,\r
-59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,\r
-97,116,101,114,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,\r
-118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,\r
-18,117,0,59,122,0,41,0,18,118,0,59,119,0,18,117,0,59,119,0,41,0,0,0,0,1,0,2,0,103,114,101,97,116,\r
-101,114,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,\r
-120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,\r
-116,101,114,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,\r
-59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,\r
-0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,\r
+104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,\r
+0,59,120,0,18,117,0,59,120,0,42,0,18,118,0,59,121,0,18,117,0,59,121,0,42,0,18,118,0,59,122,0,18,\r
+117,0,59,122,0,42,0,18,118,0,59,119,0,18,117,0,59,119,0,42,0,0,0,0,1,0,2,0,103,114,101,97,116,101,\r
+114,84,104,97,110,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,\r
+0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,0,0,0,1,0,3,0,103,114,101,97,116,\r
+101,114,84,104,97,110,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,\r
+120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,\r
+59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,12,118,0,0,1,0,0,12,\r
 117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,\r
 117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,18,118,0,59,119,0,18,117,0,59,119,0,\r
-41,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,10,118,0,0,1,\r
-0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,\r
-121,0,18,117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,\r
-108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,\r
-120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,0,0,0,\r
-1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,\r
-0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,119,0,18,117,0,59,119,0,43,0,\r
-0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,\r
-117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,\r
-117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,\r
-0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,\r
-18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,0,0,0,1,0,4,0,\r
-103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,\r
-58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,\r
-43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,119,0,18,117,0,59,119,0,43,0,0,0,0,1,0,2,\r
-0,101,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,\r
-120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,\r
-108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,\r
-120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,\r
-1,0,4,0,101,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,\r
-0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,\r
-117,0,59,122,0,38,0,18,118,0,59,119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,101,113,117,97,108,0,1,\r
-0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,\r
-18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,\r
-7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,\r
-18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,1,0,4,0,101,113,117,97,108,0,\r
-1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,38,\r
-0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,18,118,0,59,\r
-119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,\r
-10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,\r
-18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,\r
-0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,\r
-0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,\r
+41,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,\r
+8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,\r
+0,41,0,0,0,0,1,0,3,0,103,114,101,97,116,101,114,84,104,97,110,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,\r
+1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,\r
+121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,\r
+104,97,110,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,\r
+0,59,120,0,41,0,18,118,0,59,121,0,18,117,0,59,121,0,41,0,18,118,0,59,122,0,18,117,0,59,122,0,41,0,\r
+18,118,0,59,119,0,18,117,0,59,119,0,41,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,\r
+113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,\r
+18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,\r
+101,114,84,104,97,110,69,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,\r
+51,0,18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,\r
+122,0,18,117,0,59,122,0,43,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,\r
 108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,\r
-120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,\r
-118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,2,0,110,111,116,69,113,117,97,108,0,1,0,0,6,118,0,\r
-0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,\r
-121,0,18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,\r
-117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,\r
-117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,\r
-97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,\r
-120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,\r
-118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,1,0,97,110,121,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,\r
-120,0,18,118,0,59,121,0,32,0,0,1,0,1,0,97,110,121,0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,\r
-0,59,121,0,32,18,118,0,59,122,0,32,0,0,1,0,1,0,97,110,121,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,\r
-0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,18,118,0,59,119,0,32,0,0,1,0,1,0,97,108,108,0,1,0,0,2,\r
-118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,3,118,0,0,0,1,\r
-8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,122,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,4,118,\r
-0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,59,122,0,34,18,118,0,59,119,0,34,0,0,1,0,\r
-2,0,110,111,116,0,1,0,0,2,118,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,56,0,18,118,0,59,\r
-121,0,56,0,0,0,0,1,0,3,0,110,111,116,0,1,0,0,3,118,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,\r
-0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,0,0,0,1,0,4,0,110,111,116,0,1,0,0,4,118,0,0,0,\r
-1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,18,\r
-118,0,59,119,0,56,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,0,1,0,0,16,115,97,109,112,108,\r
-101,114,0,0,1,0,0,9,99,111,111,114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,\r
-52,95,116,101,120,49,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,\r
-111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,114,\r
-101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,\r
-0,1,8,58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,\r
-100,0,59,115,0,18,99,111,111,114,100,0,59,116,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,\r
-68,80,114,111,106,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,\r
-58,116,101,120,116,117,114,101,49,68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,\r
-59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,0,\r
-1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,0,1,3,2,0,12,1,116,101,120,\r
-101,108,0,0,0,4,118,101,99,52,95,116,101,120,50,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,\r
-108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,\r
-0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,\r
-11,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,\r
-114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,0,\r
-18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,0,0,0,1,0,12,0,116,101,\r
-120,116,117,114,101,50,68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,\r
-111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,58,\r
-118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,\r
-111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,116,101,120,116,\r
-117,114,101,51,68,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,\r
-2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,116,101,120,51,100,0,18,116,101,120,101,108,\r
-0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,\r
-120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,\r
-112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,0,\r
-18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,\r
-111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,\r
-18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,116,101,\r
-120,116,117,114,101,67,117,98,101,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,\r
-114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,116,101,120,99,117,98,101,\r
-0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,\r
-48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,0,1,0,0,20,115,97,\r
+120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,\r
+118,0,59,119,0,18,117,0,59,119,0,43,0,0,0,0,1,0,2,0,103,114,101,97,116,101,114,84,104,97,110,69,\r
+113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,\r
+117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,0,0,0,1,0,3,0,103,114,101,97,116,101,\r
+114,84,104,97,110,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,\r
+18,118,0,59,120,0,18,117,0,59,120,0,43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,\r
+0,18,117,0,59,122,0,43,0,0,0,0,1,0,4,0,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,\r
+0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,\r
+43,0,18,118,0,59,121,0,18,117,0,59,121,0,43,0,18,118,0,59,122,0,18,117,0,59,122,0,43,0,18,118,0,59,\r
+119,0,18,117,0,59,119,0,43,0,0,0,0,1,0,2,0,101,113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,\r
+0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,\r
+121,0,38,0,0,0,0,1,0,3,0,101,113,117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,\r
+101,99,51,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,\r
+118,0,59,122,0,18,117,0,59,122,0,38,0,0,0,0,1,0,4,0,101,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,\r
+117,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,\r
+117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,0,38,0,18,118,0,59,119,0,18,117,0,59,119,0,\r
+38,0,0,0,0,1,0,2,0,101,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,\r
+0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,0,0,0,1,0,3,0,\r
+101,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,\r
+18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,122,0,18,117,0,59,122,\r
+0,38,0,0,0,0,1,0,4,0,101,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,58,98,118,101,99,\r
+52,0,18,118,0,59,120,0,18,117,0,59,120,0,38,0,18,118,0,59,121,0,18,117,0,59,121,0,38,0,18,118,0,59,\r
+122,0,18,117,0,59,122,0,38,0,18,118,0,59,119,0,18,117,0,59,119,0,38,0,0,0,0,1,0,2,0,110,111,116,69,\r
+113,117,97,108,0,1,0,0,10,118,0,0,1,0,0,10,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,0,59,120,0,\r
+18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,116,69,113,\r
+117,97,108,0,1,0,0,11,118,0,0,1,0,0,11,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,18,\r
+117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,59,122,0,\r
+39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,0,0,12,118,0,0,1,0,0,12,117,0,0,0,1,8,58,98,\r
+118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,\r
+18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,2,0,\r
+110,111,116,69,113,117,97,108,0,1,0,0,6,118,0,0,1,0,0,6,117,0,0,0,1,8,58,98,118,101,99,50,0,18,118,\r
+0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,0,0,0,1,0,3,0,110,111,\r
+116,69,113,117,97,108,0,1,0,0,7,118,0,0,1,0,0,7,117,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,\r
+120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,39,0,18,118,0,59,122,0,18,117,0,\r
+59,122,0,39,0,0,0,0,1,0,4,0,110,111,116,69,113,117,97,108,0,1,0,0,8,118,0,0,1,0,0,8,117,0,0,0,1,8,\r
+58,98,118,101,99,52,0,18,118,0,59,120,0,18,117,0,59,120,0,39,0,18,118,0,59,121,0,18,117,0,59,121,0,\r
+39,0,18,118,0,59,122,0,18,117,0,59,122,0,39,0,18,118,0,59,119,0,18,117,0,59,119,0,39,0,0,0,0,1,0,1,\r
+0,97,110,121,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,0,0,1,0,1,0,97,110,121,\r
+0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,0,0,1,0,1,0,97,\r
+110,121,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,32,18,118,0,59,122,0,32,18,118,\r
+0,59,119,0,32,0,0,1,0,1,0,97,108,108,0,1,0,0,2,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,\r
+34,0,0,1,0,1,0,97,108,108,0,1,0,0,3,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,18,118,0,\r
+59,122,0,34,0,0,1,0,1,0,97,108,108,0,1,0,0,4,118,0,0,0,1,8,18,118,0,59,120,0,18,118,0,59,121,0,34,\r
+18,118,0,59,122,0,34,18,118,0,59,119,0,34,0,0,1,0,2,0,110,111,116,0,1,0,0,2,118,0,0,0,1,8,58,98,\r
+118,101,99,50,0,18,118,0,59,120,0,56,0,18,118,0,59,121,0,56,0,0,0,0,1,0,3,0,110,111,116,0,1,0,0,3,\r
+118,0,0,0,1,8,58,98,118,101,99,51,0,18,118,0,59,120,0,56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,\r
+0,56,0,0,0,0,1,0,4,0,110,111,116,0,1,0,0,4,118,0,0,0,1,8,58,98,118,101,99,52,0,18,118,0,59,120,0,\r
+56,0,18,118,0,59,121,0,56,0,18,118,0,59,122,0,56,0,18,118,0,59,119,0,56,0,0,0,0,1,0,12,0,116,101,\r
+120,116,117,114,101,49,68,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,9,99,111,111,114,100,0,0,\r
+0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,116,101,120,49,100,0,18,116,101,120,\r
+101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,\r
+116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,0,0,16,115,\r
+97,109,112,108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,\r
+68,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,\r
+116,0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,0,0,16,115,97,109,\r
+112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,0,\r
+18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,\r
+0,49,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,0,1,0,0,17,115,97,109,112,108,101,114,0,0,\r
+1,0,0,10,99,111,111,114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,116,\r
+101,120,50,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,\r
+100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,\r
+68,80,114,111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,8,\r
+58,116,101,120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,\r
+111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,0,18,99,111,111,114,100,0,59,116,0,\r
+18,99,111,111,114,100,0,59,112,0,49,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,\r
+111,106,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,116,101,\r
+120,116,117,114,101,50,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,\r
+100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,\r
+111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,0,1,0,0,18,115,97,\r
 109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,\r
-118,101,99,52,95,115,104,97,100,49,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,\r
-0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,115,104,\r
-97,100,111,119,49,68,80,114,111,106,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,\r
-114,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,\r
-99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,0,18,\r
-99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,115,104,97,\r
-100,111,119,50,68,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,\r
-2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,115,104,97,100,50,100,0,18,116,101,120,101,\r
-108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,\r
-101,120,101,108,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,\r
-112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,115,104,97,100,111,119,50,68,0,18,115,\r
-97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,\r
-100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,\r
-111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,9,0,110,111,105,115,\r
-101,49,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,49,0,\r
-18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,10,120,0,0,0,1,3,2,0,9,\r
-1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,50,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,\r
-0,9,0,110,111,105,115,101,49,0,1,0,0,11,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,\r
-111,105,115,101,51,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,\r
-12,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,97,0,0,18,\r
-120,0,0,0,8,18,97,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,50,0,\r
-58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,\r
-0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,50,0,58,\r
-110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,\r
-49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,\r
-11,120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,\r
-101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,\r
-0,0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,50,0,58,\r
-110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,\r
-49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,0,0,0,1,\r
-0,11,0,110,111,105,115,101,51,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,\r
-0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,\r
-115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,10,\r
-120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,\r
-49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,58,110,111,\r
-105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,0,\r
-0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,11,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,\r
-115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,\r
-52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,\r
-58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,0,0,\r
-0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,\r
-101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,\r
-0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,\r
-49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,\r
-17,49,51,0,49,57,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,9,120,0,0,0,1,8,58,\r
-118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,\r
-49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,58,110,\r
-111,105,115,101,49,0,18,120,0,17,50,51,0,53,52,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,\r
-0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,\r
-105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,\r
-58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,\r
-0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,50,51,0,53,52,0,0,0,17,50,57,\r
-0,49,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,11,120,0,0,0,1,8,58,118,101,\r
+118,101,99,52,95,116,101,120,51,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,\r
+18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,\r
+116,117,114,101,51,68,80,114,111,106,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,\r
+114,100,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,0,18,115,97,109,112,108,101,114,0,0,58,118,\r
+101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,\r
+114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,18,99,\r
+111,111,114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,67,117,98,101,0,1,0,\r
+0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,\r
+108,0,0,0,4,118,101,99,52,95,116,101,120,99,117,98,101,0,18,116,101,120,101,108,0,0,18,115,97,109,\r
+112,108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,\r
+0,12,0,115,104,97,100,111,119,49,68,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,\r
+114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,115,104,97,100,49,100,0,18,\r
+116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,17,48,0,48,0,0,\r
+0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,0,0,20,\r
+115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,0,1,8,58,115,104,97,100,111,119,49,\r
+68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,\r
+111,111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,\r
+114,100,0,59,113,0,49,0,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,0,1,0,0,21,115,97,109,112,\r
+108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,\r
+99,52,95,115,104,97,100,50,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,\r
+99,111,111,114,100,0,0,17,48,0,48,0,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,115,104,97,100,\r
+111,119,50,68,80,114,111,106,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,\r
+0,0,0,1,8,58,115,104,97,100,111,119,50,68,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,\r
+18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,\r
+116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,\r
+0,59,113,0,49,0,0,0,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,9,120,0,0,0,1,3,2,0,9,1,97,0,0,0,\r
+4,102,108,111,97,116,95,110,111,105,115,101,49,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,\r
+111,105,115,101,49,0,1,0,0,10,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,\r
+115,101,50,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,11,120,0,\r
+0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,97,116,95,110,111,105,115,101,51,0,18,97,0,0,18,120,0,0,0,8,\r
+18,97,0,0,0,1,0,9,0,110,111,105,115,101,49,0,1,0,0,12,120,0,0,0,1,3,2,0,9,1,97,0,0,0,4,102,108,111,\r
+97,116,95,110,111,105,115,101,52,0,18,97,0,0,18,120,0,0,0,8,18,97,0,0,0,1,0,10,0,110,111,105,115,\r
+101,50,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,\r
+110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,\r
+50,0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,\r
+111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,\r
+0,0,0,0,0,1,0,10,0,110,111,105,115,101,50,0,1,0,0,11,120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,\r
+105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,\r
+51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,0,0,0,1,0,10,0,110,111,105,115,101,\r
+50,0,1,0,0,12,120,0,0,0,1,8,58,118,101,99,50,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,\r
+111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,\r
+0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,9,120,0,\r
+0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,\r
+18,120,0,17,49,57,0,51,52,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,\r
+0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,\r
+105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,17,49,57,0,\r
+51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,50,0,\r
+17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,\r
+0,11,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,\r
+115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,\r
+0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,\r
+55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,0,0,0,0,1,0,11,0,110,111,105,115,101,51,0,1,0,0,\r
+12,120,0,0,0,1,8,58,118,101,99,51,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,\r
+101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,\r
+0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,0,\r
+52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,0,0,0,0,\r
+1,0,12,0,110,111,105,115,101,52,0,1,0,0,9,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,\r
+49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,0,58,110,111,\r
+105,115,101,49,0,18,120,0,17,53,0,52,55,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,17,50,51,\r
+0,53,52,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,10,120,0,0,0,1,8,58,118,101,99,\r
+52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,\r
+50,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,\r
+118,101,99,50,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,\r
+18,120,0,58,118,101,99,50,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,\r
+0,110,111,105,115,101,52,0,1,0,0,11,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,\r
+18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,49,57,0,51,52,0,0,0,17,\r
+55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,\r
+51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,0,46,0,0,0,58,110,111,105,\r
+115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,\r
+57,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,0,0,12,120,0,0,0,1,8,58,118,101,\r
 99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,\r
-99,51,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,0,58,110,111,105,\r
-115,101,49,0,18,120,0,58,118,101,99,51,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,\r
-52,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,51,0,17,50,51,0,53,52,0,0,0,\r
-17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0,0,0,0,0,0,1,0,12,0,110,111,105,115,101,52,0,1,\r
-0,0,12,120,0,0,0,1,8,58,118,101,99,52,0,58,110,111,105,115,101,49,0,18,120,0,0,0,0,58,110,111,105,\r
-115,101,49,0,18,120,0,58,118,101,99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,\r
-0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,\r
-0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,0,58,\r
-110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,\r
-17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0,0,0,0,46,0,0,0,0,0,0,0\r
+99,52,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,\r
+0,0,58,110,111,105,115,101,49,0,18,120,0,58,118,101,99,52,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,\r
+0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,0,58,110,111,105,115,101,49,0,18,120,0,\r
+58,118,101,99,52,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,51,55,0,\r
+52,56,0,0,0,0,46,0,0,0,0,0,0,0\r
index 40db02a26349a608286d996934bce27d0378d376..c96fc0a318bf2d2d42254a469dc55dcef63aa598 100755 (executable)
@@ -1,3 +1,26 @@
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 2006  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
 \r
 //\r
 // This file defines nearly all constructors and operators for built-in data types, using\r
@@ -1386,15 +1409,13 @@ void __operator ++ (inout mat4 m) {
 //\r
 \r
 float __operator -- (inout float a, const int) {\r
-    float b;\r
-    b = a;\r
+    float b = a;\r
     --a;\r
     return b;\r
 }\r
 \r
 int __operator -- (inout int a, const int) {\r
-    int b;\r
-    b = a;\r
+    int b = a;\r
     --a;\r
     return b;\r
 }\r
@@ -1436,15 +1457,13 @@ mat4 __operator -- (inout mat4 m, const int) {
 }\r
 \r
 float __operator ++ (inout float a, const int) {\r
-    float b;\r
-    b = a;\r
+    float b = a;\r
     ++a;\r
     return b;\r
 }\r
 \r
 int __operator ++ (inout int a, const int) {\r
-    int b;\r
-    b = a;\r
+    int b = a;\r
     ++a;\r
     return b;\r
 }\r
index 8688a229daf6d780669556c6ece913454a633baa..b3b7c8071c083c92ec49b182aceaa6fe7e52514e 100644 (file)
 0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,9,18,109,0,16,10,50,0,57,51,0,0,1,\r
 0,0,2,24,1,0,2,15,109,0,0,0,1,9,18,109,0,16,8,48,0,57,51,0,9,18,109,0,16,10,49,0,57,51,0,9,18,109,\r
 0,16,10,50,0,57,51,0,9,18,109,0,16,10,51,0,57,51,0,0,1,0,9,2,25,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,\r
-0,9,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,5,2,25,1,0,2,5,97,0,0,1,1,0,\r
-5,0,0,0,1,3,2,0,5,1,98,0,0,0,9,18,98,0,18,97,0,20,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,10,2,25,1,0,2,\r
-10,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,0,0,\r
-0,1,0,11,2,25,1,0,2,11,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,61,0,18,118,\r
-0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,12,2,25,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,\r
-101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,18,118,0,59,119,0,\r
-61,0,0,0,0,1,0,6,2,25,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,\r
-61,0,18,118,0,59,121,0,61,0,0,0,0,1,0,7,2,25,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,\r
-51,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,8,2,25,1,0,2,8,\r
-118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,\r
-118,0,59,122,0,61,0,18,118,0,59,119,0,61,0,0,0,0,1,0,13,2,25,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,\r
-109,97,116,50,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,0,0,0,1,0,14,2,25,1,0,2,14,\r
-109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,\r
-0,18,109,0,16,10,50,0,57,61,0,0,0,0,1,0,15,2,25,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,\r
-52,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,18,109,0,16,10,50,0,57,61,0,18,109,0,\r
-16,10,51,0,57,61,0,0,0,0,1,0,9,2,24,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,0,0,9,18,98,0,18,\r
-97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,5,2,24,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,0,\r
-0,9,18,98,0,18,97,0,20,0,9,18,97,0,51,0,8,18,98,0,0,0,1,0,10,2,24,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,\r
-8,58,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,0,0,1,0,11,2,24,1,0,2,11,118,\r
-0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,\r
-122,0,60,0,0,0,0,1,0,12,2,24,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,\r
-0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,59,119,0,60,0,0,0,0,1,0,6,2,24,1,0,2,\r
-6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,\r
-0,0,1,0,7,2,24,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,59,120,0,60,0,18,\r
-118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,0,0,0,1,0,8,2,24,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,8,58,\r
-105,118,101,99,52,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,\r
-59,119,0,60,0,0,0,0,1,0,13,2,24,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,\r
-8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,0,0,0,1,0,14,2,24,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,8,58,\r
-109,97,116,51,0,18,109,0,16,8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,\r
-0,0,0,1,0,15,2,24,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,60,0,\r
-18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,18,109,0,16,10,51,0,57,60,0,0,0,0,1,0,1,2,\r
-15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,\r
-18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,0,1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,\r
-102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,\r
-0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,\r
-98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,\r
-116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,\r
-0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,\r
-0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,\r
-103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,\r
-0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,\r
-0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,\r
-0,0,4,102,108,111,97,116,95,101,113,117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,\r
-101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,\r
-102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,1,2,11,1,1,0,1,97,0,0,1,1,0,1,98,0,0,0,1,8,18,97,0,18,\r
-98,0,39,0,0,1,0,1,2,29,1,1,0,1,97,0,0,0,1,8,18,97,0,15,2,48,0,38,0,0,1,0,0,0,112,114,105,110,116,0,\r
-1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,112,114,105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,\r
-105,110,116,0,1,1,0,5,105,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,\r
-112,114,105,110,116,0,1,1,0,1,98,0,0,0,1,4,98,111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,\r
-0,0,0,112,114,105,110,116,0,1,1,0,10,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,\r
-0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,11,118,\r
-0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,\r
-121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,\r
-0,12,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,\r
-118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,\r
-18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,110,\r
-116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,\r
-105,110,116,0,1,1,0,7,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,\r
-105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,\r
-112,114,105,110,116,0,1,1,0,8,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,\r
-112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,\r
-58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,2,118,0,0,0,\r
-1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,\r
-0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,3,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,\r
-120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,\r
-59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,0,18,\r
-118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,\r
-18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,\r
-110,116,0,1,1,0,13,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,\r
-105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,14,109,0,0,0,1,9,\r
-58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,\r
-0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,\r
-1,1,0,15,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,\r
-116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,9,58,\r
-112,114,105,110,116,0,18,109,0,16,10,51,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,16,101,0,\r
-0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,17,\r
-101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,\r
-1,0,18,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,\r
-116,0,1,1,0,19,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,\r
-105,110,116,0,1,1,0,20,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,\r
-112,114,105,110,116,0,1,1,0,21,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0\r
+0,9,1,98,0,2,18,97,0,0,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,5,2,25,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,\r
+2,0,5,1,98,0,2,18,97,0,0,0,9,18,97,0,52,0,8,18,98,0,0,0,1,0,10,2,25,1,0,2,10,118,0,0,1,1,0,5,0,0,0,\r
+1,8,58,118,101,99,50,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,0,0,0,1,0,11,2,25,1,0,2,11,\r
+118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,\r
+0,59,122,0,61,0,0,0,0,1,0,12,2,25,1,0,2,12,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,52,0,18,118,0,\r
+59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,18,118,0,59,119,0,61,0,0,0,0,1,0,6,2,\r
+25,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,18,118,0,59,120,0,61,0,18,118,0,59,121,\r
+0,61,0,0,0,0,1,0,7,2,25,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,51,0,18,118,0,59,120,0,\r
+61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,0,0,0,1,0,8,2,25,1,0,2,8,118,0,0,1,1,0,5,0,0,0,\r
+1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,61,0,18,118,0,59,121,0,61,0,18,118,0,59,122,0,61,0,18,\r
+118,0,59,119,0,61,0,0,0,0,1,0,13,2,25,1,0,2,13,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,50,0,18,109,\r
+0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,0,0,0,1,0,14,2,25,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,\r
+8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,61,0,18,109,0,16,10,49,0,57,61,0,18,109,0,16,10,50,0,57,\r
+61,0,0,0,0,1,0,15,2,25,1,0,2,15,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,\r
+61,0,18,109,0,16,10,49,0,57,61,0,18,109,0,16,10,50,0,57,61,0,18,109,0,16,10,51,0,57,61,0,0,0,0,1,0,\r
+9,2,24,1,0,2,9,97,0,0,1,1,0,5,0,0,0,1,3,2,0,9,1,98,0,2,18,97,0,0,0,9,18,97,0,51,0,8,18,98,0,0,0,1,\r
+0,5,2,24,1,0,2,5,97,0,0,1,1,0,5,0,0,0,1,3,2,0,5,1,98,0,2,18,97,0,0,0,9,18,97,0,51,0,8,18,98,0,0,0,\r
+1,0,10,2,24,1,0,2,10,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,50,0,18,118,0,59,120,0,60,0,18,118,0,\r
+59,121,0,60,0,0,0,0,1,0,11,2,24,1,0,2,11,118,0,0,1,1,0,5,0,0,0,1,8,58,118,101,99,51,0,18,118,0,59,\r
+120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,0,0,0,1,0,12,2,24,1,0,2,12,118,0,0,1,1,0,\r
+5,0,0,0,1,8,58,118,101,99,52,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,\r
+0,18,118,0,59,119,0,60,0,0,0,0,1,0,6,2,24,1,0,2,6,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,50,0,\r
+18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,0,0,0,1,0,7,2,24,1,0,2,7,118,0,0,1,1,0,5,0,0,0,1,8,\r
+58,105,118,101,99,51,0,18,118,0,59,120,0,60,0,18,118,0,59,121,0,60,0,18,118,0,59,122,0,60,0,0,0,0,\r
+1,0,8,2,24,1,0,2,8,118,0,0,1,1,0,5,0,0,0,1,8,58,105,118,101,99,52,0,18,118,0,59,120,0,60,0,18,118,\r
+0,59,121,0,60,0,18,118,0,59,122,0,60,0,18,118,0,59,119,0,60,0,0,0,0,1,0,13,2,24,1,0,2,13,109,0,0,1,\r
+1,0,5,0,0,0,1,8,58,109,97,116,50,0,18,109,0,16,8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,0,0,0,1,\r
+0,14,2,24,1,0,2,14,109,0,0,1,1,0,5,0,0,0,1,8,58,109,97,116,51,0,18,109,0,16,8,48,0,57,60,0,18,109,\r
+0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,57,60,0,0,0,0,1,0,15,2,24,1,0,2,15,109,0,0,1,1,0,5,0,0,0,\r
+1,8,58,109,97,116,52,0,18,109,0,16,8,48,0,57,60,0,18,109,0,16,10,49,0,57,60,0,18,109,0,16,10,50,0,\r
+57,60,0,18,109,0,16,10,51,0,57,60,0,0,0,0,1,0,1,2,15,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,\r
+99,0,0,0,4,102,108,111,97,116,95,108,101,115,115,0,18,99,0,0,18,97,0,0,18,98,0,0,0,8,18,99,0,0,0,1,\r
+0,1,2,15,1,1,0,5,97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,\r
+116,0,18,98,0,0,0,40,0,0,1,0,1,2,16,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,99,0,0,0,4,102,108,\r
+111,97,116,95,108,101,115,115,0,18,99,0,0,18,98,0,0,18,97,0,0,0,8,18,99,0,0,0,1,0,1,2,16,1,1,0,5,\r
+97,0,0,1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,\r
+0,41,0,0,1,0,1,2,18,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,\r
+111,97,116,95,108,101,115,115,0,18,103,0,0,18,98,0,0,18,97,0,0,0,4,102,108,111,97,116,95,101,113,\r
+117,97,108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,18,1,1,0,5,97,0,0,\r
+1,1,0,5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,43,0,\r
+0,1,0,1,2,17,1,1,0,9,97,0,0,1,1,0,9,98,0,0,0,1,3,2,0,1,1,103,0,0,1,1,101,0,0,0,4,102,108,111,97,\r
+116,95,108,101,115,115,0,18,103,0,0,18,97,0,0,18,98,0,0,0,4,102,108,111,97,116,95,101,113,117,97,\r
+108,0,18,101,0,0,18,97,0,0,18,98,0,0,0,8,18,103,0,18,101,0,32,0,0,1,0,1,2,17,1,1,0,5,97,0,0,1,1,0,\r
+5,98,0,0,0,1,8,58,102,108,111,97,116,0,18,97,0,0,0,58,102,108,111,97,116,0,18,98,0,0,0,42,0,0,1,0,\r
+1,2,11,1,1,0,1,97,0,0,1,1,0,1,98,0,0,0,1,8,18,97,0,18,98,0,39,0,0,1,0,1,2,29,1,1,0,1,97,0,0,0,1,8,\r
+18,97,0,15,2,48,0,38,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,9,102,0,0,0,1,4,102,108,111,97,116,95,\r
+112,114,105,110,116,0,18,102,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,5,105,0,0,0,1,4,105,110,\r
+116,95,112,114,105,110,116,0,18,105,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,1,98,0,0,0,1,4,98,\r
+111,111,108,95,112,114,105,110,116,0,18,98,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,10,118,0,0,\r
+0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,\r
+0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,11,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,\r
+59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,\r
+118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,12,118,0,0,0,1,9,58,112,114,105,110,116,\r
+0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,\r
+116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,\r
+105,110,116,0,1,1,0,6,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,\r
+105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,7,118,0,0,0,1,9,58,112,\r
+114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,9,58,\r
+112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,8,118,0,0,0,1,\r
+9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,\r
+0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,119,\r
+0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,2,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,\r
+120,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,121,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,\r
+0,3,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,116,0,18,\r
+118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,0,1,0,0,0,112,114,105,110,\r
+116,0,1,1,0,4,118,0,0,0,1,9,58,112,114,105,110,116,0,18,118,0,59,120,0,0,0,0,9,58,112,114,105,110,\r
+116,0,18,118,0,59,121,0,0,0,0,9,58,112,114,105,110,116,0,18,118,0,59,122,0,0,0,0,9,58,112,114,105,\r
+110,116,0,18,118,0,59,119,0,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,13,109,0,0,0,1,9,58,112,\r
+114,105,110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,\r
+0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,14,109,0,0,0,1,9,58,112,114,105,110,116,0,18,109,0,16,8,\r
+48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,112,114,105,110,116,0,\r
+18,109,0,16,10,50,0,57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,15,109,0,0,0,1,9,58,112,114,105,\r
+110,116,0,18,109,0,16,8,48,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,49,0,57,0,0,0,9,58,\r
+112,114,105,110,116,0,18,109,0,16,10,50,0,57,0,0,0,9,58,112,114,105,110,116,0,18,109,0,16,10,51,0,\r
+57,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,16,101,0,0,0,1,4,105,110,116,95,112,114,105,110,116,\r
+0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,17,101,0,0,0,1,4,105,110,116,95,112,114,105,\r
+110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,18,101,0,0,0,1,4,105,110,116,95,112,\r
+114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,19,101,0,0,0,1,4,105,110,116,\r
+95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,20,101,0,0,0,1,4,105,\r
+110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,1,0,0,0,112,114,105,110,116,0,1,1,0,21,101,0,0,0,1,\r
+4,105,110,116,95,112,114,105,110,116,0,18,101,0,0,0,0,0\r
index 8b619cd837389918210f0ef0f45199ef7369b372..12a18ee79234084845884c4dbaeca0c4e5be39be 100755 (executable)
@@ -116,42 +116,42 @@ vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {
 
 float dFdx (float p) {\r
     // XXX:
-    return 0.0;
+    return 0.001;
 }
 
 vec2 dFdx (vec2 p) {\r
     // XXX:
-    return vec2 (0.0);
+    return vec2 (0.001);
 }
 
 vec3 dFdx (vec3 p) {\r
     // XXX:
-    return vec3 (0.0);
+    return vec3 (0.001);
 }
 
 vec4 dFdx (vec4 p) {\r
     // XXX:
-    return vec4 (0.0);
+    return vec4 (0.001);
 }
 
 float dFdy (float p) {\r
     // XXX:
-    return 0.0;
+    return 0.001;
 }
 
 vec2 dFdy (vec2 p) {\r
     // XXX:
-    return vec2 (0.0);
+    return vec2 (0.001);
 }
 
 vec3 dFdy (vec3 p) {\r
     // XXX:
-    return vec3 (0.0);
+    return vec3 (0.001);
 }
 
 vec4 dFdy (vec4 p) {\r
     // XXX:
-    return vec4 (0.0);
+    return vec4 (0.001);
 }
 
 float fwidth (float p) {
index 89d4736f3ebed58fac626b11d3c528fba7653b8a..bfc592870f4b5936b74a96691b3e396f12f385b8 100644 (file)
 115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,\r
 114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,\r
 99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,98,105,97,115,0,0,0,0,0,\r
-1,0,9,0,100,70,100,120,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,0,0,0,0,1,0,10,0,100,70,100,120,0,1,0,0,\r
-10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,0,0,11,112,\r
-0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,0,12,112,0,0,0,1,\r
-8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,9,112,0,0,0,1,8,17,48,0,\r
-48,0,0,0,0,1,0,10,0,100,70,100,121,0,1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,0,0,0,0,\r
-0,0,1,0,11,0,100,70,100,121,0,1,0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,0,0,0,0,0,0,1,0,\r
-12,0,100,70,100,121,0,1,0,0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,9,0,102,\r
-119,105,100,116,104,0,1,0,0,9,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,\r
-97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,10,0,102,119,105,100,116,104,0,1,0,0,\r
-10,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,\r
-121,0,18,112,0,0,0,0,0,46,0,0,1,0,11,0,102,119,105,100,116,104,0,1,0,0,11,112,0,0,0,1,8,58,97,98,\r
-115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,\r
-0,0,1,0,12,0,102,119,105,100,116,104,0,1,0,0,12,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,\r
-18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,0\r
+1,0,9,0,100,70,100,120,0,1,0,0,9,112,0,0,0,1,8,17,48,0,48,48,49,0,0,0,0,1,0,10,0,100,70,100,120,0,\r
+1,0,0,10,112,0,0,0,1,8,58,118,101,99,50,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,11,0,100,70,100,120,0,1,\r
+0,0,11,112,0,0,0,1,8,58,118,101,99,51,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,12,0,100,70,100,120,0,1,0,\r
+0,12,112,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,9,0,100,70,100,121,0,1,0,0,\r
+9,112,0,0,0,1,8,17,48,0,48,48,49,0,0,0,0,1,0,10,0,100,70,100,121,0,1,0,0,10,112,0,0,0,1,8,58,118,\r
+101,99,50,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,11,0,100,70,100,121,0,1,0,0,11,112,0,0,0,1,8,58,118,\r
+101,99,51,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,12,0,100,70,100,121,0,1,0,0,12,112,0,0,0,1,8,58,118,\r
+101,99,52,0,17,48,0,48,48,49,0,0,0,0,0,0,1,0,9,0,102,119,105,100,116,104,0,1,0,0,9,112,0,0,0,1,8,\r
+58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,\r
+0,0,0,46,0,0,1,0,10,0,102,119,105,100,116,104,0,1,0,0,10,112,0,0,0,1,8,58,97,98,115,0,58,100,70,\r
+100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,11,0,102,\r
+119,105,100,116,104,0,1,0,0,11,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,\r
+58,97,98,115,0,58,100,70,100,121,0,18,112,0,0,0,0,0,46,0,0,1,0,12,0,102,119,105,100,116,104,0,1,0,\r
+0,12,112,0,0,0,1,8,58,97,98,115,0,58,100,70,100,120,0,18,112,0,0,0,0,0,58,97,98,115,0,58,100,70,\r
+100,121,0,18,112,0,0,0,0,0,46,0,0,0\r
index 36d073e88a83a8e13505c85187bb644af2f9d0ac..0f153530695cd8bd6bb35c85146f38ffde8ae8a1 100644 (file)
@@ -583,9 +583,14 @@ declaration_2
     init_declarator_list .emit DECLARATION_INIT_DECLARATOR_LIST .and semicolon;\r
 \r
 /*\r
-    <function_prototype>                ::= <function_declarator> ")"\r
+    <function_prototype>                ::= <function_header> "void" ")"\r
+                                          | <function_declarator> ")"\r
 */\r
 function_prototype\r
+    function_prototype_1 .or function_prototype_2;\r
+function_prototype_1\r
+    function_header .and "void" .and rparen .error RPAREN_EXPECTED .emit PARAMETER_NONE;\r
+function_prototype_2\r
     function_declarator .and rparen .error RPAREN_EXPECTED .emit PARAMETER_NONE;\r
 \r
 /*\r
index 5a94d99d439977f6601610403066ee262a13753e..62433d796fa0d1afba3f12db0fe6491380d28f64 100644 (file)
 "declaration_2\n"\r
 " init_declarator_list .emit DECLARATION_INIT_DECLARATOR_LIST .and semicolon;\n"\r
 "function_prototype\n"\r
+" function_prototype_1 .or function_prototype_2;\n"\r
+"function_prototype_1\n"\r
+" function_header .and \"void\" .and rparen .error RPAREN_EXPECTED .emit PARAMETER_NONE;\n"\r
+"function_prototype_2\n"\r
 " function_declarator .and rparen .error RPAREN_EXPECTED .emit PARAMETER_NONE;\n"\r
 "function_declarator\n"\r
 " function_header_with_parameters .or function_header;\n"\r
index 2b5953a0323bd70896f495e42bfede5761d7db37..37555ebd1b22a62b479f5689c0139ea358d47ef2 100755 (executable)
@@ -1,10 +1,26 @@
-
-//
-// TODO:
-// - what to do with ftransform? can it stay in the current form?
-// - implement texture1DLod, texture2DLod, texture3DLod, textureCubeLod,
-// - implement shadow1DLod, shadow2DLod,
-//
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 2006  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
 
 //
 // From Shader Spec, ver. 1.10, rev. 59
@@ -48,8 +64,9 @@ vec4 ftransform () {
 //
 
 vec4 texture1DLod (sampler1D sampler, float coord, float lod) {\r
-    // XXX:
-    return vec4 (0.0);
+    vec4 texel;\r
+    __asm vec4_tex1d texel, sampler, coord, lod;\r
+    return texel;
 }\r
 
 vec4 texture1DProjLod (sampler1D sampler, vec2 coord, float lod) {
@@ -61,8 +78,9 @@ vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {
 }
 
 vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod) {\r
-    // XXX:
-    return vec4 (0.0);
+    vec4 texel;\r
+    __asm vec4_tex2d texel, sampler, coord, lod;\r
+    return texel;
 }\r
 
 vec4 texture2DProjLod (sampler2D sampler, vec3 coord, float lod) {\r
@@ -74,30 +92,34 @@ vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {
 }
 
 vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) {\r
-    // XXX:
-    return vec4 (0.0);
+    vec4 texel;\r
+    __asm vec4_tex3d texel, sampler, coord, lod;\r
+    return texel;
 }
 vec4 texture3DProjLod (sampler3D sampler, vec4 coord, float lod) {\r
     return texture3DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), lod);
 }
 
 vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {\r
-    // XXX:
-    return vec4 (0.0);
+    vec4 texel;\r
+    __asm vec4_texcube texel, sampler, coord, lod;\r
+    return texel;
 }
 
 vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {\r
-    // XXX:
-    return vec4 (0.0);
+    vec4 texel;\r
+    __asm vec4_shad1d texel, sampler, coord, lod;\r
+    return texel;
 }
 
-vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {\r
-    // XXX:
-    return vec4 (0.0);
-}\r
-
 vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {\r
-    return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);
+    return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);\r
+}\r
+\r
+vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {\r
+    vec4 texel;\r
+    __asm vec4_shad2d texel, sampler, coord, lod;\r
+    return texel;
 }\r
 
 vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {\r
index c4698a65d65da0d7397b37583505de9fa3b2e0e7..62e081957f0ae4720c577f70827a5fb508803ac5 100644 (file)
 110,115,102,111,114,109,0,0,1,8,18,103,108,95,77,111,100,101,108,86,105,101,119,80,114,111,106,101,\r
 99,116,105,111,110,77,97,116,114,105,120,0,18,103,108,95,86,101,114,116,101,120,0,48,0,0,1,0,12,0,\r
 116,101,120,116,117,114,101,49,68,76,111,100,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,9,99,\r
-111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,\r
-0,116,101,120,116,117,114,101,49,68,80,114,111,106,76,111,100,0,1,0,0,16,115,97,109,112,108,101,\r
-114,0,0,1,0,0,10,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,\r
-101,49,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,\r
-111,111,114,100,0,59,116,0,49,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,\r
-68,80,114,111,106,76,111,100,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,\r
-0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,76,111,100,0,18,115,97,109,\r
-112,108,101,114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,108,\r
-111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,76,111,100,0,1,0,0,17,115,97,109,112,\r
-108,101,114,0,0,1,0,0,10,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,\r
-17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,0,\r
-0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,\r
-58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,\r
-50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,112,0,49,0,18,99,111,111,114,100,\r
-0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,\r
-116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,\r
-99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,76,111,\r
-100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,\r
-111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,\r
-49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,76,111,100,0,1,0,0,18,\r
-115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,\r
-118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,51,68,80,114,111,106,\r
-76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,\r
-111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,76,111,100,0,18,115,97,109,112,108,101,114,\r
-0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,\r
-99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,\r
-0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,\r
-114,101,67,117,98,101,76,111,100,0,1,0,0,19,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
-100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
-97,100,111,119,49,68,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
-100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
-97,100,111,119,50,68,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,\r
-100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,118,101,99,52,0,17,48,0,48,0,0,0,0,0,0,1,0,12,0,115,104,\r
-97,100,111,119,49,68,80,114,111,106,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,\r
-99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,76,111,100,0,\r
-18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,\r
-111,114,100,0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,\r
-100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,\r
-106,76,111,100,0,1,0,0,21,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,\r
-108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,\r
-0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,\r
-111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,\r
-18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,0\r
+111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,\r
+52,95,116,101,120,49,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,\r
+111,114,100,0,0,18,108,111,100,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,\r
+114,101,49,68,80,114,111,106,76,111,100,0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,10,99,111,\r
+111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,49,68,76,111,100,0,18,\r
+115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,116,0,\r
+49,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,49,68,80,114,111,106,76,111,100,\r
+0,1,0,0,16,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,\r
+0,1,8,58,116,101,120,116,117,114,101,49,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,18,99,\r
+111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,108,111,100,0,0,0,0,0,1,0,12,0,\r
+116,101,120,116,117,114,101,50,68,76,111,100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,10,99,\r
+111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,\r
+52,95,116,101,120,50,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,\r
+111,114,100,0,0,18,108,111,100,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,\r
+114,101,50,68,80,114,111,106,76,111,100,0,1,0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,\r
+111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,\r
+115,97,109,112,108,101,114,0,0,58,118,101,99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,\r
+114,100,0,59,112,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,112,0,49,0,0,0,\r
+18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,\r
+0,0,17,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,\r
+8,58,116,101,120,116,117,114,101,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,\r
+99,50,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,\r
+100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,116,101,\r
+120,116,117,114,101,51,68,76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,\r
+114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,95,\r
+116,101,120,51,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,\r
+114,100,0,0,18,108,111,100,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,116,101,120,116,117,114,\r
+101,51,68,80,114,111,106,76,111,100,0,1,0,0,18,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,\r
+114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,116,101,120,116,117,114,101,51,68,76,111,100,0,18,115,\r
+97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,\r
+100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,\r
+111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,\r
+12,0,116,101,120,116,117,114,101,67,117,98,101,76,111,100,0,1,0,0,19,115,97,109,112,108,101,114,0,\r
+0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,\r
+4,118,101,99,52,95,116,101,120,99,117,98,101,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,\r
+101,114,0,0,18,99,111,111,114,100,0,0,18,108,111,100,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,\r
+115,104,97,100,111,119,49,68,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,11,99,111,\r
+111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,12,1,116,101,120,101,108,0,0,0,4,118,101,99,52,\r
+95,115,104,97,100,49,100,0,18,116,101,120,101,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,\r
+111,114,100,0,0,18,108,111,100,0,0,0,8,18,116,101,120,101,108,0,0,0,1,0,12,0,115,104,97,100,111,\r
+119,49,68,80,114,111,106,76,111,100,0,1,0,0,20,115,97,109,112,108,101,114,0,0,1,0,0,12,99,111,111,\r
+114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,115,104,97,100,111,119,49,68,76,111,100,0,18,115,97,\r
+109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,114,100,0,59,115,0,18,99,111,111,114,100,\r
+0,59,113,0,49,0,17,48,0,48,0,0,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,\r
+49,0,0,0,18,108,111,100,0,0,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,76,111,100,0,1,0,0,21,115,\r
+97,109,112,108,101,114,0,0,1,0,0,11,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,3,2,0,12,1,\r
+116,101,120,101,108,0,0,0,4,118,101,99,52,95,115,104,97,100,50,100,0,18,116,101,120,101,108,0,0,18,\r
+115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,18,108,111,100,0,0,0,8,18,116,101,120,101,\r
+108,0,0,0,1,0,12,0,115,104,97,100,111,119,50,68,80,114,111,106,76,111,100,0,1,0,0,21,115,97,109,\r
+112,108,101,114,0,0,1,0,0,12,99,111,111,114,100,0,0,1,0,0,9,108,111,100,0,0,0,1,8,58,115,104,97,\r
+100,111,119,50,68,76,111,100,0,18,115,97,109,112,108,101,114,0,0,58,118,101,99,51,0,18,99,111,111,\r
+114,100,0,59,115,0,18,99,111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,116,0,18,99,\r
+111,111,114,100,0,59,113,0,49,0,18,99,111,111,114,100,0,59,112,0,18,99,111,111,114,100,0,59,113,0,\r
+49,0,0,0,18,108,111,100,0,0,0,0,0,0\r
index faa13b33e69336bd0ac60b37686fce2cc6c27a59..b7904b72feec0c3a35713ccf2ce5d60b9115b8d6 100644 (file)
@@ -999,9 +999,12 @@ static GLboolean handle_field (slang_assemble_ctx *A, slang_assembly_typeinfo *t
                        {\r
                                GLuint i;\r
 \r
-                               /* move the selected element to the beginning of the master expression */\r
-                               for (i = 0; i < field_size; i += 4)\r
-                                       if (!PLAB2 (A->file, slang_asm_float_move, struct_size - field_size + i + 4, i + 4))\r
+                               /*\r
+                                * Move the selected element to the end of the master expression.\r
+                                * Do it in reverse order to avoid overwriting itself.\r
+                                */\r
+                               for (i = field_size; i > 0; i -= 4)\r
+                                       if (!PLAB2 (A->file, slang_asm_float_move, struct_size - field_size + i, i))\r
                                                return GL_FALSE;\r
                                free_b += 4;\r
                        }\r
@@ -1048,12 +1051,52 @@ GLboolean _slang_assemble_operation (slang_assemble_ctx *A, slang_operation *op,
        case slang_oper_variable_decl:\r
                {\r
                        GLuint i;\r
+                       slang_operation assign;\r
+                       GLboolean result;\r
 \r
+                       /* Construct assignment expression placeholder. */\r
+                       if (!slang_operation_construct (&assign))\r
+                               return GL_FALSE;\r
+                       assign.type = slang_oper_assign;\r
+                       assign.children = (slang_operation *) slang_alloc_malloc (2 * sizeof (slang_operation));\r
+                       if (assign.children == NULL)\r
+                       {\r
+                               slang_operation_destruct (&assign);\r
+                               return GL_FALSE;\r
+                       }\r
+                       for (assign.num_children = 0; assign.num_children < 2; assign.num_children++)\r
+                               if (!slang_operation_construct (&assign.children[assign.num_children]))\r
+                               {\r
+                                       slang_operation_destruct (&assign);\r
+                                       return GL_FALSE;\r
+                               }\r
+\r
+                       result = GL_TRUE;\r
                        for (i = 0; i < op->num_children; i++)\r
                        {\r
-                               /* TODO: perform initialization of op->children[i] */\r
-                               /* TODO: clean-up stack */\r
+                               slang_variable *var;\r
+\r
+                               var = _slang_locate_variable (op->children[i].locals, op->children[i].a_id, GL_TRUE);\r
+                               if (var == NULL)\r
+                               {\r
+                                       result = GL_FALSE;\r
+                                       break;\r
+                               }\r
+                               if (var->initializer == NULL)\r
+                                       continue;\r
+\r
+                               if (!slang_operation_copy (&assign.children[0], &op->children[i]) ||\r
+                                       !slang_operation_copy (&assign.children[1], var->initializer) ||\r
+                                       !_slang_assemble_assign (A, &assign, "=", slang_ref_forbid) ||\r
+                                       !_slang_cleanup_stack (A, &assign))\r
+                               {\r
+                                       result = GL_FALSE;\r
+                                       break;\r
+                               }\r
                        }\r
+                       slang_operation_destruct (&assign);\r
+                       if (!result)\r
+                               return GL_FALSE;\r
                }\r
                break;\r
        case slang_oper_asm:\r
index 5a8addeae0f3743b5470939c4c6ca7d66cdf1706..ea82e853426fa5c4c2f937b23243869fa3366b9a 100644 (file)
@@ -143,13 +143,46 @@ GLvoid _slang_multiply_swizzles (slang_swizzle *dst, const slang_swizzle *left,
 \r
 /* _slang_assemble_constructor() */\r
 \r
+static GLboolean sizeof_argument (slang_assemble_ctx *A, GLuint *size, slang_operation *op)\r
+{\r
+       slang_assembly_typeinfo ti;\r
+       GLboolean result = GL_FALSE;\r
+       slang_storage_aggregate agg, flat_agg;\r
+\r
+       if (!slang_assembly_typeinfo_construct (&ti))\r
+               return GL_FALSE;\r
+       if (!_slang_typeof_operation (A, op, &ti))\r
+               goto end1;\r
+\r
+       if (!slang_storage_aggregate_construct (&agg))\r
+               goto end1;\r
+       if (!_slang_aggregate_variable (&agg, &ti.spec, 0, A->space.funcs, A->space.structs,\r
+                       A->space.vars, A->mach, A->file, A->atoms))\r
+               goto end2;\r
+\r
+       if (!slang_storage_aggregate_construct (&flat_agg))\r
+               goto end2;\r
+       if (!_slang_flatten_aggregate (&flat_agg, &agg))\r
+               goto end;\r
+\r
+       *size = flat_agg.count * 4;\r
+\r
+       result = GL_TRUE;\r
+end:\r
+       slang_storage_aggregate_destruct (&flat_agg);\r
+end2:\r
+       slang_storage_aggregate_destruct (&agg);\r
+end1:\r
+       slang_assembly_typeinfo_destruct (&ti);\r
+       return result;\r
+}\r
+\r
 static GLboolean constructor_aggregate (slang_assemble_ctx *A, const slang_storage_aggregate *flat,\r
-       GLuint *index, slang_operation *op, GLuint size)\r
+       slang_operation *op, GLuint garbage_size)\r
 {\r
        slang_assembly_typeinfo ti;\r
        GLboolean result = GL_FALSE;\r
        slang_storage_aggregate agg, flat_agg;\r
-       GLuint i;\r
 \r
        if (!slang_assembly_typeinfo_construct (&ti))\r
                return GL_FALSE;\r
@@ -170,17 +203,26 @@ static GLboolean constructor_aggregate (slang_assemble_ctx *A, const slang_stora
        if (!_slang_assemble_operation (A, op, slang_ref_forbid))\r
                goto end;\r
 \r
-       for (i = 0; i < flat_agg.count; i++)\r
+       /* TODO: convert (generic) elements */\r
+\r
+       /* free the garbage */\r
+       if (garbage_size != 0)\r
        {\r
-               const slang_storage_array *arr1 = &flat_agg.arrays[i];\r
-               const slang_storage_array *arr2 = &flat->arrays[*index];\r
+               GLuint i;\r
 \r
-               if (arr1->type != arr2->type)\r
+               /* move the non-garbage part to the end of the argument */\r
+               if (!slang_assembly_file_push_label (A->file, slang_asm_addr_push, 0))\r
+                       goto end;\r
+               for (i = flat_agg.count * 4 - garbage_size; i > 0; i -= 4)\r
                {\r
-                       /* TODO: convert (generic) from arr1 to arr2 */\r
+                       if (!slang_assembly_file_push_label2 (A->file, slang_asm_float_move,\r
+                               garbage_size + i, i))\r
+                       {\r
+                               goto end;\r
+                       }\r
                }\r
-               (*index)++;\r
-               /* TODO: watch the index, if it reaches the size, pop off the stack subsequent values */\r
+               if (!slang_assembly_file_push_label (A->file, slang_asm_local_free, garbage_size + 4))\r
+                       goto end;\r
        }\r
 \r
        result = GL_TRUE;\r
@@ -198,7 +240,8 @@ GLboolean _slang_assemble_constructor (slang_assemble_ctx *A, slang_operation *o
        slang_assembly_typeinfo ti;\r
        GLboolean result = GL_FALSE;\r
        slang_storage_aggregate agg, flat;\r
-       GLuint size, index, i;\r
+       GLuint size, i;\r
+       GLuint arg_sums[2];\r
 \r
        /* get typeinfo of the constructor (the result of constructor expression) */\r
        if (!slang_assembly_typeinfo_construct (&ti))\r
@@ -222,16 +265,47 @@ GLboolean _slang_assemble_constructor (slang_assemble_ctx *A, slang_operation *o
        if (!_slang_flatten_aggregate (&flat, &agg))\r
                goto end;\r
 \r
-       /* XXX: The children operations are traversed in a reversed order, so it poses a\r
-        * problem when there is more data than the constructor needs. We must fix it! */\r
+       /* collect the last two constructor's argument size sums */\r
+       arg_sums[0] = 0;        /* will hold all but the last argument's size sum */\r
+       arg_sums[1] = 0;        /* will hold all argument's size sum */\r
+       for (i = 0; i < op->num_children; i++)\r
+       {\r
+               GLuint arg_size;\r
+\r
+               if (!sizeof_argument (A, &arg_size, &op->children[i]))\r
+                       goto end;\r
+               if (i > 0)\r
+                       arg_sums[0] = arg_sums[1];\r
+               arg_sums[1] += arg_size;\r
+       }\r
+\r
+       /* check if there are too many arguments */\r
+       if (arg_sums[0] >= size)\r
+       {\r
+               /* TODO: info log: too many arguments in constructor list */\r
+               goto end;\r
+       }\r
+\r
+       /* check if there are too few arguments */\r
+       if (arg_sums[1] < size)\r
+       {\r
+               /* TODO: info log: too few arguments in constructor list */\r
+               goto end;\r
+       }\r
 \r
        /* traverse the children that form the constructor expression */\r
-       index = 0;\r
        for (i = op->num_children; i > 0; i--)\r
        {\r
-               if (!constructor_aggregate (A, &flat, &index, &op->children[i - 1], size))\r
+               GLuint garbage_size;\r
+\r
+               /* the last argument may be too big - calculate the unnecessary data size */\r
+               if (i == op->num_children)\r
+                       garbage_size = arg_sums[1] - size;\r
+               else\r
+                       garbage_size = 0;\r
+\r
+               if (!constructor_aggregate (A, &flat, &op->children[i - 1], garbage_size))\r
                        goto end;\r
-               /* TODO: watch the index, if it reaches the size, raise an error */\r
        }\r
 \r
        result = GL_TRUE;\r
index 781aeb97db305b5856030cb3a6a4ba7c24a329f3..16e157576782d0256296d27874c10a886b01e03e 100644 (file)
@@ -112,6 +112,11 @@ static GLfloat do_ceilf (GLfloat x)
        return CEILF (x);\r
 }\r
 \r
+static GLfloat do_floorf (GLfloat x)\r
+{\r
+       return FLOORF (x);\r
+}\r
+\r
 static GLvoid do_print_float (GLfloat x)\r
 {\r
        _mesa_printf ("slang print: %f\n", x);\r
@@ -294,13 +299,10 @@ static GLvoid codegen_assem (codegen_ctx *G, slang_assembly *a)
                x87_fstp (&G->f, x86_deref (G->r_esp));\r
                break;\r
        case slang_asm_float_floor:\r
-               set_fpu_round_neg_inf (G);\r
-               x87_fld (&G->f, x86_deref (G->r_esp));   \r
-               x87_fprndint (&G->f);   \r
+               x86_call (&G->f, (GLubyte *) do_floorf);\r
                x87_fstp (&G->f, x86_deref (G->r_esp));\r
                break;\r
        case slang_asm_float_ceil:\r
-               /* TODO: use frndint */\r
                x86_call (&G->f, (GLubyte *) do_ceilf);\r
                x87_fstp (&G->f, x86_deref (G->r_esp));\r
                break;\r
index c915b97d6ecc10eb7c1fe0070e9bfc1f91949258..ba146dd1bb9a58acf4aa65d7397838743fe9f6fa 100644 (file)
@@ -40,14 +40,16 @@ void _swrast_exec_arbshader (GLcontext *ctx, struct sw_span *span)
        struct gl2_program_intf **pro;\r
        GLuint i;\r
 \r
-       pro = ctx->ShaderObjects.CurrentProgram;\r
-       if (pro == NULL)\r
+       if (!ctx->ShaderObjects._FragmentShaderPresent)\r
                return;\r
+       pro = ctx->ShaderObjects.CurrentProgram;\r
+       if (!ctx->ShaderObjects._VertexShaderPresent)\r
+               (**pro).UpdateFixedUniforms (pro);\r
 \r
        for (i = span->start; i < span->end; i++)\r
        {\r
-            /* only run shader on active fragments */\r
-            if (span->array->mask[i]) {\r
+               /* only run shader on active fragments */\r
+               if (span->array->mask[i]) {\r
                GLfloat vec[4];\r
                GLuint j;\r
                GLboolean discard;\r
@@ -91,7 +93,7 @@ void _swrast_exec_arbshader (GLcontext *ctx, struct sw_span *span)
                        UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][BCOMP], vec[2]);\r
                        UNCLAMPED_FLOAT_TO_CHAN(span->array->rgba[i][ACOMP], vec[3]);\r
                }\r
-            }\r
+               }\r
        }\r
 }\r
 \r
index d8a7a6f0e63df99ab2a68ef8f20721d9c3c5db4c..84785ee50b76cf76958792371c235a491de36d7e 100644 (file)
-/*
- * Mesa 3-D graphics library
- * Version:  6.5
- *
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
- *    Brian Paul
- */
-
-#include "imports.h"
-#include "bufferobj.h"
-#include "context.h"
-#include "colormac.h"
-#include "mtypes.h"
-#include "program.h"
-#include "swrast.h"
-#include "s_blend.h"
-#include "s_context.h"
-#include "s_lines.h"
-#include "s_points.h"
-#include "s_span.h"
-#include "s_triangle.h"
-#include "s_texfilter.h"
-
-
-/**
- * Recompute the value of swrast->_RasterMask, etc. according to
- * the current context.  The _RasterMask field can be easily tested by
- * drivers to determine certain basic GL state (does the primitive need
- * stenciling, logic-op, fog, etc?).
- */
-static void
-_swrast_update_rasterflags( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GLbitfield rasterMask = 0;
-
-   if (ctx->Color.AlphaEnabled)           rasterMask |= ALPHATEST_BIT;
-   if (ctx->Color.BlendEnabled)           rasterMask |= BLEND_BIT;
-   if (ctx->Depth.Test)                   rasterMask |= DEPTH_BIT;
-   if (swrast->_FogEnabled)               rasterMask |= FOG_BIT;
-   if (ctx->Scissor.Enabled)              rasterMask |= CLIP_BIT;
-   if (ctx->Stencil.Enabled)              rasterMask |= STENCIL_BIT;
-   if (ctx->Visual.rgbMode) {
-      const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask);
-      if (colorMask != 0xffffffff)        rasterMask |= MASKING_BIT;
-      if (ctx->Color._LogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;
-      if (ctx->Texture._EnabledUnits)     rasterMask |= TEXTURE_BIT;
-   }
-   else {
-      if (ctx->Color.IndexMask != 0xffffffff) rasterMask |= MASKING_BIT;
-      if (ctx->Color.IndexLogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;
-   }
-
-   if (   ctx->Viewport.X < 0
-       || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width
-       || ctx->Viewport.Y < 0
-       || ctx->Viewport.Y + ctx->Viewport.Height > (GLint) ctx->DrawBuffer->Height) {
-      rasterMask |= CLIP_BIT;
-   }
-
-   if (ctx->Query.CurrentOcclusionObject)
-      rasterMask |= OCCLUSION_BIT;
-
-
-   /* If we're not drawing to exactly one color buffer set the
-    * MULTI_DRAW_BIT flag.  Also set it if we're drawing to no
-    * buffers or the RGBA or CI mask disables all writes.
-    */
-   if (ctx->DrawBuffer->_NumColorDrawBuffers[0] != 1) {
-      /* more than one color buffer designated for writing (or zero buffers) */
-      rasterMask |= MULTI_DRAW_BIT;
-   }
-   else if (ctx->Visual.rgbMode && *((GLuint *) ctx->Color.ColorMask) == 0) {
-      rasterMask |= MULTI_DRAW_BIT; /* all RGBA channels disabled */
-   }
-   else if (!ctx->Visual.rgbMode && ctx->Color.IndexMask==0) {
-      rasterMask |= MULTI_DRAW_BIT; /* all color index bits disabled */
-   }
-
-   if (ctx->FragmentProgram._Active) {
-      rasterMask |= FRAGPROG_BIT;
-   }
-
-   if (ctx->ShaderObjects.CurrentProgram) {
-      /* XXX Vertex and/or fragment shader (what if no fragment shader??) */
-      rasterMask |= FRAGPROG_BIT;
-   }
-
-   if (ctx->ATIFragmentShader._Enabled) {
-      rasterMask |= ATIFRAGSHADER_BIT;
-   }
-
-#if CHAN_TYPE == GL_FLOAT
-   if (ctx->Color.ClampFragmentColor == GL_TRUE) {
-      rasterMask |= CLAMPING_BIT;
-   }
-#endif
-
-   SWRAST_CONTEXT(ctx)->_RasterMask = rasterMask;
-}
-
-
-/**
- * Examine polycon culls tate to compute the _BackfaceSign field.
- * _BackfaceSign will be 0 if no culling, -1 if culling back-faces,
- * and 1 if culling front-faces.  The Polygon FrontFace state also
- * factors in.
- */
-static void
-_swrast_update_polygon( GLcontext *ctx )
-{
-   GLfloat backface_sign = 1;
-
-   if (ctx->Polygon.CullFlag) {
-      backface_sign = 1;
-      switch(ctx->Polygon.CullFaceMode) {
-      case GL_BACK:
-        if(ctx->Polygon.FrontFace==GL_CCW)
-           backface_sign = -1;
-        break;
-      case GL_FRONT:
-        if(ctx->Polygon.FrontFace!=GL_CCW)
-           backface_sign = -1;
-        break;
-      default:
-      case GL_FRONT_AND_BACK:
-        backface_sign = 0;
-        break;
-      }
-   }
-   else {
-      backface_sign = 0;
-   }
-
-   SWRAST_CONTEXT(ctx)->_BackfaceSign = backface_sign;
-}
-
-
-/**
- * Update the _PreferPixelFog field to indicate if we need to compute
- * fog factors per-fragment.
- */
-static void
-_swrast_update_fog_hint( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   swrast->_PreferPixelFog = (!swrast->AllowVertexFog ||
-                              ctx->FragmentProgram._Enabled || /* not _Active! */
-                             (ctx->Hint.Fog == GL_NICEST &&
-                              swrast->AllowPixelFog));
-}
-
-
-
-/**
- * Update the swrast->_AnyTextureCombine flag.
- */
-static void
-_swrast_update_texture_env( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GLuint i;
-   swrast->_AnyTextureCombine = GL_FALSE;
-   for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
-      if (ctx->Texture.Unit[i].EnvMode == GL_COMBINE_EXT ||
-          ctx->Texture.Unit[i].EnvMode == GL_COMBINE4_NV) {
-         swrast->_AnyTextureCombine = GL_TRUE;
-         return;
-      }
-   }
-}
-
-
-/**
- * Update swrast->_FogColor and swrast->_FogEnable values.
- */
-static void
-_swrast_update_fog_state( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   /* convert fog color to GLchan values */
-   CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[RCOMP], ctx->Fog.Color[RCOMP]);
-   CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[GCOMP], ctx->Fog.Color[GCOMP]);
-   CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[BCOMP], ctx->Fog.Color[BCOMP]);
-
-   /* determine if fog is needed, and if so, which fog mode */
-   swrast->_FogEnabled = GL_FALSE;
-   if (ctx->FragmentProgram._Active) {
-      if (ctx->FragmentProgram._Current->Base.Target==GL_FRAGMENT_PROGRAM_ARB) {
-         const struct fragment_program *p
-            = (struct fragment_program *) ctx->FragmentProgram._Current;
-         if (p->FogOption != GL_NONE) {
-            swrast->_FogEnabled = GL_TRUE;
-            swrast->_FogMode = p->FogOption;
-         }
-      }
-   }
-   else if (ctx->Fog.Enabled) {
-      swrast->_FogEnabled = GL_TRUE;
-      swrast->_FogMode = ctx->Fog.Mode;
-   }
-}
-
-
-/**
- * Update state for running fragment programs.  Basically, load the
- * program parameters with current state values.
- */
-static void
-_swrast_update_fragment_program( GLcontext *ctx )
-{
-   if (ctx->FragmentProgram._Active) {
-      struct fragment_program *program = ctx->FragmentProgram._Current;
-      _mesa_load_state_parameters(ctx, program->Base.Parameters);
-   }
-}
-
-
-
-#define _SWRAST_NEW_DERIVED (_SWRAST_NEW_RASTERMASK |  \
-                            _NEW_TEXTURE |             \
-                            _NEW_HINT |                \
-                            _NEW_POLYGON )
-
-/* State referenced by _swrast_choose_triangle, _swrast_choose_line.
- */
-#define _SWRAST_NEW_TRIANGLE (_SWRAST_NEW_DERIVED |            \
-                             _NEW_RENDERMODE|                  \
-                              _NEW_POLYGON|                    \
-                              _NEW_DEPTH|                      \
-                              _NEW_STENCIL|                    \
-                              _NEW_COLOR|                      \
-                              _NEW_TEXTURE|                    \
-                              _SWRAST_NEW_RASTERMASK|          \
-                              _NEW_LIGHT|                      \
-                              _NEW_FOG |                       \
-                             _DD_NEW_SEPARATE_SPECULAR)
-
-#define _SWRAST_NEW_LINE (_SWRAST_NEW_DERIVED |                \
-                         _NEW_RENDERMODE|              \
-                          _NEW_LINE|                   \
-                          _NEW_TEXTURE|                        \
-                          _NEW_LIGHT|                  \
-                          _NEW_FOG|                    \
-                          _NEW_DEPTH |                 \
-                          _DD_NEW_SEPARATE_SPECULAR)
-
-#define _SWRAST_NEW_POINT (_SWRAST_NEW_DERIVED |       \
-                          _NEW_RENDERMODE |            \
-                          _NEW_POINT |                 \
-                          _NEW_TEXTURE |               \
-                          _NEW_LIGHT |                 \
-                          _NEW_FOG |                   \
-                           _DD_NEW_SEPARATE_SPECULAR)
-
-#define _SWRAST_NEW_TEXTURE_SAMPLE_FUNC _NEW_TEXTURE
-
-#define _SWRAST_NEW_TEXTURE_ENV_MODE _NEW_TEXTURE
-
-#define _SWRAST_NEW_BLEND_FUNC _NEW_COLOR
-
-
-
-/**
- * Stub for swrast->Triangle to select a true triangle function
- * after a state change.
- */
-static void
-_swrast_validate_triangle( GLcontext *ctx,
-                          const SWvertex *v0,
-                           const SWvertex *v1,
-                           const SWvertex *v2 )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   _swrast_validate_derived( ctx );
-   swrast->choose_triangle( ctx );
-
-   if (ctx->Texture._EnabledUnits == 0
-       && NEED_SECONDARY_COLOR(ctx)
-       && !ctx->FragmentProgram._Active) {
-      /* separate specular color, but no texture */
-      swrast->SpecTriangle = swrast->Triangle;
-      swrast->Triangle = _swrast_add_spec_terms_triangle;
-   }
-
-   swrast->Triangle( ctx, v0, v1, v2 );
-}
-
-/**
- * Called via swrast->Line.  Examine current GL state and choose a software
- * line routine.  Then call it.
- */
-static void
-_swrast_validate_line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   _swrast_validate_derived( ctx );
-   swrast->choose_line( ctx );
-
-   if (ctx->Texture._EnabledUnits == 0
-       && NEED_SECONDARY_COLOR(ctx)
-       && !ctx->FragmentProgram._Active) {
-      swrast->SpecLine = swrast->Line;
-      swrast->Line = _swrast_add_spec_terms_line;
-   }
-
-
-   swrast->Line( ctx, v0, v1 );
-}
-
-/**
- * Called via swrast->Point.  Examine current GL state and choose a software
- * point routine.  Then call it.
- */
-static void
-_swrast_validate_point( GLcontext *ctx, const SWvertex *v0 )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   _swrast_validate_derived( ctx );
-   swrast->choose_point( ctx );
-
-   if (ctx->Texture._EnabledUnits == 0
-       && NEED_SECONDARY_COLOR(ctx)
-       && !ctx->FragmentProgram._Active) {
-      swrast->SpecPoint = swrast->Point;
-      swrast->Point = _swrast_add_spec_terms_point;
-   }
-
-   swrast->Point( ctx, v0 );
-}
-
-
-/**
- * Called via swrast->BlendFunc.  Examine GL state to choose a blending
- * function, then call it.
- */
-static void _ASMAPI
-_swrast_validate_blend_func( GLcontext *ctx, GLuint n,
-                            const GLubyte mask[],
-                            GLchan src[][4],
-                            CONST GLchan dst[][4] )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   _swrast_validate_derived( ctx );
-   _swrast_choose_blend_func( ctx );
-
-   swrast->BlendFunc( ctx, n, mask, src, dst );
-}
-
-
-static void
-_swrast_sleep( GLcontext *ctx, GLbitfield new_state )
-{
-   (void) ctx; (void) new_state;
-}
-
-
-static void
-_swrast_invalidate_state( GLcontext *ctx, GLbitfield new_state )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GLuint i;
-
-   swrast->NewState |= new_state;
-
-   /* After 10 statechanges without any swrast functions being called,
-    * put the module to sleep.
-    */
-   if (++swrast->StateChanges > 10) {
-      swrast->InvalidateState = _swrast_sleep;
-      swrast->NewState = ~0;
-      new_state = ~0;
-   }
-
-   if (new_state & swrast->InvalidateTriangleMask)
-      swrast->Triangle = _swrast_validate_triangle;
-
-   if (new_state & swrast->InvalidateLineMask)
-      swrast->Line = _swrast_validate_line;
-
-   if (new_state & swrast->InvalidatePointMask)
-      swrast->Point = _swrast_validate_point;
-
-   if (new_state & _SWRAST_NEW_BLEND_FUNC)
-      swrast->BlendFunc = _swrast_validate_blend_func;
-
-   if (new_state & _SWRAST_NEW_TEXTURE_SAMPLE_FUNC)
-      for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
-        swrast->TextureSample[i] = NULL;
-}
-
-
-static void
-_swrast_update_texture_samplers(GLcontext *ctx)
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   GLuint u;
-
-   for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) {
-      const struct gl_texture_object *tObj = ctx->Texture.Unit[u]._Current;
-      if (tObj)
-         swrast->TextureSample[u] =
-            _swrast_choose_texture_sample_func(ctx, tObj);
-   }
-}
-
-
-void
-_swrast_validate_derived( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   if (swrast->NewState) {
-      if (swrast->NewState & _SWRAST_NEW_RASTERMASK)
-        _swrast_update_rasterflags( ctx );
-
-      if (swrast->NewState & _NEW_POLYGON)
-        _swrast_update_polygon( ctx );
-
-      if (swrast->NewState & (_NEW_HINT | _NEW_PROGRAM))
-        _swrast_update_fog_hint( ctx );
-
-      if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE)
-        _swrast_update_texture_env( ctx );
-
-      if (swrast->NewState & (_NEW_FOG | _NEW_PROGRAM))
-         _swrast_update_fog_state( ctx );
-
-      if (swrast->NewState & _NEW_PROGRAM)
-        _swrast_update_fragment_program( ctx );
-
-      if (swrast->NewState & _NEW_TEXTURE)
-         _swrast_update_texture_samplers( ctx );
-
-      swrast->NewState = 0;
-      swrast->StateChanges = 0;
-      swrast->InvalidateState = _swrast_invalidate_state;
-   }
-}
-
-#define SWRAST_DEBUG 0
-
-/* Public entrypoints:  See also s_accum.c, s_bitmap.c, etc.
- */
-void
-_swrast_Quad( GLcontext *ctx,
-             const SWvertex *v0, const SWvertex *v1,
-              const SWvertex *v2, const SWvertex *v3 )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_Quad\n");
-      _swrast_print_vertex( ctx, v0 );
-      _swrast_print_vertex( ctx, v1 );
-      _swrast_print_vertex( ctx, v2 );
-      _swrast_print_vertex( ctx, v3 );
-   }
-   SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v3 );
-   SWRAST_CONTEXT(ctx)->Triangle( ctx, v1, v2, v3 );
-}
-
-void
-_swrast_Triangle( GLcontext *ctx, const SWvertex *v0,
-                  const SWvertex *v1, const SWvertex *v2 )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_Triangle\n");
-      _swrast_print_vertex( ctx, v0 );
-      _swrast_print_vertex( ctx, v1 );
-      _swrast_print_vertex( ctx, v2 );
-   }
-   SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 );
-}
-
-void
-_swrast_Line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_Line\n");
-      _swrast_print_vertex( ctx, v0 );
-      _swrast_print_vertex( ctx, v1 );
-   }
-   SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 );
-}
-
-void
-_swrast_Point( GLcontext *ctx, const SWvertex *v0 )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_Point\n");
-      _swrast_print_vertex( ctx, v0 );
-   }
-   SWRAST_CONTEXT(ctx)->Point( ctx, v0 );
-}
-
-void
-_swrast_InvalidateState( GLcontext *ctx, GLbitfield new_state )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_InvalidateState\n");
-   }
-   SWRAST_CONTEXT(ctx)->InvalidateState( ctx, new_state );
-}
-
-void
-_swrast_ResetLineStipple( GLcontext *ctx )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_ResetLineStipple\n");
-   }
-   SWRAST_CONTEXT(ctx)->StippleCounter = 0;
-}
-
-void
-_swrast_allow_vertex_fog( GLcontext *ctx, GLboolean value )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_allow_vertex_fog %d\n", value);
-   }
-   SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
-   SWRAST_CONTEXT(ctx)->AllowVertexFog = value;
-}
-
-void
-_swrast_allow_pixel_fog( GLcontext *ctx, GLboolean value )
-{
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_allow_pixel_fog %d\n", value);
-   }
-   SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
-   SWRAST_CONTEXT(ctx)->AllowPixelFog = value;
-}
-
-
-GLboolean
-_swrast_CreateContext( GLcontext *ctx )
-{
-   GLuint i;
-   SWcontext *swrast = (SWcontext *)CALLOC(sizeof(SWcontext));
-
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_CreateContext\n");
-   }
-
-   if (!swrast)
-      return GL_FALSE;
-
-   swrast->NewState = ~0;
-
-   swrast->choose_point = _swrast_choose_point;
-   swrast->choose_line = _swrast_choose_line;
-   swrast->choose_triangle = _swrast_choose_triangle;
-
-   swrast->InvalidatePointMask = _SWRAST_NEW_POINT;
-   swrast->InvalidateLineMask = _SWRAST_NEW_LINE;
-   swrast->InvalidateTriangleMask = _SWRAST_NEW_TRIANGLE;
-
-   swrast->Point = _swrast_validate_point;
-   swrast->Line = _swrast_validate_line;
-   swrast->Triangle = _swrast_validate_triangle;
-   swrast->InvalidateState = _swrast_sleep;
-   swrast->BlendFunc = _swrast_validate_blend_func;
-
-   swrast->AllowVertexFog = GL_TRUE;
-   swrast->AllowPixelFog = GL_TRUE;
-
-   /* Optimized Accum buffer */
-   swrast->_IntegerAccumMode = GL_FALSE;
-   swrast->_IntegerAccumScaler = 0.0;
-
-   for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
-      swrast->TextureSample[i] = NULL;
-
-   swrast->SpanArrays = MALLOC_STRUCT(span_arrays);
-   if (!swrast->SpanArrays) {
-      FREE(swrast);
-      return GL_FALSE;
-   }
-
-   /* init point span buffer */
-   swrast->PointSpan.primitive = GL_POINT;
-   swrast->PointSpan.start = 0;
-   swrast->PointSpan.end = 0;
-   swrast->PointSpan.facing = 0;
-   swrast->PointSpan.array = swrast->SpanArrays;
-
-   assert(ctx->Const.MaxTextureUnits > 0);
-   assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_UNITS);
-
-   swrast->TexelBuffer = (GLchan *) MALLOC(ctx->Const.MaxTextureUnits *
-                                           MAX_WIDTH * 4 * sizeof(GLchan));
-   if (!swrast->TexelBuffer) {
-      FREE(swrast->SpanArrays);
-      FREE(swrast);
-      return GL_FALSE;
-   }
-
-   ctx->swrast_context = swrast;
-
-   return GL_TRUE;
-}
-
-void
-_swrast_DestroyContext( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
-   if (SWRAST_DEBUG) {
-      _mesa_debug(ctx, "_swrast_DestroyContext\n");
-   }
-
-   FREE( swrast->SpanArrays );
-   FREE( swrast->TexelBuffer );
-   FREE( swrast );
-
-   ctx->swrast_context = 0;
-}
-
-
-struct swrast_device_driver *
-_swrast_GetDeviceDriverReference( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   return &swrast->Driver;
-}
-
-void
-_swrast_flush( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   /* flush any pending fragments from rendering points */
-   if (swrast->PointSpan.end > 0) {
-      if (ctx->Visual.rgbMode) {
-         _swrast_write_rgba_span(ctx, &(swrast->PointSpan));
-      }
-      else {
-         _swrast_write_index_span(ctx, &(swrast->PointSpan));
-      }
-      swrast->PointSpan.end = 0;
-   }
-}
-
-void
-_swrast_render_primitive( GLcontext *ctx, GLenum prim )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   if (swrast->Primitive == GL_POINTS && prim != GL_POINTS) {
-      _swrast_flush(ctx);
-   }
-   swrast->Primitive = prim;
-}
-
-
-void
-_swrast_render_start( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   if (swrast->Driver.SpanRenderStart)
-      swrast->Driver.SpanRenderStart( ctx );
-   swrast->PointSpan.end = 0;
-}
-void
-_swrast_render_finish( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   if (swrast->Driver.SpanRenderFinish)
-      swrast->Driver.SpanRenderFinish( ctx );
-
-   _swrast_flush(ctx);
-}
-
-
-#define SWRAST_DEBUG_VERTICES 0
-
-void
-_swrast_print_vertex( GLcontext *ctx, const SWvertex *v )
-{
-   GLuint i;
-
-   if (SWRAST_DEBUG_VERTICES) {
-      _mesa_debug(ctx, "win %f %f %f %f\n",
-                  v->win[0], v->win[1], v->win[2], v->win[3]);
-
-      for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
-        if (ctx->Texture.Unit[i]._ReallyEnabled)
-           _mesa_debug(ctx, "texcoord[%d] %f %f %f %f\n", i,
-                        v->texcoord[i][0], v->texcoord[i][1],
-                        v->texcoord[i][2], v->texcoord[i][3]);
-
-#if CHAN_TYPE == GL_FLOAT
-      _mesa_debug(ctx, "color %f %f %f %f\n",
-                  v->color[0], v->color[1], v->color[2], v->color[3]);
-      _mesa_debug(ctx, "spec %f %f %f %f\n",
-                  v->specular[0], v->specular[1],
-                  v->specular[2], v->specular[3]);
-#else
-      _mesa_debug(ctx, "color %d %d %d %d\n",
-                  v->color[0], v->color[1], v->color[2], v->color[3]);
-      _mesa_debug(ctx, "spec %d %d %d %d\n",
-                  v->specular[0], v->specular[1],
-                  v->specular[2], v->specular[3]);
-#endif
-      _mesa_debug(ctx, "fog %f\n", v->fog);
-      _mesa_debug(ctx, "index %d\n", v->index);
-      _mesa_debug(ctx, "pointsize %f\n", v->pointSize);
-      _mesa_debug(ctx, "\n");
-   }
-}
+/*\r
+ * Mesa 3-D graphics library\r
+ * Version:  6.5\r
+ *\r
+ * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ *\r
+ * Authors:\r
+ *    Keith Whitwell <keith@tungstengraphics.com>\r
+ *    Brian Paul\r
+ */\r
+\r
+#include "imports.h"\r
+#include "bufferobj.h"\r
+#include "context.h"\r
+#include "colormac.h"\r
+#include "mtypes.h"\r
+#include "program.h"\r
+#include "swrast.h"\r
+#include "s_blend.h"\r
+#include "s_context.h"\r
+#include "s_lines.h"\r
+#include "s_points.h"\r
+#include "s_span.h"\r
+#include "s_triangle.h"\r
+#include "s_texfilter.h"\r
+\r
+\r
+/**\r
+ * Recompute the value of swrast->_RasterMask, etc. according to\r
+ * the current context.  The _RasterMask field can be easily tested by\r
+ * drivers to determine certain basic GL state (does the primitive need\r
+ * stenciling, logic-op, fog, etc?).\r
+ */\r
+static void\r
+_swrast_update_rasterflags( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   GLbitfield rasterMask = 0;\r
+\r
+   if (ctx->Color.AlphaEnabled)           rasterMask |= ALPHATEST_BIT;\r
+   if (ctx->Color.BlendEnabled)           rasterMask |= BLEND_BIT;\r
+   if (ctx->Depth.Test)                   rasterMask |= DEPTH_BIT;\r
+   if (swrast->_FogEnabled)               rasterMask |= FOG_BIT;\r
+   if (ctx->Scissor.Enabled)              rasterMask |= CLIP_BIT;\r
+   if (ctx->Stencil.Enabled)              rasterMask |= STENCIL_BIT;\r
+   if (ctx->Visual.rgbMode) {\r
+      const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask);\r
+      if (colorMask != 0xffffffff)        rasterMask |= MASKING_BIT;\r
+      if (ctx->Color._LogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;\r
+      if (ctx->Texture._EnabledUnits)     rasterMask |= TEXTURE_BIT;\r
+   }\r
+   else {\r
+      if (ctx->Color.IndexMask != 0xffffffff) rasterMask |= MASKING_BIT;\r
+      if (ctx->Color.IndexLogicOpEnabled)     rasterMask |= LOGIC_OP_BIT;\r
+   }\r
+\r
+   if (   ctx->Viewport.X < 0\r
+       || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width\r
+       || ctx->Viewport.Y < 0\r
+       || ctx->Viewport.Y + ctx->Viewport.Height > (GLint) ctx->DrawBuffer->Height) {\r
+      rasterMask |= CLIP_BIT;\r
+   }\r
+\r
+   if (ctx->Query.CurrentOcclusionObject)\r
+      rasterMask |= OCCLUSION_BIT;\r
+\r
+\r
+   /* If we're not drawing to exactly one color buffer set the\r
+    * MULTI_DRAW_BIT flag.  Also set it if we're drawing to no\r
+    * buffers or the RGBA or CI mask disables all writes.\r
+    */\r
+   if (ctx->DrawBuffer->_NumColorDrawBuffers[0] != 1) {\r
+      /* more than one color buffer designated for writing (or zero buffers) */\r
+      rasterMask |= MULTI_DRAW_BIT;\r
+   }\r
+   else if (ctx->Visual.rgbMode && *((GLuint *) ctx->Color.ColorMask) == 0) {\r
+      rasterMask |= MULTI_DRAW_BIT; /* all RGBA channels disabled */\r
+   }\r
+   else if (!ctx->Visual.rgbMode && ctx->Color.IndexMask==0) {\r
+      rasterMask |= MULTI_DRAW_BIT; /* all color index bits disabled */\r
+   }\r
+\r
+   if (ctx->FragmentProgram._Active) {\r
+      rasterMask |= FRAGPROG_BIT;\r
+   }\r
+\r
+   if (ctx->ShaderObjects._FragmentShaderPresent) {\r
+      rasterMask |= FRAGPROG_BIT;\r
+   }\r
+\r
+   if (ctx->ATIFragmentShader._Enabled) {\r
+      rasterMask |= ATIFRAGSHADER_BIT;\r
+   }\r
+\r
+#if CHAN_TYPE == GL_FLOAT\r
+   if (ctx->Color.ClampFragmentColor == GL_TRUE) {\r
+      rasterMask |= CLAMPING_BIT;\r
+   }\r
+#endif\r
+\r
+   SWRAST_CONTEXT(ctx)->_RasterMask = rasterMask;\r
+}\r
+\r
+\r
+/**\r
+ * Examine polycon culls tate to compute the _BackfaceSign field.\r
+ * _BackfaceSign will be 0 if no culling, -1 if culling back-faces,\r
+ * and 1 if culling front-faces.  The Polygon FrontFace state also\r
+ * factors in.\r
+ */\r
+static void\r
+_swrast_update_polygon( GLcontext *ctx )\r
+{\r
+   GLfloat backface_sign = 1;\r
+\r
+   if (ctx->Polygon.CullFlag) {\r
+      backface_sign = 1;\r
+      switch(ctx->Polygon.CullFaceMode) {\r
+      case GL_BACK:\r
+        if(ctx->Polygon.FrontFace==GL_CCW)\r
+           backface_sign = -1;\r
+        break;\r
+      case GL_FRONT:\r
+        if(ctx->Polygon.FrontFace!=GL_CCW)\r
+           backface_sign = -1;\r
+        break;\r
+      default:\r
+      case GL_FRONT_AND_BACK:\r
+        backface_sign = 0;\r
+        break;\r
+      }\r
+   }\r
+   else {\r
+      backface_sign = 0;\r
+   }\r
+\r
+   SWRAST_CONTEXT(ctx)->_BackfaceSign = backface_sign;\r
+}\r
+\r
+\r
+/**\r
+ * Update the _PreferPixelFog field to indicate if we need to compute\r
+ * fog factors per-fragment.\r
+ */\r
+static void\r
+_swrast_update_fog_hint( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   swrast->_PreferPixelFog = (!swrast->AllowVertexFog ||\r
+                              ctx->FragmentProgram._Enabled || /* not _Active! */\r
+                             (ctx->Hint.Fog == GL_NICEST &&\r
+                              swrast->AllowPixelFog));\r
+}\r
+\r
+\r
+\r
+/**\r
+ * Update the swrast->_AnyTextureCombine flag.\r
+ */\r
+static void\r
+_swrast_update_texture_env( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   GLuint i;\r
+   swrast->_AnyTextureCombine = GL_FALSE;\r
+   for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {\r
+      if (ctx->Texture.Unit[i].EnvMode == GL_COMBINE_EXT ||\r
+          ctx->Texture.Unit[i].EnvMode == GL_COMBINE4_NV) {\r
+         swrast->_AnyTextureCombine = GL_TRUE;\r
+         return;\r
+      }\r
+   }\r
+}\r
+\r
+\r
+/**\r
+ * Update swrast->_FogColor and swrast->_FogEnable values.\r
+ */\r
+static void\r
+_swrast_update_fog_state( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   /* convert fog color to GLchan values */\r
+   CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[RCOMP], ctx->Fog.Color[RCOMP]);\r
+   CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[GCOMP], ctx->Fog.Color[GCOMP]);\r
+   CLAMPED_FLOAT_TO_CHAN(swrast->_FogColor[BCOMP], ctx->Fog.Color[BCOMP]);\r
+\r
+   /* determine if fog is needed, and if so, which fog mode */\r
+   swrast->_FogEnabled = GL_FALSE;\r
+   if (ctx->FragmentProgram._Active) {\r
+      if (ctx->FragmentProgram._Current->Base.Target==GL_FRAGMENT_PROGRAM_ARB) {\r
+         const struct fragment_program *p\r
+            = (struct fragment_program *) ctx->FragmentProgram._Current;\r
+         if (p->FogOption != GL_NONE) {\r
+            swrast->_FogEnabled = GL_TRUE;\r
+            swrast->_FogMode = p->FogOption;\r
+         }\r
+      }\r
+   }\r
+   else if (ctx->Fog.Enabled) {\r
+      swrast->_FogEnabled = GL_TRUE;\r
+      swrast->_FogMode = ctx->Fog.Mode;\r
+   }\r
+}\r
+\r
+\r
+/**\r
+ * Update state for running fragment programs.  Basically, load the\r
+ * program parameters with current state values.\r
+ */\r
+static void\r
+_swrast_update_fragment_program( GLcontext *ctx )\r
+{\r
+   if (ctx->FragmentProgram._Active) {\r
+      struct fragment_program *program = ctx->FragmentProgram._Current;\r
+      _mesa_load_state_parameters(ctx, program->Base.Parameters);\r
+   }\r
+}\r
+\r
+\r
+\r
+#define _SWRAST_NEW_DERIVED (_SWRAST_NEW_RASTERMASK |  \\r
+                            _NEW_TEXTURE |             \\r
+                            _NEW_HINT |                \\r
+                            _NEW_POLYGON )\r
+\r
+/* State referenced by _swrast_choose_triangle, _swrast_choose_line.\r
+ */\r
+#define _SWRAST_NEW_TRIANGLE (_SWRAST_NEW_DERIVED |            \\r
+                             _NEW_RENDERMODE|                  \\r
+                              _NEW_POLYGON|                    \\r
+                              _NEW_DEPTH|                      \\r
+                              _NEW_STENCIL|                    \\r
+                              _NEW_COLOR|                      \\r
+                              _NEW_TEXTURE|                    \\r
+                              _SWRAST_NEW_RASTERMASK|          \\r
+                              _NEW_LIGHT|                      \\r
+                              _NEW_FOG |                       \\r
+                             _DD_NEW_SEPARATE_SPECULAR)\r
+\r
+#define _SWRAST_NEW_LINE (_SWRAST_NEW_DERIVED |                \\r
+                         _NEW_RENDERMODE|              \\r
+                          _NEW_LINE|                   \\r
+                          _NEW_TEXTURE|                        \\r
+                          _NEW_LIGHT|                  \\r
+                          _NEW_FOG|                    \\r
+                          _NEW_DEPTH |                 \\r
+                          _DD_NEW_SEPARATE_SPECULAR)\r
+\r
+#define _SWRAST_NEW_POINT (_SWRAST_NEW_DERIVED |       \\r
+                          _NEW_RENDERMODE |            \\r
+                          _NEW_POINT |                 \\r
+                          _NEW_TEXTURE |               \\r
+                          _NEW_LIGHT |                 \\r
+                          _NEW_FOG |                   \\r
+                           _DD_NEW_SEPARATE_SPECULAR)\r
+\r
+#define _SWRAST_NEW_TEXTURE_SAMPLE_FUNC _NEW_TEXTURE\r
+\r
+#define _SWRAST_NEW_TEXTURE_ENV_MODE _NEW_TEXTURE\r
+\r
+#define _SWRAST_NEW_BLEND_FUNC _NEW_COLOR\r
+\r
+\r
+\r
+/**\r
+ * Stub for swrast->Triangle to select a true triangle function\r
+ * after a state change.\r
+ */\r
+static void\r
+_swrast_validate_triangle( GLcontext *ctx,\r
+                          const SWvertex *v0,\r
+                           const SWvertex *v1,\r
+                           const SWvertex *v2 )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   _swrast_validate_derived( ctx );\r
+   swrast->choose_triangle( ctx );\r
+\r
+   if (ctx->Texture._EnabledUnits == 0\r
+       && NEED_SECONDARY_COLOR(ctx)\r
+       && !ctx->FragmentProgram._Active) {\r
+      /* separate specular color, but no texture */\r
+      swrast->SpecTriangle = swrast->Triangle;\r
+      swrast->Triangle = _swrast_add_spec_terms_triangle;\r
+   }\r
+\r
+   swrast->Triangle( ctx, v0, v1, v2 );\r
+}\r
+\r
+/**\r
+ * Called via swrast->Line.  Examine current GL state and choose a software\r
+ * line routine.  Then call it.\r
+ */\r
+static void\r
+_swrast_validate_line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   _swrast_validate_derived( ctx );\r
+   swrast->choose_line( ctx );\r
+\r
+   if (ctx->Texture._EnabledUnits == 0\r
+       && NEED_SECONDARY_COLOR(ctx)\r
+       && !ctx->FragmentProgram._Active) {\r
+      swrast->SpecLine = swrast->Line;\r
+      swrast->Line = _swrast_add_spec_terms_line;\r
+   }\r
+\r
+\r
+   swrast->Line( ctx, v0, v1 );\r
+}\r
+\r
+/**\r
+ * Called via swrast->Point.  Examine current GL state and choose a software\r
+ * point routine.  Then call it.\r
+ */\r
+static void\r
+_swrast_validate_point( GLcontext *ctx, const SWvertex *v0 )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   _swrast_validate_derived( ctx );\r
+   swrast->choose_point( ctx );\r
+\r
+   if (ctx->Texture._EnabledUnits == 0\r
+       && NEED_SECONDARY_COLOR(ctx)\r
+       && !ctx->FragmentProgram._Active) {\r
+      swrast->SpecPoint = swrast->Point;\r
+      swrast->Point = _swrast_add_spec_terms_point;\r
+   }\r
+\r
+   swrast->Point( ctx, v0 );\r
+}\r
+\r
+\r
+/**\r
+ * Called via swrast->BlendFunc.  Examine GL state to choose a blending\r
+ * function, then call it.\r
+ */\r
+static void _ASMAPI\r
+_swrast_validate_blend_func( GLcontext *ctx, GLuint n,\r
+                            const GLubyte mask[],\r
+                            GLchan src[][4],\r
+                            CONST GLchan dst[][4] )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   _swrast_validate_derived( ctx );\r
+   _swrast_choose_blend_func( ctx );\r
+\r
+   swrast->BlendFunc( ctx, n, mask, src, dst );\r
+}\r
+\r
+\r
+static void\r
+_swrast_sleep( GLcontext *ctx, GLbitfield new_state )\r
+{\r
+   (void) ctx; (void) new_state;\r
+}\r
+\r
+\r
+static void\r
+_swrast_invalidate_state( GLcontext *ctx, GLbitfield new_state )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   GLuint i;\r
+\r
+   swrast->NewState |= new_state;\r
+\r
+   /* After 10 statechanges without any swrast functions being called,\r
+    * put the module to sleep.\r
+    */\r
+   if (++swrast->StateChanges > 10) {\r
+      swrast->InvalidateState = _swrast_sleep;\r
+      swrast->NewState = ~0;\r
+      new_state = ~0;\r
+   }\r
+\r
+   if (new_state & swrast->InvalidateTriangleMask)\r
+      swrast->Triangle = _swrast_validate_triangle;\r
+\r
+   if (new_state & swrast->InvalidateLineMask)\r
+      swrast->Line = _swrast_validate_line;\r
+\r
+   if (new_state & swrast->InvalidatePointMask)\r
+      swrast->Point = _swrast_validate_point;\r
+\r
+   if (new_state & _SWRAST_NEW_BLEND_FUNC)\r
+      swrast->BlendFunc = _swrast_validate_blend_func;\r
+\r
+   if (new_state & _SWRAST_NEW_TEXTURE_SAMPLE_FUNC)\r
+      for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)\r
+        swrast->TextureSample[i] = NULL;\r
+}\r
+\r
+\r
+static void\r
+_swrast_update_texture_samplers(GLcontext *ctx)\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   GLuint u;\r
+\r
+   for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) {\r
+      const struct gl_texture_object *tObj = ctx->Texture.Unit[u]._Current;\r
+      if (tObj)\r
+         swrast->TextureSample[u] =\r
+            _swrast_choose_texture_sample_func(ctx, tObj);\r
+   }\r
+}\r
+\r
+\r
+void\r
+_swrast_validate_derived( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   if (swrast->NewState) {\r
+      if (swrast->NewState & _SWRAST_NEW_RASTERMASK)\r
+        _swrast_update_rasterflags( ctx );\r
+\r
+      if (swrast->NewState & _NEW_POLYGON)\r
+        _swrast_update_polygon( ctx );\r
+\r
+      if (swrast->NewState & (_NEW_HINT | _NEW_PROGRAM))\r
+        _swrast_update_fog_hint( ctx );\r
+\r
+      if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE)\r
+        _swrast_update_texture_env( ctx );\r
+\r
+      if (swrast->NewState & (_NEW_FOG | _NEW_PROGRAM))\r
+         _swrast_update_fog_state( ctx );\r
+\r
+      if (swrast->NewState & _NEW_PROGRAM)\r
+        _swrast_update_fragment_program( ctx );\r
+\r
+      if (swrast->NewState & _NEW_TEXTURE)\r
+         _swrast_update_texture_samplers( ctx );\r
+\r
+      swrast->NewState = 0;\r
+      swrast->StateChanges = 0;\r
+      swrast->InvalidateState = _swrast_invalidate_state;\r
+   }\r
+}\r
+\r
+#define SWRAST_DEBUG 0\r
+\r
+/* Public entrypoints:  See also s_accum.c, s_bitmap.c, etc.\r
+ */\r
+void\r
+_swrast_Quad( GLcontext *ctx,\r
+             const SWvertex *v0, const SWvertex *v1,\r
+              const SWvertex *v2, const SWvertex *v3 )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_Quad\n");\r
+      _swrast_print_vertex( ctx, v0 );\r
+      _swrast_print_vertex( ctx, v1 );\r
+      _swrast_print_vertex( ctx, v2 );\r
+      _swrast_print_vertex( ctx, v3 );\r
+   }\r
+   SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v3 );\r
+   SWRAST_CONTEXT(ctx)->Triangle( ctx, v1, v2, v3 );\r
+}\r
+\r
+void\r
+_swrast_Triangle( GLcontext *ctx, const SWvertex *v0,\r
+                  const SWvertex *v1, const SWvertex *v2 )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_Triangle\n");\r
+      _swrast_print_vertex( ctx, v0 );\r
+      _swrast_print_vertex( ctx, v1 );\r
+      _swrast_print_vertex( ctx, v2 );\r
+   }\r
+   SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 );\r
+}\r
+\r
+void\r
+_swrast_Line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_Line\n");\r
+      _swrast_print_vertex( ctx, v0 );\r
+      _swrast_print_vertex( ctx, v1 );\r
+   }\r
+   SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 );\r
+}\r
+\r
+void\r
+_swrast_Point( GLcontext *ctx, const SWvertex *v0 )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_Point\n");\r
+      _swrast_print_vertex( ctx, v0 );\r
+   }\r
+   SWRAST_CONTEXT(ctx)->Point( ctx, v0 );\r
+}\r
+\r
+void\r
+_swrast_InvalidateState( GLcontext *ctx, GLbitfield new_state )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_InvalidateState\n");\r
+   }\r
+   SWRAST_CONTEXT(ctx)->InvalidateState( ctx, new_state );\r
+}\r
+\r
+void\r
+_swrast_ResetLineStipple( GLcontext *ctx )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_ResetLineStipple\n");\r
+   }\r
+   SWRAST_CONTEXT(ctx)->StippleCounter = 0;\r
+}\r
+\r
+void\r
+_swrast_allow_vertex_fog( GLcontext *ctx, GLboolean value )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_allow_vertex_fog %d\n", value);\r
+   }\r
+   SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );\r
+   SWRAST_CONTEXT(ctx)->AllowVertexFog = value;\r
+}\r
+\r
+void\r
+_swrast_allow_pixel_fog( GLcontext *ctx, GLboolean value )\r
+{\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_allow_pixel_fog %d\n", value);\r
+   }\r
+   SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );\r
+   SWRAST_CONTEXT(ctx)->AllowPixelFog = value;\r
+}\r
+\r
+\r
+GLboolean\r
+_swrast_CreateContext( GLcontext *ctx )\r
+{\r
+   GLuint i;\r
+   SWcontext *swrast = (SWcontext *)CALLOC(sizeof(SWcontext));\r
+\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_CreateContext\n");\r
+   }\r
+\r
+   if (!swrast)\r
+      return GL_FALSE;\r
+\r
+   swrast->NewState = ~0;\r
+\r
+   swrast->choose_point = _swrast_choose_point;\r
+   swrast->choose_line = _swrast_choose_line;\r
+   swrast->choose_triangle = _swrast_choose_triangle;\r
+\r
+   swrast->InvalidatePointMask = _SWRAST_NEW_POINT;\r
+   swrast->InvalidateLineMask = _SWRAST_NEW_LINE;\r
+   swrast->InvalidateTriangleMask = _SWRAST_NEW_TRIANGLE;\r
+\r
+   swrast->Point = _swrast_validate_point;\r
+   swrast->Line = _swrast_validate_line;\r
+   swrast->Triangle = _swrast_validate_triangle;\r
+   swrast->InvalidateState = _swrast_sleep;\r
+   swrast->BlendFunc = _swrast_validate_blend_func;\r
+\r
+   swrast->AllowVertexFog = GL_TRUE;\r
+   swrast->AllowPixelFog = GL_TRUE;\r
+\r
+   /* Optimized Accum buffer */\r
+   swrast->_IntegerAccumMode = GL_FALSE;\r
+   swrast->_IntegerAccumScaler = 0.0;\r
+\r
+   for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)\r
+      swrast->TextureSample[i] = NULL;\r
+\r
+   swrast->SpanArrays = MALLOC_STRUCT(span_arrays);\r
+   if (!swrast->SpanArrays) {\r
+      FREE(swrast);\r
+      return GL_FALSE;\r
+   }\r
+\r
+   /* init point span buffer */\r
+   swrast->PointSpan.primitive = GL_POINT;\r
+   swrast->PointSpan.start = 0;\r
+   swrast->PointSpan.end = 0;\r
+   swrast->PointSpan.facing = 0;\r
+   swrast->PointSpan.array = swrast->SpanArrays;\r
+\r
+   assert(ctx->Const.MaxTextureUnits > 0);\r
+   assert(ctx->Const.MaxTextureUnits <= MAX_TEXTURE_UNITS);\r
+\r
+   swrast->TexelBuffer = (GLchan *) MALLOC(ctx->Const.MaxTextureUnits *\r
+                                           MAX_WIDTH * 4 * sizeof(GLchan));\r
+   if (!swrast->TexelBuffer) {\r
+      FREE(swrast->SpanArrays);\r
+      FREE(swrast);\r
+      return GL_FALSE;\r
+   }\r
+\r
+   ctx->swrast_context = swrast;\r
+\r
+   return GL_TRUE;\r
+}\r
+\r
+void\r
+_swrast_DestroyContext( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+\r
+   if (SWRAST_DEBUG) {\r
+      _mesa_debug(ctx, "_swrast_DestroyContext\n");\r
+   }\r
+\r
+   FREE( swrast->SpanArrays );\r
+   FREE( swrast->TexelBuffer );\r
+   FREE( swrast );\r
+\r
+   ctx->swrast_context = 0;\r
+}\r
+\r
+\r
+struct swrast_device_driver *\r
+_swrast_GetDeviceDriverReference( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   return &swrast->Driver;\r
+}\r
+\r
+void\r
+_swrast_flush( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   /* flush any pending fragments from rendering points */\r
+   if (swrast->PointSpan.end > 0) {\r
+      if (ctx->Visual.rgbMode) {\r
+         _swrast_write_rgba_span(ctx, &(swrast->PointSpan));\r
+      }\r
+      else {\r
+         _swrast_write_index_span(ctx, &(swrast->PointSpan));\r
+      }\r
+      swrast->PointSpan.end = 0;\r
+   }\r
+}\r
+\r
+void\r
+_swrast_render_primitive( GLcontext *ctx, GLenum prim )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   if (swrast->Primitive == GL_POINTS && prim != GL_POINTS) {\r
+      _swrast_flush(ctx);\r
+   }\r
+   swrast->Primitive = prim;\r
+}\r
+\r
+\r
+void\r
+_swrast_render_start( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   if (swrast->Driver.SpanRenderStart)\r
+      swrast->Driver.SpanRenderStart( ctx );\r
+   swrast->PointSpan.end = 0;\r
+}\r
\r
+void\r
+_swrast_render_finish( GLcontext *ctx )\r
+{\r
+   SWcontext *swrast = SWRAST_CONTEXT(ctx);\r
+   if (swrast->Driver.SpanRenderFinish)\r
+      swrast->Driver.SpanRenderFinish( ctx );\r
+\r
+   _swrast_flush(ctx);\r
+}\r
+\r
+\r
+#define SWRAST_DEBUG_VERTICES 0\r
+\r
+void\r
+_swrast_print_vertex( GLcontext *ctx, const SWvertex *v )\r
+{\r
+   GLuint i;\r
+\r
+   if (SWRAST_DEBUG_VERTICES) {\r
+      _mesa_debug(ctx, "win %f %f %f %f\n",\r
+                  v->win[0], v->win[1], v->win[2], v->win[3]);\r
+\r
+      for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)\r
+        if (ctx->Texture.Unit[i]._ReallyEnabled)\r
+           _mesa_debug(ctx, "texcoord[%d] %f %f %f %f\n", i,\r
+                        v->texcoord[i][0], v->texcoord[i][1],\r
+                        v->texcoord[i][2], v->texcoord[i][3]);\r
+\r
+#if CHAN_TYPE == GL_FLOAT\r
+      _mesa_debug(ctx, "color %f %f %f %f\n",\r
+                  v->color[0], v->color[1], v->color[2], v->color[3]);\r
+      _mesa_debug(ctx, "spec %f %f %f %f\n",\r
+                  v->specular[0], v->specular[1],\r
+                  v->specular[2], v->specular[3]);\r
+#else\r
+      _mesa_debug(ctx, "color %d %d %d %d\n",\r
+                  v->color[0], v->color[1], v->color[2], v->color[3]);\r
+      _mesa_debug(ctx, "spec %d %d %d %d\n",\r
+                  v->specular[0], v->specular[1],\r
+                  v->specular[2], v->specular[3]);\r
+#endif\r
+      _mesa_debug(ctx, "fog %f\n", v->fog);\r
+      _mesa_debug(ctx, "index %d\n", v->index);\r
+      _mesa_debug(ctx, "pointsize %f\n", v->pointSize);\r
+      _mesa_debug(ctx, "\n");\r
+   }\r
+}\r
index c4a725fa197dd3395ca3378b6d5d08540203fd0d..02901a7ed94a530b0b2b347c253e1c28f63ac6b3 100644 (file)
@@ -1084,7 +1084,7 @@ _swrast_write_rgba_span( GLcontext *ctx, struct sw_span *span)
    const GLbitfield origArrayMask = span->arrayMask;
    const GLboolean deferredTexture = !(ctx->Color.AlphaEnabled ||
                                        ctx->FragmentProgram._Active ||
-                                       ctx->ShaderObjects.CurrentProgram);
+                                       ctx->ShaderObjects._FragmentShaderPresent);
 
    ASSERT(span->primitive == GL_POINT  ||  span->primitive == GL_LINE ||
          span->primitive == GL_POLYGON  ||  span->primitive == GL_BITMAP);
@@ -1156,7 +1156,7 @@ _swrast_write_rgba_span( GLcontext *ctx, struct sw_span *span)
          interpolate_fog(ctx, span);
 
       /* Compute fragment colors with fragment program or texture lookups */\r
-      if (ctx->ShaderObjects.CurrentProgram != NULL) {\r
+      if (ctx->ShaderObjects._FragmentShaderPresent) {\r
          if (span->interpMask & SPAN_Z)\r
             _swrast_span_interpolate_z (ctx, span);\r
          _swrast_exec_arbshader (ctx, span);\r
@@ -1240,7 +1240,7 @@ _swrast_write_rgba_span( GLcontext *ctx, struct sw_span *span)
       if (span->interpMask & SPAN_FOG)
          interpolate_fog(ctx, span);
 
-      if (ctx->ShaderObjects.CurrentProgram != NULL) {\r
+      if (ctx->ShaderObjects._FragmentShaderPresent) {\r
          if (span->interpMask & SPAN_Z)\r
             _swrast_span_interpolate_z (ctx, span);\r
          _swrast_exec_arbshader (ctx, span);\r
index 7472b51d7019c248c557ae947be2ceaf4efc5dde..11a5b654fc97bbe3dad0ff53c6a62eb97b35d084 100644 (file)
@@ -1264,7 +1264,7 @@ run_arb_vertex_program(GLcontext *ctx, struct tnl_pipeline_stage *stage)
    GLuint i, j;
    GLbitfield outputs;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    program = (ctx->VertexProgram._Enabled ? ctx->VertexProgram.Current : ctx->_TnlProgram);
@@ -1427,7 +1427,7 @@ validate_vertex_program( GLcontext *ctx, struct tnl_pipeline_stage *stage )
    struct arb_vp_machine *m = ARB_VP_MACHINE(stage);
    struct vertex_program *program;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return;
 
    program = (ctx->VertexProgram._Enabled ? ctx->VertexProgram.Current : 0);
index 65304372ddf2f76006cf55732ef0959841fc0f56..a2e6b37cd3082037491acc35d9567733400a0a09 100644 (file)
@@ -172,10 +172,10 @@ static GLboolean run_arb_vertex_shader (GLcontext *ctx, struct tnl_pipeline_stag
        struct gl2_program_intf **pro;\r
        GLsizei i, j;\r
 \r
-       pro = ctx->ShaderObjects.CurrentProgram;\r
-       if (pro == NULL)\r
+       if (!ctx->ShaderObjects._VertexShaderPresent)\r
                return GL_TRUE;\r
 \r
+       pro = ctx->ShaderObjects.CurrentProgram;\r
        (**pro).UpdateFixedUniforms (pro);\r
 \r
        for (i = 0; i < vb->Count; i++)\r
index 3a022e84c463baa7f63d9ca8799f51838f2b135f..b5ba68dc86db058eb31612aeff025b6e740318a2 100644 (file)
@@ -57,7 +57,7 @@ static GLboolean run_cull_stage( GLcontext *ctx,
    GLuint count = VB->Count;
    GLuint i;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (ctx->VertexProgram._Enabled ||
index 2bd9824dc0febaee7efa8dc1ebed1c59bddbc5c2..bbee44ebea03141a8bb608f21e4cdeed5acfe25f 100644 (file)
@@ -148,7 +148,7 @@ run_fog_stage(GLcontext *ctx, struct tnl_pipeline_stage *stage)
    struct fog_stage_data *store = FOG_STAGE_DATA(stage);
    GLvector4f *input;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (!ctx->Fog.Enabled || ctx->VertexProgram._Enabled)
index d4c83189c2445b13303070e6580c386ef5c305ad..4d360007a46a2737680abddaec779916fc571e59 100644 (file)
@@ -203,7 +203,7 @@ static GLboolean run_lighting( GLcontext *ctx,
    GLvector4f *input = ctx->_NeedEyeCoords ? VB->EyePtr : VB->ObjPtr;
    GLuint idx;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (!ctx->Light.Enabled || ctx->VertexProgram._Enabled)
@@ -264,7 +264,7 @@ static void validate_lighting( GLcontext *ctx,
 {
    light_func *tab;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return;
 
    if (!ctx->Light.Enabled || ctx->VertexProgram._Enabled)
index e87a67981e2ec17b46a38885a032fdfceaf3fc53..edcb4de6e9432d0ab397fcd5fdb021fdc1cab897 100644 (file)
@@ -95,7 +95,7 @@ validate_normal_stage(GLcontext *ctx, struct tnl_pipeline_stage *stage)
 {
    struct normal_stage_data *store = NORMAL_STAGE_DATA(stage);
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL) {
+   if (ctx->ShaderObjects._VertexShaderPresent) {
       store->NormalTransform = NULL;
       return;
    }
index d7f9ad687e803b509244bc6fb15cfec1f1693607..0ad36079170bb61dec8547472bc2d511a2bf6cb5 100644 (file)
@@ -47,7 +47,7 @@ struct point_stage_data {
 static GLboolean
 run_point_stage(GLcontext *ctx, struct tnl_pipeline_stage *stage)
 {
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (ctx->Point._Attenuated && !ctx->VertexProgram._Enabled) {
index 3908997d71cedda802fa7d2891cbce3506758b03..06789b97baf63eb28782901fab083ab650b56f6e 100644 (file)
@@ -80,7 +80,7 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
    struct vertex_program *program = ctx->VertexProgram.Current;
    GLuint i;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (!ctx->VertexProgram._Enabled ||
index 058e7b10b265e4f79a5e705208e343012fe6db24..bfb7a5036916379eddf8d5f38d96cd3ac4d117b2 100644 (file)
@@ -488,7 +488,7 @@ static GLboolean run_texgen_stage( GLcontext *ctx,
    struct texgen_stage_data *store = TEXGEN_STAGE_DATA(stage);
    GLuint i;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (!ctx->Texture._TexGenEnabled || ctx->VertexProgram._Enabled) 
@@ -516,7 +516,7 @@ static void validate_texgen_stage( GLcontext *ctx,
    struct texgen_stage_data *store = TEXGEN_STAGE_DATA(stage);
    GLuint i;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return;
 
    if (!ctx->Texture._TexGenEnabled || ctx->VertexProgram._Enabled) 
index 701f27bd8a53b468b51c70c0811f858c58f45bd6..1feb0b750efe2ffcae36d0a28497ce05bf5ff7ff 100644 (file)
@@ -61,7 +61,7 @@ static GLboolean run_texmat_stage( GLcontext *ctx,
    struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
    GLuint i;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (!ctx->Texture._TexMatEnabled || ctx->VertexProgram._Enabled) 
index f0694f9a69f9913715227cd82e8ed5ce96a891ca..e0a58aaaf3e2b47b916a45d5779b9dce3f73567a 100644 (file)
@@ -126,7 +126,7 @@ static GLboolean run_vertex_stage( GLcontext *ctx,
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    struct vertex_buffer *VB = &tnl->vb;
 
-   if (ctx->ShaderObjects.CurrentProgram != NULL)
+   if (ctx->ShaderObjects._VertexShaderPresent)
       return GL_TRUE;
 
    if (ctx->VertexProgram._Enabled)