diff --git a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java index 0cca337a2..ae4c3ddd8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionGraphSource; import com.jpexs.decompiler.flash.action.special.ActionEnd; import com.jpexs.decompiler.flash.action.special.ActionNop; +import com.jpexs.decompiler.flash.action.special.ActionStore; import com.jpexs.decompiler.flash.action.swf3.*; import com.jpexs.decompiler.flash.action.swf4.*; import com.jpexs.decompiler.flash.action.swf5.*; @@ -777,7 +778,7 @@ public class SWFInputStream extends InputStream { //throw new RuntimeException("Wrong length "+a.toString()+" info:"+infoCorrect+" actual:"+b.length+" datalen:"+(infoCorrect-info)); } int actual = actual = a.getBytes(sis.version).length; - if (!(a instanceof GraphSourceItemContainer)) { + if ((!(a instanceof ActionStore)) && (!(a instanceof GraphSourceItemContainer))) { int change = info - (rri.getPos() - ip); if (change > 0) { a.afterInsert = new ActionJump(change); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/Action.java b/trunk/src/com/jpexs/decompiler/flash/action/Action.java index 805b615d6..83af7548e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/Action.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/Action.java @@ -95,7 +95,7 @@ public class Action implements GraphSourceItem { "_xmouse", "_ymouse" }; - public static final List propertyNamesList=Arrays.asList(propertyNames); + public static final List propertyNamesList = Arrays.asList(propertyNames); private static Logger logger = Logger.getLogger(Action.class.getName()); /** diff --git a/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java b/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java index fbe4b9447..449469c95 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/gui/ActionPanel.java @@ -58,9 +58,13 @@ public class ActionPanel extends JPanel implements ActionListener { public List list; public JSplitPane splitPane; public JSplitPane splitPane2; - public JButton saveButton = new JButton("Save"); - public JButton editButton = new JButton("Edit"); - public JButton cancelButton = new JButton("Cancel"); + public JButton saveButton = new JButton("Save", View.getIcon("save16")); + public JButton editButton = new JButton("Edit", View.getIcon("edit16")); + public JButton cancelButton = new JButton("Cancel", View.getIcon("cancel16")); + public JLabel betaLabel = new JLabel("(Beta)"); + public JButton editDecompiledButton = new JButton("Edit", View.getIcon("edit16")); + public JButton saveDecompiledButton = new JButton("Save", View.getIcon("save16")); + public JButton cancelDecompiledButton = new JButton("Cancel", View.getIcon("cancel16")); public JToggleButton hexButton; public JButton saveHexButton = new JButton("Save hex"); public JButton loadHexButton = new JButton("Load hex"); @@ -71,6 +75,7 @@ public class ActionPanel extends JPanel implements ActionListener { public String lastDisasm = ""; private boolean ignoreCarret = false; private boolean editMode = false; + private boolean editDecompiledMode = false; private List lastCode; private ASMSource src; public JPanel topButtonsPan; @@ -146,6 +151,7 @@ public class ActionPanel extends JPanel implements ActionListener { } } setEditMode(false); + setDecompiledEditMode(false); Main.stopWork(); } }).start(); @@ -200,6 +206,21 @@ public class ActionPanel extends JPanel implements ActionListener { buttonsPan.add(saveButton); buttonsPan.add(cancelButton); + editButton.setMargin(new Insets(3, 3, 3, 10)); + saveButton.setMargin(new Insets(3, 3, 3, 10)); + cancelButton.setMargin(new Insets(3, 3, 3, 10)); + + + JPanel decButtonsPan = new JPanel(new FlowLayout()); + decButtonsPan.add(editDecompiledButton); + decButtonsPan.add(betaLabel); + decButtonsPan.add(saveDecompiledButton); + decButtonsPan.add(cancelDecompiledButton); + + editDecompiledButton.setMargin(new Insets(3, 3, 3, 10)); + saveDecompiledButton.setMargin(new Insets(3, 3, 3, 10)); + cancelDecompiledButton.setMargin(new Insets(3, 3, 3, 10)); + //buttonsPan.add(saveHexButton); //buttonsPan.add(loadHexButton); panB.add(buttonsPan, BorderLayout.SOUTH); @@ -219,10 +240,22 @@ public class ActionPanel extends JPanel implements ActionListener { cancelButton.setVisible(false); + + saveDecompiledButton.addActionListener(this); + saveDecompiledButton.setActionCommand("SAVEDECOMPILED"); + editDecompiledButton.addActionListener(this); + editDecompiledButton.setActionCommand("EDITDECOMPILED"); + + cancelDecompiledButton.addActionListener(this); + cancelDecompiledButton.setActionCommand("CANCELDECOMPILED"); + saveDecompiledButton.setVisible(false); + cancelDecompiledButton.setVisible(false); + JPanel panA = new JPanel(); panA.setLayout(new BorderLayout()); panA.add(new JScrollPane(decompiledEditor), BorderLayout.CENTER); panA.add(decLabel, BorderLayout.NORTH); + panA.add(decButtonsPan, BorderLayout.SOUTH); decLabel.setHorizontalAlignment(SwingConstants.CENTER); decLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); @@ -256,6 +289,9 @@ public class ActionPanel extends JPanel implements ActionListener { if (ignoreCarret) { return; } + if (editMode || editDecompiledMode) { + return; + } editor.getCaret().setVisible(true); int pos = editor.getCaretPosition(); Highlighting lastH = new Highlighting(0, 0, 0); @@ -282,7 +318,7 @@ public class ActionPanel extends JPanel implements ActionListener { if (ignoreCarret) { return; } - if (editMode) { + if (editMode || editDecompiledMode) { return; } decompiledEditor.getCaret().setVisible(true); @@ -336,6 +372,25 @@ public class ActionPanel extends JPanel implements ActionListener { editMode = val; } + public void setDecompiledEditMode(boolean val) { + if (val) { + decompiledEditor.setEditable(true); + saveDecompiledButton.setVisible(true); + editDecompiledButton.setVisible(false); + betaLabel.setVisible(false); + cancelDecompiledButton.setVisible(true); + decompiledEditor.getCaret().setVisible(true); + } else { + decompiledEditor.setEditable(false); + saveDecompiledButton.setVisible(false); + editDecompiledButton.setVisible(true); + betaLabel.setVisible(true); + cancelDecompiledButton.setVisible(false); + decompiledEditor.getCaret().setVisible(true); + } + editDecompiledMode = val; + } + @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("GRAPH")) { @@ -355,13 +410,36 @@ public class ActionPanel extends JPanel implements ActionListener { src.setActions(ASMParser.parse(0, src.getPos(), true, new ByteArrayInputStream(editor.getText().getBytes()), SWF.DEFAULT_VERSION), SWF.DEFAULT_VERSION); setSource(this.src); JOptionPane.showMessageDialog(this, "Code successfully saved"); + saveButton.setVisible(false); + cancelButton.setVisible(false); + editButton.setVisible(true); + editor.setEditable(false); + editMode = false; } catch (IOException ex) { } catch (ParseException ex) { JOptionPane.showMessageDialog(this, "" + ex.text + " on line " + ex.line, "Error", JOptionPane.ERROR_MESSAGE); } - saveButton.setVisible(false); - editButton.setVisible(true); - editor.setEditable(false); + } else if (e.getActionCommand().equals("EDITDECOMPILED")) { + setDecompiledEditMode(true); + } else if (e.getActionCommand().equals("CANCELDECOMPILED")) { + setDecompiledEditMode(false); + } else if (e.getActionCommand().equals("SAVEDECOMPILED")) { + try { + ActionScriptParser par = new ActionScriptParser(); + src.setActions(par.parse(decompiledEditor.getText()), SWF.DEFAULT_VERSION); + setSource(this.src); + JOptionPane.showMessageDialog(this, "Code successfully saved"); + saveDecompiledButton.setVisible(false); + cancelDecompiledButton.setVisible(false); + editDecompiledButton.setVisible(true); + betaLabel.setVisible(true); + decompiledEditor.setEditable(false); + editDecompiledMode = false; + } catch (IOException ex) { + } catch (ParseException ex) { + JOptionPane.showMessageDialog(this, "" + ex.text + " on line " + ex.line, "Error", JOptionPane.ERROR_MESSAGE); + } + } } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java index b0d4ed3ca..042e6a5a7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.flashlite.ActionFSCommand2; import com.jpexs.decompiler.flash.action.flashlite.ActionStrictMode; import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.special.ActionNop; +import com.jpexs.decompiler.flash.action.special.ActionStore; import com.jpexs.decompiler.flash.action.swf3.*; import com.jpexs.decompiler.flash.action.swf4.*; import com.jpexs.decompiler.flash.action.swf5.*; @@ -43,6 +44,9 @@ public class ASMParser { List list = new ArrayList(); Stack containers = new Stack(); HashMap containerPos = new HashMap(); + Stack stores = new Stack(); + Stack storeLengths = new Stack(); + int actualLen = 0; while (true) { ASMParsedSymbol symb = lexer.yylex(); if (symb.type == ASMParsedSymbol.TYPE_LABEL) { @@ -298,6 +302,25 @@ public class ASMParser { } if (a != null) { list.add(a); + if (!stores.isEmpty()) { + actualLen++; + if (actualLen == stores.peek().getStoreSize()) { + ActionStore st = stores.pop(); + st.setStore(list.subList(list.size() - actualLen, list.size())); + list = list.subList(0, list.size() - actualLen); + if (!stores.isEmpty()) { + actualLen = storeLengths.pop(); + } + } + } + if (a instanceof ActionStore) { + if (!stores.isEmpty()) { + storeLengths.push(actualLen); + } + stores.push((ActionStore) a); + actualLen = 0; + + } } } else if (symb.type == ASMParsedSymbol.TYPE_EOL) { } else if ((symb.type == ASMParsedSymbol.TYPE_BLOCK_END) || (symb.type == ASMParsedSymbol.TYPE_EOF)) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java index 95e416c4f..de6396a0a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java @@ -57,118 +57,120 @@ public final class ActionScriptLexer { * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = - "\11\7\1\3\1\2\1\0\1\3\1\1\16\7\4\0\1\14\1\70" - + "\1\16\1\0\1\6\1\77\1\73\1\30\1\60\1\61\1\5\1\75" - + "\1\67\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\66" - + "\1\12\1\15\1\13\1\72\1\100\4\22\1\25\1\22\21\6\1\21" - + "\2\6\1\64\1\27\1\65\1\76\1\6\1\0\1\34\1\31\1\36" - + "\1\45\1\33\1\46\1\57\1\51\1\43\1\6\1\35\1\47\1\54" - + "\1\41\1\40\1\52\1\6\1\32\1\37\1\42\1\44\1\55\1\50" - + "\1\56\1\53\1\6\1\62\1\74\1\63\1\71\41\7\2\0\4\6" - + "\4\0\1\6\2\0\1\7\7\0\1\6\4\0\1\6\5\0\27\6" - + "\1\0\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6" - + "\1\0\1\6\21\0\160\7\5\6\1\0\2\6\2\0\4\6\10\0" - + "\1\6\1\0\3\6\1\0\1\6\1\0\24\6\1\0\123\6\1\0" - + "\213\6\1\0\5\7\2\0\236\6\11\0\46\6\2\0\1\6\7\0" - + "\47\6\11\0\55\7\1\0\1\7\1\0\2\7\1\0\2\7\1\0" - + "\1\7\10\0\33\6\5\0\3\6\15\0\4\7\7\0\1\6\4\0" - + "\13\7\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6" - + "\10\7\1\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6" - + "\2\0\1\6\17\0\1\7\1\6\1\7\36\6\33\7\2\0\131\6" - + "\13\7\1\6\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0" - + "\26\6\4\7\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6" - + "\3\7\244\0\4\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6" - + "\2\7\2\0\12\7\1\0\7\6\1\0\7\6\1\0\3\7\1\0" - + "\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0\1\6\3\0" - + "\4\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0\3\7\1\6" - + "\10\0\1\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7\4\6" - + "\7\0\1\6\5\0\3\7\1\0\6\6\4\0\2\6\2\0\26\6" - + "\1\0\7\6\1\0\2\6\1\0\2\6\1\0\2\6\2\0\1\7" - + "\1\0\5\7\4\0\2\7\2\0\3\7\3\0\1\7\7\0\4\6" - + "\1\0\1\6\7\0\14\7\3\6\1\7\13\0\3\7\1\0\11\6" - + "\1\0\3\6\1\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6" - + "\2\0\1\7\1\6\10\7\1\0\3\7\1\0\3\7\2\0\1\6" - + "\17\0\2\6\2\7\2\0\12\7\1\0\1\6\17\0\3\7\1\0" - + "\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0" - + "\5\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0\3\7\10\0" - + "\2\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7\1\0\1\6" - + "\20\0\1\7\1\6\1\0\6\6\3\0\3\6\1\0\4\6\3\0" - + "\2\6\1\0\1\6\1\0\2\6\3\0\2\6\3\0\3\6\3\0" - + "\14\6\4\0\5\7\3\0\3\7\1\0\4\7\2\0\1\6\6\0" - + "\1\7\16\0\12\7\11\0\1\6\7\0\3\7\1\0\10\6\1\0" - + "\3\6\1\0\27\6\1\0\12\6\1\0\5\6\3\0\1\6\7\7" - + "\1\0\3\7\1\0\4\7\7\0\2\7\1\0\2\6\6\0\2\6" - + "\2\7\2\0\12\7\22\0\2\7\1\0\10\6\1\0\3\6\1\0" - + "\27\6\1\0\12\6\1\0\5\6\2\0\1\7\1\6\7\7\1\0" - + "\3\7\1\0\4\7\7\0\2\7\7\0\1\6\1\0\2\6\2\7" - + "\2\0\12\7\1\0\2\6\17\0\2\7\1\0\10\6\1\0\3\6" - + "\1\0\51\6\2\0\1\6\7\7\1\0\3\7\1\0\4\7\1\6" - + "\10\0\1\7\10\0\2\6\2\7\2\0\12\7\12\0\6\6\2\0" - + "\2\7\1\0\22\6\3\0\30\6\1\0\11\6\1\0\1\6\2\0" - + "\7\6\3\0\1\7\4\0\6\7\1\0\1\7\1\0\10\7\22\0" - + "\2\7\15\0\60\6\1\7\2\6\7\7\4\0\10\6\10\7\1\0" - + "\12\7\47\0\2\6\1\0\1\6\2\0\2\6\1\0\1\6\2\0" - + "\1\6\6\0\4\6\1\0\7\6\1\0\3\6\1\0\1\6\1\0" - + "\1\6\2\0\2\6\1\0\4\6\1\7\2\6\6\7\1\0\2\7" - + "\1\6\2\0\5\6\1\0\1\6\1\0\6\7\2\0\12\7\2\0" - + "\2\6\42\0\1\6\27\0\2\7\6\0\12\7\13\0\1\7\1\0" - + "\1\7\1\0\1\7\4\0\2\7\10\6\1\0\44\6\4\0\24\7" - + "\1\0\2\7\5\6\13\7\1\0\44\7\11\0\1\7\71\0\53\6" - + "\24\7\1\6\12\7\6\0\6\6\4\7\4\6\3\7\1\6\3\7" - + "\2\6\7\7\3\6\4\7\15\6\14\7\1\6\17\7\2\0\46\6" - + "\12\0\53\6\1\0\1\6\3\0\u0149\6\1\0\4\6\2\0\7\6" - + "\1\0\1\6\1\0\4\6\2\0\51\6\1\0\4\6\2\0\41\6" - + "\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0\17\6" - + "\1\0\71\6\1\0\4\6\2\0\103\6\2\0\3\7\40\0\20\6" - + "\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0\113\6" - + "\3\0\3\6\17\0\15\6\1\0\4\6\3\7\13\0\22\6\3\7" - + "\13\0\22\6\2\7\14\0\15\6\1\0\3\6\1\0\2\7\14\0" - + "\64\6\40\7\3\0\1\6\3\0\2\6\1\7\2\0\12\7\41\0" - + "\3\7\2\0\12\7\6\0\130\6\10\0\51\6\1\7\1\6\5\0" - + "\106\6\12\0\35\6\3\0\14\7\4\0\14\7\12\0\12\7\36\6" - + "\2\0\5\6\13\0\54\6\4\0\21\7\7\6\2\7\6\0\12\7" - + "\46\0\27\6\5\7\4\0\65\6\12\7\1\0\35\7\2\0\13\7" - + "\6\0\12\7\15\0\1\6\130\0\5\7\57\6\21\7\7\6\4\0" - + "\12\7\21\0\11\7\14\0\3\7\36\6\12\7\3\0\2\6\12\7" - + "\6\0\46\6\16\7\14\0\44\6\24\7\10\0\12\7\3\0\3\6" - + "\12\7\44\6\122\0\3\7\1\0\25\7\4\6\1\7\4\6\1\7" - + "\15\0\300\6\47\7\25\0\4\7\u0116\6\2\0\6\6\2\0\46\6" - + "\2\0\6\6\2\0\10\6\1\0\1\6\1\0\1\6\1\0\1\6" - + "\1\0\37\6\2\0\65\6\1\0\7\6\1\0\1\6\3\0\3\6" - + "\1\0\7\6\3\0\4\6\2\0\6\6\4\0\15\6\5\0\3\6" - + "\1\0\7\6\16\0\5\7\32\0\5\7\20\0\2\6\23\0\1\6" - + "\13\0\5\7\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6" - + "\3\0\32\6\26\0\15\7\4\0\1\7\3\0\14\7\21\0\1\6" - + "\4\0\1\6\2\0\12\6\1\0\1\6\3\0\5\6\6\0\1\6" - + "\1\0\1\6\1\0\1\6\1\0\4\6\1\0\13\6\2\0\4\6" - + "\5\0\5\6\4\0\1\6\21\0\51\6\u0a77\0\57\6\1\0\57\6" - + "\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\0" - + "\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\40\7\57\0\1\6\u01d5\0\3\6\31\0\11\6\6\7\1\0" - + "\5\6\2\0\5\6\4\0\126\6\2\0\2\7\2\0\3\6\1\0" - + "\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0\33\6\65\0" - + "\20\6\u0200\0\u19b6\6\112\0\u51cc\6\64\0\u048d\6\103\0\56\6\2\0" - + "\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\1\7\14\0\2\7" - + "\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0\147\6\2\0" - + "\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7\3\6\1\7" - + "\4\6\1\7\27\6\5\7\20\0\1\6\7\0\64\6\14\0\2\7" - + "\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0\1\6\4\0" - + "\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6\3\0\4\7" - + "\57\6\16\7\16\0\1\6\12\7\46\0\51\6\16\7\11\0\3\6" - + "\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0\1\6\1\7" - + "\4\0\60\6\1\7\1\6\3\7\2\6\2\7\5\6\2\7\1\6" - + "\1\7\1\6\30\0\3\6\43\0\6\6\2\0\6\6\2\0\6\6" - + "\11\0\7\6\1\0\7\6\221\0\43\6\10\7\1\0\2\7\2\0" - + "\12\7\6\0\u2ba4\6\14\0\27\6\4\0\61\6\u2104\0\u012e\6\2\0" - + "\76\6\2\0\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7" - + "\12\6\1\0\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0" - + "\2\6\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\50\0" - + "\15\6\3\0\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0" - + "\1\6\6\0\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0" - + "\12\7\7\0\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0" - + "\6\6\2\0\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0" - + "\2\6\22\0\3\7\4\0"; + "\11\7\1\3\1\2\1\0\1\3\1\1\16\7\4\0\1\14\1\106" + + "\1\16\1\0\1\6\1\115\1\111\1\30\1\76\1\77\1\5\1\113" + + "\1\105\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\104" + + "\1\12\1\15\1\13\1\110\1\116\1\61\1\22\1\71\1\72\1\25" + + "\1\63\1\6\1\65\3\6\1\67\1\70\1\75\1\6\1\74\1\66" + + "\1\6\1\62\1\64\1\60\1\73\1\6\1\21\2\6\1\102\1\27" + + "\1\103\1\114\1\6\1\0\1\34\1\31\1\36\1\45\1\33\1\46" + + "\1\57\1\51\1\43\1\6\1\35\1\47\1\54\1\41\1\40\1\52" + + "\1\6\1\32\1\37\1\42\1\44\1\55\1\50\1\56\1\53\1\6" + + "\1\100\1\112\1\101\1\107\41\7\2\0\4\6\4\0\1\6\2\0" + + "\1\7\7\0\1\6\4\0\1\6\5\0\27\6\1\0\37\6\1\0" + + "\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0\1\6\21\0" + + "\160\7\5\6\1\0\2\6\2\0\4\6\10\0\1\6\1\0\3\6" + + "\1\0\1\6\1\0\24\6\1\0\123\6\1\0\213\6\1\0\5\7" + + "\2\0\236\6\11\0\46\6\2\0\1\6\7\0\47\6\11\0\55\7" + + "\1\0\1\7\1\0\2\7\1\0\2\7\1\0\1\7\10\0\33\6" + + "\5\0\3\6\15\0\4\7\7\0\1\6\4\0\13\7\5\0\53\6" + + "\37\7\4\0\2\6\1\7\143\6\1\0\1\6\10\7\1\0\6\7" + + "\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\17\0" + + "\1\7\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6\16\0" + + "\12\7\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7\1\6" + + "\11\7\1\6\3\7\1\6\5\7\22\0\31\6\3\7\244\0\4\7" + + "\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0\12\7" + + "\1\0\7\6\1\0\7\6\1\0\3\7\1\0\10\6\2\0\2\6" + + "\2\0\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7" + + "\1\6\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0" + + "\2\6\1\0\3\6\2\7\2\0\12\7\4\6\7\0\1\6\5\0" + + "\3\7\1\0\6\6\4\0\2\6\2\0\26\6\1\0\7\6\1\0" + + "\2\6\1\0\2\6\1\0\2\6\2\0\1\7\1\0\5\7\4\0" + + "\2\7\2\0\3\7\3\0\1\7\7\0\4\6\1\0\1\6\7\0" + + "\14\7\3\6\1\7\13\0\3\7\1\0\11\6\1\0\3\6\1\0" + + "\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6" + + "\10\7\1\0\3\7\1\0\3\7\2\0\1\6\17\0\2\6\2\7" + + "\2\0\12\7\1\0\1\6\17\0\3\7\1\0\10\6\2\0\2\6" + + "\2\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7" + + "\1\6\7\7\2\0\2\7\2\0\3\7\10\0\2\7\4\0\2\6" + + "\1\0\3\6\2\7\2\0\12\7\1\0\1\6\20\0\1\7\1\6" + + "\1\0\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0\1\6" + + "\1\0\2\6\3\0\2\6\3\0\3\6\3\0\14\6\4\0\5\7" + + "\3\0\3\7\1\0\4\7\2\0\1\6\6\0\1\7\16\0\12\7" + + "\11\0\1\6\7\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6" + + "\1\0\12\6\1\0\5\6\3\0\1\6\7\7\1\0\3\7\1\0" + + "\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0\12\7" + + "\22\0\2\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6" + + "\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0\4\7" + + "\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7\1\0" + + "\2\6\17\0\2\7\1\0\10\6\1\0\3\6\1\0\51\6\2\0" + + "\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7\10\0" + + "\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0\22\6" + + "\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0\1\7" + + "\4\0\6\7\1\0\1\7\1\0\10\7\22\0\2\7\15\0\60\6" + + "\1\7\2\6\7\7\4\0\10\6\10\7\1\0\12\7\47\0\2\6" + + "\1\0\1\6\2\0\2\6\1\0\1\6\2\0\1\6\6\0\4\6" + + "\1\0\7\6\1\0\3\6\1\0\1\6\1\0\1\6\2\0\2\6" + + "\1\0\4\6\1\7\2\6\6\7\1\0\2\7\1\6\2\0\5\6" + + "\1\0\1\6\1\0\6\7\2\0\12\7\2\0\2\6\42\0\1\6" + + "\27\0\2\7\6\0\12\7\13\0\1\7\1\0\1\7\1\0\1\7" + + "\4\0\2\7\10\6\1\0\44\6\4\0\24\7\1\0\2\7\5\6" + + "\13\7\1\0\44\7\11\0\1\7\71\0\53\6\24\7\1\6\12\7" + + "\6\0\6\6\4\7\4\6\3\7\1\6\3\7\2\6\7\7\3\6" + + "\4\7\15\6\14\7\1\6\17\7\2\0\46\6\12\0\53\6\1\0" + + "\1\6\3\0\u0149\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0" + + "\4\6\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6\2\0" + + "\7\6\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6\1\0" + + "\4\6\2\0\103\6\2\0\3\7\40\0\20\6\20\0\125\6\14\0" + + "\u026c\6\2\0\21\6\1\0\32\6\5\0\113\6\3\0\3\6\17\0" + + "\15\6\1\0\4\6\3\7\13\0\22\6\3\7\13\0\22\6\2\7" + + "\14\0\15\6\1\0\3\6\1\0\2\7\14\0\64\6\40\7\3\0" + + "\1\6\3\0\2\6\1\7\2\0\12\7\41\0\3\7\2\0\12\7" + + "\6\0\130\6\10\0\51\6\1\7\1\6\5\0\106\6\12\0\35\6" + + "\3\0\14\7\4\0\14\7\12\0\12\7\36\6\2\0\5\6\13\0" + + "\54\6\4\0\21\7\7\6\2\7\6\0\12\7\46\0\27\6\5\7" + + "\4\0\65\6\12\7\1\0\35\7\2\0\13\7\6\0\12\7\15\0" + + "\1\6\130\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0\11\7" + + "\14\0\3\7\36\6\12\7\3\0\2\6\12\7\6\0\46\6\16\7" + + "\14\0\44\6\24\7\10\0\12\7\3\0\3\6\12\7\44\6\122\0" + + "\3\7\1\0\25\7\4\6\1\7\4\6\1\7\15\0\300\6\47\7" + + "\25\0\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0" + + "\10\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0" + + "\65\6\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0" + + "\4\6\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6\16\0" + + "\5\7\32\0\5\7\20\0\2\6\23\0\1\6\13\0\5\7\5\0" + + "\6\7\1\0\1\6\15\0\1\6\20\0\15\6\3\0\32\6\26\0" + + "\15\7\4\0\1\7\3\0\14\7\21\0\1\6\4\0\1\6\2\0" + + "\12\6\1\0\1\6\3\0\5\6\6\0\1\6\1\0\1\6\1\0" + + "\1\6\1\0\4\6\1\0\13\6\2\0\4\6\5\0\5\6\4\0" + + "\1\6\21\0\51\6\u0a77\0\57\6\1\0\57\6\1\0\205\6\6\0" + + "\4\6\3\7\16\0\46\6\12\0\66\6\11\0\1\6\17\0\1\7" + + "\27\6\11\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0" + + "\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\40\7\57\0" + + "\1\6\u01d5\0\3\6\31\0\11\6\6\7\1\0\5\6\2\0\5\6" + + "\4\0\126\6\2\0\2\7\2\0\3\6\1\0\132\6\1\0\4\6" + + "\5\0\51\6\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0\u19b6\6" + + "\112\0\u51cc\6\64\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0\20\6" + + "\12\7\2\6\24\0\57\6\1\7\14\0\2\7\1\0\31\6\10\0" + + "\120\6\2\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0\2\6" + + "\16\0\12\6\120\0\10\6\1\7\3\6\1\7\4\6\1\7\27\6" + + "\5\7\20\0\1\6\7\0\64\6\14\0\2\7\62\6\21\7\13\0" + + "\12\7\6\0\22\7\6\6\3\0\1\6\4\0\12\7\34\6\10\7" + + "\2\0\27\6\15\7\14\0\35\6\3\0\4\7\57\6\16\7\16\0" + + "\1\6\12\7\46\0\51\6\16\7\11\0\3\6\1\7\10\6\2\7" + + "\2\0\12\7\6\0\27\6\3\0\1\6\1\7\4\0\60\6\1\7" + + "\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6\30\0" + + "\3\6\43\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0" + + "\7\6\221\0\43\6\10\7\1\0\2\7\2\0\12\7\6\0\u2ba4\6" + + "\14\0\27\6\4\0\61\6\u2104\0\u012e\6\2\0\76\6\2\0\152\6" + + "\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6\1\0\15\6" + + "\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0\154\6" + + "\41\0\u016b\6\22\0\100\6\2\0\66\6\50\0\15\6\3\0\20\7" + + "\20\0\7\7\14\0\2\6\30\0\3\6\31\0\1\6\6\0\5\6" + + "\1\0\207\6\2\0\1\7\4\0\1\6\13\0\12\7\7\0\32\6" + + "\4\0\1\6\1\0\32\6\13\0\131\6\3\0\6\6\2\0\6\6" + + "\2\0\6\6\2\0\3\6\3\0\2\6\3\0\2\6\22\0\3\7" + + "\4\0"; /** * Translates characters to character classes */ @@ -180,34 +182,43 @@ public final class ActionScriptLexer { private static final String ZZ_ACTION_PACKED_0 = "\5\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" + "\1\10\1\11\1\12\1\13\1\14\2\15\1\16\1\17" - + "\21\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26" + + "\25\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26" + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36" + "\1\37\1\40\1\41\2\42\1\43\1\1\1\41\2\44" + "\1\41\1\1\1\45\3\41\1\3\1\0\1\46\1\47" + "\1\50\2\0\1\51\1\0\1\52\1\53\1\54\1\55" + "\1\56\1\57\1\51\1\0\2\57\1\0\1\60\1\61" - + "\5\6\1\62\16\6\1\63\1\64\1\65\3\6\1\66" - + "\15\6\1\67\1\70\1\71\1\72\1\73\1\74\1\75" + + "\6\6\1\62\23\6\1\63\1\64\1\65\3\6\1\66" + + "\25\6\1\67\1\70\1\71\1\72\1\73\1\74\1\75" + "\1\76\1\77\1\100\1\101\2\102\1\103\1\104\1\105" + "\1\106\1\107\1\110\1\111\6\0\2\3\2\0\1\112" + "\3\0\1\113\1\0\1\114\1\115\1\116\1\117\2\120" - + "\1\57\1\51\1\0\11\6\1\121\4\6\1\122\3\6" - + "\1\123\6\6\1\124\4\6\1\125\10\6\1\126\1\6" - + "\1\127\1\130\1\102\7\0\1\131\5\0\1\132\1\120" - + "\1\57\2\6\1\133\1\134\1\6\1\135\11\6\1\136" - + "\1\137\1\6\1\140\13\6\1\141\5\6\1\142\1\41" - + "\1\0\1\143\12\0\1\120\1\57\1\144\2\6\1\145" - + "\1\146\1\6\1\147\1\6\1\150\3\6\1\151\10\6" - + "\1\152\2\6\1\153\4\6\10\0\1\120\1\57\1\154" - + "\2\6\1\155\1\156\2\6\1\157\3\6\1\160\2\6" - + "\1\161\6\6\1\162\2\0\1\113\1\120\1\57\1\163" - + "\7\6\1\164\1\165\1\166\2\6\1\167\1\170\1\41" - + "\1\120\1\57\1\171\1\172\2\6\1\173\2\6\1\174" - + "\1\6\1\120\1\57\1\175\1\6\1\176\1\6\1\177" - + "\1\120\1\57\1\200\1\201\6\57"; + + "\1\57\1\51\1\0\13\6\1\121\1\122\5\6\1\123" + + "\1\6\1\124\5\6\1\125\7\6\1\126\2\6\1\127" + + "\5\6\1\130\20\6\1\131\1\6\1\132\3\6\1\133" + + "\1\102\7\0\1\134\5\0\1\135\1\120\1\57\4\6" + + "\1\136\1\137\1\6\1\140\6\6\1\141\6\6\1\142" + + "\1\6\1\143\4\6\1\144\17\6\1\145\6\6\1\146" + + "\4\6\1\147\5\6\1\41\1\0\1\150\12\0\1\120" + + "\1\57\1\151\4\6\1\152\1\153\1\6\1\154\5\6" + + "\1\155\4\6\1\156\3\6\1\157\12\6\1\160\5\6" + + "\1\161\5\6\1\162\1\6\1\163\6\6\10\0\1\120" + + "\1\57\1\164\1\6\1\165\3\6\1\166\2\6\1\167" + + "\1\170\6\6\1\171\4\6\1\172\2\6\1\173\4\6" + + "\1\174\6\6\1\175\2\6\1\176\2\6\1\177\1\200" + + "\2\0\1\113\1\120\1\57\1\6\1\201\17\6\1\202" + + "\1\6\1\203\1\204\5\6\1\205\1\206\4\6\1\41" + + "\1\120\1\57\1\6\1\207\2\6\1\210\1\211\6\6" + + "\1\212\4\6\1\213\5\6\1\214\1\215\2\6\1\120" + + "\1\57\1\6\1\216\1\6\1\217\1\220\4\6\1\221" + + "\3\6\1\222\1\6\1\223\1\224\3\6\1\120\1\57" + + "\2\6\1\225\1\226\1\6\1\227\1\6\1\230\5\6" + + "\1\57\6\6\1\231\1\232\1\233\1\57\6\6\1\57" + + "\1\6\1\234\1\6\1\235\1\6\1\236\1\57\3\6" + + "\1\57\1\237\2\6\1\57\2\6\1\240\1\6\1\241"; private static int[] zzUnpackAction() { - int[] result = new int[399]; + int[] result = new int[608]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -231,59 +242,85 @@ public final class ActionScriptLexer { */ private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\101\0\202\0\303\0\u0104\0\u0145\0\u0186\0\u0145" - + "\0\u01c7\0\u0208\0\u0249\0\u028a\0\u02cb\0\u030c\0\u034d\0\u038e" - + "\0\u03cf\0\u0145\0\u0410\0\u0451\0\u0492\0\u0145\0\u04d3\0\u0514" - + "\0\u0555\0\u0596\0\u05d7\0\u0618\0\u0659\0\u069a\0\u06db\0\u071c" - + "\0\u075d\0\u079e\0\u07df\0\u0820\0\u0861\0\u08a2\0\u08e3\0\u0145" - + "\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0924" - + "\0\u0145\0\u0145\0\u0965\0\u09a6\0\u09e7\0\u0a28\0\u0a69\0\u0145" - + "\0\u0aaa\0\u0aeb\0\u0145\0\u0145\0\u0b2c\0\u0b6d\0\u0bae\0\u0145" - + "\0\u0bef\0\u0c30\0\u0145\0\u0c71\0\u0145\0\u0cb2\0\u0cf3\0\u0d34" - + "\0\u0145\0\u0145\0\u0145\0\u0d75\0\u0db6\0\u0df7\0\u0e38\0\u0e79" - + "\0\u0145\0\u0eba\0\u0145\0\u0efb\0\u0f3c\0\u0f7d\0\u0fbe\0\u0fff" - + "\0\u1040\0\u1081\0\u0145\0\u0145\0\u10c2\0\u1103\0\u1144\0\u1185" - + "\0\u11c6\0\u028a\0\u1207\0\u1248\0\u1289\0\u12ca\0\u130b\0\u134c" - + "\0\u138d\0\u13ce\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513\0\u1554" - + "\0\u028a\0\u1595\0\u028a\0\u15d6\0\u1617\0\u1658\0\u028a\0\u1699" - + "\0\u16da\0\u171b\0\u175c\0\u179d\0\u17de\0\u181f\0\u1860\0\u18a1" - + "\0\u18e2\0\u1923\0\u1964\0\u19a5\0\u19e6\0\u0145\0\u0145\0\u0145" - + "\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u1a27" - + "\0\u1a68\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145" - + "\0\u0c30\0\u1aa9\0\u1aea\0\u1b2b\0\u1b6c\0\u1bad\0\u1bee\0\u0145" - + "\0\u1c2f\0\u1c70\0\u0145\0\u1cb1\0\u1cf2\0\u1d33\0\u0145\0\u1d74" - + "\0\u0145\0\u1db5\0\u0145\0\u0145\0\u0fbe\0\u1df6\0\u1e37\0\u1e78" - + "\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\u1f7c\0\u1fbd\0\u1ffe\0\u203f" - + "\0\u2080\0\u20c1\0\u028a\0\u2102\0\u2143\0\u2184\0\u21c5\0\u028a" - + "\0\u2206\0\u2247\0\u2288\0\u028a\0\u22c9\0\u230a\0\u234b\0\u238c" - + "\0\u23cd\0\u240e\0\u028a\0\u244f\0\u2490\0\u24d1\0\u2512\0\u028a" - + "\0\u2553\0\u2594\0\u25d5\0\u2616\0\u2657\0\u2698\0\u26d9\0\u271a" - + "\0\u028a\0\u275b\0\u028a\0\u0145\0\u0145\0\u279c\0\u27dd\0\u281e" - + "\0\u285f\0\u28a0\0\u28e1\0\u2922\0\u0145\0\u2963\0\u29a4\0\u29e5" - + "\0\u2a26\0\u2a67\0\u0145\0\u2aa8\0\u2ae9\0\u2b2a\0\u2b6b\0\u028a" - + "\0\u028a\0\u2bac\0\u028a\0\u2bed\0\u2c2e\0\u2c6f\0\u2cb0\0\u2cf1" - + "\0\u2d32\0\u2d73\0\u2db4\0\u2df5\0\u028a\0\u028a\0\u2e36\0\u028a" - + "\0\u2e77\0\u2eb8\0\u2ef9\0\u2f3a\0\u2f7b\0\u2fbc\0\u2ffd\0\u303e" - + "\0\u307f\0\u30c0\0\u3101\0\u028a\0\u3142\0\u3183\0\u31c4\0\u3205" - + "\0\u3246\0\u028a\0\u3287\0\u32c8\0\u0145\0\u3309\0\u334a\0\u338b" - + "\0\u33cc\0\u340d\0\u344e\0\u348f\0\u34d0\0\u3511\0\u3552\0\u3593" - + "\0\u35d4\0\u028a\0\u3615\0\u3656\0\u028a\0\u028a\0\u3697\0\u028a" - + "\0\u36d8\0\u028a\0\u3719\0\u375a\0\u379b\0\u028a\0\u37dc\0\u381d" - + "\0\u385e\0\u389f\0\u38e0\0\u3921\0\u3962\0\u39a3\0\u028a\0\u39e4" - + "\0\u3a25\0\u028a\0\u3a66\0\u3aa7\0\u3ae8\0\u3b29\0\u3b6a\0\u3bab" - + "\0\u3bec\0\u3c2d\0\u3c6e\0\u3caf\0\u3cf0\0\u3d31\0\u3d72\0\u3db3" - + "\0\u028a\0\u3df4\0\u3e35\0\u028a\0\u028a\0\u3e76\0\u3eb7\0\u028a" - + "\0\u3ef8\0\u3f39\0\u3f7a\0\u028a\0\u3fbb\0\u3ffc\0\u028a\0\u403d" - + "\0\u407e\0\u40bf\0\u4100\0\u4141\0\u4182\0\u028a\0\u41c3\0\u4204" - + "\0\u348f\0\u4245\0\u4286\0\u028a\0\u42c7\0\u4308\0\u4349\0\u438a" - + "\0\u43cb\0\u440c\0\u444d\0\u028a\0\u028a\0\u028a\0\u448e\0\u44cf" - + "\0\u028a\0\u028a\0\u3bec\0\u4510\0\u4551\0\u028a\0\u028a\0\u4592" - + "\0\u45d3\0\u028a\0\u4614\0\u4655\0\u028a\0\u4696\0\u46d7\0\u4718" - + "\0\u028a\0\u4759\0\u028a\0\u479a\0\u028a\0\u0145\0\u47db\0\u028a" - + "\0\u028a\0\u481c\0\u485d\0\u489e\0\u48df\0\u4920\0\u0f7d"; + "\0\0\0\117\0\236\0\355\0\u013c\0\u018b\0\u01da\0\u018b" + + "\0\u0229\0\u0278\0\u02c7\0\u0316\0\u0365\0\u03b4\0\u0403\0\u0452" + + "\0\u04a1\0\u018b\0\u04f0\0\u053f\0\u058e\0\u018b\0\u05dd\0\u062c" + + "\0\u067b\0\u06ca\0\u0719\0\u0768\0\u07b7\0\u0806\0\u0855\0\u08a4" + + "\0\u08f3\0\u0942\0\u0991\0\u09e0\0\u0a2f\0\u0a7e\0\u0acd\0\u0b1c" + + "\0\u0b6b\0\u0bba\0\u0c09\0\u018b\0\u018b\0\u018b\0\u018b\0\u018b" + + "\0\u018b\0\u018b\0\u018b\0\u0c58\0\u018b\0\u018b\0\u0ca7\0\u0cf6" + + "\0\u0d45\0\u0d94\0\u0de3\0\u018b\0\u0e32\0\u0e81\0\u018b\0\u018b" + + "\0\u0ed0\0\u0f1f\0\u0f6e\0\u018b\0\u0fbd\0\u100c\0\u018b\0\u105b" + + "\0\u018b\0\u10aa\0\u10f9\0\u1148\0\u018b\0\u018b\0\u018b\0\u1197" + + "\0\u11e6\0\u1235\0\u1284\0\u12d3\0\u018b\0\u1322\0\u018b\0\u1371" + + "\0\u13c0\0\u140f\0\u145e\0\u14ad\0\u14fc\0\u154b\0\u018b\0\u018b" + + "\0\u159a\0\u15e9\0\u1638\0\u1687\0\u16d6\0\u1725\0\u0316\0\u1774" + + "\0\u17c3\0\u1812\0\u1861\0\u18b0\0\u18ff\0\u194e\0\u199d\0\u19ec" + + "\0\u1a3b\0\u1a8a\0\u1ad9\0\u1b28\0\u1b77\0\u1bc6\0\u1c15\0\u1c64" + + "\0\u1cb3\0\u1d02\0\u0316\0\u1d51\0\u1da0\0\u1def\0\u1e3e\0\u1e8d" + + "\0\u0316\0\u1edc\0\u1f2b\0\u1f7a\0\u1fc9\0\u2018\0\u2067\0\u20b6" + + "\0\u2105\0\u2154\0\u21a3\0\u21f2\0\u2241\0\u2290\0\u22df\0\u232e" + + "\0\u237d\0\u23cc\0\u241b\0\u246a\0\u24b9\0\u2508\0\u2557\0\u018b" + + "\0\u018b\0\u018b\0\u018b\0\u018b\0\u018b\0\u018b\0\u018b\0\u018b" + + "\0\u018b\0\u25a6\0\u25f5\0\u018b\0\u018b\0\u018b\0\u018b\0\u018b" + + "\0\u018b\0\u018b\0\u100c\0\u2644\0\u2693\0\u26e2\0\u2731\0\u2780" + + "\0\u27cf\0\u018b\0\u281e\0\u286d\0\u018b\0\u28bc\0\u290b\0\u295a" + + "\0\u018b\0\u29a9\0\u018b\0\u29f8\0\u018b\0\u018b\0\u145e\0\u2a47" + + "\0\u2a96\0\u2ae5\0\u2ae5\0\u2b34\0\u2b83\0\u2bd2\0\u2c21\0\u2c70" + + "\0\u2cbf\0\u2d0e\0\u2d5d\0\u2dac\0\u2dfb\0\u2e4a\0\u0316\0\u0316" + + "\0\u2e99\0\u2ee8\0\u2f37\0\u2f86\0\u2fd5\0\u0316\0\u3024\0\u0316" + + "\0\u3073\0\u30c2\0\u3111\0\u3160\0\u31af\0\u0316\0\u31fe\0\u324d" + + "\0\u329c\0\u32eb\0\u333a\0\u3389\0\u33d8\0\u3427\0\u3476\0\u34c5" + + "\0\u0316\0\u3514\0\u3563\0\u35b2\0\u3601\0\u3650\0\u0316\0\u369f" + + "\0\u36ee\0\u373d\0\u378c\0\u37db\0\u382a\0\u3879\0\u38c8\0\u3917" + + "\0\u3966\0\u39b5\0\u3a04\0\u3a53\0\u3aa2\0\u3af1\0\u3b40\0\u0316" + + "\0\u3b8f\0\u3bde\0\u3c2d\0\u3c7c\0\u3ccb\0\u018b\0\u018b\0\u3d1a" + + "\0\u3d69\0\u3db8\0\u3e07\0\u3e56\0\u3ea5\0\u3ef4\0\u018b\0\u3f43" + + "\0\u3f92\0\u3fe1\0\u4030\0\u407f\0\u018b\0\u40ce\0\u411d\0\u416c" + + "\0\u41bb\0\u420a\0\u4259\0\u0316\0\u0316\0\u42a8\0\u0316\0\u42f7" + + "\0\u4346\0\u4395\0\u43e4\0\u4433\0\u4482\0\u44d1\0\u4520\0\u456f" + + "\0\u45be\0\u460d\0\u465c\0\u46ab\0\u0316\0\u46fa\0\u0316\0\u4749" + + "\0\u4798\0\u47e7\0\u4836\0\u0316\0\u4885\0\u48d4\0\u4923\0\u4972" + + "\0\u49c1\0\u4a10\0\u4a5f\0\u4aae\0\u4afd\0\u4b4c\0\u4b9b\0\u4bea" + + "\0\u4c39\0\u4c88\0\u4cd7\0\u0316\0\u4d26\0\u4d75\0\u4dc4\0\u4e13" + + "\0\u4e62\0\u4eb1\0\u0316\0\u4f00\0\u4f4f\0\u4f9e\0\u4fed\0\u0316" + + "\0\u503c\0\u508b\0\u50da\0\u5129\0\u5178\0\u51c7\0\u5216\0\u018b" + + "\0\u5265\0\u52b4\0\u5303\0\u5352\0\u53a1\0\u53f0\0\u543f\0\u548e" + + "\0\u54dd\0\u552c\0\u557b\0\u55ca\0\u0316\0\u5619\0\u5668\0\u56b7" + + "\0\u5706\0\u0316\0\u0316\0\u5755\0\u0316\0\u57a4\0\u57f3\0\u5842" + + "\0\u5891\0\u58e0\0\u0316\0\u592f\0\u597e\0\u59cd\0\u5a1c\0\u0316" + + "\0\u5a6b\0\u5aba\0\u5b09\0\u0316\0\u5b58\0\u5ba7\0\u5bf6\0\u5c45" + + "\0\u5c94\0\u5ce3\0\u5d32\0\u5d81\0\u5dd0\0\u5e1f\0\u0316\0\u5e6e" + + "\0\u5ebd\0\u5f0c\0\u5f5b\0\u5faa\0\u0316\0\u5ff9\0\u6048\0\u6097" + + "\0\u60e6\0\u6135\0\u0316\0\u6184\0\u0316\0\u61d3\0\u6222\0\u6271" + + "\0\u62c0\0\u630f\0\u635e\0\u63ad\0\u63fc\0\u644b\0\u649a\0\u64e9" + + "\0\u6538\0\u6587\0\u65d6\0\u6625\0\u6674\0\u0316\0\u66c3\0\u0316" + + "\0\u6712\0\u6761\0\u67b0\0\u0316\0\u67ff\0\u684e\0\u0316\0\u0316" + + "\0\u689d\0\u68ec\0\u693b\0\u698a\0\u69d9\0\u6a28\0\u0316\0\u6a77" + + "\0\u6ac6\0\u6b15\0\u6b64\0\u0316\0\u6bb3\0\u6c02\0\u0316\0\u6c51" + + "\0\u6ca0\0\u6cef\0\u6d3e\0\u0316\0\u6d8d\0\u6ddc\0\u6e2b\0\u6e7a" + + "\0\u6ec9\0\u6f18\0\u0316\0\u6f67\0\u6fb6\0\u0316\0\u7005\0\u7054" + + "\0\u0316\0\u0316\0\u70a3\0\u70f2\0\u543f\0\u7141\0\u7190\0\u71df" + + "\0\u0316\0\u722e\0\u727d\0\u72cc\0\u731b\0\u736a\0\u73b9\0\u7408" + + "\0\u7457\0\u74a6\0\u74f5\0\u7544\0\u7593\0\u75e2\0\u7631\0\u7680" + + "\0\u0316\0\u76cf\0\u0316\0\u0316\0\u771e\0\u776d\0\u77bc\0\u780b" + + "\0\u785a\0\u0316\0\u0316\0\u78a9\0\u78f8\0\u7947\0\u7996\0\u644b" + + "\0\u79e5\0\u7a34\0\u7a83\0\u0316\0\u7ad2\0\u7b21\0\u0316\0\u0316" + + "\0\u7b70\0\u7bbf\0\u7c0e\0\u7c5d\0\u7cac\0\u7cfb\0\u0316\0\u7d4a" + + "\0\u7d99\0\u7de8\0\u7e37\0\u0316\0\u7e86\0\u7ed5\0\u7f24\0\u7f73" + + "\0\u7fc2\0\u0316\0\u0316\0\u8011\0\u8060\0\u80af\0\u80fe\0\u814d" + + "\0\u0316\0\u819c\0\u0316\0\u0316\0\u81eb\0\u823a\0\u8289\0\u82d8" + + "\0\u0316\0\u8327\0\u8376\0\u83c5\0\u0316\0\u8414\0\u0316\0\u0316" + + "\0\u8463\0\u84b2\0\u8501\0\u018b\0\u8550\0\u859f\0\u85ee\0\u0316" + + "\0\u0316\0\u863d\0\u0316\0\u868c\0\u0316\0\u86db\0\u872a\0\u8779" + + "\0\u87c8\0\u8817\0\u8866\0\u88b5\0\u8904\0\u8953\0\u89a2\0\u89f1" + + "\0\u8a40\0\u0316\0\u0316\0\u0316\0\u8a8f\0\u8ade\0\u8b2d\0\u8b7c" + + "\0\u8bcb\0\u8c1a\0\u8c69\0\u8cb8\0\u8d07\0\u0316\0\u8d56\0\u0316" + + "\0\u8da5\0\u0316\0\u8df4\0\u8e43\0\u8e92\0\u8ee1\0\u8f30\0\u0316" + + "\0\u8f7f\0\u8fce\0\u140f\0\u901d\0\u906c\0\u0316\0\u90bb\0\u0316"; private static int[] zzUnpackRowMap() { - int[] result = new int[399]; + int[] result = new int[608]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -308,304 +345,497 @@ public final class ActionScriptLexer { + "\1\15\1\16\1\17\1\20\1\11\1\21\1\22\1\23" + "\1\24\2\14\2\24\1\14\1\25\1\6\1\26\1\27" + "\1\30\1\31\1\32\1\14\1\33\1\34\1\35\1\36" - + "\1\37\1\40\1\41\1\42\1\43\1\14\1\44\1\14" - + "\1\45\2\14\1\46\1\14\1\47\1\50\1\51\1\52" - + "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62" - + "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72" - + "\1\73\13\71\1\74\10\71\1\75\51\71\1\76\1\72" - + "\1\73\24\76\1\75\1\74\50\76\1\6\1\77\1\100" - + "\1\101\2\6\1\102\4\6\1\103\1\104\4\6\2\102" - + "\2\6\1\102\3\6\27\102\21\6\1\105\1\77\1\100" - + "\7\105\1\106\66\105\103\0\1\10\101\0\1\11\10\0" - + "\1\11\70\0\1\107\1\110\7\0\1\111\100\0\1\112" - + "\71\0\2\14\7\0\7\14\3\0\27\14\31\0\1\113" - + "\101\0\1\114\1\115\4\0\2\116\2\0\2\116\62\0" - + "\1\117\3\0\1\120\2\0\1\121\3\0\2\117\2\0" - + "\1\117\3\0\27\117\34\0\1\122\1\0\1\123\100\0" - + "\1\124\74\0\1\116\5\0\1\125\1\126\1\127\1\0" - + "\1\130\1\131\1\132\5\0\1\132\22\0\1\127\33\0" - + "\1\116\5\0\2\24\2\0\2\24\1\132\5\0\1\132" - + "\62\0\1\133\10\0\1\134\60\0\2\14\7\0\7\14" - + "\3\0\1\14\1\135\25\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\136\24\14\27\0\2\14\7\0\7\14" - + "\3\0\3\14\1\137\12\14\1\140\6\14\1\141\1\14" - + "\27\0\2\14\7\0\7\14\3\0\6\14\1\142\20\14" - + "\27\0\2\14\7\0\7\14\3\0\3\14\1\143\3\14" - + "\1\144\6\14\1\145\10\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\146\6\14\1\147\1\14\1\150\3\14" - + "\1\151\7\14\27\0\2\14\7\0\7\14\3\0\24\14" - + "\1\152\2\14\27\0\2\14\7\0\7\14\3\0\2\14" - + "\1\153\1\154\7\14\1\155\13\14\27\0\2\14\7\0" - + "\7\14\3\0\1\14\1\156\16\14\1\157\1\14\1\160" - + "\4\14\27\0\2\14\7\0\7\14\3\0\6\14\1\161" - + "\1\14\1\162\4\14\1\163\5\14\1\164\3\14\27\0" - + "\2\14\7\0\7\14\3\0\6\14\1\165\20\14\27\0" - + "\2\14\7\0\7\14\3\0\2\14\1\166\4\14\1\167" - + "\12\14\1\170\4\14\27\0\2\14\7\0\7\14\3\0" - + "\3\14\1\171\3\14\1\172\2\14\1\173\1\174\13\14" - + "\27\0\2\14\7\0\7\14\3\0\12\14\1\175\5\14" - + "\1\176\6\14\27\0\2\14\7\0\7\14\3\0\1\14" - + "\1\177\1\14\1\200\7\14\1\201\13\14\27\0\2\14" - + "\7\0\7\14\3\0\3\14\1\202\3\14\1\203\17\14" - + "\27\0\2\14\7\0\7\14\3\0\2\14\1\204\24\14" - + "\36\0\1\205\100\0\1\206\55\0\1\207\22\0\1\210" - + "\56\0\1\211\21\0\1\212\57\0\1\213\20\0\1\214" - + "\100\0\1\215\63\0\1\71\2\0\13\71\1\0\10\71" - + "\1\0\51\71\2\0\1\73\76\0\2\216\1\0\13\216" - + "\1\217\1\220\3\216\1\220\1\221\2\216\1\222\1\223" - + "\1\224\1\225\6\216\1\226\1\227\3\216\1\230\32\216" - + "\1\76\2\0\24\76\2\0\50\76\2\0\1\100\101\0" - + "\1\101\10\0\1\101\72\0\2\231\1\232\3\0\1\233" - + "\1\234\1\0\7\231\3\0\27\231\24\0\1\101\2\0" - + "\1\231\5\0\1\104\4\0\2\231\2\0\1\231\3\0" - + "\27\231\25\0\1\235\1\0\1\236\12\0\2\236\2\0" - + "\1\236\3\0\27\236\21\0\1\107\1\237\1\240\76\107" - + "\5\241\1\242\73\241\11\0\1\243\75\0\1\244\12\0" - + "\2\244\2\0\1\244\3\0\27\244\40\0\2\116\2\0" - + "\2\116\1\132\5\0\1\132\53\0\1\245\1\117\1\246" - + "\2\0\1\247\1\250\2\0\2\117\2\245\2\117\1\245" - + "\3\0\27\245\36\0\1\251\76\0\1\252\1\0\1\253" - + "\100\0\1\254\74\0\1\116\5\0\1\125\1\126\2\0" - + "\1\130\1\131\1\132\5\0\1\132\56\0\1\116\5\0" - + "\2\126\2\0\2\126\1\132\5\0\1\132\64\0\1\255" - + "\1\256\1\0\4\256\3\0\1\256\1\0\2\256\1\0" - + "\1\256\6\0\2\256\43\0\1\116\5\0\1\131\1\126" - + "\2\0\2\131\1\132\5\0\1\132\56\0\1\116\5\0" - + "\1\257\1\126\2\0\2\257\1\132\5\0\1\132\64\0" - + "\2\260\2\0\2\260\1\0\1\261\46\0\1\261\11\0" - + "\2\14\7\0\7\14\3\0\2\14\1\262\24\14\27\0" - + "\2\14\7\0\7\14\3\0\11\14\1\263\15\14\27\0" - + "\2\14\7\0\7\14\3\0\5\14\1\264\21\14\27\0" - + "\2\14\7\0\7\14\3\0\6\14\1\265\20\14\27\0" - + "\2\14\7\0\7\14\3\0\11\14\1\266\15\14\27\0" - + "\2\14\7\0\7\14\3\0\6\14\1\267\2\14\1\270" - + "\15\14\27\0\2\14\7\0\7\14\3\0\10\14\1\271" - + "\16\14\27\0\2\14\7\0\7\14\3\0\3\14\1\272" - + "\23\14\27\0\2\14\7\0\7\14\3\0\11\14\1\273" - + "\15\14\27\0\2\14\7\0\7\14\3\0\3\14\1\274" - + "\23\14\27\0\2\14\7\0\7\14\3\0\21\14\1\275" - + "\5\14\27\0\2\14\7\0\7\14\3\0\12\14\1\276" - + "\14\14\27\0\2\14\7\0\7\14\3\0\2\14\1\277" - + "\24\14\27\0\2\14\7\0\7\14\3\0\17\14\1\300" - + "\7\14\27\0\2\14\7\0\7\14\3\0\23\14\1\301" - + "\3\14\27\0\2\14\7\0\7\14\3\0\16\14\1\302" - + "\10\14\27\0\2\14\7\0\7\14\3\0\13\14\1\303" - + "\6\14\1\304\4\14\27\0\2\14\7\0\7\14\3\0" - + "\1\14\1\305\10\14\1\306\14\14\27\0\2\14\7\0" - + "\7\14\3\0\21\14\1\307\5\14\27\0\2\14\7\0" - + "\7\14\3\0\6\14\1\310\2\14\1\311\15\14\27\0" - + "\2\14\7\0\7\14\3\0\21\14\1\312\5\14\27\0" - + "\2\14\7\0\7\14\3\0\2\14\1\313\24\14\27\0" - + "\2\14\7\0\7\14\3\0\15\14\1\314\1\315\10\14" - + "\27\0\2\14\7\0\7\14\3\0\10\14\1\316\16\14" - + "\27\0\2\14\7\0\7\14\3\0\16\14\1\317\10\14" - + "\27\0\2\14\7\0\7\14\3\0\1\14\1\320\25\14" - + "\27\0\2\14\7\0\7\14\3\0\10\14\1\321\16\14" - + "\27\0\2\14\7\0\7\14\3\0\10\14\1\322\16\14" - + "\27\0\2\14\7\0\7\14\3\0\11\14\1\323\15\14" - + "\27\0\2\14\7\0\7\14\3\0\12\14\1\324\14\14" - + "\27\0\2\14\7\0\7\14\3\0\7\14\1\325\2\14" - + "\1\326\14\14\27\0\2\14\7\0\7\14\3\0\5\14" - + "\1\327\21\14\27\0\2\14\7\0\7\14\3\0\1\330" - + "\26\14\27\0\2\14\7\0\7\14\3\0\1\14\1\331" - + "\25\14\27\0\2\14\7\0\7\14\3\0\12\14\1\332" - + "\14\14\27\0\2\14\7\0\7\14\3\0\11\14\1\333" - + "\15\14\36\0\1\334\102\0\1\221\3\0\2\221\73\0" - + "\1\335\3\0\2\335\62\0\1\336\12\0\2\336\2\0" - + "\1\336\3\0\27\336\35\0\1\233\1\234\77\0\1\234" - + "\1\0\1\337\70\0\1\340\12\0\2\340\2\0\1\340" - + "\3\0\27\340\27\0\1\341\1\236\1\342\2\0\1\105" - + "\1\343\2\0\2\236\2\341\2\236\1\341\3\0\27\341" - + "\23\0\1\240\76\0\5\241\1\344\73\241\4\0\1\240" - + "\1\242\101\0\2\244\3\0\1\345\3\0\7\244\3\0" - + "\27\244\27\0\2\245\1\346\2\0\1\247\1\347\1\350" - + "\1\0\7\245\3\0\27\245\27\0\1\351\12\0\2\351" - + "\2\0\1\351\3\0\27\351\27\0\1\352\5\0\1\250" - + "\4\0\2\352\2\0\1\352\3\0\27\352\36\0\1\353" - + "\102\0\2\354\1\0\4\354\3\0\1\354\1\0\2\354" - + "\1\0\1\354\6\0\2\354\43\0\1\116\5\0\1\355" - + "\1\126\2\0\2\355\1\132\5\0\1\132\64\0\2\260" - + "\2\0\2\260\62\0\2\14\7\0\7\14\3\0\3\14" - + "\1\356\23\14\27\0\2\14\7\0\7\14\3\0\13\14" - + "\1\357\13\14\27\0\2\14\7\0\7\14\3\0\20\14" - + "\1\360\6\14\27\0\2\14\7\0\7\14\3\0\2\14" - + "\1\361\24\14\27\0\2\14\7\0\7\14\3\0\2\14" - + "\1\362\24\14\27\0\2\14\7\0\7\14\3\0\2\14" - + "\1\363\24\14\27\0\2\14\7\0\7\14\3\0\5\14" - + "\1\364\21\14\27\0\2\14\7\0\7\14\3\0\6\14" - + "\1\365\2\14\1\366\15\14\27\0\2\14\7\0\7\14" - + "\3\0\6\14\1\367\20\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\370\15\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\371\24\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\372\15\14\27\0\2\14\7\0\7\14" - + "\3\0\1\14\1\373\25\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\374\24\14\27\0\2\14\7\0\7\14" - + "\3\0\16\14\1\375\10\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\376\24\14\27\0\2\14\7\0\7\14" - + "\3\0\7\14\1\377\17\14\27\0\2\14\7\0\7\14" - + "\3\0\6\14\1\u0100\20\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0101\24\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u0102\15\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0103\24\14\27\0\2\14\7\0\7\14" - + "\3\0\7\14\1\u0104\6\14\1\u0105\10\14\27\0\2\14" - + "\7\0\7\14\3\0\3\14\1\u0106\23\14\27\0\2\14" - + "\7\0\7\14\3\0\2\14\1\u0107\24\14\27\0\2\14" - + "\7\0\7\14\3\0\3\14\1\u0108\23\14\27\0\2\14" - + "\7\0\7\14\3\0\6\14\1\u0109\20\14\27\0\2\14" - + "\7\0\7\14\3\0\3\14\1\u010a\23\14\27\0\2\14" - + "\7\0\7\14\3\0\5\14\1\u010b\21\14\27\0\2\14" - + "\7\0\7\14\3\0\20\14\1\u010c\6\14\27\0\2\14" - + "\7\0\7\14\3\0\16\14\1\u010d\10\14\27\0\2\14" - + "\7\0\7\14\3\0\11\14\1\u010e\15\14\27\0\2\14" - + "\7\0\7\14\3\0\24\14\1\u010f\2\14\27\0\2\14" - + "\7\0\7\14\3\0\4\14\1\u0110\22\14\27\0\2\14" - + "\7\0\7\14\3\0\16\14\1\u0111\10\14\27\0\2\14" - + "\7\0\7\14\3\0\14\14\1\u0112\12\14\27\0\2\336" - + "\4\0\1\233\1\234\1\0\7\336\3\0\27\336\21\0" - + "\1\337\2\0\13\337\1\u0113\62\337\6\0\2\340\1\u0114" - + "\2\0\1\u0115\3\0\7\340\3\0\27\340\27\0\2\341" - + "\1\u0116\2\0\1\105\1\u0117\1\u0118\1\0\7\341\3\0" - + "\27\341\27\0\1\u0119\12\0\2\u0119\2\0\1\u0119\3\0" - + "\27\u0119\27\0\1\u011a\5\0\1\343\4\0\2\u011a\2\0" - + "\1\u011a\3\0\27\u011a\21\0\4\241\1\240\1\344\73\241" - + "\6\0\1\u011b\12\0\2\u011b\2\0\1\u011b\3\0\27\u011b" - + "\27\0\1\352\5\0\1\347\1\350\3\0\2\352\2\0" - + "\1\352\3\0\27\352\35\0\1\350\1\0\1\u011c\70\0" - + "\1\u011d\1\351\3\0\1\247\1\250\2\0\2\351\2\u011d" - + "\2\351\1\u011d\3\0\27\u011d\27\0\2\352\1\u011e\3\0" - + "\1\u011f\1\350\1\0\7\352\3\0\27\352\40\0\2\u0120" - + "\1\0\4\u0120\3\0\1\u0120\1\0\2\u0120\1\0\1\u0120" - + "\6\0\2\u0120\43\0\1\116\5\0\1\u0121\1\126\2\0" - + "\2\u0121\1\132\5\0\1\132\53\0\2\14\7\0\7\14" - + "\3\0\4\14\1\u0122\22\14\27\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u0123\25\14\27\0\2\14\7\0\7\14" - + "\3\0\10\14\1\u0124\16\14\27\0\2\14\7\0\7\14" - + "\3\0\20\14\1\u0125\6\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u0126\15\14\27\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u0127\14\14\27\0\2\14\7\0\7\14" - + "\3\0\6\14\1\u0128\20\14\27\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u0129\14\14\27\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u012a\25\14\27\0\2\14\7\0\7\14" - + "\3\0\5\14\1\u012b\21\14\27\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u012c\25\14\27\0\2\14\7\0\7\14" - + "\3\0\6\14\1\u012d\20\14\27\0\2\14\7\0\7\14" - + "\3\0\17\14\1\u012e\7\14\27\0\2\14\7\0\7\14" - + "\3\0\7\14\1\u012f\17\14\27\0\2\14\7\0\7\14" - + "\3\0\3\14\1\u0130\23\14\27\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u0131\25\14\27\0\2\14\7\0\7\14" - + "\3\0\1\14\1\u0132\25\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0133\24\14\27\0\2\14\7\0\7\14" - + "\3\0\13\14\1\u0134\13\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u0135\15\14\27\0\2\14\7\0\7\14" - + "\3\0\23\14\1\u0136\3\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0137\24\14\27\0\2\14\7\0\7\14" - + "\3\0\16\14\1\u0138\10\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u0139\15\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u013a\24\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u013b\24\14\27\0\2\14\7\0\7\14" - + "\3\0\3\14\1\u013c\23\14\27\0\2\14\7\0\7\14" - + "\3\0\3\14\1\u013d\23\14\27\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u013e\14\14\21\0\1\337\2\0\11\337" - + "\1\u0113\1\337\1\u0113\62\337\6\0\1\u013f\12\0\2\u013f" - + "\2\0\1\u013f\3\0\27\u013f\27\0\1\u0140\12\0\2\u0140" - + "\2\0\1\u0140\3\0\27\u0140\27\0\1\u011a\5\0\1\u0117" - + "\1\u0118\3\0\2\u011a\2\0\1\u011a\3\0\27\u011a\35\0" - + "\1\u0118\1\0\1\u0141\70\0\1\u0142\1\u0119\3\0\1\105" - + "\1\343\2\0\2\u0119\2\u0142\2\u0119\1\u0142\3\0\27\u0142" - + "\27\0\2\u011a\1\u0143\3\0\1\u0144\1\u0118\1\0\7\u011a" - + "\3\0\27\u011a\27\0\1\u011d\1\u011b\3\0\1\247\1\347" - + "\1\350\1\0\2\u011b\2\u011d\2\u011b\1\u011d\3\0\27\u011d" - + "\21\0\1\u011c\2\0\13\u011c\1\u0145\62\u011c\6\0\2\u011d" - + "\1\u011e\2\0\1\247\1\347\1\350\1\0\7\u011d\3\0" - + "\27\u011d\27\0\1\u0146\12\0\2\u0146\2\0\1\u0146\3\0" - + "\27\u0146\35\0\1\u011f\1\350\102\0\2\u0147\1\0\4\u0147" - + "\3\0\1\u0147\1\0\2\u0147\1\0\1\u0147\6\0\2\u0147" - + "\43\0\1\116\5\0\1\u0148\1\126\2\0\2\u0148\1\132" - + "\5\0\1\132\53\0\2\14\7\0\7\14\3\0\10\14" - + "\1\u0149\16\14\27\0\2\14\7\0\7\14\3\0\14\14" - + "\1\u014a\12\14\27\0\2\14\7\0\7\14\3\0\10\14" - + "\1\u014b\16\14\27\0\2\14\7\0\7\14\3\0\5\14" - + "\1\u014c\21\14\27\0\2\14\7\0\7\14\3\0\20\14" - + "\1\u014d\6\14\27\0\2\14\7\0\7\14\3\0\12\14" - + "\1\u014e\14\14\27\0\2\14\7\0\7\14\3\0\21\14" - + "\1\u014f\5\14\27\0\2\14\7\0\7\14\3\0\15\14" - + "\1\u0150\11\14\27\0\2\14\7\0\7\14\3\0\10\14" - + "\1\u0151\16\14\27\0\2\14\7\0\7\14\3\0\10\14" - + "\1\u0152\4\14\1\u0153\11\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u0154\15\14\27\0\2\14\7\0\7\14" - + "\3\0\23\14\1\u0155\3\14\27\0\2\14\7\0\7\14" - + "\3\0\16\14\1\u0156\10\14\27\0\2\14\7\0\7\14" - + "\3\0\2\14\1\u0157\24\14\27\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u0158\14\14\27\0\2\14\7\0\7\14" - + "\3\0\16\14\1\u0159\10\14\27\0\2\14\7\0\7\14" - + "\3\0\12\14\1\u015a\14\14\27\0\2\14\7\0\7\14" - + "\3\0\5\14\1\u015b\21\14\27\0\2\14\7\0\7\14" - + "\3\0\11\14\1\u015c\15\14\27\0\2\14\7\0\7\14" - + "\3\0\26\14\1\u015d\27\0\2\14\7\0\7\14\3\0" - + "\5\14\1\u015e\21\14\27\0\2\u013f\3\0\1\u0115\3\0" - + "\7\u013f\3\0\27\u013f\27\0\1\u0142\1\u0140\3\0\1\105" - + "\1\u0117\1\u0118\1\0\2\u0140\2\u0142\2\u0140\1\u0142\3\0" - + "\27\u0142\21\0\1\u0141\2\0\13\u0141\1\u015f\62\u0141\6\0" - + "\2\u0142\1\u0143\2\0\1\105\1\u0117\1\u0118\1\0\7\u0142" - + "\3\0\27\u0142\27\0\1\u0160\12\0\2\u0160\2\0\1\u0160" - + "\3\0\27\u0160\35\0\1\u0144\1\u0118\63\0\1\u011c\2\0" - + "\10\u011c\1\u0161\1\u0145\1\u011c\1\u0145\62\u011c\6\0\2\u0146" - + "\4\0\1\u011f\1\350\1\0\7\u0146\3\0\27\u0146\40\0" - + "\2\u0162\1\0\4\u0162\3\0\1\u0162\1\0\2\u0162\1\0" - + "\1\u0162\6\0\2\u0162\43\0\1\116\5\0\1\u0163\1\126" - + "\2\0\2\u0163\1\132\5\0\1\132\53\0\2\14\7\0" - + "\7\14\3\0\6\14\1\u0164\20\14\27\0\2\14\7\0" - + "\7\14\3\0\13\14\1\u0165\13\14\27\0\2\14\7\0" - + "\7\14\3\0\14\14\1\u0166\12\14\27\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u0167\23\14\27\0\2\14\7\0" - + "\7\14\3\0\5\14\1\u0168\21\14\27\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u0169\23\14\27\0\2\14\7\0" - + "\7\14\3\0\3\14\1\u016a\23\14\27\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u016b\24\14\27\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u016c\15\14\27\0\2\14\7\0" - + "\7\14\3\0\5\14\1\u016d\21\14\27\0\2\14\7\0" - + "\7\14\3\0\22\14\1\u016e\4\14\27\0\2\14\7\0" - + "\7\14\3\0\7\14\1\u016f\17\14\27\0\2\14\7\0" - + "\7\14\3\0\11\14\1\u0170\15\14\27\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0171\24\14\27\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0172\24\14\21\0\1\u0141\2\0" - + "\10\u0141\1\u0173\1\u015f\1\u0141\1\u015f\62\u0141\6\0\2\u0160" - + "\4\0\1\u0144\1\u0118\1\0\7\u0160\3\0\27\u0160\40\0" - + "\2\u0174\1\0\4\u0174\3\0\1\u0174\1\0\2\u0174\1\0" - + "\1\u0174\6\0\2\u0174\43\0\1\116\5\0\1\u0175\1\126" - + "\2\0\2\u0175\1\132\5\0\1\132\53\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0176\24\14\27\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0177\24\14\27\0\2\14\7\0" - + "\7\14\3\0\5\14\1\u0178\21\14\27\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u0179\24\14\27\0\2\14\7\0" - + "\7\14\3\0\16\14\1\u017a\10\14\27\0\2\14\7\0" - + "\7\14\3\0\5\14\1\u017b\21\14\27\0\2\14\7\0" - + "\7\14\3\0\10\14\1\u017c\16\14\27\0\2\14\7\0" - + "\7\14\3\0\10\14\1\u017d\16\14\27\0\2\14\7\0" - + "\7\14\3\0\2\14\1\u017e\24\14\40\0\2\u017f\1\0" - + "\4\u017f\3\0\1\u017f\1\0\2\u017f\1\0\1\u017f\6\0" - + "\2\u017f\43\0\1\116\5\0\1\u0180\1\126\2\0\2\u0180" - + "\1\132\5\0\1\132\53\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u0181\24\14\27\0\2\14\7\0\7\14\3\0" - + "\7\14\1\u0182\17\14\27\0\2\14\7\0\7\14\3\0" - + "\2\14\1\u0183\24\14\27\0\2\14\7\0\7\14\3\0" - + "\11\14\1\u0184\15\14\27\0\2\14\7\0\7\14\3\0" - + "\14\14\1\u0185\12\14\40\0\2\u0186\1\0\4\u0186\3\0" - + "\1\u0186\1\0\2\u0186\1\0\1\u0186\6\0\2\u0186\43\0" - + "\1\116\5\0\1\u0187\1\126\2\0\2\u0187\1\132\5\0" - + "\1\132\53\0\2\14\7\0\7\14\3\0\15\14\1\u0188" - + "\11\14\27\0\2\14\7\0\7\14\3\0\6\14\1\u0189" - + "\20\14\32\0\1\116\5\0\1\u018a\1\126\2\0\2\u018a" - + "\1\132\5\0\1\132\56\0\1\116\5\0\1\u018b\1\126" - + "\2\0\2\u018b\1\132\5\0\1\132\56\0\1\116\5\0" - + "\1\u018c\1\126\2\0\2\u018c\1\132\5\0\1\132\56\0" - + "\1\116\5\0\1\u018d\1\126\2\0\2\u018d\1\132\5\0" - + "\1\132\56\0\1\116\5\0\1\u018e\1\126\2\0\2\u018e" - + "\1\132\5\0\1\132\56\0\1\116\5\0\1\u018f\1\126" - + "\2\0\2\u018f\1\132\5\0\1\132\45\0"; + + "\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\14" + + "\1\46\1\14\1\47\1\50\1\14\1\51\2\14\1\52" + + "\12\14\1\53\1\54\1\55\1\56\1\57\1\60\1\61" + + "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71" + + "\1\72\1\73\1\74\1\75\1\76\1\77\13\75\1\100" + + "\10\75\1\101\67\75\1\102\1\76\1\77\24\102\1\101" + + "\1\100\66\102\1\6\1\103\1\104\1\105\2\6\1\106" + + "\4\6\1\107\1\110\4\6\2\106\2\6\1\106\3\6" + + "\45\106\21\6\1\111\1\103\1\104\7\111\1\112\104\111" + + "\121\0\1\10\117\0\1\11\10\0\1\11\106\0\1\113" + + "\1\114\7\0\1\115\116\0\1\116\107\0\2\14\7\0" + + "\7\14\3\0\45\14\31\0\1\117\117\0\1\120\1\121" + + "\4\0\2\122\2\0\2\122\100\0\1\123\3\0\1\124" + + "\2\0\1\125\3\0\2\123\2\0\1\123\3\0\45\123" + + "\34\0\1\126\1\0\1\127\116\0\1\130\112\0\1\122" + + "\5\0\1\131\1\132\1\133\1\0\1\134\1\135\1\136" + + "\5\0\1\136\22\0\1\133\51\0\1\122\5\0\2\24" + + "\2\0\2\24\1\136\5\0\1\136\100\0\1\137\10\0" + + "\1\140\76\0\2\14\7\0\7\14\3\0\1\14\1\141" + + "\43\14\27\0\2\14\7\0\7\14\3\0\2\14\1\142" + + "\1\143\41\14\27\0\2\14\7\0\7\14\3\0\3\14" + + "\1\144\12\14\1\145\6\14\1\146\17\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\147\36\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\150\3\14\1\151\6\14" + + "\1\152\1\14\1\153\24\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\154\6\14\1\155\1\14\1\156\3\14" + + "\1\157\25\14\27\0\2\14\7\0\7\14\3\0\1\14" + + "\1\160\22\14\1\161\20\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\162\1\163\7\14\1\164\31\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\165\1\166\1\167" + + "\3\14\1\170\10\14\1\171\1\14\1\172\22\14\27\0" + + "\2\14\7\0\7\14\3\0\6\14\1\173\1\14\1\174" + + "\4\14\1\175\5\14\1\176\21\14\27\0\2\14\7\0" + + "\7\14\3\0\6\14\1\177\36\14\27\0\2\14\7\0" + + "\7\14\3\0\2\14\1\200\4\14\1\201\3\14\1\202" + + "\6\14\1\203\22\14\27\0\2\14\7\0\7\14\3\0" + + "\3\14\1\204\3\14\1\205\2\14\1\206\1\207\31\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\210\4\14" + + "\1\211\35\14\27\0\2\14\7\0\7\14\3\0\12\14" + + "\1\212\5\14\1\213\24\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\214\1\14\1\215\7\14\1\216\2\14" + + "\1\217\26\14\27\0\2\14\7\0\7\14\3\0\1\220" + + "\44\14\27\0\2\14\7\0\7\14\3\0\3\14\1\221" + + "\3\14\1\222\35\14\27\0\2\14\7\0\7\14\3\0" + + "\2\14\1\223\4\14\1\224\35\14\27\0\2\14\7\0" + + "\7\14\3\0\11\14\1\225\33\14\27\0\2\14\7\0" + + "\7\14\3\0\13\14\1\226\31\14\36\0\1\227\116\0" + + "\1\230\73\0\1\231\22\0\1\232\74\0\1\233\21\0" + + "\1\234\75\0\1\235\20\0\1\236\116\0\1\237\101\0" + + "\1\75\2\0\13\75\1\0\10\75\1\0\67\75\2\0" + + "\1\77\114\0\2\240\1\0\13\240\1\241\1\242\3\240" + + "\1\242\1\243\2\240\1\244\1\245\1\246\1\247\6\240" + + "\1\250\1\251\3\240\1\252\50\240\1\102\2\0\24\102" + + "\2\0\66\102\2\0\1\104\117\0\1\105\10\0\1\105" + + "\110\0\2\253\1\254\3\0\1\255\1\256\1\0\7\253" + + "\3\0\45\253\24\0\1\105\2\0\1\253\5\0\1\110" + + "\4\0\2\253\2\0\1\253\3\0\45\253\25\0\1\257" + + "\1\0\1\260\12\0\2\260\2\0\1\260\3\0\45\260" + + "\21\0\1\113\1\261\1\262\114\113\5\263\1\264\111\263" + + "\11\0\1\265\113\0\1\266\12\0\2\266\2\0\1\266" + + "\3\0\45\266\40\0\2\122\2\0\2\122\1\136\5\0" + + "\1\136\71\0\1\267\1\123\1\270\2\0\1\271\1\272" + + "\2\0\2\123\2\267\2\123\1\267\3\0\45\267\36\0" + + "\1\273\114\0\1\274\1\0\1\275\116\0\1\276\112\0" + + "\1\122\5\0\1\131\1\132\2\0\1\134\1\135\1\136" + + "\5\0\1\136\74\0\1\122\5\0\2\132\2\0\2\132" + + "\1\136\5\0\1\136\102\0\1\277\1\300\1\0\4\300" + + "\3\0\1\300\1\0\2\300\1\0\1\300\6\0\2\300" + + "\12\0\1\300\1\0\1\300\5\0\2\300\35\0\1\122" + + "\5\0\1\135\1\132\2\0\2\135\1\136\5\0\1\136" + + "\74\0\1\122\5\0\1\301\1\132\2\0\2\301\1\136" + + "\5\0\1\136\102\0\2\302\2\0\2\302\1\0\1\303" + + "\64\0\1\303\11\0\2\14\7\0\7\14\3\0\2\14" + + "\1\304\42\14\27\0\2\14\7\0\7\14\3\0\11\14" + + "\1\305\11\14\1\306\21\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\307\34\14\27\0\2\14\7\0\7\14" + + "\3\0\5\14\1\310\37\14\27\0\2\14\7\0\7\14" + + "\3\0\6\14\1\311\36\14\27\0\2\14\7\0\7\14" + + "\3\0\11\14\1\312\33\14\27\0\2\14\7\0\7\14" + + "\3\0\6\14\1\313\2\14\1\314\33\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\315\34\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\316\41\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\317\43\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\320\33\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\321\3\14\1\322\35\14" + + "\27\0\2\14\7\0\7\14\3\0\1\323\20\14\1\324" + + "\23\14\27\0\2\14\7\0\7\14\3\0\12\14\1\325" + + "\32\14\27\0\2\14\7\0\7\14\3\0\14\14\1\326" + + "\30\14\27\0\2\14\7\0\7\14\3\0\2\14\1\327" + + "\42\14\27\0\2\14\7\0\7\14\3\0\17\14\1\330" + + "\5\14\1\331\17\14\27\0\2\14\7\0\7\14\3\0" + + "\23\14\1\332\21\14\27\0\2\14\7\0\7\14\3\0" + + "\16\14\1\333\26\14\27\0\2\14\7\0\7\14\3\0" + + "\3\14\1\334\7\14\1\335\6\14\1\336\22\14\27\0" + + "\2\14\7\0\7\14\3\0\16\14\1\337\26\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\340\43\14\27\0" + + "\2\14\7\0\7\14\3\0\26\14\1\341\16\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\342\10\14\1\343" + + "\32\14\27\0\2\14\7\0\7\14\3\0\21\14\1\344" + + "\23\14\27\0\2\14\7\0\7\14\3\0\6\14\1\345" + + "\2\14\1\346\33\14\27\0\2\14\7\0\7\14\3\0" + + "\32\14\1\347\12\14\27\0\2\14\7\0\7\14\3\0" + + "\21\14\1\350\23\14\27\0\2\14\7\0\7\14\3\0" + + "\2\14\1\351\42\14\27\0\2\14\7\0\7\14\3\0" + + "\15\14\1\352\1\353\26\14\27\0\2\14\7\0\7\14" + + "\3\0\21\14\1\354\23\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\355\34\14\27\0\2\14\7\0\7\14" + + "\3\0\16\14\1\356\26\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\357\43\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\360\34\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\361\34\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\362\34\14\27\0\2\14\7\0\7\14" + + "\3\0\3\14\1\363\41\14\27\0\2\14\7\0\7\14" + + "\3\0\11\14\1\364\33\14\27\0\2\14\7\0\7\14" + + "\3\0\12\14\1\365\32\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\366\4\14\1\367\2\14\1\370\32\14" + + "\27\0\2\14\7\0\7\14\3\0\5\14\1\371\37\14" + + "\27\0\2\14\7\0\7\14\3\0\1\372\44\14\27\0" + + "\2\14\7\0\7\14\3\0\3\14\1\373\41\14\27\0" + + "\2\14\7\0\7\14\3\0\5\14\1\374\1\375\1\376" + + "\6\14\1\377\26\14\27\0\2\14\7\0\7\14\3\0" + + "\1\14\1\u0100\43\14\27\0\2\14\7\0\7\14\3\0" + + "\12\14\1\u0101\32\14\27\0\2\14\7\0\7\14\3\0" + + "\11\14\1\u0102\33\14\27\0\2\14\7\0\7\14\3\0" + + "\11\14\1\u0103\33\14\27\0\2\14\7\0\7\14\3\0" + + "\1\14\1\u0104\43\14\27\0\2\14\7\0\7\14\3\0" + + "\23\14\1\u0105\21\14\36\0\1\u0106\120\0\1\243\3\0" + + "\2\243\111\0\1\u0107\3\0\2\u0107\100\0\1\u0108\12\0" + + "\2\u0108\2\0\1\u0108\3\0\45\u0108\35\0\1\255\1\256" + + "\115\0\1\256\1\0\1\u0109\106\0\1\u010a\12\0\2\u010a" + + "\2\0\1\u010a\3\0\45\u010a\27\0\1\u010b\1\260\1\u010c" + + "\2\0\1\111\1\u010d\2\0\2\260\2\u010b\2\260\1\u010b" + + "\3\0\45\u010b\23\0\1\262\114\0\5\263\1\u010e\111\263" + + "\4\0\1\262\1\264\117\0\2\266\3\0\1\u010f\3\0" + + "\7\266\3\0\45\266\27\0\2\267\1\u0110\2\0\1\271" + + "\1\u0111\1\u0112\1\0\7\267\3\0\45\267\27\0\1\u0113" + + "\12\0\2\u0113\2\0\1\u0113\3\0\45\u0113\27\0\1\u0114" + + "\5\0\1\272\4\0\2\u0114\2\0\1\u0114\3\0\45\u0114" + + "\36\0\1\u0115\120\0\2\u0116\1\0\4\u0116\3\0\1\u0116" + + "\1\0\2\u0116\1\0\1\u0116\6\0\2\u0116\12\0\1\u0116" + + "\1\0\1\u0116\5\0\2\u0116\35\0\1\122\5\0\1\u0117" + + "\1\132\2\0\2\u0117\1\136\5\0\1\136\102\0\2\302" + + "\2\0\2\302\100\0\2\14\7\0\7\14\3\0\3\14" + + "\1\u0118\41\14\27\0\2\14\7\0\7\14\3\0\13\14" + + "\1\u0119\31\14\27\0\2\14\7\0\7\14\3\0\7\14" + + "\1\u011a\35\14\27\0\2\14\7\0\7\14\3\0\14\14" + + "\1\u011b\30\14\27\0\2\14\7\0\7\14\3\0\20\14" + + "\1\u011c\24\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u011d\42\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u011e\42\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u011f\42\14\27\0\2\14\7\0\7\14\3\0\5\14" + + "\1\u0120\37\14\27\0\2\14\7\0\7\14\3\0\6\14" + + "\1\u0121\2\14\1\u0122\33\14\27\0\2\14\7\0\7\14" + + "\3\0\6\14\1\u0123\36\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u0124\7\14\1\u0125\33\14\27\0\2\14" + + "\7\0\7\14\3\0\21\14\1\u0126\23\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u0127\36\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0128\42\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u0129\33\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u012a\43\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u012b\33\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u012c\42\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\u012d\26\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u012e\37\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u012f\42\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\u0130\26\14\27\0\2\14" + + "\7\0\7\14\3\0\26\14\1\u0131\16\14\27\0\2\14" + + "\7\0\7\14\3\0\26\14\1\u0132\16\14\27\0\2\14" + + "\7\0\7\14\3\0\7\14\1\u0133\35\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u0134\36\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0135\42\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u0136\33\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u0137\42\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u0138\43\14\27\0\2\14" + + "\7\0\7\14\3\0\7\14\1\u0139\6\14\1\u013a\26\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\u013b\41\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u013c\42\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\u013d\26\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\u013e\41\14" + + "\27\0\2\14\7\0\7\14\3\0\6\14\1\u013f\36\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\u0140\41\14" + + "\27\0\2\14\7\0\7\14\3\0\5\14\1\u0141\37\14" + + "\27\0\2\14\7\0\7\14\3\0\26\14\1\u0142\16\14" + + "\27\0\2\14\7\0\7\14\3\0\14\14\1\u0143\30\14" + + "\27\0\2\14\7\0\7\14\3\0\20\14\1\u0144\24\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0145\26\14" + + "\27\0\2\14\7\0\7\14\3\0\24\14\1\u0146\20\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0147\33\14" + + "\27\0\2\14\7\0\7\14\3\0\24\14\1\u0148\20\14" + + "\27\0\2\14\7\0\7\14\3\0\4\14\1\u0149\40\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\u014a\26\14" + + "\27\0\2\14\7\0\7\14\3\0\22\14\1\u014b\22\14" + + "\27\0\2\14\7\0\7\14\3\0\20\14\1\u014c\24\14" + + "\27\0\2\14\7\0\7\14\3\0\13\14\1\u014d\31\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u014e\43\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u014f\42\14" + + "\27\0\2\14\7\0\7\14\3\0\14\14\1\u0150\30\14" + + "\27\0\2\14\7\0\7\14\3\0\27\14\1\u0151\3\14" + + "\1\u0152\11\14\27\0\2\14\7\0\7\14\3\0\7\14" + + "\1\u0153\35\14\27\0\2\14\7\0\7\14\3\0\12\14" + + "\1\u0154\32\14\27\0\2\14\7\0\7\14\3\0\1\u0155" + + "\44\14\27\0\2\u0108\4\0\1\255\1\256\1\0\7\u0108" + + "\3\0\45\u0108\21\0\1\u0109\2\0\13\u0109\1\u0156\100\u0109" + + "\6\0\2\u010a\1\u0157\2\0\1\u0158\3\0\7\u010a\3\0" + + "\45\u010a\27\0\2\u010b\1\u0159\2\0\1\111\1\u015a\1\u015b" + + "\1\0\7\u010b\3\0\45\u010b\27\0\1\u015c\12\0\2\u015c" + + "\2\0\1\u015c\3\0\45\u015c\27\0\1\u015d\5\0\1\u010d" + + "\4\0\2\u015d\2\0\1\u015d\3\0\45\u015d\21\0\4\263" + + "\1\262\1\u010e\111\263\6\0\1\u015e\12\0\2\u015e\2\0" + + "\1\u015e\3\0\45\u015e\27\0\1\u0114\5\0\1\u0111\1\u0112" + + "\3\0\2\u0114\2\0\1\u0114\3\0\45\u0114\35\0\1\u0112" + + "\1\0\1\u015f\106\0\1\u0160\1\u0113\3\0\1\271\1\272" + + "\2\0\2\u0113\2\u0160\2\u0113\1\u0160\3\0\45\u0160\27\0" + + "\2\u0114\1\u0161\3\0\1\u0162\1\u0112\1\0\7\u0114\3\0" + + "\45\u0114\40\0\2\u0163\1\0\4\u0163\3\0\1\u0163\1\0" + + "\2\u0163\1\0\1\u0163\6\0\2\u0163\12\0\1\u0163\1\0" + + "\1\u0163\5\0\2\u0163\35\0\1\122\5\0\1\u0164\1\132" + + "\2\0\2\u0164\1\136\5\0\1\136\71\0\2\14\7\0" + + "\7\14\3\0\4\14\1\u0165\40\14\27\0\2\14\7\0" + + "\7\14\3\0\1\14\1\u0166\43\14\27\0\2\14\7\0" + + "\7\14\3\0\24\14\1\u0167\20\14\27\0\2\14\7\0" + + "\7\14\3\0\7\14\1\u0168\35\14\27\0\2\14\7\0" + + "\7\14\3\0\10\14\1\u0169\34\14\27\0\2\14\7\0" + + "\7\14\3\0\20\14\1\u016a\24\14\27\0\2\14\7\0" + + "\7\14\3\0\11\14\1\u016b\33\14\27\0\2\14\7\0" + + "\7\14\3\0\12\14\1\u016c\32\14\27\0\2\14\7\0" + + "\7\14\3\0\6\14\1\u016d\36\14\27\0\2\14\7\0" + + "\7\14\3\0\11\14\1\u016e\33\14\27\0\2\14\7\0" + + "\7\14\3\0\12\14\1\u016f\32\14\27\0\2\14\7\0" + + "\7\14\3\0\30\14\1\u0170\10\14\1\u0171\3\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0172\33\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\u0173\43\14\27\0" + + "\2\14\7\0\7\14\3\0\5\14\1\u0174\37\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\u0175\43\14\27\0" + + "\2\14\7\0\7\14\3\0\32\14\1\u0176\12\14\27\0" + + "\2\14\7\0\7\14\3\0\6\14\1\u0177\36\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0178\42\14\27\0" + + "\2\14\7\0\7\14\3\0\33\14\1\u0179\11\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u017a\42\14\27\0" + + "\2\14\7\0\7\14\3\0\16\14\1\u017b\26\14\27\0" + + "\2\14\7\0\7\14\3\0\17\14\1\u017c\25\14\27\0" + + "\2\14\7\0\7\14\3\0\7\14\1\u017d\35\14\27\0" + + "\2\14\7\0\7\14\3\0\3\14\1\u017e\41\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\u017f\43\14\27\0" + + "\2\14\7\0\7\14\3\0\3\14\1\u0180\41\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\u0181\43\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0182\42\14\27\0" + + "\2\14\7\0\7\14\3\0\13\14\1\u0183\31\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0184\33\14\27\0" + + "\2\14\7\0\7\14\3\0\12\14\1\u0185\32\14\27\0" + + "\2\14\7\0\7\14\3\0\23\14\1\u0186\21\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0187\42\14\27\0" + + "\2\14\7\0\7\14\3\0\16\14\1\u0188\26\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0189\33\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u018a\33\14\27\0" + + "\2\14\7\0\7\14\3\0\37\14\1\u018b\2\14\1\u018c" + + "\2\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u018d" + + "\42\14\27\0\2\14\7\0\7\14\3\0\32\14\1\u018e" + + "\12\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u018f" + + "\42\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0190" + + "\41\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0191" + + "\41\14\27\0\2\14\7\0\7\14\3\0\12\14\1\u0192" + + "\32\14\27\0\2\14\7\0\7\14\3\0\1\14\1\u0193" + + "\43\14\27\0\2\14\7\0\7\14\3\0\1\u0194\44\14" + + "\27\0\2\14\7\0\7\14\3\0\14\14\1\u0195\30\14" + + "\27\0\2\14\7\0\7\14\3\0\10\14\1\u0196\34\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0197\43\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0198\32\14" + + "\27\0\2\14\7\0\7\14\3\0\30\14\1\u0199\14\14" + + "\27\0\2\14\7\0\7\14\3\0\10\14\1\u019a\34\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u019b\42\14" + + "\21\0\1\u0109\2\0\11\u0109\1\u0156\1\u0109\1\u0156\100\u0109" + + "\6\0\1\u019c\12\0\2\u019c\2\0\1\u019c\3\0\45\u019c" + + "\27\0\1\u019d\12\0\2\u019d\2\0\1\u019d\3\0\45\u019d" + + "\27\0\1\u015d\5\0\1\u015a\1\u015b\3\0\2\u015d\2\0" + + "\1\u015d\3\0\45\u015d\35\0\1\u015b\1\0\1\u019e\106\0" + + "\1\u019f\1\u015c\3\0\1\111\1\u010d\2\0\2\u015c\2\u019f" + + "\2\u015c\1\u019f\3\0\45\u019f\27\0\2\u015d\1\u01a0\3\0" + + "\1\u01a1\1\u015b\1\0\7\u015d\3\0\45\u015d\27\0\1\u0160" + + "\1\u015e\3\0\1\271\1\u0111\1\u0112\1\0\2\u015e\2\u0160" + + "\2\u015e\1\u0160\3\0\45\u0160\21\0\1\u015f\2\0\13\u015f" + + "\1\u01a2\100\u015f\6\0\2\u0160\1\u0161\2\0\1\271\1\u0111" + + "\1\u0112\1\0\7\u0160\3\0\45\u0160\27\0\1\u01a3\12\0" + + "\2\u01a3\2\0\1\u01a3\3\0\45\u01a3\35\0\1\u0162\1\u0112" + + "\120\0\2\u01a4\1\0\4\u01a4\3\0\1\u01a4\1\0\2\u01a4" + + "\1\0\1\u01a4\6\0\2\u01a4\12\0\1\u01a4\1\0\1\u01a4" + + "\5\0\2\u01a4\35\0\1\122\5\0\1\u01a5\1\132\2\0" + + "\2\u01a5\1\136\5\0\1\136\71\0\2\14\7\0\7\14" + + "\3\0\10\14\1\u01a6\34\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u01a7\42\14\27\0\2\14\7\0\7\14" + + "\3\0\23\14\1\u01a8\21\14\27\0\2\14\7\0\7\14" + + "\3\0\14\14\1\u01a9\30\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\u01aa\34\14\27\0\2\14\7\0\7\14" + + "\3\0\41\14\1\u01ab\3\14\27\0\2\14\7\0\7\14" + + "\3\0\5\14\1\u01ac\37\14\27\0\2\14\7\0\7\14" + + "\3\0\16\14\1\u01ad\26\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u01ae\43\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u01af\43\14\27\0\2\14\7\0\7\14" + + "\3\0\20\14\1\u01b0\24\14\27\0\2\14\7\0\7\14" + + "\3\0\12\14\1\u01b1\32\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u01b2\43\14\27\0\2\14\7\0\7\14" + + "\3\0\21\14\1\u01b3\23\14\27\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u01b4\41\14\27\0\2\14\7\0\7\14" + + "\3\0\11\14\1\u01b5\33\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u01b6\42\14\27\0\2\14\7\0\7\14" + + "\3\0\15\14\1\u01b7\27\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\u01b8\34\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\u01b9\4\14\1\u01ba\27\14\27\0\2\14" + + "\7\0\7\14\3\0\23\14\1\u01bb\21\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u01bc\33\14\27\0\2\14" + + "\7\0\7\14\3\0\23\14\1\u01bd\21\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\u01be\26\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u01bf\42\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u01c0\37\14\27\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u01c1\32\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\u01c2\26\14\27\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u01c3\32\14\27\0\2\14" + + "\7\0\7\14\3\0\20\14\1\u01c4\24\14\27\0\2\14" + + "\7\0\7\14\3\0\7\14\1\u01c5\35\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01c6\41\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u01c7\43\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u01c8\37\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u01c9\33\14\27\0\2\14" + + "\7\0\7\14\3\0\26\14\1\u01ca\16\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u01cb\37\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u01cc\36\14\27\0\2\14" + + "\7\0\7\14\3\0\26\14\1\u01cd\16\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\u01ce\26\14\27\0\2\14" + + "\7\0\7\14\3\0\23\14\1\u01cf\21\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\u01d0\34\14\27\0\2\14" + + "\7\0\7\14\3\0\26\14\1\u01d1\16\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u01d2\43\14\27\0\2\u019c" + + "\3\0\1\u0158\3\0\7\u019c\3\0\45\u019c\27\0\1\u019f" + + "\1\u019d\3\0\1\111\1\u015a\1\u015b\1\0\2\u019d\2\u019f" + + "\2\u019d\1\u019f\3\0\45\u019f\21\0\1\u019e\2\0\13\u019e" + + "\1\u01d3\100\u019e\6\0\2\u019f\1\u01a0\2\0\1\111\1\u015a" + + "\1\u015b\1\0\7\u019f\3\0\45\u019f\27\0\1\u01d4\12\0" + + "\2\u01d4\2\0\1\u01d4\3\0\45\u01d4\35\0\1\u01a1\1\u015b" + + "\101\0\1\u015f\2\0\10\u015f\1\u01d5\1\u01a2\1\u015f\1\u01a2" + + "\100\u015f\6\0\2\u01a3\4\0\1\u0162\1\u0112\1\0\7\u01a3" + + "\3\0\45\u01a3\40\0\2\u01d6\1\0\4\u01d6\3\0\1\u01d6" + + "\1\0\2\u01d6\1\0\1\u01d6\6\0\2\u01d6\12\0\1\u01d6" + + "\1\0\1\u01d6\5\0\2\u01d6\35\0\1\122\5\0\1\u01d7" + + "\1\132\2\0\2\u01d7\1\136\5\0\1\136\71\0\2\14" + + "\7\0\7\14\3\0\37\14\1\u01d8\5\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u01d9\36\14\27\0\2\14" + + "\7\0\7\14\3\0\13\14\1\u01da\31\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u01db\43\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\u01dc\26\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01dd\41\14\27\0\2\14" + + "\7\0\7\14\3\0\14\14\1\u01de\30\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01df\41\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01e0\41\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u01e1\43\14\27\0\2\14" + + "\7\0\7\14\3\0\43\14\1\u01e2\1\14\27\0\2\14" + + "\7\0\7\14\3\0\34\14\1\u01e3\10\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u01e4\37\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01e5\41\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01e6\41\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u01e7\42\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u01e8\42\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u01e9\33\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01ea\41\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u01eb\37\14\27\0\2\14" + + "\7\0\7\14\3\0\22\14\1\u01ec\22\14\27\0\2\14" + + "\7\0\7\14\3\0\7\14\1\u01ed\35\14\27\0\2\14" + + "\7\0\7\14\3\0\24\14\1\u01ee\20\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\u01ef\43\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u01f0\41\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u01f1\33\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u01f2\42\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u01f3\42\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u01f4\33\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u01f5\33\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\u01f6\42\14\27\0\2\14" + + "\7\0\7\14\3\0\14\14\1\u01f7\30\14\21\0\1\u019e" + + "\2\0\10\u019e\1\u01f8\1\u01d3\1\u019e\1\u01d3\100\u019e\6\0" + + "\2\u01d4\4\0\1\u01a1\1\u015b\1\0\7\u01d4\3\0\45\u01d4" + + "\40\0\2\u01f9\1\0\4\u01f9\3\0\1\u01f9\1\0\2\u01f9" + + "\1\0\1\u01f9\6\0\2\u01f9\12\0\1\u01f9\1\0\1\u01f9" + + "\5\0\2\u01f9\35\0\1\122\5\0\1\u01fa\1\132\2\0" + + "\2\u01fa\1\136\5\0\1\136\71\0\2\14\7\0\7\14" + + "\3\0\7\14\1\u01fb\35\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u01fc\42\14\27\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u01fd\41\14\27\0\2\14\7\0\7\14" + + "\3\0\31\14\1\u01fe\13\14\27\0\2\14\7\0\7\14" + + "\3\0\26\14\1\u01ff\16\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u0200\42\14\27\0\2\14\7\0\7\14" + + "\3\0\23\14\1\u0201\21\14\27\0\2\14\7\0\7\14" + + "\3\0\5\14\1\u0202\37\14\27\0\2\14\7\0\7\14" + + "\3\0\26\14\1\u0203\16\14\27\0\2\14\7\0\7\14" + + "\3\0\3\14\1\u0204\41\14\27\0\2\14\7\0\7\14" + + "\3\0\12\14\1\u0205\32\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u0206\42\14\27\0\2\14\7\0\7\14" + + "\3\0\16\14\1\u0207\26\14\27\0\2\14\7\0\7\14" + + "\3\0\5\14\1\u0208\37\14\27\0\2\14\7\0\7\14" + + "\3\0\36\14\1\u0209\6\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\u020a\34\14\27\0\2\14\7\0\7\14" + + "\3\0\11\14\1\u020b\33\14\27\0\2\14\7\0\7\14" + + "\3\0\10\14\1\u020c\34\14\27\0\2\14\7\0\7\14" + + "\3\0\12\14\1\u020d\32\14\27\0\2\14\7\0\7\14" + + "\3\0\12\14\1\u020e\32\14\27\0\2\14\7\0\7\14" + + "\3\0\23\14\1\u020f\21\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\u0210\42\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u0211\43\14\27\0\2\14\7\0\7\14" + + "\3\0\20\14\1\u0212\24\14\27\0\2\14\7\0\7\14" + + "\3\0\1\14\1\u0213\43\14\27\0\2\14\7\0\7\14" + + "\3\0\31\14\1\u0214\11\14\1\u0215\1\14\40\0\2\u0216" + + "\1\0\4\u0216\3\0\1\u0216\1\0\2\u0216\1\0\1\u0216" + + "\6\0\2\u0216\12\0\1\u0216\1\0\1\u0216\5\0\2\u0216" + + "\35\0\1\122\5\0\1\u0217\1\132\2\0\2\u0217\1\136" + + "\5\0\1\136\71\0\2\14\7\0\7\14\3\0\24\14" + + "\1\u0218\20\14\27\0\2\14\7\0\7\14\3\0\26\14" + + "\1\u0219\16\14\27\0\2\14\7\0\7\14\3\0\7\14" + + "\1\u021a\35\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u021b\42\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u021c\42\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u021d\42\14\27\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u021e\33\14\27\0\2\14\7\0\7\14\3\0\26\14" + + "\1\u021f\16\14\27\0\2\14\7\0\7\14\3\0\7\14" + + "\1\u0220\35\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0221\42\14\27\0\2\14\7\0\7\14\3\0\7\14" + + "\1\u0222\35\14\27\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u0223\33\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0224\42\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0225\42\14\27\0\2\14\7\0\7\14\3\0\3\14" + + "\1\u0226\41\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0227\42\14\27\0\2\14\7\0\7\14\3\0\14\14" + + "\1\u0228\30\14\27\0\2\14\7\0\7\14\3\0\12\14" + + "\1\u0229\32\14\27\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u022a\33\14\27\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u022b\26\14\40\0\2\u022c\1\0\4\u022c\3\0\1\u022c" + + "\1\0\2\u022c\1\0\1\u022c\6\0\2\u022c\12\0\1\u022c" + + "\1\0\1\u022c\5\0\2\u022c\35\0\1\122\5\0\1\u022d" + + "\1\132\2\0\2\u022d\1\136\5\0\1\136\71\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u022e\32\14\27\0\2\14" + + "\7\0\7\14\3\0\13\14\1\u022f\31\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\u0230\33\14\27\0\2\14" + + "\7\0\7\14\3\0\20\14\1\u0231\24\14\27\0\2\14" + + "\7\0\7\14\3\0\20\14\1\u0232\24\14\27\0\2\14" + + "\7\0\7\14\3\0\15\14\1\u0233\27\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\u0234\41\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\u0235\36\14\27\0\2\14" + + "\7\0\7\14\3\0\37\14\1\u0236\5\14\27\0\2\14" + + "\7\0\7\14\3\0\1\u0237\44\14\27\0\2\14\7\0" + + "\7\14\3\0\10\14\1\u0238\34\14\27\0\2\14\7\0" + + "\7\14\3\0\7\14\1\u0239\35\14\27\0\2\14\7\0" + + "\7\14\3\0\3\14\1\u023a\41\14\32\0\1\122\5\0" + + "\1\u023b\1\132\2\0\2\u023b\1\136\5\0\1\136\71\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u023c\42\14\27\0" + + "\2\14\7\0\7\14\3\0\10\14\1\u023d\34\14\27\0" + + "\2\14\7\0\7\14\3\0\35\14\1\u023e\7\14\27\0" + + "\2\14\7\0\7\14\3\0\14\14\1\u023f\30\14\27\0" + + "\2\14\7\0\7\14\3\0\7\14\1\u0240\35\14\27\0" + + "\2\14\7\0\7\14\3\0\16\14\1\u0241\26\14\27\0" + + "\2\14\7\0\7\14\3\0\26\14\1\u0242\16\14\27\0" + + "\2\14\7\0\7\14\3\0\21\14\1\u0243\23\14\27\0" + + "\2\14\7\0\7\14\3\0\22\14\1\u0244\22\14\32\0" + + "\1\122\5\0\1\u0245\1\132\2\0\2\u0245\1\136\5\0" + + "\1\136\71\0\2\14\7\0\7\14\3\0\40\14\1\u0246" + + "\4\14\27\0\2\14\7\0\7\14\3\0\14\14\1\u0247" + + "\30\14\27\0\2\14\7\0\7\14\3\0\13\14\1\u0248" + + "\31\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0249" + + "\42\14\27\0\2\14\7\0\7\14\3\0\24\14\1\u024a" + + "\20\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u024b" + + "\42\14\32\0\1\122\5\0\1\u024c\1\132\2\0\2\u024c" + + "\1\136\5\0\1\136\71\0\2\14\7\0\7\14\3\0" + + "\16\14\1\u024d\26\14\27\0\2\14\7\0\7\14\3\0" + + "\6\14\1\u024e\36\14\27\0\2\14\7\0\7\14\3\0" + + "\3\14\1\u024f\41\14\27\0\2\14\7\0\7\14\3\0" + + "\14\14\1\u0250\30\14\27\0\2\14\7\0\7\14\3\0" + + "\12\14\1\u0251\32\14\27\0\2\14\7\0\7\14\3\0" + + "\6\14\1\u0252\36\14\32\0\1\122\5\0\1\u0253\1\132" + + "\2\0\2\u0253\1\136\5\0\1\136\71\0\2\14\7\0" + + "\7\14\3\0\12\14\1\u0254\32\14\27\0\2\14\7\0" + + "\7\14\3\0\16\14\1\u0255\26\14\27\0\2\14\7\0" + + "\7\14\3\0\2\14\1\u0256\42\14\32\0\1\122\5\0" + + "\1\u0257\1\132\2\0\2\u0257\1\136\5\0\1\136\71\0" + + "\2\14\7\0\7\14\3\0\21\14\1\u0258\23\14\27\0" + + "\2\14\7\0\7\14\3\0\12\14\1\u0259\32\14\27\0" + + "\2\14\7\0\7\14\3\0\40\14\1\u025a\4\14\32\0" + + "\1\122\5\0\1\u025b\1\132\2\0\2\u025b\1\136\5\0" + + "\1\136\71\0\2\14\7\0\7\14\3\0\11\14\1\u025c" + + "\33\14\27\0\2\14\7\0\7\14\3\0\16\14\1\u025d" + + "\26\14\27\0\2\14\7\0\7\14\3\0\22\14\1\u025e" + + "\22\14\27\0\2\14\7\0\7\14\3\0\12\14\1\u025f" + + "\32\14\27\0\2\14\7\0\7\14\3\0\21\14\1\u0260" + + "\23\14\21\0"; private static int[] zzUnpackTrans() { - int[] result = new int[18785]; + int[] result = new int[37130]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -643,17 +873,17 @@ public final class ActionScriptLexer { private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\5\0\1\11\1\1\1\11\11\1\1\11\3\1\1\11" - + "\21\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11" + + "\25\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11" + "\3\1\1\11\2\1\1\11\1\1\1\11\2\1\1\0" + "\3\11\2\0\1\1\1\0\1\1\1\11\1\1\1\11" - + "\3\1\1\0\2\1\1\0\2\11\51\1\12\11\2\1" + + "\3\1\1\0\2\1\1\0\2\11\67\1\12\11\2\1" + "\7\11\6\0\1\1\1\11\2\0\1\11\3\0\1\11" - + "\1\0\1\11\1\1\2\11\4\1\1\0\52\1\2\11" - + "\7\0\1\11\5\0\1\11\50\1\1\0\1\11\12\0" - + "\37\1\10\0\30\1\2\0\45\1\1\11\11\1"; + + "\1\0\1\11\1\1\2\11\4\1\1\0\102\1\2\11" + + "\7\0\1\11\5\0\1\11\101\1\1\0\1\11\12\0" + + "\71\1\10\0\57\1\2\0\127\1\1\11\64\1"; private static int[] zzUnpackAttribute() { - int[] result = new int[399]; + int[] result = new int[608]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -788,7 +1018,7 @@ public final class ActionScriptLexer { char[] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 2228) { + while (i < 2262) { int count = packed.charAt(i++); char value = packed.charAt(i++); do { @@ -1050,179 +1280,36 @@ public final class ActionScriptLexer { zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 130: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 131: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 132: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 133: - break; - case 108: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 134: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 135: - break; - case 42: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 136: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 137: - break; - case 99: { - string.append(yytext()); - String endtagname = yytext(); - endtagname = endtagname.substring(2, endtagname.length() - 1); - if (endtagname.equals(xmlTagName)) { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML, string.toString()); - } - } - case 138: - break; - case 51: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 139: - break; - case 84: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 140: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 141: - break; - case 128: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 142: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 143: - break; - case 124: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 144: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 145: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 146: - break; - case 98: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 147: - break; - case 85: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 148: - break; - case 3: { /*ignore*/ - - } - case 149: - break; - case 122: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); - } - case 150: - break; - case 94: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NULL, yytext()); - } - case 151: - break; - case 72: { - string.append('\t'); - } - case 152: - break; - case 66: { - char val = (char) Integer.parseInt(yytext().substring(1), 8); - string.append(val); - } - case 153: - break; - case 129: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 154: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 155: - break; - case 18: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 156: - break; - case 64: { - throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 157: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 158: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 159: - break; - case 34: { - yybegin(YYINITIAL); - yyline++; - } - case 160: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 161: - break; - case 97: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + case 4: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); } case 162: break; + case 127: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STRING_OP, yytext()); + } + case 163: + break; + case 98: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NULL, yytext()); + } + case 164: + break; + case 139: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); + } + case 165: + break; + case 30: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 166: + break; + case 135: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); + } + case 167: + break; case 75: { string.setLength(0); yybegin(XML); @@ -1234,489 +1321,792 @@ public final class ActionScriptLexer { xmlTagName = s; string.append(yytext()); } - case 163: - break; - case 13: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); - } - case 164: - break; - case 15: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 165: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 166: - break; - case 53: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 167: - break; - case 81: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); - } case 168: break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + case 59: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); } case 169: break; - case 21: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + case 132: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); } case 170: break; - case 102: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + case 93: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); } case 171: break; - case 71: { - string.append('\n'); + case 33: { + string.append(yytext()); } case 172: break; - case 76: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + case 61: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); } case 173: break; - case 43: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + case 74: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); } case 174: break; + case 16: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 175: + break; + case 153: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBSUBSTRING, yytext()); + } + case 176: + break; + case 121: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); + } + case 177: + break; + case 17: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 178: + break; + case 94: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); + } + case 179: + break; + case 10: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 180: + break; + case 9: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 181: + break; + case 155: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GOTOANDPLAY, yytext()); + } + case 182: + break; case 56: { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); } - case 175: + case 183: break; - case 41: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); + case 96: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); } - case 176: + case 184: break; - case 87: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); + case 123: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); } - case 177: + case 185: + break; + case 38: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); + } + case 186: + break; + case 12: { + string.setLength(0); + yybegin(STRING); + } + case 187: + break; + case 125: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); + } + case 188: + break; + case 140: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBLENGTH, yytext()); + } + case 189: + break; + case 34: { + yybegin(YYINITIAL); + yyline++; + } + case 190: + break; + case 77: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); + } + case 191: + break; + case 150: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TARGETPATH, yytext()); + } + case 192: + break; + case 81: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.CHR, yytext()); + } + case 193: + break; + case 149: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TELLTARGET, yytext()); + } + case 194: + break; + case 50: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + } + case 195: + break; + case 117: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.RANDOM, yytext()); + } + case 196: + break; + case 160: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TOGGLEHIGHQUALITY, yytext()); + } + case 197: + break; + case 8: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 198: + break; + case 124: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LENGTH, yytext()); + } + case 199: + break; + case 5: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 200: + break; + case 133: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); + } + case 201: + break; + case 154: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GOTOANDSTOP, yytext()); + } + case 202: + break; + case 49: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + } + case 203: + break; + case 130: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); + } + case 204: + break; + case 145: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); + } + case 205: + break; + case 92: { + String t = yytext(); + return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, t.substring(2, t.length() - 1)); + } + case 206: + break; + case 57: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + } + case 207: + break; + case 88: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + } + case 208: + break; + case 111: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); + } + case 209: + break; + case 64: { + throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 210: + break; + case 105: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); + } + case 211: + break; + case 103: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 212: + break; + case 25: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 213: + break; + case 44: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + } + case 214: + break; + case 100: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 215: + break; + case 76: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + } + case 216: + break; + case 122: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); + } + case 217: + break; + case 91: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); + } + case 218: + break; + case 18: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 219: + break; + case 138: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); + } + case 220: break; case 35: { yybegin(YYINITIAL); // length also includes the trailing quote return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); } - case 178: - break; - case 127: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 179: - break; - case 113: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 180: - break; - case 93: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 181: - break; - case 88: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 182: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 183: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 184: - break; - case 40: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 185: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 186: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 187: - break; - case 117: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); - } - case 188: - break; - case 92: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 189: - break; - case 79: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 190: - break; - case 115: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 191: + case 221: break; case 109: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); } - case 192: + case 222: break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + case 86: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.INT, yytext()); } - case 193: + case 223: break; - case 82: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + case 104: { + string.append(yytext()); + String endtagname = yytext(); + endtagname = endtagname.substring(2, endtagname.length() - 1); + if (endtagname.equals(xmlTagName)) { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML, string.toString()); + } } - case 194: + case 224: break; - case 19: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + case 45: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); } - case 195: - break; - case 91: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); - } - case 196: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 197: - break; - case 112: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 198: + case 225: break; case 70: { string.append('\r'); } - case 199: + case 226: break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + case 136: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STOPDRAG, yytext()); } - case 200: + case 227: break; - case 2: { - yyline++; + case 3: { /*ignore*/ + } - case 201: + case 228: break; - case 86: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + case 28: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); } - case 202: + case 229: break; - case 69: { - string.append('\b'); + case 151: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); } - case 203: + case 230: break; - case 83: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + case 31: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); } - case 204: + case 231: break; - case 46: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + case 112: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); } - case 205: + case 232: break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + case 137: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); } - case 206: + case 233: break; - case 101: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + case 90: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); } - case 207: + case 234: break; - case 65: { - string.append('\"'); + case 148: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); } - case 208: + case 235: break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + case 157: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.IFFRAMELOADED, yytext()); } - case 209: + case 236: break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + case 58: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); } - case 210: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 211: - break; - case 78: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 212: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 213: - break; - case 68: { - string.append('\''); - } - case 214: - break; - case 67: { - string.append('\\'); - } - case 215: - break; - case 126: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 216: - break; - case 114: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 217: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 218: - break; - case 38: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 219: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 220: - break; - case 111: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 221: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 222: - break; - case 110: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 223: - break; - case 77: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 224: - break; - case 123: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 225: + case 237: break; case 37: { yybegin(XML); string.append(yytext()); } - case 226: - break; - case 116: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 227: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 228: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 229: - break; - case 44: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 230: - break; - case 103: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 231: - break; - case 73: { - string.append('\f'); - } - case 232: - break; - case 90: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 233: - break; - case 39: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 234: - break; - case 80: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); - } - case 235: - break; - case 95: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 236: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 237: - break; - case 74: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } case 238: break; - case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + case 95: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); } case 239: break; - case 47: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); - } - case 240: - break; - case 33: { - string.append(yytext()); - } - case 241: - break; - case 12: { - string.setLength(0); - yybegin(STRING); - } - case 242: - break; - case 100: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 243: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 244: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 245: - break; - case 125: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); - } - case 246: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 247: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 248: - break; - case 118: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 249: - break; - case 89: { - String t = yytext(); - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, t.substring(2, t.length() - 1)); - } - case 250: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 251: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 252: - break; - case 45: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 253: - break; - case 48: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 254: - break; - case 55: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 255: - break; case 36: { string.append(yytext()); yyline++; } + case 240: + break; + case 71: { + string.append('\n'); + } + case 241: + break; + case 115: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBORD, yytext()); + } + case 242: + break; + case 134: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); + } + case 243: + break; + case 152: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); + } + case 244: + break; + case 159: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.REMOVEMOVIECLIP, yytext()); + } + case 245: + break; + case 26: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 246: + break; + case 68: { + string.append('\''); + } + case 247: + break; + case 24: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 248: + break; + case 79: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); + } + case 249: + break; + case 146: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LOADMOVIE, yytext()); + } + case 250: + break; + case 118: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); + } + case 251: + break; + case 39: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); + } + case 252: + break; + case 6: { + return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 253: + break; + case 23: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 254: + break; + case 43: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + } + case 255: + break; + case 63: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + } case 256: break; - case 96: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + case 78: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); } case 257: break; - case 1: { + case 67: { + string.append('\\'); } case 258: break; + case 66: { + char val = (char) Integer.parseInt(yytext().substring(1), 8); + string.append(val); + } + case 259: + break; + case 54: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + } + case 260: + break; + case 47: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); + } + case 261: + break; + case 53: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + } + case 262: + break; + case 113: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); + } + case 263: + break; + case 19: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 264: + break; + case 143: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.NEXTFRAME, yytext()); + } + case 265: + break; + case 80: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); + } + case 266: + break; + case 82: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); + } + case 267: + break; + case 22: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 268: + break; + case 142: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STARTDRAG, yytext()); + } + case 269: + break; + case 40: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); + } + case 270: + break; + case 62: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + } + case 271: + break; + case 29: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 272: + break; + case 84: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + } + case 273: + break; + case 60: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + } + case 274: + break; + case 108: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); + } + case 275: + break; + case 51: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + } + case 276: + break; + case 107: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + } + case 277: + break; + case 144: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); + } + case 278: + break; + case 120: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); + } + case 279: + break; + case 13: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); + } + case 280: + break; + case 110: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.TRACE, yytext()); + } + case 281: + break; + case 101: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 282: + break; + case 99: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 283: + break; + case 32: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 284: + break; + case 20: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 285: + break; + case 158: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.LOADVARIABLES, yytext()); + } + case 286: + break; + case 141: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GETTIMER, yytext()); + } + case 287: + break; + case 52: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + } + case 288: + break; + case 55: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + } + case 289: + break; + case 2: { + yyline++; + } + case 290: + break; + case 14: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 291: + break; + case 73: { + string.append('\f'); + } + case 292: + break; + case 87: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + } + case 293: + break; + case 131: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); + } + case 294: + break; + case 161: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.DUPLICATEMOVIECLIP, yytext()); + } + case 295: + break; + case 102: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PLAY, yytext()); + } + case 296: + break; + case 83: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.ORD, yytext()); + } + case 297: + break; + case 72: { + string.append('\t'); + } + case 298: + break; + case 48: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + } + case 299: + break; + case 116: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); + } + case 300: + break; + case 126: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.GETURL, yytext()); + } + case 301: + break; + case 129: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); + } + case 302: + break; + case 114: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.MBCHR, yytext()); + } + case 303: + break; + case 15: { + string.setLength(0); + yybegin(CHARLITERAL); + } + case 304: + break; + case 42: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + } + case 305: + break; + case 7: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 306: + break; + case 89: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + } + case 307: + break; + case 69: { + string.append('\b'); + } + case 308: + break; + case 97: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STOP, yytext()); + } + case 309: + break; + case 147: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.PREVFRAME, yytext()); + } + case 310: + break; + case 11: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 311: + break; + case 46: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + } + case 312: + break; + case 85: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + } + case 313: + break; + case 65: { + string.append('\"'); + } + case 314: + break; + case 106: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + } + case 315: + break; + case 156: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.STOPALLSOUNDS, yytext()); + } + case 316: + break; + case 41: { + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); + } + case 317: + break; + case 128: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.NUMBER_OP, yytext()); + } + case 318: + break; + case 21: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 319: + break; + case 119: { + return new ParsedSymbol(SymbolGroup.GLOBALFUNC, SymbolType.SUBSTR, yytext()); + } + case 320: + break; + case 27: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 321: + break; + case 1: { + } + case 322: + break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java index 57c5c1e29..8574ac323 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java @@ -36,6 +36,12 @@ import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.DO; import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.INCREMENT; import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.PARENT_OPEN; import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.SWITCH; +import com.jpexs.decompiler.flash.action.swf3.ActionNextFrame; +import com.jpexs.decompiler.flash.action.swf3.ActionPlay; +import com.jpexs.decompiler.flash.action.swf3.ActionPrevFrame; +import com.jpexs.decompiler.flash.action.swf3.ActionStop; +import com.jpexs.decompiler.flash.action.swf3.ActionStopSounds; +import com.jpexs.decompiler.flash.action.swf3.ActionToggleQuality; import com.jpexs.decompiler.flash.action.swf4.*; import com.jpexs.decompiler.flash.action.swf5.*; import com.jpexs.decompiler.flash.action.swf6.ActionEnumerate2; @@ -66,14 +72,17 @@ import java.util.logging.Logger; */ public class ActionScriptParser { - public static final int REGISTER_PARENT = 5; - public static final int REGISTER_ROOT = 4; - public static final int REGISTER_SUPER = 3; - public static final int REGISTER_ARGUMENTS = 2; public static final int REGISTER_THIS = 1; + public static final int REGISTER_ARGUMENTS = 2; + public static final int REGISTER_SUPER = 3; + public static final int REGISTER_ROOT = 4; + public static final int REGISTER_PARENT = 5; public static final int REGISTER_GLOBAL = 6; private long uniqLast = 0; private boolean debugMode = false; + /* + * TODO: WITH + */ private String uniqId() { uniqLast++; @@ -193,7 +202,7 @@ public class ActionScriptParser { } } else { - ret.add(s.value.toString().equals("trace") ? new ActionPush(s.value.toString()) : pushConst(s.value.toString())); + ret.add(pushConst(s.value.toString())); ret.add(new ActionGetVariable()); } } @@ -367,28 +376,28 @@ public class ActionScriptParser { int newpos = 1; HashMap registerMap = new HashMap(); - if (preloadParentFlag) { - registerMap.put(1, newpos); - newpos++; - } - if (preloadRootFlag) { - registerMap.put(2, newpos); - newpos++; - } - if (preloadSuperFlag) { - registerMap.put(3, newpos); + if (preloadThisFlag) { + registerMap.put(REGISTER_THIS, newpos); newpos++; } if (preloadArgumentsFlag) { - registerMap.put(4, newpos); + registerMap.put(REGISTER_ARGUMENTS, newpos); newpos++; } - if (preloadThisFlag) { - registerMap.put(5, newpos); + if (preloadSuperFlag) { + registerMap.put(REGISTER_SUPER, newpos); + newpos++; + } + if (preloadRootFlag) { + registerMap.put(REGISTER_ROOT, newpos); + newpos++; + } + if (preloadParentFlag) { + registerMap.put(REGISTER_PARENT, newpos); newpos++; } if (preloadGlobalFlag) { - registerMap.put(6, newpos); + registerMap.put(REGISTER_GLOBAL, newpos); newpos++; } if (newpos < 1) { @@ -397,10 +406,10 @@ public class ActionScriptParser { for (int i = 0; i < 256; i++) { if (usedRegisters.contains(7 + i)) { registerMap.put(7 + i, newpos); - newpos++; if (i < paramNames.size()) { paramRegs.add(0, newpos); } + newpos++; } else { if (i < paramNames.size()) { paramRegs.add(0, 0); @@ -549,10 +558,12 @@ public class ActionScriptParser { constr = (typeToActions(globalClassTypeStr, constr)); } else { - ifbody.add(new ActionPush(new RegisterNumber(isStatic ? 1 : 2))); - ifbody.add(pushConst(fname)); - ifbody.addAll(function(!isInterface, "", true)); - ifbody.add(new ActionSetMember()); + if (!isInterface) { + ifbody.add(new ActionPush(new RegisterNumber(isStatic ? 1 : 2))); + ifbody.add(pushConst(fname)); + ifbody.addAll(function(!isInterface, "", true)); + ifbody.add(new ActionSetMember()); + } } break; case VAR: @@ -595,8 +606,10 @@ public class ActionScriptParser { if (constr.isEmpty()) { List val = new ArrayList(); - val.add(new ActionDefineFunction(null, new ArrayList(), 0, SWF.DEFAULT_VERSION)); - val.add(new ActionStoreRegister(1)); + val.add(new ActionDefineFunction("", new ArrayList(), 0, SWF.DEFAULT_VERSION)); + if (!isInterface) { + val.add(new ActionStoreRegister(1)); + } constr.addAll(typeToActions(globalClassTypeStr, val)); } if (!extendsStr.isEmpty()) { @@ -604,17 +617,22 @@ public class ActionScriptParser { constr.addAll(typeToActions(extendsStr, null)); constr.add(new ActionExtends()); } - constr.add(new ActionPush(new RegisterNumber(1))); - constr.add(pushConst("prototype")); - constr.add(new ActionGetMember()); - constr.add(new ActionStoreRegister(2)); - constr.add(new ActionPop()); + if (!isInterface) { + constr.add(new ActionPush(new RegisterNumber(1))); + constr.add(pushConst("prototype")); + constr.add(new ActionGetMember()); + constr.add(new ActionStoreRegister(2)); + constr.add(new ActionPop()); + } - for (List imp : implementsStr) { - List globImp = new ArrayList(); - globImp.add("_global"); - globImp.addAll(imp); - constr.addAll(typeToActions(globImp, null)); + if (!implementsStr.isEmpty()) { + for (List imp : implementsStr) { + List globImp = new ArrayList(); + globImp.add("_global"); + globImp.addAll(imp); + constr.addAll(typeToActions(globImp, null)); + } + constr.add(new ActionPush(new Long(implementsStr.size()))); constr.addAll(typeToActions(globalClassTypeStr, null)); constr.add(new ActionImplementsOp()); } @@ -639,6 +657,325 @@ public class ActionScriptParser { return null; } switch (s.type) { + case TRACE: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + ret.add(new ActionTrace()); + expected(SymbolType.PARENT_CLOSE); + break; + case GETURL: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + expected(s, lexer.yyline(), SymbolType.PARENT_CLOSE, SymbolType.COMMA); + int getuMethod = 1; + if (s.type == SymbolType.COMMA) { + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + if (s.type == SymbolType.COMMA) { + s = lex(); + expected(s, lexer.yyline(), SymbolType.STRING); + if (s.value.equals("GET")) { + getuMethod = 1; + } else if (s.value.equals("POST")) { + getuMethod = 2; + } else { + throw new ParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline()); + } + } else { + lexer.pushback(s); + } + } else { + lexer.pushback(s); + ret.add(pushConst("")); + } + ret.add(new ActionGetURL2(getuMethod, false, false)); + expected(SymbolType.PARENT_CLOSE); + break; + case GOTOANDSTOP: + expected(SymbolType.PARENT_OPEN); + List gtsFrame = expression(registerVars, inFunction, inMethod, inMethod); + s = lex(); + if (s.type == SymbolType.COMMA) { + s = lex(); + gtsFrame = expression(registerVars, inFunction, inMethod, inMethod); + } else { + lexer.pushback(s); + } + ret.addAll(gtsFrame); + ret.add(new ActionGotoFrame2(false, false, (int) (long) (Long) s.value)); + expected(SymbolType.PARENT_CLOSE); + break; + case NEXTFRAME: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionNextFrame()); + break; + case PLAY: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionPlay()); + break; + case PREVFRAME: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionPrevFrame()); + break; + case TELLTARGET: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionSetTarget2()); + break; + case STOP: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionStop()); + break; + case STOPALLSOUNDS: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionStopSounds()); + break; + case TOGGLEHIGHQUALITY: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionToggleQuality()); + break; + case ORD: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionCharToAscii()); + ret.add(new ActionPop()); + break; + case CHR: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionAsciiToChar()); + ret.add(new ActionPop()); + break; + case DUPLICATEMOVIECLIP: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionCloneSprite()); + ret.add(new ActionPop()); + break; + case STOPDRAG: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionEndDrag()); + break; + case GETTIMER: + expected(SymbolType.PARENT_OPEN); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionGetTime()); + ret.add(new ActionPop()); + break; + case LOADVARIABLES: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + expected(s, lexer.yyline(), SymbolType.PARENT_CLOSE, SymbolType.COMMA); + int lvmethod = 1; + if (s.type == SymbolType.COMMA) { + s = lex(); + expected(s, lexer.yyline(), SymbolType.STRING); + if (s.value.equals("POST")) { + lvmethod = 2; + } else if (s.value.equals("GET")) { + lvmethod = 1; + } else { + throw new ParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline()); + } + } else { + lexer.pushback(s); + } + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionGetURL2(lvmethod, false, true)); + break; + case LOADMOVIE: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + expected(s, lexer.yyline(), SymbolType.PARENT_CLOSE, SymbolType.COMMA); + int method = 1; + if (s.type == SymbolType.COMMA) { + s = lex(); + expected(s, lexer.yyline(), SymbolType.STRING); + if (s.value.equals("POST")) { + method = 2; + } else if (s.value.equals("GET")) { + method = 1; + } else { + throw new ParseException("Invalid method, \"GET\" or \"POST\" expected.", lexer.yyline()); + } + } else { + lexer.pushback(s); + } + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionGetURL2(method, true, false)); + break; + case GOTOANDPLAY: + expected(SymbolType.PARENT_OPEN); + List gtpFrame = expression(registerVars, inFunction, inMethod, inMethod); + s = lex(); + if (s.type == SymbolType.COMMA) { + s = lex(); + gtpFrame = expression(registerVars, inFunction, inMethod, inMethod); + } else { + lexer.pushback(s); + } + ret.addAll(gtpFrame); + ret.add(new ActionGotoFrame2(true, false, (int) (long) (Long) s.value)); + expected(SymbolType.PARENT_CLOSE); + break; + case MBORD: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionMBCharToAscii()); + ret.add(new ActionPop()); + break; + case MBCHR: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionMBAsciiToChar()); + ret.add(new ActionPop()); + break; + case MBLENGTH: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionMBStringLength()); + ret.add(new ActionPop()); + break; + case MBSUBSTRING: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionMBStringExtract()); + ret.add(new ActionPop()); + break; + case SUBSTR: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.COMMA); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionStringExtract()); + ret.add(new ActionPop()); + break; + /*case LENGTH: + break;*/ + case RANDOM: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionRandomNumber()); + ret.add(new ActionPop()); + break; + case REMOVEMOVIECLIP: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionRemoveSprite()); + break; + case STARTDRAG: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + if (s.type == SymbolType.COMMA) { + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + if (s.type == SymbolType.COMMA) { + ret.add(new ActionPush(Boolean.TRUE)); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + if (s.type == SymbolType.COMMA) { + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + if (s.type == SymbolType.COMMA) { + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + s = lex(); + if (s.type == SymbolType.COMMA) { + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + } else { + lexer.pushback(s); + ret.add(new ActionPush(new Long(0))); + } + } else { + lexer.pushback(s); + ret.add(new ActionPush(new Long(0))); + ret.add(new ActionPush(new Long(0))); + } + } else { + lexer.pushback(s); + ret.add(new ActionPush(new Long(0))); + ret.add(new ActionPush(new Long(0))); + ret.add(new ActionPush(new Long(0))); + } + } else { + lexer.pushback(s); + ret.add(new ActionPush(Boolean.FALSE)); + } + } else { + ret.add(new ActionPush(Boolean.FALSE)); + ret.add(new ActionPush(Boolean.FALSE)); + lexer.pushback(s); + } + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionStartDrag()); + break; + case INT: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionToInteger()); + ret.add(new ActionPop()); + break; + + case TARGETPATH: + break; + case NUMBER_OP: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionToNumber()); + ret.add(new ActionPop()); + break; + case STRING_OP: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + ret.add(new ActionToString()); + ret.add(new ActionPop()); + break; + case IFFRAMELOADED: + expected(SymbolType.PARENT_OPEN); + ret.addAll(expression(registerVars, inFunction, inMethod, inMethod)); + expected(SymbolType.PARENT_CLOSE); + expected(SymbolType.CURLY_OPEN); + List iflComs = commands(registerVars, inFunction, inMethod, forinlevel); + expected(SymbolType.CURLY_CLOSE); + ret.add(new ActionWaitForFrame2(iflComs.size())); + ret.addAll(iflComs); + break; case CLASS: List classTypeStr = type(); s = lex(); @@ -809,24 +1146,16 @@ public class ActionScriptParser { case INCREMENT: case DECREMENT: ret.addAll(var); - ret.addAll(var); - Action at = ret.remove(ret.size() - 1); - ret.addAll(var); + List val = new ArrayList(); + val.addAll(var); + if (s.type == SymbolType.INCREMENT) { - ret.add(new ActionIncrement()); + val.add(new ActionIncrement()); } if (s.type == SymbolType.DECREMENT) { - ret.add(new ActionDecrement()); - } - if (at instanceof ActionGetMember) { - ret.add(new ActionSetMember()); - } - if (at instanceof ActionGetVariable) { - ret.add(new ActionSetVariable()); - } - if (at instanceof ActionGetProperty) { - ret.add(new ActionSetProperty()); + val.add(new ActionDecrement()); } + ret = gettoset(ret, val); break; case PARENT_OPEN: //function call List callcmds = new ArrayList(); @@ -844,16 +1173,9 @@ public class ActionScriptParser { } else if (callcmds.get(callcmds.size() - 1) instanceof ActionGetVariable) { callcmds.remove(callcmds.size() - 1); ActionPush ap = (ActionPush) callcmds.get(callcmds.size() - 1); - if (ap.values.get(0).equals("trace")) { - callcmds.remove(callcmds.size() - 1); - callcmds.addAll(expression(registerVars, inFunction, inMethod, true)); - expected(SymbolType.COMMA, SymbolType.PARENT_CLOSE); - callcmds.add(new ActionTrace()); - } else { - callcmds.addAll(0, call(registerVars, inFunction, inMethod)); - callcmds.add(new ActionCallFunction()); - callcmds.add(new ActionPop()); - } + callcmds.addAll(0, call(registerVars, inFunction, inMethod)); + callcmds.add(new ActionCallFunction()); + callcmds.add(new ActionPop()); } ret.addAll(callcmds); break; @@ -946,19 +1268,24 @@ public class ActionScriptParser { ParsedSymbol s2 = lex(); if (s2.type == SymbolType.IDENTIFIER) { objIdent = s2.value.toString(); - if (inFunction) { - for (int i = 0; i < 256; i++) { - if (!registerVars.containsValue(i)) { - registerVars.put(objIdent, i); - innerExprReg = i; - break; - } - } - } + ParsedSymbol s3 = lex(); if (s3.type == SymbolType.IN) { + if (inFunction) { + for (int i = 0; i < 256; i++) { + if (!registerVars.containsValue(i)) { + registerVars.put(objIdent, i); + innerExprReg = i; + break; + } + } + } collection = expression(registerVars, inFunction, inMethod, true); forin = true; + } else { + lexer.pushback(s3); + lexer.pushback(s2); + lexer.pushback(s); } } else { lexer.pushback(s2); @@ -971,7 +1298,6 @@ public class ActionScriptParser { List forExpr = new ArrayList(); if (!forin) { ret.addAll(nonempty(command(registerVars, inFunction, inMethod, forinlevel))); - expected(SymbolType.SEMICOLON); forExpr = expression(registerVars, inFunction, inMethod, true); expected(SymbolType.SEMICOLON); forFinalCommands = command(registerVars, inFunction, inMethod, forinlevel); @@ -1217,7 +1543,9 @@ public class ActionScriptParser { ret.add(new ActionThrow()); break; default: - lexer.pushback(s); + if (s.type != SymbolType.SEMICOLON) { + lexer.pushback(s); + } if (debugMode) { System.out.println("/command"); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java index 43bed0ef8..904bfb194 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java @@ -31,5 +31,6 @@ public enum SymbolGroup { INTEGER, DOUBLE, TYPENAME, - EOF + EOF, + GLOBALFUNC } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java index 6abf4f4d3..23002fb63 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java @@ -133,5 +133,37 @@ public enum SymbolType { INTEGER, DOUBLE, TYPENAME, - EOF + EOF, + TRACE, + GETURL, + GOTOANDSTOP, + NEXTFRAME, + PLAY, + PREVFRAME, + TELLTARGET, + STOP, + STOPALLSOUNDS, + TOGGLEHIGHQUALITY, + ORD, + CHR, + DUPLICATEMOVIECLIP, + STOPDRAG, + GETTIMER, + LOADVARIABLES, + LOADMOVIE, + GOTOANDPLAY, + MBORD, + MBCHR, + MBLENGTH, + MBSUBSTRING, + RANDOM, + REMOVEMOVIECLIP, + STARTDRAG, + SUBSTR, + LENGTH, //string.length + INT, + TARGETPATH, + NUMBER_OP, + STRING_OP, + IFFRAMELOADED } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex index f649bcf0c..ee9fae172 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.flex @@ -157,7 +157,38 @@ SingleCharacter = [^\r\n\'\\] "null" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NULL,yytext()); } "this" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); } "true" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); } - + "getUrl" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETURL,yytext()); } + "trace" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TRACE,yytext()); } + "gotoAndStop" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDSTOP,yytext()); } + "nextFrame" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NEXTFRAME,yytext()); } + "play" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PLAY,yytext()); } + "prevFrame" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.PREVFRAME,yytext()); } + "tellTarget" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TELLTARGET,yytext()); } + "stop" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOP,yytext()); } + "stopAllSounds" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPALLSOUNDS,yytext()); } + "toggleHighQuality" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TOGGLEHIGHQUALITY,yytext()); } + "ifFrameLoaded" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.IFFRAMELOADED,yytext()); } + "ord" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.ORD,yytext()); } + "chr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.CHR,yytext()); } + "duplicateMovieClip" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.DUPLICATEMOVIECLIP,yytext()); } + "stopDrag" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STOPDRAG,yytext()); } + "getTimer" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GETTIMER,yytext()); } + "loadVariables" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADVARIABLES,yytext()); } + "loadMovie" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LOADMOVIE,yytext()); } + "gotoAndPlay" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.GOTOANDPLAY,yytext()); } + "mbord" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBORD,yytext()); } + "mbchr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBCHR,yytext()); } + "mblength" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBLENGTH,yytext()); } + "mbsubstring" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.MBSUBSTRING,yytext()); } + "random" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.RANDOM,yytext()); } + "removeMovieClip" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.REMOVEMOVIECLIP,yytext()); } + "startDrag" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STARTDRAG,yytext()); } + "substr" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.SUBSTR,yytext()); } + "length" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.LENGTH,yytext()); } + "int" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.INT,yytext()); } + "targetPath" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.TARGETPATH,yytext()); } + "Number" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.NUMBER_OP,yytext()); } + "String" { return new ParsedSymbol(SymbolGroup.GLOBALFUNC,SymbolType.STRING_OP,yytext()); } /* operators */ diff --git a/trunk/src/com/jpexs/decompiler/flash/action/special/ActionStore.java b/trunk/src/com/jpexs/decompiler/flash/action/special/ActionStore.java new file mode 100644 index 000000000..033193ea7 --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/flash/action/special/ActionStore.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.special; + +import com.jpexs.decompiler.flash.action.Action; +import java.util.List; + +/** + * + * @author JPEXS + */ +public interface ActionStore { + + public int getStoreSize(); + + public void setStore(List store); +} diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java index f043802fa..813b8b229 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGoToLabel.java @@ -34,6 +34,11 @@ public class ActionGoToLabel extends Action { public String label; + public ActionGoToLabel(String label) { + super(0x8C, 0); + this.label = label; + } + public ActionGoToLabel(int actionLength, SWFInputStream sis, int version) throws IOException { super(0x8C, actionLength); //byte data[] = sis.readBytes(actionLength); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java index 645cebec0..d073a67cf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionGotoFrame.java @@ -33,6 +33,11 @@ public class ActionGotoFrame extends Action { public int frame; + public ActionGotoFrame(int frame) { + super(0x81, 2); + this.frame = frame; + } + public ActionGotoFrame(SWFInputStream sis) throws IOException { super(0x81, 2); frame = sis.readUI16(); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java index d4a06b6be..e5dce2d73 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java @@ -16,33 +16,47 @@ */ package com.jpexs.decompiler.flash.action.swf3; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.ActionGraph; import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; -import com.jpexs.decompiler.flash.action.treemodel.WaitForFrameTreeItem; +import com.jpexs.decompiler.flash.action.special.ActionStore; +import com.jpexs.decompiler.flash.action.treemodel.DirectValueTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.clauses.IfFrameLoadedTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Stack; -public class ActionWaitForFrame extends Action { +public class ActionWaitForFrame extends Action implements ActionStore { public int frame; public int skipCount; + public List skipped; public ActionWaitForFrame(SWFInputStream sis) throws IOException { super(0x8A, 3); frame = sis.readUI16(); skipCount = sis.readUI8(); + skipped = new ArrayList(); + for (int i = 0; i < skipCount; i++) { + skipped.add(sis.readAction()); + } } @Override public String toString() { - return "WaitForFrame " + frame + " " + skipCount; + String ret = "WaitForFrame " + frame + " " + skipCount; + for (Action a : skipped) { + ret += "\r\n" + a.toString(); + } + return ret; } @Override @@ -52,6 +66,9 @@ public class ActionWaitForFrame extends Action { try { sos.writeUI16(frame); sos.writeUI8(skipCount); + for (Action a : skipped) { + sos.write(a.getBytes(SWF.DEFAULT_VERSION)); + } sos.close(); } catch (IOException e) { } @@ -62,10 +79,24 @@ public class ActionWaitForFrame extends Action { super(0x8A, -1); frame = (int) lexLong(lexer); skipCount = (int) lexLong(lexer); + skipped = new ArrayList(); } @Override public void translate(Stack stack, List output, java.util.HashMap regNames, HashMap variables, HashMap functions) { - output.add(new WaitForFrameTreeItem(this, frame, skipCount)); + GraphTargetItem frameTi = new DirectValueTreeItem(null, 0, new Long(frame), new ArrayList()); + List body = ActionGraph.translateViaGraph(regNames, variables, functions, skipped, SWF.DEFAULT_VERSION); + output.add(new IfFrameLoadedTreeItem(frameTi, body, this)); + } + + @Override + public int getStoreSize() { + return skipCount; + } + + @Override + public void setStore(List store) { + skipped = store; + skipCount = store.size(); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java index 3d0b791f2..82383f3f7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java @@ -37,6 +37,13 @@ public class ActionGetURL2 extends Action { public boolean loadTargetFlag; public boolean loadVariablesFlag; + public ActionGetURL2(int sendVarsMethod, boolean loadTargetFlag, boolean loadVariablesFlag) { + super(0x9A, 1); + this.loadTargetFlag = loadTargetFlag; + this.loadVariablesFlag = loadVariablesFlag; + this.sendVarsMethod = sendVarsMethod; + } + public ActionGetURL2(SWFInputStream sis) throws IOException { super(0x9A, 1); sendVarsMethod = (int) sis.readUB(2); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java index 8aab402b2..ae686bda1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java @@ -35,6 +35,13 @@ public class ActionGotoFrame2 extends Action { boolean playFlag; public int sceneBias; + public ActionGotoFrame2(boolean playFlag, boolean sceneBiasFlag, int sceneBias) { + super(0x9F, 0); + this.sceneBiasFlag = sceneBiasFlag; + this.playFlag = playFlag; + this.sceneBias = sceneBias; + } + public ActionGotoFrame2(int actionLength, SWFInputStream sis) throws IOException { super(0x9F, actionLength); sis.readUB(6); //reserved diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java index 4182ffff9..5e0c4b251 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.treemodel.ConstantPool; import com.jpexs.decompiler.flash.action.treemodel.DecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.GetVariableTreeItem; import com.jpexs.decompiler.flash.action.treemodel.IncrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.PostDecrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.PostIncrementTreeItem; @@ -65,6 +66,22 @@ public class ActionSetVariable extends Action { } } } + if (value instanceof IncrementTreeItem) { + if (((IncrementTreeItem) value).object instanceof GetVariableTreeItem) { + if (((GetVariableTreeItem) ((IncrementTreeItem) value).object).name.equals(name)) { + output.add(new PostIncrementTreeItem(this, ((IncrementTreeItem) value).object)); + return; + } + } + } + if (value instanceof DecrementTreeItem) { + if (((DecrementTreeItem) value).object instanceof GetVariableTreeItem) { + if (((GetVariableTreeItem) ((DecrementTreeItem) value).object).name.equals(name)) { + output.add(new PostDecrementTreeItem(this, ((DecrementTreeItem) value).object)); + return; + } + } + } SetVariableTreeItem svt = new SetVariableTreeItem(this, name, value); output.add(svt); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java index 266a7c2a8..75d5fe1a8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionWaitForFrame2.java @@ -16,26 +16,51 @@ */ package com.jpexs.decompiler.flash.action.swf4; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.ActionGraph; import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; -import com.jpexs.decompiler.flash.action.treemodel.WaitForFrame2TreeItem; +import com.jpexs.decompiler.flash.action.special.ActionStore; +import com.jpexs.decompiler.flash.action.treemodel.clauses.IfFrameLoadedTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Stack; -public class ActionWaitForFrame2 extends Action { +public class ActionWaitForFrame2 extends Action implements ActionStore { public int skipCount; + List skipped; + + public ActionWaitForFrame2(int skipCount) { + super(0x8D, 1); + this.skipCount = skipCount; + } + + @Override + public int getStoreSize() { + return skipCount; + } + + @Override + public void setStore(List store) { + skipped = store; + skipCount = store.size(); + } public ActionWaitForFrame2(SWFInputStream sis) throws IOException { super(0x8D, 1); skipCount = sis.readUI8(); + skipped = new ArrayList(); + for (int i = 0; i < skipCount; i++) { + skipped.add(sis.readAction()); + } } public ActionWaitForFrame2(FlasmLexer lexer) throws IOException, ParseException { @@ -57,12 +82,17 @@ public class ActionWaitForFrame2 extends Action { @Override public String toString() { - return "WaitForFrame2 " + skipCount; + String ret = "WaitForFrame2 " + skipCount; + for (Action a : skipped) { + ret += "\r\n" + a.toString(); + } + return ret; } @Override public void translate(Stack stack, List output, java.util.HashMap regNames, HashMap variables, HashMap functions) { GraphTargetItem frame = stack.pop(); - output.add(new WaitForFrame2TreeItem(this, frame, skipCount)); + List body = ActionGraph.translateViaGraph(regNames, variables, functions, skipped, SWF.DEFAULT_VERSION); + output.add(new IfFrameLoadedTreeItem(frame, body, this)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index 4d0006fcd..d85dcbe53 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.action.swf5; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.treemodel.DecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.GetMemberTreeItem; import com.jpexs.decompiler.flash.action.treemodel.IncrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.PostDecrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.PostIncrementTreeItem; @@ -41,7 +42,7 @@ public class ActionSetMember extends Action { @Override public void translate(Stack stack, List output, java.util.HashMap regNames, HashMap variables, HashMap functions) { GraphTargetItem value = stack.pop(); - GraphTargetItem objectName = stack.pop(); + GraphTargetItem memberName = stack.pop(); GraphTargetItem object = stack.pop(); if (value instanceof IncrementTreeItem) { GraphTargetItem obj = ((IncrementTreeItem) value).object; @@ -63,6 +64,27 @@ public class ActionSetMember extends Action { } } } - output.add(new SetMemberTreeItem(this, object, objectName, value)); + + if (value instanceof IncrementTreeItem) { + if (((IncrementTreeItem) value).object instanceof GetMemberTreeItem) { + if (((GetMemberTreeItem) ((IncrementTreeItem) value).object).object.equals(object)) { + if (((GetMemberTreeItem) ((IncrementTreeItem) value).object).memberName.equals(memberName)) { + output.add(new PostIncrementTreeItem(this, ((IncrementTreeItem) value).object)); + return; + } + } + } + } + if (value instanceof DecrementTreeItem) { + if (((DecrementTreeItem) value).object instanceof GetMemberTreeItem) { + if (((GetMemberTreeItem) ((DecrementTreeItem) value).object).object.equals(object)) { + if (((GetMemberTreeItem) ((DecrementTreeItem) value).object).memberName.equals(memberName)) { + output.add(new PostDecrementTreeItem(this, ((DecrementTreeItem) value).object)); + return; + } + } + } + } + output.add(new SetMemberTreeItem(this, object, memberName, value)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToNumberTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToNumberTreeItem.java index 3ad826730..fe780ee2f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToNumberTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToNumberTreeItem.java @@ -32,7 +32,7 @@ public class ToNumberTreeItem extends TreeItem { @Override public String toString(ConstantPool constants) { - return value.toString(Helper.toList(constants)) + hilight(".valueOf()"); + return hilight("Number(") + value.toString(Helper.toList(constants)) + hilight(")"); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToStringTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToStringTreeItem.java index b141c3cdd..2c1bfa547 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToStringTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/ToStringTreeItem.java @@ -32,7 +32,7 @@ public class ToStringTreeItem extends TreeItem { @Override public String toString(ConstantPool constants) { - return value.toString(Helper.toList(constants)) + hilight(".toString()"); + return hilight("String(") + value.toString(Helper.toList(constants)) + hilight(")"); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/clauses/IfFrameLoadedTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/clauses/IfFrameLoadedTreeItem.java new file mode 100644 index 000000000..3569b8c00 --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/clauses/IfFrameLoadedTreeItem.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.treemodel.clauses; + +import com.jpexs.decompiler.flash.action.treemodel.ConstantPool; +import com.jpexs.decompiler.flash.action.treemodel.TreeItem; +import com.jpexs.decompiler.flash.graph.Block; +import com.jpexs.decompiler.flash.graph.ContinueItem; +import com.jpexs.decompiler.flash.graph.Graph; +import com.jpexs.decompiler.flash.graph.GraphSourceItem; +import com.jpexs.decompiler.flash.graph.GraphTargetItem; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author JPEXS + */ +public class IfFrameLoadedTreeItem extends TreeItem implements Block { + + private List actions; + private GraphTargetItem frame; + + public IfFrameLoadedTreeItem(GraphTargetItem frame, List actions, GraphSourceItem instruction) { + super(instruction, NOPRECEDENCE); + this.actions = actions; + this.frame = frame; + } + + @Override + public String toString(ConstantPool constants) { + return hilight("ifFrameLoaded(") + frame.toString(constants) + hilight(")") + "\r\n" + hilight("{") + "\r\n" + Graph.graphToString(actions, constants) + "}"; + } + + @Override + public boolean needsSemicolon() { + return false; + } + + @Override + public List getContinues() { + return new ArrayList(); + } + + @Override + public List> getSubs() { + List> ret = new ArrayList>(); + ret.add(actions); + return ret; + } +} diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/graphics/edit16.png b/trunk/src/com/jpexs/decompiler/flash/gui/graphics/edit16.png new file mode 100644 index 000000000..046811ed7 Binary files /dev/null and b/trunk/src/com/jpexs/decompiler/flash/gui/graphics/edit16.png differ