From: <rob...@us...> - 2012-09-10 20:51:18
|
Revision: 42888 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=42888&view=rev Author: robertplummer Date: 2012-09-10 20:51:10 +0000 (Mon, 10 Sep 2012) Log Message: ----------- [ENH] Added missing functionality required by wiki syntax as outlined in older wiki tests Modified Paths: -------------- trunk/lib/core/JisonParser/Wiki/Handler.js trunk/lib/core/JisonParser/Wiki/Handler.php trunk/lib/core/JisonParser/Wiki.jison trunk/lib/core/JisonParser/Wiki.js trunk/lib/core/JisonParser/Wiki.php Modified: trunk/lib/core/JisonParser/Wiki/Handler.js =================================================================== --- trunk/lib/core/JisonParser/Wiki/Handler.js 2012-09-10 20:49:55 UTC (rev 42887) +++ trunk/lib/core/JisonParser/Wiki/Handler.js 2012-09-10 20:51:10 UTC (rev 42888) @@ -200,7 +200,7 @@ return val; //here we will restore things like np, and plugins and parse them if needed }, Parse: function(val, errors) { - //try { + try { if (this.inUse) { var wiki = new Wiki.Parser(); wiki.extend.parser(WikiHandler); @@ -214,11 +214,11 @@ val = this.postParse(val); this.inUse = false; return val; - /*} catch (e) { + } catch (e) { if (errors) { - return e; + console.log(e); } - }*/ + } }, parseError: function() { return ""; Modified: trunk/lib/core/JisonParser/Wiki/Handler.php =================================================================== --- trunk/lib/core/JisonParser/Wiki/Handler.php 2012-09-10 20:49:55 UTC (rev 42887) +++ trunk/lib/core/JisonParser/Wiki/Handler.php 2012-09-10 20:51:10 UTC (rev 42888) @@ -10,22 +10,24 @@ /* parser tracking */ private $parsing = false; private static $spareParsers = array(); - private $Parser; + public $Parser; private static $parseDepth = 0; /* plugin tracking */ public $pluginStack = array(); public $pluginStackCount = 0; - private $pluginEntries = array(); - private $wikiPluginParserNegotiatorClass = 'WikiPlugin_ParserNegotiator'; + public $pluginEntries = array(); public $plugins = array(); - private static $pluginIndexes = array(); - private $pluginNegotiators = array(); + public static $pluginIndexes = array(); + public $pluginNegotiators = array(); /* np tracking */ public $npStack = false; //There can only be 1 active np stack - public $skipNextBr = false; //used in block level items, should be set to true. The next break sets it back to false; + /* pp tracking */ + public $ppStack = false; //There can only be 1 active np stack + + public $skipBr = false; //used in block level items, should be set to true. The next break sets it back to false; public $tableStack = array(); /* header tracking */ @@ -46,6 +48,16 @@ /* dynamic var parser */ public $dynamicVar; + /* html character */ + public $htmlCharacter; + + /* html tag tracking */ + public $nonBreakingTagDepth = 0; + + /* line tracking */ + private $isFirstBr = false; + private $line = 0; + //This var is used in both protectSpecialChars and unprotectSpecialChars to simplify the html ouput process private $specialChars = array( '≤REAL_LT≥' => array( @@ -69,26 +81,6 @@ ), ); - private $syntaxStatingChars = array( - "__", - "^", - "::", - "~", - "[", - "--", - "||", - "==", - "))", - "\n!", - "\n*", - "\n#", - "\n+", - "{", - "%", - "''", - "\n" - ); - var $tikilib; var $user; var $prefs; @@ -131,9 +123,9 @@ $this->Parser->option = array_merge($this->optionDefaults, $option); } - public function setWikiPluginParserNegotiatorClass($class) + public function getOption($name = '') { - $this->Parser->wikiPluginParserNegotiatorClass = $class; + return $this->Parser->option[$name]; } function __construct(JisonParser_Wiki_Handler &$Parser = null) @@ -175,6 +167,10 @@ $this->Parser->dynamicVar = new JisonParser_Wiki_DynamicVariables(); } + if (isset($this->Parser->htmlCharacter) == false) { + $this->Parser->htmlCharacter = new JisonParser_Wiki_HtmlCharacter($this->Parser); + } + parent::__construct(); } @@ -192,14 +188,6 @@ return $result; } */ - function hasWikiSyntax(&$input) - { - foreach($this->syntaxStatingChars as $char) { - $pos = strstr($input, $char); - if ($pos !== FALSE) return true; - } - return false; - } function parse($input) { @@ -210,7 +198,8 @@ if (!empty($parser) && $parser->parsing == false) { $output = $parser->parse($input); } else { - self::$spareParsers[] = $parser = new JisonParser_Wiki_Handler($this->Parser); + $class = get_class($this->Parser); + self::$spareParsers[] = $parser = new $class($this->Parser); $output = $parser->parse($input); } } else { @@ -220,13 +209,9 @@ $this->preParse($input); - if ($this->hasWikiSyntax($input) == true) { - self::$parseDepth++; - $output = parent::parse($input); - self::$parseDepth--; - } else { - $output = $input; - } + self::$parseDepth++; + $output = parent::parse($input); + self::$parseDepth--; $this->parsing = false; $this->postParse($output); @@ -239,15 +224,15 @@ { if (empty($input)) return ""; - if ($this->Parser->option['noparseplugins'] == false) { + if ($this->getOption('noparseplugins') == false) { - $is_html = $this->Parser->option['is_html']; + $is_html = $this->getOption('is_html'); - $this->Parser->option['is_html'] = true; + $this->setOption(array('is_html' => true)); $result = $this->parse($input); + $this->setOption(array('is_html' => $is_html)); - $this->Parser->option['is_html'] = $is_html; return $result; } else { return $input; @@ -264,13 +249,31 @@ */ ini_set("pcre.recursion_limit", "524"); - $this->addTemporaryLineBreaks($input); //here we add 2 lines, so the parser doesn't have to do special things to track the first line and last, we remove these when we insert breaks + if (self::$parseDepth == 0) { + $this->Parser->htmlCharacter->parse($input); + } + $this->line = 0; + $this->isFirstBr = false; + $this->skipBr = false; + $this->tableStack = array(); + $this->Parser->nonBreakingTagDepth = 0; + $this->npStack = false; + $this->ppStack = false; + + $input = "\n" . $input . "\n"; //here we add 2 lines, so the parser doesn't have to do special things to track the first line and last, we remove these when we insert breaks, these are dynamically removed later + $input = $this->protectSpecialChars($input); } function postParse(&$output) { + //remove comment artifacts + $output = str_replace("<!---->", "", $output); + + //Replace the break we put at the beginning + $output = preg_replace("/([<]br [\/][>][\n]|[\n])$/", "", $output); + $output = $this->unprotectSpecialChars($output, $this->Parser->option['is_html']); if ($this->Parser->option['parseLists'] == true || strpos($output, "\n") !== false) { @@ -294,39 +297,9 @@ $this->Parser->hotWords->parse($output); - $this->removeTemporaryLineBreaks($output); - $this->Parser->dynamicVar->makeForum($output); } - private function addTemporaryLineBreaks(&$input) - { - $input = "\n" . $input . "\n"; - } - - private function removeTemporaryLineBreaks(&$input) - { - if ($input{0} == '<' && $input{1} == 'b' && $input{2} == 'r' && $input{3} == ' ' && $input{4} == '/' && $input{5} == '>') { - $input = substr($input, 6); - } - - if ($input{0} == "\n") { - $input = substr($input, 1); - } - - $i = strlen($input); - if ($i > 5 && $input{$i - 6} == '<' && $input{$i - 5} == 'b' && $input{$i - 4} == 'r' && $input{$i - 3} == ' ' && $input{$i - 2} == '/' && $input{$i - 1} == '>') { - $input = substr($input, 0, -6); - } - - $i = strlen($input); - if ($i > 0 && $input{$i - 1} == "\n") { - $input = substr($input, 0, -1); - } - - return $input; - } - // state & plugin handlers function plugin(&$pluginDetails) { @@ -398,16 +371,16 @@ function isContent() { - return ($this->pluginStackCount > 0 || $this->npStack == true ? true : null); + return ($this->pluginStackCount > 0 || $this->npStack == true || $this->ppStack == true ? true : null); } function getPluginNegotiator() { - if (empty($this->pluginNegotiators[$this->wikiPluginParserNegotiatorClass])) { - $this->pluginNegotiators[$this->wikiPluginParserNegotiatorClass] = new $this->wikiPluginParserNegotiatorClass($this->Parser); + if (empty($this->pluginNegotiators['WikiPlugin_ParserNegotiator'])) { + $this->pluginNegotiators['WikiPlugin_ParserNegotiator'] = new WikiPlugin_ParserNegotiator($this->Parser); } - return $this->pluginNegotiators[$this->wikiPluginParserNegotiatorClass]; + return $this->pluginNegotiators['WikiPlugin_ParserNegotiator']; } static function deleteEntities(&$data) @@ -486,6 +459,41 @@ return $content; } + function pp($content) + { + return "<pre>" . $content . "</pre>"; + } + + function htmlTag($content) + { + $parts = preg_split("/[ >]/", substr($this->unprotectSpecialChars($content, true), 1)); //<tag> || <tag name=""> + $name = strtolower(trim($parts[0])); + + switch ($name) { + //start block level + case 'script': + case 'table': + case 'div': + $this->Parser->nonBreakingTagDepth++; + $this->line++; + break; + + //end block level + case '/script': + case '/table': + case '/div': + $this->Parser->nonBreakingTagDepth--; + $this->line++; + break; + + //skip next block level + case 'hr': + break; + } + + return $content; + } + function doubleDynamicVar($content) { global $prefs; @@ -528,11 +536,18 @@ { if ($this->Parser->option['parseWiki'] == false) return "::" . $content . "::"; - return '<center>' . $content . '</center>'; + return '<div style="text-align: center;">' . $content . '</div>'; } - function colortext($content) + function code($content) { + if ($this->Parser->option['parseWiki'] == false) return "-+" . $content . "+-"; + + return "<code>" . $content . "</code>"; + } + + function color($content) + { if ($this->Parser->option['parseWiki'] == false) return "~~" . $content . "~~"; $text = explode(':', $content); @@ -546,11 +561,33 @@ { if ($this->Parser->option['parseWiki'] == false) return "''" . $content . "''"; - return '<i>' . $content . '</i>'; + return '<em>' . $content . '</em>'; } + function directional($direction, $content) + { + if ($this->Parser->option['parseWiki'] == false) return $direction . $content; + + $dir = ""; + + $direction = trim($direction); + + switch ($direction) { + case "{l2r}" : + $dir = 'ltr'; + break; + case "{r2l}" : + $dir = 'rtl'; + break; + } + + return "<div dir='" . $dir . "'>" . $content . "</div>"; + } + function header($content) //!content { + $this->line++; + $hNum = 1; $headerLength = strlen($content); for($i = 0; $i < $headerLength; $i++) { @@ -585,6 +622,8 @@ $button = $this->Parser->header->button($this->prefs['wiki_edit_icons_toggle']); } + $this->skipBr = true; + return $button . '<h' . $hNum . ' class="showhide_heading" id="' . $id . '">' . $content . '</h' . $hNum . '>'; } @@ -592,6 +631,7 @@ { if ($this->Parser->option['parseWiki'] == false) return $content; + $this->line++; $level = 0; $headerLength = strlen($content); $type = ''; @@ -603,7 +643,11 @@ continue; } - if ( + if ($content{$i} == ";") {//definition list) + $type = ";"; + $level = 1; + break; + } else if ( $content{$i} == "*" || $content{$i} == "#" || $content{$i} == "+" @@ -620,16 +664,81 @@ $content = substr($content, ($level + $noiseLength)); - return $this->Parser->list->stack($this->yylineno, $level, $content, $type); + $this->skipBr = array(true, true); + + return $this->Parser->list->stack($this->line, $level, $content, $type); } function hr() //--- { if ($this->Parser->option['parseWiki'] == false) return "---"; - + $this->line++; + $this->skipBr = true; return '<hr />'; } + function line() + { + if ($this->Parser->option['parseWiki'] == false) return "\n"; + + $this->line++; + + //The first \n was inserted just before parse + if ($this->isFirstBr == false) { + $this->isFirstBr = true; + return ''; + } + + $result = "\n"; + + if ($this->skipBr == false && empty($this->tableStack) && $this->Parser->nonBreakingTagDepth == 0) { + $result = "<br />\n"; + } + + if ($this->skipBr === true) { + $this->skipBr = false; + } else if (is_array($this->skipBr) == true) { + if (count($this->skipBr) > 1) { + array_pop($this->skipBr); + } else { + $this->skipBr = true; + } + } + + return $result; + } + + function forcedLineEnd() + { + if ($this->Parser->option['parseWiki'] == false) return "%%%"; + $this->line++; + return '<br />'; + } + + function unlink($content) //[content|content] + { + if ($this->Parser->option['parseWiki'] == false) return "[[" . $content . "]"; + + $contentLength = strlen($content); + + if ($content[$contentLength - 3] == "@" && + $content[$contentLength - 2] == "n" && + $content[$contentLength - 1] == "p" + ) { + $content = substr($content, 0, -3); + } + + $contentLength = strlen($content); + + if ($content[$contentLength - 1] != "]" && strstr($content, "[[")) { + $content = substr($content, 1); + } else if (!strstr($content, "]]")) { + $content = substr($content, 1); + } + + return $content; + } + function link($content) //[content|content] { if ($this->Parser->option['parseWiki'] == false) return "[" . $content . "]"; @@ -642,7 +751,7 @@ $href = 'http://' . $href; } - return '<a href="' . $href . '">' . $text . '</a>'; + return '<a class="wiki" href="' . $href . '">' . $text . '</a>'; } function smile($content) @@ -653,7 +762,7 @@ return '<img src="img/smiles/icon_' . $content . '.gif" alt="' . $content . '" />'; } - function strikethrough($content) //--content-- + function strike($content) //--content-- { if ($this->Parser->option['parseWiki'] == false) return "--" . $content . "--"; @@ -694,6 +803,8 @@ { if ($this->Parser->option['parseWiki'] == false) return "-=" . $content . "=-"; + $this->skipBr = true; + return '<div class="titlebar">' . $content . '</div>'; } @@ -712,12 +823,12 @@ $href = (isset($wikilink[0]) ? $wikilink[0] : $content); $text = (isset($wikilink[1]) ? $wikilink[1] : $href); - return '<a href="tiki-index.php?page=' . $href . '">' . $text . '</a>'; + return '<a class="wiki" href="tiki-index.php?page=' . $href . '">' . $text . '</a>'; } - function runningTest() + function comment($content) { - + return '<!---->'; } //unified functions used inside parser @@ -732,26 +843,4 @@ return (!empty($match[1]) ? $match[1] : false); } - - function replace($search, $replace, $subject) - { - return str_replace($search, $replace, $subject); - } - - function join() - { - $array = func_get_args(); - - return implode($array, ''); - } - - function shift($array) - { - if (empty($array)) - $array = array(); - - array_shift($array); - - return $array; - } } Modified: trunk/lib/core/JisonParser/Wiki.jison =================================================================== --- trunk/lib/core/JisonParser/Wiki.jison 2012-09-10 20:49:55 UTC (rev 42887) +++ trunk/lib/core/JisonParser/Wiki.jison 2012-09-10 20:51:10 UTC (rev 42888) @@ -6,12 +6,11 @@ PLUGIN_ID [A-Z]+ INLINE_PLUGIN_ID [a-z]+ -SYNTAX_CHARS [\n\r_\^:\~'-|=\(\)\{\}\[\]*#+%] -LINE_CONTENT (.+?) -SMILE [a-z]+ +SYNTAX_CHARS [{}\n\r_\^:\~'-|=\(\)\[\]*#+%<≤] +LINE_CONTENT (.?) LINE_END (\n\r|\r\n|[\n\r]) -%s np plugin line bold box center colortext italic header list link strikethrough table titlebar underscore wikilink +%s np pp plugin line bold box center code color directional italic header list unlink link strike table titlebar underscore wikilink %% <np><<EOF>> @@ -50,13 +49,45 @@ %} -"~tc~"(.|\n)+"~/tc~" +<pp><<EOF>> %{ - return ''; + lexer.unput('~/pp~'); //js + + //php $this->unput('~/pp~'); + + return 'CONTENT'; %} +<pp>"~/pp~" + %{ + if (this.ppStack != true) return 'CONTENT'; //js + lexer.popState(); //js + lexer.ppStack = false; //js + yytext = parser.pp(yytext); //js + //php if ($this->ppStack != true) return 'CONTENT'; + //php $this->popState(); + //php $this->ppStack = false; + //php $yytext = $this->pp($yytext); + return 'PP_END'; + %} +"~pp~" + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.begin('pp'); //js + lexer.ppStack = true; //js + //php if ($this->isContent()) return 'CONTENT'; + //php $this->begin('pp'); + //php $this->ppStack = true; + + return 'PP_START'; + %} + + +"~tc~"(.|\n)+"~/tc~" return 'COMMENT'; + + [%][%]([0-9A-Za-z ]{3,})[%][%] %{ if (parser.isContent()) return 'CONTENT'; //js @@ -75,7 +106,6 @@ %} - "{ELSE}" return 'CONTENT';//For now let individual plugins handle else "{"{INLINE_PLUGIN_ID}.*?"}" %{ @@ -90,7 +120,7 @@ "{"{PLUGIN_ID}"(".*?")}" %{ - if (parser.npStack) return 'CONTENT'; //js + if (parser.npStack || parser.ppStack) return 'CONTENT'; //js lexer.begin('plugin'); //js yy.pluginStack = parser.stackPlugin(yytext, yy.pluginStack); //js @@ -101,7 +131,7 @@ return 'CONTENT'; //js }//js - //php if ($this->npStack == true) return 'CONTENT'; + //php if ($this->npStack == true || $this->ppStack) return 'CONTENT'; //php $this->begin('plugin'); //php $this->stackPlugin($yytext); @@ -169,41 +199,31 @@ "---" %{ - yytext = parser.hr(); //js - //php $yytext = $this->hr(); - return 'HORIZONTAL_BAR'; %} - -"(:"{SMILE}":)" +"%%%" %{ - yytext = parser.substring(yytext, 2, -2); //js - yytext = parser.smile(yytext); //js - - //php $yytext = $this->substring($yytext, 2, -2); - //php $yytext = $this->smile($yytext); - - return 'SMILE'; + return 'FORCED_LINE_END'; %} <bold><<EOF>> %{ - if (parser.isContent()) return 'EOF'; //js + if (parser.isContent()) return 'CONTENT'; //js lexer.unput('__'); //js - //php if ($this->isContent()) return 'EOF'; - //php $this->unput('__'); + //php if ($this->isContent()) return 'CONTENT'; + //php $this->unput('__'); %} <bold>[_][_] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'BOLD_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'BOLD_END'; %} [_][_] @@ -228,12 +248,12 @@ %} <box>[\^] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'BOX_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'BOX_END'; %} [\^] @@ -258,12 +278,12 @@ %} <center>[:][:] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'CENTER_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'CENTER_END'; %} [:][:] @@ -278,55 +298,86 @@ %} -<colortext><<EOF>> + +<code><<EOF>> %{ - if (parser.isContent()) return 'CONTENT'; //js\ + if (parser.isContent()) return 'CONTENT'; //js + lexer.unput('+-'); //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->unput('+-'); + %} +<code>"+-" + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.popState(); //js + return 'CODE_END'; //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->popState(); + //php return 'CODE_END'; + %} +"-+" + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.begin('code'); //js + return 'CODE_START'; //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->begin('code'); + //php return 'CODE_START'; + %} + + + +<color><<EOF>> + %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.unput('~~'); //js //php if ($this->isContent()) return 'CONTENT'; //php $this->unput('~~'); %} -<colortext>[\~][\~] +<color>[\~][\~] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js - return 'COLORTEXT_END'; //js + return 'COLOR_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; - //php return 'COLORTEXT_END'; + //php return 'COLOR_END'; %} [\~][\~] %{ if (parser.isContent()) return 'CONTENT'; //js - lexer.begin('colortext'); //js - return 'COLORTEXT_START'; //js + lexer.begin('color'); //js + return 'COLOR_START'; //js //php if ($this->isContent()) return 'CONTENT'; - //php $this->begin('colortext'); - //php return 'COLORTEXT_START'; + //php $this->begin('color'); + //php return 'COLOR_START'; %} <header><<EOF>> %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.unput("\n"); //js - if (parser.isContent()) return 'CONTENT'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->unput("\n"); - //php if ($this->isContent()) return 'CONTENT'; %} <header>{LINE_END} %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js lexer.unput("\n"); //js return 'HEADER_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php $this->unput("\n"); - //php $this->skipNextBr = true; //php return 'HEADER_END'; %} {LINE_END}[!] @@ -342,27 +393,60 @@ -<list><<EOF>> +<directional><<EOF>> %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.unput("\n"); //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->unput("\n"); + %} +<directional>{LINE_END} + %{ if (parser.isContent()) return 'CONTENT'; //js + lexer.popState(); //js + lexer.unput("\n"); //js + return 'DIRECTIONAL_END'; //js + //php if ($this->isContent()) return 'CONTENT'; + //php $this->popState(); //php $this->unput("\n"); + //php return 'DIRECTIONAL_END'; + %} +{LINE_END}[\{](r2l|l2r)[\}] + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.begin('directional'); //js + return 'DIRECTIONAL_START'; //js + //php if ($this->isContent()) return 'CONTENT'; + //php $this->begin('directional'); + //php return 'DIRECTIONAL_START'; %} + + + +<list><<EOF>> + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.unput("\n"); //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->unput("\n"); + %} <list>{LINE_END} %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js + lexer.unput("\n"); //js return 'LIST_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php $this->unput("\n"); - //php $this->skipNextBr = true; //php return 'LIST_END'; %} -{LINE_END}[*#+] +{LINE_END}[*#+;] %{ if (parser.isContent()) return 'CONTENT'; //js lexer.begin('list'); //js @@ -385,12 +469,12 @@ %} <italic>[']['] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'ITALIC_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'ITALIC_END'; %} [']['] @@ -405,6 +489,37 @@ %} +<unlink><<EOF>> + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.unput("@np"); //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->unput("@np"); //js + %} +<unlink>("@np"|"]]"|"]") + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.popState(); //js + return 'UNLINK_END'; //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->popState(); + //php return 'UNLINK_END'; + %} +"[[" + %{ + if (parser.isContent()) return 'CONTENT'; //js + lexer.begin('unlink'); //js + return 'UNLINK_START'; //js + + //php if ($this->isContent()) return 'CONTENT'; + //php $this->begin('unlink'); + //php return 'UNLINK_START'; + %} + + + <link><<EOF>> %{ if (parser.isContent()) return 'CONTENT'; //js @@ -415,12 +530,12 @@ %} <link>"]" %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'LINK_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'LINK_END'; %} "[" @@ -436,7 +551,7 @@ "-- " return 'CONTENT'; -<strikethrough><<EOF>> +<strike><<EOF>> %{ if (parser.isContent()) return 'CONTENT'; //js lexer.unput('--'); //js @@ -444,25 +559,25 @@ //php if ($this->isContent()) return 'CONTENT'; //php $this->unput('--'); %} -<strikethrough>[-][-] +<strike>[-][-] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js - return 'STRIKETHROUGH_END'; //js + return 'STRIKE_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; - //php return 'STRIKETHROUGH_END'; + //php return 'STRIKE_END'; %} [-][-] %{ if (parser.isContent()) return 'CONTENT'; //js - lexer.begin('strikethrough'); //js - return 'STRIKETHROUGH_START'; //js + lexer.begin('strike'); //js + return 'STRIKE_START'; //js //php if ($this->isContent()) return 'CONTENT'; - //php $this->begin('strikethrough'); - //php return 'STRIKETHROUGH_START'; + //php $this->begin('strike'); + //php return 'STRIKE_START'; %} @@ -476,14 +591,14 @@ %} <table>[|][|] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - lexer.tableStack.pop(); //js - if (parser.isContent()) return 'CONTENT'; //js + lexer.tableStack.pop(); //js return 'TABLE_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php array_pop($this->tableStack); - //php if ($this->isContent()) return 'CONTENT'; + //php array_pop($this->tableStack); //php return 'TABLE_END'; %} [|][|] @@ -510,12 +625,12 @@ %} <titlebar>[=][-] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'TITLEBAR_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'TITLEBAR_END'; %} [-][=] @@ -541,12 +656,12 @@ %} <underscore>[=][=][=] %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'UNDERSCORE_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'UNDERSCORE_END'; %} [=][=][=] @@ -571,12 +686,12 @@ %} <wikilink>"))" %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'WIKILINK_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'WIKILINK_END'; %} "((" @@ -600,12 +715,12 @@ %} <wikilink>"))" %{ + if (parser.isContent()) return 'CONTENT'; //js lexer.popState(); //js - if (parser.isContent()) return 'CONTENT'; //js return 'WIKILINK_END'; //js + //php if ($this->isContent()) return 'CONTENT'; //php $this->popState(); - //php if ($this->isContent()) return 'CONTENT'; //php return 'WIKILINK_END'; %} "((" @@ -619,6 +734,8 @@ //php return 'WIKILINK_START'; %} +[<](.|\n)*?[>] return 'HTML_TAG'; +"≤REAL_LT≥"(.|\n)*?"≤REAL_GT≥" return 'HTML_TAG'; {LINE_END} @@ -633,10 +750,10 @@ ("§"[a-z0-9]{32}"§") return 'CONTENT'; ("≤"(.)+"≥") return 'CONTENT'; -("<"(.|\n)*?">") return 'CONTENT'; -[A-Za-z0-9 .,?;]+? return 'CONTENT'; -({LINE_CONTENT})?(?={SYNTAX_CHARS}) return 'CONTENT'; +([A-Za-z0-9 .,?;]+) return 'CONTENT'; +(?!{SYNTAX_CHARS})({LINE_CONTENT})?(?={SYNTAX_CHARS}) return 'CONTENT'; ([ ]+?) return 'CONTENT'; +(.) return 'CONTENT'; <<EOF>> return 'EOF'; /lex @@ -665,46 +782,43 @@ content : CONTENT {$$ = $1;} + | COMMENT + { + $$ = parser.comment($1); //js + //php $$ = $this->comment($1); //js + } | NP_START NP_END | NP_START contents NP_END { $$ = parser.np($2); //js //php $$ = $this->np($2); //js } + | PP_START PP_END + | PP_START contents PP_END + { + $$ = parser.pp($2); //js + //php $$ = $this->pp($2); //js + } | DOUBLE_DYNAMIC_VAR { $$ = parser.doubleDynamicVar($1); //js - //php $$ = $this->doubleDynamicVar($1); //js + //php $$ = $this->doubleDynamicVar($1); } | SINGLE_DYNAMIC_VAR { $$ = parser.singleDynamicVar($1); //js - //php $$ = $this->singleDynamicVar($1); //js + //php $$ = $this->singleDynamicVar($1); } - | HTTP_LINK + | HTML_TAG { - $$ = parser.autoLink($1, 'http'); //js - //php $$ = $this->autoLink($1, 'http'); + $$ = parser.htmlTag($1); //js + //php $$ = $this->htmlTag($1); } - | URL_LINK - { - $$ = parser.autoLink($1, 'url'); //js - //php $$ = $this->autoLink($1, 'url'); - } - | EMAIL_LINK - { - $$ = parser.autoLink($1, 'email'); //js - //php $$ = $this->autoLink($1, 'email'); - } - | MAGNET_LINK - { - $$ = parser.autoLink($1, 'magnet'); //js - //php $$ = $this->autoLink($1, 'magnet'); - } | HORIZONTAL_BAR - {$$ = $1;} - | SMILE - {$$ = $1;} + { + $$ = parser.hr(); //js + //php $$ = $this->hr(); + } | BOLD_START BOLD_END | BOLD_START contents BOLD_END { @@ -723,29 +837,41 @@ $$ = parser.center($2); //js //php $$ = $this->center($2); } - | COLORTEXT_START COLORTEXT_END - | COLORTEXT_START contents COLORTEXT_END + | CODE_START CODE_END + | CODE_START contents CODE_END { - $$ = parser.colortext($2); //js - //php $$ = $this->colortext($2); + $$ = parser.code($2); //js + //php $$ = $this->code($2); } + | COLOR_START COLOR_END + | COLOR_START contents COLOR_END + { + $$ = parser.color($2); //js + //php $$ = $this->color($2); + } | ITALIC_START ITALIC_END | ITALIC_START contents ITALIC_END { $$ = parser.italics($2); //js //php $$ = $this->italics($2); } + | UNLINK_START UNLINK_END + | UNLINK_START contents UNLINK_END + { + $$ = parser.unlink($1 + $2 + $3); //js + //php $$ = $this->unlink($1 . $2 . $3); + } | LINK_START LINK_END | LINK_START contents LINK_END { $$ = parser.link($2); //js //php $$ = $this->link($2); } - | STRIKETHROUGH_START STRIKETHROUGH_END - | STRIKETHROUGH_START contents STRIKETHROUGH_END + | STRIKE_START STRIKE_END + | STRIKE_START contents STRIKE_END { - $$ = parser.strikethrough($2); //js - //php $$ = $this->strikethrough($2); + $$ = parser.strike($2); //js + //php $$ = $this->strike($2); } | TABLE_START TABLE_END | TABLE_START contents TABLE_END @@ -793,6 +919,12 @@ //php $3['body'] = $2; //php $$ = $this->plugin($3); } + | DIRECTIONAL_START DIRECTIONAL_END + | DIRECTIONAL_START contents DIRECTIONAL_END + { + $$ = parser.directional($1, $2); //js + //php $$ = $this->directional($1, $2); + } | HEADER_START HEADER_END | HEADER_START contents HEADER_END { @@ -807,12 +939,14 @@ } | LINE_END { - //php if ($this->skipNextBr == false && empty($this->tableStack)) { - //php $$ = "<br />"; - //php } - - //php $this->skipNextBr = false; + $$ = parser.line(); //js + //php $$ = $this->line(); } + | FORCED_LINE_END + { + $$ = parser.forcedLineEnd(); //js + //php $$ = $this->forcedLineEnd(); + } ; %% /* parser extensions */ Modified: trunk/lib/core/JisonParser/Wiki.js =================================================================== --- trunk/lib/core/JisonParser/Wiki.js 2012-09-10 20:49:55 UTC (rev 42887) +++ trunk/lib/core/JisonParser/Wiki.js 2012-09-10 20:51:10 UTC (rev 42888) @@ -2,9 +2,9 @@ var Wiki = (function(){ var parser = {trace: function trace() { }, yy: {}, -symbols_: {"error":2,"wiki":3,"contents":4,"EOF":5,"content":6,"CONTENT":7,"NP_START":8,"NP_END":9,"DOUBLE_DYNAMIC_VAR":10,"SINGLE_DYNAMIC_VAR":11,"HTTP_LINK":12,"URL_LINK":13,"EMAIL_LINK":14,"MAGNET_LINK":15,"HORIZONTAL_BAR":16,"SMILE":17,"BOLD_START":18,"BOLD_END":19,"BOX_START":20,"BOX_END":21,"CENTER_START":22,"CENTER_END":23,"COLORTEXT_START":24,"COLORTEXT_END":25,"ITALIC_START":26,"ITALIC_END":27,"LINK_START":28,"LINK_END":29,"STRIKETHROUGH_START":30,"STRIKETHROUGH_END":31,"TABLE_START":32,"TABLE_END":33,"TITLEBAR_START":34,"TITLEBAR_END":35,"UNDERSCORE_START":36,"UNDERSCORE_END":37,"WIKILINK_START":38,"WIKILINK_END":39,"INLINE_PLUGIN":40,"PLUGIN_START":41,"PLUGIN_END":42,"HEADER_START":43,"HEADER_END":44,"LIST_START":45,"LIST_END":46,"LINE_END":47,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",7:"CONTENT",8:"NP_START",9:"NP_END",10:"DOUBLE_DYNAMIC_VAR",11:"SINGLE_DYNAMIC_VAR",12:"HTTP_LINK",13:"URL_LINK",14:"EMAIL_LINK",15:"MAGNET_LINK",16:"HORIZONTAL_BAR",17:"SMILE",18:"BOLD_START",19:"BOLD_END",20:"BOX_START",21:"BOX_END",22:"CENTER_START",23:"CENTER_END",24:"COLORTEXT_START",25:"COLORTEXT_END",26:"ITALIC_START",27:"ITALIC_END",28:"LINK_START",29:"LINK_END",30:"STRIKETHROUGH_START",31:"STRIKETHROUGH_END",32:"TABLE_START",33:"TABLE_END",34:"TITLEBAR_START",35:"TITLEBAR_END",36:"UNDERSCORE_START",37:"UNDERSCORE_END",38:"WIKILINK_START",39:"WIKILINK_END",40:"INLINE_PLUGIN",41:"PLUGIN_START",42:"PLUGIN_END",43:"HEADER_START",44:"HEADER_END",45:"LIST_START",46:"LIST_END",47:"LINE_END"}, -productions_: [0,[3,1],[3,2],[3,1],[4,1],[4,2],[6,1],[6,2],[6,3],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,1],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,1]], +symbols_: {"error":2,"wiki":3,"contents":4,"EOF":5,"content":6,"CONTENT":7,"COMMENT":8,"NP_START":9,"NP_END":10,"PP_START":11,"PP_END":12,"DOUBLE_DYNAMIC_VAR":13,"SINGLE_DYNAMIC_VAR":14,"HTML_TAG":15,"HORIZONTAL_BAR":16,"BOLD_START":17,"BOLD_END":18,"BOX_START":19,"BOX_END":20,"CENTER_START":21,"CENTER_END":22,"CODE_START":23,"CODE_END":24,"COLOR_START":25,"COLOR_END":26,"ITALIC_START":27,"ITALIC_END":28,"UNLINK_START":29,"UNLINK_END":30,"LINK_START":31,"LINK_END":32,"STRIKE_START":33,"STRIKE_END":34,"TABLE_START":35,"TABLE_END":36,"TITLEBAR_START":37,"TITLEBAR_END":38,"UNDERSCORE_START":39,"UNDERSCORE_END":40,"WIKILINK_START":41,"WIKILINK_END":42,"INLINE_PLUGIN":43,"PLUGIN_START":44,"PLUGIN_END":45,"DIRECTIONAL_START":46,"DIRECTIONAL_END":47,"HEADER_START":48,"HEADER_END":49,"LIST_START":50,"LIST_END":51,"LINE_END":52,"FORCED_LINE_END":53,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",7:"CONTENT",8:"COMMENT",9:"NP_START",10:"NP_END",11:"PP_START",12:"PP_END",13:"DOUBLE_DYNAMIC_VAR",14:"SINGLE_DYNAMIC_VAR",15:"HTML_TAG",16:"HORIZONTAL_BAR",17:"BOLD_START",18:"BOLD_END",19:"BOX_START",20:"BOX_END",21:"CENTER_START",22:"CENTER_END",23:"CODE_START",24:"CODE_END",25:"COLOR_START",26:"COLOR_END",27:"ITALIC_START",28:"ITALIC_END",29:"UNLINK_START",30:"UNLINK_END",31:"LINK_START",32:"LINK_END",33:"STRIKE_START",34:"STRIKE_END",35:"TABLE_START",36:"TABLE_END",37:"TITLEBAR_START",38:"TITLEBAR_END",39:"UNDERSCORE_START",40:"UNDERSCORE_END",41:"WIKILINK_START",42:"WIKILINK_END",43:"INLINE_PLUGIN",44:"PLUGIN_START",45:"PLUGIN_END",46:"DIRECTIONAL_START",47:"DIRECTIONAL_END",48:"HEADER_START",49:"HEADER_END",50:"LIST_START",51:"LIST_END",52:"LINE_END",53:"FORCED_LINE_END"}, +productions_: [0,[3,1],[3,2],[3,1],[4,1],[4,2],[6,1],[6,1],[6,2],[6,3],[6,2],[6,3],[6,1],[6,1],[6,1],[6,1],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,1],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,2],[6,3],[6,1],[6,1]], performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) { var $0 = $$.length - 1; @@ -25,107 +25,113 @@ break; case 6:this.$ = $$[$0]; break; -case 8: - this.$ = parser.np($$[$0-1]); //js - //php this.$ = this->np($$[$0-1]); //js +case 7: + this.$ = parser.comment($$[$0]); //js + //php this.$ = this->comment($$[$0]); //js break; case 9: - this.$ = parser.doubleDynamicVar($$[$0]); //js - //php this.$ = this->doubleDynamicVar($$[$0]); //js + this.$ = parser.np($$[$0-1]); //js + //php this.$ = this->np($$[$0-1]); //js break; -case 10: - this.$ = parser.singleDynamicVar($$[$0]); //js - //php this.$ = this->singleDynamicVar($$[$0]); //js - -break; case 11: - this.$ = parser.autoLink($$[$0], 'http'); //js - //php this.$ = this->autoLink($$[$0], 'http'); + this.$ = parser.pp($$[$0-1]); //js + //php this.$ = this->pp($$[$0-1]); //js break; case 12: - this.$ = parser.autoLink($$[$0], 'url'); //js - //php this.$ = this->autoLink($$[$0], 'url'); + this.$ = parser.doubleDynamicVar($$[$0]); //js + //php this.$ = this->doubleDynamicVar($$[$0]); break; case 13: - this.$ = parser.autoLink($$[$0], 'email'); //js - //php this.$ = this->autoLink($$[$0], 'email'); - + this.$ = parser.singleDynamicVar($$[$0]); //js + //php this.$ = this->singleDynamicVar($$[$0]); + break; case 14: - this.$ = parser.autoLink($$[$0], 'magnet'); //js - //php this.$ = this->autoLink($$[$0], 'magnet'); + this.$ = parser.htmlTag($$[$0]); //js + //php this.$ = this->htmlTag($$[$0]); break; -case 15:this.$ = $$[$0]; +case 15: + this.$ = parser.hr(); //js + //php this.$ = this->hr(); + break; -case 16:this.$ = $$[$0]; -break; -case 18: +case 17: this.$ = parser.bold($$[$0-1]); //js //php this.$ = this->bold($$[$0-1]); break; -case 20: +case 19: this.$ = parser.box($$[$0-1]); //js //php this.$ = this->box($$[$0-1]); break; -case 22: +case 21: this.$ = parser.center($$[$0-1]); //js //php this.$ = this->center($$[$0-1]); break; -case 24: - this.$ = parser.colortext($$[$0-1]); //js - //php this.$ = this->colortext($$[$0-1]); +case 23: + this.$ = parser.code($$[$0-1]); //js + //php this.$ = this->code($$[$0-1]); break; -case 26: +case 25: + this.$ = parser.color($$[$0-1]); //js + //php this.$ = this->color($$[$0-1]); + +break; +case 27: this.$ = parser.italics($$[$0-1]); //js //php this.$ = this->italics($$[$0-1]); break; -case 28: +case 29: + this.$ = parser.unlink($$[$0-2] + $$[$0-1] + $$[$0]); //js + //php this.$ = this->unlink($$[$0-2] . $$[$0-1] . $$[$0]); + +break; +case 31: this.$ = parser.link($$[$0-1]); //js //php this.$ = this->link($$[$0-1]); break; -case 30: - this.$ = parser.strikethrough($$[$0-1]); //js - //php this.$ = this->strikethrough($$[$0-1]); +case 33: + this.$ = parser.strike($$[$0-1]); //js + //php this.$ = this->strike($$[$0-1]); break; -case 32: +case 35: this.$ = parser.tableParser($$[$0-1]); //js //php this.$ = this->tableParser($$[$0-1]); break; -case 34: +case 37: this.$ = parser.titlebar($$[$0-1]); //js //php this.$ = this->titlebar($$[$0-1]); break; -case 36: +case 39: this.$ = parser.underscore($$[$0-1]); //js //php this.$ = this->underscore($$[$0-1]); break; -case 38: +case 41: this.$ = parser.wikilink($$[$0-1]); //js //php this.$ = this->wikilink($$[$0-1]); break; -case 39: +case 42: this.$ = parser.plugin($$[$0]); //js //php this.$ = this->plugin($$[$0]); break; -case 40: +case 43: $$[$0].body = ''; //js this.$ = parser.plugin($$[$0]); //js @@ -133,7 +139,7 @@ //php this.$ = this->plugin($$[$0]); break; -case 41: +case 44: $$[$0].body = $$[$0-1]; //js this.$ = parser.plugin($$[$0]); //js @@ -141,28 +147,35 @@ //php this.$ = this->plugin($$[$0]); break; -case 43: +case 46: + this.$ = parser.directional($$[$0-2], $$[$0-1]); //js + //php this.$ = this->directional($$[$0-2], $$[$0-1]); + +break; +case 48: this.$ = parser.header($$[$0-1]); //js //php this.$ = this->header($$[$0-1]); break; -case 45: +case 50: this.$ = parser.stackList($$[$0-2] + $$[$0-1]); //js //php this.$ = this->stackList($$[$0-2] . $$[$0-1]); break; -case 46: - //php if (this->skipNextBr == false && empty(this->tableStack)) { - //php this.$ = "<br />"; - //php } - - //php this->skipNextBr = false; +case 51: + this.$ = parser.line(); //js + //php this.$ = this->line(); break; +case 52: + this.$ = parser.forcedLineEnd(); //js + //php this.$ = this->forcedLineEnd(); + +break; } }, -table: [{3:1,4:2,5:[1,3],6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[3]},{1:[2,1],5:[1,31],6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,3]},{1:[2,4],5:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[2,4],11:[2,4],12:[2,4],13:[2,4],14:[2,4],15:[2,4],16:[2,4],17:[2,4],18:[2,4],19:[2,4],20:[2,4],21:[2,4],22:[2,4],23:[2,4],24:[2,4],25:[2,4],26:[2,4],27:[2,4],28:[2,4],29:[2,4],30:[2,4],31:[2,4],32:[2,4],33:[2,4],34:[2,4],35:[2,4],36:[2,4],37:[2,4],38:[2,4],39:[2,4],40:[2,4],41:[2,4],42:[2,4],43:[2,4],44:[2,4],45:[2,4],46:[2,4],47:[2,4]},{1:[2,6],5:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[2,6],17:[2,6],18:[2,6],19:[2,6],20:[2,6],21:[2,6],22:[2,6],23:[2,6],24:[2,6],25:[2,6],26:[2,6],27:[2,6],28:[2,6],29:[2,6],30:[2,6],31:[2,6],32:[2,6],33:[2,6],34:[2,6],35:[2,6],36:[2,6],37:[2,6],38:[2,6],39:[2,6],40:[2,6],41:[2,6],42:[2,6],43:[2,6],44:[2,6],45:[2,6],46:[2,6],47:[2,6]},{4:34,6:4,7:[1,5],8:[1,6],9:[1,33],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,9],5:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[2,9],17:[2,9],18:[2,9],19:[2,9],20:[2,9],21:[2,9],22:[2,9],23:[2,9],24:[2,9],25:[2,9],26:[2,9],27:[2,9],28:[2,9],29:[2,9],30:[2,9],31:[2,9],32:[2,9],33:[2,9],34:[2,9],35:[2,9],36:[2,9],37:[2,9],38:[2,9],39:[2,9],40:[2,9],41:[2,9],42:[2,9],43:[2,9],44:[2,9],45:[2,9],46:[2,9],47:[2,9]},{1:[2,10],5:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[2,10],17:[2,10],18:[2,10],19:[2,10],20:[2,10],21:[2,10],22:[2,10],23:[2,10],24:[2,10],25:[2,10],26:[2,10],27:[2,10],28:[2,10],29:[2,10],30:[2,10],31:[2,10],32:[2,10],33:[2,10],34:[2,10],35:[2,10],36:[2,10],37:[2,10],38:[2,10],39:[2,10],40:[2,10],41:[2,10],42:[2,10],43:[2,10],44:[2,10],45:[2,10],46:[2,10],47:[2,10]},{1:[2,11],5:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],17:[2,11],18:[2,11],19:[2,11],20:[2,11],21:[2,11],22:[2,11],23:[2,11],24:[2,11],25:[2,11],26:[2,11],27:[2,11],28:[2,11],29:[2,11],30:[2,11],31:[2,11],32:[2,11],33:[2,11],34:[2,11],35:[2,11],36:[2,11],37:[2,11],38:[2,11],39:[2,11],40:[2,11],41:[2,11],42:[2,11],43:[2,11],44:[2,11],45:[2,11],46:[2,11],47:[2,11]},{1:[2,12],5:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],17:[2,12],18:[2,12],19:[2,12],20:[2,12],21:[2,12],22:[2,12],23:[2,12],24:[2,12],25:[2,12],26:[2,12],27:[2,12],28:[2,12],29:[2,12],30:[2,12],31:[2,12],32:[2,12],33:[2,12],34:[2,12],35:[2,12],36:[2,12],37:[2,12],38:[2,12],39:[2,12],40:[2,12],41:[2,12],42:[2,12],43:[2,12],44:[2,12],45:[2,12],46:[2,12],47:[2,12]},{1:[2,13],5:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],17:[2,13],18:[2,13],19:[2,13],20:[2,13],21:[2,13],22:[2,13],23:[2,13],24:[2,13],25:[2,13],26:[2,13],27:[2,13],28:[2,13],29:[2,13],30:[2,13],31:[2,13],32:[2,13],33:[2,13],34:[2,13],35:[2,13],36:[2,13],37:[2,13],38:[2,13],39:[2,13],40:[2,13],41:[2,13],42:[2,13],43:[2,13],44:[2,13],45:[2,13],46:[2,13],47:[2,13]},{1:[2,14],5:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],17:[2,14],18:[2,14],19:[2,14],20:[2,14],21:[2,14],22:[2,14],23:[2,14],24:[2,14],25:[2,14],26:[2,14],27:[2,14],28:[2,14],29:[2,14],30:[2,14],31:[2,14],32:[2,14],33:[2,14],34:[2,14],35:[2,14],36:[2,14],37:[2,14],38:[2,14],39:[2,14],40:[2,14],41:[2,14],42:[2,14],43:[2,14],44:[2,14],45:[2,14],46:[2,14],47:[2,14]},{1:[2,15],5:[2,15],7:[2,15],8:[2,15],9:[2,15],10:[2,15],11:[2,15],12:[2,15],13:[2,15],14:[2,15],15:[2,15],16:[2,15],17:[2,15],18:[2,15],19:[2,15],20:[2,15],21:[2,15],22:[2,15],23:[2,15],24:[2,15],25:[2,15],26:[2,15],27:[2,15],28:[2,15],29:[2,15],30:[2,15],31:[2,15],32:[2,15],33:[2,15],34:[2,15],35:[2,15],36:[2,15],37:[2,15],38:[2,15],39:[2,15],40:[2,15],41:[2,15],42:[2,15],43:[2,15],44:[2,15],45:[2,15],46:[2,15],47:[2,15]},{1:[2,16],5:[2,16],7:[2,16],8:[2,16],9:[2,16],10:[2,16],11:[2,16],12:[2,16],13:[2,16],14:[2,16],15:[2,16],16:[2,16],17:[2,16],18:[2,16],19:[2,16],20:[2,16],21:[2,16],22:[2,16],23:[2,16],24:[2,16],25:[2,16],26:[2,16],27:[2,16],28:[2,16],29:[2,16],30:[2,16],31:[2,16],32:[2,16],33:[2,16],34:[2,16],35:[2,16],36:[2,16],37:[2,16],38:[2,16],39:[2,16],40:[2,16],41:[2,16],42:[2,16],43:[2,16],44:[2,16],45:[2,16],46:[2,16],47:[2,16]},{4:36,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],19:[1,35],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:38,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],21:[1,37],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:40,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],23:[1,39],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:42,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],25:[1,41],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:44,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],27:[1,43],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:46,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],29:[1,45],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:48,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],31:[1,47],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:50,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],33:[1,49],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:52,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],35:[1,51],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:54,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],37:[1,53],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{4:56,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],39:[1,55],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,39],5:[2,39],7:[2,39],8:[2,39],9:[2,39],10:[2,39],11:[2,39],12:[2,39],13:[2,39],14:[2,39],15:[2,39],16:[2,39],17:[2,39],18:[2,39],19:[2,39],20:[2,39],21:[2,39],22:[2,39],23:[2,39],24:[2,39],25:[2,39],26:[2,39],27:[2,39],28:[2,39],29:[2,39],30:[2,39],31:[2,39],32:[2,39],33:[2,39],34:[2,39],35:[2,39],36:[2,39],37:[2,39],38:[2,39],39:[2,39],40:[2,39],41:[2,39],42:[2,39],43:[2,39],44:[2,39],45:[2,39],46:[2,39],47:[2,39]},{4:58,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],42:[1,57],43:[1,28],45:[1,29],47:[1,30]},{4:60,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],44:[1,59],45:[1,29],47:[1,30]},{4:62,6:4,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],46:[1,61],47:[1,30]},{1:[2,46],5:[2,46],7:[2,46],8:[2,46],9:[2,46],10:[2,46],11:[2,46],12:[2,46],13:[2,46],14:[2,46],15:[2,46],16:[2,46],17:[2,46],18:[2,46],19:[2,46],20:[2,46],21:[2,46],22:[2,46],23:[2,46],24:[2,46],25:[2,46],26:[2,46],27:[2,46],28:[2,46],29:[2,46],30:[2,46],31:[2,46],32:[2,46],33:[2,46],34:[2,46],35:[2,46],36:[2,46],37:[2,46],38:[2,46],39:[2,46],40:[2,46],41:[2,46],42:[2,46],43:[2,46],44:[2,46],45:[2,46],46:[2,46],47:[2,46]},{1:[2,2]},{1:[2,5],5:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[2,5],17:[2,5],18:[2,5],19:[2,5],20:[2,5],21:[2,5],22:[2,5],23:[2,5],24:[2,5],25:[2,5],26:[2,5],27:[2,5],28:[2,5],29:[2,5],30:[2,5],31:[2,5],32:[2,5],33:[2,5],34:[2,5],35:[2,5],36:[2,5],37:[2,5],38:[2,5],39:[2,5],40:[2,5],41:[2,5],42:[2,5],43:[2,5],44:[2,5],45:[2,5],46:[2,5],47:[2,5]},{1:[2,7],5:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[2,7],17:[2,7],18:[2,7],19:[2,7],20:[2,7],21:[2,7],22:[2,7],23:[2,7],24:[2,7],25:[2,7],26:[2,7],27:[2,7],28:[2,7],29:[2,7],30:[2,7],31:[2,7],32:[2,7],33:[2,7],34:[2,7],35:[2,7],36:[2,7],37:[2,7],38:[2,7],39:[2,7],40:[2,7],41:[2,7],42:[2,7],43:[2,7],44:[2,7],45:[2,7],46:[2,7],47:[2,7]},{6:32,7:[1,5],8:[1,6],9:[1,63],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,17],5:[2,17],7:[2,17],8:[2,17],9:[2,17],10:[2,17],11:[2,17],12:[2,17],13:[2,17],14:[2,17],15:[2,17],16:[2,17],17:[2,17],18:[2,17],19:[2,17],20:[2,17],21:[2,17],22:[2,17],23:[2,17],24:[2,17],25:[2,17],26:[2,17],27:[2,17],28:[2,17],29:[2,17],30:[2,17],31:[2,17],32:[2,17],33:[2,17],34:[2,17],35:[2,17],36:[2,17],37:[2,17],38:[2,17],39:[2,17],40:[2,17],41:[2,17],42:[2,17],43:[2,17],44:[2,17],45:[2,17],46:[2,17],47:[2,17]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],19:[1,64],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,19],5:[2,19],7:[2,19],8:[2,19],9:[2,19],10:[2,19],11:[2,19],12:[2,19],13:[2,19],14:[2,19],15:[2,19],16:[2,19],17:[2,19],18:[2,19],19:[2,19],20:[2,19],21:[2,19],22:[2,19],23:[2,19],24:[2,19],25:[2,19],26:[2,19],27:[2,19],28:[2,19],29:[2,19],30:[2,19],31:[2,19],32:[2,19],33:[2,19],34:[2,19],35:[2,19],36:[2,19],37:[2,19],38:[2,19],39:[2,19],40:[2,19],41:[2,19],42:[2,19],43:[2,19],44:[2,19],45:[2,19],46:[2,19],47:[2,19]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],21:[1,65],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,21],5:[2,21],7:[2,21],8:[2,21],9:[2,21],10:[2,21],11:[2,21],12:[2,21],13:[2,21],14:[2,21],15:[2,21],16:[2,21],17:[2,21],18:[2,21],19:[2,21],20:[2,21],21:[2,21],22:[2,21],23:[2,21],24:[2,21],25:[2,21],26:[2,21],27:[2,21],28:[2,21],29:[2,21],30:[2,21],31:[2,21],32:[2,21],33:[2,21],34:[2,21],35:[2,21],36:[2,21],37:[2,21],38:[2,21],39:[2,21],40:[2,21],41:[2,21],42:[2,21],43:[2,21],44:[2,21],45:[2,21],46:[2,21],47:[2,21]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],23:[1,66],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,23],5:[2,23],7:[2,23],8:[2,23],9:[2,23],10:[2,23],11:[2,23],12:[2,23],13:[2,23],14:[2,23],15:[2,23],16:[2,23],17:[2,23],18:[2,23],19:[2,23],20:[2,23],21:[2,23],22:[2,23],23:[2,23],24:[2,23],25:[2,23],26:[2,23],27:[2,23],28:[2,23],29:[2,23],30:[2,23],31:[2,23],32:[2,23],33:[2,23],34:[2,23],35:[2,23],36:[2,23],37:[2,23],38:[2,23],39:[2,23],40:[2,23],41:[2,23],42:[2,23],43:[2,23],44:[2,23],45:[2,23],46:[2,23],47:[2,23]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],25:[1,67],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,25],5:[2,25],7:[2,25],8:[2,25],9:[2,25],10:[2,25],11:[2,25],12:[2,25],13:[2,25],14:[2,25],15:[2,25],16:[2,25],17:[2,25],18:[2,25],19:[2,25],20:[2,25],21:[2,25],22:[2,25],23:[2,25],24:[2,25],25:[2,25],26:[2,25],27:[2,25],28:[2,25],29:[2,25],30:[2,25],31:[2,25],32:[2,25],33:[2,25],34:[2,25],35:[2,25],36:[2,25],37:[2,25],38:[2,25],39:[2,25],40:[2,25],41:[2,25],42:[2,25],43:[2,25],44:[2,25],45:[2,25],46:[2,25],47:[2,25]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],27:[1,68],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,27],5:[2,27],7:[2,27],8:[2,27],9:[2,27],10:[2,27],11:[2,27],12:[2,27],13:[2,27],14:[2,27],15:[2,27],16:[2,27],17:[2,27],18:[2,27],19:[2,27],20:[2,27],21:[2,27],22:[2,27],23:[2,27],24:[2,27],25:[2,27],26:[2,27],27:[2,27],28:[2,27],29:[2,27],30:[2,27],31:[2,27],32:[2,27],33:[2,27],34:[2,27],35:[2,27],36:[2,27],37:[2,27],38:[2,27],39:[2,27],40:[2,27],41:[2,27],42:[2,27],43:[2,27],44:[2,27],45:[2,27],46:[2,27],47:[2,27]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],29:[1,69],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,29],5:[2,29],7:[2,29],8:[2,29],9:[2,29],10:[2,29],11:[2,29],12:[2,29],13:[2,29],14:[2,29],15:[2,29],16:[2,29],17:[2,29],18:[2,29],19:[2,29],20:[2,29],21:[2,29],22:[2,29],23:[2,29],24:[2,29],25:[2,29],26:[2,29],27:[2,29],28:[2,29],29:[2,29],30:[2,29],31:[2,29],32:[2,29],33:[2,29],34:[2,29],35:[2,29],36:[2,29],37:[2,29],38:[2,29],39:[2,29],40:[2,29],41:[2,29],42:[2,29],43:[2,29],44:[2,29],45:[2,29],46:[2,29],47:[2,29]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],31:[1,70],32:[1,22],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,31],5:[2,31],7:[2,31],8:[2,31],9:[2,31],10:[2,31],11:[2,31],12:[2,31],13:[2,31],14:[2,31],15:[2,31],16:[2,31],17:[2,31],18:[2,31],19:[2,31],20:[2,31],21:[2,31],22:[2,31],23:[2,31],24:[2,31],25:[2,31],26:[2,31],27:[2,31],28:[2,31],29:[2,31],30:[2,31],31:[2,31],32:[2,31],33:[2,31],34:[2,31],35:[2,31],36:[2,31],37:[2,31],38:[2,31],39:[2,31],40:[2,31],41:[2,31],42:[2,31],43:[2,31],44:[2,31],45:[2,31],46:[2,31],47:[2,31]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],33:[1,71],34:[1,23],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,33],5:[2,33],7:[2,33],8:[2,33],9:[2,33],10:[2,33],11:[2,33],12:[2,33],13:[2,33],14:[2,33],15:[2,33],16:[2,33],17:[2,33],18:[2,33],19:[2,33],20:[2,33],21:[2,33],22:[2,33],23:[2,33],24:[2,33],25:[2,33],26:[2,33],27:[2,33],28:[2,33],29:[2,33],30:[2,33],31:[2,33],32:[2,33],33:[2,33],34:[2,33],35:[2,33],36:[2,33],37:[2,33],38:[2,33],39:[2,33],40:[2,33],41:[2,33],42:[2,33],43:[2,33],44:[2,33],45:[2,33],46:[2,33],47:[2,33]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],35:[1,72],36:[1,24],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,35],5:[2,35],7:[2,35],8:[2,35],9:[2,35],10:[2,35],11:[2,35],12:[2,35],13:[2,35],14:[2,35],15:[2,35],16:[2,35],17:[2,35],18:[2,35],19:[2,35],20:[2,35],21:[2,35],22:[2,35],23:[2,35],24:[2,35],25:[2,35],26:[2,35],27:[2,35],28:[2,35],29:[2,35],30:[2,35],31:[2,35],32:[2,35],33:[2,35],34:[2,35],35:[2,35],36:[2,35],37:[2,35],38:[2,35],39:[2,35],40:[2,35],41:[2,35],42:[2,35],43:[2,35],44:[2,35],45:[2,35],46:[2,35],47:[2,35]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],37:[1,73],38:[1,25],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,37],5:[2,37],7:[2,37],8:[2,37],9:[2,37],10:[2,37],11:[2,37],12:[2,37],13:[2,37],14:[2,37],15:[2,37],16:[2,37],17:[2,37],18:[2,37],19:[2,37],20:[2,37],21:[2,37],22:[2,37],23:[2,37],24:[2,37],25:[2,37],26:[2,37],27:[2,37],28:[2,37],29:[2,37],30:[2,37],31:[2,37],32:[2,37],33:[2,37],34:[2,37],35:[2,37],36:[2,37],37:[2,37],38:[2,37],39:[2,37],40:[2,37],41:[2,37],42:[2,37],43:[2,37],44:[2,37],45:[2,37],46:[2,37],47:[2,37]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11],15:[1,12],16:[1,13],17:[1,14],18:[1,15],20:[1,16],22:[1,17],24:[1,18],26:[1,19],28:[1,20],30:[1,21],32:[1,22],34:[1,23],36:[1,24],38:[1,25],39:[1,74],40:[1,26],41:[1,27],43:[1,28],45:[1,29],47:[1,30]},{1:[2,40],5:[2,40],7:[2,40],8:[2,40],9:[2,40],10:[2,40],11:[2,40],12:[2,40],13:[2,40],14:[2,40],15:[2,40],16:[2,40],17:[2,40],18:[2,40],19:[2,40],20:[2,40],21:[2,40],22:[2,40],23:[2,40],24:[2,40],25:[2,40],26:[2,40],27:[2,40],28:[2,40],29:[2,40],30:[2,40],31:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],37:[2,40],38:[2,40],39:[2,40],40:[2,40],41:[2,40],42:[2,40],43:[2,40],44:[2,40],45:[2,40],46:[2,40],47:[2,40]},{6:32,7:[1,5],8:[1,6],10:[1,7],11:[1,8],12:[1,9],13:[1,10],14:[1,11]... [truncated message content] |