Add-support-for-SPV_NVX_raytracing
authorChao Chen <chaoc@nvidia.com>
Wed, 19 Sep 2018 18:42:24 +0000 (11:42 -0700)
committerChao Chen <chaoc@nvidia.com>
Wed, 19 Sep 2018 20:07:43 +0000 (13:07 -0700)
50 files changed:
SPIRV/GLSL.ext.NV.h
SPIRV/GlslangToSpv.cpp
SPIRV/SpvBuilder.cpp
SPIRV/SpvBuilder.h
SPIRV/doc.cpp
StandAlone/StandAlone.cpp
Test/baseResults/spv.AnyHitShader.rahit.out [new file with mode: 0644]
Test/baseResults/spv.AnyHitShader_Errors.rahit.out [new file with mode: 0644]
Test/baseResults/spv.ClosestHitShader.rchit.out [new file with mode: 0644]
Test/baseResults/spv.ClosestHitShader_Errors.rchit.out [new file with mode: 0644]
Test/baseResults/spv.IntersectShader.rint.out [new file with mode: 0644]
Test/baseResults/spv.IntersectShader_Errors.rint.out [new file with mode: 0644]
Test/baseResults/spv.MissShader.rmiss.out [new file with mode: 0644]
Test/baseResults/spv.MissShader_Errors.rmiss.out [new file with mode: 0644]
Test/baseResults/spv.RayConstants.rgen.out [new file with mode: 0644]
Test/baseResults/spv.RayGenShader.rgen.out [new file with mode: 0644]
Test/baseResults/spv.RayGenShader_Errors.rgen.out [new file with mode: 0644]
Test/spv.AnyHitShader.rahit [new file with mode: 0644]
Test/spv.AnyHitShader_Errors.rahit [new file with mode: 0644]
Test/spv.ClosestHitShader.rchit [new file with mode: 0644]
Test/spv.ClosestHitShader_Errors.rchit [new file with mode: 0644]
Test/spv.IntersectShader.rint [new file with mode: 0644]
Test/spv.IntersectShader_Errors.rint [new file with mode: 0644]
Test/spv.MissShader.rmiss [new file with mode: 0644]
Test/spv.MissShader_Errors.rmiss [new file with mode: 0644]
Test/spv.RayConstants.rgen [new file with mode: 0644]
Test/spv.RayGenShader.rgen [new file with mode: 0644]
Test/spv.RayGenShader_Errors.rgen [new file with mode: 0644]
glslang/Include/BaseTypes.h
glslang/Include/Types.h
glslang/Include/intermediate.h
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/Intermediate.cpp
glslang/MachineIndependent/ParseContextBase.cpp
glslang/MachineIndependent/ParseHelper.cpp
glslang/MachineIndependent/ParseHelper.h
glslang/MachineIndependent/Scan.cpp
glslang/MachineIndependent/ShaderLang.cpp
glslang/MachineIndependent/SymbolTable.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/Versions.h
glslang/MachineIndependent/glslang.y
glslang/MachineIndependent/glslang_tab.cpp
glslang/MachineIndependent/glslang_tab.cpp.h
glslang/MachineIndependent/intermOut.cpp
glslang/MachineIndependent/linkValidate.cpp
glslang/MachineIndependent/localintermediate.h
glslang/Public/ShaderLang.h
gtests/Spv.FromFile.cpp
gtests/TestFixture.cpp

index 9c551d1..1904bac 100644 (file)
@@ -33,7 +33,7 @@ enum Op;
 enum Capability;
 
 static const int GLSLextNVVersion = 100;
-static const int GLSLextNVRevision = 9;
+static const int GLSLextNVRevision = 10;
 
 //SPV_NV_sample_mask_override_coverage
 const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage";
@@ -66,4 +66,7 @@ const char* const E_SPV_NV_shader_image_footprint = "SPV_NV_shader_image_footpri
 //SPV_NV_mesh_shader
 const char* const E_SPV_NV_mesh_shader = "SPV_NV_mesh_shader";
 
-#endif  // #ifndef GLSLextNV_H
\ No newline at end of file
+//SPV_NVX_raytracing
+const char* const E_SPV_NVX_raytracing = "SPV_NVX_raytracing";
+
+#endif  // #ifndef GLSLextNV_H
index 11d8e31..d1b23d8 100755 (executable)
@@ -276,6 +276,12 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage)
     case EShLangFragment:         return spv::ExecutionModelFragment;
     case EShLangCompute:          return spv::ExecutionModelGLCompute;
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:         return spv::ExecutionModelRayGenerationNVX;
+    case EShLangIntersectNV:      return spv::ExecutionModelIntersectionNVX;
+    case EShLangAnyHitNV:         return spv::ExecutionModelAnyHitNVX;
+    case EShLangClosestHitNV:     return spv::ExecutionModelClosestHitNVX;
+    case EShLangMissNV:           return spv::ExecutionModelMissNVX;
+    case EShLangCallableNV:       return spv::ExecutionModelCallableNVX;
     case EShLangTaskNV:           return spv::ExecutionModelTaskNV;
     case EShLangMeshNV:           return spv::ExecutionModelMeshNV;
 #endif
@@ -328,6 +334,11 @@ spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useSto
         case glslang::EvqBuffer:       return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
         case glslang::EvqVaryingIn:    return spv::DecorationBlock;
         case glslang::EvqVaryingOut:   return spv::DecorationBlock;
+#ifdef NV_EXTENSIONS
+        case glslang::EvqPayloadNV:    return spv::DecorationBlock;
+        case glslang::EvqPayloadInNV:  return spv::DecorationBlock;
+        case glslang::EvqHitAttrNV:    return spv::DecorationBlock;
+#endif
         default:
             assert(0);
             break;
@@ -396,6 +407,12 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
                     assert(type.getQualifier().layoutPacking == glslang::ElpNone);
                 }
                 return spv::DecorationMax;
+#ifdef NV_EXTENSIONS
+            case glslang::EvqPayloadNV:
+            case glslang::EvqPayloadInNV:
+            case glslang::EvqHitAttrNV:
+                return spv::DecorationMax;
+#endif
             default:
                 assert(0);
                 return spv::DecorationMax;
@@ -847,6 +864,34 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
         builder.addExtension(spv::E_SPV_EXT_fragment_fully_covered);
         builder.addCapability(spv::CapabilityFragmentFullyCoveredEXT);
         return spv::BuiltInFullyCoveredEXT;
+
+    // raytracing
+    case glslang::EbvLaunchIdNV:
+        return spv::BuiltInLaunchIdNVX;
+    case glslang::EbvLaunchSizeNV:
+        return spv::BuiltInLaunchSizeNVX;
+    case glslang::EbvWorldRayOriginNV:
+        return spv::BuiltInWorldRayOriginNVX;
+    case glslang::EbvWorldRayDirectionNV:
+        return spv::BuiltInWorldRayDirectionNVX;
+    case glslang::EbvObjectRayOriginNV:
+        return spv::BuiltInObjectRayOriginNVX;
+    case glslang::EbvObjectRayDirectionNV:
+        return spv::BuiltInObjectRayDirectionNVX;
+    case glslang::EbvRayTminNV:
+        return spv::BuiltInRayTminNVX;
+    case glslang::EbvRayTmaxNV:
+        return spv::BuiltInRayTmaxNVX;
+    case glslang::EbvInstanceCustomIndexNV:
+        return spv::BuiltInInstanceCustomIndexNVX;
+    case glslang::EbvHitTNV:
+        return spv::BuiltInHitTNVX;
+    case glslang::EbvHitKindNV:
+        return spv::BuiltInHitKindNVX;
+    case glslang::EbvObjectToWorldNV:
+        return spv::BuiltInObjectToWorldNVX;
+    case glslang::EbvWorldToObjectNV:
+        return spv::BuiltInWorldToObjectNVX;
     case glslang::EbvBaryCoordNV:
         builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
         builder.addCapability(spv::CapabilityFragmentBarycentricNV);
@@ -1027,6 +1072,10 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
     if (type.getQualifier().isUniformOrBuffer()) {
         if (type.getQualifier().layoutPushConstant)
             return spv::StorageClassPushConstant;
+#ifdef NV_EXTENSIONS
+        if (type.getQualifier().layoutShaderRecordNV)
+            return spv::StorageClassShaderRecordBufferNVX;
+#endif
         if (type.getBasicType() == glslang::EbtBlock)
             return spv::StorageClassUniform;
         return spv::StorageClassUniformConstant;
@@ -1037,6 +1086,11 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
     case glslang::EvqGlobal:        return spv::StorageClassPrivate;
     case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
     case glslang::EvqTemporary:     return spv::StorageClassFunction;
+#ifdef NV_EXTENSIONS
+    case glslang::EvqPayloadNV:     return spv::StorageClassRayPayloadNVX;
+    case glslang::EvqPayloadInNV:   return spv::StorageClassIncomingRayPayloadNVX;
+    case glslang::EvqHitAttrNV:     return spv::StorageClassHitAttributeNVX;
+#endif
     default:
         assert(0);
         break;
@@ -1092,7 +1146,11 @@ bool IsDescriptorResource(const glslang::TType& type)
 {
     // uniform and buffer blocks are included, unless it is a push_constant
     if (type.getBasicType() == glslang::EbtBlock)
-        return type.getQualifier().isUniformOrBuffer() && ! type.getQualifier().layoutPushConstant;
+        return type.getQualifier().isUniformOrBuffer() &&
+#ifdef NV_EXTENSIONS
+        ! type.getQualifier().layoutShaderRecordNV &&
+#endif
+        ! type.getQualifier().layoutPushConstant;
 
     // non block...
     // basically samplerXXX/subpass/sampler/texture are all included
@@ -1358,6 +1416,15 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl
         break;
 
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+    case EShLangCallableNV:
+        builder.addCapability(spv::CapabilityRaytracingNVX);
+        builder.addExtension("SPV_NVX_raytracing");
+        break;
     case EShLangTaskNV:
     case EShLangMeshNV:
         builder.addCapability(spv::CapabilityMeshShadingNV);
@@ -2189,6 +2256,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
         break;
 
 #ifdef NV_EXTENSIONS
+    case glslang::EOpIgnoreIntersectionNV:
+    case glslang::EOpTerminateRayNV:
+    case glslang::EOpTraceNV:
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         noReturnValue = true;
         break;
@@ -2860,6 +2930,11 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
         builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
         break;
+#ifdef NV_EXTENSIONS
+    case glslang::EbtAccStructNV:
+        spvType = builder.makeAccelerationStructureNVType();
+        break;
+#endif
     case glslang::EbtSampler:
         {
             const glslang::TSampler& sampler = type.getSampler();
@@ -6784,6 +6859,18 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
         break;
 
 #ifdef NV_EXTENSIONS
+    case glslang::EOpReportIntersectionNV:
+    {
+        typeId = builder.makeBoolType();
+        opCode = spv::OpReportIntersectionNVX;
+    }
+    break;
+    case glslang::EOpTraceNV:
+    {
+        builder.createNoResultOp(spv::OpTraceNVX, operands);
+        return 0;
+    }
+    break;
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
         return 0;
@@ -6962,6 +7049,14 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
         return builder.setPrecision(id, precision);
     }
 #endif
+#ifdef NV_EXTENSIONS
+    case glslang::EOpIgnoreIntersectionNV:
+        builder.createNoResultOp(spv::OpIgnoreIntersectionNVX);
+        return 0;
+    case glslang::EOpTerminateRayNV:
+        builder.createNoResultOp(spv::OpTerminateRayNVX);
+        return 0;
+#endif
     default:
         logger->missingFunctionality("unknown operation with no arguments");
         return 0;
index c13f77f..e74c7b9 100644 (file)
@@ -503,6 +503,21 @@ Id Builder::makeSampledImageType(Id imageType)
     return type->getResultId();
 }
 
+#ifdef NV_EXTENSIONS
+Id Builder::makeAccelerationStructureNVType()
+{
+    Instruction *type;
+    if (groupedTypes[OpTypeAccelerationStructureNVX].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureNVX);
+        constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+        module.mapInstruction(type);
+    } else {
+        type = groupedTypes[OpTypeAccelerationStructureNVX].back();
+    }
+
+    return type->getResultId();
+}
+#endif
 Id Builder::getDerefTypeId(Id resultId) const
 {
     Id typeId = getTypeId(resultId);
@@ -1377,7 +1392,7 @@ void Builder::createNoResultOp(Op opCode, Id operand)
     buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
 }
 
-// An opcode that has multiple operands, no result id, and no type
+// An opcode that has one or more operands, no result id, and no type
 void Builder::createNoResultOp(Op opCode, const std::vector<Id>& operands)
 {
     Instruction* op = new Instruction(opCode);
index 94533e4..bfa6b61 100644 (file)
@@ -131,6 +131,11 @@ public:
     Id makeSamplerType();
     Id makeSampledImageType(Id imageType);
 
+#ifdef NV_EXTENSIONS
+    // accelerationStructureNV type
+    Id makeAccelerationStructureNVType();
+#endif
+
     // For querying about types.
     Id getTypeId(Id resultId) const { return module.getTypeId(resultId); }
     Id getDerefTypeId(Id resultId) const;
index dc46c95..57d23d6 100644 (file)
@@ -104,6 +104,16 @@ const char* ExecutionModelString(int model)
 #endif
 
     default: return "Bad";
+
+#ifdef NV_EXTENSIONS
+    case ExecutionModelRayGenerationNVX: return "RayGenerationNVX";
+    case ExecutionModelIntersectionNVX:  return "IntersectionNVX";
+    case ExecutionModelAnyHitNVX:        return "AnyHitNVX";
+    case ExecutionModelClosestHitNVX:    return "ClosestHitNVX";
+    case ExecutionModelMissNVX:          return "MissNVX";
+    case ExecutionModelCallableNVX:      return "CallableNVX";
+#endif
+
     }
 }
 
@@ -201,6 +211,13 @@ const char* StorageClassString(int StorageClass)
     case 11: return "Image";
     case 12: return "StorageBuffer";
 
+#ifdef NV_EXTENSIONS
+    case StorageClassRayPayloadNVX:         return "RayPayloadNVX";
+    case StorageClassHitAttributeNVX:       return "HitAttributeNVX";
+    case StorageClassIncomingRayPayloadNVX: return "IncomingRayPayloadNVX";
+    case StorageClassShaderRecordBufferNVX: return "ShaderRecordBufferNVX";
+#endif
+
     default: return "Bad";
     }
 }
@@ -350,13 +367,26 @@ const char* BuiltInString(int builtIn)
 #endif
 
 #ifdef NV_EXTENSIONS
-    case 5253: return "ViewportMaskNV";
-    case 5257: return "SecondaryPositionNV";
-    case 5258: return "SecondaryViewportMaskNV";
-    case 5261: return "PositionPerViewNV";
-    case 5262: return "ViewportMaskPerViewNV";
-    case BuiltInBaryCoordNV:        return "BaryCoordNV";
-    case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV";
+    case BuiltInLaunchIdNVX:                return "LaunchIdNVX";
+    case BuiltInLaunchSizeNVX:              return "LaunchSizeNVX";
+    case BuiltInWorldRayOriginNVX:          return "WorldRayOriginNVX";
+    case BuiltInWorldRayDirectionNVX:       return "WorldRayDirectionNVX";
+    case BuiltInObjectRayOriginNVX:         return "ObjectRayOriginNVX";
+    case BuiltInObjectRayDirectionNVX:      return "ObjectRayDirectionNVX";
+    case BuiltInRayTminNVX:                 return "RayTminNVX";
+    case BuiltInRayTmaxNVX:                 return "RayTmaxNVX";
+    case BuiltInInstanceCustomIndexNVX:     return "InstanceCustomIndexNVX";
+    case BuiltInObjectToWorldNVX:           return "ObjectToWorldNVX";
+    case BuiltInWorldToObjectNVX:           return "WorldToObjectNVX";
+    case BuiltInHitTNVX:                    return "HitTNVX";
+    case BuiltInHitKindNVX:                 return "HitKindNVX";
+    case BuiltInViewportMaskNV:             return "ViewportMaskNV";
+    case BuiltInSecondaryPositionNV:        return "SecondaryPositionNV";
+    case BuiltInSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
+    case BuiltInPositionPerViewNV:          return "PositionPerViewNV";
+    case BuiltInViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
+    case BuiltInBaryCoordNV:                return "BaryCoordNV";
+    case BuiltInBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
 #endif
 
     case 5264: return "FullyCoveredEXT";
@@ -857,6 +887,7 @@ const char* CapabilityString(int info)
     case CapabilityShaderStereoViewNV:              return "ShaderStereoViewNV";
     case CapabilityPerViewAttributesNV:             return "PerViewAttributesNV";
     case CapabilityGroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
+    case CapabilityRaytracingNVX:                   return "RaytracingNVX";
     case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
     case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
     case CapabilityFragmentBarycentricNV:           return "FragmentBarycentricNV";
@@ -1274,6 +1305,11 @@ const char* OpcodeString(int op)
 
 #ifdef NV_EXTENSIONS
     case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
+    case OpReportIntersectionNVX:            return "OpReportIntersectionNVX";
+    case OpIgnoreIntersectionNVX:            return "OpIgnoreIntersectionNVX";
+    case OpTerminateRayNVX:                  return "OpTerminateRayNVX";
+    case OpTraceNVX:                         return "OpTraceNVX";
+    case OpTypeAccelerationStructureNVX:     return "OpTypeAccelerationStructureNVX";
     case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
     case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
 #endif
@@ -2622,6 +2658,28 @@ void Parameterize()
 
 #ifdef NV_EXTENSIONS
     InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
+
+    InstructionDesc[OpTypeAccelerationStructureNVX].setResultAndType(true, false);
+
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'NV Acceleration Structure'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Ray Flags'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Cull Mask'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'SBT Record Offset'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'SBT Record Stride'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Miss Index'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Ray Origin'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'TMin'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Ray Direction'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'TMax'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Payload'");
+    InstructionDesc[OpTraceNVX].setResultAndType(false, false);
+
+    InstructionDesc[OpReportIntersectionNVX].operands.push(OperandId, "'Hit Parameter'");
+    InstructionDesc[OpReportIntersectionNVX].operands.push(OperandId, "'Hit Kind'");
+
+    InstructionDesc[OpIgnoreIntersectionNVX].setResultAndType(false, false);
+
+    InstructionDesc[OpTerminateRayNVX].setResultAndType(false, false);
     
     InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
index fc0a4b5..fd14476 100644 (file)
@@ -245,6 +245,12 @@ const char* GetBinaryName(EShLanguage stage)
         case EShLangFragment:        name = "frag.spv";    break;
         case EShLangCompute:         name = "comp.spv";    break;
 #ifdef NV_EXTENSIONS
+        case EShLangRayGenNV:        name = "rgen.spv";    break;
+        case EShLangIntersectNV:     name = "rint.spv";    break;
+        case EShLangAnyHitNV:        name = "rahit.spv";   break;
+        case EShLangClosestHitNV:    name = "rchit.spv";   break;
+        case EShLangMissNV:          name = "rmiss.spv";   break;
+        case EShLangCallableNV:      name = "rcall.spv";   break;
         case EShLangMeshNV:          name = "mesh.spv";    break;
         case EShLangTaskNV:          name = "task.spv";    break;
 #endif
@@ -1210,7 +1216,12 @@ int C_DECL main(int argc, char* argv[])
 //   .geom = geometry
 //   .frag = fragment
 //   .comp = compute
-//
+//   .rgen = ray generation
+//   .rint = ray intersection
+//   .rahit = ray any hit
+//   .rchit = ray closest hit
+//   .rmiss = ray miss
+//   .rcall = ray callable
 //   Additionally, the file names may end in .<stage>.glsl and .<stage>.hlsl
 //   where <stage> is one of the stages listed above.
 //
@@ -1255,6 +1266,18 @@ EShLanguage FindLanguage(const std::string& name, bool parseStageName)
     else if (stageName == "comp")
         return EShLangCompute;
 #ifdef NV_EXTENSIONS
+    else if (stageName == "rgen")
+        return EShLangRayGenNV;
+    else if (stageName == "rint")
+        return EShLangIntersectNV;
+    else if (stageName == "rahit")
+        return EShLangAnyHitNV;
+    else if (stageName == "rchit")
+        return EShLangClosestHitNV;
+    else if (stageName == "rmiss")
+        return EShLangMissNV;
+    else if (stageName == "rcall")
+        return EShLangCallableNV;
     else if (stageName == "mesh")
         return EShLangMeshNV;
     else if (stageName == "task")
@@ -1332,6 +1355,12 @@ void usage()
 #ifdef NV_EXTENSIONS
            "    .mesh   for a mesh shader\n"
            "    .task   for a task shader\n"
+           "    .rgen    for a ray generation shader\n"
+           "    .rint    for a ray intersection shader\n"
+           "    .rahit   for a ray any hit shader\n"
+           "    .rchit   for a ray closest hit shader\n"
+           "    .rmiss   for a ray miss shader\n"
+           "    .rcall   for a ray callable shader"
 #endif
            "    .glsl   for .vert.glsl, .tesc.glsl, ..., .comp.glsl compound suffixes\n"
            "    .hlsl   for .vert.hlsl, .tesc.hlsl, ..., .comp.hlsl compound suffixes\n"
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
new file mode 100644 (file)
index 0000000..1dd88b3
--- /dev/null
@@ -0,0 +1,163 @@
+spv.AnyHitShader.rahit
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 81
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint AnyHitNVX 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexNVX"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginNVX"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionNVX"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginNVX"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionNVX"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminNVX"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxNVX"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTNVX"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindNVX"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldNVX"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectNVX"
+                              Name 71  "incomingPayload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexNVX) BuiltIn InstanceCustomIndexNVX
+                              Decorate 33(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 36(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 39(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 42(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 47(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 50(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 53(gl_HitTNVX) BuiltIn HitTNVX
+                              Decorate 58(gl_HitKindNVX) BuiltIn HitKindNVX
+                              Decorate 64(gl_ObjectToWorldNVX) BuiltIn ObjectToWorldNVX
+                              Decorate 67(gl_WorldToObjectNVX) BuiltIn WorldToObjectNVX
+                              Decorate 71(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexNVX):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginNVX):     32(ptr) Variable Input
+36(gl_WorldRayDirectionNVX):     32(ptr) Variable Input
+39(gl_ObjectRayOriginNVX):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionNVX):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminNVX):     46(ptr) Variable Input
+50(gl_RayTmaxNVX):     46(ptr) Variable Input
+  53(gl_HitTNVX):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindNVX):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldNVX):     63(ptr) Variable Input
+67(gl_WorldToObjectNVX):     63(ptr) Variable Input
+              69:             TypeVector 28(float) 4
+              70:             TypePointer IncomingRayPayloadNVX 69(fvec4)
+71(incomingPayload):     70(ptr) Variable IncomingRayPayloadNVX
+              72:   28(float) Constant 1056964608
+              73:   69(fvec4) ConstantComposite 72 72 72 72
+              75:     16(int) Constant 1
+              76:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexNVX)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginNVX)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionNVX)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginNVX)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionNVX)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminNVX)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxNVX)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTNVX)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindNVX)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldNVX)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectNVX)
+                              Store 66(v14) 68
+                              Store 71(incomingPayload) 73
+              74:     16(int) Load 18(v2)
+              77:    76(bool) IEqual 74 75
+                              SelectionMerge 79 None
+                              BranchConditional 77 78 80
+              78:               Label
+                                IgnoreIntersectionNVX
+                                Branch 79
+              80:               Label
+                                TerminateRayNVX
+                                Branch 79
+              79:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.AnyHitShader_Errors.rahit.out b/Test/baseResults/spv.AnyHitShader_Errors.rahit.out
new file mode 100644 (file)
index 0000000..5a863be
--- /dev/null
@@ -0,0 +1,8 @@
+spv.AnyHitShader_Errors.rahit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNVX in this stage)
+ERROR: 0:9: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:10: 'traceNVX' : no matching overloaded function found 
+ERROR: 3 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
new file mode 100644 (file)
index 0000000..5a1d7fc
--- /dev/null
@@ -0,0 +1,169 @@
+spv.ClosestHitShader.rchit
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 88
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint ClosestHitNVX 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexNVX"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginNVX"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionNVX"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginNVX"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionNVX"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminNVX"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxNVX"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTNVX"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindNVX"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldNVX"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectNVX"
+                              Name 71  "accNV"
+                              Name 85  "localPayload"
+                              Name 87  "incomingPayload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexNVX) BuiltIn InstanceCustomIndexNVX
+                              Decorate 33(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 36(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 39(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 42(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 47(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 50(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 53(gl_HitTNVX) BuiltIn HitTNVX
+                              Decorate 58(gl_HitKindNVX) BuiltIn HitKindNVX
+                              Decorate 64(gl_ObjectToWorldNVX) BuiltIn ObjectToWorldNVX
+                              Decorate 67(gl_WorldToObjectNVX) BuiltIn WorldToObjectNVX
+                              Decorate 71(accNV) DescriptorSet 0
+                              Decorate 71(accNV) Binding 0
+                              Decorate 85(localPayload) Location 0
+                              Decorate 87(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexNVX):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginNVX):     32(ptr) Variable Input
+36(gl_WorldRayDirectionNVX):     32(ptr) Variable Input
+39(gl_ObjectRayOriginNVX):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionNVX):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminNVX):     46(ptr) Variable Input
+50(gl_RayTmaxNVX):     46(ptr) Variable Input
+  53(gl_HitTNVX):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindNVX):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldNVX):     63(ptr) Variable Input
+67(gl_WorldToObjectNVX):     63(ptr) Variable Input
+              69:             TypeAccelerationStructureNVX
+              70:             TypePointer UniformConstant 69
+       71(accNV):     70(ptr) Variable UniformConstant
+              73:      6(int) Constant 0
+              74:      6(int) Constant 1
+              75:      6(int) Constant 2
+              76:      6(int) Constant 3
+              77:   28(float) Constant 1056964608
+              78:   29(fvec3) ConstantComposite 77 77 77
+              79:   28(float) Constant 1065353216
+              80:   29(fvec3) ConstantComposite 79 79 79
+              81:   28(float) Constant 1061158912
+              82:     16(int) Constant 1
+              83:             TypeVector 28(float) 4
+              84:             TypePointer RayPayloadNVX 83(fvec4)
+85(localPayload):     84(ptr) Variable RayPayloadNVX
+              86:             TypePointer IncomingRayPayloadNVX 83(fvec4)
+87(incomingPayload):     86(ptr) Variable IncomingRayPayloadNVX
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexNVX)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginNVX)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionNVX)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginNVX)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionNVX)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminNVX)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxNVX)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTNVX)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindNVX)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldNVX)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectNVX)
+                              Store 66(v14) 68
+              72:          69 Load 71(accNV)
+                              TraceNVX 72 73 74 75 76 73 78 77 80 81 82
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ClosestHitShader_Errors.rchit.out b/Test/baseResults/spv.ClosestHitShader_Errors.rchit.out
new file mode 100644 (file)
index 0000000..36352ae
--- /dev/null
@@ -0,0 +1,9 @@
+spv.ClosestHitShader_Errors.rchit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNVX in this stage)
+ERROR: 0:9: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:10: 'terminateRayNVX' : no matching overloaded function found 
+ERROR: 0:11: 'ignoreIntersectionNVX' : no matching overloaded function found 
+ERROR: 4 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out
new file mode 100644 (file)
index 0000000..bc84c6e
--- /dev/null
@@ -0,0 +1,138 @@
+spv.IntersectShader.rint
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 71
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint IntersectionNVX 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexNVX"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginNVX"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionNVX"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginNVX"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionNVX"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminNVX"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxNVX"
+                              Name 54  "v11"
+                              Name 56  "gl_ObjectToWorldNVX"
+                              Name 58  "v12"
+                              Name 59  "gl_WorldToObjectNVX"
+                              Name 63  "iAttr"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexNVX) BuiltIn InstanceCustomIndexNVX
+                              Decorate 33(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 36(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 39(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 42(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 47(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 50(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 56(gl_ObjectToWorldNVX) BuiltIn ObjectToWorldNVX
+                              Decorate 59(gl_WorldToObjectNVX) BuiltIn WorldToObjectNVX
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexNVX):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginNVX):     32(ptr) Variable Input
+36(gl_WorldRayDirectionNVX):     32(ptr) Variable Input
+39(gl_ObjectRayOriginNVX):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionNVX):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminNVX):     46(ptr) Variable Input
+50(gl_RayTmaxNVX):     46(ptr) Variable Input
+              52:             TypeMatrix 29(fvec3) 4
+              53:             TypePointer Function 52
+              55:             TypePointer Input 52
+56(gl_ObjectToWorldNVX):     55(ptr) Variable Input
+59(gl_WorldToObjectNVX):     55(ptr) Variable Input
+              61:             TypeVector 28(float) 4
+              62:             TypePointer HitAttributeNVX 61(fvec4)
+       63(iAttr):     62(ptr) Variable HitAttributeNVX
+              64:   28(float) Constant 1056964608
+              65:   28(float) Constant 0
+              66:   28(float) Constant 1065353216
+              67:   61(fvec4) ConstantComposite 64 64 65 66
+              68:      6(int) Constant 1
+              69:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         54(v11):     53(ptr) Variable Function
+         58(v12):     53(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexNVX)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginNVX)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionNVX)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginNVX)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionNVX)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminNVX)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxNVX)
+                              Store 49(v10) 51
+              57:          52 Load 56(gl_ObjectToWorldNVX)
+                              Store 54(v11) 57
+              60:          52 Load 59(gl_WorldToObjectNVX)
+                              Store 58(v12) 60
+                              Store 63(iAttr) 67
+              70:    69(bool) ReportIntersectionNVX 64 68
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.IntersectShader_Errors.rint.out b/Test/baseResults/spv.IntersectShader_Errors.rint.out
new file mode 100644 (file)
index 0000000..804ddb4
--- /dev/null
@@ -0,0 +1,10 @@
+spv.IntersectShader_Errors.rint
+ERROR: 0:3: 'rayPayloadInNVX' : not supported in this stage: intersection
+ERROR: 0:4: 'rayPayloadNVX' : not supported in this stage: intersection
+ERROR: 0:8: 'gl_HitTNVX' : undeclared identifier 
+ERROR: 0:9: 'gl_HitKindNVX' : undeclared identifier 
+ERROR: 0:10: 'traceNVX' : no matching overloaded function found 
+ERROR: 5 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
new file mode 100644 (file)
index 0000000..5384084
--- /dev/null
@@ -0,0 +1,113 @@
+spv.MissShader.rmiss
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 60
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MissNVX 4  "main" 11 14 21 24 27 30 35 38
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 19  "v2"
+                              Name 21  "gl_WorldRayOriginNVX"
+                              Name 23  "v3"
+                              Name 24  "gl_WorldRayDirectionNVX"
+                              Name 26  "v4"
+                              Name 27  "gl_ObjectRayOriginNVX"
+                              Name 29  "v5"
+                              Name 30  "gl_ObjectRayDirectionNVX"
+                              Name 33  "v6"
+                              Name 35  "gl_RayTminNVX"
+                              Name 37  "v7"
+                              Name 38  "gl_RayTmaxNVX"
+                              Name 42  "accNV"
+                              Name 57  "localPayload"
+                              Name 59  "incomingPayload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 21(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 24(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 27(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 30(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 35(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 38(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 42(accNV) DescriptorSet 0
+                              Decorate 42(accNV) Binding 0
+                              Decorate 57(localPayload) Location 0
+                              Decorate 59(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 3
+              18:             TypePointer Function 17(fvec3)
+              20:             TypePointer Input 17(fvec3)
+21(gl_WorldRayOriginNVX):     20(ptr) Variable Input
+24(gl_WorldRayDirectionNVX):     20(ptr) Variable Input
+27(gl_ObjectRayOriginNVX):     20(ptr) Variable Input
+30(gl_ObjectRayDirectionNVX):     20(ptr) Variable Input
+              32:             TypePointer Function 16(float)
+              34:             TypePointer Input 16(float)
+35(gl_RayTminNVX):     34(ptr) Variable Input
+38(gl_RayTmaxNVX):     34(ptr) Variable Input
+              40:             TypeAccelerationStructureNVX
+              41:             TypePointer UniformConstant 40
+       42(accNV):     41(ptr) Variable UniformConstant
+              44:      6(int) Constant 0
+              45:      6(int) Constant 1
+              46:      6(int) Constant 2
+              47:      6(int) Constant 3
+              48:   16(float) Constant 1056964608
+              49:   17(fvec3) ConstantComposite 48 48 48
+              50:   16(float) Constant 1065353216
+              51:   17(fvec3) ConstantComposite 50 50 50
+              52:   16(float) Constant 1061158912
+              53:             TypeInt 32 1
+              54:     53(int) Constant 1
+              55:             TypeVector 16(float) 4
+              56:             TypePointer RayPayloadNVX 55(fvec4)
+57(localPayload):     56(ptr) Variable RayPayloadNVX
+              58:             TypePointer IncomingRayPayloadNVX 55(fvec4)
+59(incomingPayload):     58(ptr) Variable IncomingRayPayloadNVX
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          19(v2):     18(ptr) Variable Function
+          23(v3):     18(ptr) Variable Function
+          26(v4):     18(ptr) Variable Function
+          29(v5):     18(ptr) Variable Function
+          33(v6):     32(ptr) Variable Function
+          37(v7):     32(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              22:   17(fvec3) Load 21(gl_WorldRayOriginNVX)
+                              Store 19(v2) 22
+              25:   17(fvec3) Load 24(gl_WorldRayDirectionNVX)
+                              Store 23(v3) 25
+              28:   17(fvec3) Load 27(gl_ObjectRayOriginNVX)
+                              Store 26(v4) 28
+              31:   17(fvec3) Load 30(gl_ObjectRayDirectionNVX)
+                              Store 29(v5) 31
+              36:   16(float) Load 35(gl_RayTminNVX)
+                              Store 33(v6) 36
+              39:   16(float) Load 38(gl_RayTmaxNVX)
+                              Store 37(v7) 39
+              43:          40 Load 42(accNV)
+                              TraceNVX 43 44 45 46 47 44 49 48 51 52 54
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.MissShader_Errors.rmiss.out b/Test/baseResults/spv.MissShader_Errors.rmiss.out
new file mode 100644 (file)
index 0000000..bfc2f6c
--- /dev/null
@@ -0,0 +1,21 @@
+spv.MissShader_Errors.rmiss
+ERROR: 0:3: 'hitAttributeNVX' : not supported in this stage: miss
+ERROR: 0:6: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:6: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:7: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:7: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:8: 'gl_InstanceCustomIndexNVX' : undeclared identifier 
+ERROR: 0:8: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:9: 'gl_ObjectToWorldNVX' : undeclared identifier 
+ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:10: 'gl_WorldToObjectNVX' : undeclared identifier 
+ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:11: 'gl_HitTNVX' : undeclared identifier 
+ERROR: 0:12: 'gl_HitKindNVX' : undeclared identifier 
+ERROR: 0:13: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:14: 'ignoreIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:15: 'terminateRayNVX' : no matching overloaded function found 
+ERROR: 16 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
new file mode 100644 (file)
index 0000000..ecbee8a
--- /dev/null
@@ -0,0 +1,46 @@
+spv.RayConstants.rgen
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 27
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationNVX 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 8  "accNV"
+                              Name 26  "payload"
+                              Decorate 8(accNV) DescriptorSet 0
+                              Decorate 8(accNV) Binding 0
+                              Decorate 26(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeAccelerationStructureNVX
+               7:             TypePointer UniformConstant 6
+        8(accNV):      7(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:     10(int) Constant 255
+              12:     10(int) Constant 0
+              13:     10(int) Constant 1
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 3
+              16:   14(float) Constant 0
+              17:   15(fvec3) ConstantComposite 16 16 16
+              18:   14(float) Constant 1056964608
+              19:   14(float) Constant 1065353216
+              20:   15(fvec3) ConstantComposite 19 19 19
+              21:   14(float) Constant 1061158912
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              24:             TypeVector 14(float) 4
+              25:             TypePointer RayPayloadNVX 24(fvec4)
+     26(payload):     25(ptr) Variable RayPayloadNVX
+         4(main):           2 Function None 3
+               5:             Label
+               9:           6 Load 8(accNV)
+                              TraceNVX 9 11 12 13 13 12 17 18 20 21 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
new file mode 100644 (file)
index 0000000..ad1ba7c
--- /dev/null
@@ -0,0 +1,101 @@
+spv.RayGenShader.rgen
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 60
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationNVX 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeNVX"
+                              Name 24  "sy"
+                              Name 29  "accNV"
+                              Name 48  "block"
+                              MemberName 48(block) 0  "arr"
+                              MemberName 48(block) 1  "pad"
+                              Name 50  ""
+                              Name 56  "payload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 21(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 29(accNV) DescriptorSet 0
+                              Decorate 29(accNV) Binding 0
+                              Decorate 46 ArrayStride 4
+                              MemberDecorate 48(block) 0 Offset 0
+                              MemberDecorate 48(block) 1 Offset 16
+                              Decorate 48(block) BufferBlock
+                              Decorate 56(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 2
+              10:             TypePointer Input 9(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureNVX
+              28:             TypePointer UniformConstant 27
+       29(accNV):     28(ptr) Variable UniformConstant
+              35:             TypeFloat 32
+              36:             TypeVector 35(float) 3
+              37:   35(float) Constant 0
+              38:   36(fvec3) ConstantComposite 37 37 37
+              39:   35(float) Constant 1056964608
+              40:   35(float) Constant 1065353216
+              41:   36(fvec3) ConstantComposite 40 40 40
+              42:   35(float) Constant 1061158912
+              43:             TypeInt 32 1
+              44:     43(int) Constant 1
+              45:      6(int) Constant 4
+              46:             TypeArray 35(float) 45
+              47:             TypeVector 35(float) 4
+       48(block):             TypeStruct 46 47(fvec4)
+              49:             TypePointer ShaderRecordBufferNVX 48(block)
+              50:     49(ptr) Variable ShaderRecordBufferNVX
+              51:     43(int) Constant 0
+              52:     43(int) Constant 3
+              53:             TypePointer ShaderRecordBufferNVX 35(float)
+              55:             TypePointer RayPayloadNVX 47(fvec4)
+     56(payload):     55(ptr) Variable RayPayloadNVX
+              58:             TypePointer ShaderRecordBufferNVX 47(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDNVX) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDNVX) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeNVX) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeNVX) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              30:          27 Load 29(accNV)
+              31:      6(int) Load 8(lx)
+              32:      6(int) Load 16(ly)
+              33:      6(int) Load 20(sx)
+              34:      6(int) Load 24(sy)
+                              TraceNVX 30 31 32 33 34 12 38 39 41 42 44
+              54:     53(ptr) AccessChain 50 51 52
+                              Store 54 40
+              57:   47(fvec4) Load 56(payload)
+              59:     58(ptr) AccessChain 50 44
+                              Store 59 57
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.RayGenShader_Errors.rgen.out
new file mode 100644 (file)
index 0000000..7d9e2c2
--- /dev/null
@@ -0,0 +1,39 @@
+spv.RayGenShader_Errors.rgen
+ERROR: 0:3: 'hitAttributeNVX' : not supported in this stage: ray-generation
+ERROR: 0:4: 'rayPayloadInNVX' : not supported in this stage: ray-generation
+ERROR: 0:5: 'shaderRecordNVX' : can only be used with a buffer 
+ERROR: 0:9: 'binding' : cannot be used with shaderRecordNVX 
+ERROR: 0:12: 'set' : cannot be used with shaderRecordNVX 
+ERROR: 0:23: 'accelerationStructureNVX' : accelerationStructureNVX can only be used in uniform variables or function parameters: a
+ERROR: 0:23: '=' :  cannot convert from ' const int' to ' temp accelerationStructureNVX'
+ERROR: 0:24: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:24: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:25: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:25: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:26: 'gl_InstanceCustomIndexNVX' : undeclared identifier 
+ERROR: 0:26: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:27: 'gl_WorldRayOriginNVX' : undeclared identifier 
+ERROR: 0:27: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:28: 'gl_WorldRayDirectionNVX' : undeclared identifier 
+ERROR: 0:28: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:29: 'gl_ObjectRayOriginNVX' : undeclared identifier 
+ERROR: 0:29: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:30: 'gl_ObjectRayDirectionNVX' : undeclared identifier 
+ERROR: 0:30: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:31: 'gl_RayTminNVX' : undeclared identifier 
+ERROR: 0:32: 'gl_RayTmaxNVX' : undeclared identifier 
+ERROR: 0:33: 'gl_ObjectToWorldNVX' : undeclared identifier 
+ERROR: 0:33: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:34: 'gl_WorldToObjectNVX' : undeclared identifier 
+ERROR: 0:34: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:35: 'gl_HitTNVX' : undeclared identifier 
+ERROR: 0:36: 'gl_HitKindNVX' : undeclared identifier 
+ERROR: 0:37: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:38: 'ignoreIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:39: 'terminateRayNVX' : no matching overloaded function found 
+ERROR: 32 compilation errors.  No code generated.
+
+
+ERROR: Linking ray-generation stage: Only one shaderRecordNVX buffer block is allowed per stage
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/spv.AnyHitShader.rahit b/Test/spv.AnyHitShader.rahit
new file mode 100644 (file)
index 0000000..88e5601
--- /dev/null
@@ -0,0 +1,26 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(location = 1) rayPayloadInNVX vec4 incomingPayload;
+void main()
+{
+       uvec2 v0 = gl_LaunchIDNVX;
+       uvec2 v1 = gl_LaunchSizeNVX;
+       int v2 = gl_PrimitiveID;
+       int v3 = gl_InstanceID;
+       int v4 = gl_InstanceCustomIndexNVX;
+       vec3 v5 = gl_WorldRayOriginNVX;
+       vec3 v6 = gl_WorldRayDirectionNVX;
+       vec3 v7 = gl_ObjectRayOriginNVX;
+       vec3 v8 = gl_ObjectRayDirectionNVX;
+       float v9 = gl_RayTminNVX;
+       float v10 = gl_RayTmaxNVX;
+       float v11 = gl_HitTNVX;
+       uint v12 = gl_HitKindNVX;
+       mat4x3 v13 = gl_ObjectToWorldNVX;
+       mat4x3 v14 = gl_WorldToObjectNVX;
+       incomingPayload = vec4(0.5f);
+       if (v2 == 1)
+           ignoreIntersectionNVX();
+       else
+           terminateRayNVX();
+}
diff --git a/Test/spv.AnyHitShader_Errors.rahit b/Test/spv.AnyHitShader_Errors.rahit
new file mode 100644 (file)
index 0000000..a0f72e6
--- /dev/null
@@ -0,0 +1,11 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+
+void main()
+{
+    payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeNVX in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    traceNVX(accNV, 0, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 0); // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.ClosestHitShader.rchit b/Test/spv.ClosestHitShader.rchit
new file mode 100644 (file)
index 0000000..498d0d8
--- /dev/null
@@ -0,0 +1,24 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 localPayload;
+layout(location = 1) rayPayloadInNVX vec4 incomingPayload;
+void main()
+{
+       uvec2 v0 = gl_LaunchIDNVX;
+       uvec2 v1 = gl_LaunchSizeNVX;
+       int v2 = gl_PrimitiveID;
+       int v3 = gl_InstanceID;
+       int v4 = gl_InstanceCustomIndexNVX;
+       vec3 v5 = gl_WorldRayOriginNVX;
+       vec3 v6 = gl_WorldRayDirectionNVX;
+       vec3 v7 = gl_ObjectRayOriginNVX;
+       vec3 v8 = gl_ObjectRayDirectionNVX;
+       float v9 = gl_RayTminNVX;
+       float v10 = gl_RayTmaxNVX;
+       float v11 = gl_HitTNVX;
+       uint v12 = gl_HitKindNVX;
+       mat4x3 v13 = gl_ObjectToWorldNVX;
+       mat4x3 v14 = gl_WorldToObjectNVX;
+       traceNVX(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
diff --git a/Test/spv.ClosestHitShader_Errors.rchit b/Test/spv.ClosestHitShader_Errors.rchit
new file mode 100644 (file)
index 0000000..6c1f6e4
--- /dev/null
@@ -0,0 +1,12 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+
+void main()
+{
+    payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeNVX in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage 
+    terminateRayNVX();
+    ignoreIntersectionNVX();
+}
diff --git a/Test/spv.IntersectShader.rint b/Test/spv.IntersectShader.rint
new file mode 100644 (file)
index 0000000..226ff06
--- /dev/null
@@ -0,0 +1,21 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 iAttr;
+void main()
+{
+       uvec2 v0 = gl_LaunchIDNVX;
+       uvec2 v1 = gl_LaunchSizeNVX;
+       int v2 = gl_PrimitiveID;
+       int v3 = gl_InstanceID;
+       int v4 = gl_InstanceCustomIndexNVX;
+       vec3 v5 = gl_WorldRayOriginNVX;
+       vec3 v6 = gl_WorldRayDirectionNVX;
+       vec3 v7 = gl_ObjectRayOriginNVX;
+       vec3 v8 = gl_ObjectRayDirectionNVX;
+       float v9 = gl_RayTminNVX;
+       float v10 = gl_RayTmaxNVX;
+       mat4x3 v11 = gl_ObjectToWorldNVX;
+       mat4x3 v12 = gl_WorldToObjectNVX;
+       iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
+       reportIntersectionNVX(0.5, 1U);
+}
diff --git a/Test/spv.IntersectShader_Errors.rint b/Test/spv.IntersectShader_Errors.rint
new file mode 100644 (file)
index 0000000..90278d8
--- /dev/null
@@ -0,0 +1,11 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+rayPayloadInNVX vec4 payloadIn;                             // ERROR, rayPayloadIn unsupported in this stage
+rayPayloadNVX vec4 payload;                                 // ERROR, rayPayload unsuppoted in this stage
+uniform accelerationStructureNVX accNV;
+void main()
+{
+    float e12 = gl_HitTNVX;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindNVX;                              // ERROR, unsupported builtin in stage
+    traceNVX(accNV, 0, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 0); // ERROR, unsupported
+}
diff --git a/Test/spv.MissShader.rmiss b/Test/spv.MissShader.rmiss
new file mode 100644 (file)
index 0000000..6daaa01
--- /dev/null
@@ -0,0 +1,17 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 localPayload;
+layout(location = 1) rayPayloadInNVX vec4 incomingPayload;
+void main()
+{
+       uvec2 v0 = gl_LaunchIDNVX;
+       uvec2 v1 = gl_LaunchSizeNVX;
+       vec3 v2 = gl_WorldRayOriginNVX;
+       vec3 v3 = gl_WorldRayDirectionNVX;
+       vec3 v4 = gl_ObjectRayOriginNVX;
+       vec3 v5 = gl_ObjectRayDirectionNVX;
+       float v6 = gl_RayTminNVX;
+       float v7 = gl_RayTmaxNVX;
+       traceNVX(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
diff --git a/Test/spv.MissShader_Errors.rmiss b/Test/spv.MissShader_Errors.rmiss
new file mode 100644 (file)
index 0000000..a45cb8d
--- /dev/null
@@ -0,0 +1,16 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               // ERROR, hitattributeNVX unsupported in this stage 
+void main()
+{
+    int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexNVX;                     // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldNVX;                       // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectNVX;                       // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTNVX;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindNVX;                              // ERROR, unsupported builtin in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    ignoreIntersectionNVX();                                // ERROR, unsupported builtin in stage
+    terminateRayNVX();                                      // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.RayConstants.rgen b/Test/spv.RayConstants.rgen
new file mode 100644 (file)
index 0000000..61ff39e
--- /dev/null
@@ -0,0 +1,15 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 payload;
+void main()
+{
+    const uint rayFlags = gl_RayFlagsNoneNVX | gl_RayFlagsOpaqueNVX |
+                          gl_RayFlagsNoOpaqueNVX | gl_RayFlagsTerminateOnFirstHitNVX |
+                          gl_RayFlagsSkipClosestHitShaderNVX | gl_RayFlagsCullBackFacingTrianglesNVX |
+                          gl_RayFlagsCullFrontFacingTrianglesNVX | gl_RayFlagsCullOpaqueNVX | 
+                          gl_RayFlagsCullNoOpaqueNVX;
+
+    const int payloadId = 1;
+    traceNVX(accNV, rayFlags, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, payloadId);
+}
diff --git a/Test/spv.RayGenShader.rgen b/Test/spv.RayGenShader.rgen
new file mode 100644 (file)
index 0000000..19f16ce
--- /dev/null
@@ -0,0 +1,19 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 payload;
+layout(shaderRecordNVX) buffer block
+{
+       float arr[4];
+       vec4 pad;
+};
+void main()
+{
+    uint lx = gl_LaunchIDNVX.x;
+    uint ly = gl_LaunchIDNVX.y;
+    uint sx = gl_LaunchSizeNVX.x;
+    uint sy = gl_LaunchSizeNVX.y;
+    traceNVX(accNV, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
+    arr[3] = 1.0f;
+    pad = payload;
+}
diff --git a/Test/spv.RayGenShader_Errors.rgen b/Test/spv.RayGenShader_Errors.rgen
new file mode 100644 (file)
index 0000000..73175b8
--- /dev/null
@@ -0,0 +1,40 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               // ERROR, hitattributeNVX unsupported in this stage 
+rayPayloadInNVX vec4 payloadIn;                             // ERROR, rayPayloadIn unsupported in this stage
+layout(shaderRecordNVX) uniform ublock                      // ERROR, shaderRecordNVX unsupported on uniform blocks
+{
+    float a;
+};
+layout(binding = 0, shaderRecordNVX) buffer bblock {        // ERROR, binding unsupported on shaderRecordNVX blocks
+    float b;
+};
+layout(set = 0, shaderRecordNVX) buffer bblock2 {           // ERROR, set unsupported on shaderRecordNVX blocks
+    float c;
+};
+layout(shaderRecordNVX) buffer bblock3 {
+    float d;
+};
+layout(shaderRecordNVX) buffer bblock4 {                    // ERROR, cannot have more than one shaderRecordNVX block
+    float e;
+};
+void main()
+{
+    accelerationStructureNVX a = 0;
+    int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexNVX;                     // ERROR, unsupported builtin in stage
+    vec3 e4 = gl_WorldRayOriginNVX;                         // ERROR, unsupported builtin in stage
+    vec3 e5 = gl_WorldRayDirectionNVX;                      // ERROR, unsupported builtin in stage
+    vec3 e6 = gl_ObjectRayOriginNVX;                        // ERROR, unsupported builtin in stage
+    vec3 e7 = gl_ObjectRayDirectionNVX;                     // ERROR, unsupported builtin in stage
+    float e8 = gl_RayTminNVX;                               // ERROR, unsupported builtin in stage
+    float e9 = gl_RayTmaxNVX;                               // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldNVX;                       // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectNVX;                       // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTNVX;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindNVX;                              // ERROR, unsupported builtin in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    ignoreIntersectionNVX();                                // ERROR, unsupported builtin in stage
+    terminateRayNVX();                                      // ERROR, unsupported builtin in stage
+}
index 5a191aa..d1a8908 100644 (file)
@@ -62,6 +62,10 @@ enum TBasicType {
     EbtStruct,
     EbtBlock,
 
+#ifdef NV_EXTENSIONS
+    EbtAccStructNV,
+#endif
+
     // HLSL types that live only temporarily.
     EbtString,
 
@@ -88,6 +92,12 @@ enum TStorageQualifier {
     EvqBuffer,        // read/write, shared with app
     EvqShared,        // compute shader's read/write 'shared' qualifier
 
+#ifdef NV_EXTENSIONS
+    EvqPayloadNV,
+    EvqPayloadInNV,
+    EvqHitAttrNV,
+#endif
+
     // parameters
     EvqIn,            // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
     EvqOut,           // also, for 'out' in the grammar before we know if it's a pipeline output or an 'out' parameter
@@ -227,6 +237,20 @@ enum TBuiltInVariable {
     EbvPositionPerViewNV,
     EbvViewportMaskPerViewNV,
     EbvFragFullyCoveredNV,
+    // raytracing
+    EbvLaunchIdNV,
+    EbvLaunchSizeNV,
+    EbvInstanceCustomIndexNV,
+    EbvWorldRayOriginNV,
+    EbvWorldRayDirectionNV,
+    EbvObjectRayOriginNV,
+    EbvObjectRayDirectionNV,
+    EbvRayTminNV,
+    EbvRayTmaxNV,
+    EbvHitTNV,
+    EbvHitKindNV,
+    EbvObjectToWorldNV,
+    EbvWorldToObjectNV,
     EbvBaryCoordNV,
     EbvBaryCoordNoPerspNV,
     EbvTaskCountNV,
@@ -283,6 +307,11 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q)
     case EvqPointCoord:     return "gl_PointCoord";  break;
     case EvqFragColor:      return "fragColor";      break;
     case EvqFragDepth:      return "gl_FragDepth";   break;
+#ifdef NV_EXTENSIONS
+    case EvqPayloadNV:      return "rayPayloadNVX";   break;
+    case EvqPayloadInNV:    return "rayPayloadInNVX"; break;
+    case EvqHitAttrNV:      return "hitAttributeNVX"; break;
+#endif
     default:                return "unknown qualifier";
     }
 }
@@ -375,6 +404,19 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
     case EbvPositionPerViewNV:          return "PositionPerViewNV";
     case EbvViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
     case EbvFragFullyCoveredNV:         return "FragFullyCoveredNV";
+    case EbvLaunchIdNV:                 return "LaunchIdNVX";
+    case EbvLaunchSizeNV:               return "LaunchSizeNVX";
+    case EbvInstanceCustomIndexNV:      return "InstanceCustomIndexNVX";
+    case EbvWorldRayOriginNV:           return "WorldRayOriginNVX";
+    case EbvWorldRayDirectionNV:        return "WorldRayDirectionNVX";
+    case EbvObjectRayOriginNV:          return "ObjectRayOriginNVX";
+    case EbvObjectRayDirectionNV:       return "ObjectRayDirectionNVX";
+    case EbvRayTminNV:                  return "ObjectRayTminNVX";
+    case EbvRayTmaxNV:                  return "ObjectRayTmaxNVX";
+    case EbvHitTNV:                     return "HitTNVX";
+    case EbvHitKindNV:                  return "HitKindNVX";
+    case EbvObjectToWorldNV:            return "ObjectToWorldNVX";
+    case EbvWorldToObjectNV:            return "WorldToObjectNVX";
     case EbvBaryCoordNV:                return "BaryCoordNV";
     case EbvBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
     case EbvTaskCountNV:                return "TaskCountNV";
index 43fc7c6..7793c2c 100644 (file)
@@ -725,6 +725,7 @@ public:
         layoutViewportRelative = false;
         // -2048 as the default value indicating layoutSecondaryViewportRelative is not set
         layoutSecondaryViewportRelativeOffset = -2048;
+        layoutShaderRecordNV = false;
 #endif
 
         clearInterstageLayout();
@@ -758,6 +759,9 @@ public:
                hasAnyLocation() ||
                hasStream() ||
                hasFormat() ||
+#ifdef NV_EXTENSIONS
+               layoutShaderRecordNV ||
+#endif
                layoutPushConstant;
     }
     bool hasLayout() const
@@ -811,6 +815,7 @@ public:
     bool layoutPassthrough;
     bool layoutViewportRelative;
     int layoutSecondaryViewportRelativeOffset;
+    bool layoutShaderRecordNV;
 #endif
 
     bool hasUniformLayout() const
@@ -1481,7 +1486,11 @@ public:
         }
         return false;
     }
-    virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint; }
+    virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint
+#ifdef NV_EXTENSIONS
+        || basicType == EbtAccStructNV
+#endif
+        ; }
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
 
     // "Image" is a superset of "Subpass"
@@ -1669,6 +1678,9 @@ public:
         case EbtSampler:           return "sampler/image";
         case EbtStruct:            return "structure";
         case EbtBlock:             return "block";
+#ifdef NV_EXTENSIONS
+        case EbtAccStructNV:       return "accelerationStructureNVX";
+#endif
         default:                   return "unknown type";
         }
     }
@@ -1764,6 +1776,8 @@ public:
                     appendStr(" layoutSecondaryViewportRelativeOffset=");
                     appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
                 }
+                if (qualifier.layoutShaderRecordNV)
+                    appendStr(" shaderRecordNVX");
 #endif
 
                 appendStr(")");
index 9f51f7d..b770cee 100644 (file)
@@ -894,6 +894,10 @@ enum TOperator {
     EOpFindMSB,
 
 #ifdef NV_EXTENSIONS
+    EOpTraceNV,
+    EOpReportIntersectionNV,
+    EOpIgnoreIntersectionNV,
+    EOpTerminateRayNV,
     EOpWritePackedPrimitiveIndices4x8NV,
 #endif
     //
index 782b325..24697d3 100644 (file)
@@ -5058,6 +5058,27 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 #endif
 
 #ifdef NV_EXTENSIONS
+
+    // Builtins for GL_NV_raytracing
+    if (profile != EEsProfile && version >= 460) {
+        stageBuiltins[EShLangRayGenNV].append(
+            "void traceNVX(accelerationStructureNVX,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "\n");
+        stageBuiltins[EShLangIntersectNV].append(
+            "bool reportIntersectionNVX(float, uint);"
+            "\n");
+        stageBuiltins[EShLangAnyHitNV].append(
+            "void ignoreIntersectionNVX();"
+            "void terminateRayNVX();"
+            "\n");
+        stageBuiltins[EShLangClosestHitNV].append(
+            "void traceNVX(accelerationStructureNVX,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "\n");
+        stageBuiltins[EShLangMissNV].append(
+            "void traceNVX(accelerationStructureNVX,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "\n");
+    }
+
     //E_SPV_NV_compute_shader_derivatives
     
     stageBuiltins[EShLangCompute].append(derivatives);
@@ -5930,7 +5951,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             stageBuiltins[EShLangFragment].append(
                 "in vec3 gl_BaryCoordNV;"
                 "in vec3 gl_BaryCoordNoPerspNV;"
-            );
+                );
+
 #endif
     } else {
         // ES profile
@@ -5973,12 +5995,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "highp float gl_FragDepthEXT;"       // GL_EXT_frag_depth
             );
 #ifdef NV_EXTENSIONS
-        if (version >= 320)
+       if (version >= 320)
             stageBuiltins[EShLangFragment].append(
                 "in vec3 gl_BaryCoordNV;"
                 "in vec3 gl_BaryCoordNoPerspNV;"
-            );
+                );
 #endif
+
     }
     stageBuiltins[EShLangFragment].append("\n");
 
@@ -6072,6 +6095,94 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 #endif
     }
 
+#ifdef NV_EXTENSIONS
+    // GL_NV_raytracing
+    if (profile != EEsProfile && version >= 460) {
+
+        const char *constRayFlags =
+            "const uint gl_RayFlagsNoneNVX = 0U;"
+            "const uint gl_RayFlagsOpaqueNVX = 1U;"
+            "const uint gl_RayFlagsNoOpaqueNVX = 2U;"
+            "const uint gl_RayFlagsTerminateOnFirstHitNVX = 4U;"
+            "const uint gl_RayFlagsSkipClosestHitShaderNVX = 8U;"
+            "const uint gl_RayFlagsCullBackFacingTrianglesNVX = 16U;"
+            "const uint gl_RayFlagsCullFrontFacingTrianglesNVX = 32U;"
+            "const uint gl_RayFlagsCullOpaqueNVX = 64U;"
+            "const uint gl_RayFlagsCullNoOpaqueNVX = 128U;"
+            "\n";
+        const char *rayGenDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "\n";
+        const char *intersectDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "in     int   gl_PrimitiveID;"
+            "in     int   gl_InstanceID;"
+            "in     int   gl_InstanceCustomIndexNVX;"
+            "in    vec3   gl_WorldRayOriginNVX;"
+            "in    vec3   gl_WorldRayDirectionNVX;"
+            "in    vec3   gl_ObjectRayOriginNVX;"
+            "in    vec3   gl_ObjectRayDirectionNVX;"
+            "in    float  gl_RayTminNVX;"
+            "in    float  gl_RayTmaxNVX;"
+            "in    mat4x3 gl_ObjectToWorldNVX;"
+            "in    mat4x3 gl_WorldToObjectNVX;"
+            "\n";
+        const char *hitDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "in     int   gl_PrimitiveID;"
+            "in     int   gl_InstanceID;"
+            "in     int   gl_InstanceCustomIndexNVX;"
+            "in    vec3   gl_WorldRayOriginNVX;"
+            "in    vec3   gl_WorldRayDirectionNVX;"
+            "in    vec3   gl_ObjectRayOriginNVX;"
+            "in    vec3   gl_ObjectRayDirectionNVX;"
+            "in    float  gl_RayTminNVX;"
+            "in    float  gl_RayTmaxNVX;"
+            "in    float  gl_HitTNVX;"
+            "in    uint   gl_HitKindNVX;"
+            "in    mat4x3 gl_ObjectToWorldNVX;"
+            "in    mat4x3 gl_WorldToObjectNVX;"
+            "\n";
+        const char *missDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "in    vec3   gl_WorldRayOriginNVX;"
+            "in    vec3   gl_WorldRayDirectionNVX;"
+            "in    vec3   gl_ObjectRayOriginNVX;"
+            "in    vec3   gl_ObjectRayDirectionNVX;"
+            "in    float  gl_RayTminNVX;"
+            "in    float  gl_RayTmaxNVX;"
+            "\n";
+
+        stageBuiltins[EShLangRayGenNV].append(rayGenDecls);
+        stageBuiltins[EShLangRayGenNV].append(constRayFlags);
+
+        stageBuiltins[EShLangIntersectNV].append(intersectDecls);
+
+        stageBuiltins[EShLangAnyHitNV].append(hitDecls);
+
+        stageBuiltins[EShLangClosestHitNV].append(hitDecls);
+        stageBuiltins[EShLangClosestHitNV].append(constRayFlags);
+
+        stageBuiltins[EShLangMissNV].append(missDecls);
+        stageBuiltins[EShLangMissNV].append(constRayFlags);
+    }
+    if ((profile != EEsProfile && version >= 140)) {
+        const char *deviceIndex =
+            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
+            "\n";
+
+        stageBuiltins[EShLangRayGenNV].append(deviceIndex);
+        stageBuiltins[EShLangIntersectNV].append(deviceIndex);
+        stageBuiltins[EShLangAnyHitNV].append(deviceIndex);
+        stageBuiltins[EShLangClosestHitNV].append(deviceIndex);
+        stageBuiltins[EShLangMissNV].append(deviceIndex);
+    }
+#endif
+
     if (version >= 300 /* both ES and non-ES */) {
         stageBuiltins[EShLangFragment].append(
             "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
@@ -8468,8 +8579,48 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
         }
         break;
-
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.setVariableExtensions("gl_LaunchIDNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_LaunchSizeNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_PrimitiveID", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_InstanceCustomIndexNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_WorldRayOriginNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_WorldRayDirectionNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayOriginNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayDirectionNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_RayTminNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_RayTmaxNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_HitTNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_HitKindNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_ObjectToWorldNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_WorldToObjectNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
+
+            BuiltInVariable("gl_LaunchIDNVX",           EbvLaunchIdNV,           symbolTable);
+            BuiltInVariable("gl_LaunchSizeNVX",         EbvLaunchSizeNV,         symbolTable);
+            BuiltInVariable("gl_PrimitiveID",           EbvPrimitiveId,          symbolTable);
+            BuiltInVariable("gl_InstanceID",            EbvInstanceId,           symbolTable);
+            BuiltInVariable("gl_InstanceCustomIndexNVX",EbvInstanceCustomIndexNV,symbolTable);
+            BuiltInVariable("gl_WorldRayOriginNVX",     EbvWorldRayOriginNV,     symbolTable);
+            BuiltInVariable("gl_WorldRayDirectionNVX",  EbvWorldRayDirectionNV,  symbolTable);
+            BuiltInVariable("gl_ObjectRayOriginNVX",    EbvObjectRayOriginNV,    symbolTable);
+            BuiltInVariable("gl_ObjectRayDirectionNVX", EbvObjectRayDirectionNV, symbolTable);
+            BuiltInVariable("gl_RayTminNVX",            EbvRayTminNV,            symbolTable);
+            BuiltInVariable("gl_RayTmaxNVX",            EbvRayTmaxNV,            symbolTable);
+            BuiltInVariable("gl_HitTNVX",               EbvHitTNV,               symbolTable);
+            BuiltInVariable("gl_HitKindNVX",            EbvHitKindNV,            symbolTable);
+            BuiltInVariable("gl_ObjectToWorldNVX",      EbvObjectToWorldNV,      symbolTable);
+            BuiltInVariable("gl_WorldToObjectNVX",      EbvWorldToObjectNV,      symbolTable);
+            BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
+        } 
+        break;
     case EShLangMeshNV:
         if (profile != EEsProfile && version >= 450) {
             // Per-vertex builtins
@@ -9200,6 +9351,22 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
         break;
 
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+        if (profile != EEsProfile && version >= 460)
+            symbolTable.relateToOperator("traceNVX", EOpTraceNV);
+        break;
+    case EShLangIntersectNV:
+        if (profile != EEsProfile && version >= 460)
+            symbolTable.relateToOperator("reportIntersectionNVX", EOpReportIntersectionNV);
+        break;
+    case EShLangAnyHitNV:
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.relateToOperator("ignoreIntersectionNVX", EOpIgnoreIntersectionNV);
+            symbolTable.relateToOperator("terminateRayNVX", EOpTerminateRayNV);
+        }
+        break;
     case EShLangMeshNV:
         if (profile != EEsProfile && version >= 450) {
             symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
index 8eb5ff5..67bc42d 100644 (file)
@@ -460,6 +460,9 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
         return false;
     case EbtAtomicUint:
     case EbtSampler:
+#ifdef NV_EXTENSIONS
+    case EbtAccStructNV:
+#endif
         // opaque types can be passed to functions
         if (op == EOpFunction)
             break;
index bfa9de4..ca5d7e4 100644 (file)
@@ -153,6 +153,12 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op,
         if (node->getQualifier().readonly)
             message = "can't modify a readonly buffer";
         break;
+#ifdef NV_EXTENSIONS
+    case EvqHitAttrNV:
+        if (language != EShLangIntersectNV)
+            message = "cannot modify hitAttributeNVX in this stage";
+        break;
+#endif
 
     default:
         //
@@ -168,6 +174,11 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op,
         case EbtVoid:
             message = "can't modify void";
             break;
+#ifdef NV_EXTENSIONS
+        case EbtAccStructNV:
+            message = "can't modify accelerationStructureNVX";
+            break;
+#endif
         default:
             break;
         }
index 297956c..628aa99 100644 (file)
@@ -2962,6 +2962,20 @@ void TParseContext::atomicUintCheck(const TSourceLoc& loc, const TType& type, co
     else if (type.getBasicType() == EbtAtomicUint && type.getQualifier().storage != EvqUniform)
         error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 }
+#ifdef NV_EXTENSIONS
+void TParseContext::accStructNVCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
+{
+    if (type.getQualifier().storage == EvqUniform)
+        return;
+
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStructNV))
+        error(loc, "non-uniform struct contains an accelerationStructureNVX:", type.getBasicTypeString().c_str(), identifier.c_str());
+    else if (type.getBasicType() == EbtAccStructNV && type.getQualifier().storage != EvqUniform)
+        error(loc, "accelerationStructureNVX can only be used in uniform variables or function parameters:",
+            type.getBasicTypeString().c_str(), identifier.c_str());
+
+}
+#endif
 
 void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
@@ -4696,6 +4710,15 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
             publicType.qualifier.layoutViewportRelative = true;
             return;
         }
+    } else {
+        if (language == EShLangRayGenNV || language == EShLangIntersectNV ||
+        language == EShLangAnyHitNV || language == EShLangClosestHitNV ||
+        language == EShLangMissNV || language == EShLangCallableNV) {
+            if (id == "shaderrecordnvx") {
+                publicType.qualifier.layoutShaderRecordNV = true;
+                return;
+            }
+        }
     }
     if (language == EShLangCompute) {
         if (id.compare(0, 17, "derivative_group_") == 0) {
@@ -5076,6 +5099,8 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie
             dst.layoutViewportRelative = true;
         if (src.layoutSecondaryViewportRelativeOffset != -2048)
             dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
+        if (src.layoutShaderRecordNV)
+            dst.layoutShaderRecordNV = true;
         if (src.pervertexNV)
             dst.pervertexNV = true;
 #endif
@@ -5143,6 +5168,10 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb
                     error(loc, "cannot specify on a variable declaration", "align", "");
                 if (qualifier.layoutPushConstant)
                     error(loc, "can only specify on a uniform block", "push_constant", "");
+#ifdef NV_EXTENSIONS
+                if (qualifier.layoutShaderRecordNV)
+                    error(loc, "can only specify on a buffer block", "shaderRecordNVX", "");
+#endif
             }
             break;
         default:
@@ -5216,6 +5245,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
             if (type.getBasicType() == EbtBlock)
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
+#ifdef NV_EXTENSIONS
+        case EvqPayloadNV:
+        case EvqPayloadInNV:
+        case EvqHitAttrNV:
+            break;
+#endif
         default:
             error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", "");
             break;
@@ -5299,7 +5334,10 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
         if (spvVersion.spv > 0) {
             if (qualifier.isUniformOrBuffer()) {
                 if (type.getBasicType() == EbtBlock && !qualifier.layoutPushConstant &&
-                                                       !qualifier.layoutAttachment)
+#ifdef NV_EXTENSIONS
+                       !qualifier.layoutShaderRecordNV &&
+#endif
+                       !qualifier.layoutAttachment)
                     error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
                 else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler)
                     error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
@@ -5351,6 +5389,11 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
     if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "push_constant", "");
 
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV && type.getBasicType() != EbtBlock)
+        error(loc, "can only be used with a block", "shaderRecordNVX", "");
+#endif
+
     // input attachment
     if (type.isSubpass()) {
         if (! qualifier.hasAttachment())
@@ -5486,6 +5529,16 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
         if (qualifier.hasSet())
             error(loc, "cannot be used with push_constant", "set", "");
     }
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV) {
+        if (qualifier.storage != EvqBuffer)
+            error(loc, "can only be used with a buffer", "shaderRecordNVX", "");
+        if (qualifier.hasBinding())
+            error(loc, "cannot be used with shaderRecordNVX", "binding", "");
+        if (qualifier.hasSet())
+            error(loc, "cannot be used with shaderRecordNVX", "set", "");
+    }
+#endif
 }
 
 // For places that can't have shader-level layout qualifiers
@@ -5915,6 +5968,9 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
     samplerCheck(loc, type, identifier, initializer);
     atomicUintCheck(loc, type, identifier);
     transparentOpaqueCheck(loc, type, identifier);
+#ifdef NV_EXTENSIONS
+    accStructNVCheck(loc, type, identifier);
+#endif
 
     if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
         if (type.containsBasicType(EbtFloat16))
@@ -6613,7 +6669,11 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
 
     // Special case for "push_constant uniform", which has a default of std430,
     // contrary to normal uniform defaults, and can't have a default tracked for it.
-    if (currentBlockQualifier.layoutPushConstant && !currentBlockQualifier.hasPacking())
+    if ((currentBlockQualifier.layoutPushConstant && !currentBlockQualifier.hasPacking())
+#ifdef NV_EXTENSIONS
+        || (currentBlockQualifier.layoutShaderRecordNV && !currentBlockQualifier.hasPacking())
+#endif
+       )
         currentBlockQualifier.layoutPacking = ElpStd430;
 
 #ifdef NV_EXTENSIONS
@@ -6835,6 +6895,22 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q
         }
 #endif
         break;
+#ifdef NV_EXTENSIONS
+    case EvqPayloadNV:
+        profileRequires(loc, ~EEsProfile, 450, E_GL_NVX_raytracing, "rayPayloadNVX block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+            "rayPayloadNVX block");
+        break;
+    case EvqPayloadInNV:
+        profileRequires(loc, ~EEsProfile, 450, E_GL_NVX_raytracing, "rayPayloadInNVX block");
+        requireStage(loc, (EShLanguageMask)(EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+            "rayPayloadInNVX block");
+        break;
+    case EvqHitAttrNV:
+        profileRequires(loc, ~EEsProfile, 450, E_GL_NVX_raytracing, "hitAttributeNVX block");
+        requireStage(loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask), "hitAttributeNVX block");
+        break;
+#endif
     default:
         error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
         break;
@@ -6872,6 +6948,8 @@ void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier&
     if (qualifier.layoutPushConstant)
         intermediate.addPushConstantCount();
 #ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV)
+        intermediate.addShaderRecordNVCount();
     if (qualifier.perTaskNV)
         intermediate.addTaskNVCount();
 #endif
@@ -7357,6 +7435,10 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
         error(loc, "cannot declare a default, can only be used on a block", "push_constant", "");
     if (qualifier.hasSpecConstantId())
         error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", "");
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV)
+        error(loc, "cannot declare a default, can only be used on a block", "shaderRecordNVX", "");
+#endif
 }
 
 //
index 0ca9503..0c6b284 100644 (file)
@@ -348,6 +348,9 @@ public:
     void boolCheck(const TSourceLoc&, const TPublicType&);
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
+#ifdef NV_EXTENSIONS
+    void accStructNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
+#endif
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void memberQualifierCheck(glslang::TPublicType&);
     void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
index 0f6ebea..7bdd430 100644 (file)
@@ -701,6 +701,10 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["superp"] =                  SUPERP;
 
 #ifdef NV_EXTENSIONS
+    (*KeywordMap)["rayPayloadNVX"] =            PAYLOADNV;
+    (*KeywordMap)["rayPayloadInNVX"] =          PAYLOADINNV;
+    (*KeywordMap)["hitAttributeNVX"] =          HITATTRNV;
+    (*KeywordMap)["accelerationStructureNVX"] = ACCSTRUCTNV;
     (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
     (*KeywordMap)["perviewNV"] =               PERVIEWNV;
     (*KeywordMap)["taskNV"] =                  PERTASKNV;
@@ -944,6 +948,18 @@ int TScanContext::tokenizeIdentifier()
             return identifierOrType();
         return keyword;
 
+#ifdef NV_EXTENSIONS
+    case PAYLOADNV:
+    case PAYLOADINNV:
+    case HITATTRNV:
+    case ACCSTRUCTNV:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (parseContext.profile != EEsProfile && parseContext.version >= 460
+                 && parseContext.extensionTurnedOn(E_GL_NVX_raytracing)))
+            return keyword;
+        return identifierOrType();
+#endif
+
     case ATOMIC_UINT:
         if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
             parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
index f9d9faf..7039ac2 100755 (executable)
@@ -348,6 +348,19 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
                                    infoSink, commonTable, symbolTables);
 
 #ifdef NV_EXTENSIONS
+    // check for ray tracing stages
+    if (profile != EEsProfile && version >= 450) {
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGenNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersectNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHitNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHitNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMissNV, source,
+            infoSink, commonTable, symbolTables);
+    }
     // check for mesh
     if (profile != EEsProfile && version >= 450)
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMeshNV, source,
@@ -583,6 +596,17 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
         }
         break;
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangCallableNV:
+        if (profile == EEsProfile || version < 460) {
+            correct = false;
+            infoSink.info.message(EPrefixError, "#version: raytracing shaders require non-es profile with version 460 or above");
+            version = 460;
+        }
+        break;
     case EShLangMeshNV:
     case EShLangTaskNV:
         if ((profile == EEsProfile) ||
index db46e10..bd7d5aa 100644 (file)
@@ -72,6 +72,9 @@ void TType::buildMangledName(TString& mangledName) const
     case EbtUint64:             mangledName += "u64";    break;
     case EbtBool:               mangledName += 'b';      break;
     case EbtAtomicUint:         mangledName += "au";     break;
+#ifdef NV_EXTENSIONS
+    case EbtAccStructNV:        mangledName += "asnv";   break;
+#endif
     case EbtSampler:
         switch (sampler.type) {
 #ifdef AMD_EXTENSIONS
index 3916520..b73880d 100644 (file)
@@ -235,6 +235,7 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_NV_conservative_raster_underestimation]   = EBhDisable;
     extensionBehavior[E_GL_NV_shader_noperspective_interpolation]    = EBhDisable;
     extensionBehavior[E_GL_NV_shader_subgroup_partitioned]           = EBhDisable;
+    extensionBehavior[E_GL_NVX_raytracing]                           = EBhDisable;
     extensionBehavior[E_GL_NV_fragment_shader_barycentric]           = EBhDisable;
     extensionBehavior[E_GL_NV_compute_shader_derivatives]            = EBhDisable;
     extensionBehavior[E_GL_NV_shader_texture_footprint]              = EBhDisable;
@@ -409,6 +410,7 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_NV_shader_atomic_int64 1\n"
             "#define GL_NV_conservative_raster_underestimation 1\n"
             "#define GL_NV_shader_subgroup_partitioned 1\n"
+            "#define GL_NVX_raytracing 1\n"
             "#define GL_NV_fragment_shader_barycentric 1\n"
             "#define GL_NV_compute_shader_derivatives 1\n"
             "#define GL_NV_shader_texture_footprint 1\n"
@@ -501,6 +503,12 @@ const char* StageName(EShLanguage stage)
     case EShLangFragment:       return "fragment";
     case EShLangCompute:        return "compute";
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:       return "ray-generation";
+    case EShLangIntersectNV:    return "intersection";
+    case EShLangAnyHitNV:       return "any-hit";
+    case EShLangClosestHitNV:   return "closest-hit";
+    case EShLangMissNV:         return "miss";
+    case EShLangCallableNV:     return "callable";
     case EShLangMeshNV:         return "mesh";
     case EShLangTaskNV:         return "task";
 #endif
index 27760cf..5e577dc 100644 (file)
@@ -207,6 +207,7 @@ const char* const E_GL_NV_shader_atomic_int64                   = "GL_NV_shader_
 const char* const E_GL_NV_conservative_raster_underestimation   = "GL_NV_conservative_raster_underestimation";
 const char* const E_GL_NV_shader_noperspective_interpolation    = "GL_NV_shader_noperspective_interpolation";
 const char* const E_GL_NV_shader_subgroup_partitioned           = "GL_NV_shader_subgroup_partitioned";
+const char* const E_GL_NVX_raytracing                           = "GL_NVX_raytracing";
 const char* const E_GL_NV_fragment_shader_barycentric           = "GL_NV_fragment_shader_barycentric";
 const char* const E_GL_NV_compute_shader_derivatives            = "GL_NV_compute_shader_derivatives";
 const char* const E_GL_NV_shader_texture_footprint              = "GL_NV_shader_texture_footprint";
index 35d6435..9d89d46 100644 (file)
@@ -140,7 +140,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> U8VEC2  U8VEC3  U8VEC4
 %token <lex> VEC2 VEC3 VEC4
 %token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
-%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM
+%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM PAYLOADNV PAYLOADINNV HITATTRNV
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT SUBGROUPCOHERENT NONPRIVATE
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
 %token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
@@ -164,6 +164,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
 %token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
+%token <lex> ACCSTRUCTNV
 
 // combined image/sampler
 %token <lex> SAMPLER1D SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER1DSHADOW SAMPLER2DSHADOW
@@ -1339,6 +1340,36 @@ storage_qualifier
         $$.init($1.loc);
         $$.qualifier.storage = EvqBuffer;
     }
+    | HITATTRNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "hitAttributeNVX");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
+            | EShLangAnyHitNVMask), "hitAttributeNVX");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NVX_raytracing, "hitAttributeNVX");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttrNV;
+#endif
+    }
+    | PAYLOADNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "rayPayloadNVX");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNVX");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadNVX");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadNV;
+#endif
+    }
+    | PAYLOADINNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "rayPayloadInNVX");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNVX");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadInNVX");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadInNV;
+#endif
+    }
     | SHARED {
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -2177,6 +2208,12 @@ type_specifier_nonarray
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
     }
+    | ACCSTRUCTNV {
+#ifdef NV_EXTENSIONS
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStructNV;
+#endif
+    }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
index b062642..32ec5ba 100644 (file)
@@ -203,323 +203,327 @@ extern int yydebug;
     BUFFER = 335,
     SHARED = 336,
     NONUNIFORM = 337,
-    COHERENT = 338,
-    VOLATILE = 339,
-    RESTRICT = 340,
-    READONLY = 341,
-    WRITEONLY = 342,
-    DEVICECOHERENT = 343,
-    QUEUEFAMILYCOHERENT = 344,
-    WORKGROUPCOHERENT = 345,
-    SUBGROUPCOHERENT = 346,
-    NONPRIVATE = 347,
-    DVEC2 = 348,
-    DVEC3 = 349,
-    DVEC4 = 350,
-    DMAT2 = 351,
-    DMAT3 = 352,
-    DMAT4 = 353,
-    F16VEC2 = 354,
-    F16VEC3 = 355,
-    F16VEC4 = 356,
-    F16MAT2 = 357,
-    F16MAT3 = 358,
-    F16MAT4 = 359,
-    F32VEC2 = 360,
-    F32VEC3 = 361,
-    F32VEC4 = 362,
-    F32MAT2 = 363,
-    F32MAT3 = 364,
-    F32MAT4 = 365,
-    F64VEC2 = 366,
-    F64VEC3 = 367,
-    F64VEC4 = 368,
-    F64MAT2 = 369,
-    F64MAT3 = 370,
-    F64MAT4 = 371,
-    NOPERSPECTIVE = 372,
-    FLAT = 373,
-    SMOOTH = 374,
-    LAYOUT = 375,
-    EXPLICITINTERPAMD = 376,
-    PERVERTEXNV = 377,
-    PERPRIMITIVENV = 378,
-    PERVIEWNV = 379,
-    PERTASKNV = 380,
-    MAT2X2 = 381,
-    MAT2X3 = 382,
-    MAT2X4 = 383,
-    MAT3X2 = 384,
-    MAT3X3 = 385,
-    MAT3X4 = 386,
-    MAT4X2 = 387,
-    MAT4X3 = 388,
-    MAT4X4 = 389,
-    DMAT2X2 = 390,
-    DMAT2X3 = 391,
-    DMAT2X4 = 392,
-    DMAT3X2 = 393,
-    DMAT3X3 = 394,
-    DMAT3X4 = 395,
-    DMAT4X2 = 396,
-    DMAT4X3 = 397,
-    DMAT4X4 = 398,
-    F16MAT2X2 = 399,
-    F16MAT2X3 = 400,
-    F16MAT2X4 = 401,
-    F16MAT3X2 = 402,
-    F16MAT3X3 = 403,
-    F16MAT3X4 = 404,
-    F16MAT4X2 = 405,
-    F16MAT4X3 = 406,
-    F16MAT4X4 = 407,
-    F32MAT2X2 = 408,
-    F32MAT2X3 = 409,
-    F32MAT2X4 = 410,
-    F32MAT3X2 = 411,
-    F32MAT3X3 = 412,
-    F32MAT3X4 = 413,
-    F32MAT4X2 = 414,
-    F32MAT4X3 = 415,
-    F32MAT4X4 = 416,
-    F64MAT2X2 = 417,
-    F64MAT2X3 = 418,
-    F64MAT2X4 = 419,
-    F64MAT3X2 = 420,
-    F64MAT3X3 = 421,
-    F64MAT3X4 = 422,
-    F64MAT4X2 = 423,
-    F64MAT4X3 = 424,
-    F64MAT4X4 = 425,
-    ATOMIC_UINT = 426,
-    SAMPLER1D = 427,
-    SAMPLER2D = 428,
-    SAMPLER3D = 429,
-    SAMPLERCUBE = 430,
-    SAMPLER1DSHADOW = 431,
-    SAMPLER2DSHADOW = 432,
-    SAMPLERCUBESHADOW = 433,
-    SAMPLER1DARRAY = 434,
-    SAMPLER2DARRAY = 435,
-    SAMPLER1DARRAYSHADOW = 436,
-    SAMPLER2DARRAYSHADOW = 437,
-    ISAMPLER1D = 438,
-    ISAMPLER2D = 439,
-    ISAMPLER3D = 440,
-    ISAMPLERCUBE = 441,
-    ISAMPLER1DARRAY = 442,
-    ISAMPLER2DARRAY = 443,
-    USAMPLER1D = 444,
-    USAMPLER2D = 445,
-    USAMPLER3D = 446,
-    USAMPLERCUBE = 447,
-    USAMPLER1DARRAY = 448,
-    USAMPLER2DARRAY = 449,
-    SAMPLER2DRECT = 450,
-    SAMPLER2DRECTSHADOW = 451,
-    ISAMPLER2DRECT = 452,
-    USAMPLER2DRECT = 453,
-    SAMPLERBUFFER = 454,
-    ISAMPLERBUFFER = 455,
-    USAMPLERBUFFER = 456,
-    SAMPLERCUBEARRAY = 457,
-    SAMPLERCUBEARRAYSHADOW = 458,
-    ISAMPLERCUBEARRAY = 459,
-    USAMPLERCUBEARRAY = 460,
-    SAMPLER2DMS = 461,
-    ISAMPLER2DMS = 462,
-    USAMPLER2DMS = 463,
-    SAMPLER2DMSARRAY = 464,
-    ISAMPLER2DMSARRAY = 465,
-    USAMPLER2DMSARRAY = 466,
-    SAMPLEREXTERNALOES = 467,
-    F16SAMPLER1D = 468,
-    F16SAMPLER2D = 469,
-    F16SAMPLER3D = 470,
-    F16SAMPLER2DRECT = 471,
-    F16SAMPLERCUBE = 472,
-    F16SAMPLER1DARRAY = 473,
-    F16SAMPLER2DARRAY = 474,
-    F16SAMPLERCUBEARRAY = 475,
-    F16SAMPLERBUFFER = 476,
-    F16SAMPLER2DMS = 477,
-    F16SAMPLER2DMSARRAY = 478,
-    F16SAMPLER1DSHADOW = 479,
-    F16SAMPLER2DSHADOW = 480,
-    F16SAMPLER1DARRAYSHADOW = 481,
-    F16SAMPLER2DARRAYSHADOW = 482,
-    F16SAMPLER2DRECTSHADOW = 483,
-    F16SAMPLERCUBESHADOW = 484,
-    F16SAMPLERCUBEARRAYSHADOW = 485,
-    SAMPLER = 486,
-    SAMPLERSHADOW = 487,
-    TEXTURE1D = 488,
-    TEXTURE2D = 489,
-    TEXTURE3D = 490,
-    TEXTURECUBE = 491,
-    TEXTURE1DARRAY = 492,
-    TEXTURE2DARRAY = 493,
-    ITEXTURE1D = 494,
-    ITEXTURE2D = 495,
-    ITEXTURE3D = 496,
-    ITEXTURECUBE = 497,
-    ITEXTURE1DARRAY = 498,
-    ITEXTURE2DARRAY = 499,
-    UTEXTURE1D = 500,
-    UTEXTURE2D = 501,
-    UTEXTURE3D = 502,
-    UTEXTURECUBE = 503,
-    UTEXTURE1DARRAY = 504,
-    UTEXTURE2DARRAY = 505,
-    TEXTURE2DRECT = 506,
-    ITEXTURE2DRECT = 507,
-    UTEXTURE2DRECT = 508,
-    TEXTUREBUFFER = 509,
-    ITEXTUREBUFFER = 510,
-    UTEXTUREBUFFER = 511,
-    TEXTURECUBEARRAY = 512,
-    ITEXTURECUBEARRAY = 513,
-    UTEXTURECUBEARRAY = 514,
-    TEXTURE2DMS = 515,
-    ITEXTURE2DMS = 516,
-    UTEXTURE2DMS = 517,
-    TEXTURE2DMSARRAY = 518,
-    ITEXTURE2DMSARRAY = 519,
-    UTEXTURE2DMSARRAY = 520,
-    F16TEXTURE1D = 521,
-    F16TEXTURE2D = 522,
-    F16TEXTURE3D = 523,
-    F16TEXTURE2DRECT = 524,
-    F16TEXTURECUBE = 525,
-    F16TEXTURE1DARRAY = 526,
-    F16TEXTURE2DARRAY = 527,
-    F16TEXTURECUBEARRAY = 528,
-    F16TEXTUREBUFFER = 529,
-    F16TEXTURE2DMS = 530,
-    F16TEXTURE2DMSARRAY = 531,
-    SUBPASSINPUT = 532,
-    SUBPASSINPUTMS = 533,
-    ISUBPASSINPUT = 534,
-    ISUBPASSINPUTMS = 535,
-    USUBPASSINPUT = 536,
-    USUBPASSINPUTMS = 537,
-    F16SUBPASSINPUT = 538,
-    F16SUBPASSINPUTMS = 539,
-    IMAGE1D = 540,
-    IIMAGE1D = 541,
-    UIMAGE1D = 542,
-    IMAGE2D = 543,
-    IIMAGE2D = 544,
-    UIMAGE2D = 545,
-    IMAGE3D = 546,
-    IIMAGE3D = 547,
-    UIMAGE3D = 548,
-    IMAGE2DRECT = 549,
-    IIMAGE2DRECT = 550,
-    UIMAGE2DRECT = 551,
-    IMAGECUBE = 552,
-    IIMAGECUBE = 553,
-    UIMAGECUBE = 554,
-    IMAGEBUFFER = 555,
-    IIMAGEBUFFER = 556,
-    UIMAGEBUFFER = 557,
-    IMAGE1DARRAY = 558,
-    IIMAGE1DARRAY = 559,
-    UIMAGE1DARRAY = 560,
-    IMAGE2DARRAY = 561,
-    IIMAGE2DARRAY = 562,
-    UIMAGE2DARRAY = 563,
-    IMAGECUBEARRAY = 564,
-    IIMAGECUBEARRAY = 565,
-    UIMAGECUBEARRAY = 566,
-    IMAGE2DMS = 567,
-    IIMAGE2DMS = 568,
-    UIMAGE2DMS = 569,
-    IMAGE2DMSARRAY = 570,
-    IIMAGE2DMSARRAY = 571,
-    UIMAGE2DMSARRAY = 572,
-    F16IMAGE1D = 573,
-    F16IMAGE2D = 574,
-    F16IMAGE3D = 575,
-    F16IMAGE2DRECT = 576,
-    F16IMAGECUBE = 577,
-    F16IMAGE1DARRAY = 578,
-    F16IMAGE2DARRAY = 579,
-    F16IMAGECUBEARRAY = 580,
-    F16IMAGEBUFFER = 581,
-    F16IMAGE2DMS = 582,
-    F16IMAGE2DMSARRAY = 583,
-    STRUCT = 584,
-    VOID = 585,
-    WHILE = 586,
-    IDENTIFIER = 587,
-    TYPE_NAME = 588,
-    FLOATCONSTANT = 589,
-    DOUBLECONSTANT = 590,
-    INT16CONSTANT = 591,
-    UINT16CONSTANT = 592,
-    INT32CONSTANT = 593,
-    UINT32CONSTANT = 594,
-    INTCONSTANT = 595,
-    UINTCONSTANT = 596,
-    INT64CONSTANT = 597,
-    UINT64CONSTANT = 598,
-    BOOLCONSTANT = 599,
-    FLOAT16CONSTANT = 600,
-    LEFT_OP = 601,
-    RIGHT_OP = 602,
-    INC_OP = 603,
-    DEC_OP = 604,
-    LE_OP = 605,
-    GE_OP = 606,
-    EQ_OP = 607,
-    NE_OP = 608,
-    AND_OP = 609,
-    OR_OP = 610,
-    XOR_OP = 611,
-    MUL_ASSIGN = 612,
-    DIV_ASSIGN = 613,
-    ADD_ASSIGN = 614,
-    MOD_ASSIGN = 615,
-    LEFT_ASSIGN = 616,
-    RIGHT_ASSIGN = 617,
-    AND_ASSIGN = 618,
-    XOR_ASSIGN = 619,
-    OR_ASSIGN = 620,
-    SUB_ASSIGN = 621,
-    LEFT_PAREN = 622,
-    RIGHT_PAREN = 623,
-    LEFT_BRACKET = 624,
-    RIGHT_BRACKET = 625,
-    LEFT_BRACE = 626,
-    RIGHT_BRACE = 627,
-    DOT = 628,
-    COMMA = 629,
-    COLON = 630,
-    EQUAL = 631,
-    SEMICOLON = 632,
-    BANG = 633,
-    DASH = 634,
-    TILDE = 635,
-    PLUS = 636,
-    STAR = 637,
-    SLASH = 638,
-    PERCENT = 639,
-    LEFT_ANGLE = 640,
-    RIGHT_ANGLE = 641,
-    VERTICAL_BAR = 642,
-    CARET = 643,
-    AMPERSAND = 644,
-    QUESTION = 645,
-    INVARIANT = 646,
-    PRECISE = 647,
-    HIGH_PRECISION = 648,
-    MEDIUM_PRECISION = 649,
-    LOW_PRECISION = 650,
-    PRECISION = 651,
-    PACKED = 652,
-    RESOURCE = 653,
-    SUPERP = 654
+    PAYLOADNV = 338,
+    PAYLOADINNV = 339,
+    HITATTRNV = 340,
+    COHERENT = 341,
+    VOLATILE = 342,
+    RESTRICT = 343,
+    READONLY = 344,
+    WRITEONLY = 345,
+    DEVICECOHERENT = 346,
+    QUEUEFAMILYCOHERENT = 347,
+    WORKGROUPCOHERENT = 348,
+    SUBGROUPCOHERENT = 349,
+    NONPRIVATE = 350,
+    DVEC2 = 351,
+    DVEC3 = 352,
+    DVEC4 = 353,
+    DMAT2 = 354,
+    DMAT3 = 355,
+    DMAT4 = 356,
+    F16VEC2 = 357,
+    F16VEC3 = 358,
+    F16VEC4 = 359,
+    F16MAT2 = 360,
+    F16MAT3 = 361,
+    F16MAT4 = 362,
+    F32VEC2 = 363,
+    F32VEC3 = 364,
+    F32VEC4 = 365,
+    F32MAT2 = 366,
+    F32MAT3 = 367,
+    F32MAT4 = 368,
+    F64VEC2 = 369,
+    F64VEC3 = 370,
+    F64VEC4 = 371,
+    F64MAT2 = 372,
+    F64MAT3 = 373,
+    F64MAT4 = 374,
+    NOPERSPECTIVE = 375,
+    FLAT = 376,
+    SMOOTH = 377,
+    LAYOUT = 378,
+    EXPLICITINTERPAMD = 379,
+    PERVERTEXNV = 380,
+    PERPRIMITIVENV = 381,
+    PERVIEWNV = 382,
+    PERTASKNV = 383,
+    MAT2X2 = 384,
+    MAT2X3 = 385,
+    MAT2X4 = 386,
+    MAT3X2 = 387,
+    MAT3X3 = 388,
+    MAT3X4 = 389,
+    MAT4X2 = 390,
+    MAT4X3 = 391,
+    MAT4X4 = 392,
+    DMAT2X2 = 393,
+    DMAT2X3 = 394,
+    DMAT2X4 = 395,
+    DMAT3X2 = 396,
+    DMAT3X3 = 397,
+    DMAT3X4 = 398,
+    DMAT4X2 = 399,
+    DMAT4X3 = 400,
+    DMAT4X4 = 401,
+    F16MAT2X2 = 402,
+    F16MAT2X3 = 403,
+    F16MAT2X4 = 404,
+    F16MAT3X2 = 405,
+    F16MAT3X3 = 406,
+    F16MAT3X4 = 407,
+    F16MAT4X2 = 408,
+    F16MAT4X3 = 409,
+    F16MAT4X4 = 410,
+    F32MAT2X2 = 411,
+    F32MAT2X3 = 412,
+    F32MAT2X4 = 413,
+    F32MAT3X2 = 414,
+    F32MAT3X3 = 415,
+    F32MAT3X4 = 416,
+    F32MAT4X2 = 417,
+    F32MAT4X3 = 418,
+    F32MAT4X4 = 419,
+    F64MAT2X2 = 420,
+    F64MAT2X3 = 421,
+    F64MAT2X4 = 422,
+    F64MAT3X2 = 423,
+    F64MAT3X3 = 424,
+    F64MAT3X4 = 425,
+    F64MAT4X2 = 426,
+    F64MAT4X3 = 427,
+    F64MAT4X4 = 428,
+    ATOMIC_UINT = 429,
+    ACCSTRUCTNV = 430,
+    SAMPLER1D = 431,
+    SAMPLER2D = 432,
+    SAMPLER3D = 433,
+    SAMPLERCUBE = 434,
+    SAMPLER1DSHADOW = 435,
+    SAMPLER2DSHADOW = 436,
+    SAMPLERCUBESHADOW = 437,
+    SAMPLER1DARRAY = 438,
+    SAMPLER2DARRAY = 439,
+    SAMPLER1DARRAYSHADOW = 440,
+    SAMPLER2DARRAYSHADOW = 441,
+    ISAMPLER1D = 442,
+    ISAMPLER2D = 443,
+    ISAMPLER3D = 444,
+    ISAMPLERCUBE = 445,
+    ISAMPLER1DARRAY = 446,
+    ISAMPLER2DARRAY = 447,
+    USAMPLER1D = 448,
+    USAMPLER2D = 449,
+    USAMPLER3D = 450,
+    USAMPLERCUBE = 451,
+    USAMPLER1DARRAY = 452,
+    USAMPLER2DARRAY = 453,
+    SAMPLER2DRECT = 454,
+    SAMPLER2DRECTSHADOW = 455,
+    ISAMPLER2DRECT = 456,
+    USAMPLER2DRECT = 457,
+    SAMPLERBUFFER = 458,
+    ISAMPLERBUFFER = 459,
+    USAMPLERBUFFER = 460,
+    SAMPLERCUBEARRAY = 461,
+    SAMPLERCUBEARRAYSHADOW = 462,
+    ISAMPLERCUBEARRAY = 463,
+    USAMPLERCUBEARRAY = 464,
+    SAMPLER2DMS = 465,
+    ISAMPLER2DMS = 466,
+    USAMPLER2DMS = 467,
+    SAMPLER2DMSARRAY = 468,
+    ISAMPLER2DMSARRAY = 469,
+    USAMPLER2DMSARRAY = 470,
+    SAMPLEREXTERNALOES = 471,
+    F16SAMPLER1D = 472,
+    F16SAMPLER2D = 473,
+    F16SAMPLER3D = 474,
+    F16SAMPLER2DRECT = 475,
+    F16SAMPLERCUBE = 476,
+    F16SAMPLER1DARRAY = 477,
+    F16SAMPLER2DARRAY = 478,
+    F16SAMPLERCUBEARRAY = 479,
+    F16SAMPLERBUFFER = 480,
+    F16SAMPLER2DMS = 481,
+    F16SAMPLER2DMSARRAY = 482,
+    F16SAMPLER1DSHADOW = 483,
+    F16SAMPLER2DSHADOW = 484,
+    F16SAMPLER1DARRAYSHADOW = 485,
+    F16SAMPLER2DARRAYSHADOW = 486,
+    F16SAMPLER2DRECTSHADOW = 487,
+    F16SAMPLERCUBESHADOW = 488,
+    F16SAMPLERCUBEARRAYSHADOW = 489,
+    SAMPLER = 490,
+    SAMPLERSHADOW = 491,
+    TEXTURE1D = 492,
+    TEXTURE2D = 493,
+    TEXTURE3D = 494,
+    TEXTURECUBE = 495,
+    TEXTURE1DARRAY = 496,
+    TEXTURE2DARRAY = 497,
+    ITEXTURE1D = 498,
+    ITEXTURE2D = 499,
+    ITEXTURE3D = 500,
+    ITEXTURECUBE = 501,
+    ITEXTURE1DARRAY = 502,
+    ITEXTURE2DARRAY = 503,
+    UTEXTURE1D = 504,
+    UTEXTURE2D = 505,
+    UTEXTURE3D = 506,
+    UTEXTURECUBE = 507,
+    UTEXTURE1DARRAY = 508,
+    UTEXTURE2DARRAY = 509,
+    TEXTURE2DRECT = 510,
+    ITEXTURE2DRECT = 511,
+    UTEXTURE2DRECT = 512,
+    TEXTUREBUFFER = 513,
+    ITEXTUREBUFFER = 514,
+    UTEXTUREBUFFER = 515,
+    TEXTURECUBEARRAY = 516,
+    ITEXTURECUBEARRAY = 517,
+    UTEXTURECUBEARRAY = 518,
+    TEXTURE2DMS = 519,
+    ITEXTURE2DMS = 520,
+    UTEXTURE2DMS = 521,
+    TEXTURE2DMSARRAY = 522,
+    ITEXTURE2DMSARRAY = 523,
+    UTEXTURE2DMSARRAY = 524,
+    F16TEXTURE1D = 525,
+    F16TEXTURE2D = 526,
+    F16TEXTURE3D = 527,
+    F16TEXTURE2DRECT = 528,
+    F16TEXTURECUBE = 529,
+    F16TEXTURE1DARRAY = 530,
+    F16TEXTURE2DARRAY = 531,
+    F16TEXTURECUBEARRAY = 532,
+    F16TEXTUREBUFFER = 533,
+    F16TEXTURE2DMS = 534,
+    F16TEXTURE2DMSARRAY = 535,
+    SUBPASSINPUT = 536,
+    SUBPASSINPUTMS = 537,
+    ISUBPASSINPUT = 538,
+    ISUBPASSINPUTMS = 539,
+    USUBPASSINPUT = 540,
+    USUBPASSINPUTMS = 541,
+    F16SUBPASSINPUT = 542,
+    F16SUBPASSINPUTMS = 543,
+    IMAGE1D = 544,
+    IIMAGE1D = 545,
+    UIMAGE1D = 546,
+    IMAGE2D = 547,
+    IIMAGE2D = 548,
+    UIMAGE2D = 549,
+    IMAGE3D = 550,
+    IIMAGE3D = 551,
+    UIMAGE3D = 552,
+    IMAGE2DRECT = 553,
+    IIMAGE2DRECT = 554,
+    UIMAGE2DRECT = 555,
+    IMAGECUBE = 556,
+    IIMAGECUBE = 557,
+    UIMAGECUBE = 558,
+    IMAGEBUFFER = 559,
+    IIMAGEBUFFER = 560,
+    UIMAGEBUFFER = 561,
+    IMAGE1DARRAY = 562,
+    IIMAGE1DARRAY = 563,
+    UIMAGE1DARRAY = 564,
+    IMAGE2DARRAY = 565,
+    IIMAGE2DARRAY = 566,
+    UIMAGE2DARRAY = 567,
+    IMAGECUBEARRAY = 568,
+    IIMAGECUBEARRAY = 569,
+    UIMAGECUBEARRAY = 570,
+    IMAGE2DMS = 571,
+    IIMAGE2DMS = 572,
+    UIMAGE2DMS = 573,
+    IMAGE2DMSARRAY = 574,
+    IIMAGE2DMSARRAY = 575,
+    UIMAGE2DMSARRAY = 576,
+    F16IMAGE1D = 577,
+    F16IMAGE2D = 578,
+    F16IMAGE3D = 579,
+    F16IMAGE2DRECT = 580,
+    F16IMAGECUBE = 581,
+    F16IMAGE1DARRAY = 582,
+    F16IMAGE2DARRAY = 583,
+    F16IMAGECUBEARRAY = 584,
+    F16IMAGEBUFFER = 585,
+    F16IMAGE2DMS = 586,
+    F16IMAGE2DMSARRAY = 587,
+    STRUCT = 588,
+    VOID = 589,
+    WHILE = 590,
+    IDENTIFIER = 591,
+    TYPE_NAME = 592,
+    FLOATCONSTANT = 593,
+    DOUBLECONSTANT = 594,
+    INT16CONSTANT = 595,
+    UINT16CONSTANT = 596,
+    INT32CONSTANT = 597,
+    UINT32CONSTANT = 598,
+    INTCONSTANT = 599,
+    UINTCONSTANT = 600,
+    INT64CONSTANT = 601,
+    UINT64CONSTANT = 602,
+    BOOLCONSTANT = 603,
+    FLOAT16CONSTANT = 604,
+    LEFT_OP = 605,
+    RIGHT_OP = 606,
+    INC_OP = 607,
+    DEC_OP = 608,
+    LE_OP = 609,
+    GE_OP = 610,
+    EQ_OP = 611,
+    NE_OP = 612,
+    AND_OP = 613,
+    OR_OP = 614,
+    XOR_OP = 615,
+    MUL_ASSIGN = 616,
+    DIV_ASSIGN = 617,
+    ADD_ASSIGN = 618,
+    MOD_ASSIGN = 619,
+    LEFT_ASSIGN = 620,
+    RIGHT_ASSIGN = 621,
+    AND_ASSIGN = 622,
+    XOR_ASSIGN = 623,
+    OR_ASSIGN = 624,
+    SUB_ASSIGN = 625,
+    LEFT_PAREN = 626,
+    RIGHT_PAREN = 627,
+    LEFT_BRACKET = 628,
+    RIGHT_BRACKET = 629,
+    LEFT_BRACE = 630,
+    RIGHT_BRACE = 631,
+    DOT = 632,
+    COMMA = 633,
+    COLON = 634,
+    EQUAL = 635,
+    SEMICOLON = 636,
+    BANG = 637,
+    DASH = 638,
+    TILDE = 639,
+    PLUS = 640,
+    STAR = 641,
+    SLASH = 642,
+    PERCENT = 643,
+    LEFT_ANGLE = 644,
+    RIGHT_ANGLE = 645,
+    VERTICAL_BAR = 646,
+    CARET = 647,
+    AMPERSAND = 648,
+    QUESTION = 649,
+    INVARIANT = 650,
+    PRECISE = 651,
+    HIGH_PRECISION = 652,
+    MEDIUM_PRECISION = 653,
+    LOW_PRECISION = 654,
+    PRECISION = 655,
+    PACKED = 656,
+    RESOURCE = 657,
+    SUPERP = 658
   };
 #endif
 
@@ -563,7 +567,7 @@ union YYSTYPE
         };
     } interm;
 
-#line 567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -594,7 +598,7 @@ int yyparse (glslang::TParseContext* pParseContext);
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -834,23 +838,23 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  375
+#define YYFINAL  379
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9156
+#define YYLAST   9248
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  400
+#define YYNTOKENS  404
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  107
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  565
+#define YYNRULES  569
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  706
+#define YYNSTATES  710
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   654
+#define YYMAXUTOK   658
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -924,70 +928,70 @@ static const yytype_uint16 yytranslate[] =
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399
+     395,   396,   397,   398,   399,   400,   401,   402,   403
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   293,   293,   299,   302,   306,   310,   313,   317,   321,
-     325,   329,   333,   336,   340,   344,   347,   355,   358,   361,
-     364,   367,   372,   380,   387,   394,   400,   404,   411,   414,
-     420,   427,   437,   445,   450,   477,   485,   491,   495,   499,
-     519,   520,   521,   522,   528,   529,   534,   539,   548,   549,
-     554,   562,   563,   569,   578,   579,   584,   589,   594,   602,
-     603,   611,   622,   623,   632,   633,   642,   643,   652,   653,
-     661,   662,   670,   671,   679,   680,   680,   698,   699,   715,
-     719,   723,   727,   732,   736,   740,   744,   748,   752,   756,
-     763,   766,   777,   784,   789,   794,   802,   806,   810,   814,
-     819,   824,   833,   833,   844,   848,   855,   862,   865,   872,
-     880,   900,   923,   938,   963,   974,   984,   994,  1004,  1013,
-    1016,  1020,  1024,  1029,  1037,  1042,  1047,  1052,  1057,  1066,
-    1077,  1104,  1113,  1120,  1127,  1138,  1147,  1157,  1165,  1173,
-    1184,  1190,  1193,  1200,  1204,  1208,  1216,  1225,  1228,  1239,
-    1242,  1245,  1249,  1253,  1257,  1261,  1267,  1271,  1283,  1297,
-    1302,  1308,  1314,  1321,  1327,  1332,  1337,  1342,  1354,  1358,
-    1363,  1368,  1373,  1378,  1383,  1387,  1391,  1395,  1399,  1405,
-    1414,  1421,  1424,  1432,  1436,  1445,  1450,  1458,  1462,  1472,
-    1476,  1480,  1485,  1490,  1495,  1500,  1504,  1509,  1514,  1519,
-    1524,  1529,  1534,  1539,  1544,  1549,  1553,  1558,  1563,  1568,
-    1574,  1580,  1586,  1592,  1598,  1604,  1610,  1616,  1622,  1628,
-    1634,  1640,  1645,  1650,  1655,  1660,  1665,  1670,  1676,  1682,
-    1688,  1694,  1700,  1706,  1712,  1718,  1724,  1730,  1736,  1742,
-    1748,  1754,  1760,  1766,  1772,  1778,  1784,  1790,  1796,  1802,
-    1808,  1814,  1820,  1826,  1832,  1837,  1842,  1847,  1852,  1857,
-    1862,  1867,  1872,  1877,  1882,  1887,  1892,  1898,  1904,  1910,
-    1916,  1922,  1928,  1934,  1940,  1946,  1952,  1958,  1964,  1970,
-    1976,  1982,  1988,  1994,  2000,  2006,  2012,  2018,  2024,  2030,
-    2036,  2042,  2048,  2054,  2060,  2066,  2072,  2078,  2084,  2090,
-    2096,  2102,  2108,  2114,  2120,  2126,  2132,  2138,  2144,  2150,
-    2156,  2162,  2168,  2174,  2180,  2185,  2190,  2195,  2200,  2205,
-    2210,  2215,  2220,  2225,  2230,  2235,  2240,  2245,  2250,  2258,
-    2266,  2274,  2282,  2290,  2298,  2306,  2314,  2322,  2330,  2338,
-    2346,  2354,  2359,  2364,  2369,  2374,  2379,  2384,  2389,  2394,
-    2399,  2404,  2409,  2414,  2419,  2424,  2429,  2434,  2442,  2450,
-    2455,  2460,  2465,  2473,  2478,  2483,  2488,  2496,  2501,  2506,
-    2511,  2519,  2524,  2529,  2534,  2539,  2544,  2552,  2557,  2565,
-    2570,  2578,  2583,  2591,  2596,  2604,  2609,  2617,  2622,  2630,
-    2635,  2640,  2645,  2650,  2655,  2660,  2665,  2670,  2675,  2680,
-    2685,  2690,  2695,  2700,  2705,  2713,  2718,  2723,  2728,  2736,
-    2741,  2746,  2751,  2759,  2764,  2769,  2774,  2782,  2787,  2792,
-    2797,  2805,  2810,  2815,  2820,  2828,  2833,  2838,  2843,  2851,
-    2856,  2861,  2866,  2874,  2879,  2884,  2889,  2897,  2902,  2907,
-    2912,  2920,  2925,  2930,  2935,  2943,  2948,  2953,  2958,  2966,
-    2971,  2976,  2981,  2989,  2994,  2999,  3004,  3012,  3017,  3022,
-    3027,  3035,  3040,  3045,  3051,  3057,  3063,  3072,  3081,  3087,
-    3093,  3099,  3105,  3110,  3126,  3131,  3136,  3144,  3144,  3155,
-    3155,  3165,  3168,  3181,  3203,  3230,  3234,  3240,  3245,  3256,
-    3259,  3265,  3274,  3277,  3283,  3287,  3288,  3294,  3295,  3296,
-    3297,  3298,  3299,  3300,  3304,  3305,  3309,  3305,  3321,  3322,
-    3326,  3326,  3333,  3333,  3347,  3350,  3358,  3366,  3377,  3378,
-    3382,  3385,  3391,  3398,  3402,  3410,  3414,  3427,  3430,  3436,
-    3436,  3456,  3459,  3465,  3477,  3489,  3492,  3498,  3498,  3513,
-    3513,  3529,  3529,  3550,  3553,  3559,  3562,  3568,  3572,  3579,
-    3584,  3589,  3596,  3599,  3608,  3612,  3621,  3624,  3627,  3635,
-    3635,  3657,  3663,  3666,  3671,  3674
+       0,   294,   294,   300,   303,   307,   311,   314,   318,   322,
+     326,   330,   334,   337,   341,   345,   348,   356,   359,   362,
+     365,   368,   373,   381,   388,   395,   401,   405,   412,   415,
+     421,   428,   438,   446,   451,   478,   486,   492,   496,   500,
+     520,   521,   522,   523,   529,   530,   535,   540,   549,   550,
+     555,   563,   564,   570,   579,   580,   585,   590,   595,   603,
+     604,   612,   623,   624,   633,   634,   643,   644,   653,   654,
+     662,   663,   671,   672,   680,   681,   681,   699,   700,   716,
+     720,   724,   728,   733,   737,   741,   745,   749,   753,   757,
+     764,   767,   778,   785,   790,   795,   803,   807,   811,   815,
+     820,   825,   834,   834,   845,   849,   856,   863,   866,   873,
+     881,   901,   924,   939,   964,   975,   985,   995,  1005,  1014,
+    1017,  1021,  1025,  1030,  1038,  1043,  1048,  1053,  1058,  1067,
+    1078,  1105,  1114,  1121,  1128,  1139,  1148,  1158,  1166,  1174,
+    1185,  1191,  1194,  1201,  1205,  1209,  1217,  1226,  1229,  1240,
+    1243,  1246,  1250,  1254,  1258,  1262,  1268,  1272,  1284,  1298,
+    1303,  1309,  1315,  1322,  1328,  1333,  1338,  1343,  1353,  1363,
+    1373,  1385,  1389,  1394,  1399,  1404,  1409,  1414,  1418,  1422,
+    1426,  1430,  1436,  1445,  1452,  1455,  1463,  1467,  1476,  1481,
+    1489,  1493,  1503,  1507,  1511,  1516,  1521,  1526,  1531,  1535,
+    1540,  1545,  1550,  1555,  1560,  1565,  1570,  1575,  1580,  1584,
+    1589,  1594,  1599,  1605,  1611,  1617,  1623,  1629,  1635,  1641,
+    1647,  1653,  1659,  1665,  1671,  1676,  1681,  1686,  1691,  1696,
+    1701,  1707,  1713,  1719,  1725,  1731,  1737,  1743,  1749,  1755,
+    1761,  1767,  1773,  1779,  1785,  1791,  1797,  1803,  1809,  1815,
+    1821,  1827,  1833,  1839,  1845,  1851,  1857,  1863,  1868,  1873,
+    1878,  1883,  1888,  1893,  1898,  1903,  1908,  1913,  1918,  1923,
+    1929,  1935,  1941,  1947,  1953,  1959,  1965,  1971,  1977,  1983,
+    1989,  1995,  2001,  2007,  2013,  2019,  2025,  2031,  2037,  2043,
+    2049,  2055,  2061,  2067,  2073,  2079,  2085,  2091,  2097,  2103,
+    2109,  2115,  2121,  2127,  2133,  2139,  2145,  2151,  2157,  2163,
+    2169,  2175,  2181,  2187,  2193,  2199,  2205,  2211,  2217,  2222,
+    2227,  2232,  2237,  2242,  2247,  2252,  2257,  2262,  2267,  2272,
+    2277,  2282,  2287,  2295,  2303,  2311,  2319,  2327,  2335,  2343,
+    2351,  2359,  2367,  2375,  2383,  2391,  2396,  2401,  2406,  2411,
+    2416,  2421,  2426,  2431,  2436,  2441,  2446,  2451,  2456,  2461,
+    2466,  2471,  2479,  2487,  2492,  2497,  2502,  2510,  2515,  2520,
+    2525,  2533,  2538,  2543,  2548,  2556,  2561,  2566,  2571,  2576,
+    2581,  2589,  2594,  2602,  2607,  2615,  2620,  2628,  2633,  2641,
+    2646,  2654,  2659,  2667,  2672,  2677,  2682,  2687,  2692,  2697,
+    2702,  2707,  2712,  2717,  2722,  2727,  2732,  2737,  2742,  2750,
+    2755,  2760,  2765,  2773,  2778,  2783,  2788,  2796,  2801,  2806,
+    2811,  2819,  2824,  2829,  2834,  2842,  2847,  2852,  2857,  2865,
+    2870,  2875,  2880,  2888,  2893,  2898,  2903,  2911,  2916,  2921,
+    2926,  2934,  2939,  2944,  2949,  2957,  2962,  2967,  2972,  2980,
+    2985,  2990,  2995,  3003,  3008,  3013,  3018,  3026,  3031,  3036,
+    3041,  3049,  3054,  3059,  3064,  3072,  3077,  3082,  3088,  3094,
+    3100,  3109,  3118,  3124,  3130,  3136,  3142,  3147,  3163,  3168,
+    3173,  3181,  3181,  3192,  3192,  3202,  3205,  3218,  3240,  3267,
+    3271,  3277,  3282,  3293,  3296,  3302,  3311,  3314,  3320,  3324,
+    3325,  3331,  3332,  3333,  3334,  3335,  3336,  3337,  3341,  3342,
+    3346,  3342,  3358,  3359,  3363,  3363,  3370,  3370,  3384,  3387,
+    3395,  3403,  3414,  3415,  3419,  3422,  3428,  3435,  3439,  3447,
+    3451,  3464,  3467,  3473,  3473,  3493,  3496,  3502,  3514,  3526,
+    3529,  3535,  3535,  3550,  3550,  3566,  3566,  3587,  3590,  3596,
+    3599,  3605,  3609,  3616,  3621,  3626,  3633,  3636,  3645,  3649,
+    3658,  3661,  3664,  3672,  3672,  3694,  3700,  3703,  3708,  3711
 };
 #endif
 
@@ -1008,39 +1012,39 @@ static const char *const yytname[] =
   "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
   "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
   "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
-  "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
-  "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
-  "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "DVEC2", "DVEC3",
-  "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
-  "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4",
-  "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4",
-  "F64MAT2", "F64MAT3", "F64MAT4", "NOPERSPECTIVE", "FLAT", "SMOOTH",
-  "LAYOUT", "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV",
-  "PERVIEWNV", "PERTASKNV", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2",
-  "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3",
-  "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3",
-  "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
-  "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4",
-  "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3",
-  "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2",
-  "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4",
-  "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "SAMPLER1D",
-  "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER1DSHADOW",
-  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER1DARRAY",
-  "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW", "SAMPLER2DARRAYSHADOW",
-  "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
-  "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D",
-  "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", "USAMPLER2DARRAY",
-  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
-  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
-  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
-  "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
-  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
-  "SAMPLEREXTERNALOES", "F16SAMPLER1D", "F16SAMPLER2D", "F16SAMPLER3D",
-  "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY",
-  "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER",
-  "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW",
-  "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
+  "NONUNIFORM", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "COHERENT",
+  "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DEVICECOHERENT",
+  "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", "SUBGROUPCOHERENT",
+  "NONPRIVATE", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4",
+  "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4",
+  "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4",
+  "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4",
+  "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT", "EXPLICITINTERPAMD",
+  "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "MAT2X2",
+  "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
+  "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3",
+  "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3",
+  "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2",
+  "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4",
+  "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3",
+  "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2",
+  "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4",
+  "ATOMIC_UINT", "ACCSTRUCTNV", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D",
+  "SAMPLERCUBE", "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
+  "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
+  "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
+  "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
+  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
+  "USAMPLER2DARRAY", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
+  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
+  "USAMPLERBUFFER", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
+  "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
+  "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
+  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "F16SAMPLER1D",
+  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
+  "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
+  "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
   "F16SAMPLER2DARRAYSHADOW", "F16SAMPLER2DRECTSHADOW",
   "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "SAMPLER",
   "SAMPLERSHADOW", "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
@@ -1165,16 +1169,17 @@ static const yytype_uint16 yytoknum[] =
      615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
      625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
      635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
-     645,   646,   647,   648,   649,   650,   651,   652,   653,   654
+     645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
+     655,   656,   657,   658
 };
 # endif
 
-#define YYPACT_NINF -641
+#define YYPACT_NINF -645
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-641)))
+  (!!((Yystate) == (-645)))
 
-#define YYTABLE_NINF -511
+#define YYTABLE_NINF -515
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1183,77 +1188,77 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    3463,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -313,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -262,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -641,  -310,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -269,  -641,  -311,  -351,  -331,
-    -295,  5822,  -282,  -641,  -235,  -641,  -641,  -641,  -641,  4250,
-    -641,  -641,  -641,  -641,  -229,  -641,  -641,   705,  -641,  -641,
-    -177,   -69,  -214,  -641,  8823,  -336,  -641,  -641,  -208,  -641,
-    5822,  -641,  -641,  -641,  5822,  -164,  -163,  -641,  -333,  -299,
-    -641,  -641,  -641,  6561,  -199,  -641,  -641,  -641,  -301,  -641,
-    -205,  -300,  -641,  -641,  5822,  -204,  -641,  -329,  1099,  -641,
-    -641,  -641,  -641,  -229,  -319,  -641,  6938,  -307,  -641,  -160,
-    -641,  -271,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  8069,  8069,  8069,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  -318,  -641,  -641,  -641,  -194,
-    -292,  8446,  -192,  -641,  8069,  -247,  -288,  -218,  -327,  -221,
-    -213,  -211,  -209,  -174,  -175,  -330,  -188,  -641,  -641,  7315,
-    -641,  -149,  8069,  -641,   -69,  5822,  5822,  -148,  4643,  -641,
-    -641,  -641,  -191,  -190,  -641,  -182,  -179,  -187,  7692,  -178,
-    8069,  -183,  -173,  -176,  -172,  -641,  -641,  -212,  -641,  -641,
-    -270,  -641,  -351,  -171,  -170,  -641,  -641,  -641,  -641,  1493,
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,   -19,
-    -199,  6938,  -306,  6938,  -641,  -641,  6938,  5822,  -641,  -131,
-    -641,  -641,  -641,  -291,  -641,  -641,  8069,  -130,  -641,  -641,
-    8069,  -165,  -641,  -641,  -641,  8069,  8069,  8069,  8069,  8069,
-    8069,  8069,  8069,  8069,  8069,  8069,  8069,  8069,  8069,  8069,
-    8069,  8069,  8069,  8069,  -641,  -641,  -641,  -166,  -641,  -641,
-    -641,  -641,  5036,  -148,  -229,  -264,  -641,  -641,  -641,  -641,
-    -641,  1887,  -641,  8069,  -641,  -641,  -259,  8069,  -236,  -641,
-    -641,  -127,  -641,  1887,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  -641,  8069,  8069,  -641,  -641,  -641,
-    -641,  -641,  -641,  -641,  6938,  -641,  -263,  -641,  5429,  -641,
-    -641,  -162,  -159,  -641,  -641,  -641,  -641,  -641,  -247,  -247,
-    -288,  -288,  -218,  -218,  -218,  -218,  -327,  -327,  -221,  -213,
-    -211,  -209,  -174,  -175,  8069,  -641,  -641,  -257,  -199,  -148,
-    -641,  -122,  3069,  -287,  -641,  -284,  -641,  3857,  -157,  -332,
-    -641,  1887,  -641,  -641,  -641,  -641,  6184,  -641,  -641,  -232,
-    -641,  -641,  -156,  -641,  -641,  3857,  -155,  -641,  -159,  -120,
-    5822,  -154,  8069,  -153,  -127,  -152,  -641,  -641,  8069,  8069,
-    -641,  -158,  -150,   196,  -145,  2675,  -641,  -144,  -147,  2281,
-    -146,  -641,  -641,  -641,  -641,  -280,  8069,  2281,  -155,  -641,
-    -641,  1887,  6938,  -641,  -641,  -641,  -641,  -126,  -159,  -641,
-    -641,  1887,  -142,  -641,  -641,  -641
+    3495,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -317,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -266,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -314,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -273,
+    -645,  -315,  -355,  -335,  -299,  5878,  -286,  -645,  -239,  -645,
+    -645,  -645,  -645,  4290,  -645,  -645,  -645,  -645,  -233,  -645,
+    -645,   709,  -645,  -645,  -181,   -69,  -218,  -645,  8911,  -340,
+    -645,  -645,  -212,  -645,  5878,  -645,  -645,  -645,  5878,  -168,
+    -167,  -645,  -337,  -303,  -645,  -645,  -645,  6625,  -203,  -645,
+    -645,  -645,  -305,  -645,  -209,  -304,  -645,  -645,  5878,  -208,
+    -645,  -333,  1107,  -645,  -645,  -645,  -645,  -233,  -323,  -645,
+    7006,  -311,  -645,  -164,  -645,  -275,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  8149,
+    8149,  8149,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -322,
+    -645,  -645,  -645,  -198,  -296,  8530,  -196,  -645,  8149,  -251,
+    -292,  -222,  -331,  -225,  -217,  -215,  -213,  -178,  -179,  -334,
+    -192,  -645,  -645,  7387,  -645,  -153,  8149,  -645,   -69,  5878,
+    5878,  -152,  4687,  -645,  -645,  -645,  -195,  -194,  -645,  -186,
+    -183,  -191,  7768,  -182,  8149,  -187,  -177,  -180,  -176,  -645,
+    -645,  -216,  -645,  -645,  -274,  -645,  -355,  -175,  -174,  -645,
+    -645,  -645,  -645,  1505,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,   -19,  -203,  7006,  -310,  7006,  -645,  -645,
+    7006,  5878,  -645,  -135,  -645,  -645,  -645,  -295,  -645,  -645,
+    8149,  -134,  -645,  -645,  8149,  -169,  -645,  -645,  -645,  8149,
+    8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,
+    8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,  -645,  -645,
+    -645,  -170,  -645,  -645,  -645,  -645,  5084,  -152,  -233,  -268,
+    -645,  -645,  -645,  -645,  -645,  1903,  -645,  8149,  -645,  -645,
+    -263,  8149,  -240,  -645,  -645,  -131,  -645,  1903,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  8149,
+    8149,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  7006,  -645,
+    -267,  -645,  5481,  -645,  -645,  -166,  -163,  -645,  -645,  -645,
+    -645,  -645,  -251,  -251,  -292,  -292,  -222,  -222,  -222,  -222,
+    -331,  -331,  -225,  -217,  -215,  -213,  -178,  -179,  8149,  -645,
+    -645,  -261,  -203,  -152,  -645,  -126,  3097,  -291,  -645,  -288,
+    -645,  3893,  -161,  -336,  -645,  1903,  -645,  -645,  -645,  -645,
+    6244,  -645,  -645,  -236,  -645,  -645,  -160,  -645,  -645,  3893,
+    -159,  -645,  -163,  -124,  5878,  -158,  8149,  -157,  -131,  -156,
+    -645,  -645,  8149,  8149,  -645,  -162,  -154,   196,  -149,  2699,
+    -645,  -148,  -151,  2301,  -150,  -645,  -645,  -645,  -645,  -284,
+    8149,  2301,  -159,  -645,  -645,  1903,  7006,  -645,  -645,  -645,
+    -645,  -130,  -163,  -645,  -645,  1903,  -146,  -645,  -645,  -645
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1261,109 +1266,109 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   157,   158,   192,   190,   193,   191,   194,   156,   205,
-     195,   196,   203,   204,   201,   202,   199,   200,   197,   198,
-     178,   221,   222,   223,   224,   225,   226,   239,   240,   241,
-     236,   237,   238,   251,   252,   253,   233,   234,   235,   248,
-     249,   250,   230,   231,   232,   245,   246,   247,   227,   228,
-     229,   242,   243,   244,   206,   207,   208,   254,   255,   256,
-     162,   160,   161,   159,   165,   163,   164,   166,   167,   180,
-     168,   174,   175,   176,   177,   169,   170,   171,   172,   173,
-     209,   210,   211,   266,   267,   268,   212,   213,   214,   278,
-     279,   280,   215,   216,   217,   290,   291,   292,   218,   219,
-     220,   302,   303,   304,   134,   133,   132,     0,   135,   136,
-     137,   138,   139,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     341,   342,   343,   344,   345,   346,   348,   349,   350,   351,
-     352,   353,   355,   356,   359,   360,   361,   363,   364,   326,
-     327,   347,   354,   365,   367,   368,   369,   371,   372,   463,
-     328,   329,   330,   357,   331,   335,   336,   339,   362,   366,
-     370,   332,   333,   337,   338,   358,   334,   340,   373,   374,
-     375,   377,   379,   381,   383,   385,   389,   390,   391,   392,
-     393,   394,   396,   397,   398,   399,   400,   401,   403,   405,
-     406,   407,   409,   410,   387,   395,   402,   411,   413,   414,
-     415,   417,   418,   376,   378,   380,   404,   382,   384,   386,
-     388,   408,   412,   416,   464,   465,   468,   469,   470,   471,
-     466,   467,   419,   421,   422,   423,   425,   426,   427,   429,
-     430,   431,   433,   434,   435,   437,   438,   439,   441,   442,
-     443,   445,   446,   447,   449,   450,   451,   453,   454,   455,
-     457,   458,   459,   461,   462,   420,   424,   428,   432,   436,
-     444,   448,   452,   440,   456,   460,     0,   189,   473,   558,
-     131,   146,   474,   475,   476,     0,   557,     0,   559,     0,
-     108,   107,     0,   119,   124,   153,   152,   150,   154,     0,
-     147,   149,   155,   129,   183,   151,   472,     0,   554,   556,
-       0,     0,     0,   479,     0,     0,    96,    93,     0,   106,
-       0,   115,   109,   117,     0,   118,     0,    94,   125,     0,
-      99,   148,   130,     0,   184,     1,   555,   181,     0,   145,
-     143,     0,   141,   477,     0,     0,    97,     0,     0,   560,
-     110,   114,   116,   112,   120,   111,     0,   126,   102,     0,
-     100,     0,     2,    12,    13,    10,    11,     4,     5,     6,
-       7,     8,     9,    15,    14,     0,     0,     0,   185,    42,
-      41,    43,    40,     3,    17,    36,    19,    24,    25,     0,
-       0,    29,     0,    44,     0,    48,    51,    54,    59,    62,
-      64,    66,    68,    70,    72,    74,     0,    35,    33,     0,
-     179,     0,     0,   140,     0,     0,     0,     0,     0,   481,
-      95,    98,     0,     0,   539,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   505,   514,   518,    44,    77,    90,
-       0,   494,     0,   155,   129,   497,   516,   496,   495,     0,
-     498,   499,   520,   500,   527,   501,   502,   535,   503,     0,
-     113,     0,   121,     0,   489,   128,     0,     0,   104,     0,
-     101,    37,    38,     0,    21,    22,     0,     0,    27,    26,
-       0,   189,    30,    32,    39,     0,     0,     0,     0,     0,
+       0,   157,   158,   195,   193,   196,   194,   197,   156,   208,
+     198,   199,   206,   207,   204,   205,   202,   203,   200,   201,
+     181,   224,   225,   226,   227,   228,   229,   242,   243,   244,
+     239,   240,   241,   254,   255,   256,   236,   237,   238,   251,
+     252,   253,   233,   234,   235,   248,   249,   250,   230,   231,
+     232,   245,   246,   247,   209,   210,   211,   257,   258,   259,
+     162,   160,   161,   159,   165,   163,   164,   166,   170,   183,
+     168,   169,   167,   171,   177,   178,   179,   180,   172,   173,
+     174,   175,   176,   212,   213,   214,   269,   270,   271,   215,
+     216,   217,   281,   282,   283,   218,   219,   220,   293,   294,
+     295,   221,   222,   223,   305,   306,   307,   134,   133,   132,
+       0,   135,   136,   137,   138,   139,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   318,   317,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   345,   346,   347,   348,   349,   350,
+     352,   353,   354,   355,   356,   357,   359,   360,   363,   364,
+     365,   367,   368,   330,   331,   351,   358,   369,   371,   372,
+     373,   375,   376,   467,   332,   333,   334,   361,   335,   339,
+     340,   343,   366,   370,   374,   336,   337,   341,   342,   362,
+     338,   344,   377,   378,   379,   381,   383,   385,   387,   389,
+     393,   394,   395,   396,   397,   398,   400,   401,   402,   403,
+     404,   405,   407,   409,   410,   411,   413,   414,   391,   399,
+     406,   415,   417,   418,   419,   421,   422,   380,   382,   384,
+     408,   386,   388,   390,   392,   412,   416,   420,   468,   469,
+     472,   473,   474,   475,   470,   471,   423,   425,   426,   427,
+     429,   430,   431,   433,   434,   435,   437,   438,   439,   441,
+     442,   443,   445,   446,   447,   449,   450,   451,   453,   454,
+     455,   457,   458,   459,   461,   462,   463,   465,   466,   424,
+     428,   432,   436,   440,   448,   452,   456,   444,   460,   464,
+       0,   192,   477,   562,   131,   146,   478,   479,   480,     0,
+     561,     0,   563,     0,   108,   107,     0,   119,   124,   153,
+     152,   150,   154,     0,   147,   149,   155,   129,   186,   151,
+     476,     0,   558,   560,     0,     0,     0,   483,     0,     0,
+      96,    93,     0,   106,     0,   115,   109,   117,     0,   118,
+       0,    94,   125,     0,    99,   148,   130,     0,   187,     1,
+     559,   184,     0,   145,   143,     0,   141,   481,     0,     0,
+      97,     0,     0,   564,   110,   114,   116,   112,   120,   111,
+       0,   126,   102,     0,   100,     0,     2,    12,    13,    10,
+      11,     4,     5,     6,     7,     8,     9,    15,    14,     0,
+       0,     0,   188,    42,    41,    43,    40,     3,    17,    36,
+      19,    24,    25,     0,     0,    29,     0,    44,     0,    48,
+      51,    54,    59,    62,    64,    66,    68,    70,    72,    74,
+       0,    35,    33,     0,   182,     0,     0,   140,     0,     0,
+       0,     0,     0,   485,    95,    98,     0,     0,   543,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   509,   518,
+     522,    44,    77,    90,     0,   498,     0,   155,   129,   501,
+     520,   500,   499,     0,   502,   503,   524,   504,   531,   505,
+     506,   539,   507,     0,   113,     0,   121,     0,   493,   128,
+       0,     0,   104,     0,   101,    37,    38,     0,    21,    22,
+       0,     0,    27,    26,     0,   192,    30,    32,    39,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    75,   186,   187,     0,   182,    92,
-     144,   142,     0,     0,   487,     0,   485,   480,   482,   550,
-     549,     0,   541,     0,   553,   551,     0,     0,     0,   534,
-     537,     0,   504,     0,    80,    81,    83,    82,    85,    86,
-      87,    88,    89,    84,    79,     0,     0,   519,   515,   517,
-     521,   528,   536,   123,     0,   492,     0,   127,     0,   105,
-      16,     0,    23,    20,    31,    45,    46,    47,    50,    49,
-      52,    53,    57,    58,    55,    56,    60,    61,    63,    65,
-      67,    69,    71,    73,     0,   188,   478,     0,   488,     0,
-     483,     0,     0,     0,   552,     0,   533,     0,   564,     0,
-     562,   506,    78,    91,   122,   490,     0,   103,    18,     0,
-     484,   486,     0,   544,   543,   546,   512,   529,   525,     0,
-       0,     0,     0,     0,     0,     0,   491,   493,     0,     0,
-     545,     0,     0,   524,     0,     0,   522,     0,     0,     0,
-       0,   561,   563,   507,    76,     0,   547,     0,   512,   511,
-     513,   531,     0,   509,   538,   508,   565,     0,   548,   542,
-     523,   532,     0,   526,   540,   530
+       0,     0,     0,     0,     0,     0,     0,     0,    75,   189,
+     190,     0,   185,    92,   144,   142,     0,     0,   491,     0,
+     489,   484,   486,   554,   553,     0,   545,     0,   557,   555,
+       0,     0,     0,   538,   541,     0,   508,     0,    80,    81,
+      83,    82,    85,    86,    87,    88,    89,    84,    79,     0,
+       0,   523,   519,   521,   525,   532,   540,   123,     0,   496,
+       0,   127,     0,   105,    16,     0,    23,    20,    31,    45,
+      46,    47,    50,    49,    52,    53,    57,    58,    55,    56,
+      60,    61,    63,    65,    67,    69,    71,    73,     0,   191,
+     482,     0,   492,     0,   487,     0,     0,     0,   556,     0,
+     537,     0,   568,     0,   566,   510,    78,    91,   122,   494,
+       0,   103,    18,     0,   488,   490,     0,   548,   547,   550,
+     516,   533,   529,     0,     0,     0,     0,     0,     0,     0,
+     495,   497,     0,     0,   549,     0,     0,   528,     0,     0,
+     526,     0,     0,     0,     0,   565,   567,   511,    76,     0,
+     551,     0,   516,   515,   517,   535,     0,   513,   542,   512,
+     569,     0,   552,   546,   527,   536,     0,   530,   544,   534
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,  -641,  -293,  -641,  -464,  -369,  -433,  -370,  -315,  -308,
-    -312,  -286,  -289,  -285,  -641,  -363,  -641,  -387,  -641,  -372,
-    -408,     1,  -641,  -641,  -641,     2,  -641,  -641,  -641,  -108,
-    -103,  -104,  -641,  -641,  -609,  -641,  -641,  -641,  -641,  -193,
-    -641,  -328,  -335,  -641,     6,  -641,     0,  -341,  -641,   -63,
-    -641,  -641,  -641,  -436,  -440,  -281,  -365,  -486,  -641,  -366,
-    -476,  -640,  -407,  -641,  -641,  -419,  -417,  -641,  -641,   -89,
-    -557,  -359,  -641,  -225,  -641,  -380,  -641,  -223,  -641,  -641,
-    -641,  -641,  -222,  -641,  -641,  -641,  -641,  -641,  -641,  -641,
-    -641,   -68,  -641,  -641,  -641,  -641,  -386
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -297,  -645,  -468,  -373,  -437,  -374,  -319,  -312,
+    -316,  -290,  -293,  -289,  -645,  -367,  -645,  -391,  -645,  -376,
+    -412,     1,  -645,  -645,  -645,     2,  -645,  -645,  -645,  -112,
+    -107,  -108,  -645,  -645,  -613,  -645,  -645,  -645,  -645,  -197,
+    -645,  -332,  -339,  -645,     6,  -645,     0,  -345,  -645,   -67,
+    -645,  -645,  -645,  -440,  -444,  -294,  -369,  -490,  -645,  -370,
+    -480,  -644,  -410,  -645,  -645,  -422,  -421,  -645,  -645,   -90,
+    -561,  -363,  -645,  -229,  -645,  -384,  -645,  -227,  -645,  -645,
+    -645,  -645,  -226,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,   -73,  -645,  -645,  -645,  -645,  -389
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   423,   424,   425,   601,   426,   427,   428,   429,   430,
-     431,   432,   477,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   478,   624,   479,   585,   480,
-     550,   481,   327,   507,   401,   482,   329,   330,   331,   361,
-     362,   363,   332,   333,   334,   335,   336,   337,   381,   382,
-     338,   339,   340,   341,   447,   378,   448,   374,   344,   345,
-     346,   455,   384,   458,   459,   555,   556,   505,   596,   485,
-     486,   487,   488,   573,   665,   694,   673,   674,   675,   695,
-     489,   490,   491,   492,   676,   661,   493,   494,   677,   702,
-     495,   496,   497,   637,   561,   632,   655,   671,   672,   498,
-     347,   348,   349,   358,   499,   639,   640
+      -1,   427,   428,   429,   605,   430,   431,   432,   433,   434,
+     435,   436,   481,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   482,   628,   483,   589,   484,
+     554,   485,   331,   511,   405,   486,   333,   334,   335,   365,
+     366,   367,   336,   337,   338,   339,   340,   341,   385,   386,
+     342,   343,   344,   345,   451,   382,   452,   378,   348,   349,
+     350,   459,   388,   462,   463,   559,   560,   509,   600,   489,
+     490,   491,   492,   577,   669,   698,   677,   678,   679,   699,
+     493,   494,   495,   496,   680,   665,   497,   498,   681,   706,
+     499,   500,   501,   641,   565,   636,   659,   675,   676,   502,
+     351,   352,   353,   362,   503,   643,   644
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1371,120 +1376,81 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     343,   326,   328,   364,   371,   464,   342,   465,   466,   504,
-     446,   469,   379,   589,   387,   593,   641,   595,   558,   552,
-     597,   355,   352,   532,   533,   543,   357,   397,   659,   371,
-     514,   515,   364,   373,   395,   690,   373,   359,   663,   693,
-     449,   386,   664,   396,   522,   513,   659,   693,   461,   -34,
-     373,   516,   500,   502,   350,   517,   456,   501,   534,   535,
-     544,   353,   449,   449,   608,   609,   356,   450,   453,   506,
-     594,   598,   398,   451,   454,   399,   519,   600,   400,   360,
-     433,   656,   520,   586,   657,   631,   547,   586,   697,   549,
-     586,   528,   366,   529,   586,   367,   566,   368,   568,   612,
-     613,   614,   615,   509,   586,   351,   510,   587,   644,   645,
-     629,   646,   558,   630,   504,   586,   504,   629,   634,   504,
-     650,   371,   511,   512,   322,   323,   324,   456,   530,   531,
-     456,   536,   537,   604,   701,   525,   526,   527,   586,   636,
-     373,   524,   586,   668,   602,   574,   575,   576,   577,   578,
-     579,   580,   581,   582,   583,   377,   433,   383,   558,   433,
-     667,   610,   611,   388,   584,   589,   616,   617,   393,   394,
-     449,   452,   508,   460,   518,   523,   538,   539,   540,   456,
-     541,   542,   545,   548,   554,   562,   559,   560,   563,   567,
-     564,   633,   569,   571,   570,   635,   -35,   -33,   642,   643,
-     572,   599,   603,   -28,   625,   638,   703,   504,   648,   652,
-     662,   669,   678,   628,   679,   586,  -510,   681,   687,   686,
-     683,   688,   696,   618,   456,   589,   474,   691,   620,   692,
-     705,   619,   605,   606,   607,   433,   433,   433,   433,   433,
-     433,   433,   433,   433,   433,   433,   433,   433,   433,   433,
-     433,   704,   649,   622,   680,   621,   391,   390,   623,   504,
-     392,   551,   354,   380,   651,   658,   653,   689,   699,   389,
-     456,   700,   627,   654,   590,   670,   591,   592,   682,   376,
-       0,   684,     0,   658,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   685,     0,   549,
-       0,     0,     0,     0,     0,   504,     0,     0,     0,   660,
-       0,     0,   472,     0,   698,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   371,     0,   660,     0,     0,
-       0,   365,     0,     0,     0,     0,     0,   342,     0,   372,
-       0,     0,     0,     0,     0,   342,     0,   343,   326,   328,
-       0,     0,     0,   342,   385,     0,     0,     0,     0,     0,
-     365,     0,     0,     0,   365,     0,   342,     0,     0,   433,
-     342,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   457,     0,     0,     0,   484,     0,
-     342,     0,     0,     0,   483,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     347,   330,   332,   368,   375,   468,   346,   469,   470,   508,
+     450,   473,   383,   593,   391,   597,   645,   599,   562,   556,
+     601,   359,   356,   536,   537,   547,   361,   401,   663,   375,
+     518,   519,   368,   377,   399,   694,   377,   363,   667,   697,
+     453,   390,   668,   400,   526,   517,   663,   697,   465,   -34,
+     377,   520,   504,   506,   354,   521,   460,   505,   538,   539,
+     548,   357,   453,   453,   612,   613,   360,   454,   457,   510,
+     598,   602,   402,   455,   458,   403,   523,   604,   404,   364,
+     437,   660,   524,   590,   661,   635,   551,   590,   701,   553,
+     590,   532,   370,   533,   590,   371,   570,   372,   572,   616,
+     617,   618,   619,   513,   590,   355,   514,   591,   648,   649,
+     633,   650,   562,   634,   508,   590,   508,   633,   638,   508,
+     654,   375,   515,   516,   326,   327,   328,   460,   534,   535,
+     460,   540,   541,   608,   705,   529,   530,   531,   590,   640,
+     377,   528,   590,   672,   606,   578,   579,   580,   581,   582,
+     583,   584,   585,   586,   587,   381,   437,   387,   562,   437,
+     671,   614,   615,   392,   588,   593,   620,   621,   397,   398,
+     453,   456,   512,   464,   522,   527,   542,   543,   544,   460,
+     545,   546,   549,   552,   558,   566,   563,   564,   567,   571,
+     568,   637,   573,   575,   574,   639,   -35,   -33,   646,   647,
+     576,   603,   607,   -28,   629,   642,   707,   508,   652,   656,
+     666,   673,   682,   632,   683,   590,  -514,   685,   691,   690,
+     687,   692,   700,   622,   460,   593,   478,   695,   624,   696,
+     709,   623,   609,   610,   611,   437,   437,   437,   437,   437,
+     437,   437,   437,   437,   437,   437,   437,   437,   437,   437,
+     437,   708,   653,   626,   684,   625,   395,   394,   627,   508,
+     396,   555,   358,   631,   655,   662,   657,   384,   693,   703,
+     460,   704,   393,   658,   594,   674,   595,   596,   380,   686,
+       0,   688,     0,   662,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   689,     0,   553,
+       0,     0,     0,     0,     0,   508,     0,     0,     0,   664,
+       0,     0,     0,     0,   702,     0,   476,     0,     0,     0,
+       0,     0,     0,     0,     0,   375,     0,   664,     0,     0,
+       0,     0,     0,     0,     0,   369,     0,     0,     0,     0,
+       0,   346,     0,   376,     0,     0,     0,     0,     0,   346,
+       0,   347,   330,   332,     0,     0,     0,   346,   389,     0,
+       0,     0,     0,     0,   369,     0,     0,     0,   369,   437,
+     346,     0,     0,     0,   346,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   461,     0,
+       0,     0,   488,     0,   346,     0,     0,     0,   487,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   457,   553,     0,   457,     0,
-       0,   342,   342,     0,   342,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   484,
-       0,     0,     0,     0,     0,   483,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   457,     0,     0,
-       0,     0,     0,   342,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   461,
+     557,     0,   461,     0,     0,   346,   346,     0,   346,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   457,     0,     0,     0,     0,     0,   342,     0,
-       0,   484,     0,     0,     0,     0,     0,   483,     0,     0,
-       0,     0,     0,   484,     0,     0,     0,     0,     0,   483,
+       0,     0,     0,   488,     0,     0,     0,     0,     0,   487,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   457,     0,
-       0,     0,     0,     0,   342,     0,     0,     0,     0,     0,
+       0,   461,     0,     0,     0,     0,     0,   346,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   484,     0,     0,     0,     0,   484,   483,     0,
-       0,   484,     0,   483,     0,     0,     0,   483,     0,     0,
-       0,     0,     0,     0,     0,   484,     0,     0,     0,     0,
-     372,   483,     0,     0,     0,     0,   342,     0,     0,     0,
-       0,     0,     0,     0,     0,   484,     0,     0,     0,   484,
-       0,   483,     0,     0,     0,   483,     0,   484,     0,     0,
-       0,   484,     0,   483,     0,     0,     0,   483,     0,     0,
-       0,   484,     0,     0,     0,   375,     0,   483,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,     0,     0,   318,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   461,     0,     0,     0,
+       0,     0,   346,     0,     0,   488,     0,     0,     0,     0,
+       0,   487,     0,     0,     0,     0,     0,   488,     0,     0,
+       0,     0,     0,   487,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   461,     0,     0,     0,     0,     0,   346,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   319,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   320,   321,   322,   323,
-     324,   325,     1,     2,     3,     4,     5,     6,     7,     8,
+       0,     0,     0,     0,     0,     0,   488,     0,     0,     0,
+       0,   488,   487,     0,     0,   488,     0,   487,     0,     0,
+       0,   487,     0,     0,     0,     0,     0,     0,     0,   488,
+       0,     0,     0,     0,   376,   487,     0,     0,     0,     0,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,   488,
+       0,     0,     0,   488,     0,   487,     0,     0,     0,   487,
+       0,   488,     0,     0,     0,   488,     0,   487,     0,     0,
+       0,   487,     0,     0,     0,   488,     0,     0,     0,   379,
+       0,   487,     1,     2,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,   462,   463,   464,     0,   465,   466,   467,   468,   469,
-     470,   471,    20,    21,    22,    23,    24,    25,    26,    27,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
@@ -1514,55 +1480,16 @@ static const yytype_int16 yytable[] =
      288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
      298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
      308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     472,   402,   318,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,     0,     0,   415,   416,     0,
+     318,   319,   320,   321,     0,     0,   322,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,     0,   473,     0,
-     474,   475,     0,     0,     0,     0,   476,   419,   420,   421,
-     422,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     320,   321,   322,   323,   324,   325,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,   462,   463,   464,     0,   465,
-     466,   467,   468,   469,   470,   471,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   472,   402,   318,   403,   404,   405,
-     406,   407,   408,   409,   410,   411,   412,   413,   414,     0,
-       0,   415,   416,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     417,     0,   473,     0,   474,   588,     0,     0,     0,     0,
-     476,   419,   420,   421,   422,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   320,   321,   322,   323,   324,   325,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     323,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   324,   325,   326,   327,   328,   329,
        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,   462,
-     463,   464,     0,   465,   466,   467,   468,   469,   470,   471,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,   466,
+     467,   468,     0,   469,   470,   471,   472,   473,   474,   475,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
@@ -1592,56 +1519,17 @@ static const yytype_int16 yytable[] =
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   472,   402,
-     318,   403,   404,   405,   406,   407,   408,   409,   410,   411,
-     412,   413,   414,     0,     0,   415,   416,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   417,     0,   473,     0,   474,     0,
-       0,     0,     0,     0,   476,   419,   420,   421,   422,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   320,   321,
-     322,   323,   324,   325,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   462,   463,   464,     0,   465,   466,   467,
-     468,   469,   470,   471,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   472,   402,   318,   403,   404,   405,   406,   407,
-     408,   409,   410,   411,   412,   413,   414,     0,     0,   415,
-     416,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   417,     0,
-     473,     0,   388,     0,     0,     0,     0,     0,   476,   419,
-     420,   421,   422,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   320,   321,   322,   323,   324,   325,     1,     2,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   476,   406,   322,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,     0,     0,   419,
+     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   421,     0,
+     477,     0,   478,   479,     0,     0,     0,     0,   480,   423,
+     424,   425,   426,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   324,   325,   326,   327,   328,   329,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,   462,   463,   464,
-       0,   465,   466,   467,   468,   469,   470,   471,    20,    21,
+      13,    14,    15,    16,    17,    18,    19,   466,   467,   468,
+       0,   469,   470,   471,   472,   473,   474,   475,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
@@ -1671,56 +1559,17 @@ static const yytype_int16 yytable[] =
      282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
      302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   472,   402,   318,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,     0,     0,   415,   416,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   417,     0,   473,     0,     0,     0,     0,     0,
-       0,     0,   476,   419,   420,   421,   422,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   320,   321,   322,   323,
-     324,   325,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-       0,   402,   318,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,     0,     0,   415,   416,     0,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     476,   406,   322,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,     0,     0,   419,   420,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   476,   419,   420,   421,
-     422,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     320,   321,   322,   323,   324,   325,     1,     2,     3,     4,
+       0,     0,     0,     0,     0,     0,   421,     0,   477,     0,
+     478,   592,     0,     0,     0,     0,   480,   423,   424,   425,
+     426,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     324,   325,   326,   327,   328,   329,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    20,    21,    22,    23,
+      15,    16,    17,    18,    19,   466,   467,   468,     0,   469,
+     470,   471,   472,   473,   474,   475,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
@@ -1750,13 +1599,93 @@ static const yytype_int16 yytable[] =
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,     0,     0,   318,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     314,   315,   316,   317,   318,   319,   320,   321,   476,   406,
+     322,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,     0,     0,   419,   420,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   421,     0,   477,     0,   478,     0,
+       0,     0,     0,     0,   480,   423,   424,   425,   426,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   324,   325,
+     326,   327,   328,   329,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   466,   467,   468,     0,   469,   470,   471,
+     472,   473,   474,   475,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   476,   406,   322,   407,
+     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+     418,     0,     0,   419,   420,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   421,     0,   477,     0,   392,     0,     0,     0,
+       0,     0,   480,   423,   424,   425,   426,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   324,   325,   326,   327,
+     328,   329,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,   466,   467,   468,     0,   469,   470,   471,   472,   473,
+     474,   475,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   476,   406,   322,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,     0,
+       0,   419,   420,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   320,   321,   322,   323,   324,   325,
+     421,     0,   477,     0,     0,     0,     0,     0,     0,     0,
+     480,   423,   424,   425,   426,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   324,   325,   326,   327,   328,   329,
        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1789,53 +1718,54 @@ static const yytype_int16 yytable[] =
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,     0,   402,
-     318,   403,   404,   405,   406,   407,   408,   409,   410,   411,
-     412,   413,   414,     0,     0,   415,   416,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   417,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   419,   420,   421,   422,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   320,   321,
-     322,   323,   324,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,     0,   369,   318,     0,     0,     0,     0,     0,     0,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,     0,   406,   322,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,     0,     0,   419,
+     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   421,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   480,   423,
+     424,   425,   426,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   324,   325,   326,   327,   328,   329,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   370,     0,     0,
+       0,     0,     0,     0,     0,     0,   323,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   320,   321,   322,   323,   324,     1,     2,     3,     4,
+     324,   325,   326,   327,   328,   329,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    20,    21,    22,    23,
@@ -1868,140 +1798,105 @@ static const yytype_int16 yytable[] =
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,     0,     0,   318,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   557,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   320,   321,   322,   323,   324,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,     0,     0,   318,
+     314,   315,   316,   317,   318,   319,   320,   321,     0,   406,
+     322,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,     0,     0,   419,   420,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   421,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   423,   424,   425,   426,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   324,   325,
+     326,   327,   328,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,     0,   373,   322,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   626,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   320,   321,   322,
-     323,   324,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-       0,     0,   318,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   374,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   324,   325,   326,   327,   328,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,     0,     0,   322,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   647,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     320,   321,   322,   323,   324,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,     0,     0,   318,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   561,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
-       4,     5,     6,     7,     0,     9,    10,    11,    12,    13,
+       0,     0,   324,   325,   326,   327,   328,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
-       0,     0,     0,   320,   321,   322,   323,   324,    21,    22,
+       0,     0,     0,     0,     0,     0,     0,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    80,    81,    82,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
       93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
      133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
@@ -2022,24 +1917,26 @@ static const yytype_int16 yytable[] =
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,     0,   402,   318,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-       0,     0,   415,   416,     0,     0,     0,     0,     0,     0,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,     0,
+       0,   322,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   417,     0,     0,     0,   503,   666,     0,     0,     0,
-       0,     0,   419,   420,   421,   422,     3,     4,     5,     6,
-       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     630,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   324,
+     325,   326,   327,   328,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    21,    22,    23,    24,    25,
+       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    69,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    80,    81,    82,    83,    84,    85,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   113,   114,   115,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
@@ -2060,24 +1957,26 @@ static const yytype_int16 yytable[] =
      286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,     0,   402,   318,   403,   404,   405,   406,   407,
-     408,   409,   410,   411,   412,   413,   414,     0,     0,   415,
-     416,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   417,     0,
-       0,   418,     0,     0,     0,     0,     0,     0,     0,   419,
-     420,   421,   422,     3,     4,     5,     6,     7,     0,     9,
+     316,   317,   318,   319,   320,   321,     0,     0,   322,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   651,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   324,   325,   326,   327,
+     328,     1,     2,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
       89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   113,   114,   115,   116,   117,   118,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
      139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
@@ -2097,12 +1996,49 @@ static const yytype_int16 yytable[] =
      279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
      289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,     0,
-     402,   318,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,     0,     0,   415,   416,     0,     0,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,     0,     0,   322,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
+       4,     5,     6,     7,     0,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
+       0,     0,     0,   324,   325,   326,   327,   328,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,     0,
+     406,   322,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,     0,     0,   419,   420,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   417,     0,     0,     0,   503,
-       0,     0,     0,     0,     0,     0,   419,   420,   421,   422,
+       0,     0,     0,     0,     0,   421,     0,     0,     0,   507,
+     670,     0,     0,     0,     0,     0,   423,   424,   425,   426,
        3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
@@ -2111,11 +2047,11 @@ static const yytype_int16 yytable[] =
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    83,    84,    85,    86,    87,    88,    89,    90,    91,
       92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     102,   103,   104,   105,   106,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   116,   117,   118,   119,   120,   121,
      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
      142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
@@ -2135,50 +2071,127 @@ static const yytype_int16 yytable[] =
      282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
      302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,     0,   402,   318,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,     0,     0,   415,   416,     0,     0,     0,     0,     0,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   406,   322,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,     0,     0,   419,   420,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   417,     0,     0,   546,     0,     0,     0,     0,
-       0,     0,     0,   419,   420,   421,   422,     3,     4,     5,
-       6,     7,     0,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    69,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,     0,   402,   318,   403,   404,   405,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,     0,     0,
-     415,   416,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   417,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   565,
-     419,   420,   421,   422,     3,     4,     5,     6,     7,     0,
+       0,     0,     0,     0,     0,     0,   421,     0,     0,   422,
+       0,     0,     0,     0,     0,     0,     0,   423,   424,   425,
+     426,     3,     4,     5,     6,     7,     0,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    69,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,     0,   406,   322,   407,   408,   409,   410,   411,   412,
+     413,   414,   415,   416,   417,   418,     0,     0,   419,   420,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   421,     0,     0,
+       0,   507,     0,     0,     0,     0,     0,     0,   423,   424,
+     425,   426,     3,     4,     5,     6,     7,     0,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,     0,   406,   322,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,     0,     0,   419,
+     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   421,     0,
+       0,   550,     0,     0,     0,     0,     0,     0,     0,   423,
+     424,   425,   426,     3,     4,     5,     6,     7,     0,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,     0,   406,   322,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,     0,     0,
+     419,   420,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   421,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   569,
+     423,   424,   425,   426,     3,     4,     5,     6,     7,     0,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
@@ -2187,10 +2200,10 @@ static const yytype_int16 yytable[] =
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    69,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    80,    81,    82,    83,    84,    85,    86,    87,
+       0,     0,     0,     0,     0,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   113,   114,   115,   116,   117,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   116,   117,
      118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
      128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
      138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
@@ -2211,24 +2224,170 @@ static const yytype_int16 yytable[] =
      288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
      298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
      308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-       0,   402,   318,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,     0,     0,   415,   416,     0,
+     318,   319,   320,   321,     0,   406,   322,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,     0,
+       0,   419,   420,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   419,   420,   421,
-     422,     3,     4,     5,     6,     7,     0,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+     421,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   423,   424,   425,   426,     3,     4,     5,     6,     7,
+       0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    69,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   525,     0,   406,   322,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
+       0,     0,   419,   420,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+       0,   421,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   423,   424,   425,   426,     3,     4,     5,     6,
+       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,     0,     0,   322
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,     0,     0,   335,   343,    24,     0,    26,    27,   400,
+     377,    30,    81,   493,   359,   505,   577,   507,   462,   459,
+     510,   336,   336,   354,   355,   359,   381,   372,   641,   368,
+     352,   353,   364,   373,   371,   679,   373,   372,   374,   683,
+     373,   381,   378,   380,   435,   421,   659,   691,   381,   371,
+     373,   373,   397,   398,   371,   377,   388,   380,   389,   390,
+     394,   375,   373,   373,   532,   533,   381,   372,   372,   380,
+     380,   511,   375,   378,   378,   378,   372,   372,   381,   378,
+     377,   372,   378,   378,   372,   565,   453,   378,   372,   456,
+     378,   383,   378,   385,   378,   381,   472,   336,   474,   536,
+     537,   538,   539,   378,   378,   371,   381,   381,   598,   376,
+     378,   378,   556,   381,   505,   378,   507,   378,   381,   510,
+     381,   460,   419,   420,   397,   398,   399,   459,   350,   351,
+     462,   356,   357,   524,   695,   386,   387,   388,   378,   379,
+     373,   438,   378,   379,   520,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   336,   453,   375,   602,   456,
+     650,   534,   535,   375,   380,   645,   540,   541,   336,   336,
+     373,   380,   336,   381,   372,   371,   393,   392,   391,   511,
+     358,   360,   374,   336,   336,   371,   381,   381,   371,   371,
+     381,   567,   379,   373,   371,   571,   371,   371,   589,   590,
+     376,   336,   336,   372,   374,   336,   696,   598,   374,   335,
+     371,   371,   336,   558,   372,   378,   375,   374,   372,   381,
+     376,    25,   372,   542,   556,   705,   375,   375,   544,   380,
+     376,   543,   529,   530,   531,   532,   533,   534,   535,   536,
+     537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
+     547,   381,   628,   546,   666,   545,   368,   364,   547,   650,
+     368,   458,   329,   557,   633,   641,   636,   336,   678,   691,
+     602,   692,   362,   636,   503,   659,   503,   503,   351,   668,
+      -1,   672,    -1,   659,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   673,    -1,   666,
+      -1,    -1,    -1,    -1,    -1,   696,    -1,    -1,    -1,   641,
+      -1,    -1,    -1,    -1,   690,    -1,   335,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   664,    -1,   659,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   335,    -1,    -1,    -1,    -1,
+      -1,   335,    -1,   343,    -1,    -1,    -1,    -1,    -1,   343,
+      -1,   351,   351,   351,    -1,    -1,    -1,   351,   358,    -1,
+      -1,    -1,    -1,    -1,   364,    -1,    -1,    -1,   368,   666,
+     364,    -1,    -1,    -1,   368,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   388,    -1,
+      -1,    -1,   392,    -1,   388,    -1,    -1,    -1,   392,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   459,
+     460,    -1,   462,    -1,    -1,   459,   460,    -1,   462,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   493,    -1,    -1,    -1,    -1,    -1,   493,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   511,    -1,    -1,    -1,    -1,    -1,   511,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   556,    -1,    -1,    -1,
+      -1,    -1,   556,    -1,    -1,   565,    -1,    -1,    -1,    -1,
+      -1,   565,    -1,    -1,    -1,    -1,    -1,   577,    -1,    -1,
+      -1,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   602,    -1,    -1,    -1,    -1,    -1,   602,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   636,    -1,    -1,    -1,
+      -1,   641,   636,    -1,    -1,   645,    -1,   641,    -1,    -1,
+      -1,   645,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   659,
+      -1,    -1,    -1,    -1,   664,   659,    -1,    -1,    -1,    -1,
+     664,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,
+      -1,    -1,    -1,   683,    -1,   679,    -1,    -1,    -1,   683,
+      -1,   691,    -1,    -1,    -1,   695,    -1,   691,    -1,    -1,
+      -1,   695,    -1,    -1,    -1,   705,    -1,    -1,    -1,     0,
+      -1,   705,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    69,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    80,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
       81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   113,   114,   115,   116,   117,   118,   119,   120,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
@@ -2248,123 +2407,58 @@ static const yytype_int16 yytable[] =
      281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
      301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   521,     0,   402,   318,
-     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
-     413,   414,     0,     0,   415,   416,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   417,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   419,   420,   421,   422,     3,     4,
-       5,     6,     7,     0,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,     0,     0,   318
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,     0,     0,   331,   339,    24,     0,    26,    27,   396,
-     373,    30,    81,   489,   355,   501,   573,   503,   458,   455,
-     506,   332,   332,   350,   351,   355,   377,   368,   637,   364,
-     348,   349,   360,   369,   367,   675,   369,   368,   370,   679,
-     369,   377,   374,   376,   431,   417,   655,   687,   377,   367,
-     369,   369,   393,   394,   367,   373,   384,   376,   385,   386,
-     390,   371,   369,   369,   528,   529,   377,   368,   368,   376,
-     376,   507,   371,   374,   374,   374,   368,   368,   377,   374,
-     373,   368,   374,   374,   368,   561,   449,   374,   368,   452,
-     374,   379,   374,   381,   374,   377,   468,   332,   470,   532,
-     533,   534,   535,   374,   374,   367,   377,   377,   594,   372,
-     374,   374,   552,   377,   501,   374,   503,   374,   377,   506,
-     377,   456,   415,   416,   393,   394,   395,   455,   346,   347,
-     458,   352,   353,   520,   691,   382,   383,   384,   374,   375,
-     369,   434,   374,   375,   516,   357,   358,   359,   360,   361,
-     362,   363,   364,   365,   366,   332,   449,   371,   598,   452,
-     646,   530,   531,   371,   376,   641,   536,   537,   332,   332,
-     369,   376,   332,   377,   368,   367,   389,   388,   387,   507,
-     354,   356,   370,   332,   332,   367,   377,   377,   367,   367,
-     377,   563,   375,   369,   367,   567,   367,   367,   585,   586,
-     372,   332,   332,   368,   370,   332,   692,   594,   370,   331,
-     367,   367,   332,   554,   368,   374,   371,   370,   368,   377,
-     372,    25,   368,   538,   552,   701,   371,   371,   540,   376,
-     372,   539,   525,   526,   527,   528,   529,   530,   531,   532,
-     533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
-     543,   377,   624,   542,   662,   541,   364,   360,   543,   646,
-     364,   454,   325,   332,   629,   637,   632,   674,   687,   358,
-     598,   688,   553,   632,   499,   655,   499,   499,   664,   347,
-      -1,   668,    -1,   655,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   669,    -1,   662,
-      -1,    -1,    -1,    -1,    -1,   692,    -1,    -1,    -1,   637,
-      -1,    -1,   331,    -1,   686,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   660,    -1,   655,    -1,    -1,
-      -1,   331,    -1,    -1,    -1,    -1,    -1,   331,    -1,   339,
-      -1,    -1,    -1,    -1,    -1,   339,    -1,   347,   347,   347,
-      -1,    -1,    -1,   347,   354,    -1,    -1,    -1,    -1,    -1,
-     360,    -1,    -1,    -1,   364,    -1,   360,    -1,    -1,   662,
-     364,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   384,    -1,    -1,    -1,   388,    -1,
-     384,    -1,    -1,    -1,   388,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   455,   456,    -1,   458,    -1,
-      -1,   455,   456,    -1,   458,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   489,
-      -1,    -1,    -1,    -1,    -1,   489,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   507,    -1,    -1,
-      -1,    -1,    -1,   507,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,    -1,    -1,   337,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   552,    -1,    -1,    -1,    -1,    -1,   552,    -1,
-      -1,   561,    -1,    -1,    -1,    -1,    -1,   561,    -1,    -1,
-      -1,    -1,    -1,   573,    -1,    -1,    -1,    -1,    -1,   573,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   598,    -1,
-      -1,    -1,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   632,    -1,    -1,    -1,    -1,   637,   632,    -1,
-      -1,   641,    -1,   637,    -1,    -1,    -1,   641,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   655,    -1,    -1,    -1,    -1,
-     660,   655,    -1,    -1,    -1,    -1,   660,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   675,    -1,    -1,    -1,   679,
-      -1,   675,    -1,    -1,    -1,   679,    -1,   687,    -1,    -1,
-      -1,   691,    -1,   687,    -1,    -1,    -1,   691,    -1,    -1,
-      -1,   701,    -1,    -1,    -1,     0,    -1,   701,     3,     4,
+     381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   395,   396,   397,   398,   399,   400,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,    -1,    -1,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,
+     373,    -1,   375,   376,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,   396,   397,   398,   399,   400,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
@@ -2394,53 +2488,14 @@ static const yytype_int16 yycheck[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,    -1,    -1,   333,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   391,   392,   393,   394,
-     395,   396,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   345,    -1,    -1,   348,   349,    -1,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,    -1,    -1,   352,   353,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,   369,    -1,
-     371,   372,    -1,    -1,    -1,    -1,   377,   378,   379,   380,
-     381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     391,   392,   393,   394,   395,   396,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,   373,    -1,
+     375,   376,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     395,   396,   397,   398,   399,   400,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
@@ -2474,52 +2529,13 @@ static const yytype_int16 yycheck[] =
      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
      327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   340,   341,   342,   343,   344,   345,    -1,
-      -1,   348,   349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   348,   349,    -1,    -1,   352,   353,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     367,    -1,   369,    -1,   371,   372,    -1,    -1,    -1,    -1,
-     377,   378,   379,   380,   381,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   391,   392,   393,   394,   395,   396,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
-     343,   344,   345,    -1,    -1,   348,   349,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   367,    -1,   369,    -1,   371,    -1,
-      -1,    -1,    -1,    -1,   377,   378,   379,   380,   381,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   391,   392,
-     393,   394,   395,   396,     3,     4,     5,     6,     7,     8,
+      -1,    -1,    -1,    -1,   371,    -1,   373,    -1,   375,    -1,
+      -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   395,   396,
+     397,   398,   399,   400,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
@@ -2553,15 +2569,95 @@ static const yytype_int16 yycheck[] =
      309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
      329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,    -1,    -1,   348,
-     349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,
-     369,    -1,   371,    -1,    -1,    -1,    -1,    -1,   377,   378,
-     379,   380,   381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   391,   392,   393,   394,   395,   396,     3,     4,
+     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
+     349,    -1,    -1,   352,   353,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   371,    -1,   373,    -1,   375,    -1,    -1,    -1,
+      -1,    -1,   381,   382,   383,   384,   385,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   395,   396,   397,   398,
+     399,   400,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,    -1,
+      -1,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     371,    -1,   373,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     381,   382,   383,   384,   385,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   395,   396,   397,   398,   399,   400,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,    -1,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,    -1,    -1,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,   396,   397,   398,   399,   400,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
@@ -2592,52 +2688,13 @@ static const yytype_int16 yycheck[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   367,    -1,   369,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   377,   378,   379,   380,   381,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   391,   392,   393,   394,
-     395,   396,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-      -1,   332,   333,   334,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   345,    -1,    -1,   348,   349,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   377,   378,   379,   380,
-     381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     391,   392,   393,   394,   395,   396,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     395,   396,   397,   398,   399,   400,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,
@@ -2670,53 +2727,14 @@ static const yytype_int16 yycheck[] =
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,    -1,    -1,   333,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   391,   392,   393,   394,   395,   396,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,    -1,   332,
-     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
-     343,   344,   345,    -1,    -1,   348,   349,    -1,    -1,    -1,
+     327,   328,   329,   330,   331,   332,   333,   334,    -1,   336,
+     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   348,   349,    -1,    -1,   352,   353,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   378,   379,   380,   381,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   391,   392,
-     393,   394,   395,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,   371,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   395,   396,
+     397,   398,   399,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
@@ -2749,179 +2767,65 @@ static const yytype_int16 yycheck[] =
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,    -1,   332,   333,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   377,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   391,   392,   393,   394,   395,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,    -1,    -1,   333,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   372,    -1,    -1,    -1,    -1,
+     330,   331,   332,   333,   334,    -1,   336,   337,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   391,   392,   393,   394,   395,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,    -1,    -1,   333,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   372,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   391,   392,   393,
-     394,   395,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-      -1,    -1,   333,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   395,   396,   397,   398,   399,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     391,   392,   393,   394,   395,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,    -1,    -1,   333,    -1,    -1,    -1,    -1,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,    -1,    -1,   337,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
-       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   376,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,   396,   397,   398,   399,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   391,   392,   393,   394,   395,    34,    35,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
@@ -2942,24 +2846,26 @@ static const yytype_int16 yycheck[] =
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,    -1,   332,   333,   334,   335,
-     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
-      -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,    -1,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,    -1,
+      -1,   337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   367,    -1,    -1,    -1,   371,   372,    -1,    -1,    -1,
-      -1,    -1,   378,   379,   380,   381,     5,     6,     7,     8,
-       9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   395,
+     396,   397,   398,   399,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,
+      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,    98,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,   128,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
      139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
@@ -2980,24 +2886,26 @@ static const yytype_int16 yycheck[] =
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
      309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,    -1,   332,   333,   334,   335,   336,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,    -1,    -1,   348,
-     349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,
-      -1,   370,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,
-     379,   380,   381,     5,     6,     7,     8,     9,    -1,    11,
+     329,   330,   331,   332,   333,   334,    -1,    -1,   337,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   376,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   395,   396,   397,   398,
+     399,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   126,   127,   128,   129,   130,   131,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
      142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
      152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
@@ -3017,12 +2925,49 @@ static const yytype_int16 yycheck[] =
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
      302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,    -1,
-     332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
-     342,   343,   344,   345,    -1,    -1,   348,   349,    -1,    -1,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,    -1,    -1,   337,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   395,   396,   397,   398,   399,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,    -1,
+     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
+     346,   347,   348,   349,    -1,    -1,   352,   353,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,    -1,   371,
-      -1,    -1,    -1,    -1,    -1,    -1,   378,   379,   380,   381,
+      -1,    -1,    -1,    -1,    -1,   371,    -1,    -1,    -1,   375,
+     376,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,
        5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
@@ -3031,11 +2976,11 @@ static const yytype_int16 yycheck[] =
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     115,   116,   117,   118,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
@@ -3055,50 +3000,127 @@ static const yytype_int16 yycheck[] =
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,    -1,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+      -1,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,    -1,    -1,   352,   353,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   367,    -1,    -1,   370,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   378,   379,   380,   381,     5,     6,     7,
-       8,     9,    -1,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,    -1,   332,   333,   334,   335,   336,   337,
-     338,   339,   340,   341,   342,   343,   344,   345,    -1,    -1,
-     348,   349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   367,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   377,
-     378,   379,   380,   381,     5,     6,     7,     8,     9,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,    -1,   374,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,
+     385,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,    -1,   336,   337,   338,   339,   340,   341,   342,   343,
+     344,   345,   346,   347,   348,   349,    -1,    -1,   352,   353,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,    -1,
+      -1,   375,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,    -1,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,    -1,    -1,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,
+      -1,   374,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,
+     383,   384,   385,     5,     6,     7,     8,     9,    -1,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,    -1,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   348,   349,    -1,    -1,
+     352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
+     382,   383,   384,   385,     5,     6,     7,     8,     9,    -1,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
@@ -3107,10 +3129,10 @@ static const yytype_int16 yycheck[] =
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    94,    95,    96,    97,    98,    99,   100,
+      -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   126,   127,   128,   129,   130,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,
      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
@@ -3131,82 +3153,83 @@ static const yytype_int16 yycheck[] =
      301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
      311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-      -1,   332,   333,   334,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   345,    -1,    -1,   348,   349,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,   379,   380,
-     381,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,    -1,   332,   333,
-     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
-     344,   345,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,
+     331,   332,   333,   334,    -1,   336,   337,   338,   339,   340,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,    -1,
+      -1,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   378,   379,   380,   381,     5,     6,
-       7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,    -1,    -1,   333
+     371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   382,   383,   384,   385,     5,     6,     7,     8,     9,
+      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+      -1,    -1,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   382,   383,   384,   385,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,    -1,    -1,   337
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -3244,108 +3267,108 @@ static const yytype_uint16 yystos[] =
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
      313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   333,   377,
-     391,   392,   393,   394,   395,   396,   431,   432,   435,   436,
-     437,   438,   442,   443,   444,   445,   446,   447,   450,   451,
-     452,   453,   454,   456,   458,   459,   460,   500,   501,   502,
-     367,   367,   332,   371,   459,   332,   377,   377,   503,   368,
-     374,   439,   440,   441,   451,   456,   374,   377,   332,   332,
-     377,   452,   456,   369,   457,     0,   501,   332,   455,    81,
-     332,   448,   449,   371,   462,   456,   377,   457,   371,   479,
-     440,   439,   441,   332,   332,   367,   376,   457,   371,   374,
-     377,   434,   332,   334,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,   344,   345,   348,   349,   367,   370,   378,
-     379,   380,   381,   401,   402,   403,   405,   406,   407,   408,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   337,   381,   395,   396,   397,   398,   399,   400,
+     435,   436,   439,   440,   441,   442,   446,   447,   448,   449,
+     450,   451,   454,   455,   456,   457,   458,   460,   462,   463,
+     464,   504,   505,   506,   371,   371,   336,   375,   463,   336,
+     381,   381,   507,   372,   378,   443,   444,   445,   455,   460,
+     378,   381,   336,   336,   381,   456,   460,   373,   461,     0,
+     505,   336,   459,    81,   336,   452,   453,   375,   466,   460,
+     381,   461,   375,   483,   444,   443,   445,   336,   336,   371,
+     380,   461,   375,   378,   381,   438,   336,   338,   339,   340,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,   352,
+     353,   371,   374,   382,   383,   384,   385,   405,   406,   407,
      409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,   421,   422,   423,   424,   425,   454,   456,   369,
-     368,   374,   376,   368,   374,   461,   451,   456,   463,   464,
-     377,   377,    22,    23,    24,    26,    27,    28,    29,    30,
-      31,    32,   331,   369,   371,   372,   377,   412,   425,   427,
-     429,   431,   435,   454,   456,   469,   470,   471,   472,   480,
-     481,   482,   483,   486,   487,   490,   491,   492,   499,   504,
-     457,   376,   457,   371,   427,   467,   376,   433,   332,   374,
-     377,   412,   412,   429,   348,   349,   369,   373,   368,   368,
-     374,   330,   427,   367,   412,   382,   383,   384,   379,   381,
-     346,   347,   350,   351,   385,   386,   352,   353,   389,   388,
-     387,   354,   356,   355,   390,   370,   370,   425,   332,   425,
-     430,   449,   463,   456,   332,   465,   466,   372,   464,   377,
-     377,   494,   367,   367,   377,   377,   429,   367,   429,   375,
-     367,   369,   372,   473,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   376,   428,   374,   377,   372,   470,
-     483,   487,   492,   467,   376,   467,   468,   467,   463,   332,
-     368,   404,   429,   332,   427,   412,   412,   412,   414,   414,
-     415,   415,   416,   416,   416,   416,   417,   417,   418,   419,
-     420,   421,   422,   423,   426,   370,   372,   465,   457,   374,
-     377,   470,   495,   429,   377,   429,   375,   493,   332,   505,
-     506,   480,   427,   427,   467,   372,   374,   372,   370,   429,
-     377,   466,   331,   469,   481,   496,   368,   368,   429,   444,
-     451,   485,   367,   370,   374,   474,   372,   467,   375,   367,
-     485,   497,   498,   476,   477,   478,   484,   488,   332,   368,
-     430,   370,   506,   372,   427,   429,   377,   368,    25,   472,
-     471,   371,   376,   471,   475,   479,   368,   368,   429,   475,
-     476,   480,   489,   467,   377,   372
+     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
+     429,   458,   460,   373,   372,   378,   380,   372,   378,   465,
+     455,   460,   467,   468,   381,   381,    22,    23,    24,    26,
+      27,    28,    29,    30,    31,    32,   335,   373,   375,   376,
+     381,   416,   429,   431,   433,   435,   439,   458,   460,   473,
+     474,   475,   476,   484,   485,   486,   487,   490,   491,   494,
+     495,   496,   503,   508,   461,   380,   461,   375,   431,   471,
+     380,   437,   336,   378,   381,   416,   416,   433,   352,   353,
+     373,   377,   372,   372,   378,   334,   431,   371,   416,   386,
+     387,   388,   383,   385,   350,   351,   354,   355,   389,   390,
+     356,   357,   393,   392,   391,   358,   360,   359,   394,   374,
+     374,   429,   336,   429,   434,   453,   467,   460,   336,   469,
+     470,   376,   468,   381,   381,   498,   371,   371,   381,   381,
+     433,   371,   433,   379,   371,   373,   376,   477,   361,   362,
+     363,   364,   365,   366,   367,   368,   369,   370,   380,   432,
+     378,   381,   376,   474,   487,   491,   496,   471,   380,   471,
+     472,   471,   467,   336,   372,   408,   433,   336,   431,   416,
+     416,   416,   418,   418,   419,   419,   420,   420,   420,   420,
+     421,   421,   422,   423,   424,   425,   426,   427,   430,   374,
+     376,   469,   461,   378,   381,   474,   499,   433,   381,   433,
+     379,   497,   336,   509,   510,   484,   431,   431,   471,   376,
+     378,   376,   374,   433,   381,   470,   335,   473,   485,   500,
+     372,   372,   433,   448,   455,   489,   371,   374,   378,   478,
+     376,   471,   379,   371,   489,   501,   502,   480,   481,   482,
+     488,   492,   336,   372,   434,   374,   510,   376,   431,   433,
+     381,   372,    25,   476,   475,   375,   380,   475,   479,   483,
+     372,   372,   433,   479,   480,   484,   493,   471,   381,   376
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   400,   401,   402,   402,   402,   402,   402,   402,   402,
-     402,   402,   402,   402,   402,   402,   402,   403,   403,   403,
-     403,   403,   403,   404,   405,   406,   407,   407,   408,   408,
-     409,   409,   410,   411,   411,   411,   412,   412,   412,   412,
-     413,   413,   413,   413,   414,   414,   414,   414,   415,   415,
-     415,   416,   416,   416,   417,   417,   417,   417,   417,   418,
-     418,   418,   419,   419,   420,   420,   421,   421,   422,   422,
-     423,   423,   424,   424,   425,   426,   425,   427,   427,   428,
-     428,   428,   428,   428,   428,   428,   428,   428,   428,   428,
-     429,   429,   430,   431,   431,   431,   431,   431,   431,   431,
-     431,   431,   433,   432,   434,   434,   435,   436,   436,   437,
-     437,   438,   439,   439,   440,   440,   440,   440,   441,   442,
-     442,   442,   442,   442,   443,   443,   443,   443,   443,   444,
-     444,   445,   446,   446,   446,   446,   446,   446,   446,   446,
-     447,   448,   448,   449,   449,   449,   450,   451,   451,   452,
-     452,   452,   452,   452,   452,   452,   453,   453,   453,   453,
-     453,   453,   453,   453,   453,   453,   453,   453,   453,   453,
-     453,   453,   453,   453,   453,   453,   453,   453,   453,   453,
-     454,   455,   455,   456,   456,   457,   457,   457,   457,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   459,   459,   459,   461,   460,   462,
-     460,   463,   463,   464,   464,   465,   465,   466,   466,   467,
-     467,   467,   468,   468,   469,   470,   470,   471,   471,   471,
-     471,   471,   471,   471,   472,   473,   474,   472,   475,   475,
-     477,   476,   478,   476,   479,   479,   480,   480,   481,   481,
-     482,   482,   483,   484,   484,   485,   485,   486,   486,   488,
-     487,   489,   489,   490,   490,   491,   491,   493,   492,   494,
-     492,   495,   492,   496,   496,   497,   497,   498,   498,   499,
-     499,   499,   499,   499,   500,   500,   501,   501,   501,   503,
-     502,   504,   505,   505,   506,   506
+       0,   404,   405,   406,   406,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   406,   406,   407,   407,   407,
+     407,   407,   407,   408,   409,   410,   411,   411,   412,   412,
+     413,   413,   414,   415,   415,   415,   416,   416,   416,   416,
+     417,   417,   417,   417,   418,   418,   418,   418,   419,   419,
+     419,   420,   420,   420,   421,   421,   421,   421,   421,   422,
+     422,   422,   423,   423,   424,   424,   425,   425,   426,   426,
+     427,   427,   428,   428,   429,   430,   429,   431,   431,   432,
+     432,   432,   432,   432,   432,   432,   432,   432,   432,   432,
+     433,   433,   434,   435,   435,   435,   435,   435,   435,   435,
+     435,   435,   437,   436,   438,   438,   439,   440,   440,   441,
+     441,   442,   443,   443,   444,   444,   444,   444,   445,   446,
+     446,   446,   446,   446,   447,   447,   447,   447,   447,   448,
+     448,   449,   450,   450,   450,   450,   450,   450,   450,   450,
+     451,   452,   452,   453,   453,   453,   454,   455,   455,   456,
+     456,   456,   456,   456,   456,   456,   457,   457,   457,   457,
+     457,   457,   457,   457,   457,   457,   457,   457,   457,   457,
+     457,   457,   457,   457,   457,   457,   457,   457,   457,   457,
+     457,   457,   457,   458,   459,   459,   460,   460,   461,   461,
+     461,   461,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   463,   463,
+     463,   465,   464,   466,   464,   467,   467,   468,   468,   469,
+     469,   470,   470,   471,   471,   471,   472,   472,   473,   474,
+     474,   475,   475,   475,   475,   475,   475,   475,   476,   477,
+     478,   476,   479,   479,   481,   480,   482,   480,   483,   483,
+     484,   484,   485,   485,   486,   486,   487,   488,   488,   489,
+     489,   490,   490,   492,   491,   493,   493,   494,   494,   495,
+     495,   497,   496,   498,   496,   499,   496,   500,   500,   501,
+     501,   502,   502,   503,   503,   503,   503,   503,   504,   504,
+     505,   505,   505,   507,   506,   508,   509,   509,   510,   510
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -3368,8 +3391,9 @@ static const yytype_uint8 yyr2[] =
        4,     1,     3,     1,     3,     1,     1,     1,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
-       1,     1,     3,     1,     2,     2,     3,     3,     4,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     4,     1,     1,     3,     1,     2,     2,     3,
+       3,     4,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -3398,16 +3422,15 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     6,     0,
-       5,     1,     2,     3,     4,     1,     3,     1,     2,     1,
-       3,     4,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
-       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
-       1,     2,     5,     3,     1,     1,     4,     1,     2,     0,
-       8,     0,     1,     3,     2,     1,     2,     0,     6,     0,
-       8,     0,     7,     1,     1,     1,     0,     2,     3,     2,
-       2,     2,     3,     2,     1,     2,     1,     1,     1,     0,
-       3,     5,     1,     3,     1,     4
+       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
+       3,     1,     2,     1,     3,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
+       0,     5,     1,     1,     0,     2,     0,     2,     2,     3,
+       1,     2,     1,     2,     1,     2,     5,     3,     1,     1,
+       4,     1,     2,     0,     8,     0,     1,     3,     2,     1,
+       2,     0,     6,     0,     8,     0,     7,     1,     1,     1,
+       0,     2,     3,     2,     2,     2,     3,     2,     1,     2,
+       1,     1,     1,     0,     3,     5,     1,     3,     1,     4
 };
 
 
@@ -4090,250 +4113,250 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 4150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 4185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 4194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 4203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 4211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 348 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 4253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4341,11 +4364,11 @@ yyreduce:
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4353,29 +4376,29 @@ yyreduce:
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 4357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -4403,50 +4426,50 @@ yyreduce:
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 478 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 4428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -4463,179 +4486,179 @@ yyreduce:
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 530 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -4644,11 +4667,11 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -4657,124 +4680,124 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 681 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 4774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4787,17 +4810,17 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4811,119 +4834,119 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4861 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4932,40 +4955,40 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 790 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 4965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4974,75 +4997,75 @@ yyreduce:
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 810 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 5005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 5015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 825 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 5036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -5052,54 +5075,54 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 5056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -5108,11 +5131,11 @@ yyreduce:
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 881 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -5130,11 +5153,11 @@ yyreduce:
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 901 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -5154,11 +5177,11 @@ yyreduce:
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5174,11 +5197,11 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5198,11 +5221,11 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5214,11 +5237,11 @@ yyreduce:
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5218 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 975 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5226,11 +5249,11 @@ yyreduce:
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5241,11 +5264,11 @@ yyreduce:
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 5245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5253,118 +5276,118 @@ yyreduce:
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1005 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 5268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1021 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1025 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1030 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1037 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 5324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1042 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 5334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 5344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1052 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1053 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1067 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -5376,11 +5399,11 @@ yyreduce:
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1078 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -5405,22 +5428,22 @@ yyreduce:
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 5420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5428,11 +5451,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5440,11 +5463,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
 #ifdef NV_EXTENSIONS
@@ -5456,11 +5479,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -5470,11 +5493,11 @@ yyreduce:
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 5474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1148 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef NV_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
@@ -5485,11 +5508,11 @@ yyreduce:
         (yyval.interm.type).qualifier.pervertexNV = true;
 #endif
     }
-#line 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1158 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef NV_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
@@ -5498,11 +5521,11 @@ yyreduce:
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
 #endif
     }
-#line 5502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef NV_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
@@ -5511,11 +5534,11 @@ yyreduce:
         (yyval.interm.type).qualifier.perViewNV = true;
 #endif
     }
-#line 5515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef NV_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
@@ -5524,84 +5547,84 @@ yyreduce:
         (yyval.interm.type).qualifier.perTaskNV = true;
 #endif
     }
-#line 5528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1201 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1208 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1209 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1216 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1228 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5610,80 +5633,80 @@ yyreduce:
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1261 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1272 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5696,11 +5719,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5715,43 +5738,43 @@ yyreduce:
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 5740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 5751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -5759,52 +5782,97 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1342 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNVX");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
+            | EShLangAnyHitNVMask), "hitAttributeNVX");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NVX_raytracing, "hitAttributeNVX");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqHitAttrNV;
+#endif
+    }
+#line 5842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 168:
+#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNVX");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNVX");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadNVX");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadNV;
+#endif
+    }
+#line 5857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 169:
+#line 1363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNVX");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNVX");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadInNVX");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadInNV;
+#endif
+    }
+#line 5872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 170:
+#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -5817,185 +5885,185 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 172:
+#line 1389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 5840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 173:
+#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 174:
+#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
         (yyval.interm.type).qualifier.workgroupcoherent = true;
     }
-#line 5860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 175:
+#line 1404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
         (yyval.interm.type).qualifier.subgroupcoherent = true;
     }
-#line 5870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 176:
+#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         (yyval.interm.type).qualifier.nonprivate = true;
     }
-#line 5880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 177:
+#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5916 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1430 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 5927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 5938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+#line 1445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 5947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1452 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 186:
+#line 1463 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+#line 1467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 5985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 189:
+#line 1481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -6004,20 +6072,20 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1458 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 190:
+#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1462 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 191:
+#line 1493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -6025,1484 +6093,1495 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1503 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 6038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 193:
+#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 194:
+#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
     }
-#line 6067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 196:
+#line 1521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 197:
+#line 1526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 198:
+#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 1504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 199:
+#line 1535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 1509 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 200:
+#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 6116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 1514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 201:
+#line 1545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 6126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 1519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 202:
+#line 1550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 6136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 1524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 203:
+#line 1555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 6146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 1529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 204:
+#line 1560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 205:
+#line 1565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 1539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 206:
+#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 1544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 207:
+#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 1549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 208:
+#line 1580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 6195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 1553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 209:
+#line 1584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 210:
+#line 1589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 1563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 211:
+#line 1594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 1568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 212:
+#line 1599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 1574 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 213:
+#line 1605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 1580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 214:
+#line 1611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 1586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 215:
+#line 1617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(2);
     }
-#line 6269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 1592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 216:
+#line 1623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(3);
     }
-#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 1598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 217:
+#line 1629 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
     }
-#line 6291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 1604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 218:
+#line 1635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 1610 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 219:
+#line 1641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 220:
+#line 1647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 1622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 221:
+#line 1653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 1628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 222:
+#line 1659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 1634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 223:
+#line 1665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 1640 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 224:
+#line 1671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 6367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 1645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 225:
+#line 1676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 6377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 1650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 226:
+#line 1681 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 6387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 1655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 227:
+#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 1660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 228:
+#line 1691 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 1665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 229:
+#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 1670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 230:
+#line 1701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(2);
     }
-#line 6428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 1676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 231:
+#line 1707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(3);
     }
-#line 6439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 1682 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 232:
+#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(4);
     }
-#line 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 233:
+#line 1719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(2);
     }
-#line 6461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 1694 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 234:
+#line 1725 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(3);
     }
-#line 6472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 1700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 235:
+#line 1731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(4);
     }
-#line 6483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 1706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 236:
+#line 1737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 1712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 237:
+#line 1743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 238:
+#line 1749 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 1724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 239:
+#line 1755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 6527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 1730 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 240:
+#line 1761 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 6538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+#line 1767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 6549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 1754 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 244:
+#line 1785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 1760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 245:
+#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 6593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 246:
+#line 1797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(3);
     }
-#line 6604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 1772 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 247:
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 6615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 248:
+#line 1809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 6626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 1784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 249:
+#line 1815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(3);
     }
-#line 6637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1790 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 250:
+#line 1821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(4);
     }
-#line 6648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 251:
+#line 1827 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 252:
+#line 1833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 253:
+#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 254:
+#line 1845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 6692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 255:
+#line 1851 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 6703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 256:
+#line 1857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 6714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 257:
+#line 1863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1837 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 258:
+#line 1868 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 259:
+#line 1873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 260:
+#line 1878 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6822 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 261:
+#line 1883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 262:
+#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 263:
+#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1867 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 264:
+#line 1898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 265:
+#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1877 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 266:
+#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 267:
+#line 1913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1887 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 268:
+#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1892 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 269:
+#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 270:
+#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 271:
+#line 1935 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1910 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 272:
+#line 1941 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1916 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 273:
+#line 1947 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1922 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 274:
+#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1928 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 275:
+#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 276:
+#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1940 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 277:
+#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1946 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 278:
+#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1952 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 279:
+#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1958 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 280:
+#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 281:
+#line 1995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1970 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 282:
+#line 2001 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1976 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 283:
+#line 2007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1982 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 284:
+#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1988 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 285:
+#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 286:
+#line 2025 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 2000 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 287:
+#line 2031 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 2006 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 288:
+#line 2037 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 2012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 289:
+#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 2018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 290:
+#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 291:
+#line 2055 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 2030 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 292:
+#line 2061 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 2036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 293:
+#line 2067 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 2042 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 294:
+#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 2048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 295:
+#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 296:
+#line 2085 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 2060 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 297:
+#line 2091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 2066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 298:
+#line 2097 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 2072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 299:
+#line 2103 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 2078 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 300:
+#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 301:
+#line 2115 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 2090 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 302:
+#line 2121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 2096 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 303:
+#line 2127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 2102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 304:
+#line 2133 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 2108 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 305:
+#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 306:
+#line 2145 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 2120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 307:
+#line 2151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 308:
+#line 2157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2132 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 309:
+#line 2163 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 310:
+#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 311:
+#line 2175 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2150 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 312:
+#line 2181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 313:
+#line 2187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 314:
+#line 2193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2168 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 315:
+#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtAccStructNV;
+#endif
+    }
+#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 318:
+#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 7372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2222 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 7382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7412 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 7422 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 7432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 7442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 7452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 7462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 7472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2272 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 7482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 7492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 7502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7511,11 +7590,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
 #endif
     }
-#line 7515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 333:
+#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7524,11 +7603,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
 #endif
     }
-#line 7528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 334:
+#line 2303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7537,11 +7616,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
 #endif
     }
-#line 7541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7550,11 +7629,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
 #endif
     }
-#line 7554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7563,11 +7642,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
 #endif
     }
-#line 7567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2290 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7576,11 +7655,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
 #endif
     }
-#line 7580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7589,11 +7668,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
 #endif
     }
-#line 7593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7602,11 +7681,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7685 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7615,11 +7694,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7628,11 +7707,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
 #endif
     }
-#line 7632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7641,11 +7720,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
 #endif
     }
-#line 7645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7654,11 +7733,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 344:
+#line 2383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7667,171 +7746,171 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
 #endif
     }
-#line 7671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 345:
+#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 7681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 346:
+#line 2396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 7691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 7701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 7721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 350:
+#line 2416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 7731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 7741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 7751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 7761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 7771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2441 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 7781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 7791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 7801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 358:
+#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 7811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 7821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 7831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2434 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7840,11 +7919,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
 #endif
     }
-#line 7844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 362:
+#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7853,41 +7932,41 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
 #endif
     }
-#line 7857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 7867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 2455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 7877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2497 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 7887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7896,41 +7975,41 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 7900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2510 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 7910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 2478 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 368:
+#line 2515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 7920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 2483 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+#line 2520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 7930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 2488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 370:
+#line 2525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7939,41 +8018,41 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 7943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 2496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 371:
+#line 2533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 7953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 2501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 372:
+#line 2538 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 7963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 2506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2543 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 7973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 2511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 374:
+#line 2548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7982,61 +8061,61 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 7986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 2519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 7996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 2524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 376:
+#line 2561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 8006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 377:
+#line 2566 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 8016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 378:
+#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 8026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 379:
+#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 8036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 380:
+#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8045,21 +8124,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
 #endif
     }
-#line 8049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 381:
+#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 8059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 2557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 382:
+#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8068,21 +8147,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
 #endif
     }
-#line 8072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8151 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 383:
+#line 2602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 8082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 384:
+#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8091,21 +8170,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
 #endif
     }
-#line 8095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 385:
+#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 8105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 386:
+#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8114,21 +8193,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
 #endif
     }
-#line 8118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 387:
+#line 2628 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 8128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 388:
+#line 2633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8137,21 +8216,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 8141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 389:
+#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 8151 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 2609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 390:
+#line 2646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8160,21 +8239,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 8164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 391:
+#line 2654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 8174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 392:
+#line 2659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8183,161 +8262,161 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 8187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 2630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 8197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 8207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2640 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2677 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 8217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 396:
+#line 2682 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 8227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 397:
+#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 8237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 398:
+#line 2692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 8247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 8257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 400:
+#line 2702 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 8267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 8277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 8287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2717 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 8297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2685 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 404:
+#line 2722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 8307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2690 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 8317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 406:
+#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 8327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 407:
+#line 2737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 8337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 408:
+#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8346,41 +8425,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
 #endif
     }
-#line 8350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 409:
+#line 2750 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 8360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 410:
+#line 2755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 8370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2760 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 8380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8459 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 412:
+#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8389,41 +8468,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 8393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 8403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 8413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 415:
+#line 2783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 8423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 416:
+#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8432,41 +8511,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 8436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2759 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 8446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 8456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2769 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 419:
+#line 2806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 8466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 420:
+#line 2811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8475,41 +8554,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 8479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 421:
+#line 2819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 8489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 8499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 423:
+#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 8509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 424:
+#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8518,41 +8597,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
 #endif
     }
-#line 8522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2805 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 8532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2810 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 8542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 8552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 428:
+#line 2857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8561,41 +8640,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
 #endif
     }
-#line 8565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 8575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 8585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2838 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 8595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 432:
+#line 2880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8604,41 +8683,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
 #endif
     }
-#line 8608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2851 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 8618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 8628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 8638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8647,41 +8726,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
 #endif
     }
-#line 8651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2911 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 8661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2916 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 8671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2921 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 8681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 440:
+#line 2926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8690,41 +8769,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
 #endif
     }
-#line 8694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2897 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 8704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 8714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2907 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 8724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 444:
+#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8733,41 +8812,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 8737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2920 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 2957 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 8747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2925 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 2962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 8757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2930 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 2967 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 8767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2935 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 448:
+#line 2972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8776,41 +8855,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 8780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 2980 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 8790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 2985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 8800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2953 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 2990 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 8810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2958 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 452:
+#line 2995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8819,41 +8898,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 8823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 3003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 8833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 8843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2976 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 8853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 2981 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 3018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8862,41 +8941,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 8866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 2989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 3026 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 8876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 2994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 458:
+#line 3031 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 8886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 2999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 459:
+#line 3036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 8896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 3004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 3041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8905,41 +8984,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 8909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 3012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 3049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 8919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 458:
-#line 3017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 3054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 8929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 459:
-#line 3022 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 3059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 8939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 3027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 3064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8948,64 +9027,64 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 8952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 3035 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 3072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 8962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 462:
-#line 3040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 3077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 8972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 463:
-#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 3082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 8983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 464:
-#line 3051 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 3088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 8994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 465:
-#line 3057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 3094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 9005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 466:
-#line 3063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 3100 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -9015,11 +9094,11 @@ yyreduce:
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
 #endif
     }
-#line 9019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 467:
-#line 3072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 3109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -9029,65 +9108,65 @@ yyreduce:
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
 #endif
     }
-#line 9033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 468:
-#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 9044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 469:
-#line 3087 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 3124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 9055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 470:
-#line 3093 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 3130 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 9066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 471:
-#line 3099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 3136 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 9077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 472:
-#line 3105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3142 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 9087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 3110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -9101,47 +9180,47 @@ yyreduce:
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 9105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 3126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3163 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 9115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 3131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3168 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 9125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 3136 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 9135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 3144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 3144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -9153,17 +9232,17 @@ yyreduce:
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 3155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 3155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -9171,19 +9250,19 @@ yyreduce:
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 3165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 485:
+#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 9183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 3168 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -9194,11 +9273,11 @@ yyreduce:
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 483:
-#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -9221,11 +9300,11 @@ yyreduce:
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 484:
-#line 3203 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -9250,38 +9329,38 @@ yyreduce:
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 485:
-#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 486:
-#line 3234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 487:
-#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 9281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 488:
-#line 3245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -9290,219 +9369,219 @@ yyreduce:
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 489:
-#line 3256 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 490:
-#line 3259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 494:
+#line 3296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 9313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 491:
-#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 495:
+#line 3302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 9324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 492:
-#line 3274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 496:
+#line 3311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 9332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 493:
-#line 3277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 497:
+#line 3314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 494:
-#line 3283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 498:
+#line 3320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 495:
-#line 3287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 499:
+#line 3324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 496:
-#line 3288 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 500:
+#line 3325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 497:
-#line 3294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 501:
+#line 3331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 498:
-#line 3295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 502:
+#line 3332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 499:
-#line 3296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 503:
+#line 3333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 500:
-#line 3297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 504:
+#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 501:
-#line 3298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 505:
+#line 3335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 502:
-#line 3299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 506:
+#line 3336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 503:
-#line 3300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 507:
+#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 504:
-#line 3304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 508:
+#line 3341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 505:
-#line 3305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 509:
+#line 3342 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 506:
-#line 3309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 510:
+#line 3346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 507:
-#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 511:
+#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 9434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 508:
-#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 512:
+#line 3358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 509:
-#line 3322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 513:
+#line 3359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 510:
-#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 514:
+#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 511:
-#line 3329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 515:
+#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 512:
-#line 3333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 516:
+#line 3370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 513:
-#line 3338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 517:
+#line 3375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 514:
-#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 518:
+#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 515:
-#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 519:
+#line 3387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 9502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 516:
-#line 3358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 520:
+#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -9511,11 +9590,11 @@ yyreduce:
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 517:
-#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 521:
+#line 3403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -9524,76 +9603,76 @@ yyreduce:
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 518:
-#line 3377 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 522:
+#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 519:
-#line 3378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 523:
+#line 3415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 520:
-#line 3382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 524:
+#line 3419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 521:
-#line 3385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 525:
+#line 3422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 522:
-#line 3391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 526:
+#line 3428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 9566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 523:
-#line 3398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 527:
+#line 3435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 524:
-#line 3402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 528:
+#line 3439 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 525:
-#line 3410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 529:
+#line 3447 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 526:
-#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 530:
+#line 3451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -9604,28 +9683,28 @@ yyreduce:
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 527:
-#line 3427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 531:
+#line 3464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 528:
-#line 3430 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 532:
+#line 3467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 529:
-#line 3436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 533:
+#line 3473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -9634,11 +9713,11 @@ yyreduce:
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 530:
-#line 3444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 534:
+#line 3481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -9648,27 +9727,27 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 531:
-#line 3456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 535:
+#line 3493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 532:
-#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 536:
+#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 533:
-#line 3465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 537:
+#line 3502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9681,11 +9760,11 @@ yyreduce:
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 9685 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 534:
-#line 3477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 538:
+#line 3514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9695,28 +9774,28 @@ yyreduce:
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 9699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 535:
-#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 539:
+#line 3526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 536:
-#line 3492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 540:
+#line 3529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 537:
-#line 3498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 541:
+#line 3535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -9725,11 +9804,11 @@ yyreduce:
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 538:
-#line 3506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 542:
+#line 3543 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -9737,21 +9816,21 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 539:
-#line 3513 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 543:
+#line 3550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 540:
-#line 3518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 544:
+#line 3555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -9763,22 +9842,22 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 541:
-#line 3529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 545:
+#line 3566 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 542:
-#line 3535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 546:
+#line 3572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -9791,81 +9870,81 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 543:
-#line 3550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 547:
+#line 3587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 544:
-#line 3553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 548:
+#line 3590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 545:
-#line 3559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 549:
+#line 3596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 546:
-#line 3562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 550:
+#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 9827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 547:
-#line 3568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 551:
+#line 3605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 548:
-#line 3572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 552:
+#line 3609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 549:
-#line 3579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 553:
+#line 3616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 9855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 550:
-#line 3584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 554:
+#line 3621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 9865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 551:
-#line 3589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 555:
+#line 3626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -9873,83 +9952,83 @@ yyreduce:
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 9877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 552:
-#line 3596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 556:
+#line 3633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 9885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 553:
-#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 557:
+#line 3636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 9894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 554:
-#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 558:
+#line 3645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 9903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 555:
-#line 3612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 559:
+#line 3649 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 9914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 556:
-#line 3621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 560:
+#line 3658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 557:
-#line 3624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 561:
+#line 3661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 558:
-#line 3627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 562:
+#line 3664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 9940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 559:
-#line 3635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 563:
+#line 3672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
     }
-#line 9949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 560:
-#line 3639 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 564:
+#line 3676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -9965,52 +10044,52 @@ yyreduce:
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 9969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 561:
-#line 3657 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 565:
+#line 3694 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 9978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 562:
-#line 3663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 566:
+#line 3700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 9986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 563:
-#line 3666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 567:
+#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 9994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 564:
-#line 3671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 568:
+#line 3708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 10002 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 565:
-#line 3674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 569:
+#line 3711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 10014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10238,5 +10317,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 3678 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3715 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
index d8111f8..d1f2e71 100644 (file)
@@ -125,323 +125,327 @@ extern int yydebug;
     BUFFER = 335,
     SHARED = 336,
     NONUNIFORM = 337,
-    COHERENT = 338,
-    VOLATILE = 339,
-    RESTRICT = 340,
-    READONLY = 341,
-    WRITEONLY = 342,
-    DEVICECOHERENT = 343,
-    QUEUEFAMILYCOHERENT = 344,
-    WORKGROUPCOHERENT = 345,
-    SUBGROUPCOHERENT = 346,
-    NONPRIVATE = 347,
-    DVEC2 = 348,
-    DVEC3 = 349,
-    DVEC4 = 350,
-    DMAT2 = 351,
-    DMAT3 = 352,
-    DMAT4 = 353,
-    F16VEC2 = 354,
-    F16VEC3 = 355,
-    F16VEC4 = 356,
-    F16MAT2 = 357,
-    F16MAT3 = 358,
-    F16MAT4 = 359,
-    F32VEC2 = 360,
-    F32VEC3 = 361,
-    F32VEC4 = 362,
-    F32MAT2 = 363,
-    F32MAT3 = 364,
-    F32MAT4 = 365,
-    F64VEC2 = 366,
-    F64VEC3 = 367,
-    F64VEC4 = 368,
-    F64MAT2 = 369,
-    F64MAT3 = 370,
-    F64MAT4 = 371,
-    NOPERSPECTIVE = 372,
-    FLAT = 373,
-    SMOOTH = 374,
-    LAYOUT = 375,
-    EXPLICITINTERPAMD = 376,
-    PERVERTEXNV = 377,
-    PERPRIMITIVENV = 378,
-    PERVIEWNV = 379,
-    PERTASKNV = 380,
-    MAT2X2 = 381,
-    MAT2X3 = 382,
-    MAT2X4 = 383,
-    MAT3X2 = 384,
-    MAT3X3 = 385,
-    MAT3X4 = 386,
-    MAT4X2 = 387,
-    MAT4X3 = 388,
-    MAT4X4 = 389,
-    DMAT2X2 = 390,
-    DMAT2X3 = 391,
-    DMAT2X4 = 392,
-    DMAT3X2 = 393,
-    DMAT3X3 = 394,
-    DMAT3X4 = 395,
-    DMAT4X2 = 396,
-    DMAT4X3 = 397,
-    DMAT4X4 = 398,
-    F16MAT2X2 = 399,
-    F16MAT2X3 = 400,
-    F16MAT2X4 = 401,
-    F16MAT3X2 = 402,
-    F16MAT3X3 = 403,
-    F16MAT3X4 = 404,
-    F16MAT4X2 = 405,
-    F16MAT4X3 = 406,
-    F16MAT4X4 = 407,
-    F32MAT2X2 = 408,
-    F32MAT2X3 = 409,
-    F32MAT2X4 = 410,
-    F32MAT3X2 = 411,
-    F32MAT3X3 = 412,
-    F32MAT3X4 = 413,
-    F32MAT4X2 = 414,
-    F32MAT4X3 = 415,
-    F32MAT4X4 = 416,
-    F64MAT2X2 = 417,
-    F64MAT2X3 = 418,
-    F64MAT2X4 = 419,
-    F64MAT3X2 = 420,
-    F64MAT3X3 = 421,
-    F64MAT3X4 = 422,
-    F64MAT4X2 = 423,
-    F64MAT4X3 = 424,
-    F64MAT4X4 = 425,
-    ATOMIC_UINT = 426,
-    SAMPLER1D = 427,
-    SAMPLER2D = 428,
-    SAMPLER3D = 429,
-    SAMPLERCUBE = 430,
-    SAMPLER1DSHADOW = 431,
-    SAMPLER2DSHADOW = 432,
-    SAMPLERCUBESHADOW = 433,
-    SAMPLER1DARRAY = 434,
-    SAMPLER2DARRAY = 435,
-    SAMPLER1DARRAYSHADOW = 436,
-    SAMPLER2DARRAYSHADOW = 437,
-    ISAMPLER1D = 438,
-    ISAMPLER2D = 439,
-    ISAMPLER3D = 440,
-    ISAMPLERCUBE = 441,
-    ISAMPLER1DARRAY = 442,
-    ISAMPLER2DARRAY = 443,
-    USAMPLER1D = 444,
-    USAMPLER2D = 445,
-    USAMPLER3D = 446,
-    USAMPLERCUBE = 447,
-    USAMPLER1DARRAY = 448,
-    USAMPLER2DARRAY = 449,
-    SAMPLER2DRECT = 450,
-    SAMPLER2DRECTSHADOW = 451,
-    ISAMPLER2DRECT = 452,
-    USAMPLER2DRECT = 453,
-    SAMPLERBUFFER = 454,
-    ISAMPLERBUFFER = 455,
-    USAMPLERBUFFER = 456,
-    SAMPLERCUBEARRAY = 457,
-    SAMPLERCUBEARRAYSHADOW = 458,
-    ISAMPLERCUBEARRAY = 459,
-    USAMPLERCUBEARRAY = 460,
-    SAMPLER2DMS = 461,
-    ISAMPLER2DMS = 462,
-    USAMPLER2DMS = 463,
-    SAMPLER2DMSARRAY = 464,
-    ISAMPLER2DMSARRAY = 465,
-    USAMPLER2DMSARRAY = 466,
-    SAMPLEREXTERNALOES = 467,
-    F16SAMPLER1D = 468,
-    F16SAMPLER2D = 469,
-    F16SAMPLER3D = 470,
-    F16SAMPLER2DRECT = 471,
-    F16SAMPLERCUBE = 472,
-    F16SAMPLER1DARRAY = 473,
-    F16SAMPLER2DARRAY = 474,
-    F16SAMPLERCUBEARRAY = 475,
-    F16SAMPLERBUFFER = 476,
-    F16SAMPLER2DMS = 477,
-    F16SAMPLER2DMSARRAY = 478,
-    F16SAMPLER1DSHADOW = 479,
-    F16SAMPLER2DSHADOW = 480,
-    F16SAMPLER1DARRAYSHADOW = 481,
-    F16SAMPLER2DARRAYSHADOW = 482,
-    F16SAMPLER2DRECTSHADOW = 483,
-    F16SAMPLERCUBESHADOW = 484,
-    F16SAMPLERCUBEARRAYSHADOW = 485,
-    SAMPLER = 486,
-    SAMPLERSHADOW = 487,
-    TEXTURE1D = 488,
-    TEXTURE2D = 489,
-    TEXTURE3D = 490,
-    TEXTURECUBE = 491,
-    TEXTURE1DARRAY = 492,
-    TEXTURE2DARRAY = 493,
-    ITEXTURE1D = 494,
-    ITEXTURE2D = 495,
-    ITEXTURE3D = 496,
-    ITEXTURECUBE = 497,
-    ITEXTURE1DARRAY = 498,
-    ITEXTURE2DARRAY = 499,
-    UTEXTURE1D = 500,
-    UTEXTURE2D = 501,
-    UTEXTURE3D = 502,
-    UTEXTURECUBE = 503,
-    UTEXTURE1DARRAY = 504,
-    UTEXTURE2DARRAY = 505,
-    TEXTURE2DRECT = 506,
-    ITEXTURE2DRECT = 507,
-    UTEXTURE2DRECT = 508,
-    TEXTUREBUFFER = 509,
-    ITEXTUREBUFFER = 510,
-    UTEXTUREBUFFER = 511,
-    TEXTURECUBEARRAY = 512,
-    ITEXTURECUBEARRAY = 513,
-    UTEXTURECUBEARRAY = 514,
-    TEXTURE2DMS = 515,
-    ITEXTURE2DMS = 516,
-    UTEXTURE2DMS = 517,
-    TEXTURE2DMSARRAY = 518,
-    ITEXTURE2DMSARRAY = 519,
-    UTEXTURE2DMSARRAY = 520,
-    F16TEXTURE1D = 521,
-    F16TEXTURE2D = 522,
-    F16TEXTURE3D = 523,
-    F16TEXTURE2DRECT = 524,
-    F16TEXTURECUBE = 525,
-    F16TEXTURE1DARRAY = 526,
-    F16TEXTURE2DARRAY = 527,
-    F16TEXTURECUBEARRAY = 528,
-    F16TEXTUREBUFFER = 529,
-    F16TEXTURE2DMS = 530,
-    F16TEXTURE2DMSARRAY = 531,
-    SUBPASSINPUT = 532,
-    SUBPASSINPUTMS = 533,
-    ISUBPASSINPUT = 534,
-    ISUBPASSINPUTMS = 535,
-    USUBPASSINPUT = 536,
-    USUBPASSINPUTMS = 537,
-    F16SUBPASSINPUT = 538,
-    F16SUBPASSINPUTMS = 539,
-    IMAGE1D = 540,
-    IIMAGE1D = 541,
-    UIMAGE1D = 542,
-    IMAGE2D = 543,
-    IIMAGE2D = 544,
-    UIMAGE2D = 545,
-    IMAGE3D = 546,
-    IIMAGE3D = 547,
-    UIMAGE3D = 548,
-    IMAGE2DRECT = 549,
-    IIMAGE2DRECT = 550,
-    UIMAGE2DRECT = 551,
-    IMAGECUBE = 552,
-    IIMAGECUBE = 553,
-    UIMAGECUBE = 554,
-    IMAGEBUFFER = 555,
-    IIMAGEBUFFER = 556,
-    UIMAGEBUFFER = 557,
-    IMAGE1DARRAY = 558,
-    IIMAGE1DARRAY = 559,
-    UIMAGE1DARRAY = 560,
-    IMAGE2DARRAY = 561,
-    IIMAGE2DARRAY = 562,
-    UIMAGE2DARRAY = 563,
-    IMAGECUBEARRAY = 564,
-    IIMAGECUBEARRAY = 565,
-    UIMAGECUBEARRAY = 566,
-    IMAGE2DMS = 567,
-    IIMAGE2DMS = 568,
-    UIMAGE2DMS = 569,
-    IMAGE2DMSARRAY = 570,
-    IIMAGE2DMSARRAY = 571,
-    UIMAGE2DMSARRAY = 572,
-    F16IMAGE1D = 573,
-    F16IMAGE2D = 574,
-    F16IMAGE3D = 575,
-    F16IMAGE2DRECT = 576,
-    F16IMAGECUBE = 577,
-    F16IMAGE1DARRAY = 578,
-    F16IMAGE2DARRAY = 579,
-    F16IMAGECUBEARRAY = 580,
-    F16IMAGEBUFFER = 581,
-    F16IMAGE2DMS = 582,
-    F16IMAGE2DMSARRAY = 583,
-    STRUCT = 584,
-    VOID = 585,
-    WHILE = 586,
-    IDENTIFIER = 587,
-    TYPE_NAME = 588,
-    FLOATCONSTANT = 589,
-    DOUBLECONSTANT = 590,
-    INT16CONSTANT = 591,
-    UINT16CONSTANT = 592,
-    INT32CONSTANT = 593,
-    UINT32CONSTANT = 594,
-    INTCONSTANT = 595,
-    UINTCONSTANT = 596,
-    INT64CONSTANT = 597,
-    UINT64CONSTANT = 598,
-    BOOLCONSTANT = 599,
-    FLOAT16CONSTANT = 600,
-    LEFT_OP = 601,
-    RIGHT_OP = 602,
-    INC_OP = 603,
-    DEC_OP = 604,
-    LE_OP = 605,
-    GE_OP = 606,
-    EQ_OP = 607,
-    NE_OP = 608,
-    AND_OP = 609,
-    OR_OP = 610,
-    XOR_OP = 611,
-    MUL_ASSIGN = 612,
-    DIV_ASSIGN = 613,
-    ADD_ASSIGN = 614,
-    MOD_ASSIGN = 615,
-    LEFT_ASSIGN = 616,
-    RIGHT_ASSIGN = 617,
-    AND_ASSIGN = 618,
-    XOR_ASSIGN = 619,
-    OR_ASSIGN = 620,
-    SUB_ASSIGN = 621,
-    LEFT_PAREN = 622,
-    RIGHT_PAREN = 623,
-    LEFT_BRACKET = 624,
-    RIGHT_BRACKET = 625,
-    LEFT_BRACE = 626,
-    RIGHT_BRACE = 627,
-    DOT = 628,
-    COMMA = 629,
-    COLON = 630,
-    EQUAL = 631,
-    SEMICOLON = 632,
-    BANG = 633,
-    DASH = 634,
-    TILDE = 635,
-    PLUS = 636,
-    STAR = 637,
-    SLASH = 638,
-    PERCENT = 639,
-    LEFT_ANGLE = 640,
-    RIGHT_ANGLE = 641,
-    VERTICAL_BAR = 642,
-    CARET = 643,
-    AMPERSAND = 644,
-    QUESTION = 645,
-    INVARIANT = 646,
-    PRECISE = 647,
-    HIGH_PRECISION = 648,
-    MEDIUM_PRECISION = 649,
-    LOW_PRECISION = 650,
-    PRECISION = 651,
-    PACKED = 652,
-    RESOURCE = 653,
-    SUPERP = 654
+    PAYLOADNV = 338,
+    PAYLOADINNV = 339,
+    HITATTRNV = 340,
+    COHERENT = 341,
+    VOLATILE = 342,
+    RESTRICT = 343,
+    READONLY = 344,
+    WRITEONLY = 345,
+    DEVICECOHERENT = 346,
+    QUEUEFAMILYCOHERENT = 347,
+    WORKGROUPCOHERENT = 348,
+    SUBGROUPCOHERENT = 349,
+    NONPRIVATE = 350,
+    DVEC2 = 351,
+    DVEC3 = 352,
+    DVEC4 = 353,
+    DMAT2 = 354,
+    DMAT3 = 355,
+    DMAT4 = 356,
+    F16VEC2 = 357,
+    F16VEC3 = 358,
+    F16VEC4 = 359,
+    F16MAT2 = 360,
+    F16MAT3 = 361,
+    F16MAT4 = 362,
+    F32VEC2 = 363,
+    F32VEC3 = 364,
+    F32VEC4 = 365,
+    F32MAT2 = 366,
+    F32MAT3 = 367,
+    F32MAT4 = 368,
+    F64VEC2 = 369,
+    F64VEC3 = 370,
+    F64VEC4 = 371,
+    F64MAT2 = 372,
+    F64MAT3 = 373,
+    F64MAT4 = 374,
+    NOPERSPECTIVE = 375,
+    FLAT = 376,
+    SMOOTH = 377,
+    LAYOUT = 378,
+    EXPLICITINTERPAMD = 379,
+    PERVERTEXNV = 380,
+    PERPRIMITIVENV = 381,
+    PERVIEWNV = 382,
+    PERTASKNV = 383,
+    MAT2X2 = 384,
+    MAT2X3 = 385,
+    MAT2X4 = 386,
+    MAT3X2 = 387,
+    MAT3X3 = 388,
+    MAT3X4 = 389,
+    MAT4X2 = 390,
+    MAT4X3 = 391,
+    MAT4X4 = 392,
+    DMAT2X2 = 393,
+    DMAT2X3 = 394,
+    DMAT2X4 = 395,
+    DMAT3X2 = 396,
+    DMAT3X3 = 397,
+    DMAT3X4 = 398,
+    DMAT4X2 = 399,
+    DMAT4X3 = 400,
+    DMAT4X4 = 401,
+    F16MAT2X2 = 402,
+    F16MAT2X3 = 403,
+    F16MAT2X4 = 404,
+    F16MAT3X2 = 405,
+    F16MAT3X3 = 406,
+    F16MAT3X4 = 407,
+    F16MAT4X2 = 408,
+    F16MAT4X3 = 409,
+    F16MAT4X4 = 410,
+    F32MAT2X2 = 411,
+    F32MAT2X3 = 412,
+    F32MAT2X4 = 413,
+    F32MAT3X2 = 414,
+    F32MAT3X3 = 415,
+    F32MAT3X4 = 416,
+    F32MAT4X2 = 417,
+    F32MAT4X3 = 418,
+    F32MAT4X4 = 419,
+    F64MAT2X2 = 420,
+    F64MAT2X3 = 421,
+    F64MAT2X4 = 422,
+    F64MAT3X2 = 423,
+    F64MAT3X3 = 424,
+    F64MAT3X4 = 425,
+    F64MAT4X2 = 426,
+    F64MAT4X3 = 427,
+    F64MAT4X4 = 428,
+    ATOMIC_UINT = 429,
+    ACCSTRUCTNV = 430,
+    SAMPLER1D = 431,
+    SAMPLER2D = 432,
+    SAMPLER3D = 433,
+    SAMPLERCUBE = 434,
+    SAMPLER1DSHADOW = 435,
+    SAMPLER2DSHADOW = 436,
+    SAMPLERCUBESHADOW = 437,
+    SAMPLER1DARRAY = 438,
+    SAMPLER2DARRAY = 439,
+    SAMPLER1DARRAYSHADOW = 440,
+    SAMPLER2DARRAYSHADOW = 441,
+    ISAMPLER1D = 442,
+    ISAMPLER2D = 443,
+    ISAMPLER3D = 444,
+    ISAMPLERCUBE = 445,
+    ISAMPLER1DARRAY = 446,
+    ISAMPLER2DARRAY = 447,
+    USAMPLER1D = 448,
+    USAMPLER2D = 449,
+    USAMPLER3D = 450,
+    USAMPLERCUBE = 451,
+    USAMPLER1DARRAY = 452,
+    USAMPLER2DARRAY = 453,
+    SAMPLER2DRECT = 454,
+    SAMPLER2DRECTSHADOW = 455,
+    ISAMPLER2DRECT = 456,
+    USAMPLER2DRECT = 457,
+    SAMPLERBUFFER = 458,
+    ISAMPLERBUFFER = 459,
+    USAMPLERBUFFER = 460,
+    SAMPLERCUBEARRAY = 461,
+    SAMPLERCUBEARRAYSHADOW = 462,
+    ISAMPLERCUBEARRAY = 463,
+    USAMPLERCUBEARRAY = 464,
+    SAMPLER2DMS = 465,
+    ISAMPLER2DMS = 466,
+    USAMPLER2DMS = 467,
+    SAMPLER2DMSARRAY = 468,
+    ISAMPLER2DMSARRAY = 469,
+    USAMPLER2DMSARRAY = 470,
+    SAMPLEREXTERNALOES = 471,
+    F16SAMPLER1D = 472,
+    F16SAMPLER2D = 473,
+    F16SAMPLER3D = 474,
+    F16SAMPLER2DRECT = 475,
+    F16SAMPLERCUBE = 476,
+    F16SAMPLER1DARRAY = 477,
+    F16SAMPLER2DARRAY = 478,
+    F16SAMPLERCUBEARRAY = 479,
+    F16SAMPLERBUFFER = 480,
+    F16SAMPLER2DMS = 481,
+    F16SAMPLER2DMSARRAY = 482,
+    F16SAMPLER1DSHADOW = 483,
+    F16SAMPLER2DSHADOW = 484,
+    F16SAMPLER1DARRAYSHADOW = 485,
+    F16SAMPLER2DARRAYSHADOW = 486,
+    F16SAMPLER2DRECTSHADOW = 487,
+    F16SAMPLERCUBESHADOW = 488,
+    F16SAMPLERCUBEARRAYSHADOW = 489,
+    SAMPLER = 490,
+    SAMPLERSHADOW = 491,
+    TEXTURE1D = 492,
+    TEXTURE2D = 493,
+    TEXTURE3D = 494,
+    TEXTURECUBE = 495,
+    TEXTURE1DARRAY = 496,
+    TEXTURE2DARRAY = 497,
+    ITEXTURE1D = 498,
+    ITEXTURE2D = 499,
+    ITEXTURE3D = 500,
+    ITEXTURECUBE = 501,
+    ITEXTURE1DARRAY = 502,
+    ITEXTURE2DARRAY = 503,
+    UTEXTURE1D = 504,
+    UTEXTURE2D = 505,
+    UTEXTURE3D = 506,
+    UTEXTURECUBE = 507,
+    UTEXTURE1DARRAY = 508,
+    UTEXTURE2DARRAY = 509,
+    TEXTURE2DRECT = 510,
+    ITEXTURE2DRECT = 511,
+    UTEXTURE2DRECT = 512,
+    TEXTUREBUFFER = 513,
+    ITEXTUREBUFFER = 514,
+    UTEXTUREBUFFER = 515,
+    TEXTURECUBEARRAY = 516,
+    ITEXTURECUBEARRAY = 517,
+    UTEXTURECUBEARRAY = 518,
+    TEXTURE2DMS = 519,
+    ITEXTURE2DMS = 520,
+    UTEXTURE2DMS = 521,
+    TEXTURE2DMSARRAY = 522,
+    ITEXTURE2DMSARRAY = 523,
+    UTEXTURE2DMSARRAY = 524,
+    F16TEXTURE1D = 525,
+    F16TEXTURE2D = 526,
+    F16TEXTURE3D = 527,
+    F16TEXTURE2DRECT = 528,
+    F16TEXTURECUBE = 529,
+    F16TEXTURE1DARRAY = 530,
+    F16TEXTURE2DARRAY = 531,
+    F16TEXTURECUBEARRAY = 532,
+    F16TEXTUREBUFFER = 533,
+    F16TEXTURE2DMS = 534,
+    F16TEXTURE2DMSARRAY = 535,
+    SUBPASSINPUT = 536,
+    SUBPASSINPUTMS = 537,
+    ISUBPASSINPUT = 538,
+    ISUBPASSINPUTMS = 539,
+    USUBPASSINPUT = 540,
+    USUBPASSINPUTMS = 541,
+    F16SUBPASSINPUT = 542,
+    F16SUBPASSINPUTMS = 543,
+    IMAGE1D = 544,
+    IIMAGE1D = 545,
+    UIMAGE1D = 546,
+    IMAGE2D = 547,
+    IIMAGE2D = 548,
+    UIMAGE2D = 549,
+    IMAGE3D = 550,
+    IIMAGE3D = 551,
+    UIMAGE3D = 552,
+    IMAGE2DRECT = 553,
+    IIMAGE2DRECT = 554,
+    UIMAGE2DRECT = 555,
+    IMAGECUBE = 556,
+    IIMAGECUBE = 557,
+    UIMAGECUBE = 558,
+    IMAGEBUFFER = 559,
+    IIMAGEBUFFER = 560,
+    UIMAGEBUFFER = 561,
+    IMAGE1DARRAY = 562,
+    IIMAGE1DARRAY = 563,
+    UIMAGE1DARRAY = 564,
+    IMAGE2DARRAY = 565,
+    IIMAGE2DARRAY = 566,
+    UIMAGE2DARRAY = 567,
+    IMAGECUBEARRAY = 568,
+    IIMAGECUBEARRAY = 569,
+    UIMAGECUBEARRAY = 570,
+    IMAGE2DMS = 571,
+    IIMAGE2DMS = 572,
+    UIMAGE2DMS = 573,
+    IMAGE2DMSARRAY = 574,
+    IIMAGE2DMSARRAY = 575,
+    UIMAGE2DMSARRAY = 576,
+    F16IMAGE1D = 577,
+    F16IMAGE2D = 578,
+    F16IMAGE3D = 579,
+    F16IMAGE2DRECT = 580,
+    F16IMAGECUBE = 581,
+    F16IMAGE1DARRAY = 582,
+    F16IMAGE2DARRAY = 583,
+    F16IMAGECUBEARRAY = 584,
+    F16IMAGEBUFFER = 585,
+    F16IMAGE2DMS = 586,
+    F16IMAGE2DMSARRAY = 587,
+    STRUCT = 588,
+    VOID = 589,
+    WHILE = 590,
+    IDENTIFIER = 591,
+    TYPE_NAME = 592,
+    FLOATCONSTANT = 593,
+    DOUBLECONSTANT = 594,
+    INT16CONSTANT = 595,
+    UINT16CONSTANT = 596,
+    INT32CONSTANT = 597,
+    UINT32CONSTANT = 598,
+    INTCONSTANT = 599,
+    UINTCONSTANT = 600,
+    INT64CONSTANT = 601,
+    UINT64CONSTANT = 602,
+    BOOLCONSTANT = 603,
+    FLOAT16CONSTANT = 604,
+    LEFT_OP = 605,
+    RIGHT_OP = 606,
+    INC_OP = 607,
+    DEC_OP = 608,
+    LE_OP = 609,
+    GE_OP = 610,
+    EQ_OP = 611,
+    NE_OP = 612,
+    AND_OP = 613,
+    OR_OP = 614,
+    XOR_OP = 615,
+    MUL_ASSIGN = 616,
+    DIV_ASSIGN = 617,
+    ADD_ASSIGN = 618,
+    MOD_ASSIGN = 619,
+    LEFT_ASSIGN = 620,
+    RIGHT_ASSIGN = 621,
+    AND_ASSIGN = 622,
+    XOR_ASSIGN = 623,
+    OR_ASSIGN = 624,
+    SUB_ASSIGN = 625,
+    LEFT_PAREN = 626,
+    RIGHT_PAREN = 627,
+    LEFT_BRACKET = 628,
+    RIGHT_BRACKET = 629,
+    LEFT_BRACE = 630,
+    RIGHT_BRACE = 631,
+    DOT = 632,
+    COMMA = 633,
+    COLON = 634,
+    EQUAL = 635,
+    SEMICOLON = 636,
+    BANG = 637,
+    DASH = 638,
+    TILDE = 639,
+    PLUS = 640,
+    STAR = 641,
+    SLASH = 642,
+    PERCENT = 643,
+    LEFT_ANGLE = 644,
+    RIGHT_ANGLE = 645,
+    VERTICAL_BAR = 646,
+    CARET = 647,
+    AMPERSAND = 648,
+    QUESTION = 649,
+    INVARIANT = 650,
+    PRECISE = 651,
+    HIGH_PRECISION = 652,
+    MEDIUM_PRECISION = 653,
+    LOW_PRECISION = 654,
+    PRECISION = 655,
+    PACKED = 656,
+    RESOURCE = 657,
+    SUPERP = 658
   };
 #endif
 
@@ -485,7 +489,7 @@ union YYSTYPE
         };
     } interm;
 
-#line 489 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 493 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index a37122f..5aa5776 100644 (file)
@@ -1049,6 +1049,10 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
 #ifdef NV_EXTENSIONS
+    case EOpTraceNV:                          out.debug << "traceNVX"; break;
+    case EOpReportIntersectionNV:             out.debug << "reportIntersectionNVX"; break;
+    case EOpIgnoreIntersectionNV:             out.debug << "ignoreIntersectionNVX"; break;
+    case EOpTerminateRayNV:                   out.debug << "terminateRayNVX"; break;
     case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
 #endif
 
index 5ddda58..7ce7cdd 100644 (file)
@@ -279,6 +279,9 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit)
     }
 
     // Getting this far means we have two existing trees to merge...
+#ifdef NV_EXTENSIONS
+    numShaderRecordNVBlocks += unit.numShaderRecordNVBlocks;
+#endif
 
 #ifdef NV_EXTENSIONS
     numTaskNVBlocks += unit.numTaskNVBlocks;
@@ -710,6 +713,15 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
         break;
 
 #ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+    case EShLangCallableNV:
+        if (numShaderRecordNVBlocks > 1)
+            error(infoSink, "Only one shaderRecordNVX buffer block is allowed per stage");
+        break;
     case EShLangMeshNV:
         if (outputPrimitive == ElgNone)
             error(infoSink, "At least one shader must specify an output layout primitive");
index 626a2ba..3fab9ce 100644 (file)
@@ -236,6 +236,7 @@ public:
 #ifdef NV_EXTENSIONS
         layoutOverrideCoverage(false),
         geoPassthroughEXT(false),
+        numShaderRecordNVBlocks(0),
         computeDerivativeMode(LayoutDerivativeNone),
         primitives(TQualifier::layoutNotSet),
         numTaskNVBlocks(0),
@@ -430,6 +431,7 @@ public:
     int getNumErrors() const { return numErrors; }
     void addPushConstantCount() { ++numPushConstants; }
 #ifdef NV_EXTENSIONS
+    void addShaderRecordNVCount() { ++numShaderRecordNVBlocks; }
     void addTaskNVCount() { ++numTaskNVBlocks; }
 #endif
 
@@ -753,6 +755,7 @@ protected:
 #ifdef NV_EXTENSIONS
     bool layoutOverrideCoverage;
     bool geoPassthroughEXT;
+    int numShaderRecordNVBlocks;
     ComputeDerivativeMode computeDerivativeMode;
     int primitives;
     int numTaskNVBlocks;
index 1f29ee2..5852024 100755 (executable)
@@ -95,6 +95,12 @@ typedef enum {
     EShLangFragment,
     EShLangCompute,
 #ifdef NV_EXTENSIONS
+    EShLangRayGenNV,
+    EShLangIntersectNV,
+    EShLangAnyHitNV,
+    EShLangClosestHitNV,
+    EShLangMissNV,
+    EShLangCallableNV,
     EShLangTaskNV,
     EShLangMeshNV,
 #endif
@@ -109,6 +115,12 @@ typedef enum {
     EShLangFragmentMask       = (1 << EShLangFragment),
     EShLangComputeMask        = (1 << EShLangCompute),
 #ifdef NV_EXTENSIONS
+    EShLangRayGenNVMask       = (1 << EShLangRayGenNV),
+    EShLangIntersectNVMask    = (1 << EShLangIntersectNV),
+    EShLangAnyHitNVMask       = (1 << EShLangAnyHitNV),
+    EShLangClosestHitNVMask   = (1 << EShLangClosestHitNV),
+    EShLangMissNVMask         = (1 << EShLangMissNV),
+    EShLangCallableNVMask     = (1 << EShLangCallableNV),
     EShLangTaskNVMask         = (1 << EShLangTaskNV),
     EShLangMeshNVMask         = (1 << EShLangMeshNV),
 #endif
index 151ad2b..cf56c4c 100644 (file)
@@ -501,6 +501,17 @@ INSTANTIATE_TEST_CASE_P(
     "spv.multiviewPerViewAttributes.vert",
     "spv.multiviewPerViewAttributes.tesc",
     "spv.atomicInt64.comp",
+    "spv.RayGenShader.rgen",
+    "spv.RayGenShader_Errors.rgen",
+    "spv.RayConstants.rgen",
+    "spv.IntersectShader.rint",
+    "spv.IntersectShader_Errors.rint",
+    "spv.AnyHitShader.rahit",
+    "spv.AnyHitShader_Errors.rahit",
+    "spv.ClosestHitShader.rchit",
+    "spv.ClosestHitShader_Errors.rchit",
+    "spv.MissShader.rmiss",
+    "spv.MissShader_Errors.rmiss",
     "spv.fragmentShaderBarycentric.frag",
     "spv.fragmentShaderBarycentric2.frag",
     "spv.computeShaderDerivatives.comp",
index c560e1f..d899c78 100644 (file)
@@ -61,6 +61,18 @@ EShLanguage GetShaderStage(const std::string& stage)
     } else if (stage == "comp") {
         return EShLangCompute;
 #ifdef NV_EXTENSIONS
+    } else if (stage == "rgen") {
+        return EShLangRayGenNV;
+    } else if (stage == "rint") {
+        return EShLangIntersectNV;
+    } else if (stage == "rahit") {
+        return EShLangAnyHitNV;
+    } else if (stage == "rchit") {
+        return EShLangClosestHitNV;
+    } else if (stage == "rmiss") {
+        return EShLangMissNV;
+    } else if (stage == "rcall") {
+        return EShLangCallableNV;
     } else if (stage == "task") {
         return EShLangTaskNV;
     } else if (stage == "mesh") {