/* A Bison parser, made by GNU Bison 3.0.2.  */

/* Bison implementation for Yacc-like parsers in C

   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

/* C LALR(1) parser skeleton written by Richard Stallman, by
   simplifying the original so-called "semantic" parser.  */

/* All symbols defined below should begin with yy or YY, to avoid
   infringing on user name space.  This should be done even for local
   variables, as they might otherwise be expanded by user macros.
   There are some unavoidable exceptions within include files to
   define necessary library symbols; they are noted "INFRINGES ON
   USER NAME SPACE" below.  */

/* Identify Bison output.  */
#define YYBISON 1

/* Bison version.  */
#define YYBISON_VERSION "3.0.2"

/* Skeleton name.  */
#define YYSKELETON_NAME "yacc.c"

/* Pure parsers.  */
#define YYPURE 1

/* Push parsers.  */
#define YYPUSH 0

/* Pull parsers.  */
#define YYPULL 1


/* Substitute the variable and function names.  */
#define yyparse         cssyyparse
#define yylex           cssyylex
#define yyerror         cssyyerror
#define yydebug         cssyydebug
#define yynerrs         cssyynerrs


/* Copy the first part of user declarations.  */
#line 1 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:339  */


/*
 *  Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org)
 *  Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
 *  Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
 *  Copyright (C) 2008 Eric Seidel <eric@webkit.org>
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#include "config.h"

#include "CSSParser.h"
#include "CSSParserMode.h"
#include "CSSPrimitiveValue.h"
#include "CSSPropertyNames.h"
#include "CSSSelector.h"
#include "CSSSelectorList.h"
#include "Document.h"
#include "HTMLNames.h"
#include "MediaList.h"
#include "MediaQueryExp.h"
#include "StyleRule.h"
#include "StyleSheetContents.h"
#include "CSSKeyframeRule.h"
#include "CSSKeyframesRule.h"
#include <wtf/FastMalloc.h>
#include <stdlib.h>
#include <string.h>

using namespace WebCore;
using namespace HTMLNames;

#if COMPILER(MSVC)
// See https://msdn.microsoft.com/en-us/library/1wea5zwe.aspx
#pragma warning(disable: 4701)
#endif

#define YYMALLOC fastMalloc
#define YYFREE fastFree

#define YYENABLE_NLS 0
#define YYLTYPE_IS_TRIVIAL 1
#define YYMAXDEPTH 10000
#define YYDEBUG 0

#if YYDEBUG > 0
#include <wtf/text/CString.h>
#define YYPRINT(File,Type,Value) if (isCSSTokenAString(Type)) YYFPRINTF(File, "%s", String((Value).string).utf8().data())
#endif


#line 139 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:339  */

# ifndef YY_NULLPTR
#  if defined __cplusplus && 201103L <= __cplusplus
#   define YY_NULLPTR nullptr
#  else
#   define YY_NULLPTR 0
#  endif
# endif

/* Enabling verbose error messages.  */
#ifdef YYERROR_VERBOSE
# undef YYERROR_VERBOSE
# define YYERROR_VERBOSE 1
#else
# define YYERROR_VERBOSE 0
#endif

/* In a future release of Bison, this section will be replaced
   by #include "CSSGrammar.hpp".  */
#ifndef YY_CSSYY_DERIVED_SOURCES_WEBCORE_CSSGRAMMAR_HPP_INCLUDED
# define YY_CSSYY_DERIVED_SOURCES_WEBCORE_CSSGRAMMAR_HPP_INCLUDED
/* Debug traces.  */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int cssyydebug;
#endif

/* Token type.  */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
  enum yytokentype
  {
    TOKEN_EOF = 0,
    LOWEST_PREC = 258,
    UNIMPORTANT_TOK = 259,
    WHITESPACE = 260,
    SGML_CD = 261,
    INCLUDES = 262,
    DASHMATCH = 263,
    BEGINSWITH = 264,
    ENDSWITH = 265,
    CONTAINS = 266,
    STRING = 267,
    IDENT = 268,
    NTH = 269,
    NTHCHILDSELECTORSEPARATOR = 270,
    HEX = 271,
    IDSEL = 272,
    IMPORT_SYM = 273,
    PAGE_SYM = 274,
    MEDIA_SYM = 275,
    FONT_FACE_SYM = 276,
    CHARSET_SYM = 277,
    KEYFRAME_RULE_SYM = 278,
    KEYFRAMES_SYM = 279,
    NAMESPACE_SYM = 280,
    WEBKIT_RULE_SYM = 281,
    WEBKIT_DECLS_SYM = 282,
    WEBKIT_VALUE_SYM = 283,
    WEBKIT_MEDIAQUERY_SYM = 284,
    WEBKIT_SIZESATTR_SYM = 285,
    WEBKIT_SELECTOR_SYM = 286,
    WEBKIT_REGION_RULE_SYM = 287,
    WEBKIT_VIEWPORT_RULE_SYM = 288,
    TOPLEFTCORNER_SYM = 289,
    TOPLEFT_SYM = 290,
    TOPCENTER_SYM = 291,
    TOPRIGHT_SYM = 292,
    TOPRIGHTCORNER_SYM = 293,
    BOTTOMLEFTCORNER_SYM = 294,
    BOTTOMLEFT_SYM = 295,
    BOTTOMCENTER_SYM = 296,
    BOTTOMRIGHT_SYM = 297,
    BOTTOMRIGHTCORNER_SYM = 298,
    LEFTTOP_SYM = 299,
    LEFTMIDDLE_SYM = 300,
    LEFTBOTTOM_SYM = 301,
    RIGHTTOP_SYM = 302,
    RIGHTMIDDLE_SYM = 303,
    RIGHTBOTTOM_SYM = 304,
    ATKEYWORD = 305,
    IMPORTANT_SYM = 306,
    MEDIA_ONLY = 307,
    MEDIA_NOT = 308,
    MEDIA_AND = 309,
    REMS = 310,
    CHS = 311,
    QEMS = 312,
    EMS = 313,
    EXS = 314,
    PXS = 315,
    CMS = 316,
    MMS = 317,
    INS = 318,
    PTS = 319,
    PCS = 320,
    DEGS = 321,
    RADS = 322,
    GRADS = 323,
    TURNS = 324,
    MSECS = 325,
    SECS = 326,
    HERTZ = 327,
    KHERTZ = 328,
    DIMEN = 329,
    INVALIDDIMEN = 330,
    PERCENTAGE = 331,
    FLOATTOKEN = 332,
    INTEGER = 333,
    VW = 334,
    VH = 335,
    VMIN = 336,
    VMAX = 337,
    DPPX = 338,
    DPI = 339,
    DPCM = 340,
    FR = 341,
    URI = 342,
    FUNCTION = 343,
    ANYFUNCTION = 344,
    NOTFUNCTION = 345,
    CALCFUNCTION = 346,
    MATCHESFUNCTION = 347,
    MAXFUNCTION = 348,
    MINFUNCTION = 349,
    NTHCHILDFUNCTIONS = 350,
    LANGFUNCTION = 351,
    VARFUNCTION = 352,
    CUSTOM_PROPERTY = 353,
    UNICODERANGE = 354,
    SUPPORTS_AND = 355,
    SUPPORTS_NOT = 356,
    SUPPORTS_OR = 357,
    SUPPORTS_SYM = 358,
    WEBKIT_SUPPORTS_CONDITION_SYM = 359,
    CUEFUNCTION = 360,
    SLOTTEDFUNCTION = 361,
    HOSTFUNCTION = 362
  };
#endif

/* Value type.  */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
{
#line 72 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:355  */

    double number;
    CSSParserString string;
    CSSSelector::MarginBoxType marginBox;
    CSSParserValue value;
    CSSParserSelectorCombinator relation;
    StyleRuleBase* rule;
    Vector<RefPtr<StyleRuleBase>>* ruleList;
    MediaQuerySet* mediaList;
    MediaQuery* mediaQuery;
    MediaQuery::Restrictor mediaQueryRestrictor;
    MediaQueryExpression* mediaQueryExpression;
    Vector<MediaQueryExpression>* mediaQueryExpressionList;
    StyleKeyframe* keyframe;
    Vector<RefPtr<StyleKeyframe>>* keyframeRuleList;
    CSSPropertyID id;
    CSSParserSelector* selector;
    Vector<std::unique_ptr<CSSParserSelector>>* selectorList;
    bool boolean;
    CSSSelector::Match match;
    int integer;
    char character;
    CSSParserValueList* valueList;
    Vector<CSSParserString>* stringList;
    CSSParser::Location location;

#line 315 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:355  */
};
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif



int cssyyparse (CSSParser* parser);

#endif /* !YY_CSSYY_DERIVED_SOURCES_WEBCORE_CSSGRAMMAR_HPP_INCLUDED  */

/* Copy the second part of user declarations.  */
#line 99 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:358  */


static inline int cssyyerror(void*, const char*)
{
    return 1;
}
static inline CSSParserValue makeIdentValue(CSSParserString string)
{
    CSSParserValue v;
    v.id = cssValueKeywordID(string);
    v.unit = CSSPrimitiveValue::CSS_IDENT;
    v.string = string;
    return v;
}

static bool selectorListDoesNotMatchAnyPseudoElement(const Vector<std::unique_ptr<CSSParserSelector>>* selectorVector)
{
    if (!selectorVector)
        return true;

    for (unsigned i = 0; i < selectorVector->size(); ++i) {
        for (const CSSParserSelector* selector = selectorVector->at(i).get(); selector; selector = selector->tagHistory()) {
            if (selector->matchesPseudoElement())
                return false;
        }
    }
    return true;
}


#line 359 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:358  */

#ifdef short
# undef short
#endif

#ifdef YYTYPE_UINT8
typedef YYTYPE_UINT8 yytype_uint8;
#else
typedef unsigned char yytype_uint8;
#endif

#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
#else
typedef signed char yytype_int8;
#endif

#ifdef YYTYPE_UINT16
typedef YYTYPE_UINT16 yytype_uint16;
#else
typedef unsigned short int yytype_uint16;
#endif

#ifdef YYTYPE_INT16
typedef YYTYPE_INT16 yytype_int16;
#else
typedef short int yytype_int16;
#endif

#ifndef YYSIZE_T
# ifdef __SIZE_TYPE__
#  define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
#  define YYSIZE_T size_t
# elif ! defined YYSIZE_T
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
#  define YYSIZE_T size_t
# else
#  define YYSIZE_T unsigned int
# endif
#endif

#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)

#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
#  if ENABLE_NLS
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
#  endif
# endif
# ifndef YY_
#  define YY_(Msgid) Msgid
# endif
#endif

#ifndef YY_ATTRIBUTE
# if (defined __GNUC__                                               \
      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
# else
#  define YY_ATTRIBUTE(Spec) /* empty */
# endif
#endif

#ifndef YY_ATTRIBUTE_PURE
# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
#endif

#ifndef YY_ATTRIBUTE_UNUSED
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
#endif

#if !defined _Noreturn \
     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
# if defined _MSC_VER && 1200 <= _MSC_VER
#  define _Noreturn __declspec (noreturn)
# else
#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
# endif
#endif

/* Suppress unused-variable warnings by "using" E.  */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
#else
# define YYUSE(E) /* empty */
#endif

#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
    _Pragma ("GCC diagnostic push") \
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
    _Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
#endif
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif


#if ! defined yyoverflow || YYERROR_VERBOSE

/* The parser invokes alloca or malloc; define the necessary symbols.  */

# ifdef YYSTACK_USE_ALLOCA
#  if YYSTACK_USE_ALLOCA
#   ifdef __GNUC__
#    define YYSTACK_ALLOC __builtin_alloca
#   elif defined __BUILTIN_VA_ARG_INCR
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
#   elif defined _AIX
#    define YYSTACK_ALLOC __alloca
#   elif defined _MSC_VER
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
#    define alloca _alloca
#   else
#    define YYSTACK_ALLOC alloca
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
#     ifndef EXIT_SUCCESS
#      define EXIT_SUCCESS 0
#     endif
#    endif
#   endif
#  endif
# endif

# ifdef YYSTACK_ALLOC
   /* Pacify GCC's 'empty if-body' warning.  */
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
#  ifndef YYSTACK_ALLOC_MAXIMUM
    /* The OS might guarantee only one guard page at the bottom of the stack,
       and a page size can be as small as 4096 bytes.  So we cannot safely
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
       to allow for a few compiler-allocated temporary stack slots.  */
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
#  endif
# else
#  define YYSTACK_ALLOC YYMALLOC
#  define YYSTACK_FREE YYFREE
#  ifndef YYSTACK_ALLOC_MAXIMUM
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
#  endif
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
       && ! ((defined YYMALLOC || defined malloc) \
             && (defined YYFREE || defined free)))
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
#   ifndef EXIT_SUCCESS
#    define EXIT_SUCCESS 0
#   endif
#  endif
#  ifndef YYMALLOC
#   define YYMALLOC malloc
#   if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
#   endif
#  endif
#  ifndef YYFREE
#   define YYFREE free
#   if ! defined free && ! defined EXIT_SUCCESS
void free (void *); /* INFRINGES ON USER NAME SPACE */
#   endif
#  endif
# endif
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */


#if (! defined yyoverflow \
     && (! defined __cplusplus \
         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))

/* A type that is properly aligned for any stack member.  */
union yyalloc
{
  yytype_int16 yyss_alloc;
  YYSTYPE yyvs_alloc;
};

/* The size of the maximum gap between one aligned stack and the next.  */
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)

/* The size of an array large to enough to hold all stacks, each with
   N elements.  */
# define YYSTACK_BYTES(N) \
     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
      + YYSTACK_GAP_MAXIMUM)

# define YYCOPY_NEEDED 1

/* Relocate STACK from its old location to the new one.  The
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
   elements in the stack, and YYPTR gives the new location of the
   stack.  Advance YYPTR to a properly aligned location for the next
   stack.  */
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    do                                                                  \
      {                                                                 \
        YYSIZE_T yynewbytes;                                            \
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
        Stack = &yyptr->Stack_alloc;                                    \
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        yyptr += yynewbytes / sizeof (*yyptr);                          \
      }                                                                 \
    while (0)

#endif

#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
/* Copy COUNT objects from SRC to DST.  The source and destination do
   not overlap.  */
# ifndef YYCOPY
#  if defined __GNUC__ && 1 < __GNUC__
#   define YYCOPY(Dst, Src, Count) \
      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
#  else
#   define YYCOPY(Dst, Src, Count)              \
      do                                        \
        {                                       \
          YYSIZE_T yyi;                         \
          for (yyi = 0; yyi < (Count); yyi++)   \
            (Dst)[yyi] = (Src)[yyi];            \
        }                                       \
      while (0)
#  endif
# endif
#endif /* !YYCOPY_NEEDED */

/* YYFINAL -- State number of the termination state.  */
#define YYFINAL  24
/* YYLAST -- Last index in YYTABLE.  */
#define YYLAST   2120

/* YYNTOKENS -- Number of terminals.  */
#define YYNTOKENS  129
/* YYNNTS -- Number of nonterminals.  */
#define YYNNTS  142
/* YYNRULES -- Number of rules.  */
#define YYNRULES  404
/* YYNSTATES -- Number of states.  */
#define YYNSTATES  757

/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
   by yylex, with out-of-bounds checking.  */
#define YYUNDEFTOK  2
#define YYMAXUTOK   362

#define YYTRANSLATE(YYX)                                                \
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)

/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
   as returned by yylex, without out-of-bounds checking.  */
static const yytype_uint8 yytranslate[] =
{
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,   128,     2,   126,     2,   127,     2,     2,
     118,   115,    21,   120,   119,   123,    19,   125,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,    18,   117,
       2,   124,   122,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,    20,     2,   116,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,   113,    22,   114,   121,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
      15,    16,    17,    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
};

#if YYDEBUG
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
static const yytype_uint16 yyrline[] =
{
       0,   360,   360,   361,   362,   363,   364,   365,   366,   367,
     370,   372,   374,   377,   388,   391,   400,   403,   403,   405,
     405,   407,   407,   407,   409,   409,   411,   411,   413,   413,
     415,   415,   418,   424,   425,   429,   429,   431,   433,   442,
     443,   444,   445,   446,   447,   448,   449,   450,   457,   461,
     462,   463,   467,   468,   479,   480,   491,   492,   493,   494,
     495,   496,   502,   502,   502,   502,   502,   502,   505,   512,
     518,   521,   524,   530,   534,   541,   542,   543,   544,   547,
     547,   549,   549,   551,   551,   553,   561,   573,   578,   586,
     589,   595,   598,   601,   607,   612,   619,   619,   622,   628,
     636,   644,   650,   656,   662,   665,   668,   675,   678,   686,
     689,   695,   702,   708,   708,   708,   708,   710,   713,   714,
     718,   719,   723,   724,   725,   729,   745,   763,   769,   774,
     774,   777,   778,   785,   788,   792,   800,   806,   819,   825,
     831,   843,   847,   854,   858,   865,   870,   876,   876,   879,
     879,   887,   890,   893,   896,   899,   902,   905,   908,   911,
     914,   917,   920,   923,   926,   929,   932,   938,   944,   947,
     951,   957,   963,   975,   976,   977,   983,   983,   985,   985,
     987,   990,   996,   998,  1001,  1007,  1010,  1018,  1028,  1034,
    1035,  1038,  1043,  1043,  1046,  1050,  1055,  1062,  1065,  1066,
    1067,  1076,  1085,  1092,  1096,  1097,  1101,  1104,  1111,  1116,
    1119,  1124,  1132,  1139,  1148,  1155,  1158,  1165,  1166,  1173,
    1180,  1187,  1198,  1199,  1200,  1204,  1214,  1219,  1226,  1231,
    1241,  1247,  1252,  1255,  1258,  1261,  1264,  1267,  1272,  1272,
    1275,  1280,  1283,  1286,  1295,  1298,  1303,  1307,  1310,  1318,
    1329,  1340,  1351,  1366,  1381,  1398,  1408,  1418,  1436,  1453,
    1454,  1455,  1456,  1457,  1458,  1462,  1466,  1470,  1476,  1483,
    1489,  1506,  1522,  1523,  1529,  1533,  1540,  1542,  1544,  1544,
    1549,  1553,  1560,  1563,  1566,  1576,  1588,  1591,  1591,  1593,
    1593,  1596,  1600,  1617,  1619,  1619,  1619,  1622,  1623,  1624,
    1625,  1627,  1628,  1629,  1630,  1631,  1632,  1634,  1635,  1636,
    1637,  1638,  1642,  1647,  1648,  1649,  1650,  1651,  1652,  1653,
    1654,  1655,  1656,  1657,  1658,  1659,  1660,  1661,  1662,  1663,
    1664,  1665,  1666,  1667,  1674,  1675,  1676,  1677,  1678,  1679,
    1680,  1681,  1682,  1686,  1694,  1702,  1713,  1721,  1729,  1738,
    1743,  1748,  1753,  1759,  1767,  1767,  1770,  1771,  1772,  1781,
    1784,  1787,  1790,  1795,  1795,  1798,  1813,  1813,  1816,  1820,
    1836,  1850,  1854,  1855,  1872,  1880,  1888,  1888,  1891,  1899,
    1908,  1908,  1910,  1910,  1912,  1914,  1916,  1918,  1921,  1921,
    1921,  1921,  1921,  1921,  1921,  1921,  1921,  1921,  1926,  1930,
    1932,  1934,  1935,  1936,  1937
};
#endif

#if YYDEBUG || YYERROR_VERBOSE || 0
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
static const char *const yytname[] =
{
  "TOKEN_EOF", "error", "$undefined", "LOWEST_PREC", "UNIMPORTANT_TOK",
  "WHITESPACE", "SGML_CD", "INCLUDES", "DASHMATCH", "BEGINSWITH",
  "ENDSWITH", "CONTAINS", "STRING", "IDENT", "NTH",
  "NTHCHILDSELECTORSEPARATOR", "HEX", "IDSEL", "':'", "'.'", "'['", "'*'",
  "'|'", "IMPORT_SYM", "PAGE_SYM", "MEDIA_SYM", "FONT_FACE_SYM",
  "CHARSET_SYM", "KEYFRAME_RULE_SYM", "KEYFRAMES_SYM", "NAMESPACE_SYM",
  "WEBKIT_RULE_SYM", "WEBKIT_DECLS_SYM", "WEBKIT_VALUE_SYM",
  "WEBKIT_MEDIAQUERY_SYM", "WEBKIT_SIZESATTR_SYM", "WEBKIT_SELECTOR_SYM",
  "WEBKIT_REGION_RULE_SYM", "WEBKIT_VIEWPORT_RULE_SYM",
  "TOPLEFTCORNER_SYM", "TOPLEFT_SYM", "TOPCENTER_SYM", "TOPRIGHT_SYM",
  "TOPRIGHTCORNER_SYM", "BOTTOMLEFTCORNER_SYM", "BOTTOMLEFT_SYM",
  "BOTTOMCENTER_SYM", "BOTTOMRIGHT_SYM", "BOTTOMRIGHTCORNER_SYM",
  "LEFTTOP_SYM", "LEFTMIDDLE_SYM", "LEFTBOTTOM_SYM", "RIGHTTOP_SYM",
  "RIGHTMIDDLE_SYM", "RIGHTBOTTOM_SYM", "ATKEYWORD", "IMPORTANT_SYM",
  "MEDIA_ONLY", "MEDIA_NOT", "MEDIA_AND", "REMS", "CHS", "QEMS", "EMS",
  "EXS", "PXS", "CMS", "MMS", "INS", "PTS", "PCS", "DEGS", "RADS", "GRADS",
  "TURNS", "MSECS", "SECS", "HERTZ", "KHERTZ", "DIMEN", "INVALIDDIMEN",
  "PERCENTAGE", "FLOATTOKEN", "INTEGER", "VW", "VH", "VMIN", "VMAX",
  "DPPX", "DPI", "DPCM", "FR", "URI", "FUNCTION", "ANYFUNCTION",
  "NOTFUNCTION", "CALCFUNCTION", "MATCHESFUNCTION", "MAXFUNCTION",
  "MINFUNCTION", "NTHCHILDFUNCTIONS", "LANGFUNCTION", "VARFUNCTION",
  "CUSTOM_PROPERTY", "UNICODERANGE", "SUPPORTS_AND", "SUPPORTS_NOT",
  "SUPPORTS_OR", "SUPPORTS_SYM", "WEBKIT_SUPPORTS_CONDITION_SYM",
  "CUEFUNCTION", "SLOTTEDFUNCTION", "HOSTFUNCTION", "'{'", "'}'", "')'",
  "']'", "';'", "'('", "','", "'+'", "'~'", "'>'", "'-'", "'='", "'/'",
  "'#'", "'%'", "'!'", "$accept", "stylesheet", "webkit_rule",
  "webkit_keyframe_rule", "webkit_decls", "webkit_value",
  "webkit_mediaquery", "webkit_selector", "webkit_supports_condition",
  "space", "maybe_space", "maybe_sgml", "maybe_charset", "closing_brace",
  "closing_parenthesis", "closing_bracket", "charset", "ignored_charset",
  "rule_list", "valid_rule", "rule", "block_rule_list",
  "block_valid_rule_list", "block_valid_rule", "block_rule",
  "at_import_header_end_maybe_space", "before_import_rule", "import",
  "namespace", "maybe_ns_prefix", "string_or_uri", "maybe_media_value",
  "base_media_query_expression", "media_query_expression",
  "media_query_expression_list", "maybe_and_media_query_expression_list",
  "maybe_media_restrictor", "media_query", "maybe_media_list",
  "media_list", "at_rule_body_start", "before_media_rule",
  "at_rule_header_end_maybe_space", "media", "supports", "supports_error",
  "before_supports_rule", "at_supports_rule_header_end",
  "supports_condition", "supports_negation", "supports_conjunction",
  "supports_disjunction", "supports_condition_in_parens",
  "supports_declaration_condition", "before_keyframes_rule", "keyframes",
  "keyframe_name", "keyframes_rule", "keyframe_rule", "key_list", "key",
  "before_page_rule", "page", "page_selector", "declarations_and_margins",
  "margin_box", "$@1", "margin_sym", "before_font_face_rule", "font_face",
  "before_region_rule", "region", "combinator", "maybe_unary_operator",
  "unary_operator", "maybe_space_before_declaration",
  "before_selector_list", "at_rule_header_end", "at_selector_end",
  "ruleset", "before_selector_group_item", "selector_list",
  "before_nested_selector_list", "after_nested_selector_list",
  "nested_selector_list", "lang_range", "comma_separated_lang_ranges",
  "complex_selector_with_trailing_whitespace", "complex_selector",
  "namespace_selector", "compound_selector", "simple_selector_list",
  "element_name", "specifier_list", "specifier", "class", "attrib",
  "attrib_flags", "match", "ident_or_string", "pseudo_page",
  "nth_selector_ending", "pseudo", "declaration_list", "decl_list",
  "decl_list_recovery", "declaration", "declaration_recovery", "property",
  "priority", "ident_list", "track_names_list", "whitespace_or_expr",
  "maybe_expr", "expr", "valid_expr", "expr_recovery", "operator", "term",
  "unary_term", "function", "variable_function", "invalid_var_fallback",
  "calc_func_term", "calc_func_operator", "calc_maybe_space",
  "calc_func_paren_expr", "calc_func_expr", "valid_calc_func_expr",
  "calc_func_expr_list", "calc_function", "min_or_max",
  "min_or_max_function", "save_block", "invalid_at", "invalid_rule",
  "invalid_block", "invalid_square_brackets_block",
  "invalid_parentheses_block", "opening_parenthesis", "error_location",
  "error_recovery", YY_NULLPTR
};
#endif

# ifdef YYPRINT
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
   (internal) symbol number NUM (which must be that of a token).  */
static const yytype_uint16 yytoknum[] =
{
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
     265,   266,   267,   268,   269,   270,   271,   272,    58,    46,
      91,    42,   124,   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,
     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
     360,   361,   362,   123,   125,    41,    93,    59,    40,    44,
      43,   126,    62,    45,    61,    47,    35,    37,    33
};
# endif

#define YYPACT_NINF -553

#define yypact_value_is_default(Yystate) \
  (!!((Yystate) == (-553)))

#define YYTABLE_NINF -367

#define yytable_value_is_error(Yytable_value) \
  (!!((Yytable_value) == (-367)))

  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
static const yytype_int16 yypact[] =
{
     883,   -15,    -7,     1,    35,   134,   184,   297,   307,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,    62,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,   313,   313,   313,   313,   313,
     313,   313,  -553,   730,  -553,  -553,   274,  1315,   313,   550,
    1223,   632,  1155,   261,   363,   469,   335,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,   295,  -553,    67,  -553,   385,  -553,
    -553,   413,  -553,  -553,   269,   418,  -553,   368,  -553,   464,
    -553,   467,  -553,  1313,  -553,  -553,  -553,  -553,  -553,   411,
    1702,   409,   436,   478,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  1997,  -553,
     447,   808,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,    87,  -553,   448,   546,  -553,  -553,  1436,   580,
    -553,   585,  -553,    93,  1313,   445,   926,  -553,   826,   435,
    -553,  -553,  -553,  -553,  -553,   428,   500,  -553,   517,   533,
     602,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  1905,    57,
     324,  -553,   403,    70,   369,   701,  -553,   252,  -553,   805,
     314,  -553,   101,  -553,   313,   655,   645,  -553,   524,   534,
    -553,  -553,  -553,  -553,  -553,   313,   313,   313,   523,   313,
     313,   936,   513,  1032,   313,   313,   313,  -553,  -553,   313,
    -553,  -553,  -553,  -553,  -553,  1584,   313,   313,   313,   313,
     513,   313,    88,   140,  -553,  -553,  -553,   506,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,   516,  -553,  -553,  -553,
     542,  -553,  -553,  -553,  -553,  -553,  -553,  1313,  -553,  -553,
     826,   608,   952,  -553,  -553,   162,   551,   502,  -553,  -553,
    -553,  -553,  -553,  1068,   367,   572,  -553,   692,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,    69,
    -553,   545,   313,    69,   683,   588,   637,   261,  -553,   720,
     718,    86,   750,   313,   604,  1155,   542,  1390,  -553,   721,
    -553,  -553,   313,   313,  -553,  1128,  -553,  -553,  -553,  -553,
     333,   116,  -553,  -553,  -553,   144,   144,  -553,  2029,   144,
    -553,  -553,  -553,  -553,   729,    96,  -553,   144,   144,   313,
     313,  -553,   313,   313,  -553,   144,   729,   112,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,   407,  1155,   313,   313,   498,
     739,  1155,   546,   585,   724,  -553,   313,   313,   313,  -553,
     962,  -553,  -553,  -553,   634,   761,   162,   162,   162,   162,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,   383,   792,   335,   642,   274,   313,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,   148,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,   776,   744,  -553,  -553,
    -553,  -553,  -553,   181,   689,  1584,  1223,   749,   313,   313,
    1425,  -553,   749,   313,  -553,  -553,  -553,  -553,  -553,  1298,
    -553,  -553,   110,   125,  1933,   198,  -553,   158,  -553,  -553,
    1524,  -553,   340,  -553,  -553,   632,    98,   100,   313,  1155,
    1155,  -553,  -553,   732,  -553,   290,  1313,  -553,  -553,    55,
      55,   734,  -553,  -553,  -553,   303,  -553,   373,  -553,   313,
     647,  -553,  -553,  -553,  -553,  -553,  -553,  1460,  1493,  -553,
    -553,  -553,  -553,   132,  -553,   351,   681,  -553,  -553,   694,
    -553,   716,   717,  -553,  -553,   723,  -553,   752,  -553,  -553,
    -553,  -553,  -553,  -553,   629,   313,   729,  -553,   832,   832,
    -553,  -553,  -553,  -553,  -553,   144,  -553,  1298,  -553,  -553,
    -553,  -553,  -553,   290,  -553,   232,   301,  -553,  -553,   220,
     311,   352,   386,  -553,  -553,   284,  -553,  -553,    55,  -553,
     347,   426,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
     393,  1313,   721,   313,  1223,  -553,  -553,   381,  -553,  -553,
    -553,    61,    49,   632,  -553,   313,  -553,  -553,  -553,   644,
    -553,  -553,   313,  -553,   198,   861,   861,   313,   313,   699,
    -553,   729,   164,   632,   698,   354,   437,  -553,  -553,   455,
    -553,  -553,  -553,  -553,  -553,   832,  -553,  -553,  -553,  -553,
    -553,   799,  -553,  -553,   719,   749,   749,  -553,  -553,  -553,
    -553,  -553,  -553,  1835,  -553,  -553,  -553,   132,  -553,   644,
    -553,  -553,  -553,  -553,   144,   144,  -553,   340,    87,  -553,
     773,  -553,  -553,  -553,  1155,   861,   739,  -553,  -553,  -553,
     799,   787,   788,   313,   250,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
     313,   313,  1778,  -553,   313,   132,  -553,  -553,   296,  1223,
    -553,  -553,  -553,  -553,   419,  -553,  -553,  -553,  1835,  -553,
     335,  1835,   325,  1222,  -553,  1878,  -553,  -553,  -553,   477,
    -553,   797,   419,   313,   313,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,   132,  -553,
    -553,   313,  -553,   313,  -553,   810,   313,  1684,  -553,   335,
    -553,  -553,   380,  -553,   642,   132,  -553
};

  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
     Performed when YYTABLE does not specify something else to do.  Zero
     means the default is an error.  */
static const yytype_uint16 yydefact[] =
{
      19,     0,     0,     0,     0,     0,     0,     0,     0,    19,
      19,    19,    19,    19,    19,    19,    24,    19,    19,    19,
      19,    19,    19,    19,     1,     3,     8,     4,     5,     6,
       7,     9,    20,     0,    21,    25,     0,   181,   180,     0,
       0,    91,     0,     0,     0,     0,    37,   138,   137,   179,
     178,    19,    19,   134,     0,   176,     0,    19,     0,    45,
      44,     0,    40,    47,     0,     0,    43,     0,    41,     0,
      42,     0,    46,     0,    39,   399,    19,    19,    19,     0,
       0,   263,   260,     0,    19,    19,    19,    19,   333,   334,
     331,   330,   332,   316,   317,   318,   319,   320,   321,   322,
     323,   324,   325,   326,   327,   328,   329,    19,   315,   314,
     313,   335,   336,   337,   338,   339,   340,   341,   342,    19,
      19,    19,   377,   376,    19,    19,    19,    19,     0,    19,
       0,     0,   291,    19,    19,    19,    19,    19,    19,    92,
      93,    87,    94,    19,     0,   215,   221,   220,     0,     0,
      19,   216,   203,     0,   199,     0,     0,   198,   206,     0,
     217,   222,   223,   224,    19,     0,     0,   114,   115,   116,
     113,   123,   400,    34,    33,    19,    23,    22,     0,     0,
       0,   136,     0,    79,     0,     0,    19,     0,    19,     0,
       0,    19,     0,   400,   277,     0,     0,    12,   264,   261,
      19,    19,   399,    19,   272,   299,   300,   305,     0,   301,
     303,     0,     0,     0,   304,   306,   311,    19,    19,   312,
      13,   399,    19,    19,   290,     0,   297,   307,   309,   308,
       0,   310,     0,     0,    14,   205,   244,     0,    19,    19,
      19,    19,    19,    19,    19,   225,     0,   204,   188,    15,
       0,   200,   202,   197,    19,    19,    19,     0,   215,   216,
     209,     0,     0,   219,   218,     0,     0,     0,    16,    19,
      19,    19,    19,     0,     0,     0,    19,     0,    49,    48,
      21,    51,    50,    11,    19,    19,    78,    77,    19,     0,
      10,     0,    68,     0,    91,     0,     0,     0,   108,     0,
       0,   146,     0,   103,     0,     0,   182,     0,   274,    19,
      19,    19,   266,   265,   400,     0,    31,    19,    30,   282,
       0,     0,    29,    28,   344,     0,     0,    19,     0,     0,
     356,   358,   368,   371,   363,     0,    19,     0,     0,   302,
     298,   400,   295,   294,   292,     0,   363,     0,    19,    19,
      19,    19,   245,    19,    19,   177,     0,   189,   189,   177,
       0,     0,    19,     0,     0,    19,   173,   174,   175,   201,
       0,   117,   124,    19,     0,     0,     0,     0,     0,     0,
      27,   401,   400,   389,   395,   396,   391,   392,   393,   394,
     397,   390,   398,    26,   388,   385,   402,   403,   404,   400,
      32,   384,     0,     0,    38,     0,     0,    80,    81,    82,
      19,    73,    74,    19,    98,     0,   101,   106,   109,   110,
     112,   130,   129,    19,   142,   141,   143,     0,    19,   145,
     170,   169,   101,     0,     0,   287,     0,   279,   268,   267,
       0,   275,   279,   280,    19,   283,   284,   343,   345,     0,
     357,   375,   364,     0,     0,     0,   367,     0,   352,   353,
     293,   379,   372,    19,   378,    91,    89,     0,    86,     0,
       0,    19,    19,     0,   212,     0,     0,    19,    19,     0,
       0,     0,   193,   192,   194,     0,    19,     0,    19,   185,
       0,    19,    19,   119,   121,   118,   120,     0,     0,    19,
      36,   383,   382,     0,   135,     0,    96,   100,    19,     0,
      19,     0,     0,   144,   240,     0,    19,     0,   101,   285,
     288,   286,    19,   270,     0,   281,   363,    18,     0,     0,
     369,   370,    19,    19,   374,    19,   346,     0,    88,    19,
      19,    95,    19,     0,    19,     0,     0,    19,   214,     0,
       0,     0,     0,    17,   241,     0,   254,   252,     0,   196,
       0,     0,   233,   234,   235,   236,   237,   226,   232,    19,
       0,     0,    19,   122,     0,   386,   387,     0,   133,    75,
      76,     0,     0,    91,   101,    52,   101,   101,   101,     0,
     101,    19,   278,   273,     0,   359,   360,   361,   362,     0,
     349,   363,     0,    91,    83,     0,     0,   257,   255,     0,
     249,    19,   191,   258,   250,     0,   242,   253,   251,    19,
     248,     0,   228,    19,     0,   279,   279,    35,    71,    70,
      72,    99,    19,     0,    19,    19,    19,     0,    19,     0,
     365,   355,   354,   348,     0,     0,    19,   373,    90,    19,
       0,   246,   247,   256,     0,   189,     0,   239,   238,    19,
       0,     0,     0,    52,     0,   380,    62,    21,    66,    65,
      59,    61,    60,    57,    58,    67,    56,   105,    64,    63,
      52,   131,     0,   168,    54,     0,   351,   347,     0,     0,
      85,   213,    19,   195,   231,    19,    19,    19,     0,   381,
      53,     0,     0,     0,   147,     0,   184,   350,    19,     0,
      19,     0,   231,   126,   125,   104,   107,   128,    19,   151,
     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
     162,   163,   164,   165,   166,   140,    19,   149,     0,    21,
     172,    84,   243,   230,   227,     0,   132,     0,    19,    55,
     229,   148,     0,    19,     0,     0,   150
};

  /* YYPGOTO[NTERM-NUM].  */
static const yytype_int16 yypgoto[] =
{
    -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -406,
       0,  -278,  -553,  -268,  -301,  -273,  -553,  -553,  -553,   743,
    -553,  -552,  -553,   203,  -553,  -553,  -553,    -5,     2,  -553,
     636,  -553,  -553,   465,   329,  -553,  -411,   -38,  -553,   432,
    -256,  -553,  -160,     3,     5,  -553,  -553,  -553,  -202,  -553,
    -553,  -553,    80,  -553,  -553,     6,  -553,  -553,   238,  -553,
     544,  -553,    16,  -553,  -553,  -553,  -553,  -553,  -553,    18,
    -553,    26,  -553,   565,   -35,  -481,  -553,  -325,   759,    27,
    -553,   -69,  -553,  -553,  -350,   298,  -553,  -553,   384,   712,
    -148,   490,   804,   454,  -121,  -553,  -553,   249,   392,   304,
     539,  -398,  -553,  -379,  -553,   886,   893,  -164,   707,  -397,
    -553,  -553,   404,  -553,  -184,  -553,  -142,  -553,   758,  -112,
    -553,  -171,  -553,   521,  -553,  -327,   530,  -223,  -553,  -553,
    -553,  -553,  -553,   -14,   807,   809,   -10,  -553,  -553,  -553,
     292,  -135
};

  /* YYDEFGOTO[NTERM-NUM].  */
static const yytype_int16 yydefgoto[] =
{
      -1,     8,     9,    10,    11,    12,    13,    14,    15,   453,
      38,    46,    34,   665,   324,   319,    35,   278,   178,    57,
     280,   633,   705,   666,   667,   293,    58,   668,   669,   289,
     410,   650,   351,   141,   142,   541,   143,   414,   581,   415,
     510,    61,   295,   670,   671,   298,    64,   511,   166,   167,
     168,   169,   170,   171,    65,   672,   423,   702,    51,    52,
      53,    67,   673,   428,   703,   736,   748,   737,    69,   674,
      71,   675,   257,    54,   128,    39,    73,   434,   250,   676,
     571,   153,   476,   612,   477,   484,   485,   154,   155,   156,
     157,   475,   158,   159,   160,   161,   162,   711,   569,   659,
     429,   556,   163,    79,    80,    81,    82,   204,    83,   523,
     320,   129,   437,   519,   130,   131,   224,   225,   132,   133,
     134,   135,   646,   332,   454,   455,   333,   334,   335,   347,
     136,   137,   138,   677,   678,   679,   396,   397,   398,   399,
     193,   273
};

  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule whose
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
static const yytype_int16 yytable[] =
{
      16,    55,   404,   144,   192,   395,   251,   346,   478,    25,
      26,    27,    28,    29,    30,    31,   218,    36,    37,   462,
      40,    41,    42,    43,   447,   448,   503,   325,   451,   337,
     304,   308,    59,    45,   174,   589,   458,   459,   264,    60,
      62,   331,    63,    66,   461,   524,   464,   445,   446,   -97,
     507,   179,   180,    68,   539,    70,   183,   184,   307,   331,
     553,   628,    32,    72,    74,   374,   321,    32,   182,   326,
     329,   338,   -19,   555,   555,    32,   194,   195,   196,   -19,
     -19,   408,   557,   288,   205,   206,   207,   208,   345,    33,
     509,    32,   -19,    32,   248,   420,  -366,   221,    17,   426,
     330,  -366,   248,    32,   427,    32,    18,   209,   517,   369,
     639,   698,   322,   542,    19,   -17,   316,  -366,   330,   210,
     211,   212,   595,   596,   213,   214,   215,   216,   701,   219,
     527,   442,   380,   226,   227,   228,   229,   230,   231,    21,
     264,   264,   232,   233,   322,    32,   -19,   348,    20,   507,
     246,   441,   555,   349,   534,   682,   536,   540,   322,   -19,
     617,   409,   -97,    32,   265,   267,   -97,    32,   508,    32,
     554,   283,   287,    59,   172,   274,   516,   328,   629,   440,
      60,    62,   248,    63,    66,   292,   294,   297,   299,   301,
     303,   305,   539,   456,    68,   328,    70,   576,   322,   594,
     312,   313,   644,   315,    72,    74,   460,   249,   474,   655,
     637,  -366,  -183,   486,  -183,  -366,   450,   339,   340,   532,
    -183,  -366,   342,   343,   575,    32,   526,   323,   661,   662,
     -17,   463,   318,   -17,   600,   578,   433,    32,   355,   356,
     357,   358,   359,   360,   361,   528,   393,   497,   529,   264,
     380,   520,   521,   296,   366,   367,   368,   -19,   350,   323,
     685,  -182,   591,   512,   498,   401,    32,   508,   515,   376,
     377,   378,   379,   323,   647,    47,   402,   535,   331,    32,
     165,   412,   350,   331,   405,   406,   419,    48,   407,   527,
     425,   548,   431,   640,  -182,   -19,   322,    22,   643,   615,
    -183,    32,    23,   704,   559,   692,    32,    24,   -19,   436,
     438,   439,   248,   323,   601,   302,  -190,   443,    32,   -19,
      55,   474,   544,   533,    55,   380,    47,   449,   632,    32,
     634,   635,   636,   316,   638,   610,   457,   330,    48,   611,
     176,   177,   330,   686,   687,   371,   444,   607,   465,   466,
     467,   468,    32,   469,   470,  -177,    32,    32,   -19,    32,
     593,   532,   487,   172,   393,   489,   331,   164,   751,   683,
     -19,    55,    32,   490,    32,   755,   181,   187,    32,   165,
     562,   563,   564,   565,   566,    32,    32,   707,    32,   700,
     626,    32,   189,   502,    49,   499,   699,    50,    32,   616,
     562,   563,   564,   565,   566,   -19,  -177,   550,   185,   -19,
     505,   323,    32,   506,   328,   645,   608,   706,   -19,   328,
     471,   472,   -19,   303,    32,   330,  -190,   -19,   303,   266,
    -183,    32,   710,   -19,   717,   735,   263,   284,   186,   393,
    -208,   -19,    32,   285,   525,    49,   252,   188,    50,   318,
     253,   146,   147,   148,   149,   150,   493,   494,   495,   496,
      32,   749,   618,   537,   172,   533,   619,   613,   579,   651,
     699,   545,   546,   611,    32,   549,   172,   551,   552,   202,
     173,   175,    32,   290,   400,   560,   561,   756,   570,   567,
     190,   573,   574,   753,   314,   580,   203,   568,   627,   577,
     500,   614,   328,    32,   191,   708,   691,    32,   583,   622,
     585,   479,   480,   341,   221,    76,   172,   568,    32,   352,
     286,    32,   592,   316,   221,   197,   200,    49,    32,   362,
      50,   -19,   597,   598,   -19,   599,   317,   363,   152,   602,
     603,   620,   604,   605,   606,   631,   -19,   609,  -208,  -208,
    -208,    75,   652,   201,  -208,  -208,  -208,  -208,  -186,  -186,
    -186,   220,   234,    76,  -186,   254,   255,   256,   235,   621,
     653,   630,   436,    88,    89,    90,    91,    92,    93,    94,
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
     105,   106,   742,   245,   108,   109,   110,   111,   112,   113,
     114,   115,   116,   117,   118,   373,    77,   247,   164,   263,
     261,   654,   262,  -211,   268,   124,   353,   354,    49,   656,
     165,    50,   269,   660,   146,   147,   148,   149,   150,  -271,
     202,   327,   663,    49,   680,   681,    50,    32,   684,   318,
     270,   310,  -259,    75,  -259,    75,   688,    32,   232,   689,
      32,   311,    32,    78,   401,    76,   202,    76,   172,   694,
      32,   365,   411,   309,  -259,   572,   372,    55,  -271,  -271,
    -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -271,
    -271,  -271,  -271,  -271,   715,   172,    32,   716,    32,   139,
     140,   740,   709,   403,   -91,   712,   713,   714,    77,   322,
      77,   416,   291,    32,    32,   417,   -19,   271,   741,   272,
     743,    84,    85,   -19,   370,    86,   649,   432,   746,    87,
     252,  -211,  -211,  -211,   253,    32,   435,  -211,  -211,  -211,
    -211,    44,   421,   422,   452,   -19,   747,   488,   139,   140,
     139,   140,   -19,  -271,    32,    78,  -271,    78,   752,   491,
     172,   482,   483,   754,   418,   522,  -259,   514,  -259,    88,
      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
      99,   100,   101,   102,   103,   104,   105,   106,   107,   492,
     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
     118,   119,   120,   -19,   427,   121,  -103,   122,   123,   -91,
    -103,   124,   518,   125,    32,   522,   300,   584,  -289,   221,
     -19,   657,   658,  -289,   323,   547,   641,   558,   -19,    49,
    -296,  -296,    50,   -19,  -296,   126,   127,   642,  -296,   586,
     587,   172,  -187,  -187,  -187,   424,   588,   553,  -187,   254,
     255,   256,   146,   147,   148,   149,   150,  -289,  -289,  -289,
    -289,  -289,  -289,  -289,  -289,  -289,  -289,  -289,  -289,  -289,
    -289,  -289,  -289,   172,  -289,   590,   527,   430,  -296,  -296,
    -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
    -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,   690,  -296,
    -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
    -296,  -296,   696,   697,  -296,   172,  -296,  -296,   739,   501,
    -296,     1,  -296,   744,     2,     3,     4,     5,   -19,     6,
     473,   279,  -289,  -289,   481,  -289,   750,   222,  -296,   413,
     538,  -296,   648,   223,  -296,  -296,   322,   221,   582,   258,
     718,    32,   146,   147,   148,   149,   150,   259,    84,    85,
     504,   306,    86,   263,   693,   624,    87,  -207,   364,   543,
     260,   745,   623,   263,   695,   513,   198,  -210,   146,   147,
     148,   149,   150,   199,   375,   530,   625,     0,   146,   147,
     148,   149,   150,   344,   531,   281,     0,   282,     0,     0,
       0,     0,     7,     0,     0,     0,    88,    89,    90,    91,
      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
     102,   103,   104,   105,   106,   107,     0,   108,   109,   110,
     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
       0,     0,   121,   221,   122,   123,     0,    32,   124,     0,
     125,     0,     0,     0,    84,    85,     0,     0,    86,     0,
       0,   323,    87,     0,     0,     0,    49,     0,     0,    50,
       0,     0,   126,   127,     0,  -207,  -207,  -207,   380,   381,
       0,  -207,  -207,  -207,  -207,  -210,  -210,  -210,     0,     0,
       0,  -210,  -210,  -210,  -210,     0,     0,     0,   382,     0,
       0,     0,    88,    89,    90,    91,    92,    93,    94,    95,
      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
     106,   107,     0,   108,   109,   110,   111,   112,   113,   114,
     115,   116,   117,   118,   119,   120,     0,     0,   121,   202,
     122,   123,     0,    32,   124,   336,   125,     0,     0,     0,
      84,    85,     0,     0,    86,     0,     0,     0,    87,     0,
       0,     0,    49,     0,     0,    50,     0,     0,   126,   127,
      32,   383,   384,   385,   386,   387,   388,   389,   145,   390,
     391,   146,   147,   148,   149,   150,   151,   152,   392,     0,
       0,   172,   393,     0,     0,     0,   394,     0,    88,    89,
      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
     100,   101,   102,   103,   104,   105,   106,   107,     0,   108,
     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
     119,   120,   380,     0,   121,     0,   122,   123,    32,     0,
     124,     0,   125,     0,     0,    84,    85,     0,     0,    86,
       0,     0,     0,    87,     0,     0,     0,     0,    49,     0,
       0,    50,     0,     0,   126,   127,     0,     0,     0,     0,
       0,   719,   720,   721,   722,   723,   724,   725,   726,   727,
     728,   729,   730,   731,   732,   733,   734,     0,     0,     0,
       0,     0,     0,    88,    89,    90,    91,    92,    93,    94,
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
     105,   106,   107,    32,   108,   109,   110,   111,   112,   113,
     114,   115,   116,   117,   118,   119,   120,     0,     0,   121,
      32,   122,   123,     0,     0,   124,   145,   125,     0,   146,
     147,   148,   149,   150,   151,   152,   393,     0,   -69,  -139,
    -102,  -167,     0,    49,  -127,    56,    50,     0,     0,   126,
     127,     0,  -171,     0,     0,     0,     0,     0,    88,    89,
      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
     100,   101,   102,   103,   104,   105,   106,     0,     0,   108,
     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
    -269,   381,     0,     0,     0,     0,     0,     0,     0,     0,
     124,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     382,     0,     0,     0,     0,     0,   327,     0,    49,     0,
       0,    50,     0,  -111,     0,  -276,   381,     0,     0,  -269,
    -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
    -269,  -269,  -269,  -269,  -269,   382,     0,     0,     0,   236,
       0,     0,     0,     0,   237,     0,     0,     0,     0,     0,
     316,   381,     0,     0,  -276,  -276,  -276,  -276,  -276,  -276,
    -276,  -276,  -276,  -276,  -276,  -276,  -276,  -276,  -276,  -276,
     382,     0,     0,   383,   384,   385,   386,   387,   388,   389,
       0,   390,   391,   322,   381,     0,     0,     0,     0,     0,
     392,     0,     0,   172,  -269,     0,     0,  -269,   394,     0,
       0,     0,     0,   382,     0,     0,     0,     0,   383,   384,
     385,   386,   387,   388,   389,  -367,   390,   391,     0,   238,
     239,   240,     0,   241,     0,   392,   242,   243,   172,  -276,
       0,     0,  -276,   394,   382,     0,     0,     0,   244,     0,
       0,     0,     0,   383,   384,   385,   386,   387,   388,   389,
       0,   390,   391,     0,     0,     0,     0,     0,     0,     0,
     392,     0,     0,   172,     0,     0,   318,     0,   394,     0,
       0,     0,     0,     0,     0,     0,   383,   384,   385,   386,
     387,   388,   389,     0,   390,   391,    84,    85,     0,     0,
      86,     0,     0,   392,    87,     0,   172,     0,   323,     0,
       0,   394,     0,     0,     0,     0,     0,   383,   384,   385,
     386,   387,   388,   389,     0,   390,   391,     0,     0,     0,
       0,     0,     0,     0,   392,     0,     0,   172,     0,     0,
       0,     0,   394,     0,    88,    89,    90,    91,    92,    93,
      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
     104,   105,   106,   107,     0,   108,   109,   110,   111,   112,
     113,   114,   115,   116,   117,   118,   119,   120,     0,     0,
     121,     0,   122,   123,  -259,    75,   124,     0,   125,    32,
       0,     0,     0,     0,     0,     0,     0,    76,     0,     0,
       0,     0,  -262,    75,    49,     0,     0,    50,     0,     0,
     126,   127,     0,     0,     0,    76,     0,     0,     0,     0,
       0,     0,     0,  -259,  -259,  -259,  -259,  -259,  -259,  -259,
    -259,  -259,  -259,  -259,  -259,  -259,  -259,  -259,  -259,     0,
      77,  -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,  -262,
    -262,  -262,  -262,  -262,  -262,  -262,  -262,     0,    77,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,  -259,    75,
       0,     0,     0,     0,     0,     0,     0,    78,     0,     0,
       0,    76,     0,     0,     0,     0,     0,     0,  -259,     0,
       0,     0,     0,     0,     0,    78,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,  -262,  -259,  -259,  -259,
    -259,  -259,  -259,  -259,  -259,  -259,  -259,  -259,  -259,  -259,
    -259,  -259,  -259,     0,    77,   380,   664,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,  -181,     0,
       0,  -181,  -181,  -181,  -181,  -181,  -181,  -181,   -69,  -139,
    -102,  -167,     0,     0,  -127,    56,     0,     0,     0,     0,
       0,     0,  -171,     0,     0,     0,     0,     0,   380,   738,
       0,    78,     0,     0,     0,     0,     0,     0,     0,     0,
     277,  -181,  -259,     0,  -181,  -181,  -181,  -181,  -181,  -181,
    -181,     0,  -139,  -102,  -167,    -2,   275,  -127,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,  -181,     0,
       0,  -181,  -181,  -181,  -181,  -181,  -181,  -181,   -69,  -139,
    -102,  -167,   276,     0,  -127,    56,     0,     0,     0,     0,
       0,     0,  -171,  -111,     0,     0,     0,     0,     0,   393,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     277,     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,  -111,     0,     0,     0,
       0,     0,   393,    88,    89,    90,    91,    92,    93,    94,
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
     105,   106,     0,  -111,   108,   109,   110,   111,   112,   113,
     114,   115,   116,   117,   118,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,   124,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,   327,     0,    49,     0,     0,    50,    88,    89,    90,
      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
     101,   102,   103,   104,   105,   106,   217,     0,   108,   109,
     110,   111,   112,   113,   114,   115,   116,   117,   118,    88,
      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
      99,   100,   101,   102,   103,   104,   105,   106,     0,     0,
     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
     118
};

static const yytype_int16 yycheck[] =
{
       0,    36,   280,    41,    73,   273,   154,   230,   358,     9,
      10,    11,    12,    13,    14,    15,   128,    17,    18,   346,
      20,    21,    22,    23,   325,   326,   405,   211,   329,   213,
     190,   195,    37,    33,    44,   516,   337,   338,   159,    37,
      37,   212,    37,    37,   345,   442,   347,   320,   321,     0,
       1,    51,    52,    37,   465,    37,    56,    57,   193,   230,
       5,     0,     5,    37,    37,   267,   208,     5,     1,   211,
     212,   213,     5,   479,   480,     5,    76,    77,    78,    12,
      13,    12,   480,    13,    84,    85,    86,    87,   230,    27,
     415,     5,     5,     5,     1,   297,     0,     1,   113,    13,
     212,     5,     1,     5,    18,     5,   113,   107,   433,   257,
     591,   663,     0,    13,   113,     5,     0,    21,   230,   119,
     120,   121,   528,   529,   124,   125,   126,   127,   680,   129,
       5,   315,     0,   133,   134,   135,   136,   137,   138,     5,
     261,   262,   142,   143,     0,     5,    59,    59,   113,     1,
     150,   315,   558,    13,   455,   636,   457,    59,     0,    92,
     558,    92,   113,     5,   164,   165,   117,     5,   119,     5,
     115,   114,   182,   178,   113,   175,   432,   212,   117,   314,
     178,   178,     1,   178,   178,   185,   186,   187,   188,   189,
     190,   191,   603,   335,   178,   230,   178,   498,     0,   526,
     200,   201,   599,   203,   178,   178,   341,   114,   356,   615,
     589,   115,   119,   361,   113,   119,   328,   217,   218,    21,
     119,   125,   222,   223,   497,     5,   449,   115,   625,   626,
     120,   119,   116,   123,   535,   503,   305,     5,   238,   239,
     240,   241,   242,   243,   244,   120,   114,   382,   123,   370,
       0,   435,   436,     1,   254,   255,   256,     5,   118,   115,
     639,   113,   518,   423,   399,   275,     5,   119,   428,   269,
     270,   271,   272,   115,   601,     1,   276,   119,   449,     5,
     118,   291,   118,   454,   284,   285,   296,    13,   288,     5,
     300,     1,   302,   594,   113,     5,     0,   113,   599,    15,
     119,     5,     5,   682,     1,   655,     5,     0,     5,   309,
     310,   311,     1,   115,   537,     1,     5,   317,     5,     5,
     355,   469,   470,   125,   359,     0,     1,   327,   584,     5,
     586,   587,   588,     0,   590,   115,   336,   449,    13,   119,
       5,     6,   454,   644,   645,   265,    13,   115,   348,   349,
     350,   351,     5,   353,   354,    81,     5,     5,   106,     5,
     524,    21,   362,   113,   114,   365,   537,   106,   747,   637,
     118,   406,     5,   373,     5,   754,    81,   108,     5,   118,
       7,     8,     9,    10,    11,     5,     5,   688,     5,   667,
     574,     5,    24,   403,   120,    12,   664,   123,     5,   115,
       7,     8,     9,    10,    11,   115,    81,   476,    23,   119,
     410,   115,     5,   413,   449,   599,   115,   685,   115,   454,
      13,    14,   119,   423,     5,   537,   115,   113,   428,     1,
     119,     5,    13,     5,   702,   703,     1,   113,    25,   114,
       5,    13,     5,   119,   444,   120,     1,    29,   123,   116,
       5,    16,    17,    18,    19,    20,   376,   377,   378,   379,
       5,   739,   115,   463,   113,   125,   119,   115,   117,   115,
     738,   471,   472,   119,     5,   475,   113,   477,   478,     1,
     117,    12,     5,   114,   117,   485,   486,   755,   488,   116,
      26,   491,   492,   113,   202,   505,    18,   124,   117,   499,
     117,   115,   537,     5,    37,   689,   654,     5,   508,   116,
     510,    13,    14,   221,     1,    13,   113,   124,     5,    13,
     117,     5,   522,     0,     1,   114,   117,   120,     5,    13,
     123,   103,   532,   533,   106,   535,    13,    21,    22,   539,
     540,   115,   542,   543,   544,   583,   118,   547,   113,   114,
     115,     1,   115,   117,   119,   120,   121,   122,   113,   114,
     115,   114,   114,    13,   119,   120,   121,   122,    22,   569,
     115,   581,   572,    60,    61,    62,    63,    64,    65,    66,
      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
      77,    78,   115,    13,    81,    82,    83,    84,    85,    86,
      87,    88,    89,    90,    91,   103,    56,    22,   106,     1,
     156,   611,   158,     5,   114,   102,   110,   111,   120,   619,
     118,   123,   105,   623,    16,    17,    18,    19,    20,     0,
       1,   118,   632,   120,   634,   635,   123,     5,   638,   116,
     107,   117,     0,     1,     0,     1,   646,     5,   648,   649,
       5,   117,     5,   103,   664,    13,     1,    13,   113,   659,
       5,   119,   117,    18,   114,    18,   115,   702,    39,    40,
      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
      51,    52,    53,    54,   698,   113,     5,   701,     5,    57,
      58,   705,   692,     1,    13,   695,   696,   697,    56,     0,
      56,   113,     1,     5,     5,   117,     5,   105,   708,   107,
     710,    12,    13,    12,   260,    16,    18,   113,   718,    20,
       1,   113,   114,   115,     5,     5,     5,   119,   120,   121,
     122,     1,    12,    13,     5,     5,   736,    13,    57,    58,
      57,    58,    12,   114,     5,   103,   117,   103,   748,   115,
     113,    12,    13,   753,   117,    56,   114,    13,   114,    60,
      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
      71,    72,    73,    74,    75,    76,    77,    78,    79,    18,
      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
      91,    92,    93,    92,    18,    96,   113,    98,    99,   118,
     117,   102,   113,   104,     5,    56,     1,   113,     0,     1,
       5,    12,    13,     5,   115,    83,   117,    83,    13,   120,
      12,    13,   123,    18,    16,   126,   127,   128,    20,   113,
     113,   113,   113,   114,   115,   117,   113,     5,   119,   120,
     121,   122,    16,    17,    18,    19,    20,    39,    40,    41,
      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
      52,    53,    54,   113,    56,   113,     5,   117,    60,    61,
      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
      72,    73,    74,    75,    76,    77,    78,    79,   115,    81,
      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
      92,    93,   115,   115,    96,   113,    98,    99,   705,   117,
     102,    28,   104,   116,    31,    32,    33,    34,   113,    36,
     355,   178,   114,   115,   359,   117,   116,   119,   120,   293,
     465,   123,   603,   125,   126,   127,     0,     1,   506,    13,
     702,     5,    16,    17,    18,    19,    20,    21,    12,    13,
     406,   192,    16,     1,   656,   571,    20,     5,   246,   469,
     156,   712,   570,     1,   660,   426,    80,     5,    16,    17,
      18,    19,    20,    80,   267,   454,   572,    -1,    16,    17,
      18,    19,    20,   225,   454,   178,    -1,   178,    -1,    -1,
      -1,    -1,   109,    -1,    -1,    -1,    60,    61,    62,    63,
      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
      -1,    -1,    96,     1,    98,    99,    -1,     5,   102,    -1,
     104,    -1,    -1,    -1,    12,    13,    -1,    -1,    16,    -1,
      -1,   115,    20,    -1,    -1,    -1,   120,    -1,    -1,   123,
      -1,    -1,   126,   127,    -1,   113,   114,   115,     0,     1,
      -1,   119,   120,   121,   122,   113,   114,   115,    -1,    -1,
      -1,   119,   120,   121,   122,    -1,    -1,    -1,    20,    -1,
      -1,    -1,    60,    61,    62,    63,    64,    65,    66,    67,
      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
      88,    89,    90,    91,    92,    93,    -1,    -1,    96,     1,
      98,    99,    -1,     5,   102,   103,   104,    -1,    -1,    -1,
      12,    13,    -1,    -1,    16,    -1,    -1,    -1,    20,    -1,
      -1,    -1,   120,    -1,    -1,   123,    -1,    -1,   126,   127,
       5,    93,    94,    95,    96,    97,    98,    99,    13,   101,
     102,    16,    17,    18,    19,    20,    21,    22,   110,    -1,
      -1,   113,   114,    -1,    -1,    -1,   118,    -1,    60,    61,
      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
      92,    93,     0,    -1,    96,    -1,    98,    99,     5,    -1,
     102,    -1,   104,    -1,    -1,    12,    13,    -1,    -1,    16,
      -1,    -1,    -1,    20,    -1,    -1,    -1,    -1,   120,    -1,
      -1,   123,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,
      -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
      48,    49,    50,    51,    52,    53,    54,    -1,    -1,    -1,
      -1,    -1,    -1,    60,    61,    62,    63,    64,    65,    66,
      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
      77,    78,    79,     5,    81,    82,    83,    84,    85,    86,
      87,    88,    89,    90,    91,    92,    93,    -1,    -1,    96,
       5,    98,    99,    -1,    -1,   102,    13,   104,    -1,    16,
      17,    18,    19,    20,    21,    22,   114,    -1,    23,    24,
      25,    26,    -1,   120,    29,    30,   123,    -1,    -1,   126,
     127,    -1,    37,    -1,    -1,    -1,    -1,    -1,    60,    61,
      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
      72,    73,    74,    75,    76,    77,    78,    -1,    -1,    81,
      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
       0,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      20,    -1,    -1,    -1,    -1,    -1,   118,    -1,   120,    -1,
      -1,   123,    -1,   108,    -1,     0,     1,    -1,    -1,    39,
      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
      50,    51,    52,    53,    54,    20,    -1,    -1,    -1,    13,
      -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,    -1,
       0,     1,    -1,    -1,    39,    40,    41,    42,    43,    44,
      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
      20,    -1,    -1,    93,    94,    95,    96,    97,    98,    99,
      -1,   101,   102,     0,     1,    -1,    -1,    -1,    -1,    -1,
     110,    -1,    -1,   113,   114,    -1,    -1,   117,   118,    -1,
      -1,    -1,    -1,    20,    -1,    -1,    -1,    -1,    93,    94,
      95,    96,    97,    98,    99,     1,   101,   102,    -1,    93,
      94,    95,    -1,    97,    -1,   110,   100,   101,   113,   114,
      -1,    -1,   117,   118,    20,    -1,    -1,    -1,   112,    -1,
      -1,    -1,    -1,    93,    94,    95,    96,    97,    98,    99,
      -1,   101,   102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     110,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
      97,    98,    99,    -1,   101,   102,    12,    13,    -1,    -1,
      16,    -1,    -1,   110,    20,    -1,   113,    -1,   115,    -1,
      -1,   118,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,
      96,    97,    98,    99,    -1,   101,   102,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,   110,    -1,    -1,   113,    -1,    -1,
      -1,    -1,   118,    -1,    60,    61,    62,    63,    64,    65,
      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
      76,    77,    78,    79,    -1,    81,    82,    83,    84,    85,
      86,    87,    88,    89,    90,    91,    92,    93,    -1,    -1,
      96,    -1,    98,    99,     0,     1,   102,    -1,   104,     5,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,
      -1,    -1,     0,     1,   120,    -1,    -1,   123,    -1,    -1,
     126,   127,    -1,    -1,    -1,    13,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    39,    40,    41,    42,    43,    44,    45,
      46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
      56,    39,    40,    41,    42,    43,    44,    45,    46,    47,
      48,    49,    50,    51,    52,    53,    54,    -1,    56,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,     1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,
      -1,    13,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
      -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,   114,    39,    40,    41,
      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
      52,    53,    54,    -1,    56,     0,     1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,
      -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
      25,    26,    -1,    -1,    29,    30,    -1,    -1,    -1,    -1,
      -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,     0,     1,
      -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      55,    13,   114,    -1,    16,    17,    18,    19,    20,    21,
      22,    -1,    24,    25,    26,     0,     1,    29,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,
      -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
      25,    26,    27,    -1,    29,    30,    -1,    -1,    -1,    -1,
      -1,    -1,    37,   108,    -1,    -1,    -1,    -1,    -1,   114,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,
      -1,    -1,   114,    60,    61,    62,    63,    64,    65,    66,
      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
      77,    78,    -1,   108,    81,    82,    83,    84,    85,    86,
      87,    88,    89,    90,    91,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,   102,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,   118,    -1,   120,    -1,    -1,   123,    60,    61,    62,
      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
      73,    74,    75,    76,    77,    78,    79,    -1,    81,    82,
      83,    84,    85,    86,    87,    88,    89,    90,    91,    60,
      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
      71,    72,    73,    74,    75,    76,    77,    78,    -1,    -1,
      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
      91
};

  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
     symbol of state STATE-NUM.  */
static const yytype_uint16 yystos[] =
{
       0,    28,    31,    32,    33,    34,    36,   109,   130,   131,
     132,   133,   134,   135,   136,   137,   139,   113,   113,   113,
     113,     5,   113,     5,     0,   139,   139,   139,   139,   139,
     139,   139,     5,    27,   141,   145,   139,   139,   139,   204,
     139,   139,   139,   139,     1,   139,   140,     1,    13,   120,
     123,   187,   188,   189,   202,   203,    30,   148,   155,   156,
     157,   170,   172,   173,   175,   183,   184,   190,   191,   197,
     198,   199,   200,   205,   208,     1,    13,    56,   103,   232,
     233,   234,   235,   237,    12,    13,    16,    20,    60,    61,
      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
      72,    73,    74,    75,    76,    77,    78,    79,    81,    82,
      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
      93,    96,    98,    99,   102,   104,   126,   127,   203,   240,
     243,   244,   247,   248,   249,   250,   259,   260,   261,    57,
      58,   162,   163,   165,   166,    13,    16,    17,    18,    19,
      20,    21,    22,   210,   216,   217,   218,   219,   221,   222,
     223,   224,   225,   231,   106,   118,   177,   178,   179,   180,
     181,   182,   113,   117,   265,    12,     5,     6,   147,   139,
     139,    81,     1,   139,   139,    23,    25,   108,    29,    24,
      26,    37,   210,   269,   139,   139,   139,   114,   234,   235,
     117,   117,     1,    18,   236,   139,   139,   139,   139,   139,
     139,   139,   139,   139,   139,   139,   139,    79,   248,   139,
     114,     1,   119,   125,   245,   246,   139,   139,   139,   139,
     139,   139,   139,   139,   114,    22,    13,    18,    93,    94,
      95,    97,   100,   101,   112,    13,   139,    22,     1,   114,
     207,   219,     1,     5,   120,   121,   122,   201,    13,    21,
     221,   222,   222,     1,   223,   139,     1,   139,   114,   105,
     107,   105,   107,   270,   139,     1,    27,    55,   146,   148,
     149,   263,   264,   114,   113,   119,   117,   265,    13,   158,
     114,     1,   139,   154,   139,   171,     1,   139,   174,   139,
       1,   139,     1,   139,   171,   139,   207,   270,   236,    18,
     117,   117,   139,   139,   269,   139,     0,    13,   116,   144,
     239,   245,     0,   115,   143,   243,   245,   118,   203,   245,
     248,   250,   252,   255,   256,   257,   103,   243,   245,   139,
     139,   269,   139,   139,   247,   245,   256,   258,    59,    13,
     118,   161,    13,   110,   111,   139,   139,   139,   139,   139,
     139,   139,    13,    21,   218,   119,   139,   139,   139,   219,
     222,   181,   115,   103,   177,   237,   139,   139,   139,   139,
       0,     1,    20,    93,    94,    95,    96,    97,    98,    99,
     101,   102,   110,   114,   118,   142,   265,   266,   267,   268,
     117,   265,   139,     1,   140,   139,   139,   139,    12,    92,
     159,   117,   265,   159,   166,   168,   113,   117,   117,   265,
     177,    12,    13,   185,   117,   265,    13,    18,   192,   229,
     117,   265,   113,   210,   206,     5,   139,   241,   139,   139,
     270,   236,   243,   139,    13,   144,   144,   143,   143,   139,
     248,   143,     5,   138,   253,   254,   245,   139,   143,   143,
     270,   143,   254,   119,   143,   139,   139,   139,   139,   139,
     139,    13,    14,   202,   219,   220,   211,   213,   213,    13,
      14,   202,    12,    13,   214,   215,   219,   139,    13,   139,
     139,   115,    18,   181,   181,   181,   181,   270,   270,    12,
     117,   117,   265,   232,   189,   139,   139,     1,   119,   206,
     169,   176,   171,   229,    13,   171,   169,   206,   113,   242,
     243,   243,    56,   238,   238,   139,   256,     5,   120,   123,
     252,   255,    21,   125,   143,   119,   143,   139,   162,   165,
      59,   164,    13,   220,   219,   139,   139,    83,     1,   139,
     210,   139,   139,     5,   115,   138,   230,   230,    83,     1,
     139,   139,     7,     8,     9,    10,    11,   116,   124,   227,
     139,   209,    18,   139,   139,   144,   143,   139,   142,   117,
     265,   167,   168,   139,   113,   139,   113,   113,   113,   204,
     113,   169,   139,   236,   254,   138,   138,   139,   139,   139,
     143,   256,   139,   139,   139,   139,   139,   115,   115,   139,
     115,   119,   212,   115,   115,    15,   115,   230,   115,   119,
     115,   139,   116,   227,   217,   241,   243,   117,     0,   117,
     265,   166,   169,   150,   169,   169,   169,   232,   169,   204,
     143,   117,   128,   143,   238,   243,   251,   254,   163,    18,
     160,   115,   115,   115,   139,   138,   139,    12,    13,   228,
     139,   238,   238,   139,     1,   142,   152,   153,   156,   157,
     172,   173,   184,   191,   198,   200,   208,   262,   263,   264,
     139,   139,   204,   142,   139,   232,   143,   143,   139,   139,
     115,   219,   213,   214,   139,   228,   115,   115,   150,   142,
     140,   150,   186,   193,   232,   151,   142,   143,   243,   139,
      13,   226,   139,   139,   139,   262,   262,   142,   187,    39,
      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
      50,    51,    52,    53,    54,   142,   194,   196,     1,   152,
     262,   139,   115,   139,   116,   226,   139,   139,   195,   140,
     116,   232,   139,   113,   139,   232,   142
};

  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
static const yytype_uint16 yyr1[] =
{
       0,   129,   130,   130,   130,   130,   130,   130,   130,   130,
     131,   132,   133,   134,   135,   136,   137,   138,   138,   139,
     139,   140,   140,   140,   141,   141,   142,   142,   143,   143,
     144,   144,   145,   145,   145,   146,   146,   147,   147,   148,
     148,   148,   148,   148,   148,   148,   148,   148,   149,   149,
     149,   149,   150,   150,   151,   151,   152,   152,   152,   152,
     152,   152,   153,   153,   153,   153,   153,   153,   154,   155,
     156,   156,   156,   156,   156,   157,   157,   157,   157,   158,
     158,   159,   159,   160,   160,   161,   162,   163,   163,   164,
     164,   165,   165,   165,   166,   166,   167,   167,   168,   168,
     168,   169,   170,   171,   172,   172,   172,   173,   173,   174,
     174,   175,   176,   177,   177,   177,   177,   178,   179,   179,
     180,   180,   181,   181,   181,   182,   182,   183,   184,   185,
     185,   186,   186,   187,   188,   188,   189,   189,   189,   190,
     191,   191,   191,   192,   192,   192,   192,   193,   193,   195,
     194,   196,   196,   196,   196,   196,   196,   196,   196,   196,
     196,   196,   196,   196,   196,   196,   196,   197,   198,   198,
     198,   199,   200,   201,   201,   201,   202,   202,   203,   203,
     204,   205,   206,   207,   208,   209,   210,   210,   210,   211,
     212,   213,   214,   214,   215,   215,   215,   216,   217,   217,
     217,   217,   217,   218,   218,   218,   219,   219,   219,   219,
     219,   219,   220,   220,   220,   221,   221,   222,   222,   222,
     223,   223,   223,   223,   223,   224,   225,   225,   225,   225,
     226,   226,   227,   227,   227,   227,   227,   227,   228,   228,
     229,   230,   230,   230,   231,   231,   231,   231,   231,   231,
     231,   231,   231,   231,   231,   231,   231,   231,   231,   232,
     232,   232,   232,   232,   232,   233,   233,   233,   233,   234,
     235,   235,   235,   235,   235,   235,   236,   237,   238,   238,
     239,   239,   240,   240,   240,   241,   241,   242,   242,   243,
     243,   244,   244,   245,   246,   246,   246,   247,   247,   247,
     247,   247,   247,   247,   247,   247,   247,   247,   247,   247,
     247,   247,   247,   248,   248,   248,   248,   248,   248,   248,
     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
     248,   248,   248,   249,   249,   249,   250,   250,   250,   250,
     250,   250,   250,   250,   251,   251,   252,   252,   252,   253,
     253,   253,   253,   254,   254,   255,   256,   256,   257,   257,
     257,   257,   258,   258,   259,   259,   260,   260,   261,   261,
     262,   262,   263,   263,   264,   265,   266,   267,   268,   268,
     268,   268,   268,   268,   268,   268,   268,   268,   268,   269,
     270,   270,   270,   270,   270
};

  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
static const yytype_uint8 yyr2[] =
{
       0,     2,     4,     2,     2,     2,     2,     2,     2,     2,
       6,     6,     5,     5,     5,     5,     5,     1,     2,     0,
       2,     0,     2,     2,     0,     1,     1,     1,     1,     1,
       1,     1,     5,     3,     3,     5,     3,     0,     3,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
       1,     1,     0,     3,     0,     3,     1,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
       7,     7,     7,     4,     4,     6,     6,     3,     3,     0,
       2,     1,     1,     0,     4,     6,     4,     1,     5,     0,
       3,     0,     1,     1,     1,     5,     0,     1,     1,     4,
       2,     0,     0,     1,    10,     8,     4,    10,     3,     2,
       2,     0,     0,     1,     1,     1,     1,     3,     4,     4,
       4,     4,     5,     1,     3,     9,     9,     0,    10,     1,
       1,     0,     3,     6,     1,     5,     2,     1,     1,     0,
      10,     4,     4,     1,     2,     1,     0,     1,     4,     0,
       7,     1,     1,     1,     1,     1,     1,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     0,     8,     4,
       4,     0,    10,     2,     2,     2,     1,     0,     1,     1,
       1,     0,     0,     0,     9,     0,     1,     6,     2,     0,
       0,     3,     1,     1,     1,     5,     2,     2,     1,     1,
       2,     3,     2,     1,     2,     2,     1,     2,     1,     2,
       3,     2,     1,     5,     2,     1,     1,     1,     2,     2,
       1,     1,     1,     1,     1,     2,     5,    10,     6,    11,
       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
       2,     1,     2,     6,     2,     3,     7,     7,     6,     6,
       6,     6,     5,     6,     5,     6,     7,     6,     6,     0,
       1,     2,     1,     1,     2,     3,     3,     4,     4,     3,
       5,     5,     2,     6,     3,     4,     3,     2,     2,     0,
       2,     3,     3,     4,     4,     2,     2,     0,     1,     1,
       2,     1,     3,     3,     2,     2,     0,     2,     3,     2,
       2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     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,     3,     4,     5,     8,     7,     6,
       9,     8,     4,     4,     1,     1,     1,     2,     1,     3,
       3,     3,     3,     0,     1,     5,     1,     2,     1,     3,
       3,     1,     2,     5,     5,     4,     1,     1,     4,     4,
       1,     2,     3,     3,     2,     3,     3,     3,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
       0,     2,     2,     2,     2
};


#define yyerrok         (yyerrstatus = 0)
#define yyclearin       (yychar = YYEMPTY)
#define YYEMPTY         (-2)
#define YYEOF           0

#define YYACCEPT        goto yyacceptlab
#define YYABORT         goto yyabortlab
#define YYERROR         goto yyerrorlab


#define YYRECOVERING()  (!!yyerrstatus)

#define YYBACKUP(Token, Value)                                  \
do                                                              \
  if (yychar == YYEMPTY)                                        \
    {                                                           \
      yychar = (Token);                                         \
      yylval = (Value);                                         \
      YYPOPSTACK (yylen);                                       \
      yystate = *yyssp;                                         \
      goto yybackup;                                            \
    }                                                           \
  else                                                          \
    {                                                           \
      yyerror (parser, YY_("syntax error: cannot back up")); \
      YYERROR;                                                  \
    }                                                           \
while (0)

/* Error token number */
#define YYTERROR        1
#define YYERRCODE       256



/* Enable debugging if requested.  */
#if YYDEBUG

# ifndef YYFPRINTF
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
#  define YYFPRINTF fprintf
# endif

# define YYDPRINTF(Args)                        \
do {                                            \
  if (yydebug)                                  \
    YYFPRINTF Args;                             \
} while (0)

/* This macro is provided for backward compatibility. */
#ifndef YY_LOCATION_PRINT
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif


# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
do {                                                                      \
  if (yydebug)                                                            \
    {                                                                     \
      YYFPRINTF (stderr, "%s ", Title);                                   \
      yy_symbol_print (stderr,                                            \
                  Type, Value, parser); \
      YYFPRINTF (stderr, "\n");                                           \
    }                                                                     \
} while (0)


/*----------------------------------------.
| Print this symbol's value on YYOUTPUT.  |
`----------------------------------------*/

static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, CSSParser* parser)
{
  FILE *yyo = yyoutput;
  YYUSE (yyo);
  YYUSE (parser);
  if (!yyvaluep)
    return;
# ifdef YYPRINT
  if (yytype < YYNTOKENS)
    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
# endif
  YYUSE (yytype);
}


/*--------------------------------.
| Print this symbol on YYOUTPUT.  |
`--------------------------------*/

static void
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, CSSParser* parser)
{
  YYFPRINTF (yyoutput, "%s %s (",
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);

  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
  YYFPRINTF (yyoutput, ")");
}

/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
| TOP (included).                                                   |
`------------------------------------------------------------------*/

static void
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
{
  YYFPRINTF (stderr, "Stack now");
  for (; yybottom <= yytop; yybottom++)
    {
      int yybot = *yybottom;
      YYFPRINTF (stderr, " %d", yybot);
    }
  YYFPRINTF (stderr, "\n");
}

# define YY_STACK_PRINT(Bottom, Top)                            \
do {                                                            \
  if (yydebug)                                                  \
    yy_stack_print ((Bottom), (Top));                           \
} while (0)


/*------------------------------------------------.
| Report that the YYRULE is going to be reduced.  |
`------------------------------------------------*/

static void
yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, CSSParser* parser)
{
  unsigned long int yylno = yyrline[yyrule];
  int yynrhs = yyr2[yyrule];
  int yyi;
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
             yyrule - 1, yylno);
  /* The symbols being reduced.  */
  for (yyi = 0; yyi < yynrhs; yyi++)
    {
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
      yy_symbol_print (stderr,
                       yystos[yyssp[yyi + 1 - yynrhs]],
                       &(yyvsp[(yyi + 1) - (yynrhs)])
                                              , parser);
      YYFPRINTF (stderr, "\n");
    }
}

# define YY_REDUCE_PRINT(Rule)          \
do {                                    \
  if (yydebug)                          \
    yy_reduce_print (yyssp, yyvsp, Rule, parser); \
} while (0)

/* Nonzero means print parse trace.  It is left uninitialized so that
   multiple parsers can coexist.  */
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */


/* YYINITDEPTH -- initial size of the parser's stacks.  */
#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif

/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   if the built-in stack extension method is used).

   Do not make this value too large; the results are undefined if
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   evaluated with infinite-precision integer arithmetic.  */

#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif


#if YYERROR_VERBOSE

# ifndef yystrlen
#  if defined __GLIBC__ && defined _STRING_H
#   define yystrlen strlen
#  else
/* Return the length of YYSTR.  */
static YYSIZE_T
yystrlen (const char *yystr)
{
  YYSIZE_T yylen;
  for (yylen = 0; yystr[yylen]; yylen++)
    continue;
  return yylen;
}
#  endif
# endif

# ifndef yystpcpy
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
#   define yystpcpy stpcpy
#  else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
   YYDEST.  */
static char *
yystpcpy (char *yydest, const char *yysrc)
{
  char *yyd = yydest;
  const char *yys = yysrc;

  while ((*yyd++ = *yys++) != '\0')
    continue;

  return yyd - 1;
}
#  endif
# endif

# ifndef yytnamerr
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
   quotes and backslashes, so that it's suitable for yyerror.  The
   heuristic is that double-quoting is unnecessary unless the string
   contains an apostrophe, a comma, or backslash (other than
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
   null, do not copy; instead, return the length of what the result
   would have been.  */
static YYSIZE_T
yytnamerr (char *yyres, const char *yystr)
{
  if (*yystr == '"')
    {
      YYSIZE_T yyn = 0;
      char const *yyp = yystr;

      for (;;)
        switch (*++yyp)
          {
          case '\'':
          case ',':
            goto do_not_strip_quotes;

          case '\\':
            if (*++yyp != '\\')
              goto do_not_strip_quotes;
            /* Fall through.  */
          default:
            if (yyres)
              yyres[yyn] = *yyp;
            yyn++;
            break;

          case '"':
            if (yyres)
              yyres[yyn] = '\0';
            return yyn;
          }
    do_not_strip_quotes: ;
    }

  if (! yyres)
    return yystrlen (yystr);

  return yystpcpy (yyres, yystr) - yyres;
}
# endif

/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
   about the unexpected token YYTOKEN for the state stack whose top is
   YYSSP.

   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
   not large enough to hold the message.  In that case, also set
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
   required number of bytes is too large to store.  */
static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                yytype_int16 *yyssp, int yytoken)
{
  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
  YYSIZE_T yysize = yysize0;
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
  /* Internationalized format string. */
  const char *yyformat = YY_NULLPTR;
  /* Arguments of yyformat. */
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
  /* Number of reported tokens (one for the "unexpected", one per
     "expected"). */
  int yycount = 0;

  /* There are many possibilities here to consider:
     - If this state is a consistent state with a default action, then
       the only way this function was invoked is if the default action
       is an error action.  In that case, don't check for expected
       tokens because there are none.
     - The only way there can be no lookahead present (in yychar) is if
       this state is a consistent state with a default action.  Thus,
       detecting the absence of a lookahead is sufficient to determine
       that there is no unexpected or expected token to report.  In that
       case, just report a simple "syntax error".
     - Don't assume there isn't a lookahead just because this state is a
       consistent state with a default action.  There might have been a
       previous inconsistent state, consistent state with a non-default
       action, or user semantic action that manipulated yychar.
     - Of course, the expected token list depends on states to have
       correct lookahead information, and it depends on the parser not
       to perform extra reductions after fetching a lookahead from the
       scanner and before detecting a syntax error.  Thus, state merging
       (from LALR or IELR) and default reductions corrupt the expected
       token list.  However, the list is correct for canonical LR with
       one exception: it will still contain any token that will not be
       accepted due to an error action in a later state.
  */
  if (yytoken != YYEMPTY)
    {
      int yyn = yypact[*yyssp];
      yyarg[yycount++] = yytname[yytoken];
      if (!yypact_value_is_default (yyn))
        {
          /* Start YYX at -YYN if negative to avoid negative indexes in
             YYCHECK.  In other words, skip the first -YYN actions for
             this state because they are default actions.  */
          int yyxbegin = yyn < 0 ? -yyn : 0;
          /* Stay within bounds of both yycheck and yytname.  */
          int yychecklim = YYLAST - yyn + 1;
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
          int yyx;

          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
                && !yytable_value_is_error (yytable[yyx + yyn]))
              {
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
                  {
                    yycount = 1;
                    yysize = yysize0;
                    break;
                  }
                yyarg[yycount++] = yytname[yyx];
                {
                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
                  if (! (yysize <= yysize1
                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                    return 2;
                  yysize = yysize1;
                }
              }
        }
    }

  switch (yycount)
    {
# define YYCASE_(N, S)                      \
      case N:                               \
        yyformat = S;                       \
      break
      YYCASE_(0, YY_("syntax error"));
      YYCASE_(1, YY_("syntax error, unexpected %s"));
      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
# undef YYCASE_
    }

  {
    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
      return 2;
    yysize = yysize1;
  }

  if (*yymsg_alloc < yysize)
    {
      *yymsg_alloc = 2 * yysize;
      if (! (yysize <= *yymsg_alloc
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
      return 1;
    }

  /* Avoid sprintf, as that infringes on the user's name space.
     Don't have undefined behavior even if the translation
     produced a string with the wrong number of "%s"s.  */
  {
    char *yyp = *yymsg;
    int yyi = 0;
    while ((*yyp = *yyformat) != '\0')
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
        {
          yyp += yytnamerr (yyp, yyarg[yyi++]);
          yyformat += 2;
        }
      else
        {
          yyp++;
          yyformat++;
        }
  }
  return 0;
}
#endif /* YYERROR_VERBOSE */

/*-----------------------------------------------.
| Release the memory associated to this symbol.  |
`-----------------------------------------------*/

static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, CSSParser* parser)
{
  YYUSE (yyvaluep);
  YYUSE (parser);
  if (!yymsg)
    yymsg = "Deleting";
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);

  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
  switch (yytype)
    {
          case 148: /* valid_rule  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2059 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 149: /* rule  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2065 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 150: /* block_rule_list  */
#line 263 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).ruleList); }
#line 2071 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 151: /* block_valid_rule_list  */
#line 263 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).ruleList); }
#line 2077 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 152: /* block_valid_rule  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2083 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 153: /* block_rule  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2089 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 156: /* import  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2095 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 160: /* maybe_media_value  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2101 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 161: /* base_media_query_expression  */
#line 278 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).mediaQueryExpression); }
#line 2107 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 162: /* media_query_expression  */
#line 278 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).mediaQueryExpression); }
#line 2113 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 163: /* media_query_expression_list  */
#line 281 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).mediaQueryExpressionList); }
#line 2119 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 164: /* maybe_and_media_query_expression_list  */
#line 281 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).mediaQueryExpressionList); }
#line 2125 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 166: /* media_query  */
#line 273 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).mediaQuery); }
#line 2131 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 167: /* maybe_media_list  */
#line 270 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).mediaList)) ((*yyvaluep).mediaList)->deref(); }
#line 2137 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 168: /* media_list  */
#line 270 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).mediaList)) ((*yyvaluep).mediaList)->deref(); }
#line 2143 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 172: /* media  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2149 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 173: /* supports  */
#line 345 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2155 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 184: /* keyframes  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2161 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 186: /* keyframes_rule  */
#line 289 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).keyframeRuleList); }
#line 2167 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 187: /* keyframe_rule  */
#line 286 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).keyframe)) ((*yyvaluep).keyframe)->deref(); }
#line 2173 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 188: /* key_list  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2179 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 191: /* page  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2185 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 192: /* page_selector  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2191 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 198: /* font_face  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2197 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 200: /* region  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2203 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 208: /* ruleset  */
#line 260 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { if (((*yyvaluep).rule)) ((*yyvaluep).rule)->deref(); }
#line 2209 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 210: /* selector_list  */
#line 304 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selectorList); }
#line 2215 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 213: /* nested_selector_list  */
#line 304 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selectorList); }
#line 2221 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 215: /* comma_separated_lang_ranges  */
#line 320 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).stringList); }
#line 2227 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 216: /* complex_selector_with_trailing_whitespace  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2233 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 217: /* complex_selector  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2239 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 219: /* compound_selector  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2245 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 220: /* simple_selector_list  */
#line 304 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selectorList); }
#line 2251 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 222: /* specifier_list  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2257 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 223: /* specifier  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2263 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 224: /* class  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2269 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 225: /* attrib  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2275 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 229: /* pseudo_page  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2281 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 230: /* nth_selector_ending  */
#line 305 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selectorList); }
#line 2287 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 231: /* pseudo  */
#line 301 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).selector); }
#line 2293 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 239: /* ident_list  */
#line 331 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2299 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 240: /* track_names_list  */
#line 334 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2305 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 241: /* whitespace_or_expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2311 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 242: /* maybe_expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2317 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 243: /* expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2323 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 244: /* valid_expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2329 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 247: /* term  */
#line 296 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2335 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 249: /* function  */
#line 296 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2341 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 250: /* variable_function  */
#line 296 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2347 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 252: /* calc_func_term  */
#line 296 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2353 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 255: /* calc_func_paren_expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2359 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 256: /* calc_func_expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2365 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 257: /* valid_calc_func_expr  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2371 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 258: /* calc_func_expr_list  */
#line 316 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { delete ((*yyvaluep).valueList); }
#line 2377 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 259: /* calc_function  */
#line 296 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2383 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;

    case 261: /* min_or_max_function  */
#line 296 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1257  */
      { destroy(((*yyvaluep).value)); }
#line 2389 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1257  */
        break;


      default:
        break;
    }
  YY_IGNORE_MAYBE_UNINITIALIZED_END
}




/*----------.
| yyparse.  |
`----------*/

int
yyparse (CSSParser* parser)
{
/* The lookahead symbol.  */
int yychar;


/* The semantic value of the lookahead symbol.  */
/* Default value used for initialization, for pacifying older GCCs
   or non-GCC compilers.  */
YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);

    /* Number of syntax errors so far.  */
    int yynerrs;

    int yystate;
    /* Number of tokens to shift before error messages enabled.  */
    int yyerrstatus;

    /* The stacks and their tools:
       'yyss': related to states.
       'yyvs': related to semantic values.

       Refer to the stacks through separate pointers, to allow yyoverflow
       to reallocate them elsewhere.  */

    /* The state stack.  */
    yytype_int16 yyssa[YYINITDEPTH];
    yytype_int16 *yyss;
    yytype_int16 *yyssp;

    /* The semantic value stack.  */
    YYSTYPE yyvsa[YYINITDEPTH];
    YYSTYPE *yyvs;
    YYSTYPE *yyvsp;

    YYSIZE_T yystacksize;

  int yyn;
  int yyresult;
  /* Lookahead token as an internal (translated) token number.  */
  int yytoken = 0;
  /* The variables used to return semantic value and location from the
     action routines.  */
  YYSTYPE yyval;

#if YYERROR_VERBOSE
  /* Buffer for error messages, and its allocated size.  */
  char yymsgbuf[128];
  char *yymsg = yymsgbuf;
  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
#endif

#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))

  /* The number of symbols on the RHS of the reduced rule.
     Keep to zero when no symbol should be popped.  */
  int yylen = 0;

  yyssp = yyss = yyssa;
  yyvsp = yyvs = yyvsa;
  yystacksize = YYINITDEPTH;

  YYDPRINTF ((stderr, "Starting parse\n"));

  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
  yychar = YYEMPTY; /* Cause a token to be read.  */
  goto yysetstate;

/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate.  |
`------------------------------------------------------------*/
 yynewstate:
  /* In all cases, when you get here, the value and location stacks
     have just been pushed.  So pushing a state here evens the stacks.  */
  yyssp++;

 yysetstate:
  *yyssp = yystate;

  if (yyss + yystacksize - 1 <= yyssp)
    {
      /* Get the current used size of the three stacks, in elements.  */
      YYSIZE_T yysize = yyssp - yyss + 1;

#ifdef yyoverflow
      {
        /* Give user a chance to reallocate the stack.  Use copies of
           these so that the &'s don't force the real ones into
           memory.  */
        YYSTYPE *yyvs1 = yyvs;
        yytype_int16 *yyss1 = yyss;

        /* Each stack pointer address is followed by the size of the
           data in use in that stack, in bytes.  This used to be a
           conditional around just the two extra args, but that might
           be undefined if yyoverflow is a macro.  */
        yyoverflow (YY_("memory exhausted"),
                    &yyss1, yysize * sizeof (*yyssp),
                    &yyvs1, yysize * sizeof (*yyvsp),
                    &yystacksize);

        yyss = yyss1;
        yyvs = yyvs1;
      }
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
      goto yyexhaustedlab;
# else
      /* Extend the stack our own way.  */
      if (YYMAXDEPTH <= yystacksize)
        goto yyexhaustedlab;
      yystacksize *= 2;
      if (YYMAXDEPTH < yystacksize)
        yystacksize = YYMAXDEPTH;

      {
        yytype_int16 *yyss1 = yyss;
        union yyalloc *yyptr =
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        if (! yyptr)
          goto yyexhaustedlab;
        YYSTACK_RELOCATE (yyss_alloc, yyss);
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
#  undef YYSTACK_RELOCATE
        if (yyss1 != yyssa)
          YYSTACK_FREE (yyss1);
      }
# endif
#endif /* no yyoverflow */

      yyssp = yyss + yysize - 1;
      yyvsp = yyvs + yysize - 1;

      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
                  (unsigned long int) yystacksize));

      if (yyss + yystacksize - 1 <= yyssp)
        YYABORT;
    }

  YYDPRINTF ((stderr, "Entering state %d\n", yystate));

  if (yystate == YYFINAL)
    YYACCEPT;

  goto yybackup;

/*-----------.
| yybackup.  |
`-----------*/
yybackup:

  /* Do appropriate processing given the current state.  Read a
     lookahead token if we need one and don't already have one.  */

  /* First try to decide what to do without reference to lookahead token.  */
  yyn = yypact[yystate];
  if (yypact_value_is_default (yyn))
    goto yydefault;

  /* Not known => get a lookahead token if don't already have one.  */

  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
  if (yychar == YYEMPTY)
    {
      YYDPRINTF ((stderr, "Reading a token: "));
      yychar = yylex (&yylval, parser);
    }

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }
  else
    {
      yytoken = YYTRANSLATE (yychar);
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
    }

  /* If the proper action on seeing token YYTOKEN is to reduce or to
     detect an error, take that action.  */
  yyn += yytoken;
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
    goto yydefault;
  yyn = yytable[yyn];
  if (yyn <= 0)
    {
      if (yytable_value_is_error (yyn))
        goto yyerrlab;
      yyn = -yyn;
      goto yyreduce;
    }

  /* Count tokens shifted since error; after three, turn off error
     status.  */
  if (yyerrstatus)
    yyerrstatus--;

  /* Shift the lookahead token.  */
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);

  /* Discard the shifted token.  */
  yychar = YYEMPTY;

  yystate = yyn;
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
  *++yyvsp = yylval;
  YY_IGNORE_MAYBE_UNINITIALIZED_END

  goto yynewstate;


/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state.  |
`-----------------------------------------------------------*/
yydefault:
  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;
  goto yyreduce;


/*-----------------------------.
| yyreduce -- Do a reduction.  |
`-----------------------------*/
yyreduce:
  /* yyn is the number of a rule to reduce with.  */
  yylen = yyr2[yyn];

  /* If YYLEN is nonzero, implement the default value of the action:
     '$$ = $1'.

     Otherwise, the following line sets YYVAL to garbage.
     This behavior is undocumented and Bison
     users should not rely upon it.  Assigning to YYVAL
     unconditionally makes the parser a bit smaller, and it avoids a
     GCC warning that YYVAL may be used uninitialized.  */
  yyval = yyvsp[1-yylen];


  YY_REDUCE_PRINT (yyn);
  switch (yyn)
    {
        case 10:
#line 370 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->m_rule = adoptRef((yyvsp[-2].rule)); }
#line 2657 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 11:
#line 372 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->m_keyframe = adoptRef((yyvsp[-2].keyframe)); }
#line 2663 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 13:
#line 377 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[-1].valueList)) {
            parser->m_valueList = std::unique_ptr<CSSParserValueList>((yyvsp[-1].valueList));
            int oldParsedProperties = parser->m_parsedProperties.size();
            if (!parser->parseValue(parser->m_id, parser->m_important))
                parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
            parser->m_valueList = nullptr;
        }
    }
#line 2677 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 14:
#line 388 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->m_mediaQuery = std::unique_ptr<MediaQuery>((yyvsp[-1].mediaQuery)); }
#line 2683 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 15:
#line 391 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[-1].selectorList)) {
            if (parser->m_selectorListForParseSelector)
                parser->m_selectorListForParseSelector->adoptSelectorVector(*(yyvsp[-1].selectorList));
            parser->recycleSelectorVector(std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>>((yyvsp[-1].selectorList)));
        }
    }
#line 2695 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 16:
#line 400 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->m_supportsCondition = (yyvsp[-1].boolean); }
#line 2701 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 32:
#line 418 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
     if (parser->m_styleSheet)
         parser->m_styleSheet->parserSetEncodingFromCharsetRule((yyvsp[-2].string));
     if (parser->isExtractingSourceData() && parser->m_currentRuleDataStack->isEmpty() && parser->m_ruleSourceDataResult)
         parser->addNewRuleToSourceTree(CSSRuleSourceData::createUnknown());
  }
#line 2712 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 38:
#line 433 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if (RefPtr<StyleRuleBase> rule = adoptRef((yyvsp[-1].rule))) {
            if (parser->m_styleSheet)
                parser->m_styleSheet->parserAppendRule(rule.releaseNonNull());
        }
    }
#line 2723 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 44:
#line 447 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2729 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 48:
#line 457 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = (yyvsp[0].rule);
        parser->m_hadSyntacticallyValidCSSRule = true;
    }
#line 2738 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 49:
#line 461 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2744 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 50:
#line 462 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2750 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 51:
#line 463 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2756 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 52:
#line 467 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.ruleList) = nullptr; }
#line 2762 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 53:
#line 468 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
      (yyval.ruleList) = (yyvsp[-2].ruleList);
      if (RefPtr<StyleRuleBase> rule = adoptRef((yyvsp[-1].rule))) {
          if (!(yyval.ruleList))
              (yyval.ruleList) = new Vector<RefPtr<StyleRuleBase>>;
          (yyval.ruleList)->append(WTFMove(rule));
      }
  }
#line 2775 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 54:
#line 479 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.ruleList) = nullptr; }
#line 2781 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 55:
#line 480 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
      (yyval.ruleList) = (yyvsp[-2].ruleList);
      if (RefPtr<StyleRuleBase> rule = adoptRef((yyvsp[-1].rule))) {
          if (!(yyval.ruleList))
              (yyval.ruleList) = new Vector<RefPtr<StyleRuleBase>>;
          (yyval.ruleList)->append(WTFMove(rule));
      }
  }
#line 2794 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 63:
#line 502 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2800 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 64:
#line 502 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2806 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 65:
#line 502 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.rule) = nullptr; }
#line 2812 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 68:
#line 505 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderEnd();
        parser->markRuleBodyStart();
    }
#line 2821 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 69:
#line 512 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::IMPORT_RULE);
    }
#line 2829 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 70:
#line 518 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = parser->createImportRule((yyvsp[-3].string), adoptRef((yyvsp[-1].mediaList))).leakRef();
    }
#line 2837 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 71:
#line 521 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = parser->createImportRule((yyvsp[-3].string), adoptRef((yyvsp[-1].mediaList))).leakRef();
    }
#line 2845 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 72:
#line 524 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
        if ((yyvsp[-1].mediaList))
            (yyvsp[-1].mediaList)->deref();
    }
#line 2856 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 73:
#line 530 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
    }
#line 2865 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 74:
#line 534 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
    }
#line 2874 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 75:
#line 541 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->addNamespace((yyvsp[-3].string), (yyvsp[-2].string)); }
#line 2880 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 79:
#line 547 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.string).clear(); }
#line 2886 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 83:
#line 551 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = nullptr; }
#line 2892 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 84:
#line 551 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = (yyvsp[-1].valueList); }
#line 2898 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 85:
#line 553 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserValueList> mediaValue((yyvsp[-1].valueList));
        (yyvsp[-3].string).convertToASCIILowercaseInPlace();
        (yyval.mediaQueryExpression) = new MediaQueryExpression((yyvsp[-3].string), mediaValue.get());
    }
#line 2908 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 86:
#line 561 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[-3].mediaQueryRestrictor) != MediaQuery::None) {


            delete (yyvsp[-1].mediaQueryExpression);
            (yyval.mediaQueryExpression) = new MediaQueryExpression;
        } else
            (yyval.mediaQueryExpression) = (yyvsp[-1].mediaQueryExpression);
    }
#line 2922 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 87:
#line 573 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryExpressionList) = new Vector<MediaQueryExpression>;
        (yyval.mediaQueryExpressionList)->append(WTFMove(*(yyvsp[0].mediaQueryExpression)));
        delete (yyvsp[0].mediaQueryExpression);
    }
#line 2932 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 88:
#line 578 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryExpressionList) = (yyvsp[-4].mediaQueryExpressionList);
        (yyval.mediaQueryExpressionList)->append(WTFMove(*(yyvsp[0].mediaQueryExpression)));
        delete (yyvsp[0].mediaQueryExpression);
    }
#line 2942 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 89:
#line 586 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryExpressionList) = new Vector<MediaQueryExpression>;
    }
#line 2950 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 90:
#line 589 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryExpressionList) = (yyvsp[0].mediaQueryExpressionList);
    }
#line 2958 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 91:
#line 595 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryRestrictor) = MediaQuery::None;
    }
#line 2966 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 92:
#line 598 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryRestrictor) = MediaQuery::Only;
    }
#line 2974 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 93:
#line 601 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQueryRestrictor) = MediaQuery::Not;
    }
#line 2982 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 94:
#line 607 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaQuery) = new MediaQuery(MediaQuery::None, "all", WTFMove(*(yyvsp[0].mediaQueryExpressionList)));
        delete (yyvsp[0].mediaQueryExpressionList);
    }
#line 2991 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 95:
#line 612 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyvsp[-2].string).convertToASCIILowercaseInPlace();
        (yyval.mediaQuery) = new MediaQuery((yyvsp[-4].mediaQueryRestrictor), (yyvsp[-2].string), WTFMove(*(yyvsp[0].mediaQueryExpressionList)));
        delete (yyvsp[0].mediaQueryExpressionList);
    }
#line 3001 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 96:
#line 619 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.mediaList) = &MediaQuerySet::create().leakRef(); }
#line 3007 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 98:
#line 622 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaList) = &MediaQuerySet::create().leakRef();
        (yyval.mediaList)->addMediaQuery(WTFMove(*(yyvsp[0].mediaQuery)));
        delete (yyvsp[0].mediaQuery);
        parser->updateLastMediaLine(*(yyval.mediaList));
    }
#line 3018 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 99:
#line 628 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaList) = (yyvsp[-3].mediaList);
        if ((yyval.mediaList)) {
            (yyval.mediaList)->addMediaQuery(WTFMove(*(yyvsp[0].mediaQuery)));
            parser->updateLastMediaLine(*(yyval.mediaList));
        }
        delete (yyvsp[0].mediaQuery);
    }
#line 3031 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 100:
#line 636 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.mediaList) = nullptr;
        if ((yyvsp[-1].mediaList))
            (yyvsp[-1].mediaList)->deref();
    }
#line 3041 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 101:
#line 644 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleBodyStart();
    }
#line 3049 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 102:
#line 650 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::MEDIA_RULE);
    }
#line 3057 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 103:
#line 656 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderEnd();
    }
#line 3065 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 104:
#line 662 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = &parser->createMediaRule(adoptRef((yyvsp[-6].mediaList)), std::unique_ptr<Vector<RefPtr<StyleRuleBase>>>((yyvsp[-1].ruleList)).get()).leakRef();
    }
#line 3073 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 105:
#line 665 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = &parser->createEmptyMediaRule(std::unique_ptr<Vector<RefPtr<StyleRuleBase>>>((yyvsp[-1].ruleList)).get()).leakRef();
    }
#line 3081 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 106:
#line 668 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
    }
#line 3090 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 107:
#line 675 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = &parser->createSupportsRule((yyvsp[-6].boolean), std::unique_ptr<Vector<RefPtr<StyleRuleBase>>>((yyvsp[-1].ruleList)).get()).leakRef();
    }
#line 3098 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 108:
#line 678 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
        parser->popSupportsRuleData();
    }
#line 3108 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 109:
#line 686 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
    }
#line 3116 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 110:
#line 689 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
    }
#line 3124 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 111:
#line 695 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::SUPPORTS_RULE);
        parser->markSupportsRuleHeaderStart();
    }
#line 3133 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 112:
#line 702 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderEnd();
        parser->markSupportsRuleHeaderEnd();
    }
#line 3142 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 117:
#line 710 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = !(yyvsp[0].boolean); }
#line 3148 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 118:
#line 713 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[-3].boolean) && (yyvsp[0].boolean); }
#line 3154 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 119:
#line 714 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[-3].boolean) && (yyvsp[0].boolean); }
#line 3160 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 120:
#line 718 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[-3].boolean) || (yyvsp[0].boolean); }
#line 3166 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 121:
#line 719 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[-3].boolean) || (yyvsp[0].boolean); }
#line 3172 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 122:
#line 723 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[-2].boolean); }
#line 3178 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 123:
#line 724 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[0].boolean); }
#line 3184 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 124:
#line 725 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = false; }
#line 3190 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 125:
#line 729 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
        CSSParser* p = static_cast<CSSParser*>(parser);
        std::unique_ptr<CSSParserValueList> propertyValue((yyvsp[-3].valueList));
        if ((yyvsp[-6].id) && propertyValue) {
            p->m_valueList = WTFMove(propertyValue);
            int oldParsedProperties = p->m_parsedProperties.size();
            (yyval.boolean) = p->parseValue((yyvsp[-6].id), (yyvsp[-2].boolean));

            if ((yyval.boolean))
                p->rollbackLastProperties(p->m_parsedProperties.size() - oldParsedProperties);
            p->m_valueList = nullptr;
        }
        p->markPropertyEnd((yyvsp[-2].boolean), false);
    }
#line 3210 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 126:
#line 745 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
        CSSParser* p = static_cast<CSSParser*>(parser);
        std::unique_ptr<CSSParserValueList> propertyValue((yyvsp[-3].valueList));
        if (propertyValue) {
            parser->m_valueList = WTFMove(propertyValue);
            int oldParsedProperties = p->m_parsedProperties.size();
            p->setCustomPropertyName((yyvsp[-6].string));
            (yyval.boolean) = p->parseValue(CSSPropertyCustom, (yyvsp[-2].boolean));
            if ((yyval.boolean))
                p->rollbackLastProperties(p->m_parsedProperties.size() - oldParsedProperties);
            p->m_valueList = nullptr;
        }
        p->markPropertyEnd((yyvsp[-2].boolean), false);
    }
#line 3230 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 127:
#line 763 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::KEYFRAMES_RULE);
    }
#line 3238 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 128:
#line 769 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = &parser->createKeyframesRule((yyvsp[-6].string), std::unique_ptr<Vector<RefPtr<StyleKeyframe>>>((yyvsp[-1].keyframeRuleList))).leakRef();
    }
#line 3246 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 131:
#line 777 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.keyframeRuleList) = new Vector<RefPtr<StyleKeyframe>>; }
#line 3252 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 132:
#line 778 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.keyframeRuleList) = (yyvsp[-2].keyframeRuleList);
        if (RefPtr<StyleKeyframe> keyframe = adoptRef((yyvsp[-1].keyframe)))
            (yyval.keyframeRuleList)->append(WTFMove(keyframe));
    }
#line 3262 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 133:
#line 785 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.keyframe) = parser->createKeyframe(*std::unique_ptr<CSSParserValueList>((yyvsp[-5].valueList))).leakRef(); }
#line 3268 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 134:
#line 788 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = new CSSParserValueList;
        (yyval.valueList)->addValue((yyvsp[0].value));
    }
#line 3277 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 135:
#line 792 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = (yyvsp[-4].valueList);
        if ((yyval.valueList))
            (yyval.valueList)->addValue((yyvsp[0].value));
    }
#line 3287 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 136:
#line 800 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).isInt = false;
        (yyval.value).fValue = (yyvsp[-1].integer) * (yyvsp[0].number);
        (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER;
    }
#line 3298 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 137:
#line 806 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).isInt = false;
        if (equalLettersIgnoringASCIICase((yyvsp[0].string), "from"))
            (yyval.value).fValue = 0;
        else if (equalLettersIgnoringASCIICase((yyvsp[0].string), "to"))
            (yyval.value).fValue = 100;
        else {
            (yyval.value).unit = 0;
            YYERROR;
        }
        (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER;
    }
#line 3316 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 138:
#line 819 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).unit = 0;
    }
#line 3324 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 139:
#line 825 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::PAGE_RULE);
    }
#line 3332 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 140:
#line 832 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[-6].selector))
            (yyval.rule) = parser->createPageRule(std::unique_ptr<CSSParserSelector>((yyvsp[-6].selector))).leakRef();
        else {

            parser->clearProperties();

            (yyval.rule) = nullptr;
            parser->popRuleData();
        }
    }
#line 3348 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 141:
#line 843 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->popRuleData();
        (yyval.rule) = nullptr;
    }
#line 3357 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 142:
#line 847 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->popRuleData();
        (yyval.rule) = nullptr;
    }
#line 3366 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 143:
#line 854 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector(QualifiedName(nullAtom, (yyvsp[0].string), parser->m_defaultNamespace));
        (yyval.selector)->setForPage();
    }
#line 3375 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 144:
#line 858 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = (yyvsp[0].selector);
        if ((yyval.selector)) {
            (yyval.selector)->prependTagSelector(QualifiedName(nullAtom, (yyvsp[-1].string), parser->m_defaultNamespace));
            (yyval.selector)->setForPage();
        }
    }
#line 3387 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 145:
#line 865 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = (yyvsp[0].selector);
        if ((yyval.selector))
            (yyval.selector)->setForPage();
    }
#line 3397 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 146:
#line 870 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setForPage();
    }
#line 3406 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 149:
#line 879 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->startDeclarationsForMarginBox();
    }
#line 3414 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 150:
#line 881 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->createMarginAtRule((yyvsp[-6].marginBox));
    }
#line 3422 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 151:
#line 887 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::TopLeftCornerMarginBox;
    }
#line 3430 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 152:
#line 890 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::TopLeftMarginBox;
    }
#line 3438 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 153:
#line 893 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::TopCenterMarginBox;
    }
#line 3446 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 154:
#line 896 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::TopRightMarginBox;
    }
#line 3454 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 155:
#line 899 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::TopRightCornerMarginBox;
    }
#line 3462 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 156:
#line 902 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::BottomLeftCornerMarginBox;
    }
#line 3470 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 157:
#line 905 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::BottomLeftMarginBox;
    }
#line 3478 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 158:
#line 908 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::BottomCenterMarginBox;
    }
#line 3486 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 159:
#line 911 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::BottomRightMarginBox;
    }
#line 3494 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 160:
#line 914 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::BottomRightCornerMarginBox;
    }
#line 3502 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 161:
#line 917 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::LeftTopMarginBox;
    }
#line 3510 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 162:
#line 920 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::LeftMiddleMarginBox;
    }
#line 3518 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 163:
#line 923 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::LeftBottomMarginBox;
    }
#line 3526 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 164:
#line 926 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::RightTopMarginBox;
    }
#line 3534 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 165:
#line 929 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::RightMiddleMarginBox;
    }
#line 3542 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 166:
#line 932 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.marginBox) = CSSSelector::RightBottomMarginBox;
    }
#line 3550 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 167:
#line 938 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::FONT_FACE_RULE);
    }
#line 3558 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 168:
#line 944 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = parser->createFontFaceRule().leakRef();
    }
#line 3566 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 169:
#line 947 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
    }
#line 3575 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 170:
#line 951 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = nullptr;
        parser->popRuleData();
    }
#line 3584 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 171:
#line 957 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::REGION_RULE);
    }
#line 3592 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 172:
#line 963 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<Vector<RefPtr<StyleRuleBase>>> ruleList((yyvsp[-1].ruleList));
        if ((yyvsp[-6].selectorList))
            (yyval.rule) = parser->createRegionRule(std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>>((yyvsp[-6].selectorList)).get(), ruleList.get()).leakRef();
        else {
            (yyval.rule) = nullptr;
            parser->popRuleData();
        }
    }
#line 3606 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 173:
#line 975 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.relation) = CSSParserSelectorCombinator::DirectAdjacent; }
#line 3612 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 174:
#line 976 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.relation) = CSSParserSelectorCombinator::IndirectAdjacent; }
#line 3618 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 175:
#line 977 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.relation) = CSSParserSelectorCombinator::Child; }
#line 3624 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 177:
#line 983 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.integer) = 1; }
#line 3630 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 178:
#line 985 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.integer) = -1; }
#line 3636 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 179:
#line 985 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.integer) = 1; }
#line 3642 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 180:
#line 987 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->markPropertyStart(); }
#line 3648 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 181:
#line 990 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markRuleHeaderStart(CSSRuleSourceData::STYLE_RULE);
        parser->markSelectorStart();
    }
#line 3657 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 182:
#line 996 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->markRuleHeaderEnd(); }
#line 3663 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 183:
#line 998 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->markSelectorEnd(); }
#line 3669 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 184:
#line 1001 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.rule) = parser->createStyleRule((yyvsp[-7].selectorList)).leakRef();
        parser->recycleSelectorVector(std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>>((yyvsp[-7].selectorList)));
    }
#line 3678 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 185:
#line 1007 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->markSelectorStart(); }
#line 3684 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 186:
#line 1010 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = nullptr;
        if ((yyvsp[0].selector)) {
            (yyval.selectorList) = parser->createSelectorVector().release();
            (yyval.selectorList)->append(std::unique_ptr<CSSParserSelector>((yyvsp[0].selector)));
            parser->updateLastSelectorLineAndPosition();
        }
    }
#line 3697 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 187:
#line 1018 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>> selectorList((yyvsp[-5].selectorList));
        std::unique_ptr<CSSParserSelector> selector((yyvsp[0].selector));
        (yyval.selectorList) = nullptr;
        if (selectorList && selector) {
            (yyval.selectorList) = selectorList.release();
            (yyval.selectorList)->append(WTFMove(selector));
            parser->updateLastSelectorLineAndPosition();
        }
    }
#line 3712 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 188:
#line 1028 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = nullptr;
        delete (yyvsp[-1].selectorList);
    }
#line 3721 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 189:
#line 1034 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->startNestedSelectorList(); }
#line 3727 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 190:
#line 1035 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->endNestedSelectorList(); }
#line 3733 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 191:
#line 1038 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = (yyvsp[-1].selectorList);
    }
#line 3741 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 194:
#line 1046 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.stringList) = new Vector<CSSParserString>;
        (yyval.stringList)->append((yyvsp[0].string));
    }
#line 3750 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 195:
#line 1050 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.stringList) = (yyvsp[-4].stringList);
        if ((yyval.stringList))
            (yyvsp[-4].stringList)->append((yyvsp[0].string));
    }
#line 3760 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 196:
#line 1055 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.stringList) = nullptr;
        delete (yyvsp[-1].stringList);
    }
#line 3769 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 200:
#line 1067 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserSelector> left((yyvsp[-1].selector));
        std::unique_ptr<CSSParserSelector> right((yyvsp[0].selector));
        (yyval.selector) = nullptr;
        if (left && right) {
            right->appendTagHistory(CSSParserSelectorCombinator::DescendantSpace, WTFMove(left));
            (yyval.selector) = right.release();
        }
    }
#line 3783 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 201:
#line 1076 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserSelector> left((yyvsp[-2].selector));
        std::unique_ptr<CSSParserSelector> right((yyvsp[0].selector));
        (yyval.selector) = nullptr;
        if (left && right) {
            right->appendTagHistory((yyvsp[-1].relation), WTFMove(left));
            (yyval.selector) = right.release();
        }
    }
#line 3797 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 202:
#line 1085 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        delete (yyvsp[-1].selector);
    }
#line 3806 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 203:
#line 1092 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        static LChar emptyString = '\0';
        (yyval.string).init(&emptyString, 0);
    }
#line 3815 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 204:
#line 1096 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { static LChar star = '*'; (yyval.string).init(&star, 1); }
#line 3821 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 206:
#line 1101 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector(QualifiedName(nullAtom, (yyvsp[0].string), parser->m_defaultNamespace));
    }
#line 3829 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 207:
#line 1104 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = (yyvsp[0].selector);
        if ((yyval.selector)) {
            QualifiedName elementName(nullAtom, (yyvsp[-1].string), parser->m_defaultNamespace);
            parser->rewriteSpecifiersWithElementName(elementName, *(yyval.selector));
        }
    }
#line 3841 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 208:
#line 1111 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = (yyvsp[0].selector);
        if ((yyval.selector))
            parser->rewriteSpecifiersWithNamespaceIfNeeded(*(yyval.selector));
    }
#line 3851 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 209:
#line 1116 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector(parser->determineNameInNamespace((yyvsp[-1].string), (yyvsp[0].string)));
    }
#line 3859 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 210:
#line 1119 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = (yyvsp[0].selector);
        if ((yyval.selector))
            parser->rewriteSpecifiersWithElementName((yyvsp[-2].string), (yyvsp[-1].string), *(yyval.selector));
    }
#line 3869 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 211:
#line 1124 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = (yyvsp[0].selector);
        if ((yyval.selector))
            parser->rewriteSpecifiersWithElementName((yyvsp[-1].string), starAtom, *(yyval.selector));
    }
#line 3879 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 212:
#line 1132 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = nullptr;
        if ((yyvsp[0].selector)) {
            (yyval.selectorList) = parser->createSelectorVector().release();
            (yyval.selectorList)->append(std::unique_ptr<CSSParserSelector>((yyvsp[0].selector)));
        }
    }
#line 3891 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 213:
#line 1139 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>> list((yyvsp[-4].selectorList));
        std::unique_ptr<CSSParserSelector> selector((yyvsp[0].selector));
        (yyval.selectorList) = nullptr;
        if (list && selector) {
            (yyval.selectorList) = list.release();
            (yyval.selectorList)->append(WTFMove(selector));
        }
    }
#line 3905 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 214:
#line 1148 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = nullptr;
        delete (yyvsp[-1].selectorList);
    }
#line 3914 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 215:
#line 1155 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.string) = (yyvsp[0].string);
    }
#line 3922 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 216:
#line 1158 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        static LChar star = '*';
        (yyval.string).init(&star, 1);
    }
#line 3931 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 218:
#line 1166 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserSelector> list((yyvsp[-1].selector));
        std::unique_ptr<CSSParserSelector> specifier((yyvsp[0].selector));
        (yyval.selector) = nullptr;
        if (list && specifier)
            (yyval.selector) = parser->rewriteSpecifiers(WTFMove(list), WTFMove(specifier)).release();
    }
#line 3943 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 219:
#line 1173 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        delete (yyvsp[-1].selector);
    }
#line 3952 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 220:
#line 1180 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setMatch(CSSSelector::Id);
        if (parser->m_context.mode == HTMLQuirksMode)
            (yyvsp[0].string).convertToASCIILowercaseInPlace();
        (yyval.selector)->setValue((yyvsp[0].string));
    }
#line 3964 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 221:
#line 1187 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[0].string)[0] >= '0' && (yyvsp[0].string)[0] <= '9')
            (yyval.selector) = nullptr;
        else {
            (yyval.selector) = new CSSParserSelector;
            (yyval.selector)->setMatch(CSSSelector::Id);
            if (parser->m_context.mode == HTMLQuirksMode)
                (yyvsp[0].string).convertToASCIILowercaseInPlace();
            (yyval.selector)->setValue((yyvsp[0].string));
        }
    }
#line 3980 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 225:
#line 1204 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setMatch(CSSSelector::Class);
        if (parser->m_context.mode == HTMLQuirksMode)
            (yyvsp[0].string).convertToASCIILowercaseInPlace();
        (yyval.selector)->setValue((yyvsp[0].string));
    }
#line 3992 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 226:
#line 1214 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[-2].string), nullAtom), parser->m_context.isHTMLDocument);
        (yyval.selector)->setMatch(CSSSelector::Set);
    }
#line 4002 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 227:
#line 1219 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[-7].string), nullAtom), parser->m_context.isHTMLDocument);
        (yyval.selector)->setMatch((yyvsp[-5].match));
        (yyval.selector)->setValue((yyvsp[-3].string));
        (yyval.selector)->setAttributeValueMatchingIsCaseInsensitive((yyvsp[-1].boolean));
    }
#line 4014 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 228:
#line 1226 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setAttribute(parser->determineNameInNamespace((yyvsp[-3].string), (yyvsp[-2].string)), parser->m_context.isHTMLDocument);
        (yyval.selector)->setMatch(CSSSelector::Set);
    }
#line 4024 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 229:
#line 1231 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = new CSSParserSelector;
        (yyval.selector)->setAttribute(parser->determineNameInNamespace((yyvsp[-8].string), (yyvsp[-7].string)), parser->m_context.isHTMLDocument);
        (yyval.selector)->setMatch((yyvsp[-5].match));
        (yyval.selector)->setValue((yyvsp[-3].string));
        (yyval.selector)->setAttributeValueMatchingIsCaseInsensitive((yyvsp[-1].boolean));
    }
#line 4036 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 230:
#line 1241 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if (UNLIKELY((yyvsp[-1].string).length() != 1 || !isASCIIAlphaCaselessEqual((yyvsp[-1].string)[0], 'i')))
            YYERROR;
        (yyval.boolean) = true;
    }
#line 4046 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 231:
#line 1247 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
    }
#line 4054 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 232:
#line 1252 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.match) = CSSSelector::Exact;
    }
#line 4062 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 233:
#line 1255 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.match) = CSSSelector::List;
    }
#line 4070 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 234:
#line 1258 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.match) = CSSSelector::Hyphen;
    }
#line 4078 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 235:
#line 1261 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.match) = CSSSelector::Begin;
    }
#line 4086 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 236:
#line 1264 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.match) = CSSSelector::End;
    }
#line 4094 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 237:
#line 1267 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.match) = CSSSelector::Contain;
    }
#line 4102 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 240:
#line 1275 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = CSSParserSelector::parsePagePseudoSelector((yyvsp[0].string));
    }
#line 4110 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 241:
#line 1280 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = nullptr;
    }
#line 4118 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 242:
#line 1283 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selectorList) = nullptr;
    }
#line 4126 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 243:
#line 1286 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[-2].selectorList))
            (yyval.selectorList) = (yyvsp[-2].selectorList);
        else
            YYERROR;
    }
#line 4137 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 244:
#line 1295 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector((yyvsp[0].string));
    }
#line 4145 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 245:
#line 1298 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = CSSParserSelector::parsePseudoElementSelector((yyvsp[0].string));
    }
#line 4153 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 246:
#line 1303 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = CSSParserSelector::parsePseudoElementCueFunctionSelector((yyvsp[-4].string), (yyvsp[-2].selectorList));
    }
#line 4161 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 247:
#line 1307 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = CSSParserSelector::parsePseudoElementSlottedFunctionSelector((yyvsp[-4].string), (yyvsp[-2].selector));
    }
#line 4169 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 248:
#line 1310 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = CSSParserSelector::parsePseudoClassHostFunctionSelector((yyvsp[-4].string), (yyvsp[-2].selector));
    }
#line 4177 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 249:
#line 1318 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        if ((yyvsp[-2].selectorList)) {
            auto selector = std::make_unique<CSSParserSelector>();
            selector->setMatch(CSSSelector::PseudoClass);
            selector->adoptSelectorVector(*std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>>((yyvsp[-2].selectorList)));
            selector->setPseudoClassValue((yyvsp[-4].string));
            if (selector->pseudoClassType() == CSSSelector::PseudoClassAny)
                (yyval.selector) = selector.release();
        }
    }
#line 4193 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 250:
#line 1329 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        if ((yyvsp[-2].selectorList)) {
            auto selector = std::make_unique<CSSParserSelector>();
            selector->setMatch(CSSSelector::PseudoClass);
            selector->adoptSelectorVector(*std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>>((yyvsp[-2].selectorList)));
            selector->setPseudoClassValue((yyvsp[-4].string));
            if (selector->pseudoClassType() == CSSSelector::PseudoClassMatches)
                (yyval.selector) = selector.release();
        }
    }
#line 4209 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 251:
#line 1340 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        if ((yyvsp[-2].stringList)) {
            auto selector = std::make_unique<CSSParserSelector>();
            selector->setMatch(CSSSelector::PseudoClass);
            selector->setLangArgumentList(*std::unique_ptr<Vector<CSSParserString>>((yyvsp[-2].stringList)));
            selector->setPseudoClassValue((yyvsp[-4].string));
            if (selector->pseudoClassType() == CSSSelector::PseudoClassLang)
                (yyval.selector) = selector.release();
        }
    }
#line 4225 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 252:
#line 1351 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>> ending((yyvsp[0].selectorList));
        if (selectorListDoesNotMatchAnyPseudoElement(ending.get())) {
            auto selector = std::make_unique<CSSParserSelector>();
            selector->setMatch(CSSSelector::PseudoClass);
            selector->setArgument((yyvsp[-1].string));
            selector->setPseudoClassValue((yyvsp[-3].string));
            if (ending)
                selector->adoptSelectorVector(*ending);
            CSSSelector::PseudoClassType pseudoClassType = selector->pseudoClassType();
            if (pseudoClassType == CSSSelector::PseudoClassNthChild || pseudoClassType == CSSSelector::PseudoClassNthLastChild)
                (yyval.selector) = selector.release();
        }
    }
#line 4245 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 253:
#line 1366 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>> ending((yyvsp[0].selectorList));
        if (selectorListDoesNotMatchAnyPseudoElement(ending.get())) {
            auto selector = std::make_unique<CSSParserSelector>();
            selector->setMatch(CSSSelector::PseudoClass);
            selector->setArgument(AtomicString::number((yyvsp[-2].integer) * (yyvsp[-1].number)));
            selector->setPseudoClassValue((yyvsp[-4].string));
            if (ending)
                selector->adoptSelectorVector(*ending);
            CSSSelector::PseudoClassType pseudoClassType = selector->pseudoClassType();
            if (pseudoClassType == CSSSelector::PseudoClassNthChild || pseudoClassType == CSSSelector::PseudoClassNthLastChild)
                (yyval.selector) = selector.release();
        }
    }
#line 4265 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 254:
#line 1381 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>> ending((yyvsp[0].selectorList));
        if (isValidNthToken((yyvsp[-1].string)) && selectorListDoesNotMatchAnyPseudoElement(ending.get())) {
            auto selector = std::make_unique<CSSParserSelector>();
            selector->setMatch(CSSSelector::PseudoClass);
            selector->setArgument((yyvsp[-1].string));
            selector->setPseudoClassValue((yyvsp[-3].string));
            if (ending)
               selector->adoptSelectorVector(*ending);
            CSSSelector::PseudoClassType pseudoClassType = selector->pseudoClassType();
            if (pseudoClassType == CSSSelector::PseudoClassNthChild || pseudoClassType == CSSSelector::PseudoClassNthLastChild)
                (yyval.selector) = selector.release();
        }
    }
#line 4285 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 255:
#line 1398 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        auto selector = std::make_unique<CSSParserSelector>();
        selector->setMatch(CSSSelector::PseudoClass);
        selector->setArgument((yyvsp[-2].string));
        selector->setPseudoClassValue((yyvsp[-4].string));
        if (selector->pseudoClassType() != CSSSelector::PseudoClassUnknown)
            (yyval.selector) = selector.release();
    }
#line 4299 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 256:
#line 1408 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        auto selector = std::make_unique<CSSParserSelector>();
        selector->setMatch(CSSSelector::PseudoClass);
        selector->setArgument(AtomicString::number((yyvsp[-3].integer) * (yyvsp[-2].number)));
        selector->setPseudoClassValue((yyvsp[-5].string));
        if (selector->pseudoClassType() != CSSSelector::PseudoClassUnknown)
            (yyval.selector) = selector.release();
    }
#line 4313 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 257:
#line 1418 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        auto selector = std::make_unique<CSSParserSelector>();
        selector->setMatch(CSSSelector::PseudoClass);
        selector->setArgument((yyvsp[-2].string));
        selector->setPseudoClassValue((yyvsp[-4].string));
        CSSSelector::PseudoClassType type = selector->pseudoClassType();
        if (type == CSSSelector::PseudoClassUnknown)
            selector = nullptr;
        else if (type == CSSSelector::PseudoClassNthChild ||
                 type == CSSSelector::PseudoClassNthOfType ||
                 type == CSSSelector::PseudoClassNthLastChild ||
                 type == CSSSelector::PseudoClassNthLastOfType) {
            if (!isValidNthToken((yyvsp[-2].string)))
                selector = nullptr;
        }
        (yyval.selector) = selector.release();
    }
#line 4335 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 258:
#line 1436 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.selector) = nullptr;
        if ((yyvsp[-2].selectorList)) {
            std::unique_ptr<Vector<std::unique_ptr<CSSParserSelector>>> list((yyvsp[-2].selectorList));
            if (selectorListDoesNotMatchAnyPseudoElement(list.get())) {
                auto selector = std::make_unique<CSSParserSelector>();
                selector->setMatch(CSSSelector::PseudoClass);
                selector->setPseudoClassValue((yyvsp[-4].string));
                selector->adoptSelectorVector(*list);
                if (selector->pseudoClassType() == CSSSelector::PseudoClassNot)
                    (yyval.selector) = selector.release();
            }
        }
    }
#line 4354 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 259:
#line 1453 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = false; }
#line 4360 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 261:
#line 1455 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = (yyvsp[-1].boolean) || (yyvsp[0].boolean); }
#line 4366 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 263:
#line 1457 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = false; }
#line 4372 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 265:
#line 1462 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markPropertyStart();
        (yyval.boolean) = (yyvsp[-2].boolean);
    }
#line 4381 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 266:
#line 1466 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markPropertyStart();
        (yyval.boolean) = false;
    }
#line 4390 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 267:
#line 1470 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markPropertyStart();
        (yyval.boolean) = (yyvsp[-3].boolean);
        if ((yyvsp[-2].boolean))
            (yyval.boolean) = (yyvsp[-2].boolean);
    }
#line 4401 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 268:
#line 1476 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->markPropertyStart();
        (yyval.boolean) = (yyvsp[-3].boolean);
    }
#line 4410 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 269:
#line 1483 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        parser->syntaxError((yyvsp[-1].location), CSSParser::PropertyDeclarationError);
    }
#line 4418 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 270:
#line 1489 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
        bool isPropertyParsed = false;
        std::unique_ptr<CSSParserValueList> propertyValue((yyvsp[-1].valueList));
        if (propertyValue) {
            parser->m_valueList = WTFMove(propertyValue);
            int oldParsedProperties = parser->m_parsedProperties.size();
            parser->setCustomPropertyName((yyvsp[-4].string));
            (yyval.boolean) = parser->parseValue(CSSPropertyCustom, (yyvsp[0].boolean));
            if (!(yyval.boolean))
                parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
            else
                isPropertyParsed = true;
            parser->m_valueList = nullptr;
        }
        parser->markPropertyEnd((yyvsp[0].boolean), isPropertyParsed);
    }
#line 4440 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 271:
#line 1506 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.boolean) = false;
        bool isPropertyParsed = false;
        std::unique_ptr<CSSParserValueList> propertyValue((yyvsp[-1].valueList));
        if ((yyvsp[-4].id) && propertyValue) {
            parser->m_valueList = WTFMove(propertyValue);
            int oldParsedProperties = parser->m_parsedProperties.size();
            (yyval.boolean) = parser->parseValue((yyvsp[-4].id), (yyvsp[0].boolean));
            if (!(yyval.boolean))
                parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
            else
                isPropertyParsed = true;
            parser->m_valueList = nullptr;
        }
        parser->markPropertyEnd((yyvsp[0].boolean), isPropertyParsed);
    }
#line 4461 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 272:
#line 1522 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = false; }
#line 4467 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 273:
#line 1523 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {

        parser->markPropertyEnd(false, false);
        delete (yyvsp[-2].valueList);
        (yyval.boolean) = false;
    }
#line 4478 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 274:
#line 1529 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {

        (yyval.boolean) = false;
    }
#line 4487 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 275:
#line 1533 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {

        parser->markPropertyEnd(false, false);
        (yyval.boolean) = false;
    }
#line 4497 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 276:
#line 1540 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->syntaxError((yyvsp[-1].location)); }
#line 4503 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 277:
#line 1542 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.id) = cssPropertyID((yyvsp[-1].string)); }
#line 4509 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 278:
#line 1544 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = true; }
#line 4515 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 279:
#line 1544 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.boolean) = false; }
#line 4521 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 280:
#line 1549 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = new CSSParserValueList;
        (yyval.valueList)->addValue(makeIdentValue((yyvsp[-1].string)));
    }
#line 4530 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 281:
#line 1553 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = (yyvsp[-2].valueList);
        (yyval.valueList)->addValue(makeIdentValue((yyvsp[-1].string)));
    }
#line 4539 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 282:
#line 1560 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).setFromValueList(std::make_unique<CSSParserValueList>());
    }
#line 4547 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 283:
#line 1563 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).setFromValueList(std::unique_ptr<CSSParserValueList>((yyvsp[-1].valueList)));
    }
#line 4555 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 284:
#line 1566 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 4565 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 285:
#line 1576 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        if ((yyvsp[0].valueList))
            (yyval.valueList) = (yyvsp[0].valueList);
        else {
            CSSParserValue val;
            val.id = CSSValueInvalid;
            val.unit = CSSPrimitiveValue::CSS_PARSER_WHITESPACE;
            val.string.init(emptyString());
            (yyval.valueList) = new CSSParserValueList;
            (yyval.valueList)->addValue(val);
        }
    }
#line 4582 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 286:
#line 1588 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = (yyvsp[0].valueList); }
#line 4588 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 287:
#line 1591 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = nullptr; }
#line 4594 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 288:
#line 1591 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = (yyvsp[0].valueList); }
#line 4600 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 290:
#line 1593 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = nullptr; delete (yyvsp[-1].valueList); }
#line 4606 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 291:
#line 1596 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = new CSSParserValueList;
        (yyval.valueList)->addValue((yyvsp[0].value));
    }
#line 4615 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 292:
#line 1600 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = (yyvsp[-2].valueList);
        if (!(yyval.valueList))
            destroy((yyvsp[0].value));
        else {
            if ((yyvsp[-1].character)) {
                CSSParserValue v;
                v.id = CSSValueInvalid;
                v.unit = CSSParserValue::Operator;
                v.iValue = (yyvsp[-1].character);
                (yyval.valueList)->addValue(v);
            }
            (yyval.valueList)->addValue((yyvsp[0].value));
        }
    }
#line 4635 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 294:
#line 1619 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.character) = '/'; }
#line 4641 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 295:
#line 1619 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.character) = ','; }
#line 4647 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 296:
#line 1619 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.character) = 0; }
#line 4653 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 298:
#line 1623 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value) = (yyvsp[-1].value); (yyval.value).fValue *= (yyvsp[-2].integer); }
#line 4659 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 299:
#line 1624 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = (yyvsp[-1].string); (yyval.value).unit = CSSPrimitiveValue::CSS_STRING; }
#line 4665 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 300:
#line 1625 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value) = makeIdentValue((yyvsp[-1].string)); }
#line 4671 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 301:
#line 1627 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = (yyvsp[-1].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; }
#line 4677 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 302:
#line 1628 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = (yyvsp[-1].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; }
#line 4683 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 303:
#line 1629 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = (yyvsp[-1].string); (yyval.value).unit = CSSPrimitiveValue::CSS_URI; }
#line 4689 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 304:
#line 1630 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = (yyvsp[-1].string); (yyval.value).unit = CSSPrimitiveValue::CSS_UNICODE_RANGE; }
#line 4695 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 305:
#line 1631 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = (yyvsp[-1].string); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; }
#line 4701 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 306:
#line 1632 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).string = CSSParserString(); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; }
#line 4707 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 311:
#line 1638 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
      (yyval.value).id = CSSValueInvalid; (yyval.value).unit = 0;
  }
#line 4715 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 313:
#line 1647 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).isInt = true; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; }
#line 4721 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 314:
#line 1648 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; }
#line 4727 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 315:
#line 1649 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PERCENTAGE; }
#line 4733 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 316:
#line 1650 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PX; }
#line 4739 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 317:
#line 1651 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CM; }
#line 4745 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 318:
#line 1652 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MM; }
#line 4751 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 319:
#line 1653 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_IN; }
#line 4757 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 320:
#line 1654 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PT; }
#line 4763 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 321:
#line 1655 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PC; }
#line 4769 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 322:
#line 1656 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DEG; }
#line 4775 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 323:
#line 1657 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_RAD; }
#line 4781 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 324:
#line 1658 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_GRAD; }
#line 4787 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 325:
#line 1659 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_TURN; }
#line 4793 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 326:
#line 1660 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MS; }
#line 4799 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 327:
#line 1661 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_S; }
#line 4805 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 328:
#line 1662 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_HZ; }
#line 4811 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 329:
#line 1663 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_KHZ; }
#line 4817 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 330:
#line 1664 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EMS; }
#line 4823 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 331:
#line 1665 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSParserValue::Q_EMS; }
#line 4829 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 332:
#line 1666 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EXS; }
#line 4835 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 333:
#line 1667 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
      (yyval.value).id = CSSValueInvalid;
      (yyval.value).fValue = (yyvsp[0].number);
      (yyval.value).unit = CSSPrimitiveValue::CSS_REMS;
      if (parser->m_styleSheet)
          parser->m_styleSheet->parserSetUsesRemUnits();
  }
#line 4847 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 334:
#line 1674 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CHS; }
#line 4853 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 335:
#line 1675 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_VW; }
#line 4859 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 336:
#line 1676 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_VH; }
#line 4865 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 337:
#line 1677 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_VMIN; }
#line 4871 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 338:
#line 1678 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_VMAX; }
#line 4877 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 339:
#line 1679 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DPPX; }
#line 4883 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 340:
#line 1680 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DPI; }
#line 4889 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 341:
#line 1681 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DPCM; }
#line 4895 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 342:
#line 1682 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value).id = CSSValueInvalid; (yyval.value).fValue = (yyvsp[0].number); (yyval.value).unit = CSSPrimitiveValue::CSS_FR; }
#line 4901 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 343:
#line 1686 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserFunction* f = new CSSParserFunction;
        f->name = (yyvsp[-3].string);
        f->args = std::unique_ptr<CSSParserValueList>((yyvsp[-1].valueList));
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Function;
        (yyval.value).function = f;
    }
#line 4914 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 344:
#line 1694 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserFunction* f = new CSSParserFunction;
        f->name = (yyvsp[-2].string);
        f->args = std::make_unique<CSSParserValueList>();
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Function;
        (yyval.value).function = f;
    }
#line 4927 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 345:
#line 1702 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserFunction* f = new CSSParserFunction;
        f->name = (yyvsp[-3].string);
        f->args = nullptr;
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Function;
        (yyval.value).function = f;
  }
#line 4940 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 346:
#line 1713 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserVariable* var = new CSSParserVariable;
        var->name = (yyvsp[-2].string);
        var->args = nullptr;
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Variable;
        (yyval.value).variable = var;
    }
#line 4953 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 347:
#line 1721 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserVariable* var = new CSSParserVariable;
        var->name = (yyvsp[-5].string);
        var->args = std::unique_ptr<CSSParserValueList>((yyvsp[-1].valueList));
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Variable;
        (yyval.value).variable = var;
    }
#line 4966 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 348:
#line 1729 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserVariable* var = new CSSParserVariable;
        var->name = (yyvsp[-4].string);
        var->args = std::make_unique<CSSParserValueList>();
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Variable;
        (yyval.value).variable = var;
    }
#line 4979 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 349:
#line 1738 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 4989 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 350:
#line 1743 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 4999 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 351:
#line 1748 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 5009 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 352:
#line 1753 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        delete (yyvsp[-1].valueList);
        YYERROR;
    }
#line 5020 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 353:
#line 1759 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 5030 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 357:
#line 1771 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.value) = (yyvsp[0].value); (yyval.value).fValue *= (yyvsp[-1].integer); }
#line 5036 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 359:
#line 1781 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.character) = '+';
    }
#line 5044 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 360:
#line 1784 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.character) = '-';
    }
#line 5052 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 361:
#line 1787 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.character) = '*';
    }
#line 5060 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 362:
#line 1790 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.character) = '/';
    }
#line 5068 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 365:
#line 1798 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = nullptr;
        if ((yyvsp[-2].valueList)) {
            (yyval.valueList) = (yyvsp[-2].valueList);
            CSSParserValue v;
            v.id = CSSValueInvalid;
            v.unit = CSSParserValue::Operator;
            v.iValue = '(';
            (yyval.valueList)->insertValueAt(0, v);
            v.iValue = ')';
            (yyval.valueList)->addValue(v);
        }
    }
#line 5086 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 367:
#line 1813 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.valueList) = nullptr; delete (yyvsp[-1].valueList); }
#line 5092 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 368:
#line 1816 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.valueList) = new CSSParserValueList;
        (yyval.valueList)->addValue((yyvsp[0].value));
    }
#line 5101 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 369:
#line 1820 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserValueList> expression((yyvsp[-2].valueList));
        (yyval.valueList) = nullptr;
        if (expression && (yyvsp[-1].character)) {
            (yyval.valueList) = expression.release();
            CSSParserValue v;
            v.id = CSSValueInvalid;
            v.unit = CSSParserValue::Operator;
            v.iValue = (yyvsp[-1].character);
            (yyval.valueList)->addValue(v);
            (yyval.valueList)->addValue((yyvsp[0].value));
        } else {
            destroy((yyvsp[0].value));
        }

    }
#line 5122 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 370:
#line 1836 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserValueList> left((yyvsp[-2].valueList));
        std::unique_ptr<CSSParserValueList> right((yyvsp[0].valueList));
        (yyval.valueList) = nullptr;
        if (left && (yyvsp[-1].character) && right) {
            CSSParserValue v;
            v.id = CSSValueInvalid;
            v.unit = CSSParserValue::Operator;
            v.iValue = (yyvsp[-1].character);
            left->addValue(v);
            left->extend(*right);
            (yyval.valueList) = left.release();
        }
    }
#line 5141 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 373:
#line 1855 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        std::unique_ptr<CSSParserValueList> list((yyvsp[-4].valueList));
        std::unique_ptr<CSSParserValueList> expression((yyvsp[-1].valueList));
        (yyval.valueList) = nullptr;
        if (list && expression) {
            (yyval.valueList) = list.release();
            CSSParserValue v;
            v.id = CSSValueInvalid;
            v.unit = CSSParserValue::Operator;
            v.iValue = ',';
            (yyval.valueList)->addValue(v);
            (yyval.valueList)->extend(*expression);
        }
    }
#line 5160 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 374:
#line 1872 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserFunction* f = new CSSParserFunction;
        f->name = (yyvsp[-4].string);
        f->args = std::unique_ptr<CSSParserValueList>((yyvsp[-2].valueList));
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Function;
        (yyval.value).function = f;
    }
#line 5173 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 375:
#line 1880 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 5183 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 378:
#line 1891 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        CSSParserFunction* f = new CSSParserFunction;
        f->name = (yyvsp[-3].string);
        f->args = std::unique_ptr<CSSParserValueList>((yyvsp[-1].valueList));
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = CSSParserValue::Function;
        (yyval.value).function = f;
    }
#line 5196 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 379:
#line 1899 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    {
        (yyval.value).id = CSSValueInvalid;
        (yyval.value).unit = 0;
        YYERROR;
    }
#line 5206 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 385:
#line 1914 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { parser->invalidBlockHit(); }
#line 5212 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;

  case 399:
#line 1930 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1646  */
    { (yyval.location) = parser->currentLocation(); }
#line 5218 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
    break;


#line 5222 "DerivedSources/WebCore/CSSGrammar.cpp" /* yacc.c:1646  */
      default: break;
    }
  /* User semantic actions sometimes alter yychar, and that requires
     that yytoken be updated with the new translation.  We take the
     approach of translating immediately before every use of yytoken.
     One alternative is translating here after every semantic action,
     but that translation would be missed if the semantic action invokes
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
     incorrect destructor might then be invoked immediately.  In the
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
     to an incorrect destructor call or verbose syntax error message
     before the lookahead is translated.  */
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);

  YYPOPSTACK (yylen);
  yylen = 0;
  YY_STACK_PRINT (yyss, yyssp);

  *++yyvsp = yyval;

  /* Now 'shift' the result of the reduction.  Determine what state
     that goes to, based on the state we popped back to and the rule
     number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTOKENS];

  goto yynewstate;


/*--------------------------------------.
| yyerrlab -- here on detecting error.  |
`--------------------------------------*/
yyerrlab:
  /* Make sure we have latest lookahead translation.  See comments at
     user semantic actions for why this is necessary.  */
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);

  /* If not already recovering from an error, report this error.  */
  if (!yyerrstatus)
    {
      ++yynerrs;
#if ! YYERROR_VERBOSE
      yyerror (parser, YY_("syntax error"));
#else
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
                                        yyssp, yytoken)
      {
        char const *yymsgp = YY_("syntax error");
        int yysyntax_error_status;
        yysyntax_error_status = YYSYNTAX_ERROR;
        if (yysyntax_error_status == 0)
          yymsgp = yymsg;
        else if (yysyntax_error_status == 1)
          {
            if (yymsg != yymsgbuf)
              YYSTACK_FREE (yymsg);
            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
            if (!yymsg)
              {
                yymsg = yymsgbuf;
                yymsg_alloc = sizeof yymsgbuf;
                yysyntax_error_status = 2;
              }
            else
              {
                yysyntax_error_status = YYSYNTAX_ERROR;
                yymsgp = yymsg;
              }
          }
        yyerror (parser, yymsgp);
        if (yysyntax_error_status == 2)
          goto yyexhaustedlab;
      }
# undef YYSYNTAX_ERROR
#endif
    }



  if (yyerrstatus == 3)
    {
      /* If just tried and failed to reuse lookahead token after an
         error, discard it.  */

      if (yychar <= YYEOF)
        {
          /* Return failure if at end of input.  */
          if (yychar == YYEOF)
            YYABORT;
        }
      else
        {
          yydestruct ("Error: discarding",
                      yytoken, &yylval, parser);
          yychar = YYEMPTY;
        }
    }

  /* Else will try to reuse lookahead token after shifting the error
     token.  */
  goto yyerrlab1;


/*---------------------------------------------------.
| yyerrorlab -- error raised explicitly by YYERROR.  |
`---------------------------------------------------*/
yyerrorlab:

  /* Pacify compilers like GCC when the user code never invokes
     YYERROR and the label yyerrorlab therefore never appears in user
     code.  */
  if (/*CONSTCOND*/ 0)
     goto yyerrorlab;

  /* Do not reclaim the symbols of the rule whose action triggered
     this YYERROR.  */
  YYPOPSTACK (yylen);
  yylen = 0;
  YY_STACK_PRINT (yyss, yyssp);
  yystate = *yyssp;
  goto yyerrlab1;


/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
`-------------------------------------------------------------*/
yyerrlab1:
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */

  for (;;)
    {
      yyn = yypact[yystate];
      if (!yypact_value_is_default (yyn))
        {
          yyn += YYTERROR;
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
            {
              yyn = yytable[yyn];
              if (0 < yyn)
                break;
            }
        }

      /* Pop the current state because it cannot handle the error token.  */
      if (yyssp == yyss)
        YYABORT;


      yydestruct ("Error: popping",
                  yystos[yystate], yyvsp, parser);
      YYPOPSTACK (1);
      yystate = *yyssp;
      YY_STACK_PRINT (yyss, yyssp);
    }

  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
  *++yyvsp = yylval;
  YY_IGNORE_MAYBE_UNINITIALIZED_END


  /* Shift the error token.  */
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);

  yystate = yyn;
  goto yynewstate;


/*-------------------------------------.
| yyacceptlab -- YYACCEPT comes here.  |
`-------------------------------------*/
yyacceptlab:
  yyresult = 0;
  goto yyreturn;

/*-----------------------------------.
| yyabortlab -- YYABORT comes here.  |
`-----------------------------------*/
yyabortlab:
  yyresult = 1;
  goto yyreturn;

#if !defined yyoverflow || YYERROR_VERBOSE
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here.  |
`-------------------------------------------------*/
yyexhaustedlab:
  yyerror (parser, YY_("memory exhausted"));
  yyresult = 2;
  /* Fall through.  */
#endif

yyreturn:
  if (yychar != YYEMPTY)
    {
      /* Make sure we have latest lookahead translation.  See comments at
         user semantic actions for why this is necessary.  */
      yytoken = YYTRANSLATE (yychar);
      yydestruct ("Cleanup: discarding lookahead",
                  yytoken, &yylval, parser);
    }
  /* Do not reclaim the symbols of the rule whose action triggered
     this YYABORT or YYACCEPT.  */
  YYPOPSTACK (yylen);
  YY_STACK_PRINT (yyss, yyssp);
  while (yyssp != yyss)
    {
      yydestruct ("Cleanup: popping",
                  yystos[*yyssp], yyvsp, parser);
      YYPOPSTACK (1);
    }
#ifndef yyoverflow
  if (yyss != yyssa)
    YYSTACK_FREE (yyss);
#endif
#if YYERROR_VERBOSE
  if (yymsg != yymsgbuf)
    YYSTACK_FREE (yymsg);
#endif
  return yyresult;
}
#line 1940 "DerivedSources/WebCore/CSSGrammar.y" /* yacc.c:1906  */

