diff --git a/src/main/jay/grammars/php.jay b/src/main/jay/grammars/php.jay index 4ea8c05dc..50f061d05 100644 --- a/src/main/jay/grammars/php.jay +++ b/src/main/jay/grammars/php.jay @@ -662,8 +662,8 @@ expression: | '@' expression { $$= $yyLex->create(new SilenceOperatorNode($2)); } - | T_FUNCTION '(' lambda_input ')' '{' statements_opt '}' { - $$= $yyLex->create(new LambdaNode($3, (array)$6)); + | T_FUNCTION '(' lambda_input ')' lambda_uses_opt '{' statements_opt '}' { + $$= $yyLex->create(new LambdaNode($3, (array)$7, $5)); } | '(' expression ')' chain_opt { if ($4) { @@ -689,6 +689,11 @@ lambda_input_parameter: T_VARIABLE initialization_opt { $$= array('name' => $1); $2 && $$['default']= $2; } ; +lambda_uses_opt: + /* empty */ { $$= array(); } + | T_USE '(' lambda_input_parameters ')' { $$= $3; } +; + literal: scalar | T_ARRAY '(' { $p= $yyLex->position; } map_or_list ')' { $4->position= $p; $4->type= NULL; $$= $4; } diff --git a/src/main/php/xp/compiler/ast/LambdaNode.class.php b/src/main/php/xp/compiler/ast/LambdaNode.class.php index 77a886b88..0222de628 100644 --- a/src/main/php/xp/compiler/ast/LambdaNode.class.php +++ b/src/main/php/xp/compiler/ast/LambdaNode.class.php @@ -6,15 +6,18 @@ class LambdaNode extends Node { public $parameters; public $statements; + public $uses; /** * Constructor * * @param xp.compiler.ast.Node[] parameters * @param xp.compiler.ast.Node[] statements + * @param xp.compiler.ast.Node[] uses */ - public function __construct(array $parameters, array $statements) { + public function __construct(array $parameters, array $statements, $uses= null) { $this->parameters= $parameters; $this->statements= $statements; + $this->uses= $uses; } } diff --git a/src/main/php/xp/compiler/emit/php/V54Emitter.class.php b/src/main/php/xp/compiler/emit/php/V54Emitter.class.php index f665873d4..95f6b2f46 100644 --- a/src/main/php/xp/compiler/emit/php/V54Emitter.class.php +++ b/src/main/php/xp/compiler/emit/php/V54Emitter.class.php @@ -212,17 +212,6 @@ protected function emitArm($b, $arm) { */ protected function emitLambda($b, $lambda) { - // Capture all local variables and parameters of containing scope which - // are also used inside the lambda by value. - $finder= new \xp\compiler\ast\LocalVariableFinder(); - foreach ($finder->variablesIn((array)$this->scope[0]->routine->body) as $variable) { - $finder->including($variable); - } - foreach ($this->scope[0]->routine->parameters as $param) { - $finder->including($param['name']); - } - $finder->excluding('*'); - // Parameters $b->append('function('); $s= sizeof($lambda->parameters)- 1; @@ -236,8 +225,24 @@ protected function emitLambda($b, $lambda) { } $b->append(')'); - // Use variables - if ($capture= $finder->variablesIn($lambda->statements)) { + // If not explicitely stated: Capture all local variables and parameters of + // containing scope which are also used inside the lambda by value. + if (null === $lambda->uses) { + $finder= new \xp\compiler\ast\LocalVariableFinder(); + foreach ($finder->variablesIn((array)$this->scope[0]->routine->body) as $variable) { + $finder->including($variable); + } + foreach ($this->scope[0]->routine->parameters as $param) { + $finder->including($param['name']); + } + $finder->excluding('*'); + + // Use variables + if ($capture= $finder->variablesIn($lambda->statements)) { + $b->append(' use($')->append(implode(', $', $capture))->append(')'); + } + } else if ($lambda->uses) { + $capture= array_map(function($var) { return $var->name; }, $lambda->uses); $b->append(' use($')->append(implode(', $', $capture))->append(')'); } diff --git a/src/main/php/xp/compiler/syntax/php/Parser.class.php b/src/main/php/xp/compiler/syntax/php/Parser.class.php index 680281507..dcff6b96e 100644 --- a/src/main/php/xp/compiler/syntax/php/Parser.class.php +++ b/src/main/php/xp/compiler/syntax/php/Parser.class.php @@ -166,16 +166,16 @@ class Parser extends \text\parser\generic\AbstractParser { 72, 72, 26, 74, 26, 75, 26, 76, 26, 77, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 83, 83, 84, 84, 85, 38, 87, 38, 25, 25, - 25, 25, 25, 25, 86, 86, 86, 86, 88, 88, - 90, 90, 89, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, - 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, - 82, 82, 73, 73, 91, 91, 93, 92, 94, 92, - 92, 92, 92, 95, 92, 96, 92, 31, 31, 10, - 97, 17, 17, 33, 33, 98, 98, 99, 99, 99, - 99, 99, 99, + 83, 83, 85, 85, 86, 84, 84, 38, 88, 38, + 25, 25, 25, 25, 25, 25, 87, 87, 87, 87, + 89, 89, 91, 91, 90, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, + 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, + 81, 81, 82, 82, 73, 73, 92, 92, 94, 93, + 95, 93, 93, 93, 93, 96, 93, 97, 93, 31, + 31, 10, 98, 17, 17, 33, 33, 99, 99, 100, + 100, 100, 100, 100, 100, ); protected static $yyLen= array(2, 3, 0, 0, 4, 0, 1, 1, 2, 3, 1, @@ -192,1161 +192,1163 @@ class Parser extends \text\parser\generic\AbstractParser { 9, 0, 1, 1, 3, 0, 1, 4, 4, 1, 4, 1, 2, 0, 3, 0, 3, 0, 5, 0, 6, 2, 1, 2, 4, 1, 1, 1, 1, 1, - 5, 3, 3, 3, 3, 4, 4, 2, 7, 4, - 0, 1, 1, 3, 2, 1, 0, 5, 1, 1, - 1, 1, 1, 1, 0, 1, 1, 1, 1, 3, - 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 3, 3, 3, 3, 4, 4, 2, 8, 4, + 0, 1, 1, 3, 2, 0, 4, 1, 0, 5, + 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, + 1, 3, 0, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, - 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 1, 1, 2, 0, 4, 0, 4, - 2, 2, 4, 0, 6, 0, 4, 1, 1, 1, - 1, 1, 3, 0, 1, 1, 2, 1, 1, 1, - 1, 1, 1, + 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 1, 1, 2, 0, 4, + 0, 4, 2, 2, 4, 0, 6, 0, 4, 1, + 1, 1, 1, 1, 3, 0, 1, 1, 2, 1, + 1, 1, 1, 1, 1, ); protected static $yyDefRed= array(0, 3, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 238, 240, 239, 241, 243, 242, 0, 1, 0, - 42, 235, 0, 8, 0, 4, 9, 0, 14, 16, - 237, 11, 0, 0, 0, 0, 0, 12, 0, 0, - 0, 0, 230, 0, 0, 13, 0, 41, 44, 0, - 0, 0, 0, 0, 0, 164, 160, 163, 161, 162, - 0, 0, 0, 156, 0, 0, 0, 52, 19, 0, - 0, 0, 23, 25, 0, 0, 0, 157, 0, 46, + 0, 240, 242, 241, 243, 245, 244, 0, 1, 0, + 42, 237, 0, 8, 0, 4, 9, 0, 14, 16, + 239, 11, 0, 0, 0, 0, 0, 12, 0, 0, + 0, 0, 232, 0, 0, 13, 0, 41, 44, 0, + 0, 0, 0, 0, 0, 166, 162, 165, 163, 164, + 0, 0, 0, 158, 0, 0, 0, 52, 19, 0, + 0, 0, 23, 25, 0, 0, 0, 159, 0, 46, 47, 0, 21, 25, 0, 0, 0, 0, 50, 51, - 0, 54, 55, 0, 49, 0, 233, 0, 17, 0, + 0, 54, 55, 0, 49, 0, 235, 0, 17, 0, 24, 26, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 124, 0, 0, - 0, 0, 0, 136, 137, 138, 139, 140, 166, 0, - 0, 0, 0, 169, 15, 0, 27, 0, 0, 0, + 0, 0, 0, 136, 137, 138, 139, 140, 168, 0, + 0, 0, 0, 171, 15, 0, 27, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 148, 130, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 211, 212, 226, 217, 0, 219, 123, 214, 0, 53, - 0, 0, 158, 0, 0, 0, 31, 0, 0, 33, - 0, 30, 0, 0, 0, 0, 231, 0, 228, 0, - 127, 229, 0, 0, 0, 0, 153, 125, 0, 0, + 213, 214, 228, 219, 0, 221, 123, 216, 0, 53, + 0, 0, 160, 0, 0, 0, 31, 0, 0, 33, + 0, 30, 0, 0, 0, 0, 233, 0, 230, 0, + 127, 231, 0, 0, 0, 0, 153, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 145, 144, 0, 0, 0, 222, - 0, 0, 216, 115, 0, 0, 172, 170, 159, 34, + 0, 0, 0, 0, 145, 144, 0, 0, 0, 224, + 0, 0, 218, 115, 0, 0, 174, 172, 161, 34, 32, 37, 0, 0, 0, 150, 0, 0, 0, 0, 155, 0, 0, 0, 120, 0, 0, 0, 0, 0, - 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, - 0, 154, 0, 129, 0, 227, 218, 0, 223, 220, - 0, 0, 0, 59, 0, 119, 118, 131, 68, 0, + 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, + 0, 0, 154, 0, 129, 0, 229, 220, 0, 225, + 222, 0, 0, 0, 59, 0, 119, 118, 131, 0, + 0, 0, 0, 63, 0, 0, 0, 0, 68, 0, 88, 72, 76, 78, 74, 84, 86, 70, 80, 91, - 0, 0, 0, 65, 0, 102, 0, 0, 63, 0, - 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 149, 67, 121, 225, 0, - 0, 62, 61, 0, 0, 0, 0, 0, 0, 0, - 85, 87, 0, 0, 103, 40, 56, 0, 38, 69, - 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 57, 110, 83, 107, - 0, 0, 77, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 0, 105, 71, 98, 100, 0, 95, - 0, 0, 0, 79, 93, 75, 0, 0, 0, 81, - 97, 0, 0, 106, 0, 0, 0, 73, 0, 101, - 0, 99, 0, 0, 111, + 0, 0, 0, 65, 0, 102, 121, 227, 0, 0, + 62, 61, 157, 0, 82, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 149, 67, 40, 56, + 0, 38, 0, 0, 0, 0, 0, 0, 0, 85, + 87, 0, 0, 103, 0, 69, 0, 89, 0, 0, + 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 110, 83, 107, 0, 0, 77, 0, 0, + 0, 0, 0, 0, 109, 0, 0, 0, 0, 105, + 71, 98, 100, 0, 95, 0, 0, 0, 79, 93, + 75, 0, 0, 0, 81, 97, 0, 0, 106, 0, + 0, 0, 73, 0, 101, 0, 99, 0, 0, 111, ); protected static $yyDgoto= array(2, 3, 6, 19, 10, 4, 7, 8, 119, 100, 219, 36, 51, 71, 86, 37, 53, 73, 101, 102, 137, - 103, 104, 138, 210, 64, 342, 322, 307, 371, 389, - 323, 34, 21, 35, 65, 66, 67, 121, 122, 343, - 324, 325, 344, 345, 346, 247, 353, 362, 426, 356, - 359, 416, 357, 358, 363, 429, 375, 409, 360, 361, - 355, 430, 431, 438, 439, 437, 410, 411, 419, 123, + 103, 104, 138, 210, 64, 352, 323, 307, 360, 382, + 324, 34, 21, 35, 65, 66, 67, 121, 122, 353, + 325, 326, 354, 355, 356, 247, 364, 373, 431, 367, + 370, 421, 368, 369, 374, 434, 384, 414, 371, 372, + 366, 435, 436, 443, 444, 442, 415, 416, 424, 123, 221, 296, 197, 158, 153, 229, 223, 124, 125, 126, - 127, 128, 225, 226, 227, 132, 91, 133, 134, 278, - 198, 199, 268, 272, 318, 267, 222, 22, 23, + 127, 128, 225, 312, 226, 227, 132, 91, 133, 134, + 278, 198, 199, 268, 272, 319, 267, 222, 22, 23, ); - protected static $yySindex = array( -274, - 0, 0, -270, -192, -192, 130, -270, 0, -19, 23, - 41, 0, 0, 0, 0, 0, 0, 44, 0, -109, - 0, 0, -62, 0, -192, 0, 0, 85, 0, 0, - 0, 0, -80, 69, 109, -80, -80, 0, -192, 129, - -62, 85, 0, -139, -121, 0, -25, 0, 0, -80, - -115, -80, 101, -80, 181, 0, 0, 0, 0, 0, - 201, 247, -138, 0, 248, 265, 255, 0, 0, -80, - 188, 272, 0, 0, 283, 473, 473, 0, -249, 0, - 0, -230, 0, 0, -80, -4, 4140, 0, 0, 0, - 3884, 0, 0, 181, 0, 13, 0, 65, 0, -295, - 0, 0, 0, 48, 4170, 4140, 4140, 4140, 4140, 4140, - 4140, 4140, 0, 4140, 4140, 296, 298, 0, -65, 2378, - -8, 305, 307, 0, 0, 0, 0, 0, 0, 1343, - 307, 308, 309, 0, 0, 293, 0, 83, 98, 300, - 130, 0, 175, 207, 1381, 1493, -118, -118, -284, -118, - -118, -118, 60, 0, 0, 0, 28, -8, 0, 4140, - 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, 3985, 3993, - 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4015, 4110, 4140, - 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, -67, - 0, 0, 0, 0, -54, 0, 0, 0, -8, 0, - 4140, 4140, 0, 4140, 232, 65, 0, 329, 4140, 0, - 32, 0, 4140, 4140, -8, 4140, 0, 333, 0, 336, - 0, 0, 4140, 300, 340, 350, 0, 0, -244, 2423, - 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 4140, 2521, - 4140, 2521, 2521, 2521, 2521, 2378, 319, 3337, 731, 2007, - 4140, 1306, 4140, 1306, 320, 320, 320, 320, 320, -24, - -24, -284, -284, -284, 0, 0, 4140, 4140, 355, 0, - 4140, 4140, 0, 0, 2378, 1343, 0, 0, 0, 0, - 0, 0, 2378, 2378, 2378, 0, 3287, 4140, 4140, 356, - 0, 275, 28, 369, 0, -8, 2521, 2521, 4140, 2521, - 2521, 384, 347, 0, 1529, 1679, 258, 400, 401, -8, - 3826, 0, 4140, 0, 3287, 0, 0, 4140, 0, 0, - 300, 424, 126, 0, 429, 0, 0, 0, 0, 357, + protected static $yySindex = array( -273, + 0, 0, -246, -165, -165, 212, -246, 0, 31, 73, + 86, 0, 0, 0, 0, 0, 0, 61, 0, -227, + 0, 0, 72, 0, -165, 0, 0, 90, 0, 0, + 0, 0, -81, 63, 117, -81, -81, 0, -165, 125, + 72, 90, 0, -143, -128, 0, 603, 0, 0, -81, + -117, -81, 97, -81, 166, 0, 0, 0, 0, 0, + 183, 206, -162, 0, 214, 219, 209, 0, 0, -81, + 142, 239, 0, 0, 245, 964, 964, 0, -222, 0, + 0, -247, 0, 0, -81, -3, 4156, 0, 0, 0, + 3781, 0, 0, 166, 0, 33, 0, 38, 0, -240, + 0, 0, 0, 10, 4214, 4156, 4156, 4156, 4156, 4156, + 4156, 4156, 0, 4156, 4156, 263, 285, 0, -82, 2443, + -24, 293, 291, 0, 0, 0, 0, 0, 0, 1313, + 291, 299, 300, 0, 0, 286, 0, 26, 88, 288, + 212, 0, 158, 256, 1355, 1383, -101, -101, -276, -101, + -101, -101, -64, 0, 0, 0, 27, -24, 0, 4156, + 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 3975, 4062, + 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4101, 4126, 4156, + 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, -69, + 0, 0, 0, 0, -105, 0, 0, 0, -24, 0, + 4156, 4156, 0, 4156, 216, 38, 0, 306, 4156, 0, + 32, 0, 4156, 4156, -24, 4156, 0, 333, 0, 335, + 0, 0, 4156, 288, 338, 332, 0, 0, -215, 2470, + 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 4156, 2497, + 4156, 2497, 2497, 2497, 2497, 2443, 324, 3247, -12, 3271, + 4156, 104, 4156, 104, 296, 296, 296, 296, 296, 215, + 215, -276, -276, -276, 0, 0, 4156, 4156, 345, 0, + 4156, 4156, 0, 0, 2443, 1313, 0, 0, 0, 0, + 0, 0, 2443, 2443, 2443, 0, 3226, 4156, 4156, 346, + 0, 65, 27, 352, 0, -24, 2497, 2497, 4156, 2497, + 2497, 361, 312, 0, 1425, 1810, -41, 367, 368, -24, + 370, 289, 0, 4156, 0, 3226, 0, 0, 4156, 0, + 0, 288, 374, 71, 0, 373, 0, 0, 0, 27, + 3770, 387, 400, 0, 384, 288, -41, 132, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3826, 1791, 375, 0, 3826, 0, 460, 461, 0, 445, - 300, 258, 4140, 0, 4140, 464, 465, 3826, 468, 450, - 458, 479, 481, 397, 0, 0, 0, 0, 0, -28, - -26, 0, 0, 466, 3826, 1827, 4140, 4140, 162, 4140, - 0, 0, 4140, 4140, 0, 0, 0, 3826, 0, 0, - 399, 0, 467, 1924, 493, 1951, 1978, 2089, 409, 191, - 4140, 3826, 4140, 196, 3826, 414, 0, 0, 0, 0, - 191, 490, 0, 2125, 125, 509, 193, -64, 526, 0, - 4140, 517, 249, 3826, 0, 0, 0, 0, 452, 0, - -64, -80, 551, 0, 0, 0, 3826, 4140, 537, 0, - 0, 256, 3826, 0, 2223, 3826, 556, 0, 3826, 0, - 476, 0, 3826, 475, 0, + 3770, 1837, 319, 0, 3770, 0, 0, 0, -77, -20, + 0, 0, 0, 4156, 0, 4156, 405, 430, 3770, 431, + 409, 414, 450, 458, 375, 0, 0, 0, 0, 0, + 3770, 0, 440, 3770, 1864, 4156, 4156, 147, 4156, 0, + 0, 4156, 4156, 0, 378, 0, 395, 0, 453, 1907, + 483, 1961, 1934, 2004, 0, 184, 4156, 3770, 4156, 185, + 3770, 401, 0, 0, 0, 184, 467, 0, 2031, 116, + 495, 167, -53, 497, 0, 4156, 480, 200, 3770, 0, + 0, 0, 0, 416, 0, -53, -81, 501, 0, 0, + 0, 3770, 4156, 509, 0, 0, 228, 3770, 0, 2058, + 3770, 528, 0, 3770, 0, 456, 0, 3770, 473, 0, ); - protected static $yyRindex= array( 59, - 0, 0, 663, 0, 0, 34, 685, 0, 16, 0, + protected static $yyRindex= array( 6, + 0, 0, 80, 0, 0, 9, 113, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -184, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 508, 0, 0, 0, 0, 6, - 341, 0, 0, -114, 480, 0, 0, 0, 0, 0, - 482, 0, 0, 0, -40, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, - 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -164, 566, -39, 0, 0, - 576, 0, 0, 0, 0, -164, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 43, 0, 0, 0, 102, - 208, 0, -12, 0, 0, 0, 0, 0, 0, -3, - 577, 0, 592, 0, 0, 0, 0, 0, 0, 100, - 303, 0, 1284, 0, 0, 271, 469, 593, 895, 647, - 767, 804, 0, 0, 0, 0, 604, 208, 0, 0, + 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 499, 0, 0, 0, 0, 5, + 11, 0, 0, -114, 476, 0, 0, 0, 0, 0, + 477, 0, 0, 0, -40, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, + 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -210, 562, -36, 0, 0, + 563, 0, 0, 0, 0, -210, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 46, 0, 0, 0, 94, + 472, 0, 17, 0, 0, 0, 0, 0, 0, 133, + 564, 0, 578, 0, 0, 0, 0, 0, 0, 42, + 280, 0, 1244, 0, 0, 727, 596, 623, 1120, 667, + 694, 735, 0, 0, 0, 0, 580, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, + 134, 0, 0, 181, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, + 0, 0, 562, 201, 0, 581, 0, 0, 0, 278, + 70, 180, 870, 1365, 2082, 2109, 3093, 3137, 0, 3285, + 0, 3293, 3301, 3305, 3312, 325, 0, 3150, 428, 2742, + 0, 3082, 0, 3126, 2620, 2647, 2671, 2698, 2579, 2525, + 2552, 1147, 1174, 1215, 0, 0, 562, 532, 143, 0, + 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 182, 75, 866, 0, 3173, 562, 562, 0, + 0, 503, 0, 170, 0, 472, 3321, 3348, 0, 3358, + 3391, 0, 0, 0, 0, 0, 594, 0, 0, 472, + 0, 0, 0, 562, 0, 3194, 0, 0, 562, 0, + 0, 201, 0, 0, 0, 595, 0, 0, 0, 0, + 519, 0, 0, 0, -13, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, - 200, 0, 0, 81, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, - 0, 0, 566, 82, 0, 607, 0, 0, 0, 54, - 259, 603, 743, 779, 867, 2015, 2019, 2621, 0, 2762, - 0, 2855, 3347, 3371, 3479, 114, 0, 3202, 619, 3063, - 0, 3087, 0, 3111, 70, 2810, 2948, 3039, 2650, 2558, - 2612, 1045, 1103, 1194, 0, 0, 566, 557, 140, 0, - 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, - 0, 0, 263, 858, 1435, 0, 3223, 566, 566, 0, - 0, 0, 0, 167, 0, 208, 3499, 3507, 0, 3520, - 3532, 0, 0, 0, 0, 0, 608, 0, 0, 208, - 533, 0, 566, 0, 3246, 0, 0, 566, 0, 0, - 82, 0, 0, 0, 618, 0, 0, 0, 0, 0, + 519, 0, 0, 0, -123, 0, 0, 0, 0, 0, + 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 533, 0, 0, 0, -117, 0, 0, 0, 0, 7, - 82, 0, 605, 0, 0, 0, 0, 0, 0, 0, + 519, 0, 0, 519, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 533, 0, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, + 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, + 0, 0, 0, 0, 0, 3621, 0, 0, 0, 608, + 0, 3715, 525, 0, 0, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3641, 0, 0, 0, 625, 0, 3732, 542, 0, 0, - 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -91, 0, 0, -91, 0, - 0, 0, 533, 0, 0, + -115, 0, 0, -115, 0, 0, 0, 519, 0, 0, ); protected static $yyGindex= array(0, - 0, 0, 0, 10, 0, 0, 662, -33, 4, -30, - 0, 0, 0, 586, 0, 0, 105, 0, 530, 477, - 0, 0, 0, -197, 474, 4414, 0, 0, 0, 0, - -127, 653, 656, 0, 237, 617, 0, -5, 1112, 447, - 348, 0, 358, 842, 0, -136, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 645, -33, 21, -30, + 0, 0, 0, 590, 0, 0, 51, 0, 512, 466, + 0, 0, 0, -52, 468, 4425, 0, 0, 0, 0, + -141, 633, 636, 0, 247, 597, 0, -5, 357, 668, + 341, 0, 342, 923, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 270, 0, 0, 0, 0, 291, 0, 0, 613, - 0, 0, -122, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 418, 0, 0, 0, 510, 0, - 516, 0, 0, 0, 0, 0, 0, 693, 0, + 0, 244, 0, 0, 0, 0, 271, 0, 0, 605, + 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 358, 407, 0, 0, 0, 498, + 0, 502, 0, 0, 0, 0, 0, 0, 680, 0, ); protected static $yyTable = array(40, - 159, 159, 43, 43, 159, 44, 45, 66, 18, 20, - 92, 39, 189, 63, 11, 294, 43, 187, 43, 69, - 43, 72, 188, 75, 39, 220, 291, 190, 113, 94, - 18, 193, 387, 64, 32, 228, 43, 114, 139, 72, - 114, 68, 63, 63, 140, 1, 113, 18, 46, 45, - 5, 43, 10, 10, 72, 10, 10, 10, 10, 10, - 10, 10, 10, 39, 274, 39, 39, 9, 271, 61, - 68, 68, 25, 10, 10, 10, 10, 10, 10, 159, - 159, 26, 194, 159, 159, 159, 159, 159, 159, 159, - 93, 141, 286, 2, 142, 295, 388, 142, 45, 27, - 159, 159, 159, 159, 159, 159, 142, 186, 10, 10, - 186, 142, 142, 186, 196, 236, 236, 191, 192, 43, - 99, 171, 35, 349, 171, 35, 206, 186, 186, 39, - 186, 303, 186, 159, 28, 159, 159, 135, 10, 10, - 10, 207, 114, 35, 211, 114, 142, 173, 33, 236, - 173, 39, 42, 372, 117, 236, 43, 117, 35, 266, - 114, 41, 186, 186, 18, 159, 159, 159, 47, 234, - 50, 117, 117, 314, 83, 234, 221, 221, 142, 38, - 221, 221, 221, 221, 221, 221, 221, 328, 52, 97, - 29, 30, 38, 186, 186, 70, 18, 221, 221, 221, - 221, 221, 221, 122, 122, 269, 117, 122, 122, 122, - 122, 122, 122, 122, 156, 213, 374, 12, 13, 14, - 15, 16, 17, 74, 122, 122, 122, 122, 122, 122, - 221, 38, 221, 221, 55, 56, 57, 58, 59, 60, - 116, 76, 386, 116, 213, 213, 78, 214, 213, 213, - 213, 213, 213, 213, 213, 66, 66, 122, 116, 122, - 122, 77, 221, 221, 221, 213, 213, 213, 213, 213, - 213, 79, 265, 43, 61, 12, 13, 14, 15, 16, - 17, 64, 64, 191, 192, 270, 78, 190, 80, 122, - 122, 122, 12, 13, 14, 15, 16, 17, 82, 143, - 213, 213, 143, 36, 217, 81, 36, 62, 427, 428, - 84, 134, 89, 90, 134, 85, 143, 143, 43, 38, - 54, 36, 87, 195, 136, 10, 10, 10, 134, 134, - 98, 213, 213, 234, 234, 156, 43, 157, 2, 2, - 2, 2, 2, 2, 159, 200, 10, 98, 203, 39, - 201, 143, 204, 205, 159, 10, 189, 208, 2, 2, - 209, 187, 185, 134, 186, 184, 188, 224, 282, 12, - 12, 140, 288, 159, 159, 289, 299, 191, 192, 2, - 292, 215, 215, 143, 142, 215, 215, 215, 215, 215, - 215, 215, 217, 293, 304, 134, 310, 311, 43, 218, - 186, 442, 215, 215, 215, 215, 215, 215, 313, 12, - 13, 14, 15, 16, 17, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 316, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 215, 215, 317, - 326, 327, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 221, 12, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 350, 351, 142, 142, 215, 215, - 221, 221, 352, 186, 186, 186, 186, 186, 122, 354, - 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, - 186, 279, 56, 57, 58, 59, 60, 122, 122, 366, - 368, 369, 370, 377, 378, 207, 207, 380, 381, 207, - 207, 207, 207, 207, 207, 207, 382, 38, 383, 213, - 384, 385, 395, 400, 390, 401, 207, 207, 207, 207, - 207, 207, 403, 407, 408, 415, 418, 423, 213, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 421, 424, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 207, 207, 425, 39, 432, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 434, 440, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 435, 143, - 217, 443, 207, 207, 446, 447, 451, 321, 453, 455, - 43, 134, 22, 48, 20, 232, 112, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 165, 167, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 208, - 208, 190, 168, 208, 208, 208, 208, 208, 208, 208, - 234, 234, 234, 174, 151, 116, 174, 152, 58, 116, - 208, 208, 208, 208, 208, 208, 215, 64, 60, 202, - 174, 174, 202, 116, 112, 92, 94, 96, 24, 96, - 212, 143, 143, 143, 234, 215, 202, 202, 280, 202, - 234, 202, 281, 206, 206, 208, 208, 206, 206, 206, - 206, 206, 206, 206, 49, 174, 48, 5, 95, 373, - 441, 420, 367, 131, 206, 206, 206, 206, 206, 206, - 312, 202, 202, 277, 273, 31, 208, 208, 0, 6, - 0, 191, 192, 0, 0, 0, 0, 174, 0, 0, - 0, 0, 88, 56, 57, 58, 59, 60, 0, 206, - 206, 0, 202, 202, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 0, 0, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 0, 189, 177, 0, - 206, 206, 187, 185, 0, 186, 184, 188, 0, 0, - 207, 0, 0, 175, 0, 0, 175, 364, 0, 0, - 180, 0, 182, 0, 0, 0, 0, 0, 0, 207, - 175, 175, 0, 209, 209, 62, 0, 209, 209, 209, - 209, 209, 209, 209, 0, 0, 0, 0, 54, 176, - 0, 391, 176, 0, 209, 209, 209, 209, 209, 209, - 0, 0, 0, 0, 399, 175, 176, 176, 0, 0, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 0, 0, 0, 0, 0, 0, 0, 0, 209, - 209, 210, 210, 210, 210, 210, 210, 175, 207, 207, - 0, 176, 207, 207, 207, 207, 207, 0, 0, 207, - 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, - 209, 209, 450, 0, 0, 452, 210, 210, 146, 454, - 0, 146, 0, 176, 208, 0, 0, 177, 0, 0, - 177, 0, 0, 0, 0, 146, 146, 0, 0, 0, - 0, 0, 0, 208, 177, 177, 0, 210, 210, 0, - 0, 205, 205, 174, 0, 205, 205, 205, 205, 205, - 205, 205, 5, 5, 5, 5, 5, 5, 0, 202, - 146, 0, 205, 205, 205, 205, 205, 205, 206, 177, - 0, 0, 5, 5, 6, 6, 6, 6, 6, 6, - 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, - 0, 0, 146, 0, 6, 6, 0, 205, 205, 0, - 0, 177, 208, 208, 0, 0, 208, 208, 208, 208, - 208, 0, 0, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 0, 174, 174, 174, 205, 205, - 0, 0, 202, 202, 202, 202, 202, 0, 0, 0, - 0, 202, 202, 202, 202, 202, 202, 202, 202, 202, - 0, 0, 190, 0, 0, 0, 206, 206, 0, 0, - 206, 206, 206, 206, 206, 0, 0, 206, 206, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 0, 0, - 0, 0, 0, 175, 0, 0, 0, 0, 209, 0, - 0, 196, 196, 0, 0, 196, 196, 196, 196, 196, - 196, 196, 0, 0, 0, 0, 0, 209, 0, 0, - 0, 0, 196, 196, 196, 196, 196, 196, 0, 176, - 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, + 161, 66, 43, 43, 161, 44, 45, 161, 18, 64, + 39, 220, 94, 63, 39, 193, 43, 271, 43, 69, + 43, 72, 39, 75, 189, 177, 20, 39, 274, 187, + 185, 18, 186, 184, 188, 190, 43, 92, 380, 72, + 2, 68, 63, 63, 294, 39, 1, 180, 45, 182, + 39, 43, 61, 141, 72, 10, 10, 113, 10, 10, + 10, 10, 10, 10, 10, 10, 194, 18, 142, 206, + 68, 68, 29, 30, 5, 113, 10, 10, 10, 10, + 10, 10, 161, 161, 207, 35, 161, 161, 161, 161, + 161, 161, 161, 139, 9, 303, 11, 45, 196, 140, + 35, 228, 381, 161, 161, 161, 161, 161, 161, 39, + 143, 10, 10, 143, 5, 146, 32, 93, 146, 43, + 83, 99, 25, 236, 295, 191, 192, 143, 143, 236, + 46, 26, 146, 146, 114, 97, 161, 114, 161, 161, + 189, 10, 10, 10, 27, 187, 185, 6, 186, 184, + 188, 28, 114, 33, 269, 41, 43, 135, 286, 266, + 42, 211, 143, 180, 47, 182, 50, 146, 161, 161, + 161, 291, 363, 114, 116, 293, 114, 116, 38, 223, + 223, 52, 38, 223, 223, 223, 223, 223, 223, 223, + 38, 383, 116, 70, 143, 38, 18, 156, 213, 146, + 223, 223, 223, 223, 223, 223, 122, 122, 238, 238, + 122, 122, 122, 122, 122, 122, 122, 379, 38, 74, + 176, 173, 36, 176, 173, 36, 76, 122, 122, 122, + 122, 122, 122, 223, 270, 223, 223, 176, 176, 315, + 36, 35, 238, 77, 35, 78, 18, 79, 238, 66, + 66, 189, 82, 329, 80, 217, 187, 64, 64, 81, + 122, 188, 122, 122, 84, 223, 223, 223, 217, 334, + 265, 175, 176, 43, 175, 218, 12, 13, 14, 15, + 16, 17, 85, 361, 87, 2, 2, 2, 2, 2, + 2, 217, 122, 122, 122, 78, 214, 136, 322, 190, + 191, 192, 156, 43, 176, 2, 2, 195, 236, 236, + 236, 236, 12, 13, 14, 15, 16, 17, 142, 432, + 433, 142, 89, 90, 157, 43, 2, 159, 10, 10, + 10, 98, 189, 200, 201, 142, 142, 187, 185, 203, + 186, 184, 188, 204, 236, 282, 205, 208, 209, 10, + 236, 12, 13, 14, 15, 16, 17, 161, 10, 5, + 5, 5, 5, 5, 5, 117, 224, 98, 117, 12, + 142, 140, 288, 12, 289, 293, 161, 161, 292, 5, + 5, 299, 117, 117, 304, 311, 310, 183, 181, 191, + 192, 314, 6, 6, 6, 6, 6, 6, 178, 179, + 143, 317, 142, 43, 318, 146, 447, 327, 328, 330, + 336, 331, 6, 6, 335, 190, 337, 117, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 357, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 358, 359, 365, 377, 386, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 223, 12, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 390, 204, 387, + 389, 204, 391, 223, 223, 279, 56, 57, 58, 59, + 60, 122, 143, 143, 143, 204, 204, 146, 204, 392, + 204, 12, 13, 14, 15, 16, 17, 393, 396, 394, + 122, 122, 405, 183, 181, 191, 192, 401, 215, 215, + 176, 407, 215, 215, 215, 215, 215, 215, 215, 406, + 204, 204, 409, 423, 420, 426, 190, 413, 428, 215, + 215, 215, 215, 215, 215, 429, 437, 430, 439, 440, + 445, 448, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 204, 204, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 215, 215, 451, 452, 456, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 458, 290, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 43, 176, 176, 176, 215, 215, 460, 22, 20, + 48, 234, 112, 167, 169, 217, 217, 190, 142, 217, + 217, 217, 217, 217, 217, 217, 191, 192, 170, 236, + 151, 152, 116, 302, 116, 156, 217, 217, 217, 217, + 217, 217, 209, 209, 58, 60, 209, 209, 209, 209, + 209, 209, 209, 64, 308, 309, 116, 112, 92, 94, + 96, 24, 212, 209, 209, 209, 209, 209, 209, 210, + 210, 217, 217, 210, 210, 210, 210, 210, 210, 210, + 332, 281, 280, 96, 49, 333, 48, 362, 95, 446, + 210, 210, 210, 210, 210, 210, 425, 338, 209, 209, + 142, 142, 217, 217, 39, 131, 378, 191, 192, 313, + 273, 277, 31, 208, 208, 0, 0, 208, 208, 208, + 208, 208, 208, 208, 0, 210, 210, 0, 0, 209, + 209, 0, 0, 0, 208, 208, 208, 208, 208, 208, + 211, 211, 0, 0, 211, 211, 211, 211, 211, 211, + 211, 0, 399, 0, 0, 0, 210, 210, 0, 0, + 0, 211, 211, 211, 211, 211, 211, 0, 204, 208, + 208, 0, 0, 417, 0, 0, 0, 134, 0, 0, + 134, 212, 212, 0, 0, 212, 212, 212, 212, 212, + 212, 212, 438, 215, 134, 134, 211, 211, 0, 0, + 208, 208, 212, 212, 212, 212, 212, 212, 0, 0, + 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 211, 211, 134, + 0, 0, 0, 0, 0, 0, 0, 212, 212, 0, + 0, 204, 204, 204, 204, 204, 0, 0, 0, 0, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 0, + 0, 134, 0, 0, 0, 0, 0, 0, 212, 212, + 0, 0, 55, 56, 57, 58, 59, 60, 0, 0, + 0, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 217, 0, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 0, 0, 0, 0, 0, 0, 217, + 0, 0, 61, 0, 0, 0, 147, 209, 0, 147, + 177, 0, 0, 177, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 147, 147, 0, 209, 177, 177, 0, + 0, 0, 0, 0, 210, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, + 0, 0, 0, 210, 0, 0, 0, 0, 147, 0, + 0, 0, 177, 0, 0, 0, 0, 0, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 0, 208, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 147, 0, 0, 0, 177, 209, 209, 208, 0, 209, + 209, 209, 209, 209, 0, 211, 209, 209, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 0, 375, 0, + 0, 0, 210, 210, 211, 0, 210, 210, 210, 210, + 210, 0, 0, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 0, 0, 212, 0, 395, 0, + 0, 397, 0, 0, 0, 39, 0, 134, 0, 0, + 0, 0, 0, 0, 0, 212, 208, 208, 0, 0, + 208, 208, 208, 208, 208, 0, 0, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 0, 0, + 0, 0, 0, 211, 211, 0, 0, 211, 211, 211, + 211, 211, 0, 0, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 0, 0, 0, 455, 0, + 0, 457, 0, 0, 0, 459, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 212, 0, 0, 212, 212, + 212, 212, 212, 0, 0, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 207, 207, 0, 0, + 207, 207, 207, 207, 207, 207, 207, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 207, 207, 207, + 207, 207, 207, 198, 198, 0, 0, 198, 198, 198, + 198, 198, 198, 198, 0, 0, 147, 0, 0, 0, + 177, 0, 0, 0, 198, 198, 198, 198, 198, 198, + 199, 199, 207, 207, 199, 199, 199, 199, 199, 199, + 199, 0, 0, 88, 56, 57, 58, 59, 60, 0, + 0, 199, 199, 199, 199, 199, 199, 0, 0, 198, + 198, 0, 0, 207, 207, 0, 0, 0, 0, 0, + 0, 200, 200, 0, 0, 200, 200, 200, 200, 200, + 200, 200, 0, 0, 0, 0, 199, 199, 0, 0, + 198, 198, 200, 200, 200, 200, 200, 200, 147, 0, + 161, 161, 177, 177, 177, 161, 161, 0, 161, 161, + 161, 388, 0, 0, 0, 0, 62, 199, 199, 0, + 0, 0, 0, 161, 161, 161, 161, 200, 200, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 183, 181, 191, 192, 210, 0, 0, 196, 196, 197, - 197, 178, 179, 197, 197, 197, 197, 197, 197, 197, - 0, 0, 0, 0, 0, 175, 175, 175, 0, 0, - 197, 197, 197, 197, 197, 197, 209, 209, 196, 196, - 209, 209, 209, 209, 209, 0, 0, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 146, 0, - 0, 176, 176, 176, 0, 197, 197, 177, 0, 379, - 0, 0, 0, 210, 210, 0, 0, 210, 210, 210, - 210, 210, 0, 0, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 205, 197, 197, 0, 0, - 198, 198, 0, 0, 198, 198, 198, 198, 198, 198, - 198, 0, 0, 413, 0, 0, 417, 0, 0, 0, - 0, 198, 198, 198, 198, 198, 198, 0, 0, 0, - 0, 0, 0, 0, 0, 436, 0, 133, 133, 0, - 146, 133, 133, 0, 133, 0, 133, 133, 444, 177, - 177, 177, 0, 0, 448, 0, 198, 198, 133, 133, - 133, 133, 133, 133, 205, 205, 0, 0, 205, 205, - 205, 205, 205, 0, 0, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 0, 198, 198, 0, - 159, 159, 0, 133, 133, 159, 159, 0, 159, 159, - 159, 0, 0, 0, 290, 0, 0, 0, 0, 0, - 0, 0, 189, 159, 159, 159, 159, 187, 185, 0, - 186, 184, 188, 0, 133, 133, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 180, 0, 182, 0, 0, - 0, 0, 0, 0, 159, 196, 0, 159, 302, 189, - 177, 0, 0, 0, 187, 185, 0, 186, 184, 188, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, - 309, 0, 180, 162, 182, 174, 159, 159, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 177, 0, - 0, 215, 187, 185, 347, 186, 184, 188, 0, 348, - 0, 0, 0, 197, 0, 0, 176, 0, 0, 0, - 180, 162, 182, 174, 196, 196, 0, 0, 196, 196, - 196, 196, 196, 0, 0, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 175, 0, 0, 0, - 0, 0, 0, 0, 176, 147, 0, 0, 147, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, - 0, 0, 147, 147, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 197, 175, 0, 197, 197, 197, 197, - 197, 0, 412, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 198, 0, 0, 147, 0, 189, - 177, 0, 433, 0, 187, 185, 0, 186, 184, 188, - 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 180, 162, 182, 174, 0, 0, 0, 147, - 0, 133, 0, 0, 0, 189, 177, 0, 0, 0, - 187, 185, 0, 186, 184, 188, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 180, 162, - 182, 174, 0, 198, 198, 159, 0, 198, 198, 198, - 198, 198, 0, 0, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 159, 175, 190, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, - 133, 133, 0, 0, 133, 133, 133, 133, 133, 0, - 0, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 175, 319, 190, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 0, 0, 133, 133, 0, 133, + 418, 133, 133, 422, 161, 0, 0, 161, 200, 200, + 0, 0, 0, 133, 133, 133, 133, 133, 133, 189, + 177, 441, 0, 0, 187, 185, 0, 186, 184, 188, + 0, 0, 0, 0, 449, 0, 161, 161, 0, 0, + 453, 0, 180, 162, 182, 174, 0, 0, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 189, 177, 0, 0, 215, 187, 185, 0, 186, + 184, 188, 0, 0, 0, 178, 176, 0, 178, 133, + 133, 0, 0, 0, 180, 162, 182, 174, 0, 189, + 177, 0, 178, 178, 187, 185, 0, 186, 184, 188, + 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, + 0, 0, 180, 162, 182, 174, 0, 0, 176, 0, + 207, 0, 0, 0, 0, 0, 0, 178, 0, 0, + 0, 189, 177, 0, 0, 0, 187, 185, 0, 186, + 184, 188, 0, 0, 0, 0, 176, 198, 175, 0, + 0, 0, 0, 0, 180, 162, 182, 174, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 190, 12, 159, 159, 0, 159, 159, 159, - 159, 159, 159, 159, 159, 183, 181, 191, 192, 0, - 0, 0, 0, 0, 0, 189, 177, 0, 0, 0, - 187, 185, 0, 186, 184, 188, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 180, 162, - 182, 174, 183, 181, 191, 192, 163, 164, 165, 166, + 0, 0, 0, 0, 199, 0, 175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 176, 207, + 207, 0, 0, 207, 207, 207, 207, 207, 0, 0, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 0, 0, 0, 0, 200, 198, 198, 175, 320, + 198, 198, 198, 198, 198, 161, 0, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, 0, 0, + 0, 0, 0, 199, 199, 161, 0, 199, 199, 199, + 199, 199, 0, 0, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 0, 0, 133, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 200, 133, 0, 200, 200, + 200, 200, 200, 0, 190, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 0, 0, 0, 0, + 0, 0, 0, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 0, 12, 161, 161, 0, 161, 161, 161, + 161, 161, 161, 161, 161, 0, 190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 133, 133, 0, 0, 133, + 133, 133, 133, 133, 190, 178, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 0, 0, 0, + 0, 0, 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, 0, 178, 179, 202, 160, 161, 167, 172, - 171, 173, 169, 170, 0, 147, 0, 0, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, - 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, - 0, 178, 179, 0, 160, 161, 167, 172, 171, 173, - 169, 170, 175, 320, 190, 0, 0, 0, 0, 0, + 171, 173, 169, 170, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 177, 0, - 0, 0, 187, 185, 0, 186, 184, 188, 0, 0, - 190, 0, 0, 0, 0, 0, 0, 147, 0, 365, - 180, 162, 182, 174, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 189, 177, 0, 0, 0, 187, 185, - 0, 186, 184, 188, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 176, 392, 180, 162, 182, 174, + 0, 0, 0, 0, 183, 181, 191, 192, 163, 164, + 165, 166, 168, 0, 0, 178, 179, 0, 160, 161, + 167, 172, 171, 173, 169, 170, 0, 178, 178, 178, 0, 0, 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, 0, 178, 179, 216, 160, 161, 167, 172, - 171, 173, 169, 170, 175, 0, 0, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 183, 181, - 191, 192, 163, 164, 165, 166, 168, 0, 0, 178, - 179, 0, 160, 161, 167, 172, 171, 173, 169, 170, - 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 177, 0, 0, 402, 187, 185, 0, 186, 184, + 171, 173, 169, 170, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 183, 181, 191, 192, 163, 164, + 165, 166, 168, 0, 0, 178, 179, 0, 160, 161, + 167, 172, 171, 173, 169, 170, 189, 177, 0, 0, + 0, 187, 185, 0, 186, 184, 188, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, + 162, 182, 174, 189, 177, 0, 0, 0, 187, 185, + 0, 186, 184, 188, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 376, 180, 162, 182, 174, + 189, 177, 0, 176, 0, 187, 185, 0, 186, 184, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 398, 180, 162, 182, 174, 0, 0, 0, + 176, 0, 0, 175, 321, 0, 0, 0, 0, 0, + 0, 0, 0, 189, 177, 0, 0, 408, 187, 185, + 0, 186, 184, 188, 0, 0, 0, 176, 0, 0, + 175, 0, 0, 0, 0, 0, 180, 162, 182, 174, + 189, 177, 0, 0, 411, 187, 185, 0, 186, 184, + 188, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 180, 162, 182, 174, 189, 177, 0, - 190, 0, 187, 185, 0, 186, 184, 188, 0, 0, + 176, 0, 187, 185, 0, 186, 184, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 180, 162, 182, 174, 189, 177, 0, 176, 405, 187, + 180, 162, 182, 174, 0, 0, 0, 176, 0, 0, + 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 189, 177, 0, 0, 412, 187, 185, 0, 186, 184, + 188, 0, 0, 0, 176, 0, 0, 175, 0, 0, + 0, 0, 0, 180, 162, 182, 174, 189, 177, 0, + 0, 427, 187, 185, 0, 186, 184, 188, 0, 0, + 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, + 180, 162, 182, 174, 189, 177, 0, 176, 0, 187, 185, 0, 186, 184, 188, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 180, 162, 182, - 174, 0, 0, 189, 176, 0, 0, 175, 187, 185, - 0, 186, 184, 188, 0, 178, 0, 0, 178, 180, - 0, 0, 180, 0, 0, 0, 180, 0, 182, 0, - 0, 176, 178, 178, 175, 0, 180, 180, 183, 181, - 191, 192, 163, 164, 165, 166, 168, 0, 0, 178, - 179, 0, 160, 161, 167, 172, 171, 173, 169, 170, - 0, 175, 190, 0, 0, 0, 0, 178, 0, 0, - 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 189, 177, 0, 0, 406, - 187, 185, 0, 186, 184, 188, 0, 0, 190, 178, - 0, 0, 0, 180, 0, 0, 0, 0, 180, 162, - 182, 174, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 189, 177, 0, 0, 422, 187, 185, 0, 186, - 184, 188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 0, 180, 162, 182, 174, 0, 0, - 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, - 0, 178, 179, 0, 160, 161, 167, 172, 171, 173, - 169, 170, 175, 0, 0, 0, 0, 0, 176, 0, + 0, 0, 0, 0, 0, 454, 0, 180, 162, 182, + 174, 190, 179, 0, 176, 179, 0, 175, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, + 179, 0, 0, 0, 0, 0, 0, 0, 190, 180, + 0, 176, 180, 0, 175, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 180, 180, 0, 0, + 0, 0, 0, 0, 179, 190, 0, 0, 0, 0, + 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 180, 0, 0, 0, 0, 179, 0, 0, 183, + 181, 191, 192, 163, 164, 165, 166, 168, 190, 0, + 178, 179, 0, 160, 161, 167, 172, 171, 173, 169, + 170, 0, 0, 180, 0, 0, 183, 181, 191, 192, + 163, 164, 165, 166, 168, 190, 0, 178, 179, 0, + 160, 161, 167, 172, 171, 173, 169, 170, 0, 0, + 0, 0, 0, 183, 181, 191, 192, 163, 164, 165, + 166, 168, 190, 0, 178, 179, 0, 160, 161, 167, + 172, 171, 173, 169, 170, 0, 0, 0, 0, 0, + 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 181, 191, 192, 163, 164, 165, 166, 168, 190, 0, 178, 179, 0, - 160, 161, 167, 172, 171, 173, 169, 170, 175, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 177, 0, 190, 0, 187, 185, 0, 186, 184, 188, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 449, 404, 180, 162, 182, 174, 0, 0, 0, 190, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 160, 161, 167, 172, 171, 173, 169, 170, 0, 0, + 0, 0, 0, 183, 181, 191, 192, 163, 164, 165, + 166, 168, 190, 0, 178, 179, 0, 160, 161, 167, + 172, 171, 173, 169, 170, 0, 0, 0, 0, 0, + 183, 181, 191, 192, 163, 164, 165, 166, 168, 190, + 0, 178, 179, 0, 160, 161, 167, 172, 171, 173, + 169, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 190, 0, 0, 0, 0, 183, 181, 191, 192, 163, 164, 165, - 166, 168, 0, 0, 178, 179, 0, 160, 161, 167, - 172, 171, 173, 169, 170, 178, 175, 0, 0, 180, - 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, + 166, 168, 179, 0, 178, 179, 0, 160, 161, 167, + 172, 171, 173, 169, 170, 0, 0, 0, 0, 0, + 183, 181, 191, 192, 163, 164, 165, 166, 168, 180, 0, 178, 179, 0, 160, 161, 167, 172, 171, 173, 169, 170, 0, 0, 0, 0, 0, 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, 0, 178, 179, - 0, 160, 161, 167, 172, 171, 173, 169, 170, 0, - 190, 0, 0, 0, 0, 0, 183, 181, 191, 192, - 0, 0, 0, 0, 189, 177, 0, 178, 179, 187, - 185, 0, 186, 184, 188, 0, 0, 178, 178, 178, - 0, 180, 180, 180, 0, 0, 190, 180, 162, 182, - 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, + 0, 160, 161, 167, 172, 171, 173, 169, 170, 189, 177, 0, 0, 0, 187, 185, 0, 186, 184, 188, - 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 180, 162, 182, 174, 0, 0, 183, 181, - 191, 192, 163, 164, 165, 166, 168, 0, 0, 178, - 179, 175, 160, 161, 167, 172, 171, 173, 169, 170, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 183, 181, 191, 192, 163, 164, - 165, 166, 168, 0, 190, 178, 179, 0, 160, 161, - 167, 172, 171, 173, 169, 170, 175, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 177, 0, - 0, 0, 187, 185, 0, 186, 184, 188, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 180, 162, 182, 174, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 194, 0, 0, 194, 0, - 194, 194, 194, 194, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 176, 194, 194, 194, 194, 194, - 194, 0, 183, 181, 191, 192, 163, 164, 165, 166, - 168, 0, 0, 178, 179, 0, 160, 161, 167, 172, - 171, 173, 169, 170, 175, 0, 0, 0, 0, 195, - 194, 194, 195, 0, 195, 195, 195, 195, 0, 0, - 0, 179, 0, 0, 179, 0, 0, 0, 0, 195, - 195, 195, 195, 195, 195, 0, 0, 0, 179, 179, - 0, 194, 194, 0, 0, 0, 0, 199, 0, 190, - 199, 0, 0, 199, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 195, 0, 199, 199, 199, - 199, 199, 199, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 190, 195, 195, 0, 0, 0, - 0, 0, 199, 199, 0, 179, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 199, 199, 0, 0, 183, 181, 191, - 192, 163, 164, 165, 166, 168, 0, 0, 178, 179, - 0, 160, 161, 167, 172, 171, 173, 169, 170, 0, - 0, 0, 203, 0, 0, 203, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 203, 0, 183, 181, 191, 192, 163, 164, 165, 166, - 168, 0, 190, 178, 179, 0, 0, 161, 167, 172, - 171, 173, 169, 170, 0, 0, 0, 188, 0, 0, - 188, 0, 0, 188, 203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 188, 0, - 188, 0, 188, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 0, 194, 0, - 0, 0, 0, 0, 0, 204, 0, 0, 204, 0, - 0, 0, 188, 188, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 204, 0, 0, 0, 0, 0, 0, - 183, 181, 191, 192, 163, 164, 165, 166, 168, 0, - 0, 178, 179, 188, 188, 0, 167, 172, 171, 173, - 169, 170, 195, 0, 0, 0, 0, 204, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 194, 194, 0, - 0, 194, 194, 194, 194, 194, 0, 0, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 204, - 199, 0, 0, 0, 0, 187, 0, 0, 187, 0, - 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 187, 0, 187, 0, - 187, 195, 195, 0, 0, 195, 195, 195, 195, 195, - 0, 0, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 179, 179, 179, 0, 0, 0, 0, - 187, 187, 0, 0, 0, 0, 0, 0, 0, 199, - 199, 0, 0, 199, 199, 199, 199, 199, 0, 0, - 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, - 199, 187, 187, 0, 0, 0, 189, 0, 0, 189, - 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 0, 0, 0, 189, 189, 0, 189, - 201, 189, 0, 201, 0, 0, 201, 0, 0, 0, + 0, 0, 0, 0, 179, 179, 179, 0, 0, 0, + 0, 0, 180, 162, 182, 174, 189, 177, 0, 0, + 0, 187, 185, 0, 186, 184, 188, 0, 0, 0, + 0, 180, 180, 180, 0, 0, 0, 0, 0, 180, + 162, 182, 174, 189, 177, 0, 176, 0, 187, 185, + 0, 186, 184, 188, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 180, 162, 182, 174, + 0, 0, 196, 176, 0, 196, 175, 196, 196, 196, + 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 196, 196, 196, 196, 196, 0, 197, + 176, 0, 197, 175, 197, 197, 197, 197, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, + 197, 197, 197, 197, 197, 0, 201, 196, 196, 201, + 175, 0, 201, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 201, 201, 201, 201, + 201, 201, 0, 0, 197, 197, 0, 0, 196, 196, + 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, + 188, 0, 0, 188, 0, 0, 0, 0, 0, 0, + 0, 201, 201, 0, 0, 197, 197, 188, 188, 0, + 188, 0, 188, 0, 190, 0, 0, 190, 0, 0, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 201, 201, 190, 190, 0, 190, 189, 190, + 0, 189, 188, 188, 189, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 189, 189, + 0, 189, 0, 189, 0, 191, 0, 0, 191, 190, + 190, 191, 0, 188, 188, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 190, 191, 191, 0, 191, 0, + 191, 0, 0, 189, 189, 0, 0, 0, 0, 0, + 190, 190, 0, 0, 0, 0, 0, 0, 0, 203, + 0, 190, 203, 0, 0, 203, 0, 0, 0, 0, + 191, 191, 0, 0, 189, 189, 0, 0, 0, 203, + 203, 0, 203, 0, 203, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 201, 201, 0, 201, 190, 201, 0, 190, 0, 0, - 190, 189, 189, 0, 0, 0, 0, 0, 0, 0, - 188, 0, 0, 0, 190, 190, 0, 190, 191, 190, - 0, 191, 0, 0, 191, 201, 201, 0, 0, 0, - 0, 0, 189, 189, 0, 0, 0, 0, 191, 191, - 0, 191, 0, 191, 203, 203, 203, 0, 0, 190, - 190, 0, 0, 0, 0, 204, 201, 201, 0, 0, + 0, 191, 191, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 203, 0, 0, 0, 0, + 0, 0, 183, 181, 191, 192, 163, 164, 165, 166, + 168, 0, 0, 178, 179, 196, 160, 161, 167, 172, + 171, 173, 169, 170, 0, 203, 203, 0, 0, 183, + 181, 191, 192, 163, 164, 165, 166, 168, 0, 0, + 178, 179, 197, 0, 161, 167, 172, 171, 173, 169, + 170, 0, 0, 0, 0, 0, 183, 181, 191, 192, + 163, 164, 165, 166, 168, 0, 0, 178, 179, 201, + 0, 0, 167, 172, 171, 173, 169, 170, 0, 0, + 0, 0, 0, 0, 196, 196, 0, 0, 196, 196, + 196, 196, 196, 0, 0, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 0, 0, 0, 0, + 188, 197, 197, 0, 0, 197, 197, 197, 197, 197, + 0, 0, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 0, 0, 0, 0, 190, 201, 201, + 0, 0, 201, 201, 201, 201, 201, 0, 0, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 191, 0, 0, 0, 0, 0, - 190, 190, 0, 188, 188, 188, 188, 188, 0, 0, + 0, 0, 0, 188, 188, 188, 188, 188, 191, 0, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 0, 0, 0, 191, 191, 0, 0, 0, 0, - 0, 0, 200, 0, 0, 200, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 200, 0, 200, 135, 200, 0, 135, 204, 204, 204, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, - 135, 135, 0, 135, 0, 135, 141, 0, 0, 141, - 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, - 0, 0, 0, 141, 141, 0, 141, 0, 141, 0, - 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, - 0, 0, 0, 189, 177, 200, 200, 0, 187, 185, - 0, 186, 184, 188, 0, 0, 0, 0, 141, 0, - 0, 0, 0, 0, 0, 0, 180, 135, 182, 0, - 0, 187, 187, 187, 187, 187, 0, 0, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 189, - 141, 0, 0, 189, 177, 0, 0, 0, 187, 185, - 176, 186, 184, 188, 0, 0, 0, 181, 0, 0, - 181, 0, 0, 201, 0, 0, 180, 0, 182, 0, - 0, 0, 0, 0, 181, 181, 0, 0, 0, 0, - 175, 182, 0, 0, 182, 0, 0, 190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 182, 182, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 181, - 0, 191, 189, 189, 189, 189, 189, 0, 0, 189, - 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, - 0, 0, 0, 182, 0, 0, 201, 201, 201, 201, - 201, 181, 0, 0, 0, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 0, 0, 0, 0, 0, 0, - 190, 190, 190, 190, 190, 182, 0, 0, 0, 190, + 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 190, 190, 190, 190, 190, 0, 0, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 0, 0, - 0, 0, 0, 0, 191, 191, 191, 191, 191, 183, - 0, 0, 183, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 200, 0, 0, 0, 183, 183, 0, 184, - 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, - 185, 0, 0, 135, 0, 0, 184, 184, 0, 0, - 192, 0, 0, 192, 185, 185, 0, 0, 0, 0, - 0, 183, 193, 0, 0, 193, 141, 192, 192, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, - 193, 184, 0, 0, 0, 0, 0, 0, 190, 185, - 0, 0, 0, 183, 0, 200, 200, 200, 200, 200, - 0, 0, 192, 0, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 184, 193, 0, 135, 135, 135, 135, - 135, 185, 0, 0, 0, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 192, 0, 0, 0, 190, 141, - 141, 141, 141, 141, 0, 0, 193, 0, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 0, 0, 0, - 0, 0, 0, 108, 0, 0, 0, 181, 0, 0, - 108, 0, 0, 108, 0, 108, 183, 181, 191, 192, - 0, 0, 0, 0, 0, 0, 0, 178, 179, 108, - 0, 182, 0, 0, 108, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 0, 183, 181, 191, 192, - 0, 0, 0, 0, 0, 0, 0, 178, 179, 0, + 0, 0, 203, 0, 189, 189, 189, 189, 189, 0, + 0, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 191, 191, 191, 191, 191, 0, 0, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 192, + 0, 0, 192, 0, 0, 192, 0, 0, 0, 0, + 0, 0, 0, 182, 0, 0, 182, 0, 0, 192, + 192, 0, 192, 0, 192, 203, 203, 203, 203, 203, + 182, 182, 0, 0, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 193, 0, 0, 193, 0, 0, 193, + 0, 0, 0, 0, 192, 192, 0, 181, 0, 0, + 181, 0, 0, 193, 193, 182, 193, 0, 193, 0, + 202, 0, 0, 202, 181, 181, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 192, 192, 202, 202, 0, + 202, 0, 202, 135, 0, 0, 135, 182, 193, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, - 181, 181, 0, 108, 104, 108, 108, 0, 0, 0, - 0, 104, 0, 0, 104, 0, 104, 0, 0, 0, - 0, 0, 0, 182, 182, 182, 0, 0, 0, 0, - 104, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, + 135, 135, 0, 135, 141, 135, 0, 141, 0, 0, + 0, 0, 202, 0, 0, 0, 0, 0, 0, 193, + 193, 141, 141, 0, 141, 0, 141, 0, 0, 0, + 0, 181, 189, 177, 0, 135, 0, 187, 185, 0, + 186, 184, 188, 202, 202, 0, 0, 0, 0, 0, + 0, 0, 0, 189, 177, 180, 141, 182, 187, 185, + 0, 186, 184, 188, 0, 0, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 0, 180, 189, 182, 0, + 0, 0, 187, 185, 0, 186, 184, 188, 141, 176, + 0, 0, 0, 0, 0, 205, 0, 0, 205, 0, + 180, 0, 182, 206, 0, 0, 206, 0, 0, 0, + 176, 183, 205, 205, 183, 184, 0, 0, 184, 175, + 206, 206, 185, 0, 0, 185, 0, 0, 183, 183, + 0, 186, 184, 184, 186, 0, 0, 0, 0, 185, + 185, 0, 0, 0, 0, 0, 0, 205, 186, 186, + 0, 0, 0, 0, 0, 206, 0, 0, 187, 0, + 0, 187, 0, 183, 0, 0, 0, 184, 194, 0, + 0, 194, 0, 0, 185, 187, 187, 0, 0, 205, + 0, 0, 192, 186, 0, 194, 194, 206, 0, 0, + 0, 0, 0, 182, 0, 183, 0, 0, 0, 184, + 0, 195, 0, 0, 195, 0, 185, 0, 0, 0, + 187, 0, 0, 0, 0, 186, 0, 0, 195, 195, + 194, 0, 0, 0, 0, 0, 193, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, + 202, 0, 194, 195, 0, 192, 192, 192, 192, 192, + 0, 0, 0, 0, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 135, 0, 182, 182, 182, 0, 0, + 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, + 0, 0, 0, 0, 141, 0, 0, 0, 0, 193, + 193, 193, 193, 193, 0, 0, 0, 190, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 0, 0, 181, + 181, 181, 0, 202, 202, 202, 202, 202, 190, 0, + 0, 0, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 135, 0, 190, 0, 0, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 0, 0, 0, 141, 141, 141, + 141, 141, 0, 0, 0, 0, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 205, 0, 0, 0, 0, + 0, 0, 0, 206, 0, 183, 181, 191, 192, 0, + 0, 183, 0, 0, 0, 184, 178, 179, 0, 0, + 0, 0, 185, 0, 0, 0, 183, 181, 191, 192, + 0, 186, 0, 108, 0, 0, 0, 178, 179, 0, + 108, 0, 0, 108, 0, 108, 0, 0, 0, 0, + 183, 181, 191, 192, 0, 0, 0, 0, 187, 108, + 0, 178, 179, 0, 108, 0, 0, 0, 194, 0, + 0, 0, 0, 0, 0, 0, 0, 205, 205, 205, + 0, 0, 0, 0, 0, 206, 206, 206, 0, 0, + 0, 0, 108, 183, 183, 183, 0, 184, 184, 184, + 0, 195, 0, 0, 185, 185, 185, 0, 0, 0, + 0, 0, 0, 186, 186, 186, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 108, 108, 104, 0, 0, + 0, 0, 0, 0, 104, 0, 0, 104, 0, 104, + 187, 187, 187, 0, 0, 0, 0, 0, 0, 0, + 194, 194, 194, 104, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 184, - 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 192, 0, 0, 0, 104, 0, 104, 104, 109, 0, - 0, 0, 193, 0, 0, 105, 0, 0, 107, 0, - 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 0, 0, 0, 0, 115, - 0, 183, 183, 183, 0, 0, 0, 0, 0, 0, + 0, 0, 109, 195, 195, 195, 104, 0, 0, 105, + 0, 0, 107, 109, 108, 0, 0, 0, 0, 0, + 105, 0, 0, 107, 0, 108, 0, 0, 350, 0, + 0, 0, 0, 115, 0, 0, 0, 104, 129, 104, + 104, 0, 0, 0, 115, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, - 0, 184, 184, 184, 0, 0, 109, 39, 0, 185, - 185, 185, 0, 105, 0, 0, 107, 0, 108, 0, - 0, 0, 192, 192, 192, 0, 0, 0, 0, 0, - 0, 129, 0, 0, 193, 193, 193, 115, 341, 0, - 0, 110, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 351, 0, 0, 110, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 108, 108, 39, 0, 0, 0, 0, - 108, 108, 108, 108, 0, 0, 108, 0, 0, 0, - 0, 104, 104, 104, 104, 104, 104, 0, 0, 0, - 108, 108, 108, 108, 0, 108, 108, 108, 0, 110, - 108, 108, 108, 108, 108, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 105, 109, 0, 107, 0, 108, - 0, 0, 105, 0, 0, 107, 0, 108, 0, 0, - 0, 0, 108, 108, 104, 239, 0, 109, 115, 0, - 0, 0, 0, 241, 105, 0, 115, 107, 0, 108, - 0, 0, 0, 0, 104, 104, 0, 0, 0, 0, - 0, 104, 104, 104, 104, 251, 39, 104, 115, 0, - 0, 0, 0, 0, 39, 116, 56, 57, 58, 59, - 60, 104, 104, 104, 104, 0, 104, 104, 104, 0, - 0, 104, 0, 104, 104, 104, 39, 0, 0, 0, - 110, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 104, 0, 0, 0, 114, 0, - 110, 0, 109, 116, 56, 57, 58, 59, 60, 105, - 0, 0, 107, 0, 108, 0, 0, 0, 62, 117, - 0, 0, 0, 0, 0, 118, 329, 330, 331, 0, - 253, 113, 109, 115, 0, 0, 0, 0, 0, 105, - 0, 0, 107, 0, 108, 332, 333, 334, 335, 0, - 336, 337, 106, 0, 0, 338, 114, 339, 0, 0, - 0, 39, 109, 115, 0, 0, 0, 0, 0, 105, - 0, 0, 107, 0, 108, 0, 62, 117, 0, 0, - 0, 0, 0, 118, 0, 0, 0, 111, 112, 113, - 0, 39, 0, 115, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 116, 56, 57, 58, 59, 60, - 106, 0, 116, 56, 57, 58, 59, 60, 0, 0, - 0, 39, 0, 0, 0, 110, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 108, 0, 0, 0, 0, 0, + 108, 108, 108, 108, 0, 0, 108, 0, 0, 0, + 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, + 108, 108, 108, 108, 0, 108, 108, 108, 0, 0, + 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 107, 0, 108, + 0, 0, 108, 108, 0, 0, 0, 104, 0, 116, + 56, 57, 58, 59, 60, 239, 0, 0, 115, 0, + 116, 56, 57, 58, 59, 60, 0, 104, 104, 0, + 0, 0, 0, 0, 104, 104, 104, 104, 0, 0, + 104, 0, 0, 0, 0, 0, 39, 0, 0, 0, + 0, 0, 0, 0, 104, 104, 104, 104, 0, 104, + 104, 104, 114, 0, 104, 0, 104, 104, 104, 0, + 0, 0, 0, 114, 109, 0, 0, 0, 0, 0, + 110, 105, 62, 117, 107, 0, 108, 0, 0, 118, + 339, 340, 341, 62, 117, 113, 104, 104, 0, 0, + 118, 0, 241, 0, 0, 115, 113, 0, 0, 342, + 343, 344, 345, 109, 346, 347, 106, 0, 0, 348, + 105, 349, 0, 107, 0, 108, 0, 106, 0, 0, + 0, 0, 0, 39, 0, 0, 0, 0, 109, 0, + 0, 251, 0, 0, 115, 105, 0, 0, 107, 0, + 108, 111, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 111, 112, 0, 0, 253, 110, 109, 115, + 0, 0, 39, 0, 0, 105, 0, 0, 107, 0, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 39, 0, 115, + 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 116, 56, 57, 58, 59, 60, - 0, 0, 0, 0, 0, 111, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 110, 0, 114, 0, 0, - 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 117, 0, - 0, 0, 0, 0, 118, 62, 117, 114, 0, 0, - 113, 0, 118, 0, 0, 0, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 117, 0, - 0, 106, 0, 0, 118, 0, 0, 0, 0, 106, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, - 0, 106, 0, 0, 0, 0, 111, 112, 0, 0, - 0, 0, 0, 0, 111, 112, 0, 0, 0, 116, - 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 111, 112, 0, 0, - 0, 0, 114, 0, 0, 0, 0, 0, 0, 143, - 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, - 0, 0, 62, 117, 0, 0, 0, 0, 0, 118, - 0, 0, 114, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 39, 0, 0, + 0, 110, 0, 105, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 62, 117, 0, 0, 106, 0, 0, 118, - 0, 0, 114, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, + 0, 110, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 144, 117, 130, 0, 106, 0, 0, 118, - 0, 111, 112, 0, 0, 113, 0, 0, 145, 146, - 147, 148, 149, 150, 151, 152, 0, 154, 155, 0, - 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, - 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 39, 0, 62, 117, 0, + 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, + 113, 116, 56, 57, 58, 59, 60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, + 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 116, 56, 57, 58, 59, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 114, 0, 111, 112, 0, 0, + 0, 0, 0, 0, 0, 116, 56, 57, 58, 59, + 60, 0, 0, 0, 62, 117, 0, 0, 0, 0, + 0, 118, 0, 0, 0, 0, 0, 113, 0, 0, + 0, 0, 0, 114, 0, 116, 56, 57, 58, 59, + 60, 0, 0, 0, 0, 0, 0, 0, 106, 0, + 0, 0, 0, 62, 117, 0, 0, 0, 114, 0, + 118, 0, 0, 0, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 117, + 0, 0, 0, 111, 112, 118, 0, 106, 114, 0, + 0, 113, 0, 143, 56, 57, 58, 59, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 117, + 0, 0, 106, 0, 0, 118, 0, 0, 0, 0, + 0, 113, 111, 112, 0, 0, 0, 0, 0, 0, + 0, 120, 0, 0, 0, 130, 0, 0, 0, 0, + 0, 0, 106, 0, 0, 0, 114, 111, 112, 145, + 146, 147, 148, 149, 150, 151, 152, 0, 154, 155, + 0, 0, 0, 0, 0, 0, 144, 117, 0, 0, + 0, 0, 0, 118, 0, 0, 0, 111, 112, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 112, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 240, 242, 243, 244, 245, 246, 248, 249, - 250, 252, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 246, 275, 0, 276, 0, 0, - 0, 0, 283, 0, 0, 0, 284, 285, 0, 287, - 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, + 106, 0, 0, 0, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 240, 242, 243, 244, 245, 246, 248, + 249, 250, 252, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 0, 111, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 246, 275, 0, 276, 0, + 0, 0, 0, 283, 0, 0, 0, 284, 285, 0, + 287, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 246, 0, 0, 305, 306, 0, 0, 0, 0, + 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 120, 120, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, - 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 120, 246, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 120, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, + 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 394, 0, 396, 0, 0, 397, 398, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 120, 0, 414, 0, 0, 0, + 120, 400, 0, 402, 0, 0, 403, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, + 0, 120, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 445, + 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 450, ); protected static $yyCheck = array(33, - 41, 41, 36, 37, 44, 36, 37, 125, 123, 6, - 260, 92, 37, 47, 5, 260, 50, 42, 52, 50, - 54, 52, 47, 54, 92, 153, 224, 312, 41, 260, - 35, 40, 59, 125, 25, 158, 70, 41, 334, 70, - 44, 47, 76, 77, 340, 320, 59, 35, 39, 44, - 321, 85, 37, 38, 85, 40, 41, 42, 43, 44, - 45, 46, 47, 92, 201, 59, 92, 260, 123, 300, - 76, 77, 92, 58, 59, 60, 61, 62, 63, 37, - 38, 59, 91, 41, 42, 43, 44, 45, 46, 47, - 340, 44, 215, 35, 41, 340, 123, 44, 93, 59, - 58, 59, 60, 61, 62, 63, 59, 38, 93, 94, - 41, 58, 59, 44, 123, 300, 301, 402, 403, 153, - 125, 41, 41, 321, 44, 44, 44, 58, 59, 123, - 61, 268, 63, 91, 91, 93, 94, 125, 123, 124, - 125, 59, 41, 44, 141, 44, 93, 41, 64, 334, - 44, 92, 44, 351, 41, 340, 190, 44, 59, 190, - 59, 93, 93, 94, 35, 123, 124, 125, 40, 334, - 310, 58, 59, 296, 70, 340, 37, 38, 125, 260, - 41, 42, 43, 44, 45, 46, 47, 310, 310, 85, - 300, 301, 260, 124, 125, 311, 311, 58, 59, 60, - 61, 62, 63, 37, 38, 260, 93, 41, 42, 43, - 44, 45, 46, 47, 40, 41, 353, 280, 281, 282, - 283, 284, 285, 123, 58, 59, 60, 61, 62, 63, - 91, 260, 93, 94, 260, 261, 262, 263, 264, 265, - 41, 61, 370, 44, 37, 38, 40, 41, 41, 42, - 43, 44, 45, 46, 47, 373, 374, 91, 59, 93, - 94, 61, 123, 124, 125, 58, 59, 60, 61, 62, - 63, 410, 340, 307, 300, 280, 281, 282, 283, 284, - 285, 373, 374, 402, 403, 340, 40, 312, 41, 123, - 124, 125, 280, 281, 282, 283, 284, 285, 44, 41, - 93, 94, 44, 41, 333, 41, 44, 333, 373, 374, - 123, 41, 76, 77, 44, 44, 58, 59, 352, 260, - 346, 59, 40, 332, 260, 310, 311, 312, 58, 59, - 335, 124, 125, 300, 301, 40, 370, 40, 280, 281, - 282, 283, 284, 285, 410, 41, 331, 335, 41, 92, - 44, 93, 44, 61, 312, 340, 37, 260, 300, 301, - 61, 42, 43, 93, 45, 46, 47, 340, 40, 410, - 410, 340, 40, 331, 332, 40, 58, 402, 403, 321, - 41, 37, 38, 125, 331, 41, 42, 43, 44, 45, - 46, 47, 333, 44, 40, 125, 41, 123, 432, 340, - 331, 432, 58, 59, 60, 61, 62, 63, 40, 280, - 281, 282, 283, 284, 285, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 41, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 93, 94, 93, - 41, 41, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 312, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 41, 340, 413, 414, 124, 125, - 331, 332, 44, 404, 405, 406, 407, 408, 312, 123, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 260, 261, 262, 263, 264, 265, 331, 332, 125, - 41, 41, 58, 40, 40, 37, 38, 40, 59, 41, - 42, 43, 44, 45, 46, 47, 59, 260, 40, 312, - 40, 125, 361, 125, 59, 59, 58, 59, 60, 61, - 62, 63, 40, 125, 344, 340, 123, 413, 331, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 59, 41, + 41, 125, 36, 37, 41, 36, 37, 44, 123, 125, + 92, 153, 260, 47, 92, 40, 50, 123, 52, 50, + 54, 52, 92, 54, 37, 38, 6, 92, 201, 42, + 43, 35, 45, 46, 47, 312, 70, 260, 59, 70, + 35, 47, 76, 77, 260, 59, 320, 60, 44, 62, + 92, 85, 300, 44, 85, 37, 38, 41, 40, 41, + 42, 43, 44, 45, 46, 47, 91, 35, 59, 44, + 76, 77, 300, 301, 321, 59, 58, 59, 60, 61, + 62, 63, 37, 38, 59, 44, 41, 42, 43, 44, + 45, 46, 47, 334, 260, 268, 5, 93, 123, 340, + 59, 158, 123, 58, 59, 60, 61, 62, 63, 123, + 41, 93, 94, 44, 35, 41, 25, 340, 44, 153, + 70, 125, 92, 334, 340, 402, 403, 58, 59, 340, + 39, 59, 58, 59, 41, 85, 91, 44, 93, 94, + 37, 123, 124, 125, 59, 42, 43, 35, 45, 46, + 47, 91, 59, 64, 260, 93, 190, 125, 215, 190, + 44, 141, 93, 60, 40, 62, 310, 93, 123, 124, + 125, 224, 41, 41, 41, 44, 44, 44, 260, 37, + 38, 310, 260, 41, 42, 43, 44, 45, 46, 47, + 260, 364, 59, 311, 125, 260, 311, 40, 41, 125, + 58, 59, 60, 61, 62, 63, 37, 38, 300, 301, + 41, 42, 43, 44, 45, 46, 47, 359, 260, 123, + 41, 41, 41, 44, 44, 44, 61, 58, 59, 60, + 61, 62, 63, 91, 340, 93, 94, 58, 59, 296, + 59, 41, 334, 61, 44, 40, 35, 410, 340, 373, + 374, 37, 44, 310, 41, 333, 42, 373, 374, 41, + 91, 47, 93, 94, 123, 123, 124, 125, 333, 322, + 340, 41, 93, 307, 44, 340, 280, 281, 282, 283, + 284, 285, 44, 336, 40, 280, 281, 282, 283, 284, + 285, 333, 123, 124, 125, 40, 41, 260, 340, 312, + 402, 403, 40, 337, 125, 300, 301, 332, 300, 301, + 300, 301, 280, 281, 282, 283, 284, 285, 41, 373, + 374, 44, 76, 77, 40, 359, 321, 410, 310, 311, + 312, 335, 37, 41, 44, 58, 59, 42, 43, 41, + 45, 46, 47, 44, 334, 40, 61, 260, 61, 331, + 340, 280, 281, 282, 283, 284, 285, 312, 340, 280, + 281, 282, 283, 284, 285, 41, 340, 335, 44, 410, + 93, 340, 40, 410, 40, 44, 331, 332, 41, 300, + 301, 58, 58, 59, 40, 321, 41, 400, 401, 402, + 403, 40, 280, 281, 282, 283, 284, 285, 411, 412, + 331, 41, 125, 437, 93, 331, 437, 41, 41, 40, + 340, 123, 300, 301, 41, 312, 44, 93, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 41, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 41, 58, 123, 125, 40, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 312, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 59, 41, 40, + 40, 44, 59, 331, 332, 260, 261, 262, 263, 264, + 265, 312, 413, 414, 415, 58, 59, 413, 61, 40, + 63, 280, 281, 282, 283, 284, 285, 40, 59, 125, + 331, 332, 125, 400, 401, 402, 403, 361, 37, 38, + 331, 59, 41, 42, 43, 44, 45, 46, 47, 125, + 93, 94, 40, 123, 340, 59, 312, 344, 413, 58, + 59, 60, 61, 62, 63, 41, 40, 371, 59, 340, + 125, 41, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 124, 125, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 93, 94, 58, 340, 41, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 123, 223, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 93, 94, 371, 92, 40, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 59, 125, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 340, 331, - 333, 41, 124, 125, 58, 340, 41, 340, 123, 125, - 93, 331, 123, 41, 123, 123, 41, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 41, 41, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 37, - 38, 312, 41, 41, 42, 43, 44, 45, 46, 47, - 300, 301, 340, 41, 41, 58, 44, 41, 41, 93, - 58, 59, 60, 61, 62, 63, 312, 125, 41, 41, - 58, 59, 44, 59, 59, 41, 125, 125, 7, 84, - 141, 413, 414, 415, 334, 331, 58, 59, 205, 61, - 340, 63, 206, 37, 38, 93, 94, 41, 42, 43, - 44, 45, 46, 47, 42, 93, 41, 35, 82, 352, - 431, 411, 345, 91, 58, 59, 60, 61, 62, 63, - 293, 93, 94, 204, 199, 23, 124, 125, -1, 35, - -1, 402, 403, -1, -1, -1, -1, 125, -1, -1, - -1, -1, 260, 261, 262, 263, 264, 265, -1, 93, - 94, -1, 124, 125, 400, 401, 402, 403, 404, 405, - 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, -1, 37, 38, -1, - 124, 125, 42, 43, -1, 45, 46, 47, -1, -1, - 312, -1, -1, 41, -1, -1, 44, 341, -1, -1, - 60, -1, 62, -1, -1, -1, -1, -1, -1, 331, - 58, 59, -1, 37, 38, 333, -1, 41, 42, 43, - 44, 45, 46, 47, -1, -1, -1, -1, 346, 41, - -1, 375, 44, -1, 58, 59, 60, 61, 62, 63, - -1, -1, -1, -1, 388, 93, 58, 59, -1, -1, + 421, 93, 413, 414, 415, 124, 125, 125, 123, 123, + 41, 123, 41, 41, 41, 37, 38, 312, 331, 41, + 42, 43, 44, 45, 46, 47, 402, 403, 41, 340, + 41, 41, 58, 267, 93, 123, 58, 59, 60, 61, + 62, 63, 37, 38, 41, 41, 41, 42, 43, 44, + 45, 46, 47, 125, 288, 289, 59, 59, 41, 125, + 125, 7, 141, 58, 59, 60, 61, 62, 63, 37, + 38, 93, 94, 41, 42, 43, 44, 45, 46, 47, + 314, 206, 205, 84, 42, 319, 41, 337, 82, 436, + 58, 59, 60, 61, 62, 63, 416, 330, 93, 94, + 413, 414, 124, 125, 92, 91, 355, 402, 403, 293, + 199, 204, 23, 37, 38, -1, -1, 41, 42, 43, + 44, 45, 46, 47, -1, 93, 94, -1, -1, 124, + 125, -1, -1, -1, 58, 59, 60, 61, 62, 63, 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, - 47, -1, -1, -1, -1, -1, -1, -1, -1, 93, - 94, 58, 59, 60, 61, 62, 63, 125, 400, 401, - -1, 93, 404, 405, 406, 407, 408, -1, -1, 411, + 47, -1, 386, -1, -1, -1, 124, 125, -1, -1, + -1, 58, 59, 60, 61, 62, 63, -1, 331, 93, + 94, -1, -1, 407, -1, -1, -1, 41, -1, -1, + 44, 37, 38, -1, -1, 41, 42, 43, 44, 45, + 46, 47, 426, 312, 58, 59, 93, 94, -1, -1, + 124, 125, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, 331, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 124, 125, 93, + -1, -1, -1, -1, -1, -1, -1, 93, 94, -1, + -1, 404, 405, 406, 407, 408, -1, -1, -1, -1, + 413, 414, 415, 416, 417, 418, 419, 420, 421, -1, + -1, 125, -1, -1, -1, -1, -1, -1, 124, 125, + -1, -1, 260, 261, 262, 263, 264, 265, -1, -1, + -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 312, -1, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, -1, -1, -1, -1, -1, -1, 331, + -1, -1, 300, -1, -1, -1, 41, 312, -1, 44, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -1, 331, 58, 59, -1, + -1, -1, -1, -1, 312, 333, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 346, -1, + -1, -1, -1, 331, -1, -1, -1, -1, 93, -1, + -1, -1, 93, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, 312, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 124, 125, 446, -1, -1, 449, 93, 94, 41, 453, - -1, 44, -1, 125, 312, -1, -1, 41, -1, -1, - 44, -1, -1, -1, -1, 58, 59, -1, -1, -1, - -1, -1, -1, 331, 58, 59, -1, 124, 125, -1, - -1, 37, 38, 331, -1, 41, 42, 43, 44, 45, - 46, 47, 280, 281, 282, 283, 284, 285, -1, 331, - 93, -1, 58, 59, 60, 61, 62, 63, 312, 93, - -1, -1, 300, 301, 280, 281, 282, 283, 284, 285, - -1, -1, -1, -1, -1, -1, -1, 331, -1, -1, - -1, -1, 125, -1, 300, 301, -1, 93, 94, -1, - -1, 125, 400, 401, -1, -1, 404, 405, 406, 407, + 125, -1, -1, -1, 125, 400, 401, 331, -1, 404, + 405, 406, 407, 408, -1, 312, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, -1, 351, -1, + -1, -1, 400, 401, 331, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, -1, 413, 414, 415, 124, 125, - -1, -1, 404, 405, 406, 407, 408, -1, -1, -1, - -1, 413, 414, 415, 416, 417, 418, 419, 420, 421, - -1, -1, 312, -1, -1, -1, 400, 401, -1, -1, + 418, 419, 420, 421, -1, -1, 312, -1, 381, -1, + -1, 384, -1, -1, -1, 92, -1, 331, -1, -1, + -1, -1, -1, -1, -1, 331, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, - -1, -1, -1, 331, -1, -1, -1, -1, 312, -1, - -1, 37, 38, -1, -1, 41, 42, 43, 44, 45, - 46, 47, -1, -1, -1, -1, -1, 331, -1, -1, - -1, -1, 58, 59, 60, 61, 62, 63, -1, 331, - -1, -1, -1, -1, -1, 312, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 400, 401, 402, 403, 331, -1, -1, 93, 94, 37, - 38, 411, 412, 41, 42, 43, 44, 45, 46, 47, - -1, -1, -1, -1, -1, 413, 414, 415, -1, -1, - 58, 59, 60, 61, 62, 63, 400, 401, 124, 125, - 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 331, -1, - -1, 413, 414, 415, -1, 93, 94, 331, -1, 358, -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 331, 124, 125, -1, -1, - 37, 38, -1, -1, 41, 42, 43, 44, 45, 46, - 47, -1, -1, 402, -1, -1, 405, -1, -1, -1, - -1, 58, 59, 60, 61, 62, 63, -1, -1, -1, - -1, -1, -1, -1, -1, 424, -1, 37, 38, -1, - 413, 41, 42, -1, 44, -1, 46, 47, 437, 413, - 414, 415, -1, -1, 443, -1, 93, 94, 58, 59, - 60, 61, 62, 63, 400, 401, -1, -1, 404, 405, + 417, 418, 419, 420, 421, -1, -1, -1, 451, -1, + -1, 454, -1, -1, -1, 458, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, -1, 124, 125, -1, - 37, 38, -1, 93, 94, 42, 43, -1, 45, 46, - 47, -1, -1, -1, 223, -1, -1, -1, -1, -1, - -1, -1, 37, 60, 61, 62, 63, 42, 43, -1, - 45, 46, 47, -1, 124, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 60, -1, 62, -1, -1, - -1, -1, -1, -1, 91, 331, -1, 94, 267, 37, - 38, -1, -1, -1, 42, 43, -1, 45, 46, 47, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 288, - 289, -1, 60, 61, 62, 63, 123, 124, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, - -1, 41, 42, 43, 313, 45, 46, 47, -1, 318, - -1, -1, -1, 331, -1, -1, 94, -1, -1, -1, - 60, 61, 62, 63, 400, 401, -1, -1, 404, 405, - 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 124, -1, -1, -1, - -1, -1, -1, -1, 94, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 377, -1, - -1, -1, 58, 59, -1, -1, -1, -1, -1, -1, - -1, -1, 400, 401, 124, -1, 404, 405, 406, 407, - 408, -1, 401, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 331, -1, -1, 93, -1, 37, - 38, -1, 421, -1, 42, 43, -1, 45, 46, 47, - -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 60, 61, 62, 63, -1, -1, -1, 125, - -1, 331, -1, -1, -1, 37, 38, -1, -1, -1, - 42, 43, -1, 45, 46, 47, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, -1, 60, 61, - 62, 63, -1, 400, 401, 312, -1, 404, 405, 406, - 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 332, 124, 312, -1, -1, - -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, - 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, - -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 124, 125, 312, -1, -1, -1, -1, -1, + 416, 417, 418, 419, 420, 421, 37, 38, -1, -1, + 41, 42, 43, 44, 45, 46, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, + 61, 62, 63, 37, 38, -1, -1, 41, 42, 43, + 44, 45, 46, 47, -1, -1, 331, -1, -1, -1, + 331, -1, -1, -1, 58, 59, 60, 61, 62, 63, + 37, 38, 93, 94, 41, 42, 43, 44, 45, 46, + 47, -1, -1, 260, 261, 262, 263, 264, 265, -1, + -1, 58, 59, 60, 61, 62, 63, -1, -1, 93, + 94, -1, -1, 124, 125, -1, -1, -1, -1, -1, + -1, 37, 38, -1, -1, 41, 42, 43, 44, 45, + 46, 47, -1, -1, -1, -1, 93, 94, -1, -1, + 124, 125, 58, 59, 60, 61, 62, 63, 413, -1, + 37, 38, 413, 414, 415, 42, 43, -1, 45, 46, + 47, 369, -1, -1, -1, -1, 333, 124, 125, -1, + -1, -1, -1, 60, 61, 62, 63, 93, 94, 346, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, 38, -1, -1, 41, 42, -1, 44, + 408, 46, 47, 411, 91, -1, -1, 94, 124, 125, + -1, -1, -1, 58, 59, 60, 61, 62, 63, 37, + 38, 429, -1, -1, 42, 43, -1, 45, 46, 47, + -1, -1, -1, -1, 442, -1, 123, 124, -1, -1, + 448, -1, 60, 61, 62, 63, -1, -1, 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 38, -1, -1, 41, 42, 43, -1, 45, + 46, 47, -1, -1, -1, 41, 94, -1, 44, 124, + 125, -1, -1, -1, 60, 61, 62, 63, -1, 37, + 38, -1, 58, 59, 42, 43, -1, 45, 46, 47, + -1, -1, -1, -1, -1, -1, 124, -1, -1, -1, + -1, -1, 60, 61, 62, 63, -1, -1, 94, -1, + 331, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, 37, 38, -1, -1, -1, 42, 43, -1, 45, + 46, 47, -1, -1, -1, -1, 94, 331, 124, -1, + -1, -1, -1, -1, 60, 61, 62, 63, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 331, -1, 124, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 94, 400, + 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, -1, -1, -1, -1, 331, 400, 401, 124, 125, + 404, 405, 406, 407, 408, 312, -1, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, + -1, -1, -1, 400, 401, 332, -1, 404, 405, 406, + 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, 331, -1, 404, 405, + 406, 407, 408, -1, 312, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 312, 410, 411, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 400, 401, 402, 403, -1, - -1, -1, -1, -1, -1, 37, 38, -1, -1, -1, - 42, 43, -1, 45, 46, 47, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, - 62, 63, 400, 401, 402, 403, 404, 405, 406, 407, + 407, 408, -1, 410, 411, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, -1, 312, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 400, 401, -1, -1, 404, + 405, 406, 407, 408, 312, 331, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, -1, 331, -1, -1, -1, -1, - -1, -1, 94, -1, -1, -1, -1, -1, -1, -1, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 420, 421, 124, 125, 312, -1, -1, -1, -1, -1, + 418, 419, 420, 421, -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, - -1, -1, 42, 43, -1, 45, 46, 47, -1, -1, - 312, -1, -1, -1, -1, -1, -1, 413, -1, 59, - 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37, 38, -1, -1, -1, 42, 43, - -1, 45, 46, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 94, 59, 60, 61, 62, 63, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 420, 421, -1, 413, 414, 415, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 124, -1, -1, -1, -1, -1, - 94, -1, -1, -1, -1, -1, -1, -1, 400, 401, - 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, - 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, - 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, 38, -1, -1, 41, 42, 43, -1, 45, 46, + 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, + 406, 407, 408, -1, -1, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 420, 421, 37, 38, -1, -1, + -1, 42, 43, -1, 45, 46, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, + 61, 62, 63, 37, 38, -1, -1, -1, 42, 43, + -1, 45, 46, 47, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, 60, 61, 62, 63, + 37, 38, -1, 94, -1, 42, 43, -1, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, 60, 61, 62, 63, -1, -1, -1, + 94, -1, -1, 124, 125, -1, -1, -1, -1, -1, + -1, -1, -1, 37, 38, -1, -1, 41, 42, 43, + -1, 45, 46, 47, -1, -1, -1, 94, -1, -1, + 124, -1, -1, -1, -1, -1, 60, 61, 62, 63, + 37, 38, -1, -1, 41, 42, 43, -1, 45, 46, + 47, -1, -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, 60, 61, 62, 63, 37, 38, -1, - 312, -1, 42, 43, -1, 45, 46, 47, -1, -1, + 94, -1, 42, 43, -1, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 60, 61, 62, 63, 37, 38, -1, 94, 41, 42, + 60, 61, 62, 63, -1, -1, -1, 94, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 37, 38, -1, -1, 41, 42, 43, -1, 45, 46, + 47, -1, -1, -1, 94, -1, -1, 124, -1, -1, + -1, -1, -1, 60, 61, 62, 63, 37, 38, -1, + -1, 41, 42, 43, -1, 45, 46, 47, -1, -1, + -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, + 60, 61, 62, 63, 37, 38, -1, 94, -1, 42, 43, -1, 45, 46, 47, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, - 63, -1, -1, 37, 94, -1, -1, 124, 42, 43, - -1, 45, 46, 47, -1, 41, -1, -1, 44, 41, - -1, -1, 44, -1, -1, -1, 60, -1, 62, -1, - -1, 94, 58, 59, 124, -1, 58, 59, 400, 401, - 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, - 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, - -1, 124, 312, -1, -1, -1, -1, 93, -1, -1, - -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 37, 38, -1, -1, 41, - 42, 43, -1, 45, 46, 47, -1, -1, 312, 125, - -1, -1, -1, 125, -1, -1, -1, -1, 60, 61, - 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 38, -1, -1, 41, 42, 43, -1, 45, - 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 94, -1, 60, 61, 62, 63, -1, -1, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, - -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 420, 421, 124, -1, -1, -1, -1, -1, 94, -1, + -1, -1, -1, -1, -1, 58, -1, 60, 61, 62, + 63, 312, 41, -1, 94, 44, -1, 124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, -1, -1, -1, -1, -1, -1, -1, 312, 41, + -1, 94, 44, -1, 124, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + -1, -1, -1, -1, 93, 312, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, -1, -1, 125, -1, -1, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 312, -1, + 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, -1, -1, 125, -1, -1, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 312, -1, 411, 412, -1, + 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 312, -1, 411, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, + -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, 312, -1, 411, 412, -1, - 414, 415, 416, 417, 418, 419, 420, 421, 124, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - 38, -1, 312, -1, 42, 43, -1, 45, 46, 47, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 331, 60, 61, 62, 63, -1, -1, -1, 312, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 312, -1, 411, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 312, + -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, + 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, -1, 312, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, - 407, 408, -1, -1, 411, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 331, 124, -1, -1, 331, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, + 407, 408, 331, -1, 411, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 331, -1, 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, - 312, -1, -1, -1, -1, -1, 400, 401, 402, 403, - -1, -1, -1, -1, 37, 38, -1, 411, 412, 42, - 43, -1, 45, 46, 47, -1, -1, 413, 414, 415, - -1, 413, 414, 415, -1, -1, 312, 60, 61, 62, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 37, 38, -1, -1, -1, 42, 43, -1, 45, 46, 47, - -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 60, 61, 62, 63, -1, -1, 400, 401, - 402, 403, 404, 405, 406, 407, 408, -1, -1, 411, - 412, 124, 414, 415, 416, 417, 418, 419, 420, 421, - -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, - -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, - 406, 407, 408, -1, 312, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 124, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, - -1, -1, 42, 43, -1, 45, 46, 47, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 38, -1, -1, 41, -1, - 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 94, 58, 59, 60, 61, 62, - 63, -1, 400, 401, 402, 403, 404, 405, 406, 407, - 408, -1, -1, 411, 412, -1, 414, 415, 416, 417, - 418, 419, 420, 421, 124, -1, -1, -1, -1, 38, - 93, 94, 41, -1, 43, 44, 45, 46, -1, -1, - -1, 41, -1, -1, 44, -1, -1, -1, -1, 58, - 59, 60, 61, 62, 63, -1, -1, -1, 58, 59, - -1, 124, 125, -1, -1, -1, -1, 38, -1, 312, + -1, -1, -1, -1, 413, 414, 415, -1, -1, -1, + -1, -1, 60, 61, 62, 63, 37, 38, -1, -1, + -1, 42, 43, -1, 45, 46, 47, -1, -1, -1, + -1, 413, 414, 415, -1, -1, -1, -1, -1, 60, + 61, 62, 63, 37, 38, -1, 94, -1, 42, 43, + -1, 45, 46, 47, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 60, 61, 62, 63, + -1, -1, 38, 94, -1, 41, 124, 43, 44, 45, + 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 58, 59, 60, 61, 62, 63, -1, 38, + 94, -1, 41, 124, 43, 44, 45, 46, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, 61, 62, 63, -1, 38, 93, 94, 41, + 124, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, 93, 94, -1, -1, 124, 125, + -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 93, 94, -1, 58, 59, 60, - 61, 62, 63, 93, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 312, 124, 125, -1, -1, -1, - -1, -1, 93, 94, -1, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, 94, -1, -1, 124, 125, 58, 59, -1, + 61, -1, 63, -1, 38, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 58, 59, -1, 61, 38, 63, + -1, 41, 93, 94, 44, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 61, -1, 63, -1, 38, -1, -1, 41, 93, + 94, 44, -1, 124, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 312, 58, 59, -1, 61, -1, + 63, -1, -1, 93, 94, -1, -1, -1, -1, -1, + 124, 125, -1, -1, -1, -1, -1, -1, -1, 38, + -1, 312, 41, -1, -1, 44, -1, -1, -1, -1, + 93, 94, -1, -1, 124, 125, -1, -1, -1, 58, + 59, -1, 61, -1, 63, -1, -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, -1, -1, 400, 401, 402, - 403, 404, 405, 406, 407, 408, -1, -1, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, - -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, - 59, -1, 400, 401, 402, 403, 404, 405, 406, 407, - 408, -1, 312, 411, 412, -1, -1, 415, 416, 417, - 418, 419, 420, 421, -1, -1, -1, 38, -1, -1, - 41, -1, -1, 44, 93, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - 61, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 125, -1, 331, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, - -1, -1, 93, 94, -1, -1, -1, -1, -1, -1, - -1, -1, 58, 59, -1, -1, -1, -1, -1, -1, - 400, 401, 402, 403, 404, 405, 406, 407, 408, -1, - -1, 411, 412, 124, 125, -1, 416, 417, 418, 419, - 420, 421, 331, -1, -1, -1, -1, 93, -1, -1, - -1, 331, -1, -1, -1, -1, -1, 400, 401, -1, - -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 125, - 331, -1, -1, -1, -1, 38, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, 61, -1, - 63, 400, 401, -1, -1, 404, 405, 406, 407, 408, + -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, 94, -1, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 406, 407, + 408, -1, -1, 411, 412, 331, 414, 415, 416, 417, + 418, 419, 420, 421, -1, 124, 125, -1, -1, 400, + 401, 402, 403, 404, 405, 406, 407, 408, -1, -1, + 411, 412, 331, -1, 415, 416, 417, 418, 419, 420, + 421, -1, -1, -1, -1, -1, 400, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, 411, 412, 331, + -1, -1, 416, 417, 418, 419, 420, 421, -1, -1, + -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, + 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, + 331, 400, 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 413, 414, 415, -1, -1, -1, -1, - 93, 94, -1, -1, -1, -1, -1, -1, -1, 400, - 401, -1, -1, 404, 405, 406, 407, 408, -1, -1, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 124, 125, -1, -1, -1, 38, -1, -1, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 331, -1, -1, -1, 58, 59, -1, 61, - 38, 63, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 59, -1, 61, 38, 63, -1, 41, -1, -1, - 44, 93, 94, -1, -1, -1, -1, -1, -1, -1, - 331, -1, -1, -1, 58, 59, -1, 61, 38, 63, - -1, 41, -1, -1, 44, 93, 94, -1, -1, -1, - -1, -1, 124, 125, -1, -1, -1, -1, 58, 59, - -1, 61, -1, 63, 413, 414, 415, -1, -1, 93, - 94, -1, -1, -1, -1, 331, 124, 125, -1, -1, + 419, 420, 421, -1, -1, -1, -1, 331, 400, 401, + -1, -1, 404, 405, 406, 407, 408, -1, -1, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 94, -1, -1, -1, -1, -1, - 124, 125, -1, 404, 405, 406, 407, 408, -1, -1, + -1, -1, -1, 404, 405, 406, 407, 408, 331, -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, -1, -1, -1, 124, 125, -1, -1, -1, -1, - -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, - 59, -1, 61, 41, 63, -1, 44, 413, 414, 415, - -1, -1, -1, -1, -1, -1, -1, -1, 331, -1, - 58, 59, -1, 61, -1, 63, 41, -1, -1, 44, - -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, 61, -1, 63, -1, - -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, - -1, -1, -1, 37, 38, 124, 125, -1, 42, 43, - -1, 45, 46, 47, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, 60, 125, 62, -1, - -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 331, - 125, -1, -1, 37, 38, -1, -1, -1, 42, 43, - 94, 45, 46, 47, -1, -1, -1, 41, -1, -1, - 44, -1, -1, 331, -1, -1, 60, -1, 62, -1, - -1, -1, -1, -1, 58, 59, -1, -1, -1, -1, - 124, 41, -1, -1, 44, -1, -1, 331, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 94, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, 331, 404, 405, 406, 407, 408, -1, -1, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - -1, -1, -1, 93, -1, -1, 404, 405, 406, 407, - 408, 125, -1, -1, -1, 413, 414, 415, 416, 417, - 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, - 404, 405, 406, 407, 408, 125, -1, -1, -1, 413, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 404, 405, 406, 407, 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, - -1, -1, -1, -1, 404, 405, 406, 407, 408, 41, - -1, -1, 44, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 331, -1, -1, -1, 58, 59, -1, 41, - -1, -1, 44, -1, -1, -1, -1, 41, -1, -1, - 44, -1, -1, 331, -1, -1, 58, 59, -1, -1, + -1, -1, 331, -1, 404, 405, 406, 407, 408, -1, + -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 404, 405, 406, 407, 408, -1, -1, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 38, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, 41, -1, -1, 44, -1, -1, 58, + 59, -1, 61, -1, 63, 404, 405, 406, 407, 408, + 58, 59, -1, -1, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 38, -1, -1, 41, -1, -1, 44, + -1, -1, -1, -1, 93, 94, -1, 41, -1, -1, + 44, -1, -1, 58, 59, 93, 61, -1, 63, -1, 41, -1, -1, 44, 58, 59, -1, -1, -1, -1, - -1, 93, 41, -1, -1, 44, 331, 58, 59, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, - 59, 93, -1, -1, -1, -1, -1, -1, 312, 93, - -1, -1, -1, 125, -1, 404, 405, 406, 407, 408, - -1, -1, 93, -1, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 125, 93, -1, 404, 405, 406, 407, - 408, 125, -1, -1, -1, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 125, -1, -1, -1, 312, 404, - 405, 406, 407, 408, -1, -1, 125, -1, 413, 414, - 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, - -1, -1, -1, 33, -1, -1, -1, 331, -1, -1, - 40, -1, -1, 43, -1, 45, 400, 401, 402, 403, - -1, -1, -1, -1, -1, -1, -1, 411, 412, 59, - -1, 331, -1, -1, 64, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 92, -1, -1, -1, 400, 401, 402, 403, - -1, -1, -1, -1, -1, -1, -1, 411, 412, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 413, - 414, 415, -1, 123, 33, 125, 126, -1, -1, -1, - -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, + -1, -1, -1, -1, -1, 124, 125, 58, 59, -1, + 61, -1, 63, 41, -1, -1, 44, 125, 93, 94, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + 58, 59, -1, 61, 41, 63, -1, 44, -1, -1, + -1, -1, 93, -1, -1, -1, -1, -1, -1, 124, + 125, 58, 59, -1, 61, -1, 63, -1, -1, -1, + -1, 125, 37, 38, -1, 93, -1, 42, 43, -1, + 45, 46, 47, 124, 125, -1, -1, -1, -1, -1, + -1, -1, -1, 37, 38, 60, 93, 62, 42, 43, + -1, 45, 46, 47, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, 60, 37, 62, -1, + -1, -1, 42, 43, -1, 45, 46, 47, 125, 94, + -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, + 60, -1, 62, 41, -1, -1, 44, -1, -1, -1, + 94, 41, 58, 59, 44, 41, -1, -1, 44, 124, + 58, 59, 41, -1, -1, 44, -1, -1, 58, 59, + -1, 41, 58, 59, 44, -1, -1, -1, -1, 58, + 59, -1, -1, -1, -1, -1, -1, 93, 58, 59, + -1, -1, -1, -1, -1, 93, -1, -1, 41, -1, + -1, 44, -1, 93, -1, -1, -1, 93, 41, -1, + -1, 44, -1, -1, 93, 58, 59, -1, -1, 125, + -1, -1, 331, 93, -1, 58, 59, 125, -1, -1, + -1, -1, -1, 331, -1, 125, -1, -1, -1, 125, + -1, 41, -1, -1, 44, -1, 125, -1, -1, -1, + 93, -1, -1, -1, -1, 125, -1, -1, 58, 59, + 93, -1, -1, -1, -1, -1, 331, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 331, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + 331, -1, 125, 93, -1, 404, 405, 406, 407, 408, + -1, -1, -1, -1, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 331, -1, 413, 414, 415, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, 331, -1, -1, -1, -1, 404, + 405, 406, 407, 408, -1, -1, -1, 312, 413, 414, + 415, 416, 417, 418, 419, 420, 421, -1, -1, 413, + 414, 415, -1, 404, 405, 406, 407, 408, 312, -1, + -1, -1, 413, 414, 415, 416, 417, 418, 419, 420, + 421, -1, -1, -1, -1, -1, 404, 405, 406, 407, + 408, -1, 312, -1, -1, 413, 414, 415, 416, 417, + 418, 419, 420, 421, -1, -1, -1, 404, 405, 406, + 407, 408, -1, -1, -1, -1, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 331, -1, -1, -1, -1, + -1, -1, -1, 331, -1, 400, 401, 402, 403, -1, + -1, 331, -1, -1, -1, 331, 411, 412, -1, -1, + -1, -1, 331, -1, -1, -1, 400, 401, 402, 403, + -1, 331, -1, 33, -1, -1, -1, 411, 412, -1, + 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, + 400, 401, 402, 403, -1, -1, -1, -1, 331, 59, + -1, 411, 412, -1, 64, -1, -1, -1, 331, -1, + -1, -1, -1, -1, -1, -1, -1, 413, 414, 415, + -1, -1, -1, -1, -1, 413, 414, 415, -1, -1, + -1, -1, 92, 413, 414, 415, -1, 413, 414, 415, + -1, 331, -1, -1, 413, 414, 415, -1, -1, -1, -1, -1, -1, 413, 414, 415, -1, -1, -1, -1, - 59, -1, -1, -1, -1, 64, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 331, + -1, -1, -1, 123, -1, 125, 126, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, + 413, 414, 415, -1, -1, -1, -1, -1, -1, -1, + 413, 414, 415, 59, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 92, -1, -1, -1, -1, -1, 331, - -1, -1, -1, -1, -1, -1, -1, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 331, -1, -1, -1, 123, -1, 125, 126, 33, -1, - -1, -1, 331, -1, -1, 40, -1, -1, 43, -1, - 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, -1, 64, - -1, 413, 414, 415, -1, -1, -1, -1, -1, -1, + -1, -1, 33, 413, 414, 415, 92, -1, -1, 40, + -1, -1, 43, 33, 45, -1, -1, -1, -1, -1, + 40, -1, -1, 43, -1, 45, -1, -1, 59, -1, + -1, -1, -1, 64, -1, -1, -1, 123, 58, 125, + 126, -1, -1, -1, 64, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 92, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 92, -1, -1, -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, 265, -1, -1, -1, -1, - -1, 413, 414, 415, -1, -1, 33, 92, -1, 413, - 414, 415, -1, 40, -1, -1, 43, -1, 45, -1, - -1, -1, 413, 414, 415, -1, -1, -1, -1, -1, - -1, 58, -1, -1, 413, 414, 415, 64, 123, -1, - -1, 126, -1, 313, -1, -1, -1, -1, -1, -1, + -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 333, 334, 92, -1, -1, -1, -1, - 340, 341, 342, 343, -1, -1, 346, -1, -1, -1, - -1, 260, 261, 262, 263, 264, 265, -1, -1, -1, - 360, 361, 362, 363, -1, 365, 366, 367, -1, 126, - 370, 371, 372, 373, 374, -1, -1, 33, -1, -1, - -1, -1, -1, -1, 40, 33, -1, 43, -1, 45, - -1, -1, 40, -1, -1, 43, -1, 45, -1, -1, - -1, -1, 402, 403, 313, 61, -1, 33, 64, -1, - -1, -1, -1, 61, 40, -1, 64, 43, -1, 45, - -1, -1, -1, -1, 333, 334, -1, -1, -1, -1, - -1, 340, 341, 342, 343, 61, 92, 346, 64, -1, - -1, -1, -1, -1, 92, 260, 261, 262, 263, 264, - 265, 360, 361, 362, 363, -1, 365, 366, 367, -1, - -1, 370, -1, 372, 373, 374, 92, -1, -1, -1, - 126, -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 402, 403, -1, -1, -1, 313, -1, - 126, -1, 33, 260, 261, 262, 263, 264, 265, 40, - -1, -1, 43, -1, 45, -1, -1, -1, 333, 334, - -1, -1, -1, -1, -1, 340, 341, 342, 343, -1, - 61, 346, 33, 64, -1, -1, -1, -1, -1, 40, - -1, -1, 43, -1, 45, 360, 361, 362, 363, -1, - 365, 366, 367, -1, -1, 370, 313, 372, -1, -1, - -1, 92, 33, 64, -1, -1, -1, -1, -1, 40, - -1, -1, 43, -1, 45, -1, 333, 334, -1, -1, - -1, -1, -1, 340, -1, -1, -1, 402, 403, 346, - -1, 92, -1, 64, -1, 126, -1, -1, -1, -1, + -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 333, 334, -1, -1, -1, -1, -1, + 340, 341, 342, 343, -1, -1, 346, -1, -1, -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, 265, - 367, -1, 260, 261, 262, 263, 264, 265, -1, -1, - -1, 92, -1, -1, -1, 126, -1, -1, -1, -1, + 360, 361, 362, 363, -1, 365, 366, 367, -1, -1, + 370, 371, 372, 373, 374, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, + -1, -1, 402, 403, -1, -1, -1, 313, -1, 260, + 261, 262, 263, 264, 265, 61, -1, -1, 64, -1, + 260, 261, 262, 263, 264, 265, -1, 333, 334, -1, + -1, -1, -1, -1, 340, 341, 342, 343, -1, -1, + 346, -1, -1, -1, -1, -1, 92, -1, -1, -1, + -1, -1, -1, -1, 360, 361, 362, 363, -1, 365, + 366, 367, 313, -1, 370, -1, 372, 373, 374, -1, + -1, -1, -1, 313, 33, -1, -1, -1, -1, -1, + 126, 40, 333, 334, 43, -1, 45, -1, -1, 340, + 341, 342, 343, 333, 334, 346, 402, 403, -1, -1, + 340, -1, 61, -1, -1, 64, 346, -1, -1, 360, + 361, 362, 363, 33, 365, 366, 367, -1, -1, 370, + 40, 372, -1, 43, -1, 45, -1, 367, -1, -1, + -1, -1, -1, 92, -1, -1, -1, -1, 33, -1, + -1, 61, -1, -1, 64, 40, -1, -1, 43, -1, + 45, 402, 403, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 402, 403, -1, -1, 61, 126, 33, 64, + -1, -1, 92, -1, -1, 40, -1, -1, 43, -1, + 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 92, -1, 64, + -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, 265, - -1, -1, -1, -1, -1, 402, 403, -1, -1, -1, - -1, -1, -1, -1, -1, 126, -1, 313, -1, -1, - -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 333, 334, -1, - -1, -1, -1, -1, 340, 333, 334, 313, -1, -1, - 346, -1, 340, -1, -1, -1, -1, -1, 346, -1, - -1, -1, -1, -1, -1, -1, -1, 333, 334, -1, - -1, 367, -1, -1, 340, -1, -1, -1, -1, 367, - 346, -1, -1, -1, -1, -1, -1, -1, -1, 260, - 261, 262, 263, 264, 265, -1, -1, -1, -1, -1, - -1, 367, -1, -1, -1, -1, 402, 403, -1, -1, - -1, -1, -1, -1, 402, 403, -1, -1, -1, 260, - 261, 262, 263, 264, 265, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 402, 403, -1, -1, - -1, -1, 313, -1, -1, -1, -1, -1, -1, 260, - 261, 262, 263, 264, 265, -1, -1, -1, -1, -1, - -1, -1, 333, 334, -1, -1, -1, -1, -1, 340, - -1, -1, 313, -1, -1, 346, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, 92, -1, -1, + -1, 126, -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 333, 334, -1, -1, 367, -1, -1, 340, - -1, -1, 313, -1, -1, 346, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, 126, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 87, -1, 333, 334, 91, -1, 367, -1, -1, 340, - -1, 402, 403, -1, -1, 346, -1, -1, 105, 106, - 107, 108, 109, 110, 111, 112, -1, 114, 115, -1, - -1, -1, -1, -1, -1, -1, 367, -1, -1, -1, - -1, 402, 403, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 92, -1, 333, 334, -1, + -1, -1, -1, -1, 340, -1, -1, -1, -1, -1, + 346, 260, 261, 262, 263, 264, 265, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, + -1, 367, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 260, 261, 262, 263, 264, 265, -1, -1, -1, -1, + -1, -1, -1, -1, 313, -1, 402, 403, -1, -1, + -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, + 265, -1, -1, -1, 333, 334, -1, -1, -1, -1, + -1, 340, -1, -1, -1, -1, -1, 346, -1, -1, + -1, -1, -1, 313, -1, 260, 261, 262, 263, 264, + 265, -1, -1, -1, -1, -1, -1, -1, 367, -1, + -1, -1, -1, 333, 334, -1, -1, -1, 313, -1, + 340, -1, -1, -1, -1, -1, 346, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 333, 334, + -1, -1, -1, 402, 403, 340, -1, 367, 313, -1, + -1, 346, -1, 260, 261, 262, 263, 264, 265, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 333, 334, + -1, -1, 367, -1, -1, 340, -1, -1, -1, -1, + -1, 346, 402, 403, -1, -1, -1, -1, -1, -1, + -1, 87, -1, -1, -1, 91, -1, -1, -1, -1, + -1, -1, 367, -1, -1, -1, 313, 402, 403, 105, + 106, 107, 108, 109, 110, 111, 112, -1, 114, 115, + -1, -1, -1, -1, -1, -1, 333, 334, -1, -1, + -1, -1, -1, 340, -1, -1, -1, 402, 403, 346, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 402, 403, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 201, 202, -1, 204, -1, -1, - -1, -1, 209, -1, -1, -1, 213, 214, -1, 216, - -1, -1, -1, -1, -1, -1, 223, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 239, -1, 241, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 251, -1, 253, -1, -1, -1, + 367, -1, -1, -1, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, -1, 402, 403, -1, -1, -1, + -1, -1, -1, -1, -1, 201, 202, -1, 204, -1, + -1, -1, -1, 209, -1, -1, -1, 213, 214, -1, + 216, -1, -1, -1, -1, -1, -1, 223, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 267, 268, -1, -1, 271, 272, -1, -1, -1, -1, + -1, -1, -1, 239, -1, 241, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 251, -1, 253, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 288, 289, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 299, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, - -1, 318, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 267, 268, -1, -1, 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 288, 289, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 299, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, + -1, -1, -1, 319, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 353, -1, 355, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 377, 378, -1, 380, -1, -1, 383, 384, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 364, -1, + 366, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 401, -1, 403, -1, -1, -1, + 386, 387, -1, 389, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 421, -1, -1, -1, -1, -1, + -1, 407, -1, 409, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 438, + 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 443, ); protected static $yyFinal= 2; protected static $yyName= array( @@ -2147,7 +2149,7 @@ public function yyparse($yyLex) { case 149: #line 665 "src/main/jay/grammars/php.jay" { - $yyVal= $yyLex->create(new LambdaNode($yyVals[-4+$yyTop], (array)$yyVals[-1+$yyTop])); + $yyVal= $yyLex->create(new LambdaNode($yyVals[-5+$yyTop], (array)$yyVals[-1+$yyTop], $yyVals[-3+$yyTop])); } break; case 150: #line 668 "src/main/jay/grammars/php.jay" @@ -2172,13 +2174,19 @@ public function yyparse($yyLex) { case 155: #line 689 "src/main/jay/grammars/php.jay" { $yyVal= array('name' => $yyVals[-1+$yyTop]); $yyVals[0+$yyTop] && $yyVal['default']= $yyVals[0+$yyTop]; } break; + case 156: #line 693 "src/main/jay/grammars/php.jay" + { $yyVal= array(); } break; + case 157: #line 694 "src/main/jay/grammars/php.jay" + { $yyVal= $yyVals[-1+$yyTop]; } break; + + case 159: #line 699 "src/main/jay/grammars/php.jay" { $p= $yyLex->position; } break; - case 158: #line 694 "src/main/jay/grammars/php.jay" + case 160: #line 699 "src/main/jay/grammars/php.jay" { $yyVals[-1+$yyTop]->position= $p; $yyVals[-1+$yyTop]->type= NULL; $yyVal= $yyVals[-1+$yyTop]; } break; - case 159: #line 698 "src/main/jay/grammars/php.jay" + case 161: #line 703 "src/main/jay/grammars/php.jay" { switch (strtolower($yyVals[0+$yyTop])) { case 'true': $yyVal= $yyLex->create(new BooleanNode(TRUE)); break; case 'false': $yyVal= $yyLex->create(new BooleanNode(FALSE)); break; @@ -2186,268 +2194,268 @@ public function yyparse($yyLex) { default: $yyVal= $yyLex->create(new ConstantNode($yyVals[0+$yyTop])); break; }} break; - case 160: #line 704 "src/main/jay/grammars/php.jay" + case 162: #line 709 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new IntegerNode($yyVals[0+$yyTop])); } break; - case 161: #line 705 "src/main/jay/grammars/php.jay" + case 163: #line 710 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new HexNode($yyVals[0+$yyTop])); } break; - case 162: #line 706 "src/main/jay/grammars/php.jay" + case 164: #line 711 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new OctalNode($yyVals[0+$yyTop])); } break; - case 163: #line 707 "src/main/jay/grammars/php.jay" + case 165: #line 712 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new DecimalNode($yyVals[0+$yyTop])); } break; - case 164: #line 708 "src/main/jay/grammars/php.jay" + case 166: #line 713 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new StringNode($yyVals[0+$yyTop])); } break; - case 165: #line 712 "src/main/jay/grammars/php.jay" + case 167: #line 717 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new ArrayNode(array('values' => NULL))); } break; - case 166: #line 715 "src/main/jay/grammars/php.jay" + case 168: #line 720 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new MapNode(array('elements' => NULL))); } break; - case 167: #line 718 "src/main/jay/grammars/php.jay" + case 169: #line 723 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new ArrayNode(array('values' => $yyVals[0+$yyTop]))); } break; - case 168: #line 721 "src/main/jay/grammars/php.jay" + case 170: #line 726 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new MapNode(array('elements' => $yyVals[0+$yyTop]))); } break; - case 169: #line 727 "src/main/jay/grammars/php.jay" + case 171: #line 732 "src/main/jay/grammars/php.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 170: #line 728 "src/main/jay/grammars/php.jay" + case 172: #line 733 "src/main/jay/grammars/php.jay" { $yyVal= $yyVals[0+$yyTop] ? array_merge($yyVals[-2+$yyTop], array($yyVals[0+$yyTop])) : $yyVals[-2+$yyTop]; } break; - case 171: #line 732 "src/main/jay/grammars/php.jay" + case 173: #line 737 "src/main/jay/grammars/php.jay" { $yyVal= NULL; } break; - case 173: #line 737 "src/main/jay/grammars/php.jay" + case 175: #line 742 "src/main/jay/grammars/php.jay" { $yyVal= array($yyVals[-2+$yyTop], $yyVals[0+$yyTop]); } break; - case 174: #line 741 "src/main/jay/grammars/php.jay" + case 176: #line 746 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 175: #line 742 "src/main/jay/grammars/php.jay" + case 177: #line 747 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 176: #line 743 "src/main/jay/grammars/php.jay" + case 178: #line 748 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 177: #line 744 "src/main/jay/grammars/php.jay" + case 179: #line 749 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 178: #line 745 "src/main/jay/grammars/php.jay" + case 180: #line 750 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 179: #line 746 "src/main/jay/grammars/php.jay" + case 181: #line 751 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 180: #line 747 "src/main/jay/grammars/php.jay" + case 182: #line 752 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => '~='); } break; - case 181: #line 748 "src/main/jay/grammars/php.jay" + case 183: #line 753 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 182: #line 749 "src/main/jay/grammars/php.jay" + case 184: #line 754 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 183: #line 750 "src/main/jay/grammars/php.jay" + case 185: #line 755 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-2+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 184: #line 751 "src/main/jay/grammars/php.jay" + case 186: #line 756 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-3+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 185: #line 752 "src/main/jay/grammars/php.jay" + case 187: #line 757 "src/main/jay/grammars/php.jay" { $yyVal= array('variable' => $yyVals[-3+$yyTop], 'expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 186: #line 756 "src/main/jay/grammars/php.jay" + case 188: #line 761 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 187: #line 757 "src/main/jay/grammars/php.jay" + case 189: #line 762 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 188: #line 758 "src/main/jay/grammars/php.jay" + case 190: #line 763 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 189: #line 759 "src/main/jay/grammars/php.jay" + case 191: #line 764 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 190: #line 760 "src/main/jay/grammars/php.jay" + case 192: #line 765 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 191: #line 761 "src/main/jay/grammars/php.jay" + case 193: #line 766 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 192: #line 762 "src/main/jay/grammars/php.jay" + case 194: #line 767 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-3+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 193: #line 763 "src/main/jay/grammars/php.jay" + case 195: #line 768 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-3+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-2+$yyTop].$yyVals[-1+$yyTop]); } break; - case 194: #line 767 "src/main/jay/grammars/php.jay" + case 196: #line 772 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 195: #line 768 "src/main/jay/grammars/php.jay" + case 197: #line 773 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 196: #line 769 "src/main/jay/grammars/php.jay" + case 198: #line 774 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 197: #line 770 "src/main/jay/grammars/php.jay" + case 199: #line 775 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 198: #line 771 "src/main/jay/grammars/php.jay" + case 200: #line 776 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 199: #line 772 "src/main/jay/grammars/php.jay" + case 201: #line 777 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => '~'); } break; - case 200: #line 773 "src/main/jay/grammars/php.jay" + case 202: #line 778 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 201: #line 774 "src/main/jay/grammars/php.jay" + case 203: #line 779 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 202: #line 775 "src/main/jay/grammars/php.jay" + case 204: #line 780 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 203: #line 776 "src/main/jay/grammars/php.jay" + case 205: #line 781 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 204: #line 777 "src/main/jay/grammars/php.jay" + case 206: #line 782 "src/main/jay/grammars/php.jay" { $yyVal= array('lhs' => $yyVals[-2+$yyTop], 'rhs' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 205: #line 781 "src/main/jay/grammars/php.jay" + case 207: #line 786 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 206: #line 782 "src/main/jay/grammars/php.jay" + case 208: #line 787 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => '~'); } break; - case 207: #line 783 "src/main/jay/grammars/php.jay" + case 209: #line 788 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 208: #line 784 "src/main/jay/grammars/php.jay" + case 210: #line 789 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 209: #line 785 "src/main/jay/grammars/php.jay" + case 211: #line 790 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 210: #line 786 "src/main/jay/grammars/php.jay" + case 212: #line 791 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[0+$yyTop], 'op' => $yyVals[-1+$yyTop]); } break; - case 211: #line 790 "src/main/jay/grammars/php.jay" + case 213: #line 795 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[-1+$yyTop], 'op' => $yyVals[0+$yyTop]); } break; - case 212: #line 791 "src/main/jay/grammars/php.jay" + case 214: #line 796 "src/main/jay/grammars/php.jay" { $yyVal= array('expression' => $yyVals[-1+$yyTop], 'op' => $yyVals[0+$yyTop]); } break; - case 213: #line 796 "src/main/jay/grammars/php.jay" + case 215: #line 801 "src/main/jay/grammars/php.jay" { $yyVal= NULL; } break; - case 215: #line 801 "src/main/jay/grammars/php.jay" + case 217: #line 806 "src/main/jay/grammars/php.jay" { $yyVal= array($yyVals[0+$yyTop], $yyVals[0+$yyTop]); } break; - case 216: #line 802 "src/main/jay/grammars/php.jay" + case 218: #line 807 "src/main/jay/grammars/php.jay" { $yyVals[0+$yyTop][1]->target= $yyVals[-1+$yyTop]; $yyVal= array($yyVals[0+$yyTop][0], $yyVals[-1+$yyTop]); } break; - case 217: #line 806 "src/main/jay/grammars/php.jay" + case 219: #line 811 "src/main/jay/grammars/php.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ArrayAccessNode()); } break; - case 218: #line 806 "src/main/jay/grammars/php.jay" + case 220: #line 811 "src/main/jay/grammars/php.jay" { $yyVals[-3+$yyTop]->offset= $yyVals[-1+$yyTop]; } break; - case 219: #line 809 "src/main/jay/grammars/php.jay" + case 221: #line 814 "src/main/jay/grammars/php.jay" { $yyVals[0+$yyTop]= $yyLex->create(new ArrayAccessNode()); } break; - case 220: #line 809 "src/main/jay/grammars/php.jay" + case 222: #line 814 "src/main/jay/grammars/php.jay" { $yyVals[-3+$yyTop]->offset= $yyVals[-1+$yyTop]; } break; - case 221: #line 812 "src/main/jay/grammars/php.jay" + case 223: #line 817 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new MemberAccessNode(NULL, $yyVals[0+$yyTop])); } break; - case 222: #line 815 "src/main/jay/grammars/php.jay" + case 224: #line 820 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new DynamicVariableReferenceNode(NULL, new VariableNode($yyVals[0+$yyTop]))); } break; - case 223: #line 818 "src/main/jay/grammars/php.jay" + case 225: #line 823 "src/main/jay/grammars/php.jay" { $yyVal= $yyLex->create(new DynamicVariableReferenceNode(NULL, $yyVals[-1+$yyTop])); } break; - case 224: #line 821 "src/main/jay/grammars/php.jay" + case 226: #line 826 "src/main/jay/grammars/php.jay" { $yyVals[-2+$yyTop]= $yyLex->create(new MethodCallNode(NULL, $yyVals[-1+$yyTop])); } break; - case 225: #line 821 "src/main/jay/grammars/php.jay" + case 227: #line 826 "src/main/jay/grammars/php.jay" { $yyVals[-5+$yyTop]->arguments= $yyVals[-1+$yyTop]; } break; - case 226: #line 824 "src/main/jay/grammars/php.jay" + case 228: #line 829 "src/main/jay/grammars/php.jay" { $yyVals[0+$yyTop]= $yyLex->create(new InstanceCallNode(NULL, NULL, FALSE)); } break; - case 227: #line 824 "src/main/jay/grammars/php.jay" + case 229: #line 829 "src/main/jay/grammars/php.jay" { $yyVals[-3+$yyTop]->arguments= $yyVals[-1+$yyTop]; } break; - case 230: #line 837 "src/main/jay/grammars/php.jay" + case 232: #line 842 "src/main/jay/grammars/php.jay" { $yyVal= new TypeName($yyVals[0+$yyTop]); } break; - case 231: #line 841 "src/main/jay/grammars/php.jay" + case 233: #line 846 "src/main/jay/grammars/php.jay" { $yyVal= new TypeName('var[]'); } break; - case 232: #line 845 "src/main/jay/grammars/php.jay" + case 234: #line 850 "src/main/jay/grammars/php.jay" { $yyVal= array($yyVals[0+$yyTop]); } break; - case 233: #line 846 "src/main/jay/grammars/php.jay" + case 235: #line 851 "src/main/jay/grammars/php.jay" { $yyVal= array_merge(array($yyVals[-2+$yyTop]), $yyVals[0+$yyTop]); } break; - case 234: #line 852 "src/main/jay/grammars/php.jay" + case 236: #line 857 "src/main/jay/grammars/php.jay" { $yyVal= 0; } break; - case 235: #line 853 "src/main/jay/grammars/php.jay" + case 237: #line 858 "src/main/jay/grammars/php.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 236: #line 857 "src/main/jay/grammars/php.jay" + case 238: #line 862 "src/main/jay/grammars/php.jay" { $yyVal= $yyVals[0+$yyTop]; } break; - case 237: #line 858 "src/main/jay/grammars/php.jay" + case 239: #line 863 "src/main/jay/grammars/php.jay" { $yyVal= $yyVals[-1+$yyTop] | $yyVals[0+$yyTop]; } break; - case 238: #line 862 "src/main/jay/grammars/php.jay" + case 240: #line 867 "src/main/jay/grammars/php.jay" { $yyVal= MODIFIER_PUBLIC; } break; - case 239: #line 863 "src/main/jay/grammars/php.jay" + case 241: #line 868 "src/main/jay/grammars/php.jay" { $yyVal= MODIFIER_PROTECTED; } break; - case 240: #line 864 "src/main/jay/grammars/php.jay" + case 242: #line 869 "src/main/jay/grammars/php.jay" { $yyVal= MODIFIER_PRIVATE; } break; - case 241: #line 865 "src/main/jay/grammars/php.jay" + case 243: #line 870 "src/main/jay/grammars/php.jay" { $yyVal= MODIFIER_STATIC; } break; - case 242: #line 866 "src/main/jay/grammars/php.jay" + case 244: #line 871 "src/main/jay/grammars/php.jay" { $yyVal= MODIFIER_ABSTRACT; } break; - case 243: #line 867 "src/main/jay/grammars/php.jay" + case 245: #line 872 "src/main/jay/grammars/php.jay" { $yyVal= MODIFIER_FINAL; } break; -#line 2451 "-" +#line 2459 "-" } $yyTop-= self::$yyLen[$yyN]; diff --git a/src/test/php/net/xp_lang/tests/syntax/php/LambdaTest.class.php b/src/test/php/net/xp_lang/tests/syntax/php/LambdaTest.class.php index 9c5563886..b1d92e093 100644 --- a/src/test/php/net/xp_lang/tests/syntax/php/LambdaTest.class.php +++ b/src/test/php/net/xp_lang/tests/syntax/php/LambdaTest.class.php @@ -9,72 +9,72 @@ use xp\compiler\ast\InstanceCallNode; use xp\compiler\ast\BracedExpressionNode; -/** - * TestCase - * - */ class LambdaTest extends ParserTestCase { - /** - * Test simple lambda - * - */ #[@test] public function noParameters() { $this->assertEquals( array(new LambdaNode( array(), - array(new ReturnNode(new BooleanNode(true))) + array(new ReturnNode(new BooleanNode(true))), + array() )), $this->parse('function() { return true; };') ); } - /** - * Test simple lambda - * - */ #[@test] public function oneParameter() { $this->assertEquals( array(new LambdaNode( - array(new VariableNode('a')), + array(['name' => 'a']), array(new ReturnNode(new BinaryOpNode(array( 'lhs' => new VariableNode('a'), 'rhs' => new IntegerNode('1'), 'op' => '+' - )))) + )))), + array() )), $this->parse('function($a) { return $a + 1; };') ); } - /** - * Test simple lambda - * - */ #[@test] public function twoParameters() { $this->assertEquals( array(new LambdaNode( - array(new VariableNode('a'), new VariableNode('b')), + array(['name' => 'a'], ['name' => 'b']), array(new ReturnNode(new BinaryOpNode(array( 'lhs' => new VariableNode('a'), 'rhs' => new VariableNode('b'), 'op' => '+' - )))) + )))), + array() )), $this->parse('function($a, $b) { return $a + $b; };') ); } + #[@test] + public function withUses() { + $this->assertEquals( + array(new LambdaNode( + array(['name' => 'a']), + array(/* TBI */), + array(['name' => 'mul'], ['name' => 'neg']) + )), + $this->parse('function($a) use($mul, $neg) { /* TBI */ };') + ); + } + #[@test] public function invocation() { $this->assertEquals( array(new InstanceCallNode( new BracedExpressionNode(new LambdaNode( - array(new VariableNode('a'), new VariableNode('b')), - array(/* TBI */) + array(['name' => 'a'], ['name' => 'b']), + array(/* TBI */), + array() )), array(new IntegerNode('1'), new IntegerNode('2')) )),